Commit 42acd249 authored by Yann Garcia's avatar Yann Garcia
Browse files

Add TCP offline & Json

parent f8843ac9
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@ void ip_offline_layer::send_data(OCTETSTRING& p_data, params& p_params) {
  p_params.log();

  // FIXME FSCOM: To be done
  loggers::get_instance().warning("ip_offline_layer::send_data: Not implemented. Only for offline mode");
  TTCN_Buffer ip;
  ip.put_c(0x45); // Protocol version
  ip.put_c(0x02); // Flags
+69 −0
Original line number Diff line number Diff line
#include <stdexcept>
#include <regex>
#include <string>

#include "json_codec_factory.hh"

#include "loggers.hh"

#include "LibHttp_JsonMessageBodyTypes.hh"

int json_codec::encode(const LibHttp__JsonMessageBodyTypes::JsonBody &msg, OCTETSTRING &data)
{
  loggers::get_instance().log_msg(">>> json_codec::encode: ", (const Base_Type &)msg);

  TTCN_EncDec::clear_error();
  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
  TTCN_Buffer encoding_buffer;

  loggers::get_instance().error("json_codec::encode: Not supported");

  loggers::get_instance().log("<<< json_codec::encode");
  return 0;
}

int json_codec::decode(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &msg, params *p_params)
{
  loggers::get_instance().log_msg(">>> json_codec::decode: p_data=", p_data);

  // Sanity checks
  params::const_iterator it;
  if (p_params == nullptr)
  {
    loggers::get_instance().warning("json_codec::decode: Failed to access p_params (null pointer)");
    return -1; // TODO Use p_data instead of return -1
  }
  else
  {
    it = p_params->find("decode_str");
    if (it == p_params->cend())
    {
      loggers::get_instance().warning("json_codec::decode: Failed to access p_params item (decode_str)");
      return -1; // TODO Use p_data instead of return -1
    }
    loggers::get_instance().log("json_codec::decode: it->second='%c' / '%s'", it->second.c_str()[0], it->second.c_str());
  }

  // Remove data structure name (if present) ...
  std::string str;
  if ((it->second[0] != '[') && (it->second[0] != '{'))
  {
    int idx_begin = it->second.find(":");
    int idx_end = it->second.rfind("}") - 1; // Remove the last '}'
    str = it->second.substr(idx_begin + 1, idx_end - idx_begin);
  }
  else
  {
    str = it->second;
  }
  // ..and create the decoding buffer
  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
  TTCN_EncDec::clear_error();
  loggers::get_instance().log("json_codec::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str());
  TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char *)str.c_str()));

  loggers::get_instance().warning("json_codec::decode: Unsupported variant");
  return -1;
}

json_codec_factory json_codec_factory::_f;
+23 −0
Original line number Diff line number Diff line
#pragma once

#include "codec_gen.hh"
#include "params.hh"

class Base_Type;
class TTCN_Typedescriptor_t;
class TTCN_Buffer;

namespace LibHttp__JsonMessageBodyTypes {
  class JsonBody;
}

class json_codec: public codec_gen<LibHttp__JsonMessageBodyTypes::JsonBody, LibHttp__JsonMessageBodyTypes::JsonBody>
{
public:
  explicit json_codec() : codec_gen<LibHttp__JsonMessageBodyTypes::JsonBody, LibHttp__JsonMessageBodyTypes::JsonBody>() { };
  virtual ~json_codec() { };

  virtual int encode (const LibHttp__JsonMessageBodyTypes::JsonBody&, OCTETSTRING& data);
  virtual int decode (const OCTETSTRING& p_data, LibHttp__JsonMessageBodyTypes::JsonBody&, params* p_params = NULL);

}; // End of class json_codec
+4 −0
Original line number Diff line number Diff line
sources := json_codec.json_codec

includes := .
+1 −1
Original line number Diff line number Diff line
sources := tcp_layer.cc 
sources := tcp_layer.cc tcp_offline_layer.cc
includes := .
Loading