<p>Neels Hofmeyr <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/12354">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Neels Hofmeyr: Looks good to me, approved
  Max: Looks good to me, but someone else must approve
  Pau Espin Pedrol: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_client: drop a bunch of dead code<br><br>Remove public API that makes no sense anymore and is dead code.<br><br>I see the dropped API as a dead-end initial misconception of the early mgcp<br>client, and it doesn't really make sense to drag this stuff along. It has not<br>been used by osmo-msc,-bsc for a long time now, and just confuses the reader.<br><br>It is public API, yes, and older versions of osmo-msc / osmo-bsc will not be<br>able to compile against this, but even if it did, the resulting MGCP client<br>would not work with the current osmo-mgw: this API is still based on the<br>premise that the MGCP client dictates the MGW endpoint numbers, a concept that<br>cannot be used with the current osmo-mgw. Instead, osmo-mgw expects a<br>wildcarded endpoint upon CRCX and assigns its own endpoint names.<br><br>Also, the bts-base configuration is unused and a legacy of when osmo-bsc_mgcp<br>had explicit BTS and CN sides.<br><br>Change-Id: I98a9f1f17a1c4ab20cea3b08c7d21663592134d6<br>---<br>M TODO-RELEASE<br>M include/osmocom/mgcp_client/mgcp_client.h<br>M src/libosmo-mgcp-client/mgcp_client.c<br>M src/libosmo-mgcp-client/mgcp_client_vty.c<br>M tests/mgcp_client/mgcp_client_test.c<br>M tests/mgcp_client/mgcp_client_test.err<br>M tests/mgcp_client/mgcp_client_test.ok<br>7 files changed, 12 insertions(+), 415 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index c5a3b36..3969146 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -24,3 +24,4 @@</span><br><span> # If any interfaces have been removed or changed since the last public release, a=0.</span><br><span> #</span><br><span> #library         what            description / commit summary line</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-mgcp-client  various         Drop legacy API functions and mgcp_client_conf members</span><br><span>diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>index 79f2078..c1fd1b0 100644</span><br><span>--- a/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>+++ b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>@@ -22,9 +22,6 @@</span><br><span>  int local_port;</span><br><span>      const char *remote_addr;</span><br><span>     int remote_port;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t first_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t last_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t bts_base;</span><br><span> };</span><br><span> </span><br><span> typedef unsigned int mgcp_trans_id_t;</span><br><span>@@ -123,9 +120,6 @@</span><br><span> uint16_t mgcp_client_remote_port(struct mgcp_client *mgcp);</span><br><span> uint32_t mgcp_client_remote_addr_n(struct mgcp_client *mgcp);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_client_next_endpoint(struct mgcp_client *client);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Invoked when an MGCP response is received or sending failed.  When the</span><br><span>  * response is passed as NULL, this indicates failure during transmission. */</span><br><span> typedef void (* mgcp_response_cb_t )(struct mgcp_response *response, void *priv);</span><br><span>@@ -137,20 +131,6 @@</span><br><span> </span><br><span> enum mgcp_connection_mode;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,</span><br><span style="color: hsl(0, 100%, 40%);">-                           uint16_t rtp_endpoint, unsigned int call_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                    enum mgcp_connection_mode mode)</span><br><span style="color: hsl(0, 100%, 40%);">-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,</span><br><span style="color: hsl(0, 100%, 40%);">-                     uint16_t rtp_endpoint, const char *rtp_conn_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-                       uint16_t rtp_port, enum mgcp_connection_mode mode)</span><br><span style="color: hsl(0, 100%, 40%);">-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,</span><br><span style="color: hsl(0, 100%, 40%);">-                           unsigned int call_id)</span><br><span style="color: hsl(0, 100%, 40%);">-OSMO_DEPRECATED("Use mgcp_msg_gen() instead");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct msgb *mgcp_msg_gen(struct mgcp_client *mgcp, struct mgcp_msg *mgcp_msg);</span><br><span> mgcp_trans_id_t mgcp_msg_trans_id(struct msgb *msg);</span><br><span> </span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>index fc9c5d3..2ceab3c 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>@@ -190,75 +190,9 @@</span><br><span>              .local_port = -1,</span><br><span>            .remote_addr = NULL,</span><br><span>                 .remote_port = -1,</span><br><span style="color: hsl(0, 100%, 40%);">-              .first_endpoint = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-            .last_endpoint = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-             .bts_base = 0,</span><br><span>       };</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Test if a given endpoint id is currently in use */</span><br><span style="color: hsl(0, 100%, 40%);">-static bool endpoint_in_use(uint16_t id, struct mgcp_client *client)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct mgcp_inuse_endpoint *endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-   llist_for_each_entry(endpoint, &client->inuse_endpoints, entry) {</span><br><span style="color: hsl(0, 100%, 40%);">-                if (endpoint->id == id)</span><br><span style="color: hsl(0, 100%, 40%);">-                      return true;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return false;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! Pick next free endpoint ID.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in,out] client MGCP client descriptor.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns 0 on success, -EINVAL on error. */</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_client_next_endpoint(struct mgcp_client *client)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- int i;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint16_t first_endpoint = client->actual.first_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-     uint16_t last_endpoint = client->actual.last_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_inuse_endpoint *endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Use the maximum permitted range if the VTY</span><br><span style="color: hsl(0, 100%, 40%);">-    * configuration does not specify a range */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (client->actual.last_endpoint == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-             first_endpoint = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             last_endpoint = 65534;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Test the permitted endpoint range for an endpoint</span><br><span style="color: hsl(0, 100%, 40%);">-     * number that is not in use. When a suitable endpoint</span><br><span style="color: hsl(0, 100%, 40%);">-   * number can be found, seize it by adding it to the</span><br><span style="color: hsl(0, 100%, 40%);">-     * inuse list. */</span><br><span style="color: hsl(0, 100%, 40%);">-       for (i=first_endpoint;i<last_endpoint;i++)</span><br><span style="color: hsl(0, 100%, 40%);">-   {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (endpoint_in_use(i,client) == false) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       endpoint = talloc_zero(client, struct mgcp_inuse_endpoint);</span><br><span style="color: hsl(0, 100%, 40%);">-                     endpoint->id = i;</span><br><span style="color: hsl(0, 100%, 40%);">-                    llist_add_tail(&endpoint->entry, &client->inuse_endpoints);</span><br><span style="color: hsl(0, 100%, 40%);">-                       return endpoint->id;</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* All endpoints are busy! */</span><br><span style="color: hsl(0, 100%, 40%);">-   return -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! Release a seized endpoint ID to make it available again for other calls.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] id Endpoint ID</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in,out] client MGCP client descriptor. */</span><br><span style="color: hsl(0, 100%, 40%);">-/* Release a seized endpoint id to make it available again for other calls */</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_client_release_endpoint(uint16_t id, struct mgcp_client *client)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct mgcp_inuse_endpoint *endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-   struct mgcp_inuse_endpoint *endpoint_tmp;</span><br><span style="color: hsl(0, 100%, 40%);">-       llist_for_each_entry_safe(endpoint, endpoint_tmp, &client->inuse_endpoints, entry) {</span><br><span style="color: hsl(0, 100%, 40%);">-             if (endpoint->id == id) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    llist_del(&endpoint->entry);</span><br><span style="color: hsl(0, 100%, 40%);">-                     talloc_free(endpoint);</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void mgcp_client_handle_response(struct mgcp_client *mgcp,</span><br><span>                                      struct mgcp_response_pending *pending,</span><br><span>                                       struct mgcp_response *response)</span><br><span>@@ -769,10 +703,6 @@</span><br><span>       mgcp->actual.remote_port = conf->remote_port >= 0 ? (uint16_t)conf->remote_port :</span><br><span>                MGCP_CLIENT_REMOTE_PORT_DEFAULT;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    mgcp->actual.first_endpoint = conf->first_endpoint > 0 ? (uint16_t)conf->first_endpoint : 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        mgcp->actual.last_endpoint = conf->last_endpoint > 0 ? (uint16_t)conf->last_endpoint : 0;</span><br><span style="color: hsl(0, 100%, 40%);">-   mgcp->actual.bts_base = conf->bts_base > 0 ? (uint16_t)conf->bts_base : 4000;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return mgcp;</span><br><span> }</span><br><span> </span><br><span>@@ -977,54 +907,6 @@</span><br><span>          */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *mgcp_msg_from_buf(mgcp_trans_id_t trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   const char *buf, int len)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (len > (4096 - 128)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLMGCP, LOGL_ERROR, "Cannot send to MGCP GW:"</span><br><span style="color: hsl(0, 100%, 40%);">-                 " message too large: %d\n", len);</span><br><span style="color: hsl(0, 100%, 40%);">-                return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       msg = msgb_alloc_headroom(4096, 128, "MGCP tx");</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_ASSERT(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       char *dst = (char*)msgb_put(msg, len);</span><br><span style="color: hsl(0, 100%, 40%);">-  memcpy(dst, buf, len);</span><br><span style="color: hsl(0, 100%, 40%);">-  msg->l2h = msg->data;</span><br><span style="color: hsl(0, 100%, 40%);">-     msg->cb[MSGB_CB_MGCP_TRANS_ID] = trans_id;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   return msg;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *mgcp_msg_from_str(mgcp_trans_id_t trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   const char *fmt, ...)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    static char compose[4096 - 128];</span><br><span style="color: hsl(0, 100%, 40%);">-        va_list ap;</span><br><span style="color: hsl(0, 100%, 40%);">-     int len;</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_ASSERT(fmt);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       va_start(ap, fmt);</span><br><span style="color: hsl(0, 100%, 40%);">-      len = vsnprintf(compose, sizeof(compose), fmt, ap);</span><br><span style="color: hsl(0, 100%, 40%);">-     va_end(ap);</span><br><span style="color: hsl(0, 100%, 40%);">-     if (len >= sizeof(compose)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Message too large: trans_id=%u len=%d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    trans_id, len);</span><br><span style="color: hsl(0, 100%, 40%);">-            return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (len < 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Failed to compose message: trans_id=%u len=%d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    trans_id, len);</span><br><span style="color: hsl(0, 100%, 40%);">-            return NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-       return mgcp_msg_from_buf(trans_id, compose, len);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static mgcp_trans_id_t mgcp_client_next_trans_id(struct mgcp_client *mgcp)</span><br><span> {</span><br><span>        /* avoid zero trans_id to distinguish from unset trans_id */</span><br><span>@@ -1033,52 +915,6 @@</span><br><span>         return mgcp->next_trans_id ++;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_crcx(struct mgcp_client *mgcp,</span><br><span style="color: hsl(0, 100%, 40%);">-                     uint16_t rtp_endpoint, unsigned int call_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                    enum mgcp_connection_mode mode)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-     return mgcp_msg_from_str(trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-               "CRCX %u %x@mgw MGCP 1.0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                 "C: %x\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "L: p:20, a:AMR, nt:IN\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "M: %s\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           ,</span><br><span style="color: hsl(0, 100%, 40%);">-               trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-               rtp_endpoint,</span><br><span style="color: hsl(0, 100%, 40%);">-           call_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                mgcp_client_cmode_name(mode));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_mdcx(struct mgcp_client *mgcp,</span><br><span style="color: hsl(0, 100%, 40%);">-                       uint16_t rtp_endpoint, const char *rtp_conn_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-                       uint16_t rtp_port, enum mgcp_connection_mode mode)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-     return mgcp_msg_from_str(trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-               "MDCX %u %x@mgw MGCP 1.0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                 "M: %s\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                "c=IN IP4 %s\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "m=audio %u RTP/AVP 255\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-          ,</span><br><span style="color: hsl(0, 100%, 40%);">-               trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-               rtp_endpoint,</span><br><span style="color: hsl(0, 100%, 40%);">-           mgcp_client_cmode_name(mode),</span><br><span style="color: hsl(0, 100%, 40%);">-           rtp_conn_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-          rtp_port);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct msgb *mgcp_msg_dlcx(struct mgcp_client *mgcp, uint16_t rtp_endpoint,</span><br><span style="color: hsl(0, 100%, 40%);">-                    unsigned int call_id)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       mgcp_trans_id_t trans_id = mgcp_client_next_trans_id(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-     return mgcp_msg_from_str(trans_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                               "DLCX %u %x@mgw MGCP 1.0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                                 "C: %x\r\n", trans_id, rtp_endpoint, call_id);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define MGCP_CRCX_MANDATORY (MGCP_MSG_PRESENCE_ENDPOINT | \</span><br><span>                         MGCP_MSG_PRESENCE_CALL_ID | \</span><br><span>                        MGCP_MSG_PRESENCE_CONN_MODE)</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>index ecc205f..8fa0272 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>@@ -101,23 +101,14 @@</span><br><span>            MGW_STR "remote bind to connect to MGCP gateway with\n"</span><br><span>            "remote bind port\n")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgw_endpoint_range_cmd,</span><br><span>       "mgw endpoint-range <1-65534> <1-65534>",</span><br><span style="color: hsl(0, 100%, 40%);">-      MGW_STR "usable range of endpoint identifiers\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "set first usable endpoint identifier\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "set last usable endpoint identifier\n")</span><br><span style="color: hsl(120, 100%, 40%);">+      MGW_STR "DEPRECATED: the endpoint range cannot be defined by the client\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "-\n" "-\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   uint16_t first_endpoint = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t last_endpoint = atoi(argv[1]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (last_endpoint < first_endpoint) {</span><br><span style="color: hsl(0, 100%, 40%);">-                vty_out(vty, "last endpoint must be greater than first endpoint!%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                  VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-           return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       global_mgcp_client_conf->first_endpoint = first_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-    global_mgcp_client_conf->last_endpoint = last_endpoint;</span><br><span style="color: hsl(120, 100%, 40%);">+    vty_out(vty, "Please do not use legacy config 'mgw endpoint-range'"</span><br><span style="color: hsl(120, 100%, 40%);">+         " (the range can no longer be defined by the MGCP client)%s",</span><br><span style="color: hsl(120, 100%, 40%);">+               VTY_NEWLINE);</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> ALIAS_DEPRECATED(cfg_mgw_endpoint_range, cfg_mgcpgw_endpoint_range_cmd,</span><br><span>@@ -128,14 +119,15 @@</span><br><span> </span><br><span> #define BTS_START_STR "First UDP port allocated for the BTS side\n"</span><br><span> #define UDP_PORT_STR "UDP Port number\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_mgw_rtp_bts_base_port,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_mgw_rtp_bts_base_port,</span><br><span>       cfg_mgw_rtp_bts_base_port_cmd,</span><br><span>       "mgw bts-base <0-65534>",</span><br><span>       MGW_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      BTS_START_STR</span><br><span style="color: hsl(0, 100%, 40%);">-      UDP_PORT_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+      "DEPRECATED: there is no explicit BTS side in current osmo-mgw\n" "-\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  global_mgcp_client_conf->bts_base = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "Please do not use legacy config 'mgw bts-base'"</span><br><span style="color: hsl(120, 100%, 40%);">+               " (there is no explicit BTS side in an MGW anymore)%s",</span><br><span style="color: hsl(120, 100%, 40%);">+             VTY_NEWLINE);</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> ALIAS_DEPRECATED(cfg_mgw_rtp_bts_base_port,</span><br><span>@@ -149,9 +141,6 @@</span><br><span> {</span><br><span>   const char *addr;</span><br><span>    int port;</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t first_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t last_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t bts_base;</span><br><span> </span><br><span>       addr = global_mgcp_client_conf->local_addr;</span><br><span>       if (addr)</span><br><span>@@ -171,19 +160,6 @@</span><br><span>             vty_out(vty, "%smgw remote-port %u%s", indent,</span><br><span>                     (uint16_t)port, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       first_endpoint = global_mgcp_client_conf->first_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-    last_endpoint = global_mgcp_client_conf->last_endpoint;</span><br><span style="color: hsl(0, 100%, 40%);">-      if (last_endpoint != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-               vty_out(vty, "%smgw endpoint-range %u %u%s", indent,</span><br><span style="color: hsl(0, 100%, 40%);">-                  first_endpoint, last_endpoint, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       bts_base = global_mgcp_client_conf->bts_base;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (bts_base) {</span><br><span style="color: hsl(0, 100%, 40%);">-         vty_out(vty, "%smgw bts-base %u%s", indent,</span><br><span style="color: hsl(0, 100%, 40%);">-                   bts_base, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c</span><br><span>index e6982e4..1db70cf 100644</span><br><span>--- a/tests/mgcp_client/mgcp_client_test.c</span><br><span>+++ b/tests/mgcp_client/mgcp_client_test.c</span><br><span>@@ -135,87 +135,6 @@</span><br><span>     return trans_id;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void test_crcx(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       mgcp_trans_id_t trans_id;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("\n===== %s =====\n", __func__);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (mgcp)</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-      mgcp = mgcp_client_init(ctx, &conf);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);</span><br><span style="color: hsl(0, 100%, 40%);">-  trans_id = dummy_mgcp_send(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        reply_to(trans_id, 200, "OK",</span><br><span style="color: hsl(0, 100%, 40%);">-         "I: 1\r\n\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                "v=0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "o=- 1 23 IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-              "s=-\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "c=IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "t=0 0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "m=audio 16002 RTP/AVP 110 96\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-            "a=rtpmap:110 AMR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "a=rtpmap:96 GSM-EFR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                "a=ptime:20\r\n");</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void test_crcx_long_conn_id(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       mgcp_trans_id_t trans_id;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("\n===== %s =====\n", __func__);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (mgcp)</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-      mgcp = mgcp_client_init(ctx, &conf);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);</span><br><span style="color: hsl(0, 100%, 40%);">-  trans_id = dummy_mgcp_send(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        reply_to(trans_id, 200, "OK",</span><br><span style="color: hsl(0, 100%, 40%);">-         "I: 123456789abcdef0123456789ABCDEF0\r\n\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-         "v=0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "o=- 1 23 IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-              "s=-\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "c=IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "t=0 0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "m=audio 16002 RTP/AVP 110 96\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-            "a=rtpmap:110 AMR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "a=rtpmap:96 GSM-EFR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                "a=ptime:20\r\n");</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void test_crcx_too_long_conn_id(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       mgcp_trans_id_t trans_id;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       printf("\n===== %s =====\n", __func__);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (mgcp)</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(mgcp);</span><br><span style="color: hsl(0, 100%, 40%);">-      mgcp = mgcp_client_init(ctx, &conf);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        msg = mgcp_msg_crcx(mgcp, 23, 42, MGCP_CONN_LOOPBACK);</span><br><span style="color: hsl(0, 100%, 40%);">-  trans_id = dummy_mgcp_send(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        reply_to(trans_id, 200, "OK",</span><br><span style="color: hsl(0, 100%, 40%);">-         "I: 123456789abcdef0123456789ABCDEF01001029\r\n\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-          "v=0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "o=- 1 23 IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-              "s=-\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "c=IN IP4 10.9.1.120\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-             "t=0 0\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "m=audio 16002 RTP/AVP 110 96\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-            "a=rtpmap:110 AMR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-           "a=rtpmap:96 GSM-EFR/8000\r\n"</span><br><span style="color: hsl(0, 100%, 40%);">-                "a=ptime:20\r\n");</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void test_mgcp_msg(void)</span><br><span> {</span><br><span>       struct msgb *msg;</span><br><span>@@ -618,14 +537,11 @@</span><br><span> </span><br><span>        mgcp_client_conf_init(&conf);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   test_crcx();</span><br><span>         test_mgcp_msg();</span><br><span>     test_mgcp_client_cancel();</span><br><span>   test_sdp_section_start();</span><br><span>    test_map_codec_to_pt_and_map_pt_to_codec();</span><br><span>  test_map_pt_to_codec();</span><br><span style="color: hsl(0, 100%, 40%);">- test_crcx_long_conn_id();</span><br><span style="color: hsl(0, 100%, 40%);">-       test_crcx_too_long_conn_id();</span><br><span> </span><br><span>    printf("Done\n");</span><br><span>  fprintf(stderr, "Done\n");</span><br><span>diff --git a/tests/mgcp_client/mgcp_client_test.err b/tests/mgcp_client/mgcp_client_test.err</span><br><span>index b20f93f..1d5a1a0 100644</span><br><span>--- a/tests/mgcp_client/mgcp_client_test.err</span><br><span>+++ b/tests/mgcp_client/mgcp_client_test.err</span><br><span>@@ -66,6 +66,4 @@</span><br><span> DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100</span><br><span> DLMGCP ptmap contains illegal mapping: codec=113 maps to pt=2</span><br><span> DLMGCP ptmap contains illegal mapping: codec=0 maps to pt=100</span><br><span style="color: hsl(0, 100%, 40%);">-DLMGCP Failed to parse MGCP response (parameter label: I): the received conn ID is too long: 39, maximum is 32 characters</span><br><span style="color: hsl(0, 100%, 40%);">-DLMGCP Cannot parse MGCP response (head parameters)</span><br><span> Done</span><br><span>diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok</span><br><span>index 40e32ba..65b5298 100644</span><br><span>--- a/tests/mgcp_client/mgcp_client_test.ok</span><br><span>+++ b/tests/mgcp_client/mgcp_client_test.ok</span><br><span>@@ -1,46 +1,4 @@</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-===== test_crcx =====</span><br><span style="color: hsl(0, 100%, 40%);">-composed:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-CRCX 1 17@mgw MGCP 1.0 </span><br><span style="color: hsl(0, 100%, 40%);">-C: 2a </span><br><span style="color: hsl(0, 100%, 40%);">-L: p:20, a:AMR, nt:IN </span><br><span style="color: hsl(0, 100%, 40%);">-M: loopback </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-composed response:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-200 1 OK </span><br><span style="color: hsl(0, 100%, 40%);">-I: 1 </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-v=0 </span><br><span style="color: hsl(0, 100%, 40%);">-o=- 1 23 IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-s=- </span><br><span style="color: hsl(0, 100%, 40%);">-c=IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-t=0 0 </span><br><span style="color: hsl(0, 100%, 40%);">-m=audio 16002 RTP/AVP 110 96 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:110 AMR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:96 GSM-EFR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=ptime:20 </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-response cb received:</span><br><span style="color: hsl(0, 100%, 40%);">-  head.response_code = 200</span><br><span style="color: hsl(0, 100%, 40%);">-  head.trans_id = 1</span><br><span style="color: hsl(0, 100%, 40%);">-  head.conn_id = 1</span><br><span style="color: hsl(0, 100%, 40%);">-  head.comment = OK</span><br><span style="color: hsl(0, 100%, 40%);">-  audio_port = 16002</span><br><span style="color: hsl(0, 100%, 40%);">-  audio_ip = 10.9.1.120</span><br><span style="color: hsl(0, 100%, 40%);">-  ptime = 20</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs_len = 2</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs[0] = 112</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs[1] = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap_len = 2</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[0].codec = 112</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[0].pt = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[1].codec = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[1].pt = 96</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> Generated CRCX message:</span><br><span> CRCX 1 23@mgw MGCP 1.0 </span><br><span> C: 2f </span><br><span>@@ -196,72 +154,4 @@</span><br><span>  2 <= 2</span><br><span>  100 <= 100</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-===== test_crcx_long_conn_id =====</span><br><span style="color: hsl(0, 100%, 40%);">-composed:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-CRCX 1 17@mgw MGCP 1.0 </span><br><span style="color: hsl(0, 100%, 40%);">-C: 2a </span><br><span style="color: hsl(0, 100%, 40%);">-L: p:20, a:AMR, nt:IN </span><br><span style="color: hsl(0, 100%, 40%);">-M: loopback </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-composed response:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-200 1 OK </span><br><span style="color: hsl(0, 100%, 40%);">-I: 123456789abcdef0123456789ABCDEF0 </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-v=0 </span><br><span style="color: hsl(0, 100%, 40%);">-o=- 1 23 IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-s=- </span><br><span style="color: hsl(0, 100%, 40%);">-c=IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-t=0 0 </span><br><span style="color: hsl(0, 100%, 40%);">-m=audio 16002 RTP/AVP 110 96 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:110 AMR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:96 GSM-EFR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=ptime:20 </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-response cb received:</span><br><span style="color: hsl(0, 100%, 40%);">-  head.response_code = 200</span><br><span style="color: hsl(0, 100%, 40%);">-  head.trans_id = 1</span><br><span style="color: hsl(0, 100%, 40%);">-  head.conn_id = 123456789abcdef0123456789ABCDEF0</span><br><span style="color: hsl(0, 100%, 40%);">-  head.comment = OK</span><br><span style="color: hsl(0, 100%, 40%);">-  audio_port = 16002</span><br><span style="color: hsl(0, 100%, 40%);">-  audio_ip = 10.9.1.120</span><br><span style="color: hsl(0, 100%, 40%);">-  ptime = 20</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs_len = 2</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs[0] = 112</span><br><span style="color: hsl(0, 100%, 40%);">-  codecs[1] = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap_len = 2</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[0].codec = 112</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[0].pt = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[1].codec = 110</span><br><span style="color: hsl(0, 100%, 40%);">-  ptmap[1].pt = 96</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-===== test_crcx_too_long_conn_id =====</span><br><span style="color: hsl(0, 100%, 40%);">-composed:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-CRCX 1 17@mgw MGCP 1.0 </span><br><span style="color: hsl(0, 100%, 40%);">-C: 2a </span><br><span style="color: hsl(0, 100%, 40%);">-L: p:20, a:AMR, nt:IN </span><br><span style="color: hsl(0, 100%, 40%);">-M: loopback </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-composed response:</span><br><span>------</span><br><span style="color: hsl(0, 100%, 40%);">-200 1 OK </span><br><span style="color: hsl(0, 100%, 40%);">-I: 123456789abcdef0123456789ABCDEF01001029 </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-v=0 </span><br><span style="color: hsl(0, 100%, 40%);">-o=- 1 23 IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-s=- </span><br><span style="color: hsl(0, 100%, 40%);">-c=IN IP4 10.9.1.120 </span><br><span style="color: hsl(0, 100%, 40%);">-t=0 0 </span><br><span style="color: hsl(0, 100%, 40%);">-m=audio 16002 RTP/AVP 110 96 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:110 AMR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=rtpmap:96 GSM-EFR/8000 </span><br><span style="color: hsl(0, 100%, 40%);">-a=ptime:20 </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>------</span><br><span> Done</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12354">change 12354</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/12354"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I98a9f1f17a1c4ab20cea3b08c7d21663592134d6 </div>
<div style="display:none"> Gerrit-Change-Number: 12354 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Max <msuraev@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>