blob: a60cf623f7c973ae88f7f8ad512e6aa3983c7cd4 [file] [log] [blame]
Harald Weltee72cf552016-04-28 07:18:49 +02001#pragma once
2
Harald Weltee687be52016-05-03 18:49:27 +02003#include <stdbool.h>
Harald Weltee72cf552016-04-28 07:18:49 +02004#include <sqlite3.h>
5
6enum stmt_idx {
Max3ce36862017-02-20 11:18:04 +01007 SEL_BY_IMSI = 0,
8 UPD_VLR_BY_ID = 1,
9 UPD_SGSN_BY_ID = 2,
10 AUC_BY_IMSI = 3,
11 AUC_UPD_SQN = 4,
12 UPD_PURGE_CS_BY_IMSI = 5,
13 UPD_PURGE_PS_BY_IMSI = 6,
14 SET_NAM_PS_BY_IMSI = 7,
15 UNSET_NAM_PS_BY_IMSI = 8,
Harald Weltee72cf552016-04-28 07:18:49 +020016 _NUM_STMT
17};
18
19struct db_context {
20 char *fname;
21 sqlite3 *db;
22 sqlite3_stmt *stmt[_NUM_STMT];
23};
24
Max00b37152017-02-20 11:09:27 +010025bool db_remove_reset(sqlite3_stmt *stmt);
26bool db_bind_imsi(sqlite3_stmt *stmt, const char *imsi);
Harald Weltee72cf552016-04-28 07:18:49 +020027void db_close(struct db_context *dbc);
28struct db_context *db_open(void *ctx, const char *fname);
29
30#include <osmocom/crypt/auth.h>
31
32/* obtain the authentication data for a given imsi */
33int db_get_auth_data(struct db_context *dbc, const char *imsi,
34 struct osmo_sub_auth_data *aud2g,
35 struct osmo_sub_auth_data *aud3g,
36 uint64_t *suscr_id);
37
38int db_update_sqn(struct db_context *dbc, uint64_t id,
39 uint64_t new_sqn);
40
41int db_get_auc(struct db_context *dbc, const char *imsi,
Neels Hofmeyrcab2fcd2017-03-15 00:07:43 +010042 unsigned int auc_3g_ind, struct osmo_auth_vector *vec,
43 unsigned int num_vec, const uint8_t *rand_auts,
44 const uint8_t *auts);
Harald Weltee687be52016-05-03 18:49:27 +020045
46#include <osmocom/core/linuxlist.h>
47#include <osmocom/gsm/protocol/gsm_23_003.h>
48
49/* TODO: Get this from somewhere? */
50#define GT_MAX_DIGITS 15
51
52struct hlr_subscriber {
53 struct llist_head list;
54
55 uint64_t id;
56 char imsi[GSM23003_IMSI_MAX_DIGITS+1];
57 char msisdn[GT_MAX_DIGITS+1];
58 /* imeisv? */
59 char vlr_number[GT_MAX_DIGITS+1];
60 char sgsn_number[GT_MAX_DIGITS+1];
61 char sgsn_address[GT_MAX_DIGITS+1];
62 /* ggsn number + address */
63 /* gmlc number */
64 /* smsc number */
65 uint32_t periodic_lu_timer;
66 uint32_t periodic_rau_tau_timer;
67 bool nam_cs;
68 bool nam_ps;
69 uint32_t lmsi;
70 bool ms_purged_cs;
71 bool ms_purged_ps;
72};
73
74int db_subscr_get(struct db_context *dbc, const char *imsi,
75 struct hlr_subscriber *subscr);
Max3ce36862017-02-20 11:18:04 +010076int db_subscr_ps(struct db_context *dbc, const char *imsi, bool enable);
Harald Weltee687be52016-05-03 18:49:27 +020077int db_subscr_lu(struct db_context *dbc,
78 const struct hlr_subscriber *subscr,
79 const char *vlr_or_sgsn_number,
80 bool lu_is_ps);
Harald Welteb18f0e02016-05-05 21:03:03 +020081
82int db_subscr_purge(struct db_context *dbc,
83 const char *imsi, bool is_ps);