Commit b8817aa3 authored by Yann Garcia's avatar Yann Garcia
Browse files
parents dad0b70f 2f4ca8d5
Loading
Loading
Loading
Loading

.project

0 → 100644
+30 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>STF549_ng112</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.titan.designer.core.TITANBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.titan.designer.core.TITANNature</nature>
		<nature>org.eclipse.titan.log.viewer.TitanLogProject</nature>
	</natures>
	<linkedResources>
		<link>
			<name>ccsrc/Protocols/Tcp/Abstract_Socket.cc</name>
			<type>1</type>
			<location>C:/Users/yann/Documents/wireshark/cygwin64/home/yann/frameworks/titan/titan.core/performance_test/SIPApplibPerfTest/src/Abstract_Socket.cc</location>
		</link>
		<link>
			<name>ccsrc/Protocols/Tcp/Abstract_Socket.hh</name>
			<type>1</type>
			<location>C:/Users/yann/Documents/wireshark/cygwin64/home/yann/frameworks/titan/titan.core/performance_test/SIPApplibPerfTest/src/Abstract_Socket.hh</location>
		</link>
	</linkedResources>
</projectDescription>
+12 −0
Original line number Diff line number Diff line
@@ -86,5 +86,17 @@ namespace LibSip__Interface {

  } // End of user_stop method

  void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address)
  {
    loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par);
    loggers::get_instance().log(">>> SipPort::outgoing_send: %s", destination_address);

    float duration;
    loggers::get_instance().set_start_time(_time_key);
    params params;
    static_cast<sip_layer*>(_layer)->sendMsg(send_par, params);
    loggers::get_instance().set_stop_time(_time_key, duration);
  } // End of outgoing_send
  
}
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ namespace LibSip__Interface {
  protected:
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::Request& send_par, const Address4SIP *destination_address) { };
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address) { };
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address) { };
    void outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address);
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address) { };
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address) { };
    virtual void outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address) { };
