bool HttpConnector::CheckValid() { if (m_conn) { return nd_connector_valid((nd_netui_handle)m_conn) ? true: false ; } return false; }
ndsocket_t ProxySession::GetRemotefd() { if(nd_connector_valid((nd_netui_handle)m_remote_handle)) { return nd_connector_fd(m_remote_handle) ; } return -1; }
int apoCli_CheckConnValid() { ApoClient *apoCli = ApoClient::getInstant(); if (apoCli && apoCli->getConn()) { return nd_connector_valid((nd_netui_handle)apoCli->getConn()); } return 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 ; }
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) ; } }