blob: f848ac850be8c3b6c703b21fab683a1fc3bbb0ba [file] [log] [blame]
Harald Welte52b1f982008-12-23 20:25:15 +00001#ifndef _GSM_SUBSCR_H
2#define _GSM_SUBSCR_H
3
Neels Hofmeyrab04fb22016-05-30 22:32:51 +02004#include <stdbool.h>
5
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +01006#include <osmocom/core/linuxlist.h>
Harald Welted3fa84d2016-04-20 17:50:17 +02007#include <osmocom/gsm/protocol/gsm_23_003.h>
Harald Welte0df904d2018-12-03 11:00:04 +01008#include <osmocom/gsm/protocol/gsm_29_118.h>
Harald Welte52b1f982008-12-23 20:25:15 +00009
Neels Hofmeyr90843962017-09-04 15:04:35 +020010#include <osmocom/msc/gsm_data.h>
Maxe6052c42016-06-30 10:25:49 +020011
Neels Hofmeyra8945ce2018-11-30 00:44:32 +010012struct ran_conn;
Neels Hofmeyr1263bc82018-11-30 03:32:20 +010013struct msgb;
14
15typedef int gsm_cbfn(unsigned int hooknum, unsigned int event, struct msgb *msg,
16 void *data, void *param);
Neels Hofmeyra8945ce2018-11-30 00:44:32 +010017
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020018/*
19 * Struct for pending channel requests. This is managed in the
20 * llist_head requests of each subscriber. The reference counting
21 * should work in such a way that a subscriber with a pending request
22 * remains in memory.
23 */
24struct subscr_request {
25 struct llist_head entry;
26
Neels Hofmeyr84da6b12016-05-20 21:59:55 +020027 /* human readable label to be able to log pending request kinds */
28 const char *label;
29
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020030 /* the callback data */
31 gsm_cbfn *cbfn;
32 void *param;
33};
34
Holger Hans Peter Freytherd6d7aff2015-04-06 12:03:45 +020035/*
36 * Paging handling with authentication
37 */
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020038struct subscr_request *subscr_request_conn(struct vlr_subscr *vsub,
Neels Hofmeyr84da6b12016-05-20 21:59:55 +020039 gsm_cbfn *cbfn, void *param,
Harald Welte0df904d2018-12-03 11:00:04 +010040 const char *label,
41 enum sgsap_service_ind serv_ind);
Holger Hans Peter Freytherd6d7aff2015-04-06 12:03:45 +020042void subscr_remove_request(struct subscr_request *req);
43
Neels Hofmeyrfacd57a2017-12-15 03:48:48 +010044void subscr_paging_cancel(struct vlr_subscr *vsub, enum gsm_paging_event event);
Harald Welte2483f1b2016-06-19 18:06:02 +020045int subscr_paging_dispatch(unsigned int hooknum, unsigned int event,
46 struct msgb *msg, void *data, void *param);
Holger Freyther12aa50d2009-01-01 18:02:05 +000047
Harald Welted35038d2018-01-25 00:07:33 +010048/* Find an allocated channel for a specified subscriber */
Neels Hofmeyrc036b792018-11-29 22:37:51 +010049struct ran_conn *connection_for_subscr(struct vlr_subscr *vsub);
Harald Welted35038d2018-01-25 00:07:33 +010050
Harald Welte52b1f982008-12-23 20:25:15 +000051#endif /* _GSM_SUBSCR_H */