FreeCalypso > hg > themwi-system-sw
annotate libnumdb/refresh.c @ 124:7e04d28fae8b
sip-in: default use-100rel to no
BulkVS servers act badly when we send a reliable 180 Ringing response
to an incoming call, even though they advertise 100rel support in
the Supported header in the INVITE packet, and we probably won't be
implementing 100rel for outbound because doing per-the-spec PRACK
as a UAC is just too burdensome. Therefore, we need to consider
100rel extension as not-really-supported in themwi-system-sw.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 01 Oct 2022 15:54:50 -0800 |
parents | 2cc790b66359 |
children |
rev | line source |
---|---|
9
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * Long-running ThemWi daemon processes need to be able to pick up updates |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * to the number database without being restarted. Whenever they need to |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * consult the number db when handling a new call setup or equivalent, |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * they will call refresh_number_db(), which does a stat on the file, |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * followed by a re-read if the file has changed. |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 */ |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <sys/types.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <sys/stat.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <stdio.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdint.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdlib.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <syslog.h> |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include "../include/number_db_file.h" |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 extern char numdb_pathname[]; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern struct stat numdb_file_stat; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern uint64_t *numdb_owned_numbers; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 extern struct short_number_map *numdb_short_numbers; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 refresh_number_db() |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 int rc; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 struct stat st; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 rc = stat(numdb_pathname, &st); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 if (rc < 0) { |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 syslog(LOG_CRIT, "unable to stat %s for refresh: %m", |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 numdb_pathname); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 return(-1); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 if (st.st_mtime == numdb_file_stat.st_mtime && |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 st.st_ctime == numdb_file_stat.st_ctime && |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 st.st_size == numdb_file_stat.st_size) |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 return(0); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 if (numdb_owned_numbers) { |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 free(numdb_owned_numbers); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 numdb_owned_numbers = 0; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 if (numdb_short_numbers) { |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 free(numdb_short_numbers); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 numdb_short_numbers = 0; |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 } |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 rc = read_number_db(); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 if (rc < 0) { |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 syslog(LOG_CRIT, "error reading %s on refresh!", |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 numdb_pathname); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 exit(1); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 } |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 return(1); |
2cc790b66359
libnumdb: implement refresh
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 } |