blob: d1b9fe0573e6e95f73d2bc6b07169ad393314d76 [file] [log] [blame]
Harald Welte4956ae12018-06-15 22:04:28 +02001#include <stdint.h>
2#include <osmocom/core/linuxlist.h>
Harald Weltebb779392018-06-16 20:21:10 +02003#include <osmocom/gsm/gsup.h>
4#include "gsup_server.h"
5
6struct osmo_gsup_conn;
Harald Welte4956ae12018-06-15 22:04:28 +02007
Harald Weltedab544e2018-07-29 16:14:48 +02008struct hlr_ussd_route {
9 /* g_hlr.routes */
Harald Welte4956ae12018-06-15 22:04:28 +020010 struct llist_head list;
Harald Welte4956ae12018-06-15 22:04:28 +020011 const char *prefix;
Harald Weltedab544e2018-07-29 16:14:48 +020012 bool is_external;
13 union {
14 struct hlr_euse *euse;
15 const struct hlr_iuse *iuse;
16 } u;
Harald Welte4956ae12018-06-15 22:04:28 +020017};
18
19struct hlr_euse {
20 /* list in the per-hlr list of EUSEs */
21 struct llist_head list;
22 struct hlr *hlr;
23 /* name (must match the IPA ID tag) */
24 const char *name;
25 /* human-readable description */
26 const char *description;
Harald Weltebb779392018-06-16 20:21:10 +020027
28 /* GSUP connection to the EUSE, if any */
29 struct osmo_gsup_conn *conn;
Harald Welte4956ae12018-06-15 22:04:28 +020030};
31
Harald Welte4956ae12018-06-15 22:04:28 +020032struct hlr_euse *euse_find(struct hlr *hlr, const char *name);
33struct hlr_euse *euse_alloc(struct hlr *hlr, const char *name);
34void euse_del(struct hlr_euse *euse);
35
Harald Weltedab544e2018-07-29 16:14:48 +020036const struct hlr_iuse *iuse_find(const char *name);
37
38struct hlr_ussd_route *ussd_route_find_prefix(struct hlr *hlr, const char *prefix);
39struct hlr_ussd_route *ussd_route_prefix_alloc_int(struct hlr *hlr, const char *prefix,
40 const struct hlr_iuse *iuse);
41struct hlr_ussd_route *ussd_route_prefix_alloc_ext(struct hlr *hlr, const char *prefix,
42 struct hlr_euse *euse);
43void ussd_route_del(struct hlr_ussd_route *rt);
Harald Weltebb779392018-06-16 20:21:10 +020044
45int rx_proc_ss_req(struct osmo_gsup_conn *conn, const struct osmo_gsup_message *gsup);
46int rx_proc_ss_error(struct osmo_gsup_conn *conn, const struct osmo_gsup_message *gsup);
Harald Weltedab544e2018-07-29 16:14:48 +020047
48struct ss_session;
49struct ss_request;
50
51/* Internal USSD Handler */
52struct hlr_iuse {
53 const char *name;
54 /* call-back to be called for any incoming USSD messages for this IUSE */
55 int (*handle_ussd)(struct osmo_gsup_conn *conn, struct ss_session *ss,
56 const struct osmo_gsup_message *gsup, const struct ss_request *req);
57};