/* -------------------------------------------------------------------- */ /* SMS Client, send messages to mobile phones and pagers */ /* */ /* logfile_io.c */ /* */ /* Copyright (C) 1999 Angelo Masci */ /* */ /* This library is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU Library General Public */ /* License as published by the Free Software Foundation; either */ /* version 2 of the License, or (at your option) any later version. */ /* */ /* This library is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ /* Library General Public License for more details. */ /* */ /* You should have received a copy of the GNU Library General Public */ /* License along with this library; if not, write to the Free */ /* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* */ /* You can contact the author at this e-mail address: */ /* */ /* angelo@styx.demon.co.uk */ /* */ /* -------------------------------------------------------------------- */ /* $Id$ -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "logfile_io.h" #include "common/common.h" /* -------------------------------------------------------------------- */ #define INIT_SEND 0 #define CLIENT_SEND 1 #define SERVER_SEND 2 static int flog = -1; static int sender_state = INIT_SEND; static int new_paragraph = 0; /* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ void init_logfile(char *logfile) { flog = open(logfile, O_WRONLY|O_TRUNC|O_CREAT, S_IRWXU|S_IRGRP|S_IROTH); if (flog == -1) { fprintf(stderr, "Error: opening file '%s'\n", logfile); exit(-1); } new_paragraph = 0; } /* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ void log_client_send(void) { if (flog != -1) { if (sender_state != CLIENT_SEND) { /* Just switched */ if ((sender_state != INIT_SEND) && (!new_paragraph)) { write(flog, "\"\n", strlen("\"\n")); } write(flog, "Client --> \"", strlen("Client --> \"")); new_paragraph = 0; } sender_state = CLIENT_SEND; } } /* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ void log_server_send(void) { if (flog != -1) { if (sender_state != SERVER_SEND) { /* Just switched */ if ((sender_state != INIT_SEND) && (!new_paragraph)) { write(flog, "\"\n", strlen("\"\n")); } write(flog, "Server --> \"", strlen("Server --> \"")); new_paragraph = 0; } sender_state = SERVER_SEND; } } /* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ void log_character(char c) { static char buf[16]; if (flog != -1) { if (new_paragraph) { write(flog, " \"", strlen(" \"")); new_paragraph = 0; } if (c == '\n') { write(flog, "\\n\"\n", strlen("\\n\"\n")); /* Ouput data to logfile */ new_paragraph = 1; } else if (c == '\r') { write(flog, "\\r", strlen("\\r")); /* Ouput data to logfile */ } else if ((int)c < 32) { sms_snprintf(buf, 16, "\\0%02X", (int)c); write(flog, buf, strlen(buf)); /* Ouput data to logfile */ } else { write(flog, &c, 1); /* Ouput data to logfile */ } } } /* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */ void close_logfile(void) { if (flog != -1) { close(flog); } }