pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-mgw/+/39184?usp=email )
Change subject: mgw: Rename and move several get_conn funcs acting on endp object ......................................................................
mgw: Rename and move several get_conn funcs acting on endp object
These functions act on the endp object, hence prefix them with mgcp_endp_* and move them to mgcp_endp.{c,h}.
Change-Id: Ifff01331db68998e9e23f99d8836d96022d550c2 --- M include/osmocom/mgcp/mgcp_conn.h M include/osmocom/mgcp/mgcp_endp.h M src/libosmo-mgcp/mgcp_conn.c M src/libosmo-mgcp/mgcp_e1.c M src/libosmo-mgcp/mgcp_endp.c M src/libosmo-mgcp/mgcp_msg.c M src/libosmo-mgcp/mgcp_protocol.c M src/libosmo-mgcp/mgcp_vty.c M tests/mgcp/mgcp_test.c 9 files changed, 87 insertions(+), 86 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved daniel: Looks good to me, but someone else must approve
diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h index 6219579..de9bae6 100644 --- a/include/osmocom/mgcp/mgcp_conn.h +++ b/include/osmocom/mgcp/mgcp_conn.h @@ -240,10 +240,6 @@ struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp, enum mgcp_conn_type type, char *name); void mgcp_conn_free(struct mgcp_conn *conn); -struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id); -struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp, - const char *id); char *mgcp_conn_dump(struct mgcp_conn *conn); struct mgcp_conn *mgcp_find_dst_conn(struct mgcp_conn *conn); -struct mgcp_conn *mgcp_conn_get_oldest(struct mgcp_endpoint *endp); void mgcp_conn_watchdog_kick(struct mgcp_conn *conn); diff --git a/include/osmocom/mgcp/mgcp_endp.h b/include/osmocom/mgcp/mgcp_endp.h index 8e5b4cc..4f41818 100644 --- a/include/osmocom/mgcp/mgcp_endp.h +++ b/include/osmocom/mgcp/mgcp_endp.h @@ -148,3 +148,8 @@ struct mgcp_endpoint *mgcp_endp_find_specific(const char *epname, const struct mgcp_trunk *trunk); void mgcp_endp_release(struct mgcp_endpoint *endp); + +struct mgcp_conn *mgcp_endp_get_conn(struct mgcp_endpoint *endp, const char *id); +struct mgcp_conn *mgcp_endp_get_conn_oldest(struct mgcp_endpoint *endp); +struct mgcp_conn_rtp *mgcp_endp_get_conn_rtp(struct mgcp_endpoint *endp, + const char *id); diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c index 9c60dfa..9d03550 100644 --- a/src/libosmo-mgcp/mgcp_conn.c +++ b/src/libosmo-mgcp/mgcp_conn.c @@ -74,7 +74,7 @@
/* ensure that the generated conn_id is unique * for this endpoint */ - if (!mgcp_conn_get_rtp(endp, id_hex)) { + if (!mgcp_endp_get_conn_rtp(endp, id_hex)) { osmo_strlcpy(id, id_hex, MGCP_CONN_ID_MAXLEN); return 0; } @@ -212,58 +212,6 @@ return conn; }
-/*! find a connection by its ID. - * \param[in] endp associated endpoint - * \param[in] id identification number of the connection - * \returns pointer to allocated connection, NULL if not found */ -struct mgcp_conn *mgcp_conn_get(struct mgcp_endpoint *endp, const char *id) -{ - struct mgcp_conn *conn; - const char *id_upper; - const char *conn_id; - - if (!id || !*id) - return NULL; - - /* Ignore leading zeros in needle */ - while (*id == '0') - id++; - - /* Use uppercase to compare identifiers, to avoid mismatches: RFC3435 2.1.3.2 "Names of - * Connections" defines the id as a hex string, so clients may return lower case hex even though - * we sent upper case hex in the CRCX response. */ - id_upper = osmo_str_toupper(id); - - llist_for_each_entry(conn, &endp->conns, entry) { - /* Ignore leading zeros in haystack */ - for (conn_id=conn->id; *conn_id == '0'; conn_id++); - - if (strcmp(conn_id, id_upper) == 0) - return conn; - } - - return NULL; -} - -/*! find an RTP connection by its ID. - * \param[in] endp associated endpoint - * \param[in] id identification number of the connection - * \returns pointer to allocated connection, NULL if not found */ -struct mgcp_conn_rtp *mgcp_conn_get_rtp(struct mgcp_endpoint *endp, - const char *id) -{ - struct mgcp_conn *conn; - - conn = mgcp_conn_get(endp, id); - if (!conn) - return NULL; - - if (conn->type == MGCP_CONN_TYPE_RTP) - return &conn->u.rtp; - - return NULL; -} - static void aggregate_rtp_conn_stats(struct mgcp_endpoint *endp, struct mgcp_conn_rtp *conn_rtp) { struct rate_ctr_group *all_stats = endp->trunk->ratectr.all_rtp_conn_stats; @@ -377,16 +325,6 @@ return NULL; }
-/*! get oldest connection in the list. - * \param[in] endp associated endpoint */ -struct mgcp_conn *mgcp_conn_get_oldest(struct mgcp_endpoint *endp) -{ - if (llist_empty(&endp->conns)) - return NULL; - - return llist_last_entry(&endp->conns, struct mgcp_conn, entry); -} - const struct value_string mgcp_conn_rtp_type_names[] = { { MGCP_RTP_DEFAULT, "rtp" }, { MGCP_RTP_OSMUX, "osmux" }, diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c index 1428824..fac1ff6 100644 --- a/src/libosmo-mgcp/mgcp_e1.c +++ b/src/libosmo-mgcp/mgcp_e1.c @@ -656,7 +656,7 @@ /* In order to determine the codec, find the oldest connection on * the endpoint and use its codec information. Normally on an E1 * endpoint no more than one connection should exist. */ - conn = mgcp_conn_get_oldest(endp); + conn = mgcp_endp_get_conn_oldest(endp); OSMO_ASSERT(conn); codec = conn->u.rtp.end.codec; OSMO_ASSERT(codec); diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c index 6973b43..b2ece20 100644 --- a/src/libosmo-mgcp/mgcp_endp.c +++ b/src/libosmo-mgcp/mgcp_endp.c @@ -684,6 +684,68 @@ mgcp_conn_free(conn); }
+/*! find a connection by its ID. + * \param[in] endp associated endpoint + * \param[in] id identification number of the connection + * \returns pointer to allocated connection, NULL if not found */ +struct mgcp_conn *mgcp_endp_get_conn(struct mgcp_endpoint *endp, const char *id) +{ + struct mgcp_conn *conn; + const char *id_upper; + const char *conn_id; + + if (!id || !*id) + return NULL; + + /* Ignore leading zeros in needle */ + while (*id == '0') + id++; + + /* Use uppercase to compare identifiers, to avoid mismatches: RFC3435 2.1.3.2 "Names of + * Connections" defines the id as a hex string, so clients may return lower case hex even though + * we sent upper case hex in the CRCX response. */ + id_upper = osmo_str_toupper(id); + + llist_for_each_entry(conn, &endp->conns, entry) { + /* Ignore leading zeros in haystack */ + for (conn_id = conn->id; *conn_id == '0'; conn_id++); + + if (strcmp(conn_id, id_upper) == 0) + return conn; + } + + return NULL; +} + +/*! get oldest connection in the list. + * \param[in] endp associated endpoint */ +struct mgcp_conn *mgcp_endp_get_conn_oldest(struct mgcp_endpoint *endp) +{ + if (llist_empty(&endp->conns)) + return NULL; + + return llist_last_entry(&endp->conns, struct mgcp_conn, entry); +} + +/*! find an RTP connection by its ID. + * \param[in] endp associated endpoint + * \param[in] id identification number of the connection + * \returns pointer to allocated connection, NULL if not found */ +struct mgcp_conn_rtp *mgcp_endp_get_conn_rtp(struct mgcp_endpoint *endp, + const char *id) +{ + struct mgcp_conn *conn; + + conn = mgcp_endp_get_conn(endp, id); + if (!conn) + return NULL; + + if (conn->type == MGCP_CONN_TYPE_RTP) + return &conn->u.rtp; + + return NULL; +} + /*! release endpoint, all open connections are closed. * \param[in] endp endpoint to release */ void mgcp_endp_release(struct mgcp_endpoint *endp) diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c index a46ffc2..5900a65 100644 --- a/src/libosmo-mgcp/mgcp_msg.c +++ b/src/libosmo-mgcp/mgcp_msg.c @@ -294,7 +294,7 @@ }
/* Check if connection exists */ - if (mgcp_conn_get(endp, conn_id)) + if (mgcp_endp_get_conn(endp, conn_id)) return 0;
LOGPENDP(endp, DLMGCP, LOGL_ERROR, diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c index dbe6760..d166a4e 100644 --- a/src/libosmo-mgcp/mgcp_protocol.c +++ b/src/libosmo-mgcp/mgcp_protocol.c @@ -1022,7 +1022,7 @@ goto error2; }
- conn = mgcp_conn_get_rtp(endp, _conn->id); + conn = mgcp_endp_get_conn_rtp(endp, _conn->id); OSMO_ASSERT(conn);
if (mgcp_parse_conn_mode(mode, endp, conn->conn) != 0) { @@ -1237,7 +1237,7 @@ return create_err_response(endp, endp, 515, "MDCX", pdata->trans); }
- conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); if (!conn) { rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_CONN_NOT_FOUND)); return create_err_response(endp, endp, 400, "MDCX", pdata->trans); @@ -1475,7 +1475,7 @@ }
/* Find the connection */ - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); if (!conn) { rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_INVALID_CONNID)); goto error3; diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c index b82f3df..042841c 100644 --- a/src/libosmo-mgcp/mgcp_vty.c +++ b/src/libosmo-mgcp/mgcp_vty.c @@ -1418,7 +1418,7 @@ endp = trunk->endpoints[endp_no];
conn_id = argv[2]; - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); if (!conn) { vty_out(vty, "Conn ID %s is invalid.%s", conn_id, VTY_NEWLINE); diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c index 44927e1..c257d6a 100644 --- a/tests/mgcp/mgcp_test.c +++ b/tests/mgcp/mgcp_test.c @@ -965,7 +965,7 @@ endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp);
- conn = mgcp_conn_get_rtp(endp, "1"); + conn = mgcp_endp_get_conn_rtp(endp, "1"); if (conn) { OSMO_ASSERT(conn);
@@ -1209,7 +1209,7 @@ mgcp_conn_alloc(NULL, &endp, MGCP_CONN_TYPE_RTP, "test-connection"); OSMO_ASSERT(_conn); - conn = mgcp_conn_get_rtp(&endp, _conn->id); + conn = mgcp_endp_get_conn_rtp(&endp, _conn->id); OSMO_ASSERT(conn); state = &conn->state; packets_rx = rate_ctr_group_get_ctr(conn->ctrg, RTP_PACKETS_RX_CTR); @@ -1461,7 +1461,7 @@ _conn = mgcp_conn_alloc(NULL, &endp, MGCP_CONN_TYPE_RTP, "test-connection"); OSMO_ASSERT(_conn); - conn = mgcp_conn_get_rtp(&endp, _conn->id); + conn = mgcp_endp_get_conn_rtp(&endp, _conn->id); OSMO_ASSERT(conn);
rtp = &conn->end; @@ -1548,7 +1548,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/1@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 18);
@@ -1564,7 +1564,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/2@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 18);
@@ -1585,7 +1585,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/3@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 0);
@@ -1601,7 +1601,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/4@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 18);
@@ -1617,7 +1617,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/5@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 0);
@@ -1629,7 +1629,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/5@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 3); OSMO_ASSERT(osmo_sockaddr_port(&conn->end.addr.u.sa) == 16434); @@ -1646,7 +1646,7 @@ talloc_free(endp->last_response); talloc_free(endp->last_trans); endp->last_response = endp->last_trans = NULL; - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(!conn);
last_endpoint[0] = '\0'; @@ -1660,7 +1660,7 @@ OSMO_ASSERT(strcmp(last_endpoint,"rtpbridge/5@mgw") == 0); endp = mgcp_endp_by_name(NULL, last_endpoint, cfg); OSMO_ASSERT(endp); - conn = mgcp_conn_get_rtp(endp, conn_id); + conn = mgcp_endp_get_conn_rtp(endp, conn_id); OSMO_ASSERT(conn); OSMO_ASSERT(conn->end.codec->payload_type == 0);
@@ -1689,7 +1689,7 @@ _conn = mgcp_conn_alloc(NULL, endp, MGCP_CONN_TYPE_RTP, "test-connection"); OSMO_ASSERT(_conn); - conn = mgcp_conn_get_rtp(endp, _conn->id); + conn = mgcp_endp_get_conn_rtp(endp, _conn->id); OSMO_ASSERT(conn);
OSMO_ASSERT(conn->state.stats.initialized == 0); @@ -2332,7 +2332,7 @@ for (i = 0; i < ARRAY_SIZE(conn_id_request); i++) { const char *needle = conn_id_request[i]; printf("needle='%s' ", needle); - conn_match = mgcp_conn_get(&endp, needle); + conn_match = mgcp_endp_get_conn(&endp, needle); OSMO_ASSERT(conn_match); printf("found '%s'\n", conn_match->id); OSMO_ASSERT(conn_match == conn);