The following works moderately well in only acting on the video media.
However, it still appends "a=sendonly" to the end of the SDP rather than
replacing the "a=sendrecv". Using "sdp_iterator_insert" instead of
"sdp_iterator_append" makes no difference.

Does anyone have any further advice on the possible cause? Thanks in
advance.

                                sdp_iterator_start( "s1" );
                                $var(media) = "other";
                                while ( sdp_iterator_next( "s1" ) ) {
                                        if ( $sdpitval(s1) =~ "^m=video" ) {
                                                $var(media) = "video";
                                        } else if ( $sdpitval(s1) =~ "^m="
) {
                                                $var(media) = "other";
                                        } else if ( $var(media) == "video"
&& $sdpitval(s1) =~ "^a=sendrecv" ) {
                                                sdp_iterator_rm( "s1" );
                                                sdp_iterator_append( "s1",
"a=sendonly\r\n" );
                                        }
                                }
                                sdp_iterator_end( "s1" );


On Fri, 19 Dec 2025 at 08:55, David Cunningham <[email protected]>
wrote:

> Thanks Daniel. I had been looking at the documentation for 5.2 since
> that's what the customer uses, and it appears that those functions are new
> in 5.8. We'll upgrade and give it a try.
>
>
> On Fri, 19 Dec 2025 at 05:39, Daniel-Constantin Mierla <[email protected]>
> wrote:
>
>> Hello,
>> On 17.12.25 23:35, David Cunningham wrote:
>>
>> Hi Henning and Daniel,
>>
>> Thank you very much for the replies. We moved the following configuration
>> to reply_route{}, and now it inserts "a=sendonly" immediately before the
>> "a=sendrecv" rather than appending it to the SDP as before. This
>> configuration does use RTPengine as the call is from a WebRTC client. Have
>> you any further idea why it's not actually replacing the "a=sendonly"?
>>
>>                                 replace_body_all( "a=sendrecv",
>> "a=sendonly" );
>>                                 msg_apply_changes();
>>
>> Daniel, from reading the sdpops documentation it's not clear how to
>> iterate through an SDP. Could you please give us a pointer on that?
>>
>> the functions to remove/insert/append should show how to use the
>> iterator, e.g.,:
>>
>> -
>> https://www.kamailio.org/docs/modules/stable/modules/sdpops.html#sdpops.f.sdp_iterator_rm
>>
>> For example, to replace for all media sessions:
>>
>>     sdp_iterator_start("s1");
>>     while(sdp_iterator_next("s1")) {
>>         if($sdpitval(s1) =~ "^a=sendrecv") {
>>             sdp_iterator_rm("s1");
>>             sdp_iterator_append("s1", "a=sendonly\r\n");
>>         }
>>     }
>>     sdp_iterator_end("s1");
>>
>> Cheers,
>> Daniel
>>
>>
>>
>>
>> Thanks again.
>>
>>
>> On Thu, 18 Dec 2025 at 00:23, Daniel-Constantin Mierla <[email protected]>
>> wrote:
>>
>>> Hello,
>>>
>>>
>>> On 17.12.25 02:08, David Cunningham via sr-users wrote:
>>>
>>> Hello,
>>>
>>> We need to replace a=sendrecv with a=sendonly in the 200 OK reply to an
>>> INVITE. In theory it should be something straightforward, like in the
>>> onreply_route using:
>>>
>>> replace_body_all( "a=sendrecv", "a=sendonly" );
>>>
>>> or:
>>>
>>> subst_body( '/^a=sendrecv/a=sendonly/' )
>>>
>>> Our first problem is that these both are appending a=sendonly to the end
>>> of the SDP, not replacing values within it. Does anyone know why this might
>>> happen?
>>>
>>> it could be because of conflicting operations with rtpengine (or
>>> rtpproxy). You could try the replacement in the core reply_route() and then
>>> use msg_apply_changes.
>>>
>>>
>>>
>>> Our second problem is that we really only want to do this for video
>>> media, and not touch the audio media. Are there any text tools that allow
>>> you to work with specific media within the SDP?
>>>
>>> The sdpops has an sdp iterator that could help: once you match the video
>>> stream, look for the sendrecv attrbute and replace the line.
>>>
>>> Cheers,
>>> Daniel
>>>
>>> --
>>> Daniel-Constantin Mierla (@ asipto.com)twitter.com/miconda -- 
>>> linkedin.com/in/miconda
>>> Kamailio Consultancy, Training and Development Services -- asipto.com
>>> Kamailio World Conference, May 7-8, 2026 - Berlin, Germany -- 
>>> kamailioworld.com
>>>
>>>
>>
>> --
>> David Cunningham, Voisonics Limited
>> http://voisonics.com/
>> USA: +1 213 221 1092
>> New Zealand: +64 (0)28 2558 3782
>>
>> --
>> Daniel-Constantin Mierla (@ asipto.com)twitter.com/miconda -- 
>> linkedin.com/in/miconda
>> Kamailio Consultancy, Training and Development Services -- asipto.com
>> Kamailio World Conference, May 7-8, 2026 - Berlin, Germany -- 
>> kamailioworld.com
>>
>>
>
> --
> David Cunningham, Voisonics Limited
> http://voisonics.com/
> USA: +1 213 221 1092
> New Zealand: +64 (0)28 2558 3782
>


-- 
David Cunningham, Voisonics Limited
http://voisonics.com/
USA: +1 213 221 1092
New Zealand: +64 (0)28 2558 3782
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions -- 
[email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to