blob: 67e5d0d037f9921635fcba2c22929caf5d58668f [file] [log] [blame]
Vadim Yanitskiy83df3492018-07-31 01:17:25 +07001#pragma once
2
Harald Welte4956ae12018-06-15 22:04:28 +02003#include <stdint.h>
4#include <osmocom/core/linuxlist.h>
Harald Weltebb779392018-06-16 20:21:10 +02005#include <osmocom/gsm/gsup.h>
6#include "gsup_server.h"
7
8struct osmo_gsup_conn;
Harald Welte4956ae12018-06-15 22:04:28 +02009
Harald Weltedab544e2018-07-29 16:14:48 +020010struct hlr_ussd_route {
11 /* g_hlr.routes */
Harald Welte4956ae12018-06-15 22:04:28 +020012 struct llist_head list;
Harald Welte4956ae12018-06-15 22:04:28 +020013 const char *prefix;
Harald Weltedab544e2018-07-29 16:14:48 +020014 bool is_external;
15 union {
16 struct hlr_euse *euse;
17 const struct hlr_iuse *iuse;
18 } u;
Harald Welte4956ae12018-06-15 22:04:28 +020019};
20
21struct hlr_euse {
22 /* list in the per-hlr list of EUSEs */
23 struct llist_head list;
24 struct hlr *hlr;
25 /* name (must match the IPA ID tag) */
26 const char *name;
27 /* human-readable description */
28 const char *description;
Harald Weltebb779392018-06-16 20:21:10 +020029
30 /* GSUP connection to the EUSE, if any */
31 struct osmo_gsup_conn *conn;
Harald Welte4956ae12018-06-15 22:04:28 +020032};
33
Harald Welte4956ae12018-06-15 22:04:28 +020034struct hlr_euse *euse_find(struct hlr *hlr, const char *name);
35struct hlr_euse *euse_alloc(struct hlr *hlr, const char *name);
36void euse_del(struct hlr_euse *euse);
37
Harald Weltedab544e2018-07-29 16:14:48 +020038const struct hlr_iuse *iuse_find(const char *name);
39
40struct hlr_ussd_route *ussd_route_find_prefix(struct hlr *hlr, const char *prefix);
41struct hlr_ussd_route *ussd_route_prefix_alloc_int(struct hlr *hlr, const char *prefix,
42 const struct hlr_iuse *iuse);
43struct hlr_ussd_route *ussd_route_prefix_alloc_ext(struct hlr *hlr, const char *prefix,
44 struct hlr_euse *euse);
45void ussd_route_del(struct hlr_ussd_route *rt);
Harald Weltebb779392018-06-16 20:21:10 +020046
47int rx_proc_ss_req(struct osmo_gsup_conn *conn, const struct osmo_gsup_message *gsup);
48int rx_proc_ss_error(struct osmo_gsup_conn *conn, const struct osmo_gsup_message *gsup);
Harald Weltedab544e2018-07-29 16:14:48 +020049
50struct ss_session;
51struct ss_request;
52
53/* Internal USSD Handler */
54struct hlr_iuse {
55 const char *name;
56 /* call-back to be called for any incoming USSD messages for this IUSE */
57 int (*handle_ussd)(struct osmo_gsup_conn *conn, struct ss_session *ss,
58 const struct osmo_gsup_message *gsup, const struct ss_request *req);
59};