diff --git a/src/sdp.cpp b/src/sdp.cpp index 7b847bbbeab70e4bf26d0ab98f424d47e951032f..7b1d2634803ecba88f22a560e31ea24f36d310af 100644 --- a/src/sdp.cpp +++ b/src/sdp.cpp @@ -32,10 +32,11 @@ static const pj_str_t STR_RTP_AVP = { (char*)"RTP/AVP", 7 }; static const pj_str_t STR_SDP_NAME = { (char*)"sflphone", 7 }; static const pj_str_t STR_SENDRECV = { (char*)"sendrecv", 8 }; - Sdp::Sdp( pj_pool_t *pool ) + Sdp::Sdp( pj_pool_t *pool, int port ) : _local_media_cap(), _session_media(0), _ip_addr( "" ), _local_offer( NULL ), _negociated_offer(NULL), _negociator(NULL), _pool(NULL) { _pool = pool; + _localAudioPort = 65555; ///port; } Sdp::~Sdp() { @@ -63,7 +64,7 @@ void Sdp::set_media_descriptor_line( sdpMedia *media, pj_strdup(_pool, &med->desc.media, ( media->get_media_type() == MIME_TYPE_AUDIO ) ? &STR_AUDIO : &STR_VIDEO ); med->desc.port_count = 1; - med->desc.port = media->get_port(); + med->desc.port = 65555; //media->get_port(); pj_strdup (_pool, &med->desc.transport, &STR_RTP_AVP); // Media format ( RTP payload ) @@ -103,6 +104,7 @@ void Sdp::set_media_descriptor_line( sdpMedia *media, int Sdp::create_local_offer (){ pj_status_t status; + _debug ("Create local offer\n"); // Build local media capabilities set_local_media_capabilities (); @@ -121,20 +123,22 @@ int Sdp::create_local_offer (){ //sdp_addAttributes( _pool ); sdp_add_media_description( ); + _debug ("local port = %i\n", _localAudioPort); + toString (); + // Validate the sdp session status = pjmedia_sdp_validate( this->_local_offer ); if (status != PJ_SUCCESS) return status; + return PJ_SUCCESS; } - - - int Sdp::create_initial_offer( ){ pj_status_t status; pjmedia_sdp_neg_state state; + _debug ("Create initial offer\n"); // Build the SDP session descriptor create_local_offer( ); @@ -154,6 +158,8 @@ int Sdp::receiving_initial_offer( pjmedia_sdp_session* remote ){ pj_status_t status; pjmedia_sdp_neg_state state; + _debug ("Receiving initial offer\n"); + // Create the SDP negociator instance by calling // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional ) @@ -336,10 +342,12 @@ void Sdp::set_local_media_capabilities () { sdpMedia *audio; CodecsMap codecs_list; CodecsMap::iterator iter; - AudioCodec *codec_to_add; + + _debug ("Fetch local media capabilities .......... %i" , getLocalExternAudioPort()); /* Only one audio media used right now */ audio = new sdpMedia(MIME_TYPE_AUDIO); + audio->set_port (_localAudioPort); /* We retrieve the codecs selected by the user */ selected_codecs = Manager::instance().getCodecDescriptorMap().getActiveCodecs(); @@ -352,4 +360,6 @@ void Sdp::set_local_media_capabilities () { audio->add_codec (iter->second); } + _local_media_cap.push_back (audio); + _debug ("%s\n", audio->to_string ().c_str()); } diff --git a/src/sdp.h b/src/sdp.h index 4b846dce2e980aba3095a58a8fe4f7d1df4cfe1d..203cf73ddc88422d81818232dbc254160701d60e 100644 --- a/src/sdp.h +++ b/src/sdp.h @@ -40,7 +40,7 @@ class Sdp { * * @param ip_addr */ - Sdp(pj_pool_t *pool); + Sdp(pj_pool_t *pool, int port); /* Class destructor */ ~Sdp(); @@ -144,9 +144,9 @@ class Sdp { ///////////////////////////////////////////////////////////////////////////33 - void setLocalExternAudioPort(int port){ _localPort = port; } + void setLocalExternAudioPort(int port){ _localAudioPort = port; } - int getLocalExternAudioPort (void){ return _localPort; } + int getLocalExternAudioPort (void){ return _localAudioPort; } void toString (void); @@ -288,12 +288,12 @@ class Sdp { */ void sdp_add_media_description(); + int _localAudioPort; //////////////////////////////////////////////////////////////////3 /** Codec pointer */ AudioCodecType _audioCodec; - int _localPort; /** Remote's IP address */ std::string _remoteIPAddress; diff --git a/src/sipcall.cpp b/src/sipcall.cpp index 43aabe062073070ac69a3b22bdaf8dc945cac5ca..6314a7110da9bf3bc86ea682eae57920603d9c2e 100644 --- a/src/sipcall.cpp +++ b/src/sipcall.cpp @@ -32,7 +32,7 @@ SIPCall::SIPCall(const CallID& id, Call::CallType type, pj_pool_t *pool) : Call( , _invSession(NULL) , _local_sdp(0) { - _local_sdp = new Sdp (pool); + _local_sdp = new Sdp (pool, getLocalExternAudioPort() ); _debug("SIPCALL::Constructor for this clss is called \n"); } diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index 90f607801039886d34b68b99f7470b138f03b6a5..6aa49bb68e973935c927d804887e7729e1e147dc 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -913,6 +913,7 @@ SIPVoIPLink::SIPStartCall(SIPCall* call, const std::string& subject UNUSED) pj_str_t from, to, contact; AccountID id; SIPAccount *account; + pjsip_inv_session *inv; if (!call) return false; @@ -943,7 +944,6 @@ SIPVoIPLink::SIPStartCall(SIPCall* call, const std::string& subject UNUSED) setCallAudioLocal(call, getLocalIPAddress(), useStun(), getStunServer()); // Create the invite session for this call - pjsip_inv_session *inv; status = pjsip_inv_create_uac(dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); PJ_ASSERT_RETURN(status == PJ_SUCCESS, false);