<p>keith <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add media mode parameter to sdp_create_file()<br><br>This enables call hold implemented by subsequent commits<br><br>Prior to this commit, osmo-sip-connector would not send<br>any media mode attribute in the sdp. After this commit<br>we will by default always include a=sendrecv.<br><br>Given that a media mode attribute of "sendrecv" is default<br>and implicit it its absense, this does not represent any<br>functional change.<br><br>Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2<br>---<br>M src/sdp.c<br>M src/sdp.h<br>M src/sip.c<br>3 files changed, 29 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/sdp.c b/src/sdp.c</span><br><span>index 17eb577..9bb55d4 100644</span><br><span>--- a/src/sdp.c</span><br><span>+++ b/src/sdp.c</span><br><span>@@ -163,16 +163,35 @@</span><br><span> return true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-char *sdp_create_file(struct sip_call_leg *leg, struct call_leg *other)</span><br><span style="color: hsl(120, 100%, 40%);">+char *sdp_create_file(struct sip_call_leg *leg, struct call_leg *other, sdp_mode_t mode)</span><br><span> {</span><br><span> struct in_addr net = { .s_addr = htonl(other->ip) };</span><br><span> char *fmtp_str = NULL, *sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+ char *mode_attribute;</span><br><span> </span><br><span> leg->wanted_codec = app_media_name(other->payload_msg_type);</span><br><span> </span><br><span> if (strcmp(leg->wanted_codec, "AMR") == 0)</span><br><span> fmtp_str = talloc_asprintf(leg, "a=fmtp:%d octet-align=1\r\n", other->payload_type);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ switch (mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case sdp_inactive:</span><br><span style="color: hsl(120, 100%, 40%);">+ mode_attribute = "a=inactive\r\n";</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case sdp_sendrecv:</span><br><span style="color: hsl(120, 100%, 40%);">+ mode_attribute = "a=sendrecv\r\n";</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case sdp_sendonly:</span><br><span style="color: hsl(120, 100%, 40%);">+ mode_attribute = "a=sendonly\r\n";</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case sdp_recvonly:</span><br><span style="color: hsl(120, 100%, 40%);">+ mode_attribute = "a=recvonly\r\n";</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(false);</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> sdp = talloc_asprintf(leg,</span><br><span> "v=0\r\n"</span><br><span> "o=Osmocom 0 0 IN IP4 %s\r\n"</span><br><span>@@ -181,12 +200,14 @@</span><br><span> "t=0 0\r\n"</span><br><span> "m=audio %d RTP/AVP %d\r\n"</span><br><span> "%s"</span><br><span style="color: hsl(0, 100%, 40%);">- "a=rtpmap:%d %s/8000\r\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ "a=rtpmap:%d %s/8000\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "%s",</span><br><span> inet_ntoa(net), inet_ntoa(net), /* never use diff. addr! */</span><br><span> other->port, other->payload_type,</span><br><span> fmtp_str ? fmtp_str : "",</span><br><span> other->payload_type,</span><br><span style="color: hsl(0, 100%, 40%);">- leg->wanted_codec);</span><br><span style="color: hsl(120, 100%, 40%);">+ leg->wanted_codec,</span><br><span style="color: hsl(120, 100%, 40%);">+ mode_attribute);</span><br><span> talloc_free(fmtp_str);</span><br><span> return sdp;</span><br><span> }</span><br><span>diff --git a/src/sdp.h b/src/sdp.h</span><br><span>index d716644..72ff6b7 100644</span><br><span>--- a/src/sdp.h</span><br><span>+++ b/src/sdp.h</span><br><span>@@ -1,6 +1,7 @@</span><br><span> #pragma once</span><br><span> </span><br><span> #include <sofia-sip/sip.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <sofia-sip/sdp.h></span><br><span> </span><br><span> #include <stdbool.h></span><br><span> </span><br><span>@@ -10,4 +11,4 @@</span><br><span> bool sdp_screen_sdp(const sip_t *sip);</span><br><span> bool sdp_extract_sdp(struct sip_call_leg *leg, const sip_t *sip, bool any_codec);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-char *sdp_create_file(struct sip_call_leg *, struct call_leg *);</span><br><span style="color: hsl(120, 100%, 40%);">+char *sdp_create_file(struct sip_call_leg *, struct call_leg *, sdp_mode_t mode);</span><br><span>diff --git a/src/sip.c b/src/sip.c</span><br><span>index adf20d8..21401c6 100644</span><br><span>--- a/src/sip.c</span><br><span>+++ b/src/sip.c</span><br><span>@@ -28,6 +28,7 @@</span><br><span> </span><br><span> #include <sofia-sip/sip_status.h></span><br><span> #include <sofia-sip/su_log.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <sofia-sip/sdp.h></span><br><span> </span><br><span> #include <talloc.h></span><br><span> </span><br><span>@@ -385,7 +386,7 @@</span><br><span> return;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- sdp = sdp_create_file(leg, other);</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp = sdp_create_file(leg, other, sdp_sendrecv);</span><br><span> </span><br><span> leg->state = SIP_CC_CONNECTED;</span><br><span> nua_respond(leg->nua_handle, SIP_200_OK,</span><br><span>@@ -425,7 +426,7 @@</span><br><span> called_num,</span><br><span> agent->app->sip.remote_addr,</span><br><span> agent->app->sip.remote_port);</span><br><span style="color: hsl(0, 100%, 40%);">- char *sdp = sdp_create_file(leg, other);</span><br><span style="color: hsl(120, 100%, 40%);">+ char *sdp = sdp_create_file(leg, other, sdp_sendrecv);</span><br><span> </span><br><span> leg->state = SIP_CC_INITIAL;</span><br><span> leg->dir = SIP_DIR_MT;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993">change 14993</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-sip-connector </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2 </div>
<div style="display:none"> Gerrit-Change-Number: 14993 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>