ICE Invite with problem (ICE-MISMATCH)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Pedro Gon?alves wrote:
> Benny Prijono wrote:
>>
>> On Wed, Sep 10, 2008 at 11:02 AM, Pedro Gon?alves 
>> <pedro.pandre at gmail.com <mailto:pedro.pandre at gmail.com>> wrote:
>>
>>     Hi!
>>
>>     With PJSUA such problem does not occour, which leads me to
>>     conclude that it must be some problem in my application, somewhere
>>     around the area where the INVITE is built / sent.
>>
>>
>> Yeah that's what I thought.
>>  
>>
>>     With your experience, do you have any idea why in this case the
>>     candidates in use are not some of the candidates included in SDP
>>     and why they are always 4000 (RTP) and 4001(RTCP)?
>>
>>
>> The default candidates (the c= and a=rtcp lines) are written to SDP 
>> by pjmedia_endpt_create_sdp(), using the information from the 
>> sock_info parameter. The sock_info normally comes from 
>> pjmedia_transport_get_info().
>>
>> Looking at your log, I remember that I saw you call 
>> pjmedia_endpt_create_sdp() in the beginning of the call, before the 
>> ICE transport initialization completes. Or perhaps even before the 
>> ICE transport is created at all! I suspect it's the later case, and 
>> in this case, you need to check where do you get the sock_info from. 
>> It could be that you put some hardcoded values there.
>>
>> The correct steps should be like this:
>>  - create the ICE media transport
>>  - wait until initialization completes (STUN resolution and TURN 
>> allocation completes)
>>  - call pjmedia_transport_get_info() to get the sock_info (the 
>> default address)
>>  - call pjmedia_endpt_create_sdp()
>>  - then proceed with the rest as usual 
>> (pjmedia_transport_media_create(), pjmedia_transport_encode_sdp(), 
>> send the INVITE, etc.)
> Hi again!
>
> With your help, I solved the other problems I was talking about.
> However, I am now experiencing some problems when the answerer is 
> sending the initial answer.
> Can you provide a similar description of the steps to perform, like in 
> your answer above?
> At the moment I am doing the following:
> pjsip_tx_data *tdata;
> status = pjsip_inv_answer(SIPEngine::instance->g_inv, 200, NULL, NULL, 
> &tdata);
> const pjmedia_sdp_session *remote_sdp;
> status = pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp);
> [steps similar to the ones you mentioned above]
> status = pjsip_inv_send_msg(inv, tdata);
> status = pjmedia_transport_media_start(my_transport, my_pool, 
> local_sdp, remote_sdp, 0);
>
> Note: the local_sdp is obtained in a similar way to the one you described
>
> Is this correct?
>
> Many thanks
> Pedro Gon?alves
>
Hi!

The code that I shown above doesn't seem to be correct, since I see that 
the candidates are not included in the 200 OK answer (initial answer).
However, it seems to me that there is some sense in the above code not 
working, since I am not giving the local_sdp created like you described 
to pjsip_inv_answer(), so it makes some sense that the candidates 
encoded in local_sdp are not included in that answer.
However, I also can't call pjsip_inv_answer() after I create the 
local_sdp, as I need the remote_sdp to encode it, and I get an assertion 
error if I call pjmedia_sdp_neg_get_active_remote() before creating the 
answer.

How shall this be done?

Many thanks
Pedro Gon?alves



[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux