keith has submitted this change and it was merged. ( 
https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993 )

Change subject: Add media mode parameter to sdp_create_file()
......................................................................

Add media mode parameter to sdp_create_file()

This enables call hold implemented by subsequent commits

Prior to this commit, osmo-sip-connector would not send
any media mode attribute in the sdp. After this commit
we will by default always include a=sendrecv.

Given that a media mode attribute of "sendrecv" is default
and implicit it its absense, this does not represent any
functional change.

Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2
---
M src/sdp.c
M src/sdp.h
M src/sip.c
3 files changed, 29 insertions(+), 6 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved



diff --git a/src/sdp.c b/src/sdp.c
index 17eb577..9bb55d4 100644
--- a/src/sdp.c
+++ b/src/sdp.c
@@ -163,16 +163,35 @@
        return true;
 }

-char *sdp_create_file(struct sip_call_leg *leg, struct call_leg *other)
+char *sdp_create_file(struct sip_call_leg *leg, struct call_leg *other, 
sdp_mode_t mode)
 {
        struct in_addr net = { .s_addr = htonl(other->ip) };
        char *fmtp_str = NULL, *sdp;
+       char *mode_attribute;

        leg->wanted_codec = app_media_name(other->payload_msg_type);

        if (strcmp(leg->wanted_codec, "AMR") == 0)
                fmtp_str = talloc_asprintf(leg, "a=fmtp:%d octet-align=1\r\n", 
other->payload_type);

+       switch (mode) {
+               case sdp_inactive:
+                       mode_attribute = "a=inactive\r\n";
+                       break;
+               case sdp_sendrecv:
+                       mode_attribute = "a=sendrecv\r\n";
+                       break;
+               case sdp_sendonly:
+                       mode_attribute = "a=sendonly\r\n";
+                       break;
+               case sdp_recvonly:
+                       mode_attribute = "a=recvonly\r\n";
+                       break;
+               default:
+                       OSMO_ASSERT(false);
+                       break;
+       }
+
        sdp = talloc_asprintf(leg,
                                "v=0\r\n"
                                "o=Osmocom 0 0 IN IP4 %s\r\n"
@@ -181,12 +200,14 @@
                                "t=0 0\r\n"
                                "m=audio %d RTP/AVP %d\r\n"
                                "%s"
-                               "a=rtpmap:%d %s/8000\r\n",
+                               "a=rtpmap:%d %s/8000\r\n"
+                               "%s",
                                inet_ntoa(net), inet_ntoa(net), /* never use 
diff. addr! */
                                other->port, other->payload_type,
                                fmtp_str ? fmtp_str : "",
                                other->payload_type,
-                               leg->wanted_codec);
+                               leg->wanted_codec,
+                               mode_attribute);
        talloc_free(fmtp_str);
        return sdp;
 }
diff --git a/src/sdp.h b/src/sdp.h
index d716644..72ff6b7 100644
--- a/src/sdp.h
+++ b/src/sdp.h
@@ -1,6 +1,7 @@
 #pragma once

 #include <sofia-sip/sip.h>
+#include <sofia-sip/sdp.h>

 #include <stdbool.h>

@@ -10,4 +11,4 @@
 bool sdp_screen_sdp(const sip_t *sip);
 bool sdp_extract_sdp(struct sip_call_leg *leg, const sip_t *sip, bool 
any_codec);

-char *sdp_create_file(struct sip_call_leg *, struct call_leg *);
+char *sdp_create_file(struct sip_call_leg *, struct call_leg *, sdp_mode_t 
mode);
diff --git a/src/sip.c b/src/sip.c
index adf20d8..21401c6 100644
--- a/src/sip.c
+++ b/src/sip.c
@@ -28,6 +28,7 @@

 #include <sofia-sip/sip_status.h>
 #include <sofia-sip/su_log.h>
+#include <sofia-sip/sdp.h>

 #include <talloc.h>

@@ -385,7 +386,7 @@
                return;
        }

-       sdp = sdp_create_file(leg, other);
+       sdp = sdp_create_file(leg, other, sdp_sendrecv);

        leg->state = SIP_CC_CONNECTED;
        nua_respond(leg->nua_handle, SIP_200_OK,
@@ -425,7 +426,7 @@
                                called_num,
                                agent->app->sip.remote_addr,
                                agent->app->sip.remote_port);
-       char *sdp = sdp_create_file(leg, other);
+       char *sdp = sdp_create_file(leg, other, sdp_sendrecv);

        leg->state = SIP_CC_INITIAL;
        leg->dir = SIP_DIR_MT;

--
To view, visit https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-sip-connector
Gerrit-Branch: master
Gerrit-Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2
Gerrit-Change-Number: 14993
Gerrit-PatchSet: 3
Gerrit-Owner: keith <ke...@rhizomatica.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: keith <ke...@rhizomatica.org>
Gerrit-Reviewer: laforge <lafo...@gnumonks.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-CC: neels <nhofm...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to