/** * NMT_SERVERSHAKE - last part of the 3-way server handshake * Response: None * @param in * @param out */ void MetaServer::processSERVERSHAKE(const MetaServerPacket& in, MetaServerPacket& out) { unsigned int shake = in.getIntData(4); std::string ip = in.getAddressStr(); m_Logger.debug("processSERVERSHAKE(%u)", shake); /** * If a handshake exists, we can know the following: * 1) the client is valid * 2) they have a non-expired handshake * * What we do then is to: * 1) register a server session * 2) de-register the handshake ( maybe we just let it expire ? ) */ if( msdo.handshakeExists(shake) ) { std::stringstream ss; ss << in.getPort(); msdo.addServerSession(ip); msdo.addServerAttribute(ip,"port", ss.str() ); // clear stream first ss.str(""); ss << in.getAddressInt(); msdo.addServerAttribute(ip,"ip_int", ss.str() ); } }
void MetaServer::processTERMINATE(const MetaServerPacket& in, MetaServerPacket& out) { /** * For backwards compat, we make a regular "TERM" packet end a server session * and a TERM packet with any additional data sent signifies a client session. */ if ( in.getSize() > (sizeof(uint32_t)) ) { m_Logger.debug("processTERMINATE-client(%s)", in.getAddressStr().c_str() ); msdo.removeClientSession(in.getAddressStr()); } else { m_Logger.debug("processTERMINATE-server(%s)", in.getAddressStr().c_str() ); msdo.removeServerSession(in.getAddressStr()); } }
void MetaServer::processCLIENTFILTER(const MetaServerPacket& in, MetaServerPacket& out) { unsigned int name_length = in.getIntData(4); unsigned int value_length = in.getIntData(8); std::string msg = in.getPacketMessage(12); std::string name = msg.substr(0,name_length); std::string value = msg.substr(name_length); std::string ip = in.getAddressStr(); m_Logger.debug("processCLIENTFILTER(%s,%s)", name.c_str(), value.c_str() ); msdo.addClientFilter(ip,name,value); out.setPacketType(NMT_NULL); }
void MetaServer::processCLIENTSHAKE(const MetaServerPacket& in, MetaServerPacket& out) { unsigned int shake = in.getIntData(4); std::string ip = in.getAddressStr(); m_Logger.debug("processCLIENTSHAKE(%u)", shake ); if( msdo.handshakeExists(shake) ) { std::stringstream ss; ss << in.getPort(); msdo.addClientSession(ip); msdo.addClientAttribute(ip,"port", ss.str() ); } }