nat: Add hook for rewriting a setup message

Create a new function, hand the data to this function, take back
a possible modified msgb and invalidate parsed at this point.
This commit is contained in:
Holger Hans Peter Freyther 2010-10-21 12:12:57 +02:00
parent 76424392e0
commit a914daf174
3 changed files with 20 additions and 1 deletions

View File

@ -343,4 +343,6 @@ struct gsm48_hdr *bsc_unpack_dtap(struct bsc_nat_parsed *parsed, struct msgb *ms
int bsc_ussd_init(struct bsc_nat *nat);
int bsc_check_ussd(struct sccp_connections *con, struct bsc_nat_parsed *parsed, struct msgb *msg);
struct msgb *bsc_nat_rewrite_setup(struct bsc_nat *nat, struct msgb *msg, struct bsc_nat_parsed *);
#endif

View File

@ -858,6 +858,15 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
/* hand data to a side channel */
if (bsc_check_ussd(con, parsed, msg) == 1)
con->con_local = 2;
/*
* Optionally rewrite setup message. This can
* replace the msg and the parsed structure becomes
* invalid.
*/
msg = bsc_nat_rewrite_setup(bsc->nat, msg, parsed);
talloc_free(parsed);
parsed = NULL;
}
con_bsc = con->bsc;
@ -913,7 +922,8 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
/* send the non-filtered but maybe modified msg */
queue_for_msc(con_msc, msg);
talloc_free(parsed);
if (parsed)
talloc_free(parsed);
return 0;
exit:

View File

@ -721,3 +721,10 @@ int bsc_write_cb(struct bsc_fd *bfd, struct msgb *msg)
return rc;
}
/**
* Rewrite non global numbers... according to rules based on the IMSI
*/
struct msgb *bsc_nat_rewrite_setup(struct bsc_nat *nat, struct msgb *msg, struct bsc_nat_parsed *pa)
{
return msg;
}