Commit 79b85951 authored by YannGarcia's avatar YannGarcia
Browse files

Bug fixed in sip_layer; Add support of Json codec

parent 3952cef7
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
#include "LibNg112_EncdecDeclarations.hh"

namespace LibNg112__EncdecDeclarations {

  BITSTRING enc__DequeueRegistrationRequest(const LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) {
    return BITSTRING(); // TODO
  }

  INTEGER dec__DequeueRegistrationRequest(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) {
    return 0; // TODO
  }

  BITSTRING enc__DequeueRegistrationResponse(const LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) {
    return BITSTRING(); // TODO
  }

  INTEGER dec__DequeueRegistrationResponse(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) {
    return 0; // TODO
  }

  BITSTRING enc__ServiceStatePayload(const LibNg112__SubscriptionPayloads::ServiceStatePayload& p) {
    return BITSTRING(); // TODO
  }

  INTEGER dec__ServiceStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ServiceStatePayload& p) {
    return 0; // TODO
  }

  BITSTRING enc__ElementStatePayload(const LibNg112__SubscriptionPayloads::ElementStatePayload& p) {
    return BITSTRING(); // TODO
  }

  INTEGER dec__ElementStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ElementStatePayload& p) {
    return 0; // TODO
  }

  BITSTRING enc__SecurityPosturePayload(const LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) {
    return BITSTRING(); // TODO
  }

  INTEGER dec__SecurityPosturePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) {
    return 0; // TODO
  }

} // End of namespace LibNg112__EncdecDeclarations
+1 −0
Original line number Diff line number Diff line
sources := LibNg112_EncDec.cc
+2 −0
Original line number Diff line number Diff line
@@ -96,6 +96,8 @@ namespace LibSip__Interface {

    if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::INVITE__E) {
      incoming_message(LibSip__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload()));
    } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::SUBSCRIBE__E) {
      incoming_message(LibSip__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload()));
    } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::NOTIFY__E) {
      incoming_message(LibSip__SIPTypesAndValues::NOTIFY__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload()));
    } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::BYE__E) {
+1 −1
Original line number Diff line number Diff line
/*!
 * \file      held_codec_factory.hh
 * \brief     Header file for ITS HELD/IP protocol codec factory.
 * \brief     Header file for HELD/IP protocol codec factory.
 * \author    ETSI STF525
 * \copyright ETSI Copyright Notification
 *            No part may be reproduced except as authorized by written permission.
+39 −1
Original line number Diff line number Diff line
@@ -440,6 +440,27 @@ int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody&
    p_encoding_buffer = OCTETSTRING(p_message_body.html__body().lengthof(), (unsigned char*)static_cast<const char*>(p_message_body.html__body()));
  } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_text__body)) {
    p_encoding_buffer = OCTETSTRING(p_message_body.text__body().lengthof(), (unsigned char*)static_cast<const char*>(p_message_body.text__body()));
  } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_json__body)) {
    const LibItsHttp__JsonMessageBodyTypes::JsonBody& json_body = p_message_body.json__body();
    if (json_body.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_raw)) {
      p_encoding_buffer = OCTETSTRING(json_body.raw().lengthof(), (unsigned char*)static_cast<const char*>(json_body.raw().get_stringRepr_for_pattern()));
    } else {
      std::map<std::string, std::unique_ptr<codec<Record_Type, Record_Type> > >::const_iterator it;
      bool processed = false;
      loggers::get_instance().log("http_codec::encode_body: Content-Type:'%s'", p_content_type.c_str());
      if (p_content_type.find("json") != std::string::npos) {
        it = _codecs.find("json"); // TODO Use params
        if (it != _codecs.cend()) {
          loggers::get_instance().log("http_codec::encode_body: Call 'json_codec'");
          _codecs["json"]->encode((Record_Type&)json_body, p_encoding_buffer); // TODO Use params
          processed = true;
        }
      } // TODO Add new HTTP message codec here
      if (!processed) {
        loggers::get_instance().warning("http_codec::encode_body: Unsupported HTTP codec, use raw field as default");
        p_encoding_buffer = OCTETSTRING(0, nullptr);
      }
    }
  } else if (p_message_body.ischosen(LibItsHttp__MessageBodyTypes::HttpMessageBody::ALT_xml__body)) {
    const LibItsHttp__XmlMessageBodyTypes::XmlBody& xml_body = p_message_body.xml__body();
    if (xml_body.ischosen(LibItsHttp__XmlMessageBodyTypes::XmlBody::ALT_raw)) {
@@ -663,6 +684,23 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
      loggers::get_instance().log("http_codec::decode_body: Find html message");
      LibItsHttp__MessageBodyTypes::HtmlBody html_body;
      message_body.html__body() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
    } else if (p_content_type.find("json") != std::string::npos) {
      loggers::get_instance().log("http_codec::decode_body: Find json message");
      LibItsHttp__JsonMessageBodyTypes::JsonBody json_body;
      if (_codecs["json"].get() != nullptr) {
        loggers::get_instance().log("http_codec::decode_body: Call 'json_codec'");
        if (_codecs["json"]->decode(body, (Record_Type&)json_body, &p) == -1) {
          loggers::get_instance().warning("http_codec::decode_body: Failed to decode JSON message");
          json_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
        } else {
          loggers::get_instance().log_msg("http_codec::decode_body: Decoded message:", json_body);
          message_body.json__body() = json_body;
        }
      } else {
        loggers::get_instance().warning("http_codec::decode_body: No codec for JSON");
        json_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
      }
      message_body.json__body() = json_body;
    } else {
      loggers::get_instance().log("http_codec::decode_body: Use textBdy as default");
      LibItsHttp__MessageBodyTypes::TextBody text_body;
Loading