Commit 121a6952 authored by Yann Garcia's avatar Yann Garcia
Browse files

Merge branch 'devel'

parents 8552ae70 b67cdc99
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -91,9 +91,9 @@ public: //! \publicsection

  /*!
   * \virtual
   * \fn void send_data(OCTETSTRING& data, params& params);
   * \brief Send bytes formated data to the lower layers
   * \param[in] p_data The data to be sent
   * \fn void send_data(OCTETSTRING& p_data, params& params);
   * \brief Send bytes formated p_data to the lower layers
   * \param[in] p_data The p_data to be sent
   * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters
   * \todo Remove the logs
   * \virtual
@@ -102,10 +102,10 @@ public: //! \publicsection

  /*!
   * \virtual
   * \fn void receive_data(OCTETSTRING& data, params& params);
   * \brief Receive bytes formated data from the lower layers
   * \param[in] p_data The bytes formated data received
   * \param[in] p_params Some lower layers parameters values when data was received
   * \fn void receive_data(OCTETSTRING& p_data, params& params);
   * \brief Receive bytes formated p_data from the lower layers
   * \param[in] p_data The bytes formated p_data received
   * \param[in] p_params Some lower layers parameters values when p_data was received
   * \todo Remove the logs
   * \virtual
   */
@@ -120,27 +120,27 @@ public: //! \publicsection
  inline const std::string& to_string() const { return type; };

