47 lines
1.5 KiB
C
47 lines
1.5 KiB
C
#pragma once
|
|
|
|
#include <osmocom/core/linuxlist.h>
|
|
|
|
struct msc_a;
|
|
struct vlr_subscr;
|
|
struct gsm_trans;
|
|
|
|
/* Modeled after the RANAP PagingCause; translates to enum sgsap_service_ind and BSSMAP Channel Needed (3GPP TS 48.008
|
|
* 3.2.2.36) by collapsing e.g. all call related paging causes to SGSAP_SERV_IND_CS_CALL, etc. */
|
|
enum paging_cause {
|
|
PAGING_CAUSE_CALL_CONVERSATIONAL = 0,
|
|
PAGING_CAUSE_CALL_STREAMING,
|
|
PAGING_CAUSE_CALL_INTERACTIVE,
|
|
PAGING_CAUSE_CALL_BACKGROUND,
|
|
PAGING_CAUSE_SIGNALLING_LOW_PRIO,
|
|
PAGING_CAUSE_SIGNALLING_HIGH_PRIO,
|
|
PAGING_CAUSE_UNSPECIFIED,
|
|
};
|
|
|
|
extern const struct value_string paging_cause_names[];
|
|
static inline const char *paging_cause_name(enum paging_cause val)
|
|
{ return get_value_string(paging_cause_names, val); }
|
|
|
|
/* A successful Paging will pass a valid msc_a, an expired paging will pass msc_a == NULL. */
|
|
typedef void (* paging_cb_t )(struct msc_a *msc_a, struct gsm_trans *trans);
|
|
|
|
struct paging_request {
|
|
struct llist_head entry;
|
|
|
|
/* human readable label to be able to log pending request kinds */
|
|
const char *label;
|
|
enum paging_cause cause;
|
|
|
|
/* the callback data */
|
|
paging_cb_t paging_cb;
|
|
struct gsm_trans *trans;
|
|
};
|
|
|
|
struct paging_request *paging_request_start(struct vlr_subscr *vsub, enum paging_cause cause,
|
|
paging_cb_t paging_cb, struct gsm_trans *trans,
|
|
const char *label);
|
|
void paging_request_remove(struct paging_request *pr);
|
|
|
|
void paging_response(struct msc_a *msc_a);
|
|
void paging_expired(struct vlr_subscr *vsub);
|