view sip-manual-out/sip_log.c @ 152:7176dc850d7a

sip-in hold/retr error handling: simply send BYE Because we know that the SIP state is CONNECTED at the time of any such error event, we can call initiate_bye() instead of disconnect_sip(), and thereby get rid of struct gsm_mncc_cause which will never be used in this scenario anyway.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 11 Oct 2022 16:11:21 -0800
parents d74b545a3c2a
children
line wrap: on
line source

/*
 * In this module we implement debug logging of SIP Rx & Tx messages.
 */

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

extern struct timeval cur_event_time;

static FILE *logfile;

open_sip_log_file(filename)
	char *filename;
{
	logfile = fopen(filename, "a");
	if (!logfile) {
		perror(filename);
		return(-1);
	}
	return(0);
}

static void
log_common(msg, msglen, sin, dir)
	char *msg, *dir;
	unsigned msglen;
	struct sockaddr_in *sin;
{
	unsigned sec, ms;

	sec = cur_event_time.tv_sec % 86400;
	ms = cur_event_time.tv_usec / 1000;
	fprintf(logfile, "Msg %s %s:%u %u bytes %02u:%02u:%02u.%03u\n", dir,
		inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), msglen,
		sec / 3600, (sec / 60) % 60, sec % 60, ms);
	fwrite(msg, 1, msglen, logfile);
	putc('\n', logfile);
	fflush(logfile);
}

void
log_sip_msg_rx(msg, msglen, sin)
	char *msg;
	unsigned msglen;
	struct sockaddr_in *sin;
{
	if (!logfile)
		return;
	log_common(msg, msglen, sin, "from");
}

void
log_sip_msg_tx(msg, msglen, sin)
	char *msg;
	unsigned msglen;
	struct sockaddr_in *sin;
{
	if (!logfile)
		return;
	log_common(msg, msglen, sin, "to");
}