+8 −3
Original line number Diff line number Diff line
@@ -503,12 +503,13 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
    // Convert into string
    params p;
    p["decode_str"] = std::string(static_cast<const unsigned char*>(body), body.lengthof() + static_cast<const unsigned char*>(body));
    loggers::get_instance().log("http_codec::decode_body: decode_str: %s", p["decode_str"].c_str());
    // Try to identify xml
    if (p["decode_str"].find("<?xml version=") != std::string::npos) {
       loggers::get_instance().log("http_codec::decode_body: Find xml message");
       LibItsHttp__XmlMessageBodyTypes::XmlBody xml_body;
       // TODO To be refined adding a string identifier to check which codec to use. E.g. held_code.id() returns "xmlns=\"urn:ietf:params:xml:ns:geopriv:held\">"
       if (p["decode_str"].find("xmlns=\"urn:ietf:params:xml:ns:geopriv:held\">") != std::string::npos) {
       if (p["decode_str"].find("xmlns=\"urn:ietf:params:xml:ns:geopriv:held\"") != std::string::npos) {
         loggers::get_instance().log("http_codec::decode_body: Find 'urn:ietf:params:xml:ns:geopriv:held'");
         if (_codecs["held"].get() != nullptr) {
           loggers::get_instance().log("http_codec::decode_body: Call 'held_codec'");
@@ -524,7 +525,7 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
           xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
         }
         message_body.xml__body() = xml_body;
       } else if (p["decode_str"].find("xmlns=\"urn:ietf:params:xml:ns:lost1\">") != std::string::npos) {
       } else if (p["decode_str"].find("xmlns=\"urn:ietf:params:xml:ns:lost1\"") != std::string::npos) {
         loggers::get_instance().log("http_codec::decode_body: Find 'urn:ietf:params:xml:ns:lost1'");
         if (_codecs["lost"].get() != nullptr) {
           loggers::get_instance().log("http_codec::decode_body: Call 'lost_codec'");
@@ -540,6 +541,10 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod
           xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
         }
         message_body.xml__body() = xml_body;
       } else {
         loggers::get_instance().warning("http_codec::decode_body: No XML codec found");
         xml_body.raw() = CHARSTRING(body.lengthof(), (char*)static_cast<const unsigned char*>(body));
         message_body.xml__body() = xml_body;
       }
    } else if (p["decode_str"].find("<html>") != std::string::npos) { // Try to identify HTML
      loggers::get_instance().log("http_codec::decode_body: Find html message");
+112 −50
Original line number Diff line number Diff line
@@ -50,8 +50,6 @@ int sip_codec_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValue
    return -1;
  }

  TRACE_INITIALIZE(TRACE_LEVEL7, NULL);
  
  osip_message_t* sip_message;
  ::parser_init();
  int result = ::osip_message_init(&sip_message);
@@ -70,7 +68,7 @@ int sip_codec_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValue
  decode_request_line(sip_message, msg);

  // Fill Headers
  decode_headers(sip_message, msg);
  decode_request_headers(sip_message, msg);

  // Fill MessageBody
  decode_message_body(sip_message, msg);
@@ -173,7 +171,10 @@ int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::M
  ::osip_via_free(via_header);
  osip_free(hvalue);

  // Decode Optional fields
  // Encode Optional fields
  loggers::get_instance().log("sip_codec_request::encode_request_headers: Encode Optional fields");
  // Authorization
  if (p_msg_header.authorization().is_present()) {
    osip_authorization_t* authorization_header = nullptr;
    if (encode_authorization_header(p_msg_header.authorization(), &authorization_header) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode Authorization header");
@@ -185,7 +186,10 @@ int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::M
    loggers::get_instance().log("sip_codec_request::encode_request_headers: SIP Authorization: %p - %d", p_sip_message->authorizations, result);
    ::osip_authorization_free(authorization_header);
    osip_free(hvalue);
  }
  
  // CallId
  if (p_msg_header.callId().is_present()) {
    osip_call_id_t* call_id_header;
    if (encode_call_id_header(p_msg_header.callId(), &call_id_header) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode Call_Id header");
@@ -193,11 +197,14 @@ int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::M
    }
    ::osip_call_id_to_str(call_id_header, &hvalue);
    loggers::get_instance().log("sip_codec_request::encode_request_headers: Call_Id:%s", hvalue);
  result = ::osip_message_set_call_id(p_sip_message, hvalue);
    int result = ::osip_message_set_call_id(p_sip_message, hvalue);
    loggers::get_instance().log("sip_codec_request::encode_request_headers: SIP Call_Id: %p - %d", p_sip_message->call_id, result);
    ::osip_call_id_free(call_id_header);
    osip_free(hvalue);
  }
  
  // ContactHeader
  if (p_msg_header.contact().is_present()) {
    osip_contact_t* contact_header;
    if (encode_contact_header(p_msg_header.contact(), &contact_header) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode Contact header");
@@ -205,11 +212,13 @@ int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::M
    }
    ::osip_contact_to_str(contact_header, &hvalue);
    loggers::get_instance().log("sip_codec_request::encode_request_headers: Contact: %s", hvalue);
  result = ::osip_message_set_contact(p_sip_message, hvalue);
    int result = ::osip_message_set_contact(p_sip_message, hvalue);
    loggers::get_instance().log("sip_codec_request::encode_request_headers: SIP Contact: %p - %d", p_sip_message->contacts, result);
    ::osip_contact_free(contact_header);
    osip_free(hvalue);
  }
  
  // CSeq
  osip_cseq_t* cseq_header = nullptr;
  if (encode_c_seq_header(p_msg_header.cSeq(), &cseq_header) == -1) {
    loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode CSeq header");
@@ -222,18 +231,34 @@ int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::M
  osip_free(hvalue);

  // MaxForwards
  if (p_msg_header.maxForwards().is_present()) {
    if (encode_max_forwards_header(p_msg_header.maxForwards(), &p_sip_message) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode MaxForwards header");
      return -1;
    }
  }
  
  // Supported
  if (p_msg_header.supported().is_present()) {
    if (encode_supported_header(p_msg_header.supported(), &p_sip_message) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode Supported header");
      return -1;
    }
  }
  
  // PAccessNetworkInfo
  if (p_msg_header.pAccessNetworkInfo().is_present()) {
    if (encode_p_access_network_info_header(p_msg_header.pAccessNetworkInfo(), &p_sip_message) == -1) {
      loggers::get_instance().warning("sip_codec_request::encode_request_headers: Faile to encode PAccessNetworkInfo header");
      return -1;
    }
  }
  // TODO continue

  int i = 0;
  osip_header_t* h_;
  while (::osip_message_get_header(p_sip_message, i++, &h_) == 0) {
    loggers::get_instance().warning("sip_codec_request::encode_request_headers (1): '%s'/'%s' was not processed", h_->hname, h_->hvalue);
  } // End of 'while' statement
  
  return 0;
} // End of method encode_request_headers
@@ -611,6 +636,37 @@ int sip_codec_request::encode_supported_header(const OPTIONAL<LibSip__SIPTypesA
  return 0;
}

int sip_codec_request::encode_p_access_network_info_header(const OPTIONAL<LibSip__SIPTypesAndValues::PAccessNetworkInfo>& p_access_network_info, osip_message_t** p_sip_message) {
  loggers::get_instance().log(">>> sip_codec_request::encode_p_access_network_info_header");

  if (!p_access_network_info.is_present()) {
    return 0;
  }

  // pAccessNetworkInfo := { fieldName := P_ACCESS_NETWORK_INFO_E (65), accessType := "IEEE-802.11a", genericParams := { { id := "extension-access-info", paramValue := { tokenOrHost := "192.1.1.20" } } } }
  // Encode AccessType
  // TODO Try to get the P-Access-Network-Info header
  
  /*osip_header_t* p_access_network_info_;
  ::osip_header_init(&p_access_network_info_);
  osip_header_set_name (p_access_network_info_, "P-Access-Network-Info";
  // Encode generic params
  const LibSip__SIPTypesAndValues::PAccessNetworkInfo& pa = static_cast<const LibSip__SIPTypesAndValues::PAccessNetworkInfo&>(*p_access_network_info.get_opt_value());
  if (pa.genericParams().is_present()) {
    osip__t* params;
    ::osip_list_init(&params);
    encode_semi_colon_params(static_cast<const LibSip__Common::SemicolonParam__List>(pa.genericParams()), &params);
    
    osip_header_set_value(p_access_network_info_, value);
    //p_access_network_info_->hvalue = 
  }
  
  osip_message_set_header(p_sip_message, "P-Access-Network-Info", p_access_network_info_);
  ::osip_header_free(p_access_network_info_);*/
  
  return 0;
}

int sip_codec_request::encode_to_header(const LibSip__SIPTypesAndValues::To& p_to, osip_to_t** p_to_header) {
  loggers::get_instance().log(">>> sip_codec_request::encode_to_header");
  
@@ -701,9 +757,9 @@ int sip_codec_request::encode_via_header(const LibSip__SIPTypesAndValues::Via& p


 
void sip_codec_request::decode_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request)
void sip_codec_request::decode_request_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request)
{
  loggers::get_instance().log(">>> sip_codec_request::decode_headers");
  loggers::get_instance().log(">>> sip_codec_request::decode_request_headers");
  
  LibSip__SIPTypesAndValues::MessageHeader headers;
  // Decode mandatory fields
@@ -868,7 +924,13 @@ void sip_codec_request::decode_headers(const osip_message_t* p_sip_message, LibS
  headers.minExpires().set_to_omit();
  headers.minSE().set_to_omit();
  headers.organization().set_to_omit();


  // TODO
  headers.pAccessNetworkInfo().set_to_omit();


  
  headers.pAssertedID().set_to_omit();
  headers.pAssertedService().set_to_omit();
  headers.pAssociatedURI().set_to_omit();
@@ -939,11 +1001,11 @@ void sip_codec_request::decode_headers(const osip_message_t* p_sip_message, LibS
  int i = 0;
  osip_header_t* h_;
  while (::osip_message_get_header(p_sip_message, i++, &h_) == 0) {
    loggers::get_instance().warning("sip_codec_request::decode_header (1): '%s'/'%s' was not processed", h_->hname, h_->hvalue);
    loggers::get_instance().warning("sip_codec_request::decode_request_headers: '%s'/'%s' was not processed", h_->hname, h_->hvalue);
  } // End of 'while' statement
  
  loggers::get_instance().log_msg("<<< sip_codec_request::decode_headers: ", p_request);
} // End of method decode_headers
  loggers::get_instance().log_msg("<<< sip_codec_request::decode_request_headers: ", p_request);
} // End of method decode_request_headers

void sip_codec_request::decode_message_body(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request)
{
Loading