protected: //! \protectedsection
  inline void to_all_layers(std::vector<layer *> &layers, OCTETSTRING &data, params &params) {
  inline void to_all_layers(std::vector<layer *> &layers, OCTETSTRING &p_data, params &params) {
    for (std::vector<layer *>::const_iterator it = layers.cbegin(); it != layers.cend(); ++it) {
      layer *p = *it;
      printf("to_all_layers: %p\n", (void*)p);
      p->receive_data(data, params);
      p->receive_data(p_data, params);
    }                                // End of 'for' statement
  };

  inline void receive_to_all_layers(OCTETSTRING &data, params &params) {
  inline void receive_to_all_layers(OCTETSTRING &p_data, params &params) {
    for (std::vector<layer *>::const_iterator it = upperLayers.cbegin(); it != upperLayers.cend(); ++it) {
      layer *p = static_cast<layer*>(*it);
      printf("receive_to_all_layers: %p\n", (void*)p);
      p->receive_data(data, params);
      p->receive_data(p_data, params);
    } // End of 'for' statement
  };

  inline void send_to_all_layers(OCTETSTRING &data, params &params) {
  inline void send_to_all_layers(OCTETSTRING &p_data, params &params) {
    for (std::vector<layer *>::const_iterator it = lowerLayers.cbegin(); it != lowerLayers.cend(); ++it) {
      layer *p = static_cast<layer*>(*it);
      printf("send_to_all_layers: %p\n", (void*)p);
      p->send_data(data, params);
      p->send_data(p_data, params);
    } // End of 'for' statement
  };
}; // End of class layer
+16 −16
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
#include "LibHttp_XmlMessageBodyTypes.hh"
#include "LibHttp_JsonMessageBodyTypes.hh"

int http_codec::encode(const LibHttp__TypesAndValues::HttpMessage &msg, OCTETSTRING &data) {
int http_codec::encode(const LibHttp__TypesAndValues::HttpMessage &msg, OCTETSTRING &p_data) {
  loggers::get_instance().log_msg(">>> http_codec::encode: ", (const Base_Type &)msg);
  loggers::get_instance().log(">>> http_codec::encode: %p", this);

@@ -33,14 +33,14 @@ int http_codec::encode(const LibHttp__TypesAndValues::HttpMessage &msg, OCTETSTR
    return -1;
  }

  data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());
  p_data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());

  loggers::get_instance().log_msg("<<< http_codec::encode: data=", data);
  loggers::get_instance().log_msg("<<< http_codec::encode: p_data=", p_data);
  return result;
}

int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMessage &msg, params *params) {
  loggers::get_instance().log_msg(">>> http_codec::decode: data=", data);
int http_codec::decode(const OCTETSTRING &p_data, LibHttp__TypesAndValues::HttpMessage &msg, params *params) {
  loggers::get_instance().log_msg(">>> http_codec::decode: p_data=", p_data);

  TTCN_EncDec::clear_error();
  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
@@ -49,8 +49,8 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
  loggers::get_instance().log("http_codec::decode: _initial_content_length=%d", _initial_content_length);
  if (_initial_content_length != 0) { // Check if the data is a new fragment of the response 
    loggers::get_instance().warning("http_codec::decode: Need to bufferize and wait for all fragments received");
    _bufferized_buffers.push_back(data);
    _current_content_length += data.lengthof(); // FIXME Need to calculate the size of the header buffer, do not assume th first fragmwnt is the header buffer
    _bufferized_buffers.push_back(p_data);
    _current_content_length += p_data.lengthof(); // FIXME Need to calculate the size of the header buffer, do not assume th first fragmwnt is the header buffer
    loggers::get_instance().log("http_codec::decode: _bufferized_buffers size: %d - _current_content_length: %d - _initial_content_length: %d", _bufferized_buffers.size(), _current_content_length, _initial_content_length);
    if (_current_content_length < _initial_content_length) { // Wait for the next fragment
      loggers::get_instance().warning("http_codec::decode: Wait for the next fragment");
@@ -71,7 +71,7 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
      // Continue the decoding
    }
  } else { // It can be a full HTTP response or the first gragment of the HTTP response
    decoding_buffer.put_string(data);
    decoding_buffer.put_string(p_data);
  }
  loggers::get_instance().log("http_codec::decode: decoding_buffer size: %d", decoding_buffer.get_len());
  loggers::get_instance().log_to_hexa("http_codec::decode: Before decoding_buffer Body: ", decoding_buffer);
@@ -126,8 +126,8 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
        loggers::get_instance().log("http_codec::decode: Set bufferization counters");
        _initial_content_length = _dc.length;
        _current_content_length = 0;
        _bufferized_buffers.push_back(data);
        _current_content_length += data.lengthof();
        _bufferized_buffers.push_back(p_data);
        _current_content_length += p_data.lengthof();
        loggers::get_instance().log("http_codec::decode: _bufferized_buffers size: %d - _current_content_length: %d", _bufferized_buffers.size(), _current_content_length);
        return -2;
      } else if ((decoding_buffer.get_pos() == decoding_buffer.get_len()) && (_dc.length > 0)/*no more byte in to decode in decoding_buffer and Coontent-Length > 0*/) { // Missing body
@@ -137,8 +137,8 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
        loggers::get_instance().log("http_codec::decode: Set bufferization counters");
        _initial_content_length = _dc.length;
        _current_content_length = 0;
        _bufferized_buffers.push_back(data);
        _current_content_length += data.lengthof();
        _bufferized_buffers.push_back(p_data);
        _current_content_length += p_data.lengthof();
        loggers::get_instance().log("http_codec::decode: _bufferized_buffers size: %d - _current_content_length: %d, current decoding pos: %d", _bufferized_buffers.size(), _current_content_length, decoding_buffer.get_pos());
        return -2;
      } else {
@@ -207,8 +207,8 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
        loggers::get_instance().log("http_codec::decode (request): Set bufferization counters");
        _initial_content_length = _dc.length;
        _current_content_length = 0;
        _bufferized_buffers.push_back(data);
        _current_content_length += data.lengthof();
        _bufferized_buffers.push_back(p_data);
        _current_content_length += p_data.lengthof();
        loggers::get_instance().log("http_codec::decode (request): _bufferized_buffers size: %d - _current_content_length: %d", _bufferized_buffers.size(), _current_content_length);
        return -2;
      } else if ((decoding_buffer.get_pos() == decoding_buffer.get_len()) && (_dc.length > 0)/*no more byte in to decode in decoding_buffer and Coontent-Length > 0*/) { // Missing body
@@ -218,8 +218,8 @@ int http_codec::decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMes
        loggers::get_instance().log("http_codec::decode (request): Set bufferization counters");
        _initial_content_length = _dc.length;
        _current_content_length = 0;
        _bufferized_buffers.push_back(data);
        _current_content_length += data.lengthof();
        _bufferized_buffers.push_back(p_data);
        _current_content_length += p_data.lengthof();
        loggers::get_instance().log("http_codec::decode (request): _bufferized_buffers size: %d - _current_content_length: %d, current decoding pos: %d", _bufferized_buffers.size(), _current_content_length, decoding_buffer.get_pos());
        return -2;
      } else {
+2 −2
Original line number Diff line number Diff line
@@ -69,8 +69,8 @@ public:
  explicit http_codec() : codec_gen<LibHttp__TypesAndValues::HttpMessage, LibHttp__TypesAndValues::HttpMessage>(), _ec(), _dc(), _codecs(), _bufferized_buffers(), _initial_content_length{0}, _current_content_length{0} {};
  virtual ~http_codec(){};

  virtual int encode(const LibHttp__TypesAndValues::HttpMessage &, OCTETSTRING &data);
  virtual int decode(const OCTETSTRING &data, LibHttp__TypesAndValues::HttpMessage &, params *params = NULL);
  virtual int encode(const LibHttp__TypesAndValues::HttpMessage &, OCTETSTRING &p_data);
  virtual int decode(const OCTETSTRING &p_data, LibHttp__TypesAndValues::HttpMessage &, params *params = NULL);

  void set_payload_codecs(const std::string& p_codecs);

+11 −11
Original line number Diff line number Diff line
@@ -73,8 +73,8 @@ void http_layer::sendMsg(const LibHttp__TypesAndValues::HttpMessage &p_http_mess
  send_data(data, _params);
}

void http_layer::send_data(OCTETSTRING &data, params &params) {
  loggers::get_instance().log_msg(">>> http_layer::send_data: ", data);
void http_layer::send_data(OCTETSTRING &p_data, params &params) {
  loggers::get_instance().log_msg(">>> http_layer::send_data: ", p_data);

  loggers::get_instance().log("http_layer::send_data: _params: ");
  _params.log();
@@ -132,32 +132,32 @@ void http_layer::send_data(OCTETSTRING &data, params &params) {
    buffer.put_cs("Date: ");
    buffer.put_cs(timeString);
    buffer.put_cs("\r\n");
    if (data.lengthof() != 0) {
    if (p_data.lengthof() != 0) {
      buffer.put_cs("Content-length: ");
      buffer.put_cs(static_cast<const char *>(int2str(data.lengthof() + 2 /*Stand for the last CRLF*/)));
      buffer.put_cs(static_cast<const char *>(int2str(p_data.lengthof() + 2 /*Stand for the last CRLF*/)));
      buffer.put_cs("\r\n\r\n");
      buffer.put_os(data);
      buffer.put_os(p_data);
    } else {
      // Omit Content-length header for empty body
      buffer.put_cs("\r\n");
    }
    buffer.put_cs("\r\n");
    data = OCTETSTRING(buffer.get_len(), buffer.get_data());
    p_data = OCTETSTRING(buffer.get_len(), buffer.get_data());
  }

  loggers::get_instance().log_msg("http_layer::send_data: ", data);
  send_to_all_layers(data, params);
  loggers::get_instance().log_msg("http_layer::send_data: ", p_data);
  send_to_all_layers(p_data, params);
}

void http_layer::receive_data(OCTETSTRING &data, params &params) {
  loggers::get_instance().log_msg(">>> http_layer::receive_data: ", data);
void http_layer::receive_data(OCTETSTRING &p_data, params &params) {
  loggers::get_instance().log_msg(">>> http_layer::receive_data: ", p_data);

  // Decode HTTP message
  LibHttp__TypesAndValues::HttpMessage http_message;
  if (_codec == nullptr) {
    loggers::get_instance().error("http_layer::receive_data: Create codec");
  }
  int ret_code = _codec->decode(data, http_message, &params);
  int ret_code = _codec->decode(p_data, http_message, &params);
  if (ret_code == -1) {
    loggers::get_instance().warning("http_layer::receive_data: Failed to decode data");
    return;
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@

#include "LibHttp_JsonMessageBodyTypes.hh"

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

Loading