void CDPlusHandler::process(CHeaderData& header) { in_addr yourAddress = header.getYourAddress(); unsigned int yourPort = header.getYourPort(); unsigned int myPort = header.getMyPort(); for (unsigned int i = 0U; i < m_maxReflectors; i++) { CDPlusHandler* reflector = m_reflectors[i]; if (reflector != NULL) { if (reflector->m_yourAddress.s_addr == yourAddress.s_addr && reflector->m_yourPort == yourPort && reflector->m_myPort == myPort) { reflector->processInt(header); return; } } } }
void CHeaderLogger::write(const wxChar* type, const CHeaderData& header) { wxASSERT(type != NULL); time_t timeNow = ::time(NULL); struct tm* tm = ::gmtime(&timeNow); char* t = ::inet_ntoa(header.getYourAddress()); wxString address(t, wxConvLocal); wxString text; text.Printf(wxT("%04d-%02d-%02d %02d:%02d:%02d: %s header - My: %s/%s Your: %s Rpt1: %s Rpt2: %s Flags: %02X %02X %02X (%s:%u)\n"), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, type, header.getMyCall1().c_str(), header.getMyCall2().c_str(), header.getYourCall().c_str(), header.getRptCall1().c_str(), header.getRptCall2().c_str(), header.getFlag1(), header.getFlag2(), header.getFlag3(), address.c_str(), header.getYourPort()); m_file.Write(text); m_file.Flush(); }
void CG2Handler::process(CHeaderData& header) { // Is this a busy reply? unsigned char flag1 = header.getFlag1(); if (flag1 == 0x01) { // Don't check the incoming stream // wxLogMessage(wxT("G2 busy message received")); return; } // Check to see if this is for StarNet CStarNetHandler* handler = CStarNetHandler::findStarNet(header); if (handler != NULL) { // Write to Header.log if it's enabled if (m_headerLogger != NULL) m_headerLogger->write(wxT("StarNet"), header); handler->process(header); return; } // No need to go any further if (m_maxRoutes == 0U) return; in_addr address = header.getYourAddress(); unsigned int id = header.getId(); for (unsigned int i = 0U; i < m_maxRoutes; i++) { CG2Handler* route = m_routes[i]; if (route != NULL) { // Is this a duplicate header, ignore it if (route->m_id == id) return; } } // Find the destination repeater CRepeaterHandler* repeater = CRepeaterHandler::findDVRepeater(header.getRptCall2()); if (repeater == NULL) { wxLogMessage(wxT("Incoming G2 header from %s to unknown repeater - %s"), header.getMyCall1().c_str(), header.getRptCall2().c_str()); return; // Not found, ignore } CG2Handler* route = new CG2Handler(repeater, address, id); for (unsigned int i = 0U; i < m_maxRoutes; i++) { if (m_routes[i] == NULL) { m_routes[i] = route; // Write to Header.log if it's enabled if (m_headerLogger != NULL) m_headerLogger->write(wxT("G2"), header); repeater->process(header, DIR_INCOMING, AS_G2); return; } } wxLogMessage(wxT("No space to add new G2 route, ignoring")); delete route; }