void UT_CIceConnectionHandler::UT_CNATFWConnectionHandler_IncomingMessageLL(  )
    {
    TInetAddr localAddr( KLocalAddr );
    TInetAddr fromAddr( KRemoteAddr );
    TInetAddr peerAddr( KRemoteAddr );
    
    _LIT8( KDummyContent, "dummycontent" );
    TBool consumed( EFalse );
    
    // no connection
    EUNIT_ASSERT_LEAVE( iConnectionHandler->IncomingMessageL( 
        iStreamId, KDummyContent, localAddr, fromAddr, peerAddr, consumed ) );
    
    TUint stunConnection = iConnectionHandler->CreateConnectionL( *iPairs[0] );
    
    // unknown sream
    EUNIT_ASSERT_NO_LEAVE( iConnectionHandler->IncomingMessageL( 
        iStreamId + 1, KDummyContent, 
        localAddr, fromAddr, peerAddr, consumed ) );
    EUNIT_ASSERT( !consumed );
    
    // known stream
    TUint stunConnection2 = iConnectionHandler->CreateConnectionL( *iPairs[0] );
    EUNIT_ASSERT_NO_LEAVE( iConnectionHandler->IncomingMessageL( 
        iStreamId, KDummyContent, localAddr, fromAddr, peerAddr, consumed ) );
    
    iConnectionHandler->RemoveConnection( iStreamId, stunConnection );
    iConnectionHandler->RemoveConnection( iStreamId, stunConnection2 );
    }
void UT_CIceValidList::UT_CICEValidList_HasPairL()
    {
    CNATFWCandidate* localCand = CNATFWCandidate::NewLC();
    localCand->SetComponentId( KComponentIdRtp );
    TInetAddr localAddr( KInetAddrAny );
    localAddr.SetFamily( KAfInet );
    localCand->SetTransportAddrL( localAddr );
    CNATFWCandidate* remoteCand = CNATFWCandidate::NewLC();
    remoteCand->SetComponentId( KComponentIdRtp );
    TInetAddr remoteAddr( KInetAddrAny );
    remoteAddr.SetFamily( KAfInet );    
    remoteCand->SetTransportAddrL( remoteAddr );
    CNATFWCandidatePair* pair 
        = CNATFWCandidatePair::NewLC( *localCand, *remoteCand );
    
    EUNIT_ASSERT( !iValidList->HasPair( *pair ) );
    
    iValidList->AddValidPairL( *pair );
    EUNIT_ASSERT( iValidList->iValidList.Count() == 1 );
    EUNIT_ASSERT( iValidList->HasPair( *pair ) );
    
    CleanupStack::PopAndDestroy( pair );
    CleanupStack::PopAndDestroy( remoteCand );
    CleanupStack::PopAndDestroy( localCand );
    }
Example #3
0
    void TcpServer::newConnection(int sockfd, const InetAddress& peerAddr)
    {
        loop_->assertInLoopThread();
        EventLoop* ioLoop = threadPool_->getNextLoop();
        char buf[64];
        snprintf(buf, sizeof buf, "-%s#%d", ipPort_.c_str(), nextConnId_);
        ++nextConnId_;
        std::string connName = name_ + buf;

        LOG_PRINT(LogType_Info, "TcpServer::newConnection [%s] - new connection [%s] from %s",
                  name_.c_str(), connName.c_str(), peerAddr.toIpPort().c_str());
        InetAddress localAddr(SocketOps::getLocalAddr(sockfd));
        // FIXME poll with zero timeout to double confirm the new connection
        // FIXME use make_shared if necessary
        TcpConnectionPtr conn(new TcpConnection(ioLoop,
                                                connName,
                                                sockfd,
                                                localAddr,
                                                peerAddr));
        connections_[connName] = conn;
        conn->setConnectionCallback(connectionCallback_);
        conn->setMessageCallback(messageCallback_);
        conn->setWriteCompleteCallback(writeCompleteCallback_);
        conn->setCloseCallback(
            std::bind(&TcpServer::removeConnection, this, std::placeholders::_1)); // FIXME: unsafe
        ioLoop->runInLoop(std::bind(&TcpConnection::connectEstablished, conn));
    }
