trunk: parse E1 trunk number
The E1 trunk number is currently not parsed, whenever a trunk prefix is
detected that indicates an E1 trunk, then the entire request is
rejected.
Parse the trunk number and select the trunk accordingly
Related: OS#2547
Change-Id: Ifdaab953544151e73b58cc3e95d21afdb40765f4
diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c
index 56a17b1..b0647f4 100644
--- a/tests/mgcp/mgcp_test.c
+++ b/tests/mgcp/mgcp_test.c
@@ -2130,6 +2130,48 @@
talloc_free(conn);
}
+void test_e1_trunk_nr_from_epname()
+{
+ int trunk_nr;
+
+ /* Note: e1_trunk_nr_from_epname does not check the text
+ * after the E1 trunk number, after the delimiter
+ * character "/" arbitrary text may follow. */
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-1/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == 1);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-2/s-2/su16-0");
+ OSMO_ASSERT(trunk_nr == 2);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-3/s-23/su32-0");
+ OSMO_ASSERT(trunk_nr == 3);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-3/xxxxxxx");
+ OSMO_ASSERT(trunk_nr == 3);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-24/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == 24);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-64/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == 64);
+
+ /* The following endpoint strings should fail, either the
+ * trunk number exceeds the valid range or the trunk prefix
+ * is wrong. Also when the delimiter character "/" at the
+ * end of the trunk is wrong the parsing should fail. */
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-0/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-65/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1--1/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("xxxxxx4zyz");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1+2/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e2-24/s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+ trunk_nr = e1_trunk_nr_from_epname("ds/e1-24s-1/su16-0");
+ OSMO_ASSERT(trunk_nr == -EINVAL);
+
+ return;
+}
+
int main(int argc, char **argv)
{
void *ctx = talloc_named_const(NULL, 0, "mgcp_test");
@@ -2155,6 +2197,7 @@
test_check_local_cx_options(ctx);
test_mgcp_codec_pt_translate();
test_conn_id_matching();
+ test_e1_trunk_nr_from_epname();
OSMO_ASSERT(talloc_total_size(msgb_ctx) == 0);
OSMO_ASSERT(talloc_total_blocks(msgb_ctx) == 1);