osmo-msc/include/osmocom/msc/paging.h

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);