Example #4
0
Service::Service(istring& localIP) : m_connectedToMaster(false)
{
  currentService = this;

  m_net = new Networking::NetworkingSystem(true);
  m_net->Initialize();

  Address mCastAddr(226, 0, 0, 1, 8000);
  TODO("Don't hard-code this");
  Address localAddr(inet_addr(localIP.c_str()), 8000);
  m_net->Multicast(localAddr, mCastAddr);
}
Example #5
0
Link* Connector::createLink(socket_t newfd, NetAddress &peerAddr)
{
	NetModel *net = m_netNetFactory->nextNet();

	LinkPool &linkPool = net->getLinkPool();
	NetAddress localAddr(socktool::getLocalAddr(newfd));

	Link *link = linkPool.alloc(newfd, localAddr, peerAddr, net, m_pNetReactor);
	if (NULL == link) {
		return NULL;
	}

	link->m_isAutoReconnect = true;
	return link;
}
Example #6
0
void TcpServer::onNewConnectionCallback(int fd, const InetAddr& addr)
{
    char buf[32];
    bzero((void*)buf, 32);
    std::string name = snprintf(buf, 32, "%s:%d",addr.getIpPortStr(),connectId_);
    logger::console->info("NewConnection:{}",name);
    ++connectId_;
    InetAddr localAddr(serverAddr_);
    TcpConnection* tcpConnection= new TcpConnection(name, eventloop_, fd, serverAddr_, addr);
    connectionMap_[name] = tcpConnection;
    tcpConnection->setCloseCallback(boost::bind(&TcpServer::removeConnection, this,_1));
    tcpConnection->setMessageCallback(messageCallback_);
    tcpConnection->setWriteCompleteCallback(writeCompleteCallback_);

}
Example #7
0
void BaseSvr::MsgLoop()
{
    typedef std::deque<Buffer*> MsgQueue;
    MsgQueue msgQueue;
    {
        MutexLockGuard lock(m_msgQueue.m_mutex);
        if(m_msgQueue.m_queue.empty())
        {
            return;
        }

        msgQueue.swap(m_msgQueue.m_queue);
        m_msgQueue.m_queue.clear();
    }

    for(MsgQueue::iterator itr = msgQueue.begin(); itr != msgQueue.end(); ++itr)
    {
        Buffer *pMsg = *itr;

        uint16_t msgType = endian::networkToHost16(pMsg->peekInt16());
        if(msgType == 20)
        {
            LoginReq loginReq;
            loginReq.ParseFromArray(pMsg->peek() + sizeof(uint16_t), pMsg->readableBytes());

            LOG_INFO << "LoginReq loginReq :" << loginReq.DebugString();

            m_loop->quit();
        }

        if(-1 == msgType)
        {
            InetAddress localAddr(0);

            string name = "@@@@";
            TcpConnectionPtr conn(new TcpConnection(m_loop, name, 0, localAddr, localAddr));
            conn->send("Bad Request!\r\n");
            conn->shutdown();
        }

        delete pMsg;
    }
}
Example #8
0
/**
 * UDPGenerator::open
 *
 * @param localport
 * @param remoteport
 *
 * @return
 */
