nat: Close all endpoints used by a BSC when the BSC is gone
Cleanup all endpoints that belonged to a given BSC. This is one part of the cleanup, the other is to bring down the SCCP link properly.
This commit is contained in:
parent
5cc94fb86a
commit
26a43896cd
|
@ -205,6 +205,7 @@ struct bsc_connection *bsc_mgcp_find_con(struct bsc_nat *, int endpoint_number);
|
|||
struct msgb *bsc_mgcp_rewrite(char *input, int length, const char *ip, int port);
|
||||
void bsc_mgcp_forward(struct bsc_connection *bsc, struct msgb *msg);
|
||||
|
||||
void bsc_mgcp_clear_endpoints_for(struct bsc_connection *bsc);
|
||||
int bsc_mgcp_parse_response(const char *str, int *code, char transaction[60]);
|
||||
int bsc_mgcp_extract_ci(const char *resp);
|
||||
int bsc_mgcp_extract_port(const char *resp);
|
||||
|
|
|
@ -466,3 +466,21 @@ int bsc_mgcp_init(struct bsc_nat *nat)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bsc_mgcp_clear_endpoints_for(struct bsc_connection *bsc)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < bsc->nat->mgcp_cfg->number_endpoints; ++i) {
|
||||
struct bsc_endpoint *bsc_endp = &bsc->nat->bsc_endpoints[i];
|
||||
|
||||
if (bsc_endp->bsc != bsc)
|
||||
continue;
|
||||
|
||||
bsc_endp->bsc = NULL;
|
||||
bsc_endp->pending_delete = 0;
|
||||
if (bsc_endp->transaction_id)
|
||||
talloc_free(bsc_endp->transaction_id);
|
||||
bsc_endp->transaction_id = NULL;
|
||||
mgcp_free_endp(&bsc->nat->mgcp_cfg->endpoints[i]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -354,6 +354,9 @@ static void remove_bsc_connection(struct bsc_connection *connection)
|
|||
sccp_connection_destroy(sccp_patch);
|
||||
}
|
||||
|
||||
/* close endpoints allocated by this BSC */
|
||||
bsc_mgcp_clear_endpoints_for(connection);
|
||||
|
||||
talloc_free(connection);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue