Yate Community Forum
Yate server => Other Yate server issues => Topic started by: arts111199 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
-
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.
-
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
-
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
-
Hi Marian,
Please could you share how can i handle the message(the command list) and in which file it must be specified?
-
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
-
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) ???
-
[call.update]
${operation}^verify$=return true
You should read the entire regexroute page, including regexroute.conf.sample section.
-
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
-
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'
-
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
-
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'
-
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.