From 4cff19f464c76ca32ed92201008ff01b14696b78 Mon Sep 17 00:00:00 2001 From: Thomas Ries Date: Fri, 2 Apr 2004 17:55:41 +0000 Subject: [PATCH] - PID file --- ChangeLog | 1 + doc/siproxd.conf.example | 6 ++++++ src/readconf.c | 1 + src/siproxd.c | 28 ++++++++++++++++++++++++++++ src/siproxd.h | 1 + 5 files changed, 37 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6702f1b..979113f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 0.5.5 ===== + 2-Apr-2004: - PID file 31-Mar-2004: - accessctl.c: text correction in ERROR output 30-Mar-2004: - Again '*' Contact header in unREGISTER - new: tools/extract_sip.pl diff --git a/doc/siproxd.conf.example b/doc/siproxd.conf.example index 5ed9a03..caef73a 100644 --- a/doc/siproxd.conf.example +++ b/doc/siproxd.conf.example @@ -79,6 +79,12 @@ user = nobody # the specified directory path does exist! registration_file = /var/lib/siproxd/siproxd_registrations +###################################################################### +# PID file: +# Where to create the PID file. +# This file holds the PID of the main thread of siproxd. +pid_file = /var/run/siproxd/siproxd.pid + ###################################################################### # global switch to control the RTP proxy behaviour # 0 - RTP proxy disabled diff --git a/src/readconf.c b/src/readconf.c index 9ff5185..b81bce7 100644 --- a/src/readconf.c +++ b/src/readconf.c @@ -169,6 +169,7 @@ static int parse_config (FILE *configfile) { { "outbound_proxy_port", TYP_INT4, &configuration.outbound_proxy_port }, { "registration_file", TYP_STRING ,&configuration.registrationfile }, { "log_calls", TYP_INT4, &configuration.log_calls }, + { "pid_file", TYP_STRING ,&configuration.pid_file }, {0, 0, 0} }; diff --git a/src/siproxd.c b/src/siproxd.c index dde4003..c60f269 100644 --- a/src/siproxd.c +++ b/src/siproxd.c @@ -190,6 +190,23 @@ int main (int argc, char *argv[]) INFO("daemonized, pid=%i", getpid()); } + /* write PID file of main thread */ + if (configuration.pid_file) { + FILE *pidfile; + DEBUGC(DBCLASS_CONFIG,"creating PID file [%s]", configuration.pid_file); + sts=unlink(configuration.pid_file); + if ((sts==0) ||(errno == ENOENT)) { + if ((pidfile=fopen(configuration.pid_file, "w"))) { + fprintf(pidfile,"%i\n",getpid()); + fclose(pidfile); + } else { + WARN("couldn't create new PID file: %s", strerror(errno)); + } + } else { + WARN("couldn't delete old PID file: %s", strerror(errno)); + } + } + /* initialize the RTP proxy */ sts=rtpproxy_init(); if (sts != STS_SUCCESS) { @@ -441,9 +458,20 @@ int main (int argc, char *argv[]) } /* while TRUE */ exit_prg: + /* dump current knwon SIP registrations */ register_shut(); INFO("properly terminating siproxd"); + /* remove PID file */ + if (configuration.pid_file) { + DEBUGC(DBCLASS_CONFIG,"deleting PID file [%s]", configuration.pid_file); + sts=unlink(configuration.pid_file); + if (sts != 0) { + WARN("couldn't delete old PID file: %s", strerror(errno)); + } + } + + /* END */ return 0; } /* main */ diff --git a/src/siproxd.h b/src/siproxd.h index 206b61f..7df7866 100644 --- a/src/siproxd.h +++ b/src/siproxd.h @@ -151,6 +151,7 @@ struct siproxd_config { int outbound_proxy_port; char *registrationfile; int log_calls; + char *pid_file; };