From a6d75256cdc651bd8bcf738dadd14f196651aea2 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 20 Jul 2010 11:42:31 +0200 Subject: [PATCH] Allocate Transaction ID while allocating Dialogue --- src/csl_dha.c | 2 +- src/dialogue.c | 27 +++++++++++++++------------ src/tcap.h | 1 - src/tcu.c | 1 - 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/csl_dha.c b/src/csl_dha.c index 794e5d4..739e6f5 100644 --- a/src/csl_dha.c +++ b/src/csl_dha.c @@ -170,7 +170,7 @@ int tcap_csl_tc_begin_req(struct tcap_dialogue *td, OBJECT_IDENTIFIER_t *app_ctx tcm->choice.begin.components = tcap_cha_req_components(td); /* Assign local transaction ID */ - trans_id = ntohl(td->trans.tid_local); + trans_id = htonl(td->trans.tid_local); OCTET_STRING_fromBuf(&tcm->choice.begin.otid, (const char *) &trans_id, sizeof(trans_id)); diff --git a/src/dialogue.c b/src/dialogue.c index 4659807..027049a 100644 --- a/src/dialogue.c +++ b/src/dialogue.c @@ -77,6 +77,19 @@ int tcap_dialg_comp_add(struct tcap_dialogue *td, Component_t *comp) ASN_SEQUENCE_ADD(&td->pend_comp->list, comp); } +static uint32_t tcap_trans_id_alloc(void) +{ + uint32_t trans_id; + + trans_id = trans_id_ctr++; + + while (tcap_transaction_by_local_tid(trans_id)) + trans_id = trans_id_ctr++; + + printf("Allocating local Transaction ID 0x%08x\n", trans_id); + return trans_id; +} + struct tcap_dialogue *tcap_dialg_alloc(uint32_t dialogue_id) { struct tcap_dialogue *td = talloc_zero(tall_tcap_dialg_ctx, struct tcap_dialogue); @@ -118,6 +131,7 @@ struct tcap_transaction *tcap_transaction_by_remote_tid(uint32_t tid_remote) { struct tcap_dialogue *td; + printf("transaction_by_remote_tid(cur=0x%08x, request=0x%08x)\n", td->trans.tid_local, tid_remote); llist_for_each_entry(td, &tcap_dialogues, list) { if (td->trans.tid_remote == tid_remote) return &td->trans; @@ -131,6 +145,7 @@ struct tcap_transaction *tcap_transaction_by_local_tid(uint32_t tid_local) struct tcap_dialogue *td; llist_for_each_entry(td, &tcap_dialogues, list) { + printf("transaction_by_local_tid(cur=0x%08x, request=0x%08x)\n", td->trans.tid_local, tid_local); if (td->trans.tid_local == tid_local) return &td->trans; } @@ -138,18 +153,6 @@ struct tcap_transaction *tcap_transaction_by_local_tid(uint32_t tid_local) return NULL; } -uint32_t tcap_trans_id_alloc(void) -{ - uint32_t trans_id; - - trans_id = trans_id_ctr++; - - while (tcap_transaction_by_local_tid(trans_id)) - trans_id = trans_id_ctr++; - - return trans_id; -} - static const struct value_string trans_state_name[] = { { TCAP_TS_INVALID, "TS-Invalid" }, { TCAP_TS_IDLE, "TS-Idle" }, diff --git a/src/tcap.h b/src/tcap.h index ceb5329..01b4219 100644 --- a/src/tcap.h +++ b/src/tcap.h @@ -241,7 +241,6 @@ void tcap_dialg_free(struct tcap_dialogue *td); struct tcap_transaction *tcap_transaction_alloc(void); struct tcap_transaction *tcap_transaction_by_remote_tid(uint32_t tid_remote); struct tcap_transaction *tcap_transaction_by_local_tid(uint32_t tid_local); -uint32_t tcap_trans_id_alloc(void); const char *tcap_trans_state_name(enum tcap_transaction_state ts); const char *tcap_inv_state_name(enum tcap_invocation_state is); void tcap_trans_set_state(struct tcap_transaction *tt, enum tcap_transaction_state st); diff --git a/src/tcu.c b/src/tcu.c index e72a483..f61a356 100644 --- a/src/tcu.c +++ b/src/tcu.c @@ -376,7 +376,6 @@ LIB_EXPORTED int tcap_user_req_comp(enum tcap_primitive prim, struct tcap_compon switch (prim) { case TCAP_PR_TC_INVOKE: td = tcap_dialg_alloc(tcci->dialg_id); - td->trans.tid_local = tcap_trans_id_alloc(); break; default: return -EINVAL;