view 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
line wrap: on
line source

/*
 * Long-running ThemWi daemon processes need to be able to pick up updates
 * to the number database without being restarted.  Whenever they need to
 * consult the number db when handling a new call setup or equivalent,
 * they will call refresh_number_db(), which does a stat on the file,
 * followed by a re-read if the file has changed.
 */

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <syslog.h>
#include "../include/number_db_file.h"

extern char numdb_pathname[];
extern struct stat numdb_file_stat;
extern uint64_t *numdb_owned_numbers;
extern struct short_number_map *numdb_short_numbers;

refresh_number_db()
{
	int rc;
	struct stat st;

	rc = stat(numdb_pathname, &st);
	if (rc < 0) {
		syslog(LOG_CRIT, "unable to stat %s for refresh: %m",
			numdb_pathname);
		return(-1);
	}
	if (st.st_mtime == numdb_file_stat.st_mtime &&
	    st.st_ctime == numdb_file_stat.st_ctime &&
	    st.st_size  == numdb_file_stat.st_size)
		return(0);
	if (numdb_owned_numbers) {
		free(numdb_owned_numbers);
		numdb_owned_numbers = 0;
	}
	if (numdb_short_numbers) {
		free(numdb_short_numbers);
		numdb_short_numbers = 0;
	}
	rc = read_number_db();
	if (rc < 0) {
		syslog(LOG_CRIT, "error reading %s on refresh!",
			numdb_pathname);
		exit(1);
	}
	return(1);
}