FreeCalypso > hg > themwi-system-sw
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"); }