int
UDPGenerator::open(const ACE_TCHAR *remotehost,
                   u_short localport,
                   u_short remoteport)
{
    ACE_DEBUG ((LM_DEBUG, "%N:%l:UDPGenerator::open_addr called\n"));

    // Create a local UDP socket to receive datagrams.

    ACE_INET_Addr localAddr(localport);
    if (this->sockDgram_.open (localAddr) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_SOCK_Dgram::open"), -1);

    // Initialize the asynchronous read.
    if (this->rd_.open (
                *this,
                this->sockDgram_.get_handle (),
                this->completion_key_,
                ACE_Proactor::instance ()) == -1
       )
        ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Asynch_Read_Dgram::open"), -1);

    // Initialize the asynchronous read.
    if (this->wd_.open (
                *this,
                this->sockDgram_.get_handle (),
                this->completion_key_,
                ACE_Proactor::instance ()) == -1)
        ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Asynch_Write_Dgram::open"), -1);

    int res = 0;
    //res = readdatagram(4);
    //DataGloveData glove_data;
    //glove_data.initialize();
    //res = writedatagram(remotehost, remoteport);
    res = rescuerHandSake(remotehost, remoteport);
    //res = gloveDgramWrite(remotehost, remoteport, glove_data);
    res = readdatagram(4);
    return res;
}
Example #9
0
void RealmList::UpdateRealms(bool init)
{
    TC_LOG_INFO(LOG_FILTER_AUTHSERVER, "Updating Realm List...");

    PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST);
    PreparedQueryResult result = LoginDatabase.Query(stmt);

    // Circle through results and add them to the realm map
    if (result)
    {
        do
        {
            Field* fields = result->Fetch();
            uint32 realmId              = fields[0].GetUInt32();
            std::string name            = fields[1].GetString();
            std::string externalAddress = fields[2].GetString();
            std::string localAddress    = fields[3].GetString();
            std::string localSubmask    = fields[4].GetString();
            uint16 port                 = fields[5].GetUInt16();
            uint8 icon                  = fields[6].GetUInt8();
            RealmFlags flag             = RealmFlags(fields[7].GetUInt8());
            uint8 timezone              = fields[8].GetUInt8();
            uint8 allowedSecurityLevel  = fields[9].GetUInt8();
            float pop                   = fields[10].GetFloat();
            uint32 build                = fields[11].GetUInt32();

            ACE_INET_Addr externalAddr(port, externalAddress.c_str(), AF_INET);
            ACE_INET_Addr localAddr(port, localAddress.c_str(), AF_INET);
            ACE_INET_Addr submask(0, localSubmask.c_str(), AF_INET);

            UpdateRealm(realmId, name, externalAddr, localAddr, submask, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build);

            if (init)
                TC_LOG_INFO(LOG_FILTER_AUTHSERVER, "Added realm \"%s\" at %s:%u.", name.c_str(), m_realms[name].ExternalAddress.get_host_addr(), port);
        }
        while (result->NextRow());
    }
}
Example #10
0
	void TcpServer::NewConnection(socket_t fd, const InternetAddress& peerAddr)
	{
		loop_->AssertInLoopThreadOrDie();
		EventLoop* ioLoop = threadGroup_->GetNextLoop();

		InternetAddress localAddr(SocketsApi::GetLocalAddr(fd));
		std::stringstream connNameSs;
		connNameSs << name_ << hostIpPort_ << "#" << nextConnId_;
		nextConnId_++;
		std::string connName = connNameSs.str();

		std::cout << "[" << name_
			<< "] - new connection [" << connName
			<< "] from " << peerAddr.GetIpAndPort()
			<< std::endl;
		TcpConnectionPtr conn(new TcpConnection(loop_, connName, fd, localAddr, peerAddr));
		//Save the new TcpConnection to this map, because life cycle is manage by shared_ptr
		allConnections_[connNameSs.str()] = conn;
		conn->SetConnectionCallBack(connCallBack_);
		conn->SetMessageCallBack(msgCallBack_);
		conn->SetCloseCallBack(std::bind(&TcpServer::RemoveConnection, this, std::placeholders::_1));
		ioLoop->RunInLoop(std::bind(&TcpConnection::ConnectionEstablished, conn));
	}
