Author Topic: Yate changing RTP port  (Read 16798 times)

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Yate changing RTP port
« on: January 25, 2016, 08:07:50 AM »
Hi,

Dear Yate Team,

Please could you advise why Yate server acting as SBC while receiving Re-invite(for session refresh in dialog invite) from remote side is answering with 200 OK where in SDP is changing RTP source port.
Is there anyway to configure Yate not to change port ?

Thanks in advance

marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #1 on: January 29, 2016, 01:57:41 AM »
This should not happen if there is no SDP in invite.
Please attach log to see SIP meesages.
Please specify which version of yate are you using.

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #2 on: January 29, 2016, 02:06:13 AM »
Dear Marian,

Thanks for prompt responce,

Yate version is YATE 5.2.0-1 r5801

Invite contains SDP with the same values as in first one.

I can not attach trace because i didnt saved it.

But anyway Invite contains SDP 


marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #3 on: January 29, 2016, 02:52:22 AM »
Looking in spec (RFC 4028) I saw that session refresh is incorrect: Yate don't advertise support for it.

Anyway, what you can do:

Set in ysipchan.conf:
[general]
update_verify=yes

If enable update verify you MUST handle it.
When receiving a re-INVITE with media the module will send a call.update message with:
operation: verify
method: message_method_name (INVITE)
received headers
received media params
You MUST handle the message, check headers for session refresh specific.
Return true from message handle to let media change
Return false to reject media change. Set 'error' with code you want to return. Set custom headers using 'osip_' prefix

Yate don't look at received SDP

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #4 on: January 29, 2016, 05:02:52 AM »
Hi Marian,

Please could you share how can i handle the message(the command list) and in which file it must be specified?

marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #5 on: January 29, 2016, 06:01:45 AM »
There is no command for it.
You must write your message handler using:

A custom C++ module.

Use regexroute module.
http://docs.yate.ro/wiki/Regular_expressions#Handling_extra_messages

Use yate javascript.
http://docs.yate.ro/wiki/Javascript
http://docs.yate.ro/wiki/Messages_in_JS

Use external module (write a PHP script):
http://docs.yate.ro/wiki/External_Module
http://docs.yate.ro/wiki/Lib_Yate_PHP

Some PHP/javascript examples may be found in yate sources under
share/scripts

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #6 on: January 29, 2016, 06:29:56 AM »
Dear Marian,

It will look like

;regexroute example:

[extra]
call.update=50

[call.update]
${sip_Invite}^$= ? ? ? (What must be written here for to return true from message handle to let media change)  ???

marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #7 on: January 29, 2016, 06:46:35 AM »
[call.update]
${operation}^verify$=return true

You should read the entire regexroute page, including regexroute.conf.sample section.

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #8 on: February 09, 2016, 06:28:22 AM »
Dear Marian,

As we detected Yate is changing RTP port on one leg only,
Like we have 2 interfaces Yate is binded.
While receiving Invite from B interface Yate answers with 200 OK without changing rtp port,
but during the same call when Yate is receiving Invite from A interface it answers with 200 OK and with changed rtp port.
Also as we can see from sniffer debug there is Operation = verify in logs while receiving Invite.
Can you please investigate how force Yate not to change rtp port while session refresh ?

Huge thanks

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #9 on: February 09, 2016, 08:40:03 AM »
Dear Marian,

Also please could You help to create a datatranslator for alaw->g729
as we face with some
No DataTranslator created for 'alaw' -> 'g729'

marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #10 on: February 09, 2016, 09:19:11 AM »
I'm sorry, I don't have enough time to build a solution for re-invite handling.

For G729: yate don't have a G729 data translator.
You should disable it or use a third party module handling the G729 format.
Some hints:
https://github.com/vir/yate-g72X-ipp
http://yate.hosting.lv

arts111199

  • Newbie
  • *
  • Posts: 28
    • View Profile
Re: Yate changing RTP port
« Reply #11 on: February 11, 2016, 07:53:20 AM »
Dear Marian,

Thanks for answers.

but after deep investigation i found sniffed messages presented below.
As i understand chan.rtp is releasing the rtp legs while receiving reinvite and after changing localport param.
Please can you advise how can we fix this issue ???

Sniffed 'chan.rtp' time=1455181133.881092
  thread=0x1940a20 'YSIP EndPoint'
  data=(nil)
  retval='(null)'
  param['rtpid'] = 'yrtp/1362960942'
  param['media'] = 'audio'
  param['transport'] = 'RTP/AVP'
  param['terminate'] = 'true'
  param['call_direction'] = 'incoming'
  param['call_address'] = 'y.y.y.y:5060'
  param['call_status'] = 'answered'
  param['call_billid'] = '1454933764-119801'
