nat: Add code to find a BSC connection by the given msc multiplex
This commit is contained in:
parent
03ca97e458
commit
fc9bd23000
|
@ -183,4 +183,6 @@ void bsc_mgcp_clear(struct sccp_connections *);
|
|||
void bsc_mgcp_free_endpoints(struct bsc_nat *nat);
|
||||
int bsc_mgcp_init(struct bsc_nat *nat);
|
||||
|
||||
struct bsc_connection *bsc_mgcp_find_con(struct bsc_nat *, int endpoint_number);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -78,6 +78,23 @@ void bsc_mgcp_free_endpoints(struct bsc_nat *nat)
|
|||
mgcp_free_endp(&nat->mgcp_cfg->endpoints[i]);
|
||||
}
|
||||
|
||||
struct bsc_connection *bsc_mgcp_find_con(struct bsc_nat *nat, int endpoint)
|
||||
{
|
||||
struct sccp_connections *sccp;
|
||||
|
||||
llist_for_each_entry(sccp, &nat->sccp_connections, list_entry) {
|
||||
if (sccp->msc_timeslot == -1)
|
||||
continue;
|
||||
if (mgcp_timeslot_to_endpoint(0, sccp->msc_timeslot) != endpoint)
|
||||
continue;
|
||||
|
||||
return sccp->bsc;
|
||||
}
|
||||
|
||||
LOGP(DMGCP, LOGL_ERROR, "Failed to find the connection.\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int mgcp_do_read(struct bsc_fd *fd)
|
||||
{
|
||||
struct bsc_nat *nat;
|
||||
|
|
|
@ -335,7 +335,7 @@ static void test_paging(void)
|
|||
talloc_free(parsed);
|
||||
}
|
||||
|
||||
static void test_mgcp(void)
|
||||
static void test_mgcp_ass_tracking(void)
|
||||
{
|
||||
struct sccp_connections con;
|
||||
struct bsc_nat_parsed *parsed;
|
||||
|
@ -370,6 +370,46 @@ static void test_mgcp(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* test the code to find a given connection */
|
||||
static void test_mgcp_find(void)
|
||||
{
|
||||
struct bsc_nat *nat;
|
||||
struct bsc_connection *con;
|
||||
struct sccp_connections *sccp_con;
|
||||
|
||||
fprintf(stderr, "Testing finding of a BSC Connection\n");
|
||||
|
||||
nat = bsc_nat_alloc();
|
||||
con = bsc_connection_alloc(nat);
|
||||
llist_add(&con->list_entry, &nat->bsc_connections);
|
||||
|
||||
sccp_con = talloc_zero(con, struct sccp_connections);
|
||||
sccp_con->msc_timeslot = 12;
|
||||
sccp_con->bsc_timeslot = 12;
|
||||
sccp_con->bsc = con;
|
||||
llist_add(&sccp_con->list_entry, &nat->sccp_connections);
|
||||
|
||||
if (bsc_mgcp_find_con(nat, 11) != NULL) {
|
||||
fprintf(stderr, "Found the wrong connection.\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (bsc_mgcp_find_con(nat, 12) != con) {
|
||||
fprintf(stderr, "Didn't find the connection\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
sccp_con->msc_timeslot = 0;
|
||||
sccp_con->bsc_timeslot = 0;
|
||||
if (bsc_mgcp_find_con(nat, 1) != con) {
|
||||
fprintf(stderr, "Didn't find the connection\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
/* free everything */
|
||||
talloc_free(nat);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct debug_target *stderr_target;
|
||||
|
@ -381,7 +421,8 @@ int main(int argc, char **argv)
|
|||
test_filter();
|
||||
test_contrack();
|
||||
test_paging();
|
||||
test_mgcp();
|
||||
test_mgcp_ass_tracking();
|
||||
test_mgcp_find();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue