diff options
Diffstat (limited to 'include/osmocom/msc/paging.h')
-rw-r--r-- | include/osmocom/msc/paging.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/include/osmocom/msc/paging.h b/include/osmocom/msc/paging.h new file mode 100644 index 000000000..4de679df7 --- /dev/null +++ b/include/osmocom/msc/paging.h @@ -0,0 +1,46 @@ +#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); |