diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-16 16:51:31 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-16 20:45:15 +0800 |
commit | 60a2f4a7e6d9dbcd76eb59ed943a415303247265 (patch) | |
tree | 39ab2fdb04c5a2b7f2dd904133691241b6bf46b5 /openbsc/src/nat | |
parent | 797b9f0af07d8e1ef1dbec67995b69aa07093e5d (diff) |
[nat] Make create_sccp_src_ref return the SCCP Connection.
Right now it was not possible to just find a connection, by returning
the connection that is created we will have direct access to it. It
will be used by the local connection handling.
Diffstat (limited to 'openbsc/src/nat')
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 2 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_sccp.c | 13 |
2 files changed, 8 insertions, 7 deletions
diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index 54dcd3c37..a1192475e 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -644,7 +644,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) case SCCP_MSG_TYPE_CR: if (bsc_nat_filter_sccp_cr(bsc, msg, parsed, &con_type) != 0) goto exit3; - if (create_sccp_src_ref(bsc, parsed) != 0) + if (!create_sccp_src_ref(bsc, parsed)) goto exit2; con = patch_sccp_src_ref_to_msc(msg, parsed, bsc); con->con_type = con_type; diff --git a/openbsc/src/nat/bsc_sccp.c b/openbsc/src/nat/bsc_sccp.c index f609c24d1..d6b0bdb7f 100644 --- a/openbsc/src/nat/bsc_sccp.c +++ b/openbsc/src/nat/bsc_sccp.c @@ -82,7 +82,8 @@ static int assign_src_local_reference(struct sccp_source_reference *ref, struct return -1; } -int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parsed) +struct sccp_connections *create_sccp_src_ref(struct bsc_connection *bsc, + struct bsc_nat_parsed *parsed) { struct sccp_connections *conn; @@ -101,11 +102,11 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse bsc_mgcp_dlcx(conn); llist_del(&conn->list_entry); talloc_free(conn); - return -1; + return NULL; } else { clock_gettime(CLOCK_MONOTONIC, &conn->creation_time); bsc_mgcp_dlcx(conn); - return 0; + return conn; } } @@ -113,7 +114,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse conn = talloc_zero(bsc->nat, struct sccp_connections); if (!conn) { LOGP(DNAT, LOGL_ERROR, "Memory allocation failure.\n"); - return -1; + return NULL; } conn->bsc = bsc; @@ -122,7 +123,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse if (assign_src_local_reference(&conn->patched_ref, bsc->nat) != 0) { LOGP(DNAT, LOGL_ERROR, "Failed to assign a ref.\n"); talloc_free(conn); - return -1; + return NULL; } bsc_mgcp_init(conn); @@ -134,7 +135,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse sccp_src_ref_to_int(&conn->real_ref), sccp_src_ref_to_int(&conn->patched_ref), bsc); - return 0; + return conn; } int update_sccp_src_ref(struct sccp_connections *sccp, struct bsc_nat_parsed *parsed) |