nat: Add code to find a BSC connection by the given msc multiplex

This commit is contained in:
Holger Hans Peter Freyther 2010-04-01 03:55:27 +02:00
parent 03ca97e458
commit fc9bd23000
3 changed files with 62 additions and 2 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;
}