예제 #1
0
bool HttpConnector::CheckValid()
{
	
	if (m_conn) {
		return nd_connector_valid((nd_netui_handle)m_conn) ? true: false ;
	}
	return false;
}
예제 #2
0
ndsocket_t ProxySession::GetRemotefd() 
{
	if(nd_connector_valid((nd_netui_handle)m_remote_handle)) {
		return nd_connector_fd(m_remote_handle) ;
	}
	return -1;
	
}
예제 #3
0
int apoCli_CheckConnValid()
{
	ApoClient *apoCli = ApoClient::getInstant();
	if (apoCli && apoCli->getConn())	{
		return nd_connector_valid((nd_netui_handle)apoCli->getConn());
	}
	return 0;
}
예제 #4
0
int ndUpdateConnect(netObject netObj, int timeOutMS)
{
	int ret ;
    if (!nd_connector_valid((nd_netui_handle)netObj)) {
        return -1;
    }
    
    ret = nd_connector_update((nd_handle)netObj,timeOutMS);
	
	if (-1==ret ) {
		if (NDERR_WOULD_BLOCK != nd_object_lasterror((nd_handle)netObj) &&
			NDERR_TIMEOUT != nd_object_lasterror((nd_handle) netObj) ) {
			tryto_terminate(netObj) ;
		}		
	}
	return ret ;

    
}
예제 #5
0
void ProxySession::UpdateRemote() 
{
	int ret ;
	char buf[1024*16] ;
	if(!nd_connector_valid((nd_netui_handle)m_remote_handle)) {
		return ;
	}


	ret = nd_connector_raw_waitdata(m_remote_handle, buf, sizeof(buf), 0) ;

	//ret = m_remote_connector.RecvRawData(buf, sizeof(buf),0) ;
	if(0==ret || (ret == -1 && NDERR_WUOLD_BLOCK !=nd_object_lasterror(m_remote_handle))  ) {
		Shutdown();
	}
	if(ret <= 0) {
		return ;
	}
	if (!m_is_udp) {
		SendRawData(buf, ret) ;
		return ;

	}

	//读取地址
	struct sockaddr_in* read_addr = nd_udp_read_addr(m_remote_handle) ;
	if (read_addr->sin_addr.s_addr==m_client_addr.sin_addr.s_addr && read_addr->sin_port==m_client_addr.sin_port ) {
		//来自client
		int sock_len;
		struct sockaddr_in aim_addr ;
		if(buf[0]!=0 || buf[1]!=0 || buf[2]!=0) {
			return ;
		}
		if (buf[3]==1)	{
			if(ret <= 10) {
				return ;
			}
			aim_addr.sin_addr.s_addr =*(int*) &buf[4] ;
			aim_addr.sin_port = *(short*) &buf[8] ;
			sock_len = 10;
			ret -= 10 ;
		}
		else if(buf[3]==3){
			int sock_len = buf[4] + 5;
			if ( sock_len >= ret) {
				return ;
			}

			aim_addr.sin_port = *(short *) &buf[sock_len] ;
			sock_len += 2 ;

			if ( sock_len >= ret) {
				return ;
			}
			ret -= sock_len ;

		}

		aim_addr.sin_family = AF_INET ;
		memcpy(buf, buf+sock_len, ret) ;
		nd_udp_sendto(m_remote_handle,buf,ret, &aim_addr) ; 
	}
	else {
		//来自远程
		nd_proxy_sendto(nd_connector_fd(m_remote_handle),buf,ret, read_addr, &m_client_addr) ;
	}

}