diff options
Diffstat (limited to 'src/cnetz/transaction.h')
-rw-r--r-- | src/cnetz/transaction.h | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/cnetz/transaction.h b/src/cnetz/transaction.h index ad77037..4a5d70b 100644 --- a/src/cnetz/transaction.h +++ b/src/cnetz/transaction.h @@ -29,11 +29,12 @@ #define TRANS_AF (1 << 20) /* release connection by base station (SpK) */ #define TRANS_AT (1 << 21) /* release connection by mobile station */ #define TRANS_ATQ (1 << 22) /* acknowledge release of MO call in queue */ +#define TRANS_ATQ_IDLE (1 << 23) /* repeat, if call has been released already (mobile sends again) */ /* queue */ -#define TRANS_MO_QUEUE (1 << 23) /* MO queue */ -#define TRANS_MT_QUEUE (1 << 24) /* MT queue */ -#define TRANS_MO_DELAY (1 << 25) /* delay to be sure the channel is free again */ -#define TRANS_MT_DELAY (1 << 26) +#define TRANS_MO_QUEUE (1 << 24) /* MO queue */ +#define TRANS_MT_QUEUE (1 << 25) /* MT queue */ +#define TRANS_MO_DELAY (1 << 26) /* delay to be sure the channel is free again */ +#define TRANS_MT_DELAY (1 << 27) typedef struct transaction { struct transaction *next; /* pointer to next node in list */ @@ -49,23 +50,29 @@ typedef struct transaction { int8_t release_cause; /* reason for release, (c-netz coding) */ int try; /* counts resending messages */ int repeat; /* counts repeating messages */ - struct timer timer; /* for varous timeouts */ + struct osmo_timer_list timer; /* for varous timeouts */ int mo_call; /* flags a moile originating call */ int mt_call; /* flags a moile terminating call */ int page_failed; /* failed to get a response from MS */ - double call_start; /* when did the call start? (used for metering) */ + double metering_time; /* time between units (0.0 if no metering set) */ + double meter_start; /* when did the metering start? (0.0 if not yet started) */ + double meter_end; /* when did the metering end? (0.0 if not yet ended) */ + int queue_position; /* to find next transaction in queue */ + double rf_level_db; /* level of first contact, so we can detect correct channel at multiple receptions */ } transaction_t; const char *transaction2rufnummer(transaction_t *trans); -transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, int futelg_bit, int extended); +transaction_t *create_transaction(cnetz_t *cnetz, uint64_t state, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest, int futelg_bit, int extended, double rf_level_db); void destroy_transaction(transaction_t *trans); void link_transaction(transaction_t *trans, cnetz_t *cnetz); void unlink_transaction(transaction_t *trans); transaction_t *search_transaction(cnetz_t *cnetz, uint64_t state_mask); transaction_t *search_transaction_number(cnetz_t *cnetz, uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest); +transaction_t *search_transaction_number_global(uint8_t futln_nat, uint8_t futln_fuvst, uint16_t futln_rest); transaction_t *search_transaction_callref(cnetz_t *cnetz, int callref); +transaction_t *search_transaction_queue(void); void trans_new_state(transaction_t *trans, uint64_t state); void cnetz_flush_other_transactions(cnetz_t *cnetz, transaction_t *trans); -void transaction_timeout(struct timer *timer); +void transaction_timeout(void *data); const char *trans_short_state_name(uint64_t state); |