📄 connectivity_core_utils.cpp
字号:
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 + -