view sip-in/sip_log.c @ 217:9f6a148ceb25

tcpserv-dump: brown paper bag
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 24 Jul 2023 22:33:01 -0800
parents 47976db01894
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");
}