Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/histolog.c @ 113:8ac67e951eab
[/trunk] Changeset 127 by mikael
* Add a "hooks" layer.
Hooks are used when multiples operations should be done when an event
araises. For example message in/out, status change...
2 more files; Makefile updated.
* Logging is ready.
* Add 2 options:
- "logging" (bool): enable/disable history logging
- "logging_dir" (char): root dir for logging files
* Document pinginterval (keepalive) in the sample config file.
* Send keepalive only when online.
author | mikael |
---|---|
date | Sun, 24 Apr 2005 20:24:18 +0000 |
parents | d896962c16fa |
children | 1e8f646e2c5b |
comparison
equal
deleted
inserted
replaced
112:edb5591e2e64 | 113:8ac67e951eab |
---|---|
20 */ | 20 */ |
21 | 21 |
22 #include <string.h> | 22 #include <string.h> |
23 #include <stdlib.h> | 23 #include <stdlib.h> |
24 #include <time.h> | 24 #include <time.h> |
25 #include <ctype.h> | |
26 #include <sys/types.h> | |
27 #include <sys/stat.h> | |
28 #include <fcntl.h> | |
25 | 29 |
26 #include "histolog.h" | 30 #include "histolog.h" |
31 #include "jabglue.h" | |
27 #include "screen.h" | 32 #include "screen.h" |
28 | 33 |
29 static guint UseFileLogging; | 34 static guint UseFileLogging; |
30 static char *RootDir; | 35 static char *RootDir; |
31 | 36 |
45 return filename; | 50 return filename; |
46 } | 51 } |
47 | 52 |
48 // write() | 53 // write() |
49 // Adds a history (multi-)line to the jid's history logfile | 54 // Adds a history (multi-)line to the jid's history logfile |
50 static void write(const char *jid, | 55 static void write_histo_line(const char *jid, |
51 time_t timestamp, guchar type, guchar info, char *data) | 56 time_t timestamp, guchar type, guchar info, const char *data) |
52 { | 57 { |
53 guint len = 0; | 58 guint len = 0; |
59 FILE *fp; | |
54 time_t ts; | 60 time_t ts; |
55 char *p; | 61 const char *p; |
56 char *filename = user_histo_file(jid); | 62 char *filename = user_histo_file(jid); |
57 | 63 |
58 if (!filename) | 64 if (!filename) |
59 return; | 65 return; |
60 | 66 |
78 * - M message Info: S (send) R (receive) | 84 * - M message Info: S (send) R (receive) |
79 * - S status Info: [oaifdcn] | 85 * - S status Info: [oaifdcn] |
80 * We don't check them, we'll trust the caller. | 86 * We don't check them, we'll trust the caller. |
81 */ | 87 */ |
82 | 88 |
83 scr_LogPrint("Log to [%s]:", filename); | 89 fp = fopen(filename, "a"); |
84 scr_LogPrint("%c %c %10d %03d %s", type, info, ts, len, data); | 90 if (!fp) |
91 return; | |
92 fprintf(fp, "%c %c %10u %03d %s\n", type, info, (unsigned int)ts, len, data); | |
93 fclose(fp); | |
85 } | 94 } |
86 | 95 |
87 // hlog_enable() | 96 // hlog_enable() |
88 // Enable logging to files. If root_dir is NULL, then $HOME/.mcabber is used. | 97 // Enable logging to files. If root_dir is NULL, then $HOME/.mcabber is used. |
89 void hlog_enable(guint enable, char *root_dir) | 98 void hlog_enable(guint enable, char *root_dir) |
119 if (RootDir) { | 128 if (RootDir) { |
120 g_free(RootDir); | 129 g_free(RootDir); |
121 } | 130 } |
122 } | 131 } |
123 | 132 |
133 inline void hlog_write_message(const char *jid, time_t timestamp, int sent, | |
134 const char *msg) | |
135 { | |
136 write_histo_line(jid, timestamp, 'M', ((sent) ? 'S' : 'R'), msg); | |
137 } | |
138 | |
139 inline void hlog_write_status(const char *jid, time_t timestamp, | |
140 enum imstatus status) | |
141 { | |
142 // #1 XXX Check status value? | |
143 // #2 We could add a user-readable comment | |
144 write_histo_line(jid, timestamp, 'S', toupper(imstatus2char[status]), | |
145 NULL); | |
146 } | |
147 |