#include "GeoNetworkingLayer.hh" #include "GeoNetworkingTypes.hh" #include "loggers.hh" GeoNetworkingLayer::GeoNetworkingLayer(const std::string & p_type, const std::string & param) : TLayer(p_type), _params(), _codec() { loggers::get_instance().log(">>> GeoNetworkingLayer::GeoNetworkingLayer: %s, %s", to_string().c_str(), param.c_str()); // Setup parameters Params::convert(_params, param); //_params.log(); } void GeoNetworkingLayer::sendMsg(const LibItsGeoNetworking__TestSystem::GeoNetworkingReq& p, const Params& params) { loggers::get_instance().log(">>> GeoNetworkingLayer::sendMsg"); OCTETSTRING data; _codec.encode(p.msgOut(), data); Params par(params); sendData(data, par); } void GeoNetworkingLayer::sendData(OCTETSTRING& data, Params& params) { loggers::get_instance().log_msg(">>> GeoNetworkingLayer::sendData: ", data); sendToAllLayers(data, params); } void GeoNetworkingLayer::receiveData(OCTETSTRING& data, Params& params) { loggers::get_instance().log_msg(">>> GeoNetworkingLayer::receiveData: ", data); // Decode the payload LibItsGeoNetworking__TestSystem::GeoNetworkingInd p; _codec.decode(data, p.msgIn()); // Add lower layers parameters // 1. Destination MAC address std::map::const_iterator it = params.find("dst"); if (it != params.cend()) { loggers::get_instance().log("GeoNetworkingLayer::receiveData: dst=", it->second.c_str()); p.macDestinationAddress() = str2oct(CHARSTRING(it->second.c_str())); } else { const unsigned char mac_address[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // TODO Declare it as a C++ constant p.macDestinationAddress() = OCTETSTRING(sizeof(mac_address), static_cast(mac_address)); } p.ssp().set_to_omit(); // Its_Aid p.its__aid().set_to_omit(); // Send it to the ports toAllUpperPorts(p, params); } class GeoNetworkingFactory: public LayerFactory { static GeoNetworkingFactory _f; public: GeoNetworkingFactory(); virtual Layer * createLayer(const std::string & type, const std::string & param); }; GeoNetworkingFactory::GeoNetworkingFactory() { // register factory loggers::get_instance().log(">>> GeoNetworkingFactory::GeoNetworkingFactory"); LayerStackBuilder::RegisterLayerFactory("GN", this); } Layer * GeoNetworkingFactory::createLayer(const std::string & type, const std::string & param) { return new GeoNetworkingLayer(type, param); } GeoNetworkingFactory GeoNetworkingFactory::_f;