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);
|
void bsc_mgcp_free_endpoints(struct bsc_nat *nat);
|
||||||
int bsc_mgcp_init(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
|
#endif
|
||||||
|
|
|
@ -78,6 +78,23 @@ void bsc_mgcp_free_endpoints(struct bsc_nat *nat)
|
||||||
mgcp_free_endp(&nat->mgcp_cfg->endpoints[i]);
|
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)
|
static int mgcp_do_read(struct bsc_fd *fd)
|
||||||
{
|
{
|
||||||
struct bsc_nat *nat;
|
struct bsc_nat *nat;
|
||||||
|
|
|
@ -335,7 +335,7 @@ static void test_paging(void)
|
||||||
talloc_free(parsed);
|
talloc_free(parsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_mgcp(void)
|
static void test_mgcp_ass_tracking(void)
|
||||||
{
|
{
|
||||||
struct sccp_connections con;
|
struct sccp_connections con;
|
||||||
struct bsc_nat_parsed *parsed;
|
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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct debug_target *stderr_target;
|
struct debug_target *stderr_target;
|
||||||
|
@ -381,7 +421,8 @@ int main(int argc, char **argv)
|
||||||
test_filter();
|
test_filter();
|
||||||
test_contrack();
|
test_contrack();
|
||||||
test_paging();
|
test_paging();
|
||||||
test_mgcp();
|
test_mgcp_ass_tracking();
|
||||||
|
test_mgcp_find();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue