mgcp_protocol: get rid of policy_cb and change_cb

The two callback functions policy_cb and change_cb are essentially dead
code. They also make the code more difficult to read and understand.
Lets remove them.

Change-Id: I19f67db1c56473f47338b56114f6bbae8981d067
This commit is contained in:
Philipp Maier 2021-08-04 17:42:57 +02:00
parent c824fe4eb0
commit 39889e4389
4 changed files with 17 additions and 110 deletions

View File

@ -62,8 +62,6 @@ struct mgcp_rtp_end;
#define MGCP_POLICY_REJECT 5
#define MGCP_POLICY_DEFER 6
typedef int (*mgcp_change)(struct mgcp_endpoint *endp, int state);
typedef int (*mgcp_policy)(struct mgcp_endpoint *endp, int state, const char *transaction_id);
typedef int (*mgcp_reset)(struct mgcp_trunk *cfg);
typedef int (*mgcp_rqnt)(struct mgcp_endpoint *endp, char tone);
@ -147,8 +145,6 @@ struct mgcp_config {
int force_ptime;
mgcp_change change_cb;
mgcp_policy policy_cb;
mgcp_reset reset_cb;
mgcp_rqnt rqnt_cb;
void *data;

View File

@ -16,6 +16,8 @@ struct mgcp_lco {
int pkt_period_max; /* time in ms */
};
char *mgcp_debug_get_last_endpoint_name(void);
char *get_lco_identifier(const char *options);
int check_local_cx_options(void *ctx, const char *options);

View File

@ -46,6 +46,16 @@
#include <osmocom/mgcp/mgcp_codec.h>
#include <osmocom/mgcp/mgcp_conn.h>
/* Contains the last successfully resolved endpoint name. This variable is used
* for the unit-tests to verify that the endpoint was correctly resolved. */
static char debug_last_endpoint_name[MGCP_ENDPOINT_MAXLEN];
/* Called from unit-tests only */
char *mgcp_debug_get_last_endpoint_name(void)
{
return debug_last_endpoint_name;
}
/* A combination of LOGPENDP and LOGPTRUNK that automatically falls back to
* LOGPTRUNK when the endp parameter is NULL */
#define LOGPEPTR(endp, trunk, cat, level, fmt, args...) \
@ -328,6 +338,8 @@ struct msgb *mgcp_handle_message(struct mgcp_config *cfg, struct msgb *msg)
struct msgb *resp = NULL;
char *data;
debug_last_endpoint_name[0] = '\0';
/* Count all messages, even incorect ones */
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_MSGS_TOTAL));
@ -395,6 +407,7 @@ struct msgb *mgcp_handle_message(struct mgcp_config *cfg, struct msgb *msg)
return create_err_response(NULL, -rq.mgcp_cause, rq.name, pdata.trans);
}
} else {
osmo_strlcpy(debug_last_endpoint_name, rq.endp->name, sizeof(debug_last_endpoint_name));
rq.trunk = rq.endp->trunk;
rq.mgcp_cause = 0;
@ -1050,32 +1063,8 @@ mgcp_header_done:
goto error2;
}
/* policy CB */
if (pdata->cfg->policy_cb) {
int rc;
rc = pdata->cfg->policy_cb(endp, MGCP_ENDP_CRCX, pdata->trans);
switch (rc) {
case MGCP_POLICY_REJECT:
LOGPCONN(_conn, DLMGCP, LOGL_NOTICE,
"CRCX: CRCX rejected by policy\n");
mgcp_endp_release(endp);
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_REJECTED_BY_POLICY));
return create_err_response(endp, 400, "CRCX", pdata->trans);
break;
case MGCP_POLICY_DEFER:
/* stop processing */
return NULL;
break;
case MGCP_POLICY_CONT:
/* just continue */
break;
}
}
LOGPCONN(conn->conn, DLMGCP, LOGL_DEBUG,
"CRCX: Creating connection: port: %u\n", conn->end.local_port);
if (pdata->cfg->change_cb)
pdata->cfg->change_cb(endp, MGCP_ENDP_CRCX);
/* Send dummy packet, see also comments in mgcp_keepalive_timer_cb() */
OSMO_ASSERT(trunk->keepalive_interval >= MGCP_KEEPALIVE_ONCE);
@ -1290,40 +1279,11 @@ mgcp_header_done:
goto error3;
}
/* policy CB */
if (pdata->cfg->policy_cb) {
int rc;
rc = pdata->cfg->policy_cb(endp, MGCP_ENDP_MDCX, pdata->trans);
switch (rc) {
case MGCP_POLICY_REJECT:
LOGPCONN(conn->conn, DLMGCP, LOGL_NOTICE,
"MDCX: rejected by policy\n");
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_REJECTED_BY_POLICY));
if (silent)
goto out_silent;
return create_err_response(endp, 400, "MDCX", pdata->trans);
break;
case MGCP_POLICY_DEFER:
/* stop processing */
LOGPCONN(conn->conn, DLMGCP, LOGL_DEBUG,
"MDCX: deferred by policy\n");
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_DEFERRED_BY_POLICY));
return NULL;
break;
case MGCP_POLICY_CONT:
/* just continue */
break;
}
}
mgcp_rtp_end_config(endp, 1, &conn->end);
/* modify */
LOGPCONN(conn->conn, DLMGCP, LOGL_DEBUG,
"MDCX: modified conn:%s\n", mgcp_conn_dump(conn->conn));
if (pdata->cfg->change_cb)
pdata->cfg->change_cb(endp, MGCP_ENDP_MDCX);
/* Send dummy packet, see also comments in mgcp_keepalive_timer_cb() */
OSMO_ASSERT(trunk->keepalive_interval >= MGCP_KEEPALIVE_ONCE);
@ -1431,29 +1391,6 @@ static struct msgb *handle_delete_con(struct mgcp_request_data *rq)
}
}
/* policy CB */
if (pdata->cfg->policy_cb) {
int rc;
rc = pdata->cfg->policy_cb(endp, MGCP_ENDP_DLCX, pdata->trans);
switch (rc) {
case MGCP_POLICY_REJECT:
LOGPENDP(endp, DLMGCP, LOGL_NOTICE, "DLCX: rejected by policy\n");
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_REJECTED_BY_POLICY));
if (silent)
goto out_silent;
return create_err_response(endp, 400, "DLCX", pdata->trans);
break;
case MGCP_POLICY_DEFER:
/* stop processing */
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_DEFERRED_BY_POLICY));
return NULL;
break;
case MGCP_POLICY_CONT:
/* just continue */
break;
}
}
/* Handle wildcarded DLCX that refers to the whole trunk. This means
* that we walk over all endpoints on the trunk in order to drop all
* connections on the trunk. (see also RFC3435 Annex F.7) */
@ -1515,9 +1452,6 @@ static struct msgb *handle_delete_con(struct mgcp_request_data *rq)
LOGPENDP(endp, DLMGCP, LOGL_DEBUG, "DLCX: endpoint released\n");
}
if (pdata->cfg->change_cb)
pdata->cfg->change_cb(endp, MGCP_ENDP_DLCX);
rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS));
if (silent)
goto out_silent;

