Commit 9c5d6105 authored by Yann Garcia's avatar Yann Garcia
Browse files

Add SIP MIME support

parent 82f182b5
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -2363,11 +2363,6 @@ void sip_codec_headers::decode_via_header(const osip_message_t* p_sip_message, L
  do {
    loggers::get_instance().log("sip_codec_headers::decode_via_header: Processing item #%d", i);
    LibSip__SIPTypesAndValues::ViaBody v;
    /*Buggy v.sentProtocol() = LibSip__SIPTypesAndValues::SentProtocol(
                                                               CHARSTRING(::via_get_protocol(sip_via)),
                                                               CHARSTRING(::via_get_version(sip_via)),
                                                               CHARSTRING(::via_get_comment(sip_via))
                                                               );*/
    v.sentProtocol() = LibSip__SIPTypesAndValues::SentProtocol(
                                                               CHARSTRING("SIP"),
                                                               CHARSTRING(::via_get_version(sip_via)),
+26 −1
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ int sip_codec_message_body::encode_message_body(const LibSip__MessageBodyTypes::
      sdp_message_free(sdp_body);
    }
  } else if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_mimeMessageBody)) {
    ::osip_message_set_mime_version(p_sip_message, "2.0");
    const LibSip__MessageBodyTypes::MIME__Message& mime = p_message_body.mimeMessageBody();
    const LibSip__MessageBodyTypes::MimeEncapsulatedList& l = mime.mimeEncapsulatedList();
    int pos = 0;
@@ -90,11 +91,23 @@ int sip_codec_message_body::encode_message_body(const LibSip__MessageBodyTypes::
        ::sdp_message_to_str(sdp_body, &buff);
        if (buff != nullptr) {
          loggers::get_instance().log("sip_codec_message_body::encode_message_body: sdp encoded value: %s", buff);
          loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies));
          if (::osip_message_set_body(p_sip_message, buff, strlen(buff)) != 0) {
            loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message");
            osip_free(buff);
            sdp_message_free(sdp_body);
            return -1;
          }
          loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies));
          osip_free(buff);
          sdp_message_free(sdp_body);
          // Retrive the new created body and add content type
          osip_body_t* body = nullptr;
          if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) {
            loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set XML body content-type");
            return -1;
          }
          ::osip_body_set_contenttype(body, "application/sdp");
        }
      } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_xmlBody)) {
        const LibSip__XMLTypes::XmlBody& xml = ps.xmlBody();
@@ -104,10 +117,22 @@ int sip_codec_message_body::encode_message_body(const LibSip__MessageBodyTypes::
          return -1;
        }
        loggers::get_instance().log("sip_codec_message_body::encode_message_body: xml encoded value: %s", body->body);
          loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies));
        if (::osip_message_set_body(p_sip_message, body->body, body->length) != 0) {
          loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message");
          loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode XML message");
          osip_body_free(body);
          return -1;
        }
        loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies));
        osip_body_free(body);
        // Retrive the new created body and add content type
        body = nullptr;
        loggers::get_instance().log("sip_codec_message_body::encode_message_body: get item #%d", ::osip_list_size(&p_sip_message->bodies) - 1);
        if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) {
          loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set XML body content-type");
          return -1;
        }
        ::osip_body_set_contenttype(body, "application/resource-lists+xml");
      } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_msdBody)) {
        loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported decoding of ALT_msdBody");
      } else {
+2 −2
Original line number Diff line number Diff line
@@ -1560,11 +1560,11 @@ module TestCodec_Invite {
        }
        v_enc_msg := bit2oct(encvalue(v_decoded_invite));
        log(match(v_enc_msg, bit2oct(v_enc_message)));
        /*if (match(v_enc_msg, bit2oct(v_enc_message))) {
        if (match(v_enc_msg, bit2oct(v_enc_message))) {
          setverdict(pass, "Encoding match");
        } else {
          setverdict(fail, "Encoding mismatch");
          }*/
        }
      } else {
        setverdict(fail, "Decode failure");
      }