[OpenSIPS-Users] Duplicate media description (m=) and codec_* functions in textops

Bogdan-Andrei Iancu bogdan at opensips.org
Tue Jan 29 10:59:51 CET 2013


Hi Remco,

I just added yesterday the stream_exists() and strem_remove() functions 
. Please take a look:
         
http://www.opensips.org/html/docs/modules/devel/sipmsgops.html#id293853

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 01/23/2013 01:45 PM, Bogdan-Andrei Iancu wrote:
> Hi Remco,
>
> I agree - t38 should not be seen as a codec, but rather as stream...
> Maybe adding 2 new functions will do the trick:
>     1) stream_search("");
>     2) stream_remove("");
>
> And use as param the name of the streams.
>
> Regards,
>
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developer
> http://www.opensips-solutions.com
>
>
> On 01/23/2013 11:55 AM, Remco . wrote:
>> Hi Bogdan,
>>
>> Thanks, I will try the fix ASAP.
>>
>> Only removing t38 is enough to trick the UA in this case to accept the
>> SDP, however the resulting packet is not valid which can cause issues
>> with firewalls that do spi.
>> For it to be valid, the whole media description (including all the
>> lines starting with T38) should be removed.
>>
>> T38 is a whole different animal in this perspective being related to a
>>   different stream type instead of a codec option.. Perhaps the
>> implementation of a remove_stream([audio,video,image]) function or
>> something like it is an idea for future versions? The use of this
>> function would be to remove incompatible stream types (e.g. carriers
>> that do not support video and/or image type streams).
>>
>> For now, I'll test the fix and report back.
>>
>> Regards,
>> Remco.
>>
>> On Tue, Jan 22, 2013 at 1:35 PM, Bogdan-Andrei Iancu
>> <bogdan at opensips.org>  wrote:
>>> Hi Remco,
>>>
>>> Indeed, I found some issues in the sipmsgops module - the T38 stream 
>>> seems
>>> to be slightly different than an audio stream. I made a fix on SVN 
>>> (trunk
>>> rev #9612, 1.8 rev #9613 and 1.7 rev #9614) - please update and 
>>> re-test.
>>>
>>> Now, the "search" part is fine, but on the delete part is strange. 
>>> If you do
>>> the delete, you end up with like:
>>>
>>> v=0
>>> o=- 144969 144969 IN IP4 111.222.111.111
>>> s=-
>>> c=IN IP4 111.222.111.111
>>> t=0 0
>>> m=audio 12345 RTP/AVP 8 0 18
>>>
>>> a=rtpmap:8 PCMA/8000
>>> a=rtpmap:0 PCMU/8000
>>> m=image 13444 udptl
>>>
>>> a=T38FaxVersion:0
>>> a=T38MaxBitRate:14400
>>> a=T38FaxRateManagement:transferredTCF
>>> a=T38FaxMaxBuffer:200
>>> a=T38FaxMaxDatagram:200
>>> a=T38FaxUdpEC:t38UDPRedundancy
>>>
>>> See the 'm' line for image, where the codec name was removed, but 
>>> you end up
>>> with a stream with no codec at all....Is this something valid ? or 
>>> should
>>> the entire stream be removed ? if we remove the stream (and let's 
>>> say there
>>> is only one stream), a session without any stream is still valid ??
>>>
>>>
>>> Regards,
>>>
>>> Bogdan-Andrei Iancu
>>> OpenSIPS Founder and Developer
>>> http://www.opensips-solutions.com
>>>
>>>
>>> On 01/22/2013 01:36 AM, Remco . wrote:
>>>> Hi Bogdan,
>>>>
>>>> I'm using opensips 1.7.2 (debian package from opensips apt sources).
>>>>
>>>> $>   opensips -V
>>>> version: opensips 1.7.2-notls (x86_64/linux)
>>>> flags: STATS: Off, USE_IPV6, USE_TCP, DISABLE_NAGLE, USE_MCAST,
>>>> SHM_MEM, SHM_MMAP, PKG_MALLOC, F_MALLOC, FAST_LOCK-ADAPTIVE_WAIT
>>>> ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16,
>>>> MAX_URI_SIZE 1024, BUF_SIZE 65535
>>>> poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
>>>> svnrevision: 2:9543M
>>>> @(#) $Id: main.c 9331 2012-10-16 17:26:53Z bogdan_iancu $
>>>> main.c compiled on 05:29:22 Jan  9 2013 with gcc 4.4.5
>>>>
>>>> I modified sipp a bit to accept t.38, to be able to reproduce the
>>>> issue (I don't have the offending equipment at hand), using the
>>>> following xml config:
>>>>
>>>>         v=0
>>>>         o=- 144969 144969 IN IP[local_ip_type] [local_ip]
>>>>         s=-
>>>>         c=IN IP[media_ip_type] [media_ip]
>>>>         t=0 0
>>>>         m=audio [media_port] RTP/AVP 8 0 18
>>>>         a=rtpmap:8 PCMA/8000
>>>>         a=rtpmap:0 PCMU/8000
>>>>         m=image [media_port] udptl t38
>>>>         a=T38FaxVersion:0
>>>>         a=T38MaxBitRate:14400
>>>>         a=T38FaxRateManagement:transferredTCF
>>>>         a=T38FaxMaxBuffer:200
>>>>         a=T38FaxMaxDatagram:200
>>>>         a=T38FaxUdpEC:t38UDPRedundancy
>>>>
>>>> That's  the plaintext version of the exact SDP, except for 
>>>> addresses and
>>>> ports.
>>>> I tried the different matching options (regex, non-regex). I ended up
>>>> using subst_body() to solve the issue for now but that feels a bit
>>>> like modifying the SDP with a chainsaw ;).
>>>>
>>>> Thanks,
>>>> Remco.
>>>>
>>>>
>>>> On Mon, Jan 21, 2013 at 7:57 PM, Bogdan-Andrei Iancu
>>>> <bogdan at opensips.org>   wrote:
>>>>> Hi Remco,
>>>>>
>>>>> The double "m" means you have two media streams in your SDP. This 
>>>>> should
>>>>> not
>>>>> affect the codec related functions.
>>>>>
>>>>> What exact version/revision of OpenSIPs are you using (OpenSIPS -V) ?
>>>>> also
>>>>> could you paste here the plain/text SDP you are fighting against ?
>>>>>
>>>>> Regards,
>>>>>
>>>>> Bogdan-Andrei Iancu
>>>>> OpenSIPS Founder and Developer
>>>>> http://www.opensips-solutions.com
>>>>>
>>>>>
>>>>>
>>>>> On 01/21/2013 11:15 AM, Remco . wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Trying to remove T.38 using the following:
>>>>>>
>>>>>>            if (is_method("INVITE")&&
>>>>>> codec_exists_re(".*(T38|t38|t.38|T.38).*")) {
>>>>>>
>>>>>>                    xlog("L_WARN", "[$Tf]: A=[$fU] : B=[$rU] :
>>>>>> Call-id=[$ci] : T.38 found in SDP");
>>>>>>                    # Test if other codec present, and delete T.38 
>>>>>> if so.
>>>>>>                    if (codec_exists("PCMU") || 
>>>>>> codec_exists("PCMA")) {
>>>>>>                            
>>>>>> codec_delete_re(".*(T38|t38|t.38|T.38).*");
>>>>>>                            xlog("L_WARN", "[$Tf]: A=[$fU] : 
>>>>>> B=[$rU] :
>>>>>> Call-id=[$ci] : T.38 removed from SDP");
>>>>>>                    } else {
>>>>>>                            xlog("L_WARN", "[$Tf]: A=[$fU] : 
>>>>>> B=[$rU] :
>>>>>> Call-id=[$ci] : SDP with only T.38");
>>>>>>                    }
>>>>>>            }
>>>>>>
>>>>>>
>>>>>> It seems not to match the following SDP:
>>>>>>
>>>>>>                Media Description, name and address (m): audio 54106
>>>>>> RTP/AVP
>>>>>> 8 0 101
>>>>>>                    Media Type: audio
>>>>>>                    Media Port: 54106
>>>>>>                    Media Protocol: RTP/AVP
>>>>>>                    Media Format: ITU-T G.711 PCMA
>>>>>>                    Media Format: ITU-T G.711 PCMU
>>>>>>                    Media Format: DynamicRTP-Type-101
>>>>>>                Media Attribute (a): rtpmap:101 TELEPHONE-EVENT/8000
>>>>>>                    Media Attribute Fieldname: rtpmap
>>>>>>                    Media Format: 101
>>>>>>                    MIME Type: TELEPHONE-EVENT
>>>>>>                    Sample Rate: 8000
>>>>>>                Media Attribute (a): fmtp:101 0-15
>>>>>>                    Media Attribute Fieldname: fmtp
>>>>>>                    Media Format: 101 [TELEPHONE-EVENT]
>>>>>>                    Media format specific parameters: 0-15
>>>>>>                Media Attribute (a): ptime:20
>>>>>>                    Media Attribute Fieldname: ptime
>>>>>>                    Media Attribute Value: 20
>>>>>>                Media Description, name and address (m): image 
>>>>>> 56122 udptl
>>>>>> t38
>>>>>>                    Media Type: image
>>>>>>                    Media Port: 56122
>>>>>>                    Media Protocol: udptl
>>>>>>                    Media Format: t38
>>>>>>                Media Attribute (a): 
>>>>>> T38FaxRateManagement:transferredTCF
>>>>>>                    Media Attribute Fieldname: T38FaxRateManagement
>>>>>>                    Media Attribute Value: transferredTCF
>>>>>>                Media Attribute (a): T38FaxudpEC:t38UDPFEC
>>>>>>                    Media Attribute Fieldname: T38FaxudpEC
>>>>>>                    Media Attribute Value: t38UDPFEC
>>>>>>
>>>>>> Could it be that the double media description (m=) is confusing the
>>>>>> codec_* functions from the textops module?
>>>>>> According to the relevant RFC's, it shouldn't but somehow I can't 
>>>>>> get
>>>>>> it to work..
>>>>>>
>>>>>> Regards,
>>>>>> Remco.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Users mailing list
>>>>>> Users at lists.opensips.org
>>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>>>>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>



More information about the Users mailing list