<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/19525">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">get rid of mgcp_internal.h<br><br>The file mgcp_internal.h still contains mostly definitions and types<br>that are relevant for mgcp_network.c and mgcp_protocol.c. Lets give<br>the network and protocol module its own header files, also move stuff<br>that does not relate to protocol and network to the appropiate places.<br><br>Change-Id: I837eaad771ed7252304db4a81c37953b70766fff<br>---<br>M include/Makefile.am<br>M include/osmocom/mgcp/Makefile.am<br>M include/osmocom/mgcp/mgcp_codec.h<br>M include/osmocom/mgcp/mgcp_conn.h<br>D include/osmocom/mgcp/mgcp_internal.h<br>A include/osmocom/mgcp/mgcp_network.h<br>A include/osmocom/mgcp/mgcp_protocol.h<br>M include/osmocom/mgcp/mgcp_stat.h<br>M src/libosmo-mgcp/mgcp_codec.c<br>M src/libosmo-mgcp/mgcp_conn.c<br>M src/libosmo-mgcp/mgcp_e1.c<br>M src/libosmo-mgcp/mgcp_endp.c<br>M src/libosmo-mgcp/mgcp_msg.c<br>M src/libosmo-mgcp/mgcp_network.c<br>M src/libosmo-mgcp/mgcp_osmux.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>M src/libosmo-mgcp/mgcp_ratectr.c<br>M src/libosmo-mgcp/mgcp_sdp.c<br>M src/libosmo-mgcp/mgcp_stat.c<br>M src/libosmo-mgcp/mgcp_trunk.c<br>M src/libosmo-mgcp/mgcp_vty.c<br>M src/osmo-mgw/mgw_main.c<br>M tests/mgcp/mgcp_test.c<br>23 files changed, 306 insertions(+), 331 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/Makefile.am b/include/Makefile.am</span><br><span>index fbbd08d..457ac3f 100644</span><br><span>--- a/include/Makefile.am</span><br><span>+++ b/include/Makefile.am</span><br><span>@@ -8,7 +8,6 @@</span><br><span>   osmocom/mgcp_client/mgcp_client_fsm.h \</span><br><span>      osmocom/mgcp/mgcp.h \</span><br><span>        osmocom/mgcp/mgcp_common.h \</span><br><span style="color: hsl(0, 100%, 40%);">-    osmocom/mgcp/mgcp_internal.h \</span><br><span>       osmocom/mgcp/osmux.h \</span><br><span>       $(NULL)</span><br><span> </span><br><span>diff --git a/include/osmocom/mgcp/Makefile.am b/include/osmocom/mgcp/Makefile.am</span><br><span>index 549ba87..b94cdcd 100644</span><br><span>--- a/include/osmocom/mgcp/Makefile.am</span><br><span>+++ b/include/osmocom/mgcp/Makefile.am</span><br><span>@@ -11,4 +11,6 @@</span><br><span>         debug.h \</span><br><span>    mgcp_ratectr.h \</span><br><span>     mgcp_e1.h \</span><br><span style="color: hsl(120, 100%, 40%);">+   mgcp_network.h \</span><br><span style="color: hsl(120, 100%, 40%);">+      mgcp_protocol.h \</span><br><span>    $(NULL)</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_codec.h b/include/osmocom/mgcp/mgcp_codec.h</span><br><span>index caeecb0..97650e4 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_codec.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_codec.h</span><br><span>@@ -1,5 +1,15 @@</span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_RTP_AUDIO_FRAME_DUR_NUM 20</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_RTP_AUDIO_FRAME_DUR_DEN 1000</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_RTP_AUDIO_PACKET_DURATION_MS 20</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_RTP_AUDIO_DEFAULT_RATE  8000</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS 1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define PTYPE_UNDEFINED (-1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_conn_rtp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void mgcp_codec_summary(struct mgcp_conn_rtp *conn);</span><br><span> void mgcp_codec_reset_all(struct mgcp_conn_rtp *conn);</span><br><span> int mgcp_codec_add(struct mgcp_conn_rtp *conn, int payload_type, const char *audio_name, const struct mgcp_codec_param *param);</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h</span><br><span>index 78d5ea8..4f882e9 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_conn.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_conn.h</span><br><span>@@ -23,7 +23,9 @@</span><br><span> </span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_network.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span> #include <osmocom/core/linuxlist.h></span><br><span> #include <osmocom/core/rate_ctr.h></span><br><span> #include <inttypes.h></span><br><span>@@ -33,12 +35,67 @@</span><br><span>          (conn)->id, \</span><br><span>          ## args)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define LOG_CONN(conn, level, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGP(DRTP, level, "(%s I:%s) " fmt, \</span><br><span style="color: hsl(120, 100%, 40%);">+            (conn)->endp ? (conn)->endp->name : "none", (conn)->id, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define LOG_CONN_RTP(conn_rtp, level, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+  LOG_CONN((conn_rtp)->conn, level, fmt, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Specific rtp connection type (see struct mgcp_conn_rtp) */</span><br><span style="color: hsl(120, 100%, 40%);">+enum mgcp_conn_rtp_type {</span><br><span style="color: hsl(120, 100%, 40%);">+        MGCP_RTP_DEFAULT        = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+  MGCP_OSMUX_BSC,</span><br><span style="color: hsl(120, 100%, 40%);">+       MGCP_OSMUX_BSC_NAT,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Connection type, specifies which member of the union "u" in mgcp_conn</span><br><span>  *  contains a useful connection description (currently only RTP) */</span><br><span> enum mgcp_conn_type {</span><br><span>    MGCP_CONN_TYPE_RTP,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* MGCP connection (RTP) */</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_conn_rtp {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Backpointer to conn struct */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct mgcp_conn *conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Specific connection type */</span><br><span style="color: hsl(120, 100%, 40%);">+        enum mgcp_conn_rtp_type type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Port status */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct mgcp_rtp_end end;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Sequence bits */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct mgcp_rtp_state state;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* taps for the rtp connection; one per direction */</span><br><span style="color: hsl(120, 100%, 40%);">+  struct mgcp_rtp_tap tap_in;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct mgcp_rtp_tap tap_out;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Osmux states (optional) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Osmux state: disabled, activating, active */</span><br><span style="color: hsl(120, 100%, 40%);">+               enum osmux_state state;</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Is cid holding valid data? is it allocated from pool? */</span><br><span style="color: hsl(120, 100%, 40%);">+           bool cid_allocated;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Allocated Osmux circuit ID for this conn */</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t cid;</span><br><span style="color: hsl(120, 100%, 40%);">+          /* handle to batch messages */</span><br><span style="color: hsl(120, 100%, 40%);">+                struct osmux_in_handle *in;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* handle to unbatch messages */</span><br><span style="color: hsl(120, 100%, 40%);">+              struct osmux_out_handle out;</span><br><span style="color: hsl(120, 100%, 40%);">+          /* statistics */</span><br><span style="color: hsl(120, 100%, 40%);">+              struct {</span><br><span style="color: hsl(120, 100%, 40%);">+                      uint32_t chunks;</span><br><span style="color: hsl(120, 100%, 40%);">+                      uint32_t octets;</span><br><span style="color: hsl(120, 100%, 40%);">+              } stats;</span><br><span style="color: hsl(120, 100%, 40%);">+      } osmux;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    struct rate_ctr_group *rate_ctr_group;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! MGCP connection (untyped) */</span><br><span> struct mgcp_conn {</span><br><span>       /*! list head */</span><br><span>@@ -114,6 +171,11 @@</span><br><span>      [RTP_NUM_CONNECTIONS] = {"all_rtp:num_closed_conns", "Total number of rtp connections closed."}</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Was conn configured to handle Osmux? */</span><br><span style="color: hsl(120, 100%, 40%);">+static inline bool mgcp_conn_rtp_is_osmux(const struct mgcp_conn_rtp *conn) {</span><br><span style="color: hsl(120, 100%, 40%);">+      return conn->type == MGCP_OSMUX_BSC || conn->type == MGCP_OSMUX_BSC_NAT;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,</span><br><span>                                enum mgcp_conn_type type, char *name);</span><br><span> struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id);</span><br><span>@@ -125,3 +187,4 @@</span><br><span> char *mgcp_conn_dump(struct mgcp_conn *conn);</span><br><span> struct mgcp_conn *mgcp_find_dst_conn(struct mgcp_conn *conn);</span><br><span> struct mgcp_conn *mgcp_conn_get_oldest(struct mgcp_endpoint *endp);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_conn_watchdog_kick(struct mgcp_conn *conn);</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_internal.h b/include/osmocom/mgcp/mgcp_internal.h</span><br><span>deleted file mode 100644</span><br><span>index 86b2a57..0000000</span><br><span>--- a/include/osmocom/mgcp/mgcp_internal.h</span><br><span>+++ /dev/null</span><br><span>@@ -1,311 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* MGCP Private Data */</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%);">- * (C) 2009-2012 by Holger Hans Peter Freyther <zecke@selfish.org></span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2009-2012 by On-Waves</span><br><span style="color: hsl(0, 100%, 40%);">- * All Rights Reserved</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">- * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">- * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(0, 100%, 40%);">- * (at your option) any later version.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">- * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">- * GNU Affero General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(0, 100%, 40%);">- * along with this program.  If not, see <http://www.gnu.org/licenses/>.</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%);">-#pragma once</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <string.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <inttypes.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/select.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/linuxlist.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/counter.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/core/rate_ctr.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define CI_UNUSED 0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* FIXME: This this is only needed to compile the currently</span><br><span style="color: hsl(0, 100%, 40%);">- * broken OSMUX support. Remove when fixed */</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONN_ID_BTS "0"</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONN_ID_NET "1"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define LOG_CONN(conn, level, fmt, args...) \</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGP(DRTP, level, "(%s I:%s) " fmt, \</span><br><span style="color: hsl(0, 100%, 40%);">-      (conn)->endp ? (conn)->endp->name : "none", (conn)->id, ## args)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define LOG_CONN_RTP(conn_rtp, level, fmt, args...) \</span><br><span style="color: hsl(0, 100%, 40%);">-        LOG_CONN((conn_rtp)->conn, level, fmt, ## args)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_rtp_stream_state {</span><br><span style="color: hsl(0, 100%, 40%);">-        uint32_t ssrc;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint16_t last_seq;</span><br><span style="color: hsl(0, 100%, 40%);">-      uint32_t last_timestamp;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct rate_ctr *err_ts_ctr;</span><br><span style="color: hsl(0, 100%, 40%);">-    int32_t last_tsdelta;</span><br><span style="color: hsl(0, 100%, 40%);">-   uint32_t last_arrival_time;</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 mgcp_rtp_state {</span><br><span style="color: hsl(0, 100%, 40%);">-    /* has this state structure been initialized? */</span><br><span style="color: hsl(0, 100%, 40%);">-        int initialized;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        struct {</span><br><span style="color: hsl(0, 100%, 40%);">-                /* are we patching the SSRC value? */</span><br><span style="color: hsl(0, 100%, 40%);">-           int patch_ssrc;</span><br><span style="color: hsl(0, 100%, 40%);">-         /* original SSRC (to which we shall patch any different SSRC) */</span><br><span style="color: hsl(0, 100%, 40%);">-                uint32_t orig_ssrc;</span><br><span style="color: hsl(0, 100%, 40%);">-             /* offset to apply on the sequence number */</span><br><span style="color: hsl(0, 100%, 40%);">-            int seq_offset;</span><br><span style="color: hsl(0, 100%, 40%);">-         /* offset to apply on the timestamp number */</span><br><span style="color: hsl(0, 100%, 40%);">-           int32_t timestamp_offset;</span><br><span style="color: hsl(0, 100%, 40%);">-       } patch;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* duration of a packet (FIXME: in which unit?) */</span><br><span style="color: hsl(0, 100%, 40%);">-      uint32_t packet_duration;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Note: These states are not continuously updated, they serve as an</span><br><span style="color: hsl(0, 100%, 40%);">-     * information source to patch certain values in the RTP header. Do</span><br><span style="color: hsl(0, 100%, 40%);">-      * not use this state if constantly updated data about the RTP stream</span><br><span style="color: hsl(0, 100%, 40%);">-    * is needed. (see also mgcp_patch_and_count() */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_rtp_stream_state in_stream;</span><br><span style="color: hsl(0, 100%, 40%);">- struct mgcp_rtp_stream_state out_stream;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* jitter and packet loss calculation */</span><br><span style="color: hsl(0, 100%, 40%);">-        struct {</span><br><span style="color: hsl(0, 100%, 40%);">-                int initialized;</span><br><span style="color: hsl(0, 100%, 40%);">-                uint16_t base_seq;</span><br><span style="color: hsl(0, 100%, 40%);">-              uint16_t max_seq;</span><br><span style="color: hsl(0, 100%, 40%);">-               uint32_t ssrc;</span><br><span style="color: hsl(0, 100%, 40%);">-          uint32_t jitter;</span><br><span style="color: hsl(0, 100%, 40%);">-                int32_t transit;</span><br><span style="color: hsl(0, 100%, 40%);">-                int cycles;</span><br><span style="color: hsl(0, 100%, 40%);">-     } stats;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Alternative values for RTP tx, in case no sufficient header</span><br><span style="color: hsl(0, 100%, 40%);">-   * information is available so the header needs to be generated</span><br><span style="color: hsl(0, 100%, 40%);">-  * locally (when just forwarding packets, the header of incoming</span><br><span style="color: hsl(0, 100%, 40%);">-         * data is just re-used) */</span><br><span style="color: hsl(0, 100%, 40%);">-     uint16_t alt_rtp_tx_sequence;</span><br><span style="color: hsl(0, 100%, 40%);">-   uint32_t alt_rtp_tx_ssrc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */</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 mgcp_rtp_codec {</span><br><span style="color: hsl(0, 100%, 40%);">-    uint32_t rate;</span><br><span style="color: hsl(0, 100%, 40%);">-  int channels;</span><br><span style="color: hsl(0, 100%, 40%);">-   uint32_t frame_duration_num;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint32_t frame_duration_den;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    int payload_type;</span><br><span style="color: hsl(0, 100%, 40%);">-       char *audio_name;</span><br><span style="color: hsl(0, 100%, 40%);">-       char *subtype_name;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     bool param_present;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct mgcp_codec_param param;</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_rtp_end': basically a wrapper around the RTP+RTCP ports */</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_rtp_end {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* local IP address of the RTP socket */</span><br><span style="color: hsl(0, 100%, 40%);">-        struct in_addr addr;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* in network byte order */</span><br><span style="color: hsl(0, 100%, 40%);">-     int rtp_port, rtcp_port;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* currently selected audio codec */</span><br><span style="color: hsl(0, 100%, 40%);">-    struct mgcp_rtp_codec *codec;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* array with assigned audio codecs to choose from (SDP) */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct mgcp_rtp_codec codecs[MGCP_MAX_CODECS];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* number of assigned audio codecs (SDP) */</span><br><span style="color: hsl(0, 100%, 40%);">-     unsigned int codecs_assigned;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* per endpoint data */</span><br><span style="color: hsl(0, 100%, 40%);">- int  frames_per_packet;</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t packet_duration_ms;</span><br><span style="color: hsl(0, 100%, 40%);">-    int maximum_packet_time; /* -1: not set */</span><br><span style="color: hsl(0, 100%, 40%);">-      char *fmtp_extra;</span><br><span style="color: hsl(0, 100%, 40%);">-       /* are we transmitting packets (1) or dropping (0) outbound packets */</span><br><span style="color: hsl(0, 100%, 40%);">-  int output_enabled;</span><br><span style="color: hsl(0, 100%, 40%);">-     /* FIXME: This parameter can be set + printed, but is nowhere used! */</span><br><span style="color: hsl(0, 100%, 40%);">-  int force_output_ptime;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* RTP patching */</span><br><span style="color: hsl(0, 100%, 40%);">-      int force_constant_ssrc; /* -1: always, 0: don't, 1: once */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* should we perform align_rtp_timestamp_offset() (1) or not (0) */</span><br><span style="color: hsl(0, 100%, 40%);">-     int force_aligned_timing;</span><br><span style="color: hsl(0, 100%, 40%);">-       bool rfc5993_hr_convert;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Each end has a separate socket for RTP and RTCP */</span><br><span style="color: hsl(0, 100%, 40%);">-   struct osmo_fd rtp;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct osmo_fd rtcp;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* local UDP port number of the RTP socket; RTCP is +1 */</span><br><span style="color: hsl(0, 100%, 40%);">-       int local_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 mgcp_rtp_tap {</span><br><span style="color: hsl(0, 100%, 40%);">-  /* is this tap active (1) or not (0) */</span><br><span style="color: hsl(0, 100%, 40%);">- int enabled;</span><br><span style="color: hsl(0, 100%, 40%);">-    /* IP/port to which we're forwarding the tapped data */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct sockaddr_in forward;</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 mgcp_lco {</span><br><span style="color: hsl(0, 100%, 40%);">-  char *string;</span><br><span style="color: hsl(0, 100%, 40%);">-   char *codec;</span><br><span style="color: hsl(0, 100%, 40%);">-    int pkt_period_min; /* time in ms */</span><br><span style="color: hsl(0, 100%, 40%);">-    int pkt_period_max; /* time in ms */</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%);">-/* Specific rtp connection type (see struct mgcp_conn_rtp) */</span><br><span style="color: hsl(0, 100%, 40%);">-enum mgcp_conn_rtp_type {</span><br><span style="color: hsl(0, 100%, 40%);">-    MGCP_RTP_DEFAULT        = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-    MGCP_OSMUX_BSC,</span><br><span style="color: hsl(0, 100%, 40%);">- MGCP_OSMUX_BSC_NAT,</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%);">-#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* MGCP connection (RTP) */</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_conn_rtp {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Backpointer to conn struct */</span><br><span style="color: hsl(0, 100%, 40%);">-        struct mgcp_conn *conn;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Specific connection type */</span><br><span style="color: hsl(0, 100%, 40%);">-  enum mgcp_conn_rtp_type type;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Port status */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_rtp_end end;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Sequence bits */</span><br><span style="color: hsl(0, 100%, 40%);">-     struct mgcp_rtp_state state;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* taps for the rtp connection; one per direction */</span><br><span style="color: hsl(0, 100%, 40%);">-    struct mgcp_rtp_tap tap_in;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct mgcp_rtp_tap tap_out;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Osmux states (optional) */</span><br><span style="color: hsl(0, 100%, 40%);">-   struct {</span><br><span style="color: hsl(0, 100%, 40%);">-                /* Osmux state: disabled, activating, active */</span><br><span style="color: hsl(0, 100%, 40%);">-         enum osmux_state state;</span><br><span style="color: hsl(0, 100%, 40%);">-         /* Is cid holding valid data? is it allocated from pool? */</span><br><span style="color: hsl(0, 100%, 40%);">-             bool cid_allocated;</span><br><span style="color: hsl(0, 100%, 40%);">-             /* Allocated Osmux circuit ID for this conn */</span><br><span style="color: hsl(0, 100%, 40%);">-          uint8_t cid;</span><br><span style="color: hsl(0, 100%, 40%);">-            /* handle to batch messages */</span><br><span style="color: hsl(0, 100%, 40%);">-          struct osmux_in_handle *in;</span><br><span style="color: hsl(0, 100%, 40%);">-             /* handle to unbatch messages */</span><br><span style="color: hsl(0, 100%, 40%);">-                struct osmux_out_handle out;</span><br><span style="color: hsl(0, 100%, 40%);">-            /* statistics */</span><br><span style="color: hsl(0, 100%, 40%);">-                struct {</span><br><span style="color: hsl(0, 100%, 40%);">-                        uint32_t chunks;</span><br><span style="color: hsl(0, 100%, 40%);">-                        uint32_t octets;</span><br><span style="color: hsl(0, 100%, 40%);">-                } stats;</span><br><span style="color: hsl(0, 100%, 40%);">-        } osmux;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        struct rate_ctr_group *rate_ctr_group;</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%);">-#include <osmocom/mgcp/mgcp_conn.h></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%);">- * Internal structure while parsing a request</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-struct mgcp_parse_data {</span><br><span style="color: hsl(0, 100%, 40%);">-    struct mgcp_config *cfg;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct mgcp_endpoint *endp;</span><br><span style="color: hsl(0, 100%, 40%);">-     char *trans;</span><br><span style="color: hsl(0, 100%, 40%);">-    char *save;</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%);">-int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,</span><br><span style="color: hsl(0, 100%, 40%);">-          struct msgb *msg, struct mgcp_conn_rtp *conn_src,</span><br><span style="color: hsl(0, 100%, 40%);">-       struct mgcp_conn_rtp *conn_dst);</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_cleanup_rtp_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_dispatch_e1_bridge_cb(struct msgb *msg);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_cleanup_e1_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_bind_net_rtp_port(struct mgcp_endpoint *endp, int rtp_port,</span><br><span style="color: hsl(0, 100%, 40%);">-                           struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_free_rtp_port(struct mgcp_rtp_end *end);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* For transcoding we need to manage an in and an output that are connected */</span><br><span style="color: hsl(0, 100%, 40%);">-static inline int endp_back_channel(int endpoint)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       return endpoint + 60;</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%);">-char *get_lco_identifier(const char *options);</span><br><span style="color: hsl(0, 100%, 40%);">-int check_local_cx_options(void *ctx, const char *options);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,</span><br><span style="color: hsl(0, 100%, 40%);">-                      struct mgcp_rtp_end *rtp);</span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  struct mgcp_rtp_end *rtp);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* payload processing default functions */</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end,</span><br><span style="color: hsl(0, 100%, 40%);">-                         char *data, int *len, int buf_size);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 struct mgcp_conn_rtp *conn_dst,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 struct mgcp_conn_rtp *conn_src);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                       const struct mgcp_rtp_codec **codec,</span><br><span style="color: hsl(0, 100%, 40%);">-                                    const char **fmtp_extra,</span><br><span style="color: hsl(0, 100%, 40%);">-                                        struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* internal RTP Annex A counting */</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state,</span><br><span style="color: hsl(0, 100%, 40%);">-                    const uint16_t seq, const int32_t transit,</span><br><span style="color: hsl(0, 100%, 40%);">-                      const uint32_t ssrc);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int mgcp_set_ip_tos(int fd, int tos);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Was conn configured to handle Osmux? */</span><br><span style="color: hsl(0, 100%, 40%);">-static inline bool mgcp_conn_rtp_is_osmux(const struct mgcp_conn_rtp *conn) {</span><br><span style="color: hsl(0, 100%, 40%);">-       return conn->type == MGCP_OSMUX_BSC || conn->type == MGCP_OSMUX_BSC_NAT;</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%);">-enum {</span><br><span style="color: hsl(0, 100%, 40%);">-   MGCP_DEST_NET = 0,</span><br><span style="color: hsl(0, 100%, 40%);">-      MGCP_DEST_BTS,</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%);">-#define MGCP_DUMMY_LOAD 0x23</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%);">- * SDP related information</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-/* Assume audio frame length of 20ms */</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_RTP_AUDIO_FRAME_DUR_NUM 20</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_RTP_AUDIO_FRAME_DUR_DEN 1000</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_RTP_AUDIO_PACKET_DURATION_MS 20</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_RTP_AUDIO_DEFAULT_RATE  8000</span><br><span style="color: hsl(0, 100%, 40%);">-#define DEFAULT_RTP_AUDIO_DEFAULT_CHANNELS 1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define PTYPE_UNDEFINED (-1)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_conn_watchdog_kick(struct mgcp_conn *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-void mgcp_patch_and_count(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                   struct mgcp_rtp_state *state,</span><br><span style="color: hsl(0, 100%, 40%);">-                   struct mgcp_rtp_end *rtp_end,</span><br><span style="color: hsl(0, 100%, 40%);">-                   struct sockaddr_in *addr, struct msgb *msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define RTP_BUF_SIZE              4096</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_network.h b/include/osmocom/mgcp/mgcp_network.h</span><br><span>new file mode 100644</span><br><span>index 0000000..c08d009</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/mgcp/mgcp_network.h</span><br><span>@@ -0,0 +1,163 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdbool.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_DUMMY_LOAD 0x23</span><br><span style="color: hsl(120, 100%, 40%);">+#define RTP_BUF_SIZE      4096</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_stream_state {</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t ssrc;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t last_seq;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t last_timestamp;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct rate_ctr *err_ts_ctr;</span><br><span style="color: hsl(120, 100%, 40%);">+  int32_t last_tsdelta;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t last_arrival_time;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_state {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* has this state structure been initialized? */</span><br><span style="color: hsl(120, 100%, 40%);">+      int initialized;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    struct {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* are we patching the SSRC value? */</span><br><span style="color: hsl(120, 100%, 40%);">+         int patch_ssrc;</span><br><span style="color: hsl(120, 100%, 40%);">+               /* original SSRC (to which we shall patch any different SSRC) */</span><br><span style="color: hsl(120, 100%, 40%);">+              uint32_t orig_ssrc;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* offset to apply on the sequence number */</span><br><span style="color: hsl(120, 100%, 40%);">+          int seq_offset;</span><br><span style="color: hsl(120, 100%, 40%);">+               /* offset to apply on the timestamp number */</span><br><span style="color: hsl(120, 100%, 40%);">+         int32_t timestamp_offset;</span><br><span style="color: hsl(120, 100%, 40%);">+     } patch;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* duration of a packet (FIXME: in which unit?) */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t packet_duration;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Note: These states are not continuously updated, they serve as an</span><br><span style="color: hsl(120, 100%, 40%);">+   * information source to patch certain values in the RTP header. Do</span><br><span style="color: hsl(120, 100%, 40%);">+    * not use this state if constantly updated data about the RTP stream</span><br><span style="color: hsl(120, 100%, 40%);">+  * is needed. (see also mgcp_patch_and_count() */</span><br><span style="color: hsl(120, 100%, 40%);">+     struct mgcp_rtp_stream_state in_stream;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct mgcp_rtp_stream_state out_stream;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* jitter and packet loss calculation */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct {</span><br><span style="color: hsl(120, 100%, 40%);">+              int initialized;</span><br><span style="color: hsl(120, 100%, 40%);">+              uint16_t base_seq;</span><br><span style="color: hsl(120, 100%, 40%);">+            uint16_t max_seq;</span><br><span style="color: hsl(120, 100%, 40%);">+             uint32_t ssrc;</span><br><span style="color: hsl(120, 100%, 40%);">+                uint32_t jitter;</span><br><span style="color: hsl(120, 100%, 40%);">+              int32_t transit;</span><br><span style="color: hsl(120, 100%, 40%);">+              int cycles;</span><br><span style="color: hsl(120, 100%, 40%);">+   } stats;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Alternative values for RTP tx, in case no sufficient header</span><br><span style="color: hsl(120, 100%, 40%);">+         * information is available so the header needs to be generated</span><br><span style="color: hsl(120, 100%, 40%);">+        * locally (when just forwarding packets, the header of incoming</span><br><span style="color: hsl(120, 100%, 40%);">+       * data is just re-used) */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t alt_rtp_tx_sequence;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t alt_rtp_tx_ssrc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bool patched_first_rtp_payload; /* FIXME: drop this, see OS#2459 */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_codec {</span><br><span style="color: hsl(120, 100%, 40%);">+    uint32_t rate;</span><br><span style="color: hsl(120, 100%, 40%);">+        int channels;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t frame_duration_num;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint32_t frame_duration_den;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        int payload_type;</span><br><span style="color: hsl(120, 100%, 40%);">+     char *audio_name;</span><br><span style="color: hsl(120, 100%, 40%);">+     char *subtype_name;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bool param_present;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct mgcp_codec_param param;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 'mgcp_rtp_end': basically a wrapper around the RTP+RTCP ports */</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_end {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* local IP address of the RTP socket */</span><br><span style="color: hsl(120, 100%, 40%);">+      struct in_addr addr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* in network byte order */</span><br><span style="color: hsl(120, 100%, 40%);">+   int rtp_port, rtcp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* currently selected audio codec */</span><br><span style="color: hsl(120, 100%, 40%);">+  struct mgcp_rtp_codec *codec;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* array with assigned audio codecs to choose from (SDP) */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct mgcp_rtp_codec codecs[MGCP_MAX_CODECS];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* number of assigned audio codecs (SDP) */</span><br><span style="color: hsl(120, 100%, 40%);">+   unsigned int codecs_assigned;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* per endpoint data */</span><br><span style="color: hsl(120, 100%, 40%);">+       int  frames_per_packet;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint32_t packet_duration_ms;</span><br><span style="color: hsl(120, 100%, 40%);">+  int maximum_packet_time; /* -1: not set */</span><br><span style="color: hsl(120, 100%, 40%);">+    char *fmtp_extra;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* are we transmitting packets (1) or dropping (0) outbound packets */</span><br><span style="color: hsl(120, 100%, 40%);">+        int output_enabled;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* FIXME: This parameter can be set + printed, but is nowhere used! */</span><br><span style="color: hsl(120, 100%, 40%);">+        int force_output_ptime;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* RTP patching */</span><br><span style="color: hsl(120, 100%, 40%);">+    int force_constant_ssrc; /* -1: always, 0: don't, 1: once */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* should we perform align_rtp_timestamp_offset() (1) or not (0) */</span><br><span style="color: hsl(120, 100%, 40%);">+   int force_aligned_timing;</span><br><span style="color: hsl(120, 100%, 40%);">+     bool rfc5993_hr_convert;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Each end has a separate socket for RTP and RTCP */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_fd rtp;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct osmo_fd rtcp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* local UDP port number of the RTP socket; RTCP is +1 */</span><br><span style="color: hsl(120, 100%, 40%);">+     int local_port;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_tap {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* is this tap active (1) or not (0) */</span><br><span style="color: hsl(120, 100%, 40%);">+       int enabled;</span><br><span style="color: hsl(120, 100%, 40%);">+  /* IP/port to which we're forwarding the tapped data */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct sockaddr_in forward;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct sockaddr_in *addr,</span><br><span style="color: hsl(120, 100%, 40%);">+             struct msgb *msg, struct mgcp_conn_rtp *conn_src,</span><br><span style="color: hsl(120, 100%, 40%);">+             struct mgcp_conn_rtp *conn_dst);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_send_dummy(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_dispatch_rtp_bridge_cb(struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_cleanup_rtp_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_dispatch_e1_bridge_cb(struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_cleanup_e1_bridge_cb(struct mgcp_endpoint *endp, struct mgcp_conn *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_bind_net_rtp_port(struct mgcp_endpoint *endp, int rtp_port,</span><br><span style="color: hsl(120, 100%, 40%);">+                     struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_free_rtp_port(struct mgcp_rtp_end *end);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_patch_and_count(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                      struct mgcp_rtp_state *state,</span><br><span style="color: hsl(120, 100%, 40%);">+                         struct mgcp_rtp_end *rtp_end,</span><br><span style="color: hsl(120, 100%, 40%);">+                         struct sockaddr_in *addr, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_set_ip_tos(int fd, int tos);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* payload processing default functions */</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end,</span><br><span style="color: hsl(120, 100%, 40%);">+                             char *data, int *len, int buf_size);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   struct mgcp_conn_rtp *conn_dst,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct mgcp_conn_rtp *conn_src);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         const struct mgcp_rtp_codec **codec,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          const char **fmtp_extra,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      struct mgcp_conn_rtp *conn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* internal RTP Annex A counting */</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state,</span><br><span style="color: hsl(120, 100%, 40%);">+                    const uint16_t seq, const int32_t transit,</span><br><span style="color: hsl(120, 100%, 40%);">+                    const uint32_t ssrc);</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_protocol.h b/include/osmocom/mgcp/mgcp_protocol.h</span><br><span>new file mode 100644</span><br><span>index 0000000..abd264c</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/mgcp/mgcp_protocol.h</span><br><span>@@ -0,0 +1,27 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Internal structure while parsing a request */</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_parse_data {</span><br><span style="color: hsl(120, 100%, 40%);">+  struct mgcp_config *cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct mgcp_endpoint *endp;</span><br><span style="color: hsl(120, 100%, 40%);">+   char *trans;</span><br><span style="color: hsl(120, 100%, 40%);">+  char *save;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Local connection options */</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_lco {</span><br><span style="color: hsl(120, 100%, 40%);">+  char *string;</span><br><span style="color: hsl(120, 100%, 40%);">+ char *codec;</span><br><span style="color: hsl(120, 100%, 40%);">+  int pkt_period_min; /* time in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+  int pkt_period_max; /* time in ms */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+char *get_lco_identifier(const char *options);</span><br><span style="color: hsl(120, 100%, 40%);">+int check_local_cx_options(void *ctx, const char *options);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mgcp_rtp_end;</span><br><span style="color: hsl(120, 100%, 40%);">+void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,</span><br><span style="color: hsl(120, 100%, 40%);">+                  struct mgcp_rtp_end *rtp);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t mgcp_rtp_packet_duration(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                            struct mgcp_rtp_end *rtp);</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_stat.h b/include/osmocom/mgcp/mgcp_stat.h</span><br><span>index 0bde8cf..a66257b 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_stat.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_stat.h</span><br><span>@@ -24,7 +24,6 @@</span><br><span> </span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span> #include <inttypes.h></span><br><span> </span><br><span> void mgcp_format_stats(char *str, size_t str_len,  struct mgcp_conn *conn);</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>index 58079c6..f237e38 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_codec.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_codec.c</span><br><span>@@ -17,9 +17,13 @@</span><br><span>  * along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span>  *</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_codec.h></span><br><span> #include <errno.h></span><br><span> </span><br><span> /* Helper function to dump codec information of a specified codec to a printable</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c</span><br><span>index 8c7918e..d52fa64 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_conn.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_conn.c</span><br><span>@@ -22,7 +22,8 @@</span><br><span>  */</span><br><span> </span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_network.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>index 1e227dc..8444b11 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_e1.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_e1.c</span><br><span>@@ -21,7 +21,10 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c</span><br><span>index f0ad0a7..668d88b 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_endp.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_endp.c</span><br><span>@@ -21,7 +21,9 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span> </span><br><span>diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c</span><br><span>index 019466e..2023a68 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_msg.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_msg.c</span><br><span>@@ -24,7 +24,9 @@</span><br><span> </span><br><span> #include <limits.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span> #include <osmocom/mgcp/mgcp_msg.h></span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index e0aa42e..712c706 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -37,7 +37,8 @@</span><br><span> #include <osmocom/netif/amr.h></span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_network.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_stat.h></span><br><span> #include <osmocom/mgcp/osmux.h></span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span>@@ -48,6 +49,7 @@</span><br><span> #include <osmocom/codec/codec.h></span><br><span> #include <osmocom/mgcp/mgcp_e1.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define RTP_SEQ_MOD               (1 << 16)</span><br><span> #define RTP_MAX_DROPOUT              3000</span><br><span> #define RTP_MAX_MISORDER        100</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>index 85e33e0..93c922d 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>@@ -23,7 +23,7 @@</span><br><span> #include <osmocom/netif/amr.h></span><br><span> </span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/osmux.h></span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 2a6581e..6a533c3 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -35,7 +35,9 @@</span><br><span> </span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_network.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_stat.h></span><br><span> #include <osmocom/mgcp/mgcp_msg.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_ratectr.c b/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>index aacdd85..2868062 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_ratectr.c</span><br><span>@@ -24,7 +24,7 @@</span><br><span> </span><br><span> #include <errno.h></span><br><span> #include <osmocom/core/stats.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span> #include <osmocom/mgcp/mgcp_ratectr.h></span><br><span> </span><br><span> static const struct rate_ctr_desc mgcp_general_ctr_desc[] = {</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_sdp.c b/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>index 5fa6bdb..1c3c89a 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_sdp.c</span><br><span>@@ -22,12 +22,15 @@</span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_msg.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span> #include <osmocom/mgcp/mgcp_codec.h></span><br><span> #include <osmocom/mgcp/mgcp_sdp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> </span><br><span> #include <errno.h></span><br><span> #include <stdlib.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c</span><br><span>index 3685cfe..2e74238 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_stat.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_stat.c</span><br><span>@@ -22,10 +22,12 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_stat.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <limits.h></span><br><span> #include <inttypes.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_stat.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_endp.h></span><br><span> </span><br><span> /* Helper function for mgcp_format_stats_rtp() to calculate packet loss */</span><br><span> void calc_loss(struct mgcp_conn_rtp *conn, uint32_t *expected, int *loss)</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_trunk.c b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>index dfedc4b..617993f 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_trunk.c</span><br><span>@@ -21,7 +21,8 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span> #include <osmocom/mgcp/mgcp_e1.h></span><br><span>diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>index b8ec241..d2d4b23 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_vty.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_vty.c</span><br><span>@@ -25,7 +25,8 @@</span><br><span> #include <osmocom/vty/misc.h></span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/osmux.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/vty.h></span><br><span> #include <osmocom/mgcp/mgcp_conn.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span>diff --git a/src/osmo-mgw/mgw_main.c b/src/osmo-mgw/mgw_main.c</span><br><span>index 036e0c0..d4bcb3a 100644</span><br><span>--- a/src/osmo-mgw/mgw_main.c</span><br><span>+++ b/src/osmo-mgw/mgw_main.c</span><br><span>@@ -36,7 +36,7 @@</span><br><span> #include <sys/socket.h></span><br><span> </span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/vty.h></span><br><span> #include <osmocom/mgcp/debug.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span>diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c</span><br><span>index a050a0b..5ae321f 100644</span><br><span>--- a/tests/mgcp/mgcp_test.c</span><br><span>+++ b/tests/mgcp/mgcp_test.c</span><br><span>@@ -22,14 +22,14 @@</span><br><span> #include <osmocom/mgcp/mgcp.h></span><br><span> #include <osmocom/mgcp/vty.h></span><br><span> #include <osmocom/mgcp/mgcp_common.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_conn.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp/mgcp_protocol.h></span><br><span> #include <osmocom/mgcp/mgcp_stat.h></span><br><span> #include <osmocom/mgcp/mgcp_msg.h></span><br><span> #include <osmocom/mgcp/mgcp_endp.h></span><br><span> #include <osmocom/mgcp/mgcp_trunk.h></span><br><span> #include <osmocom/mgcp/mgcp_sdp.h></span><br><span> #include <osmocom/mgcp/mgcp_codec.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/mgcp/mgcp_internal.h></span><br><span> </span><br><span> #include <osmocom/core/application.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/19525">change 19525</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-mgw/+/19525"/><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-Change-Id: I837eaad771ed7252304db4a81c37953b70766fff </div>
<div style="display:none"> Gerrit-Change-Number: 19525 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>