blob: acb2e6c8bd4420dc442c14acda4295648aee6ac0 [file] [log] [blame]
Jonathan Santos03fd8d02011-05-25 13:54:02 -04001#ifndef _TRANSACT_H
2#define _TRANSACT_H
3
4#include <openbsc/gsm_data.h>
5#include <openbsc/gsm_subscriber.h>
Jonathan Santos5a45b152011-08-17 15:33:57 -04006#include <osmocom/core/linuxlist.h>
Jonathan Santos03fd8d02011-05-25 13:54:02 -04007#include <openbsc/gsm_04_11.h>
Jonathan Santos5a45b152011-08-17 15:33:57 -04008#include <openbsc/mncc.h>
Jonathan Santos03fd8d02011-05-25 13:54:02 -04009
10/* One transaction */
11struct gsm_trans {
12 /* Entry in list of all transactions */
13 struct llist_head entry;
14
15 /* The protocol within which we live */
Jonathan Santos5a45b152011-08-17 15:33:57 -040016 uint8_t protocol;
Jonathan Santos03fd8d02011-05-25 13:54:02 -040017
18 /* The current transaction ID */
Jonathan Santos5a45b152011-08-17 15:33:57 -040019 uint8_t transaction_id;
Jonathan Santos03fd8d02011-05-25 13:54:02 -040020
21 /* To whom we belong, unique identifier of remote MM entity */
22 struct gsm_subscriber *subscr;
23
24 /* The associated connection we are using to transmit messages */
25 struct gsm_subscriber_connection *conn;
26
27 /* reference from MNCC or other application */
Jonathan Santos5a45b152011-08-17 15:33:57 -040028 uint32_t callref;
Jonathan Santos03fd8d02011-05-25 13:54:02 -040029
30 /* if traffic channel receive was requested */
31 int tch_recv;
32
33 /* is thats one paging? */
34 struct gsm_network **paging_request;
35
36 union {
37 struct {
38
39 /* current call state */
40 int state;
41
42 /* current timer and message queue */
43 int Tcurrent; /* current CC timer */
44 int T308_second; /* used to send release again */
Jonathan Santos5a45b152011-08-17 15:33:57 -040045 struct osmo_timer_list timer;
Jonathan Santos03fd8d02011-05-25 13:54:02 -040046 struct gsm_mncc msg; /* stores setup/disconnect/release message */
47 } cc;
48 struct {
Jonathan Santos5a45b152011-08-17 15:33:57 -040049 uint8_t link_id; /* RSL Link ID to be used for this trans */
Jonathan Santos03fd8d02011-05-25 13:54:02 -040050 int is_mt; /* is this a MO (0) or MT (1) transfer */
51 enum gsm411_cp_state cp_state;
Jonathan Santos5a45b152011-08-17 15:33:57 -040052 struct osmo_timer_list cp_timer;
Jonathan Santos03fd8d02011-05-25 13:54:02 -040053
54 enum gsm411_rp_state rp_state;
55
56 struct gsm_sms *sms;
57 } sms;
58 };
59};
60
61
62
63struct gsm_trans *trans_find_by_id(struct gsm_subscriber *subscr,
Jonathan Santos5a45b152011-08-17 15:33:57 -040064 uint8_t proto, uint8_t trans_id);
Jonathan Santos03fd8d02011-05-25 13:54:02 -040065struct gsm_trans *trans_find_by_callref(struct gsm_network *net,
Jonathan Santos5a45b152011-08-17 15:33:57 -040066 uint32_t callref);
Jonathan Santos03fd8d02011-05-25 13:54:02 -040067
68struct gsm_trans *trans_alloc(struct gsm_subscriber *subscr,
Jonathan Santos5a45b152011-08-17 15:33:57 -040069 uint8_t protocol, uint8_t trans_id,
70 uint32_t callref);
Jonathan Santos03fd8d02011-05-25 13:54:02 -040071void trans_free(struct gsm_trans *trans);
72
73int trans_assign_trans_id(struct gsm_subscriber *subscr,
Jonathan Santos5a45b152011-08-17 15:33:57 -040074 uint8_t protocol, uint8_t ti_flag);
Jonathan Santos03fd8d02011-05-25 13:54:02 -040075
76#endif