/* * Builds aJson object for the current Network Settings for editing */ void Network::settingsToJSON(aJsonObject *root) { char buff[20]; aJsonObject *ethernet; aJson.addBooleanToObject(root, "EEPROM", !SD.exists((char*) configFilename)); aJson.addBooleanToObject(root, "DHCPEnabled", use_dhcp); addArrayToObject(root, "MAC", mac, 6); addArrayToObject(root, "IP", ip); addArrayToObject(root, "Gateway", gateway); addArrayToObject(root, "Subnet", subnet); addArrayToObject(root, "DNS", dns); aJson.addNumberToObject(root, "HTTPPort", httpPort); aJson.addNumberToObject(root, "WebsocketPort", websocketPort); aJson.addItemToObject(root, "Ethernet", ethernet = aJson.createObject()); IPAddressToString(buff, Ethernet.localIP()); aJson.addStringToObject(ethernet, "IP", buff); IPAddressToString(buff, Ethernet.gatewayIP()); aJson.addStringToObject(ethernet, "Gateway", buff); IPAddressToString(buff, Ethernet.subnetMask()); aJson.addStringToObject(ethernet, "Subnet", buff); IPAddressToString(buff, Ethernet.dnsServerIP()); aJson.addStringToObject(ethernet, "DNS", buff); }
void Network::saveNetworkConfiguration(Stream& stream) { aJsonObject *root = aJson.createObject(); aJson.addBooleanToObject(root, "DHCPEnabled", use_dhcp); char buff[32]; sprintf(buff, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); aJson.addStringToObject(root, "MAC", buff); IPAddressToString(buff, ip); aJson.addStringToObject(root, "IP", buff); IPAddressToString(buff, gateway); aJson.addStringToObject(root, "Gateway", buff); IPAddressToString(buff, subnet); aJson.addStringToObject(root, "Subnet", buff); IPAddressToString(buff, dns); aJson.addStringToObject(root, "DNS", buff); aJson.addNumberToObject(root, "HTTPPort", httpPort); aJson.addNumberToObject(root, "WebsocketPort", websocketPort); aJson.print(root, &aJsonStream(&stream)); aJson.deleteItem(root); }
void InterfaceManager::WriteNetworkInit( InterfaceList_t & cInterfaces ) { File cFile; if( cFile.SetTo( NETINIT_FILE, O_CREAT | O_TRUNC ) == 0 ) { StringWriter cSw( &cFile ); cSw.WriteLine( "#!/bin/sh" ); for( InterfaceList_t::iterator i = cInterfaces.begin(); i != cInterfaces.end( ); i++ ) { cSw.Write( "ifconfig " ); cSw.Write( ( *i )->GetName() ); cSw.WriteLine( " down" ); if( ( *i )->GetEnabled() ) { cSw.Write( "echo \"Enabling interface " ); cSw.Write( ( *i )->GetName() ); cSw.WriteLine( "\" >> /var/log/kernel" ); switch ( ( *i )->GetType() ) { case Static: cSw.Write( "ifconfig " ); cSw.Write( ( *i )->GetName() ); cSw.Write( " up inet " ); cSw.Write( IPAddressToString( ( *i )->GetAddress() ) ); cSw.Write( " netmask " ); cSw.WriteLine( IPAddressToString( ( *i )->GetNetmask() ) ); if( ( *i )->GetGateway() > 0 ) { cSw.Write( "route add net " ); cSw.Write( IPAddressToString( ( *i )->GetAddress() ) ); cSw.Write( " mask " ); if( ( *i )->IsDefault() ) { cSw.Write( "0.0.0.0" ); } else { cSw.Write( IPAddressToString( ( *i )->GetNetmask() ) ); } cSw.Write( " gw " ); cSw.WriteLine( IPAddressToString( ( *i )->GetGateway() ) ); } break; case DHCP: cSw.Write( "dhcpc -d " ); cSw.Write( ( *i )->GetName() ); cSw.WriteLine( " 2>>/var/log/dhcpc" ); break; } } } } }
/* * Prints network configuration to serial port. */ void Network::printConfiguration() { // MAC address takes a bit of work to format for output. char buff[32]; cout << F("MAC: "); for(int i=0; i<6; i++) { sprintf(buff, "%02X", mac[i]); cout << buff; if (i != 5) cout << ":"; } cout << endl; cout << F("DHCP "); cout << (use_dhcp ? F("enabled") : F("disabled")); cout << F("\nCONFIGURATION:\n\tIP:\t\t"); IPAddressToString(buff, ip); cout << buff; cout << F("\n\tSubnet Mask:\t"); IPAddressToString(buff, subnet); cout << buff; cout << F("\n\tGateway:\t"); IPAddressToString(buff, gateway); cout << buff; cout << F("\n\tDNS Server:\t"); IPAddressToString(buff, dns); cout << buff; if (use_dhcp) { cout << F("\nETHERNET:\n\tIP:\t\t"); Ethernet.localIP().printTo(Serial); cout << F("\n\tSubnet Mask:\t"); Ethernet.subnetMask().printTo(Serial); cout << F("\n\tGateway:\t"); Ethernet.gatewayIP().printTo(Serial); cout << F("\n\tDNS Server:\t"); Ethernet.dnsServerIP().printTo(Serial); } cout << F("\nHTTP Port: ") << (int)httpPort; cout << F("\nWebsocket Port: ") << (int)websocketPort; cout << F("\n"); }
void InterfaceManager::SaveConfig( InterfaceList_t & cInterfaces ) { File cFile; if( cFile.SetTo( CONFIG_FILE, O_CREAT | O_TRUNC ) == 0 ) { StringWriter cSw( &cFile ); for( InterfaceList_t::iterator i = cInterfaces.begin(); i != cInterfaces.end( ); i++ ) { cSw.WriteLine( "interface" ); cSw.Write( "type " ); cSw.WriteLine( ( *i )->GetType() == Static ? "Static" : "DHCP" ); cSw.Write( "name " ); cSw.WriteLine( ( *i )->GetName() ); cSw.Write( "mac " ); cSw.WriteLine( ( *i )->GetMAC() ); cSw.Write( "enabled " ); cSw.WriteLine( ( *i )->GetEnabled()? "true" : "false" ); cSw.Write( "default " ); cSw.WriteLine( ( *i )->IsDefault()? "true" : "false" ); switch ( ( *i )->GetType() ) { case Static: { cSw.Write( "address " ); cSw.WriteLine( IPAddressToString( ( *i )->GetAddress() ) ); cSw.Write( "netmask " ); cSw.WriteLine( IPAddressToString( ( *i )->GetNetmask() ) ); cSw.Write( "gateway " ); cSw.WriteLine( IPAddressToString( ( *i )->GetGateway() ) ); break; } case DHCP: break; } cSw.WriteLine( "" ); } } }
void ModelMgr::AddNetworkCars(const std::map<in_addr_t, in_addr_t> & mapNewCars) { std::map<in_addr_t, in_addr_t>::const_iterator iterNewCar; std::map<in_addr_t, CarModel *> * pCarRegistry; std::map<in_addr_t, CarModel *>::iterator iterFoundCar; QString strName, strType; std::map<QString, QString> mapParams; std::vector<std::pair<QString, QString> > vecDepends; m_modelsMutex.lock(); for (iterNewCar = mapNewCars.begin(); iterNewCar != mapNewCars.end(); ++iterNewCar) { pCarRegistry = g_pCarRegistry->acquireLock(); iterFoundCar = pCarRegistry->find(iterNewCar->first); if (iterFoundCar == pCarRegistry->end()) { strName = IPAddressToString(iterNewCar->first); strType = NETMODEL_NAME; mapParams[CARMODEL_PARAM_CARIP] = strName; if (AddModel(strName, strType, mapParams)) vecDepends.push_back(std::pair<QString, QString>(strName, "")); iterFoundCar = pCarRegistry->find(iterNewCar->first); if (iterFoundCar != pCarRegistry->end() && iterFoundCar->second != NULL) { iterFoundCar->second->SetOwnerIPAddress(iterNewCar->second); g_pLogger->LogInfo(QString("Added vehicle [%1] with owner [%2]\n").arg(IPAddressToString(iterNewCar->first)).arg(IPAddressToString(iterNewCar->second))); } } g_pCarRegistry->releaseLock(); } if (!vecDepends.empty()) BuildModelTree(vecDepends); m_modelsMutex.unlock(); }
int CarModel::Save(std::map<QString, QString> & mapParams) { if (Model::Save(mapParams)) return 1; mapParams[CARMODEL_PARAM_DELAY] = QString("%1").arg(ToDouble(m_tDelay)); mapParams[CARMODEL_PARAM_CARIP] = IPAddressToString(m_ipCar); mapParams[CARMODEL_PARAM_LOGCAR] = BooleanToString(m_bLogThisCar); mapParams[CARMODEL_LINK_PARAM] = m_pLinkModel == NULL ? "NULL" : m_pLinkModel->GetModelName(); mapParams[CARMODEL_PHYS_PARAM] = m_pPhysModel == NULL ? "NULL" : m_pPhysModel->GetModelName(); mapParams[CARMODEL_COMM_PARAM] = m_pCommModel == NULL ? "NULL" : m_pCommModel->GetModelName(); mapParams[CARMODEL_TRACKSPEED_PARAM] = BooleanToString(m_bTrackSpeed); return 0; }
void IFaceWin::Load( void ) { m_pcCbEnabled->SetValue( m_pcIFace->GetEnabled() ); switch ( m_pcIFace->GetType() ) { case Static: { m_pcDdmType->SetCurrentString( MSG_IFWIN_TYPE_STATIC ); m_pcTxtAddress->Set( IPAddressToString( m_pcIFace->GetAddress() ).c_str( ) ); m_pcTxtNetmask->Set( IPAddressToString( m_pcIFace->GetNetmask() ).c_str( ) ); m_pcTxtGateway->Set( IPAddressToString( m_pcIFace->GetGateway() ).c_str( ) ); break; } case DHCP: { m_pcDdmType->SetCurrentString( MSG_IFWIN_TYPE_DHCP ); m_pcTxtAddress->SetEnable( false ); m_pcTxtNetmask->SetEnable( false ); m_pcTxtGateway->SetEnable( false ); break; } } }
QString CarModel::GetCarListColumnText(CarListColumn eColumn) const { switch (eColumn) { case CarListColumnName: return IPAddressToString(m_ipCar); case CarListColumnLongitude: return DegreesToString(m_ptPosition.m_iLong, 6); case CarListColumnLatitude: return DegreesToString(m_ptPosition.m_iLat, 6); case CarListColumnSpeed: return QString("%1 mph").arg(m_iSpeed); case CarListColumnHeading: return DegreesToString((long)m_iHeading * 10000, 2); default: return ""; } }
bool OpenConnection(in_addr_t ipReal, const QString & strClient) { std::map<in_addr_t, Client *>::iterator iterClient, iterOldClient; std::map<QString, ClientCreator>::iterator iterCreator; bool bSuccess = false; Client * pClient; g_mutexClients.lock(); g_pLogger->LogInfo(QString("Starting %1 to host %2...").arg(strClient).arg(IPAddressToString(ipReal))); iterCreator = g_mapClientCreators.find(strClient); iterClient = g_mapClients.find(ipReal); if (iterClient != g_mapClients.end()) { if (iterClient->second != NULL) { iterClient->second->Stop(); delete iterClient->second; } g_mapClients.erase(iterClient); } if (iterCreator != g_mapClientCreators.end()) pClient = (*iterCreator->second)(); else pClient = NULL; if (pClient != NULL && pClient->Start(ipReal)) bSuccess = g_mapClients.insert(std::pair<in_addr_t, Client *>(ipReal, pClient)).second; else if (pClient != NULL) delete pClient; if (bSuccess) g_pLogger->LogInfo("Successful\n"); else g_pLogger->LogInfo("Failed\n"); g_mutexClients.unlock(); return bSuccess; }
void CloseConnection(in_addr_t ipReal) { std::map<in_addr_t, Client *>::iterator iterConnection; g_mutexClients.lock(); g_pLogger->LogInfo(QString("Stopping client to host %1...").arg(IPAddressToString(ipReal))); iterConnection = g_mapClients.find(ipReal); if (iterConnection != g_mapClients.end()) { if (iterConnection->second != NULL) { iterConnection->second->Stop(); delete iterConnection->second; iterConnection->second = NULL; } g_mapClients.erase(iterConnection); } g_pLogger->LogInfo("Successful\n"); g_mutexClients.unlock(); }
bool Setting::SetValue(const SettingData & sValue) { bool bValid; in_addr_t ipValue; if (bValid = IsValid(sValue)) { switch (m_eType & 0xF) { case SettingTypeText: case SettingTypeFile: m_sValue.strValue = sValue.strValue; break; case SettingTypeColor: { QColor clr(sValue.strValue); m_sValue.strValue = clr.isValid() ? clr.name() : ""; break; } case SettingTypeIP: StringToIPAddress(sValue.strValue, ipValue); m_sValue.strValue = IPAddressToString(ipValue); break; case SettingTypeBool: m_sValue.bValue = sValue.bValue; break; case SettingTypeInt: m_sValue.iValue = sValue.iValue; break; case SettingTypeFloat: m_sValue.fValue = sValue.fValue; break; default: return false; } } return bValid; }
int CarModel::ProcessEvent(SimEvent & event) { if (Model::ProcessEvent(event)) return 1; switch (event.GetEventID()) { case EVENT_CARMODEL_UPDATE: { if (m_pPhysModel != NULL) m_pPhysModel->DoUpdate(event.GetTimestamp()); if (m_pLinkModel != NULL) m_pLinkModel->DoUpdate(event.GetTimestamp()); if (m_pCommModel != NULL) m_pCommModel->DoUpdate(event.GetTimestamp()); std::map<in_addr_t, SafetyPacket>::iterator iterCarMessage = m_mapKnownVehicles.begin(); while (iterCarMessage != m_mapKnownVehicles.end()) { if (iterCarMessage->second.m_tTime + MakeTime(NETWORK_TIMEOUT_SECS, NETWORK_TIMEOUT_USECS) < event.GetTimestamp()) { std::map<in_addr_t, SafetyPacket>::iterator iterCarMessageTemp = iterCarMessage; ++iterCarMessage; m_mapKnownVehicles.erase(iterCarMessageTemp); } else ++iterCarMessage; } if (IsActive()) { std::vector<CarModel *> vecNeighbors; g_pCarRegistry->GetCommunicatingCarsInRange(this, vecNeighbors); m_msgNeighbors.tMessage = m_tTimestamp; m_msgNeighbors.iNeighbors = vecNeighbors.size(); m_msgNeighbors.iCollisionCount = m_pPhysModel != NULL ? (m_pPhysModel->GetCollisionCount() - m_msgNeighbors.iAccumulatedCollisions) : 0; m_msgNeighbors.iAccumulatedCollisions += m_msgNeighbors.iCollisionCount; m_msgNeighbors.iMessages = m_pPhysModel != NULL ? (m_pPhysModel->GetMessageCount() - m_msgNeighbors.iAccumulatedMessages) : 0; m_msgNeighbors.iAccumulatedMessages += m_msgNeighbors.iMessages; #ifdef MULTILANETEST m_msgNeighbors.iLane = m_iLane; #endif if (m_msgNeighbors.iCollisionCount > 0 || m_msgNeighbors.iMessages > 0 || m_msgNeighbors.iNeighbors > 0) g_pLogger->WriteMessage(LOGFILE_NEIGHBORS, &m_msgNeighbors); } event.SetTimestamp(event.GetTimestamp() + m_tDelay); g_pSimulator->m_EventQueue.AddEvent(event); break; } case EVENT_CARMODEL_RXMESSAGEBEGIN: { Packet * pPacket = (Packet *)event.GetEventData(); bool bValid = (pPacket != NULL); if (bValid && m_pCommModel != NULL && pPacket->m_ePacketType == ptSafety) m_pCommModel->AddMessageToHistory(*(SafetyPacket *)pPacket); if (bValid && m_pPhysModel != NULL) bValid = m_pPhysModel->BeginProcessPacket(pPacket); if (bValid && m_pLinkModel != NULL) bValid = m_pLinkModel->BeginProcessPacket(pPacket); if (bValid) g_pSimulator->m_EventQueue.AddEvent(SimEvent(pPacket->m_tRX, EVENT_PRIORITY_HIGHEST, QString::null, m_strModelName, EVENT_CARMODEL_RXMESSAGEEND, pPacket, DestroyPacket)); else DestroyPacket(pPacket); break; } case EVENT_CARMODEL_RXMESSAGEEND: { std::map<in_addr_t, SafetyPacket>::iterator iterCarMessage; std::map<PacketSequence, Event1Message>::iterator iterEvent1Message; Packet * pPacket = (Packet *)event.GetEventData(); // process messages in the order that they were received bool bValid = pPacket != NULL && m_pPhysModel != NULL && m_pPhysModel->EndProcessPacket(pPacket); if (bValid) bValid = m_pLinkModel != NULL && m_pLinkModel->EndProcessPacket(pPacket); if (bValid) { switch (pPacket->m_ePacketType) { case ptGeneric: { Packet * pMsg = (Packet *)pPacket; // received message successfully //g_pLogger->LogInfo(QString("%1> ***Generic Packet\n").arg(IPAddressToString(pMsg->m_ID.srcID.ipCar))); g_pLogger->WriteMessage(LOGFILE_MESSAGES, pMsg); g_pSimulator->m_mutexEvent1Log.lock(); if ((iterEvent1Message = g_pSimulator->m_mapEvent1Log.find(pMsg->m_ID.srcID)) != g_pSimulator->m_mapEvent1Log.end()) iterEvent1Message->second.iCars++; g_pSimulator->m_mutexEvent1Log.unlock(); break; } case ptSafety: { SafetyPacket * pMsg = (SafetyPacket *)pPacket; //printf("m_iLane = %u m_iHeading = %d", m_iLane, m_iHeading); // received message successfully if((sin( pMsg->m_iHeading * 3.14/18000) * sin( m_iHeading * 3.14/18000) + cos( pMsg->m_iHeading *3.14/18000)* cos( m_iHeading *3.14/18000) >= 0) && (( m_ptPosition.m_iLong - pMsg->m_ptPosition.m_iLong ) * sin( pMsg->m_iHeading * 3.14/18000) + (m_ptPosition.m_iLat - pMsg->m_ptPosition.m_iLat) * cos( pMsg->m_iHeading *3.14/18000) > 0)) break; if (!QString((const char*)pMsg->m_pData).contains (QString("@%1 ").arg(IPAddressToString(pMsg->m_ipRX)))){ if((const char *)pMsg->m_pData != NULL){ time_t timer = time(NULL); printf("%s ", ctime(&timer)); g_pLogger->LogInfo(QString("[From %1 Receiv %2: %3]\n").arg(IPAddressToString(pMsg->m_ID.srcID.ipCar)).arg(IPAddressToString(pMsg->m_ipRX)).arg((const char *)pMsg->m_pData).ascii()); QString temp = QString("%1@%2 ").arg((const char *)pMsg->m_pData).arg(IPAddressToString(pMsg->m_ipRX)); free(pMsg->m_pData); unsigned char * temp_c_string = (unsigned char *)calloc (temp.length()+1, sizeof(unsigned char)); const char * const_c_string = temp.ascii(); for (int i = 0 ; i < temp.length(); i++) temp_c_string[i]=const_c_string[i]; temp_c_string[temp.length()] = '\0'; pMsg->m_pData = temp_c_string; pMsg->m_iDataLength = sizeof(unsigned char)*(temp.length()+1); } if (m_pCommModel) m_pCommModel->AddMessageToRebroadcastQueue(*pMsg); g_pLogger->WriteMessage(LOGFILE_MESSAGES, pMsg); g_pSimulator->m_mutexEvent1Log.lock(); if ((iterEvent1Message = g_pSimulator->m_mapEvent1Log.find(pMsg->m_ID.srcID)) != g_pSimulator->m_mapEvent1Log.end()) iterEvent1Message->second.iCars++; g_pSimulator->m_mutexEvent1Log.unlock(); } break; } default: break; } m_pLinkModel->AddReceivedPacket(pPacket); } DestroyPacket(pPacket); break; } default: break; } return 0; }
bool InitNetwork() { QString strNetInitFile, strNetInitArgs, strValue; bool bContinue = true; int iErrorCode; // make sure network isn't running CloseNetwork(); if (g_bNetworkEnabled) return false; g_pLogger->LogInfo("Opening Network Interface..."); g_strDeviceName = g_pSettings->GetParam(PARAMKEY_NETWORK_DEVNAME, g_pSettings->m_sSettings[SETTINGS_NETWORK_DEVICENAME_NUM].GetValue().strValue, true); g_strDeviceType = g_pSettings->m_sSettings[SETTINGS_NETWORK_DEVICETYPE_NUM].GetValue().strValue; if (g_pSettings->GetParam(PARAMKEY_NETWORK_IP, "", false).isEmpty() || !StringToIPAddress(g_pSettings->GetParam(PARAMKEY_NETWORK_IP, "", false), g_ipAddress)) { if (!StringToIPAddress(g_pSettings->m_sSettings[SETTINGS_NETWORK_IPADDRESS_NUM].GetValue().strValue, g_ipAddress)) g_ipAddress = 0; } if (g_pSettings->GetParam(PARAMKEY_NETWORK_SUBNET, "", false).isEmpty() || !StringToIPAddress(g_pSettings->GetParam(PARAMKEY_NETWORK_SUBNET, "", false), g_ipSubnet)) StringToIPAddress(g_pSettings->m_sSettings[SETTINGS_NETWORK_IPSUBNET_NUM].GetValue().strValue, g_ipSubnet); g_iTXPower = g_pSettings->m_sSettings[SETTINGS_NETWORK_TXPOWER_NUM].GetValue().iValue; g_iTXRate = g_pSettings->m_sSettings[SETTINGS_NETWORK_TXRATE_NUM].GetValue().iValue; strNetInitFile = g_pSettings->m_sSettings[SETTINGS_NETWORK_INITFILE_NUM].GetValue().strValue; if (!strNetInitFile.isEmpty()) { strNetInitArgs = g_pSettings->m_sSettings[SETTINGS_NETWORK_INITARGS_NUM].GetValue().strValue; strNetInitArgs.replace("%dn", g_strDeviceName); strNetInitArgs.replace("%dt", g_strDeviceType); strNetInitArgs.replace("%ip", IPAddressToString(g_ipAddress)); strNetInitArgs.replace("%sub", IPAddressToString(g_ipSubnet)); strNetInitArgs.replace("%txp", QString::number(g_iTXPower)); strNetInitArgs.replace("%txr", QString::number(g_iTXRate)); if (!strNetInitArgs.isEmpty()) strNetInitFile += " " + strNetInitArgs; while (bContinue) { iErrorCode = system(strNetInitFile); if (iErrorCode == 0) { g_bNetworkEnabled = true; bContinue = false; } else bContinue = g_pLogger->PromptLogError(PACKAGE_TITLE, QString("Could not open network interface (code %1)").arg(iErrorCode), false); } } else g_bNetworkEnabled = true; if (g_bNetworkEnabled) { /*if (g_strDeviceType.compare("denso") == 0) g_bNetworkEnabled = InitializeDensoUnit(g_ipAddress, g_ipSubnet, g_strDeviceName, g_iTXPower, g_iTXRate); */ } if (g_bNetworkEnabled) g_pLogger->LogInfo("Successful\n"); else { g_pLogger->LogInfo("Failed\n"); return false; } if (g_pMainWindow != NULL) { g_pMainWindow->m_pNetInit->setMenuText("Re&initialize"); g_pMainWindow->m_pNetInit->setToolTip("Reinitialize network devices and connections"); g_pMainWindow->m_pNetClose->setEnabled(true); g_pMainWindow->m_pNetMenu->setItemEnabled(g_pMainWindow->m_iNetServerMenuID, true); g_pMainWindow->m_pNetworkManager->SetNetworkInitialized(true); } g_pOldSigPipeHandler = signal(SIGPIPE, SIG_IGN); // start server if (g_pSettings->m_sSettings[SETTINGS_NETWORK_AUTOSERVER_NUM].GetValue().bValue) { if (g_strDeviceType.compare("denso") == 0) return StartServer(UDPSERVER_NAME); else return StartServer(UDPSERVER_NAME); } else return true; }
int CarModel::ProcessEvent(SimEvent & event) { if (Model::ProcessEvent(event)) return 1; switch (event.GetEventID()) { case EVENT_CARMODEL_UPDATE: { if (m_pPhysModel != NULL) m_pPhysModel->DoUpdate(event.GetTimestamp()); if (m_pLinkModel != NULL) m_pLinkModel->DoUpdate(event.GetTimestamp()); if (m_pCommModel != NULL) m_pCommModel->DoUpdate(event.GetTimestamp()); std::map<in_addr_t, SafetyPacket>::iterator iterCarMessage = m_mapKnownVehicles.begin(); while (iterCarMessage != m_mapKnownVehicles.end()) { if (iterCarMessage->second.m_tTime + MakeTime(NETWORK_TIMEOUT_SECS, NETWORK_TIMEOUT_USECS) < event.GetTimestamp()) { std::map<in_addr_t, SafetyPacket>::iterator iterCarMessageTemp = iterCarMessage; ++iterCarMessage; m_mapKnownVehicles.erase(iterCarMessageTemp); } else ++iterCarMessage; } if (IsActive()) { std::vector<CarModel *> vecNeighbors; g_pCarRegistry->GetCommunicatingCarsInRange(this, vecNeighbors); m_msgNeighbors.tMessage = m_tTimestamp; m_msgNeighbors.iNeighbors = vecNeighbors.size(); m_msgNeighbors.iCollisionCount = m_pPhysModel != NULL ? (m_pPhysModel->GetCollisionCount() - m_msgNeighbors.iAccumulatedCollisions) : 0; m_msgNeighbors.iAccumulatedCollisions += m_msgNeighbors.iCollisionCount; m_msgNeighbors.iMessages = m_pPhysModel != NULL ? (m_pPhysModel->GetMessageCount() - m_msgNeighbors.iAccumulatedMessages) : 0; m_msgNeighbors.iAccumulatedMessages += m_msgNeighbors.iMessages; #ifdef MULTILANETEST m_msgNeighbors.iLane = m_iLane; #endif if (m_msgNeighbors.iCollisionCount > 0 || m_msgNeighbors.iMessages > 0 || m_msgNeighbors.iNeighbors > 0) g_pLogger->WriteMessage(LOGFILE_NEIGHBORS, &m_msgNeighbors); } event.SetTimestamp(event.GetTimestamp() + m_tDelay); g_pSimulator->m_EventQueue.AddEvent(event); break; } case EVENT_CARMODEL_RXMESSAGEBEGIN: { Packet * pPacket = (Packet *)event.GetEventData(); bool bValid = (pPacket != NULL); if (bValid && m_pCommModel != NULL && pPacket->m_ePacketType == ptSafety) m_pCommModel->AddMessageToHistory(*(SafetyPacket *)pPacket); if (bValid && m_pPhysModel != NULL) bValid = m_pPhysModel->BeginProcessPacket(pPacket); if (bValid && m_pLinkModel != NULL) bValid = m_pLinkModel->BeginProcessPacket(pPacket); if (bValid) g_pSimulator->m_EventQueue.AddEvent(SimEvent(pPacket->m_tRX, EVENT_PRIORITY_HIGHEST, QString::null, m_strModelName, EVENT_CARMODEL_RXMESSAGEEND, pPacket, DestroyPacket)); else DestroyPacket(pPacket); break; } case EVENT_CARMODEL_RXMESSAGEEND: { std::map<in_addr_t, SafetyPacket>::iterator iterCarMessage; std::map<PacketSequence, Event1Message>::iterator iterEvent1Message; Packet * pPacket = (Packet *)event.GetEventData(); // process messages in the order that they were received bool bValid = pPacket != NULL && m_pPhysModel != NULL && m_pPhysModel->EndProcessPacket(pPacket); if (bValid) bValid = m_pLinkModel != NULL && m_pLinkModel->EndProcessPacket(pPacket); if (bValid) { switch (pPacket->m_ePacketType) { case ptGeneric: { Packet * pMsg = (Packet *)pPacket; // received message successfully //g_pLogger->LogInfo(QString("%1> ***Generic Packet\n").arg(IPAddressToString(pMsg->m_ID.srcID.ipCar))); g_pLogger->WriteMessage(LOGFILE_MESSAGES, pMsg); g_pSimulator->m_mutexEvent1Log.lock(); if ((iterEvent1Message = g_pSimulator->m_mapEvent1Log.find(pMsg->m_ID.srcID)) != g_pSimulator->m_mapEvent1Log.end()) iterEvent1Message->second.iCars++; g_pSimulator->m_mutexEvent1Log.unlock(); break; } case ptSafety: { SafetyPacket * pMsg = (SafetyPacket *)pPacket; // received message successfully g_pLogger->LogInfo(QString("%1> ***Safety: %2\n").arg(IPAddressToString(pMsg->m_ID.srcID.ipCar)).arg((const char *)pMsg->m_pData)); if((const char *)pMsg->m_pData != NULL) m_pMessageList->addMessage(QString("<SafetyPacket from %1 received by %2> %3").arg(IPAddressToString(pMsg->m_ID.srcID.ipCar)).arg(IPAddressToString(pMsg->m_ipRX)).arg((const char *)pMsg->m_pData)); if (m_pCommModel) m_pCommModel->AddMessageToRebroadcastQueue(*pMsg); g_pLogger->WriteMessage(LOGFILE_MESSAGES, pMsg); g_pSimulator->m_mutexEvent1Log.lock(); if ((iterEvent1Message = g_pSimulator->m_mapEvent1Log.find(pMsg->m_ID.srcID)) != g_pSimulator->m_mapEvent1Log.end()) iterEvent1Message->second.iCars++; g_pSimulator->m_mutexEvent1Log.unlock(); break; } default: break; } m_pLinkModel->AddReceivedPacket(pPacket); } DestroyPacket(pPacket); break; } default: break; } return 0; }
void CloseNetwork() { if (IsNetworkRunning()) { QString strNetCloseFile, strNetCloseArgs; bool bContinue = true; int iErrorCode; // stop clients, server CloseAllConnections(); if (g_pMainWindow != NULL) g_pMainWindow->m_pNetworkManager->UpdateClientTable(); if (!g_mapClients.empty()) return; StopServer(); if (g_pServer != NULL) return; g_pLogger->LogInfo("Closing Network Interface..."); signal(SIGPIPE, g_pOldSigPipeHandler); /*if (g_strDeviceType.compare("denso") == 0) g_bNetworkEnabled = !CloseDensoUnit(); */ strNetCloseFile = g_pSettings->m_sSettings[SETTINGS_NETWORK_CLOSEFILE_NUM].GetValue().strValue; if (!g_bNetworkEnabled && !strNetCloseFile.isEmpty()) { strNetCloseArgs = g_pSettings->m_sSettings[SETTINGS_NETWORK_CLOSEARGS_NUM].GetValue().strValue; strNetCloseArgs.replace("%dn", g_strDeviceName); strNetCloseArgs.replace("%dt", g_strDeviceType); strNetCloseArgs.replace("%ip", IPAddressToString(g_ipAddress)); strNetCloseArgs.replace("%sub", IPAddressToString(g_ipSubnet)); strNetCloseArgs.replace("%txp", QString::number(g_iTXPower)); strNetCloseArgs.replace("%txr", QString::number(g_iTXRate)); if (!strNetCloseArgs.isEmpty()) strNetCloseFile += " " + strNetCloseArgs; while (bContinue) { iErrorCode = system(strNetCloseFile); if (iErrorCode == 0) { g_bNetworkEnabled = false; bContinue = false; } else bContinue = g_pLogger->PromptLogError(PACKAGE_TITLE, QString("Could not close network interface (code %1)").arg(iErrorCode), false); } } else g_bNetworkEnabled = false; if (g_bNetworkEnabled) { g_pLogger->LogInfo("Failed\n"); return; } else g_pLogger->LogInfo("Successful\n"); if (g_pMainWindow != NULL) { g_pMainWindow->m_pNetInit->setMenuText("&Initialize"); g_pMainWindow->m_pNetInit->setToolTip("Initialize network devices and connections"); g_pMainWindow->m_pNetClose->setEnabled(false); g_pMainWindow->m_pNetMenu->setItemEnabled(g_pMainWindow->m_iNetServerMenuID, false); g_pMainWindow->m_pNetworkManager->SetNetworkInitialized(false); } } }
void QAutoGenDialog::accept() { unsigned int i, iVehicles = m_txtVehicles->value(), iCar; QString strParam, strValue, strName, strType = m_comboVehicleType->currentText(); std::map<QString, QString> mapParams; std::map<QString, std::map<QString, AutoGenParameter> >::iterator iterParams = m_mapModels.find(strType), iterAssocParams; std::map<QString, AutoGenParameter>::iterator iterParam; QStringList listDepends; QStringList::iterator iterDepend; in_addr_t ipAddress, ipTemp; std::map<QString, QString> mapAssocModels; std::map<QString, QString>::iterator iterAssocModel; std::map<QString, QString> mapAssocModelTypes; std::map<QString, QString>::iterator iterAssocModelType; std::vector<std::pair<QString, QString> > vecAssocModelTypes; std::map<QString, std::map<QString, AutoGenParameter> > mapAssocModelParams; std::map<QString, std::map<QString, ModelParameter> >::iterator iterModelType = m_pMapParams->find(strType), iterModelParams; std::map<QString, ModelParameter>::iterator iterModelParam; std::set<QString> setDepends; std::set<QString>::iterator iterSetDepend; QAutoGenModelDialog * pDialog; int nResult; bool bAddressSet = false; std::map<QString, Rect>::iterator iterAddressParams; // get record list for different parameters for (iterAddressParams = m_mapMapSelections.begin(); iterAddressParams != m_mapMapSelections.end(); ++iterAddressParams) { switch (m_comboRegionType->currentItem()) { case 0: g_pMapDB->GetRecordsInRegion(m_mapRandomRecords[iterAddressParams->first], iterAddressParams->second); break; default: break; } } // make list of associated models for (iterParam = iterParams->second.begin(); iterParam != iterParams->second.end(); ++iterParam) { strParam = iterParam->first, strValue = iterParam->second.strValue; iterModelParam = iterModelType->second.find(strParam); if (iterParam->second.eType == AutoGenParamTypeNewModel) { vecAssocModelTypes.push_back(std::pair<QString, QString>(strParam, strValue)); mapAssocModelTypes.insert(vecAssocModelTypes.back()); } } for (i = 0; i < vecAssocModelTypes.size(); i++) { if (vecAssocModelTypes[i].second.compare(NULLMODEL_NAME) != 0) { pDialog = new QAutoGenModelDialog(vecAssocModelTypes[i].first, vecAssocModelTypes[i].second, this); m_mapModelIndexes[vecAssocModelTypes[i].second] = 0; iterModelParams = m_pMapParams->find(vecAssocModelTypes[i].second); iterAssocParams = m_mapModels.find(vecAssocModelTypes[i].second); iterAssocParams = mapAssocModelParams.insert(std::pair<QString, std::map<QString, AutoGenParameter> >(vecAssocModelTypes[i].first, iterAssocParams->second)).first; pDialog->m_pVecModelTypes = m_pVecModelTypes; pDialog->m_pAssocModelTypeMap = &mapAssocModelTypes; pDialog->m_pAssocModelTypes = &vecAssocModelTypes; pDialog->m_pModelParams = &iterModelParams->second; // generate auto-generator parameters pDialog->m_pParams = &iterAssocParams->second; pDialog->InitializeModelParams(); nResult = pDialog->exec(); delete pDialog; if (nResult == QDialog::Rejected) return; } } iCar = 0; qApp->setOverrideCursor(QCursor(Qt::WaitCursor)); ipAddress = GetIPAddress(); for (i = 0; i < iVehicles; i++) { // create this vehicle while (m_pModelNames->find(strName = QString("%1%2").arg(strType).arg(iCar)) != m_pModelNames->end()) iCar++; for (iterParam = iterParams->second.begin(); iterParam != iterParams->second.end(); ++iterParam) { strParam = iterParam->first, strValue = iterParam->second.strValue; iterModelParam = iterModelType->second.find(strParam); switch (iterParam->second.eType & (~AutoGenParamTypeNoRandom)) { case AutoGenParamTypeNewModel: iterAssocModelType = mapAssocModelTypes.find(strParam); setDepends.insert(mapParams[iterAssocModelType->first] = GetAssocModel(iterAssocModelType->first, iterAssocModelType->second, mapAssocModels, mapAssocModelTypes, mapAssocModelParams, i)); break; case AutoGenParamTypeDepends: listDepends = QStringList::split(';', strValue); for (iterDepend = listDepends.begin(); iterDepend != listDepends.end(); ++iterDepend) setDepends.insert(*iterDepend); break; case AutoGenParamTypeIP: if (!bAddressSet && StringToIPAddress(strValue, ipTemp)) ipAddress = ipTemp; break; case AutoGenParamTypeRandom: mapParams[strParam] = GetRandomParameter(strParam, strValue, iterModelParam->second); break; case AutoGenParamTypeFile: mapParams[strParam] = GetFileParameter(strParam, strValue, i); break; default: mapParams[strParam] = strValue; break; } } while (m_pVehicleIPs->find(ipAddress) != m_pVehicleIPs->end()) ipAddress++; bAddressSet = true; mapParams[m_strIPAddressParam] = IPAddressToString(ipAddress); setDepends.erase("NULL"); mapParams[PARAM_DEPENDS] = QString::null; for (iterSetDepend = setDepends.begin(); iterSetDepend != setDepends.end(); ++iterSetDepend) { if (mapParams[PARAM_DEPENDS].isEmpty()) mapParams[PARAM_DEPENDS] = *iterSetDepend; else mapParams[PARAM_DEPENDS] += (';' + *iterSetDepend); } setDepends.clear(); m_pVehicleIPs->insert(ipAddress); m_pModels->insert(std::pair<QString, std::map<QString, QString> >(strName, mapParams)); m_pVehicleList->push_back(std::pair<QString, QString>(strName, strType)); m_pModelNames->insert(strName); mapAssocModels.clear(); iCar++; ipAddress++; } m_mapFileData.clear(); qApp->restoreOverrideCursor(); QDialog::accept(); }
void Logger::WriteMessage(unsigned int iLogFile, const void * pMessage) { m_mutexLogFiles[iLogFile].lock(); if (m_pLogFiles[iLogFile] != NULL) { switch (iLogFile) { case LOGFILE_MESSAGES: { const SafetyPacket & msg = *(const SafetyPacket *)pMessage; #ifdef LOGEVENTSONLY if (msg.m_ePacketType != ptSafety) break; #endif if (msg.m_ipRX == 0) { fprintf(m_pLogFiles[iLogFile], "%-8u %-19.6f %-15s %-11.6f %-11.6f %-5hd %-7.2f %-15s %-19.6f %s\n", msg.m_ID.srcID.iSeqNumber, ToDouble(msg.m_tTime), (const char *)IPAddressToString(msg.m_ID.srcID.ipCar), msg.m_ptPosition.m_iLong * 1e-6, msg.m_ptPosition.m_iLat * 1e-6, msg.m_iSpeed, msg.m_iHeading * 1e-2, (const char *)IPAddressToString(msg.m_ipTX), ToDouble(msg.m_tTX), msg.m_iDataLength > 0 ? (const char *)msg.m_pData : ""); } else { fprintf(m_pLogFiles[iLogFile], "%-8u %-19.6f %-15s %-11.6f %-11.6f %-5hd %-7.2f %-15s %-15s %-19.6f %-19.6f %-4hd %-4hd %-4hd %s\n", msg.m_ID.srcID.iSeqNumber, ToDouble(msg.m_tTime), (const char *)IPAddressToString(msg.m_ID.srcID.ipCar), msg.m_ptPosition.m_iLong * 1e-6, msg.m_ptPosition.m_iLat * 1e-6, msg.m_iSpeed, msg.m_iHeading * 1e-2, (const char *)IPAddressToString(msg.m_ipTX), (const char *)IPAddressToString(msg.m_ipRX), ToDouble(msg.m_tTX), ToDouble(msg.m_tRX), msg.m_iRSSI, msg.m_iSNR, msg.m_iTTL, msg.m_iDataLength > 0 ? (const char *)msg.m_pData : ""); } break; } case LOGFILE_EVENT1: { const Event1Message & msg = *(const Event1Message *)pMessage; fprintf(m_pLogFiles[iLogFile], "%-19.6f %-8u %-15s %-11.3f %-11.3f %-8u\n", ToDouble(msg.tMessage), msg.ID.iSeqNumber, (const char *)IPAddressToString(msg.ID.ipCar), msg.fDistance, msg.fOriginatorDistance, msg.iCars); break; } case LOGFILE_NEIGHBORS: { const NeighborMessage & msg = *(const NeighborMessage *)pMessage; #ifdef MULTILANETEST fprintf(m_pLogFiles[iLogFile], "%-19.6f %-15s %-9u %-9u %-9u %-1u\n", ToDouble(msg.tMessage), (const char *)IPAddressToString(msg.ipCar), msg.iNeighbors, msg.iMessages, msg.iCollisionCount, msg.iLane); #else fprintf(m_pLogFiles[iLogFile], "%-19.6f %-15s %-9u %-9u %-9u\n", ToDouble(msg.tMessage), (const char *)IPAddressToString(msg.ipCar), msg.iNeighbors, msg.iMessages, msg.iCollisionCount); #endif break; } default: break; } fflush(m_pLogFiles[iLogFile]); } m_mutexLogFiles[iLogFile].unlock(); }