⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectivity_core_utils.cpp

📁 270的linux说明
💻 CPP
📖 第 1 页 / 共 5 页
字号:
GracefulExit:	*pTime = TotalTime;	return bRet;}bool TCPIsReachableEx(int *pReachable, unsigned int *pTime, PURI_INFO pUri, char* ProUri, unsigned int *pTimeOut, unsigned int *pRetryCount, IntelMobileString& pNetworkAdaptorKey,unsigned long ulSelectedIP=0){	int		app;	int		conn;	bool	bRet = false;	CQTime	cQTime;	__int64	StartTime;	__int64	StopTime;	*pReachable	= false;	while(*pRetryCount)	{		if ( pTime )			*pTime = 0;		// get port		app	= pUri->Port;		StartTime =	cQTime.GetTimeEx();		//now we didn't support Proxy in TCP protocal 		// connect		if (pUri->DestPath.length()	)			conn = (int)socketClientEx( pUri->pHostIP, app, pTimeOut, pRetryCount, pNetworkAdaptorKey, ulSelectedIP);		if (conn >= 0) 		{			*pReachable	= true;			StopTime = cQTime.GetTimeEx();			if ( pTime )				*pTime = (unsigned int)(StopTime - StartTime);			bRet = true;			close(conn);			break;		}		else		{			(*pRetryCount)--;			close(conn);		}			}	return bRet;}bool UDPIsReachableEx(int *pReachable, unsigned int *pTime, PURI_INFO pUri, char* ProUri, unsigned int *pTimeOut, unsigned int *pRetryCount, IntelMobileString& pNetworkAdaptorKey){	bool	bRet = false;	SOCKET	conn;	string	Response;	CQTime	cQTime;	__int64	StartTime;	__int64	StopTime;	struct sockaddr_in sa, sa1;	const char buf[] = "hello";	*pReachable	= false;	while(*pRetryCount)	{		if ( pUri->pHostIP == NULL)			goto GracefulExit;		memcpy((void*)&sa.sin_addr,	(void*)pUri->pHostIP->h_addr, pUri->pHostIP->h_length);		sa.sin_family =	pUri->pHostIP->h_addrtype;		sa.sin_port	= htons(pUri->Port);		memset(&(sa.sin_zero), 0, 8);		if ((conn =	socket(pUri->pHostIP->h_addrtype,SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET )			goto GracefulExit;		if (setsockopt(conn, SOL_SOCKET, SO_SNDTIMEO ,	(char *)pTimeOut, sizeof(int)) != 0)			goto GracefulExit;		StartTime =	cQTime.GetTimeEx();		if(pNetworkAdaptorKey != IntelMobileText("Any"))		{						bool mFlag = getIpofNetworkAdptor(&sa1, pNetworkAdaptorKey);			if(!mFlag)				goto GracefulExit;			if ( bind(conn, (SOCKADDR*)&sa1, sizeof(sa1)) ==	SOCKET_ERROR )				goto GracefulExit;		}		if ( sendto( conn, buf, (int)strlen(buf),	0, (SOCKADDR*)&sa, sizeof(sa) ) == SOCKET_ERROR )			goto GracefulExit;		*pReachable	= true;		StopTime = cQTime.GetTimeEx();		if ( pTime )			*pTime = (unsigned int)(StopTime - StartTime);		bRet = true;	GracefulExit://		int eError = WSAGetLastError();		(*pRetryCount)--;		if(bRet)			break;	}	close(conn);	return bRet;}bool FTPIsReachableEx(int *pReachable, unsigned int *pTime, PURI_INFO pUri, char* ProUri,IntelMobileString& pUsername, IntelMobileString& pPassword, unsigned int *pTimeOut, unsigned int *pRetryCount, IntelMobileString& pNetworkAdaptorKey){	try {		//USES_CONVERSION;		int ctrl_sockfd, data_sockfd, flag=1,len;		struct sockaddr_in  serv_addr, tempAddr;		char *pport,*ipaddr;		char szBuffer[BUFFERSIZE]={0};		len = sizeof(tempAddr);		bool	bRet = false;		CQTime	cQTime;		__int64	StartTime;		__int64	StopTime;				int iRetCode = 0;     		bool loop = true, line=true;		HANDLE   hThread = 0, hThread1 = 0;		if(*pTimeOut == 0)		*pTimeOut = MAXTIMEOUT;			while(*pRetryCount)		{					if ( pTime )				*pTime = 0;			*pReachable=false;			if ( pUri->Port	== 0 )				pUri->Port=FTPPORT;						StartTime =	cQTime.GetTimeEx();			if(ProUri != NULL && strcmp(ProUri,"")) //using proxy			{				URI_INFO proxy ;				ParseURI( ProUri, &proxy);				if ( proxy.DestPath.length() )					ctrl_sockfd= (int)socketClientEx( proxy.pHostIP, proxy.Port, pTimeOut, NULL, pNetworkAdaptorKey,0);			}			else // no proxy			{				if ( pUri->DestPath.length() )					ctrl_sockfd= (int)socketClientEx( pUri->pHostIP, pUri->Port, pTimeOut, NULL, pNetworkAdaptorKey,0);			}			if (ctrl_sockfd< 0)			{				perror("conn<0\n");				goto GracefulExit;			}			if(getsockname(ctrl_sockfd,  (struct sockaddr *)&tempAddr,   &len)<0) {				perror("getsockname");				close(ctrl_sockfd);				return INVALID_SOCKET;			}			//create 			if((data_sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)			{				perror("socket");				return INVALID_SOCKET;					} 			bzero((char*)&serv_addr, sizeof(serv_addr));				serv_addr.sin_family=AF_INET;			serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);			serv_addr.sin_port=htons(0);			if(bind(data_sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)			{				perror("bind\n");				close(data_sockfd);				return INVALID_SOCKET;					}					len=sizeof(serv_addr);			if(getsockname(data_sockfd, (struct sockaddr*)&serv_addr, &len)<0)			{				perror("getsockname\n");				close(data_sockfd);				return INVALID_SOCKET;					}				pport  = (char *)&serv_addr.sin_port;			ipaddr = (char *)&tempAddr.sin_addr;			#define  UC(b)  (((int)b)&0xff)									if(ProUri!=NULL)  //using proxy			{				if(pUsername.length())					sprintf(szBuffer, "user ftp://%s@%s/%s\r\n", pUsername.c_str(), pUri->DestPath.c_str(), pUri->FileName.c_str());				else					sprintf(szBuffer, "user ftp://%s@%s/%s\r\n", "anonymous", pUri->DestPath.c_str(), pUri->FileName.c_str());			//	sprintf(szBuffer, "user anonymous@ftp.netscape.com\r\n");			//	sprintf(szBuffer, "CONNECT ftp://anonymous@ftp.pku.edu.cn/\r\n");			//	sprintf(szBuffer, "user ftp://anonymous@ftp.pku.edu.cn/\r\n");			//	sprintf(szBuffer, "USER ftp://anonymous@ftp.pku.edu.cn/\r\n");			}			else				sprintf(szBuffer,"PORT %d,%d,%d,%d,%d,%d\r\n",UC(ipaddr[0]), UC(ipaddr[1]), UC(ipaddr[2]), UC(ipaddr[3]),UC(pport/256), UC(pport%256));			if( listen(data_sockfd, 1) < 0) {				perror("listen");				close(data_sockfd);			}			printf("send %s\n", szBuffer);			if( send(ctrl_sockfd,szBuffer,strlen(szBuffer),0) <= 0)			{				perror("send");				return 0;			}		do		{			//getReplay			memset(szBuffer,0,BUFFERSIZE);			/*iRetCode=0;			while( (recv(ctrl_sockfd, szBuffer, BUFFERSIZE, MSG_PEEK) > 0) ){				recv(ctrl_sockfd, szBuffer, BUFFERSIZE, 0);				printf("%s\n", szBuffer);			}			*/			/*while( line ) {				iRetCode = GetLine(ctrl_sockfd, szBuffer);				(void)strtok(szBuffer,"\r\n");				//puts(szBuffer);				if( szBuffer[3] != '-' && iRetCode > 0 || iRetCode ==0 )					line = false;				memset(szBuffer,0,1024);			}			line=true;            		*/			iRetCode = GetLine(ctrl_sockfd, szBuffer);			if( szBuffer[3] == '-' || iRetCode <= 0 )			{				printf("continue\n");				continue;				}			printf("iRetCode%d\n",iRetCode);			StopTime=cQTime.GetTimeEx();			switch(iRetCode)			{				case 200:	//Command okay			case 230:	//Login OK, Proceed				loop=false;						*pReachable	= true;				bRet = true;				if ( pTime )					*pTime = (unsigned int)(StopTime-StartTime);								break;			case 220:	//Welcome to VINEYARD FTP service			case 503:	//Login with USER first.			case 530:	//Please login with USER and PASS or Login incorrect				sprintf(szBuffer, "USER ");				if(pUsername.length())				{					strcat(szBuffer, pUsername.c_str());					strcat(szBuffer, "\r\n");				}				else					strcat(szBuffer, "anonymous\r\n");				if( send(ctrl_sockfd,szBuffer,strlen(szBuffer),0) <= 0)				{					perror("send");					return 0;				}				printf("send %s\n", szBuffer);				break;			case 331:	//331 Please specify the password.				sprintf(szBuffer, "PASS ");				if(pPassword.length())				{					strcat(szBuffer, pPassword.c_str());					strcat(szBuffer, "\r\n");				}				else					strcat(szBuffer, "anonymous\r\n");				if( send(ctrl_sockfd,szBuffer,strlen(szBuffer),0) <= 0)				{					perror("send");					return 0;				}				printf("send %s\n", szBuffer);				break;			default:				printf("default\n");				loop=false;						*pReachable	= false;				bRet = false;				if ( pTime )					*pTime = (unsigned int)(StopTime-StartTime);								break;			}		}		while(loop&&iRetCode!=0);	if(ctrl_sockfd>0)close(ctrl_sockfd);	if(data_sockfd>0)close(data_sockfd);		GracefulExit:			//int dwLen=GetLastError();					(*pRetryCount)--;			if(bRet)				break;			}				return bRet;	}	catch(...) {		THROWIMEXCEPTION("80043216");	}}bool ICMPIsReachableEx(int *pReachable, unsigned int *pTime, PURI_INFO pUri,unsigned long ulSelectedIP, vector<unsigned long> *pRoute, char* ProUri, unsigned int *pTimeOut, unsigned int *pRetryCount, IntelMobileString& pNetworkAdaptorKey){	bool bRet = false;	ICMP_HEADER *pIcmpHdr;	BYTE *pData = NULL;	sockaddr_in saDest;	vector<SOCK_TIME> *paHops;	vector<SOCK_TIME>::iterator iterHop;	list<SOCKET_INFO>::iterator iterSock;	SOCKET_INFO info;	int nError;	int nRet;	char MachineName[256];	addrinfo *pAddrInfo;	addrinfo AddrInfo;	DWORD Size;	vector <int>::size_type VecSize;	while(*pRetryCount)	{		if ( pTime )			*pTime = 0;		if ( pRoute )			pRoute->clear();		if ( !pReachable )			goto GracefulExit;		*pReachable = false;		/*  SCR #380, Move all WSAStartup to LayerManager		if ( !StartNetwork() )			goto GracefulExit;		*/			try {			Size = 256;			paHops = new vector<SOCK_TIME>;			if ( paHops )			{				g_paHops[g_Tail] = paHops;				g_Tail = (g_Tail + 1) % MAX_IP_Q;			}			else				goto Cleanup;			if(pNetworkAdaptorKey == IntelMobileText("Any"))			{				gethostname(MachineName, Size);				memset(&AddrInfo, 0, sizeof(addrinfo));				nRet = getaddrinfo(MachineName, NULL, &AddrInfo,  &pAddrInfo);				if ( !nRet )				{					memcpy(&info.saAddr, pAddrInfo->ai_addr, sizeof(sockaddr_in));					info.saAddr.sin_family = AF_INET;					if ( !ulSelectedIP )						info.saAddr.sin_addr.s_addr = INADDR_ANY;					else						info.saAddr.sin_addr.s_addr = ulSelectedIP;				}			}			else			{				bool mFlag = getIpofNetworkAdptor(&info.saAddr, pNetworkAdaptorKey);				if(!mFlag)					goto Cleanup;								}			//Clear out the hops array before continuing			paHops->clear();			//Initialize a send buffer			pData = new BYTE[nPACKET_SIZE];			if ( !pData )				goto Cleanup;			memset(pData, 0, nPACKET_SIZE);//sizeof(*pIcmpHdr));			//Initialize the ICMP header			pIcmpHdr = reinterpret_cast<ICMP_HEADER *>(pData);			pIcmpHdr->i_type = cICMP_ECHO;			pIcmpHdr->i_id = s_nAppId;			//Create a destination sockaddr			memset(&saDest, 0, sizeof(saDest));			saDest.sin_family = AF_INET;			saDest.sin_addr.s_addr = pUri->IPAddr;		}		catch(...) {			THROWIMEXCEPTION("80043213");		}		try {			info.sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);			if ( INVALID_SOCKET == info.sock )				goto Cleanup;			nError = bind(info.sock, reinterpret_cast<sockaddr *>(&info.saAddr), sizeof(info.saAddr));			if ( SOCKET_ERROR == nError )			{				close(info.sock);				int i = SOCKET_ERROR;				int j = nError;				goto Cleanup;			}		}		catch(...) {			THROWIMEXCEPTION("80043214");		}		//Send the pings out to the destination machine		if ( !SendPingsEx(info.sock, saDest, pIcmpHdr, *paHops,pTimeOut, pNetworkAdaptorKey ) )			paHops->clear();	Cleanup:		//Cleanup allocated resources		if ( pData )			delete [] pData;		try {			VecSize = paHops->size();			if ( VecSize>0 )			{				if ( pRoute )					for (  unsigned int i=0;i<VecSize;i++)				{					pRoute->push_back( ((*paHops)[i].SockAddr.sin_addr.s_addr) );					//pRoute->push_back( (unsigned long)(paHops->at(i).SockAddr.sin_addr.s_addr) );				}				if ( pTime )					*pTime = (unsigned int)((*paHops)[VecSize-1].StopTime-(*paHops)[VecSize-1].StartTime);				*pReachable = true;				bRet = true;			}			if(paHops)				delete(paHops);		}		catch(...) {			THROWIMEXCEPTION("80043215");		}	GracefulExit:		(*pRetryCount)--;		if(bRet)			break;		}//endwhile	return bRet;}/* ________________________________________________________________HTTPIsReachableEx________________________________________________________________ */bool HTTPIsReachableEx(int *pReachable, unsigned int *pTime, PURI_INFO pUri, char* ProUri,IntelMobileString& pUsername, IntelMobileString& pPassword,  unsigned int *pTimeOut, unsigned int *pRetryCount, IntelMobileString& pNetworkAdaptorKey){	try {		//	USES_CONVERSION;		bool	bRet = false;		CQTime	cQTime;		__int64	StartTime;		__int64	StopTime;		HANDLE   hThread;		int conn;		DWORD dwStatus;		DWORD dwStatusSize = sizeof(dwStatus);			BOOL bInitalRequest = TRUE;		if(*pTimeOut == 0)		*pTimeOut = MAXTIMEOUT;				while(*pRetryCount>0)		{					*pReachable	= false;			if ( pTime )				*pTime = 0;			if ( pUri->Port	== 0 )				pUri->Port = HTTPPORT;			StartTime =	cQTime.GetTimeEx();					char buf[1024];			if(ProUri != NULL && strcmp(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -