aboutsummaryrefslogtreecommitdiffstats
path: root/src/cnetz/transaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cnetz/transaction.c')
-rw-r--r--src/cnetz/transaction.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/cnetz/transaction.c b/src/cnetz/transaction.c
index b37a014..e63a6bf 100644
--- a/src/cnetz/transaction.c
+++ b/src/cnetz/transaction.c
@@ -23,6 +23,8 @@
#include "../common/sample.h"
#include "../common/debug.h"
#include "../common/timer.h"
+#include "../common/call.h"
+#include "../common/cause.h"
#include "cnetz.h"
#include "telegramm.h"
#include "database.h"
@@ -39,14 +41,28 @@ const char *transaction2rufnummer(transaction_t *trans)
/* create transaction */
transaction_t *create_transaction(cnetz_t *cnetz, uint32_t state, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, int extended)
{
- transaction_t *trans;
+ sender_t *sender;
+ transaction_t *trans = NULL;
+ cnetz_t *search_cnetz;
/* search transaction for this subsriber */
- trans = search_transaction_number(cnetz, futln_nat, futln_fuvst, futln_rest);
+ for (sender = sender_head; sender; sender = sender->next) {
+ search_cnetz = (cnetz_t *) sender;
+ /* search transaction for this callref */
+ trans = search_transaction_number(search_cnetz, futln_nat, futln_fuvst, futln_rest);
+ if (trans)
+ break;
+ }
if (trans) {
const char *rufnummer = transaction2rufnummer(trans);
+ int old_callref = trans->callref;
+ cnetz_t *old_cnetz = trans->cnetz;
PDEBUG(DTRANS, DEBUG_NOTICE, "Found alredy pending transaction for subscriber '%s', deleting!\n", rufnummer);
destroy_transaction(trans);
+ if (old_cnetz) /* should be... */
+ cnetz_go_idle(old_cnetz);
+ if (old_callref)
+ call_in_release(old_callref, CAUSE_NORMAL);
}
trans = calloc(1, sizeof(*trans));