Returned true 'chan.rtp' delay=0.000047
  thread=0x1940a20 'YSIP EndPoint'
  data=(nil)
  retval='(null)'
  param['rtpid'] = 'yrtp/1362960942'
  param['media'] = 'audio'
  param['transport'] = 'RTP/AVP'
  param['terminate'] = 'true'
  param['call_direction'] = 'incoming'
  param['call_address'] = 'y.y.y.y:5060'
  param['call_status'] = 'answered'
  param['call_billid'] = '1454933764-119801'
  param['handlers'] = 'yrtp:100'
  param['localip'] = 'x.x.x.x'
  param['localport'] = '25318'
  param['stats'] = 'PS=45538,OS=910760,PR=45000,OR=900000,PL=0'
  param['status'] = 'terminated'



20160211085853.881178 >>> DataTranslator::detachChain(0x7fbee40b14a0,0x7fbcfc0d26a0)
20160211085853.881189 <<< DataTranslator::detachChain
20160211085853.881198 >>> DataTranslator::detachChain(0x7fbcfc150080,0x7fbee409f0d0)
20160211085853.881204 <<< DataTranslator::detachChain
20160211085853.881216 <ALL> Cleaning up RTP 0x7fbee40ac480 [0x7fbee4044970]





Sniffed 'chan.rtp' time=1455181133.881291
  thread=0x1940a20 'YSIP EndPoint'
  data=0x7fbedc1155f0
  retval='(null)'
  param['id'] = 'sip/241959'
  param['module'] = 'sip'
  param['call_direction'] = 'incoming'
  param['call_address'] = 'y.y.y.y:5060'
  param['call_status'] = 'answered'
  param['call_billid'] = '1454933764-119801'
  param['media'] = 'audio'
  param['transport'] = 'RTP/AVP'
  param['direction'] = 'bidir'
  param['format'] = 'g729'
  param['ipv6_support'] = 'false'
  param['remoteip'] = 'y.y.y.y'
  param['remoteport'] = '9746'
  param['evpayload'] = '96'
  param['sdp_maxptime'] = '20'
  param['sdp_3gOoBTC'] = ''
20160211085853.881409 <INFO> DataTranslator::attachChain [0x7fbedc109700] '(null)' -> [0x7fbcfc0d26a0] 'g729' not possible
20160211085853.881428 <INFO> DataTranslator::attachChain [0x7fbcfc150080] 'g729' -> [0x7fbedc081fc0] '(null)' not possible
20160211085853.881456 >>> DataTranslator::detachChain(0x7fbedc109700,0x7fbcfc0d26a0)
20160211085853.881466 <<< DataTranslator::detachChain
20160211085853.881476 <ALL> DataTranslator::attachChain [0x7fbedc109700] 'g729' -> [0x7fbcfc0d26a0] 'g729' succeeded
20160211085853.881482 >>> DataTranslator::detachChain(0x7fbcfc150080,0x7fbedc081fc0)
20160211085853.881486 <<< DataTranslator::detachChain
20160211085853.881492 <ALL> DataTranslator::attachChain [0x7fbcfc150080] 'g729' -> [0x7fbedc081fc0] 'g729' succeeded
Returned true 'chan.rtp' delay=0.000257
  thread=0x1940a20 'YSIP EndPoint'
  data=0x7fbedc1155f0
  retval='(null)'
  param['id'] = 'sip/241959'
  param['module'] = 'sip'
  param['call_direction'] = 'incoming'
  param['call_address'] = 'y.y.y.y:5060'
  param['call_status'] = 'answered'
  param['call_billid'] = '1454933764-119801'
  param['media'] = 'audio'
  param['transport'] = 'RTP/AVP'
  param['direction'] = 'bidir'
  param['format'] = 'g729'
  param['ipv6_support'] = 'false'
  param['remoteip'] = 'y.y.y.y'
  param['remoteport'] = '9746'
  param['evpayload'] = '96'
  param['sdp_maxptime'] = '20'
  param['sdp_3gOoBTC'] = ''
  param['handlers'] = 'yrtp:100'
  param['localip'] = 'x.x.x.x'
  param['localport'] = '16950'
  param['rtpid'] = 'yrtp/70563133'
  param['status'] = 'created'

marian

  • Hero Member
  • *****
  • Posts: 513
    • View Profile
Re: Yate changing RTP port
« Reply #12 on: February 11, 2016, 09:57:31 AM »
I don't see a solution for now.
Maybe you should post a feature request for a setting instructing the module not to change local rtp when handling re-INVITE with same remote media.