View File

@ -614,28 +614,6 @@ static struct msgb *create_msg(const char *str, const char *conn_id)
return msg;
}
static char last_endpoint[MGCP_ENDPOINT_MAXLEN];
static int mgcp_test_policy_cb(struct mgcp_endpoint *endp,
int state, const char *transaction_id)
{
unsigned int i;
struct mgcp_trunk *trunk;
fprintf(stderr, "Policy CB got state %d on endpoint %s\n",
state, endp->name);
trunk = endp->trunk;
last_endpoint[0] = '\0';
for (i = 0; i < trunk->number_endpoints; i++) {
if (strcmp(endp->name, trunk->endpoints[i]->name) == 0)
osmo_strlcpy(last_endpoint, trunk->endpoints[i]->name,
sizeof(last_endpoint));
}
return MGCP_POLICY_CONT;
}
static int dummy_packets = 0;
/* override and forward */
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
@ -792,13 +770,13 @@ static void test_messages(void)
struct mgcp_conn_rtp *conn = NULL;
char last_conn_id[256];
int rc;
char *last_endpoint = mgcp_debug_get_last_endpoint_name();
cfg = mgcp_config_alloc();
trunk = mgcp_trunk_by_num(cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);
trunk->v.vty_number_endpoints = 64;
mgcp_trunk_equip(trunk);
cfg->policy_cb = mgcp_test_policy_cb;
memset(last_conn_id, 0, sizeof(last_conn_id));
@ -810,7 +788,6 @@ static void test_messages(void)
printf("\n================================================\n");
printf("Testing %s\n", t->name);
last_endpoint[0] = '\0';
dummy_packets = 0;
osmo_talloc_replace_string(cfg, &trunk->audio_fmtp_extra,
@ -1411,6 +1388,7 @@ static void test_multilple_codec(void)
struct in_addr addr;
struct mgcp_conn_rtp *conn = NULL;
char conn_id[256];
char *last_endpoint = mgcp_debug_get_last_endpoint_name();
printf("Testing multiple payload types\n");
@ -1418,7 +1396,6 @@ static void test_multilple_codec(void)
trunk = mgcp_trunk_by_num(cfg, MGCP_TRUNK_VIRTUAL, MGCP_VIRT_TRUNK_ID);
trunk->v.vty_number_endpoints = 64;
mgcp_trunk_equip(trunk);
cfg->policy_cb = mgcp_test_policy_cb;
/* Allocate endpoint 1@mgw with two codecs */
last_endpoint[0] = '\0';
@ -1620,8 +1597,6 @@ static void test_no_name(void)
trunk->audio_send_name = 0;
mgcp_trunk_equip(trunk);
cfg->policy_cb = mgcp_test_policy_cb;
inp = create_msg(CRCX, NULL);
msg = mgcp_handle_message(cfg, inp);