diff --git a/src/network/protocols/connect_to_peer.hpp b/src/network/protocols/connect_to_peer.hpp index d64cf59bc..a22eec80e 100644 --- a/src/network/protocols/connect_to_peer.hpp +++ b/src/network/protocols/connect_to_peer.hpp @@ -25,6 +25,9 @@ #include +/** One instance of this is started for every peer who tries to + * connect to this server. + */ class ConnectToPeer : public Protocol, public CallbackObject { protected: diff --git a/src/network/protocols/connect_to_server.cpp b/src/network/protocols/connect_to_server.cpp index c7b2a7c6b..c98f7fbec 100644 --- a/src/network/protocols/connect_to_server.cpp +++ b/src/network/protocols/connect_to_server.cpp @@ -115,10 +115,10 @@ void ConnectToServer::asynchronousUpdate() } case GETTING_SELF_ADDRESS: { - delete m_current_protocol; + delete m_current_protocol; // delete GetPublicAddress m_current_protocol = NULL; - registerWithSTKServer(); + registerWithSTKServer(); // Register us with STK server if (m_quick_join) { diff --git a/src/network/protocols/get_peer_address.cpp b/src/network/protocols/get_peer_address.cpp index 45580055f..12d82869b 100644 --- a/src/network/protocols/get_peer_address.cpp +++ b/src/network/protocols/get_peer_address.cpp @@ -39,63 +39,45 @@ GetPeerAddress::~GetPeerAddress() // ---------------------------------------------------------------------------- void GetPeerAddress::setup() { - m_state = NONE; - m_request = NULL; m_address.clear(); + + m_request = new Online::XMLRequest(); + PlayerManager::setUserDetails(m_request, "get", + Online::API::SERVER_PATH); + m_request->addParameter("peer_id", m_peer_id); + + Online::RequestManager::get()->addRequest(m_request); } // setup // ---------------------------------------------------------------------------- void GetPeerAddress::asynchronousUpdate() { - if (m_state == NONE) - { - m_request = new Online::XMLRequest(); - PlayerManager::setUserDetails(m_request, "get", - Online::API::SERVER_PATH); - m_request->addParameter("peer_id", m_peer_id); - - Online::RequestManager::get()->addRequest(m_request); - m_state = REQUEST_PENDING; - } - else if (m_state == REQUEST_PENDING && m_request->isDone()) + if (m_request->isDone()) { const XMLNode * result = m_request->getXMLData(); - std::string rec_success; + delete m_request; + m_request = NULL; - if(result->get("success", &rec_success)) + std::string success; + if(result->get("success", &success) && success == "yes") { - if (rec_success == "yes") - { - uint32_t ip; - result->get("ip", &ip); - m_address.setIP(ip); + uint32_t ip; + result->get("ip", &ip); + m_address.setIP(ip); - uint16_t port; - if (m_address.getIP() == - STKHost::get()->getPublicAddress().getIP()) - result->get("private_port", &port); - else - result->get("port", &port); - m_address.setPort(port); - - Log::debug("GetPeerAddress", "Address gotten successfully."); - } + uint16_t port; + if (m_address.getIP() == STKHost::get()->getPublicAddress().getIP()) + result->get("private_port", &port); else - { - Log::error("GetPeerAddress", "Fail to get address."); - } + result->get("port", &port); + m_address.setPort(port); + + Log::debug("GetPeerAddress", "Peer address retrieved."); } else { - Log::error("GetPeerAddress", "Fail to get address."); + Log::error("GetPeerAddress", "Failed to get peer address."); } - m_state = DONE; - } - else if (m_state == DONE) - { - m_state = EXITING; - delete m_request; - m_request = NULL; requestTerminate(); } } // asynchronousUpdate diff --git a/src/network/protocols/get_peer_address.hpp b/src/network/protocols/get_peer_address.hpp index de59cb9c3..dbeb84f93 100644 --- a/src/network/protocols/get_peer_address.hpp +++ b/src/network/protocols/get_peer_address.hpp @@ -30,15 +30,6 @@ private: uint32_t m_peer_id; Online::XMLRequest* m_request; - enum STATE - { - NONE, - REQUEST_PENDING, - DONE, - EXITING - }; - STATE m_state; - /** Stores the address found. Used in a callback from the parent protocol * to get the result. */ TransportAddress m_address;