Example #11
0
int main() {

#ifdef OS_WIN32
    WSAData wsaData;
    int nCode;
    assert( WSAStartup(MAKEWORD(2, 2), &wsaData) == 0);
#endif
    int sock = socket(AF_INET, SOCK_STREAM, 0);

    TCPServerSocket server (sock);
    TCPSocketAddress localAddr("127.0.0.1", 10001);
    if (server.bind(&localAddr)) {
        std::cout << server.getLastError().getErrorString() << std::endl;
        return -1;
    }

    if (server.listen(10)) {
        perror("While listening");
        return -2;
    }

    TCPSocketAddress *addr = 0;
    server.poll(IODevice::POLL_READ,-1);
    TCPSocket *socket = (TCPSocket *)(server.accept((SocketAddress **)&addr));
    if (socket == NULL) {
        std::cout << server.getLastError() << std::endl;
        return -3;
    }

    std::cout << "Get remote "<<socket->getPeerAddress()->getReadable()<<std::endl;

    socket->close();
    server.close();

    return 0;
}
Example #12
0
void WinSockets::parseSocketTable(WinSockTableType sockType,
                                  QueryData& results) {
    unsigned int numEntries;
    switch (sockType) {
    case WinSockTableType::tcp:
        numEntries = tcpTable_->dwNumEntries;
        break;
    case WinSockTableType::tcp6:
        numEntries = tcp6Table_->dwNumEntries;
        break;
    case WinSockTableType::udp:
        numEntries = udpTable_->dwNumEntries;
        break;
    case WinSockTableType::udp6:
        numEntries = udp6Table_->dwNumEntries;
        break;
    default:
        numEntries = 0;
        break;
    }

    for (size_t i = 0; i < numEntries; i++) {
        Row r;
        std::vector<char> localAddr(128, 0x0);
        std::vector<char> remoteAddr(128, 0x0);

        switch (sockType) {
        case WinSockTableType::tcp: {
            r["protocol"] = INTEGER(IPPROTO_TCP);
            auto tcpLocalAddr = tcpTable_->table[i].dwLocalAddr;
            auto retVal =
                InetNtopA(AF_INET, &tcpLocalAddr, localAddr.data(), localAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network local address to string: "
                     << WSAGetLastError();
            }
            r["local_port"] =
                INTEGER(ntohs(static_cast<u_short>(tcpTable_->table[i].dwLocalPort)));
            auto tcpRemoteAddr = tcpTable_->table[i].dwRemoteAddr;
            retVal = InetNtopA(
                         AF_INET, &tcpRemoteAddr, remoteAddr.data(), remoteAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network remote address to string: "
                     << WSAGetLastError();
            }
            r["remote_address"] = remoteAddr.data();
            r["remote_port"] = INTEGER(
                                   ntohs(static_cast<u_short>(tcpTable_->table[i].dwRemotePort)));
            r["pid"] = INTEGER(tcpTable_->table[i].dwOwningPid);
            r["family"] = INTEGER(AF_INET);
            break;
        }

        case WinSockTableType::tcp6: {
            r["protocol"] = INTEGER(IPPROTO_TCP);
            auto tcp6LocalAddr = tcp6Table_->table[i].ucLocalAddr;
            auto retVal = InetNtopA(
                              AF_INET6, tcp6LocalAddr, localAddr.data(), localAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network local address to string: "
                     << WSAGetLastError();
            }
            r["local_port"] = INTEGER(
                                  ntohs(static_cast<u_short>(tcp6Table_->table[i].dwLocalPort)));
            auto tcp6RemoteAddr = tcp6Table_->table[i].ucRemoteAddr;
            retVal = InetNtopA(
                         AF_INET6, tcp6RemoteAddr, remoteAddr.data(), remoteAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network remote address to string: "
                     << WSAGetLastError();
            }
            r["remote_address"] = remoteAddr.data();
            r["remote_port"] = INTEGER(
                                   ntohs(static_cast<u_short>(tcp6Table_->table[i].dwRemotePort)));
            r["pid"] = INTEGER(tcp6Table_->table[i].dwOwningPid);
            r["family"] = INTEGER(AF_INET6);
            break;
        }

        case WinSockTableType::udp: {
            r["protocol"] = INTEGER(IPPROTO_UDP);
            auto udpLocalAddr = udpTable_->table[i].dwLocalAddr;
            auto retVal =
                InetNtopA(AF_INET, &udpLocalAddr, localAddr.data(), localAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network local address to string: "
                     << WSAGetLastError();
            }
            r["local_port"] =
                INTEGER(ntohs(static_cast<u_short>(udpTable_->table[i].dwLocalPort)));
            r["remote_address"] = "0";
            r["remote_port"] = INTEGER(0);
            r["pid"] = INTEGER(udpTable_->table[i].dwOwningPid);
            r["family"] = INTEGER(AF_INET);
            break;
        }

        case WinSockTableType::udp6: {
            r["protocol"] = INTEGER(IPPROTO_UDP);
            auto udp6LocalAddr = udp6Table_->table[i].ucLocalAddr;
            auto retVal = InetNtopA(
                              AF_INET6, udp6LocalAddr, localAddr.data(), localAddr.size());
            if (retVal == nullptr) {
                TLOG << "Error converting network local address to string: "
                     << WSAGetLastError();
            }
            r["local_port"] = INTEGER(
                                  ntohs(static_cast<u_short>(udp6Table_->table[i].dwLocalPort)));
            r["remote_address"] = "0";
            r["remote_port"] = INTEGER(0);
            r["pid"] = INTEGER(udp6Table_->table[i].dwOwningPid);
            r["family"] = INTEGER(AF_INET6);
            break;
        }
        default:
            break;
        }

        r["local_address"] = localAddr.data();
        results.push_back(r);
    }
}
Example #13
0
 BOOLEAN _netEventHandler::isLocalConnection() const
 {
    return localAddr() == remoteAddr() ? TRUE : FALSE ;
 }