GeoNetworkingLayer.hh 1.72 KB
Newer Older
garciay's avatar
garciay committed
#ifndef GEONETWORKING_LAYER_H
#define GEONETWORKING_LAYER_H
garciay's avatar
garciay committed

#include <unistd.h>
#include <signal.h>
#include <time.h>

garciay's avatar
garciay committed
#include <mutex>

garciay's avatar
garciay committed
#include "Layer.hh"
#include "GeoNetworkingCodec.hh"
garciay's avatar
garciay committed
#include "LocationTable.hh"
garciay's avatar
garciay committed

namespace LibItsGeoNetworking__TestSystem {
garciay's avatar
garciay committed
  class GeoNetworkingPort;
  class GeoNetworkingReq;
  class GeoNetworkingInd;
garciay's avatar
garciay committed
namespace LibItsGeoNetworking__TypesAndValues {
  class GeoNetworkingPdu;
}

garciay's avatar
garciay committed
class GeoNetworkingLayer : public TLayer<LibItsGeoNetworking__TestSystem::GeoNetworkingPort> {
garciay's avatar
garciay committed
  Params _params;
  GeoNetworkingCodec _codec;
garciay's avatar
garciay committed
  LibItsGeoNetworking__TypesAndValues::GeoNetworkingPdu* _beacon;
garciay's avatar
garciay committed
  LocationTable _location_table;
  std::mutex _sendData; // FIXME To be removed, useless
  timer_t _timerid;
  struct sigevent _sev;
  struct itimerspec _its;
  long long _freq_nanosecs;
  sigset_t _mask;
  struct sigaction _sa;
garciay's avatar
garciay committed

  void fill_beacon(INTEGER& p_latitude, INTEGER& p_longitude, OCTETSTRING& p_ll_address);
  static void timer_irq_sigalrm_handler(int p_signal, siginfo_t *p_signal_info, void *p_uc);   

garciay's avatar
garciay committed
public:
  GeoNetworkingLayer() : TLayer<LibItsGeoNetworking__TestSystem::GeoNetworkingPort>(), _params(), _codec(), _beacon(NULL), _sendData(), _timerid{0}, _sev{0}, _its{0}, _freq_nanosecs(0), _mask{0}, _sa{0} { };
garciay's avatar
garciay committed
  GeoNetworkingLayer(const std::string& p_type, const std::string& param);
garciay's avatar
garciay committed
  virtual ~GeoNetworkingLayer();
garciay's avatar
garciay committed
  
garciay's avatar
garciay committed
  void sendMsg(const LibItsGeoNetworking__TestSystem::GeoNetworkingReq&, Params& param);
garciay's avatar
garciay committed
  
  virtual void sendData(OCTETSTRING& data, Params& params);
  virtual void receiveData(OCTETSTRING& data, Params& params);
garciay's avatar
garciay committed

  void start_beaconing();
  void stop_beaconing();
garciay's avatar
garciay committed
  const int _signal_id = SIGTERM;
garciay's avatar
garciay committed
};

#endif