<p>keith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/14993">View Change</a></p><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>Change-Id: Ib4212d0174955042e7d80d3744ce632a4942ccb2<br>---<br>M src/sdp.c<br>M src/sdp.h<br>M src/sip.c<br>3 files changed, 25 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sip-connector refs/changes/93/14993/1</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..93e0c7f 100644</span><br><span>--- a/src/sdp.c</span><br><span>+++ b/src/sdp.c</span><br><span>@@ -163,16 +163,31 @@</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 = NULL;</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%);">+  }</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 +196,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 ? 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: 1 </div>
<div style="display:none"> Gerrit-Owner: keith <keith@rhizomatica.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>