Commit 29ec759f authored by garciay's avatar garciay
Browse files

GeoNetworking codecs ongoing

Add GeoNetworkingLayer
parent 37b2bc92
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -12,17 +12,17 @@ class Layer {
  std::vector<Layer*> lowerLayers;
  public:
    Layer(){}
    virtual ~Layer();
    void deleteLayer();
    virtual ~Layer() {};
    void deleteLayer() {};
  public:
    void addUpperLayer(Layer*);
    void removeUpperLayer(Layer*);
    void addUpperLayer(Layer*) {};
    void removeUpperLayer(Layer*) {};

    virtual void sendData(const OCTETSTRING& data, const Params& params);
    virtual void receiveData(const OCTETSTRING& data, const Params& info);
    virtual void sendData(const OCTETSTRING& data, const Params& params) {};
    virtual void receiveData(const OCTETSTRING& data, const Params& info) {};

  protected:
    void toAllLayers(std::vector<Layer*>&layers, const OCTETSTRING& data, const Params& info);
    void toAllLayers(std::vector<Layer*>&layers, const OCTETSTRING& data, const Params& info) {};
    inline void toAllUpperLayers(const OCTETSTRING& data, const Params& info) { toAllLayers(upperLayers, data, info); }
    inline void toAllLowerLayers(const OCTETSTRING& data, const Params& info) { toAllLayers(upperLayers, data, info); }
    inline void receiveToAllLayers(const OCTETSTRING& data, const Params& info) { toAllLayers(upperLayers, data, info); }
+5 −0
Original line number Diff line number Diff line
#pragma once

#include <map>

typedef std::map<std::string, std::string> params;
+6 −6
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@
#include <stdexcept>
#include <regex>

#include "loggers.hh"

LayerStackBuilder * LayerStackBuilder::_instance = NULL;

// static functions
@@ -26,8 +28,9 @@ void LayerStackBuilder::registerLayerFactory(const std::string & type, LayerFact

Layer* LayerStackBuilder::createLayerStack(const char* s)
{
	Layer * up = NULL;
    loggers::loggers::log(">>> LayerStackBuilder::createLayerStack: %s", s);

	Layer * up = NULL;
	//parse str
	std::regex rgx ("(\\w+)(\\((.*?)\\))?(\\/|$)");
	std::smatch m;
@@ -35,11 +38,13 @@ Layer* LayerStackBuilder::createLayerStack(const char* s)
	try {
		while(std::regex_search(str, m, rgx)) {
			std::string mname = m[1];
			loggers::loggers::log("LayerStackBuilder::createLayerStack: mname=%s", mname);
			LayerFactoryMap::iterator it =_fs.find(mname);
			if(it == _fs.end()){
				throw (std::logic_error(mname + ": Unknown layer type"));
			}
			// TODO: parse parameters
			loggers::loggers::log("LayerStackBuilder::createLayerStack: Create layer %s", it->first);
			Layer * l = it->second->createLayer(mname, m[3]);
			if(NULL == l){
				throw (std::logic_error(mname + ": Layer creation error"));
@@ -57,8 +62,3 @@ Layer* LayerStackBuilder::createLayerStack(const char* s)
	}
	return up;
}

void Layer::deleteLayer()
{

}
+10 −5
Original line number Diff line number Diff line
@@ -8,11 +8,12 @@
// add your member functions here.

#include "GeoNetworkingPort.hh"
#include "loggers.hh"

namespace LibItsGeoNetworking__TestSystem {

GeoNetworkingPort::GeoNetworkingPort(const char *par_port_name)
	: GeoNetworkingPort_BASE(par_port_name)
	: GeoNetworkingPort_BASE(par_port_name), _params(), _layer(NULL)
{

}
@@ -22,10 +23,10 @@ GeoNetworkingPort::~GeoNetworkingPort()

}

void GeoNetworkingPort::set_parameter(const char * /*parameter_name*/,
	const char * /*parameter_value*/)
void GeoNetworkingPort::set_parameter(const char * parameter_name, const char * parameter_value)
{

    loggers::loggers::log("GeoNetworkingPort::set_parameter: %s=%s", parameter_name, parameter_value);
    _params.insert(std::pair<std::string, std::string>(std::string(parameter_name), std::string(parameter_value)));
}

/*void GeoNetworkingPort::Handle_Fd_Event(int fd, boolean is_readable,
@@ -48,8 +49,12 @@ void GeoNetworkingPort::Handle_Fd_Event_Readable(int /*fd*/)

/*void GeoNetworkingPort::Handle_Timeout(double time_since_last_call) {}*/

void GeoNetworkingPort::user_map(const char * /*system_port*/)
void GeoNetworkingPort::user_map(const char * system_port)
{
    loggers::loggers::log("GeoNetworkingPort::user_map: %s", system_port);
    //if (strcmp(parameter_name, "geoNetworkingPort") == 0);
	//	_layer = LayerStackBuilder::GetInstance()->createLayerStack("ETH(src_addr=00:00:00:00:00:00,FF:FF:FF:FF:Fsrc_addr=00:00:00:00:00:00,FF:FF:FF:FF:F)");
    //}

}

+3 −0
Original line number Diff line number Diff line
@@ -13,10 +13,13 @@
#include "LibItsGeoNetworking_TestSystem.hh"

#include "GeoNetworkingLayer.hh"
#include "params.hh"

namespace LibItsGeoNetworking__TestSystem {

class GeoNetworkingPort : public GeoNetworkingPort_BASE {
	params _params;
	Layer * _layer;
public:
	GeoNetworkingPort(const char *par_port_name = NULL);
	~GeoNetworkingPort();
Loading