StreamSession::StreamSession(StreamSession& rhs) : socket_(rhs.socket_) , nickname_(rhs.nickname_) , sessionID_(generateSessionID()) , myDestination_(rhs.myDestination_) , i2pOptions_(rhs.i2pOptions_) , isSick_(false) { rhs.fallSick(); rhs.socket_.close(); (void)createStreamSession(myDestination_.priv); for(ForwardedStreamsContainer::const_iterator it = rhs.forwardedStreams_.begin(), end = rhs.forwardedStreams_.end(); it != end; ++it) forward(it->host, it->port, it->silent); std::cout << "Created a new SAM session (" << sessionID_ << ") from another (" << rhs.sessionID_ << ")" << std::endl; }
StreamSession::StreamSession( const std::string& nickname, const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/, uint16_t SAMPort /*= SAM_DEFAULT_PORT*/, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/, const std::string& minVer /*= SAM_DEFAULT_MIN_VER*/, const std::string& maxVer /*= SAM_DEFAULT_MAX_VER*/) : socket_(SAMHost, SAMPort, minVer, maxVer) , nickname_(nickname) , sessionID_(generateSessionID()) , i2pOptions_(i2pOptions) , isSick_(false) { myDestination_ = createStreamSession(destination); std::cout << "Created a brand new SAM session (" << sessionID_ << ")" << std::endl; }
void HTTPServer::process(bz_EventData *eventData) { if (eventData->eventType == bz_eTickEvent) { update(); } else { bz_NewNonPlayerConnectionEventData_V1 *connData = (bz_NewNonPlayerConnectionEventData_V1*)eventData; // log out the data if our level is high enough if (bz_getDebugLevel() >= 4) { char *temp = (char*)malloc(connData->size+1); memcpy(temp,connData->data,connData->size); temp[connData->size] = 0; bz_debugMessagef(4,"Plug-in HTTPServer: Non ProtoConnection connection from %d with %s",connData->connectionID,temp); free(temp); } // we go an accept everyone so that we can see if they are going to give us an HTTP command if(bz_registerNonPlayerConnectionHandler(connData->connectionID, this)) { // record the connection HTTPConnection connection; connection.connectionID = connData->connectionID; connection.request = eUnknown; connection.sessionID = generateSessionID(); // new ID in case they don't have one HTTPConnectionMap::iterator itr = liveConnections.find(connection.connectionID); if (itr != liveConnections.end()) liveConnections.erase(itr); // something weird is happening here liveConnections[connection.connectionID] = connection; // go and process any data they have and see what the deal is pending(connData->connectionID, (char*)connData->data, connData->size); } } }