#include "gwlib/gwlib.h"#include "msg.h"#include "sms.h"#include "bearerbox.h"#include "smscconn.h"Include dependency graph for bb_alog.c:

Go to the source code of this file.
Functions | |
| Octstr * | get_pattern (SMSCConn *conn, Msg *msg, const char *message) |
| void | bb_alog_init (const Octstr *format) |
| void | bb_alog_shutdown (void) |
| void | bb_alog_sms (SMSCConn *conn, Msg *msg, const char *message) |
Variables | |
| Octstr * | custom_log_format = NULL |
|
|
Definition at line 327 of file bb_alog.c. References custom_log_format, gw_assert, and octstr_duplicate. Referenced by init_bearerbox(). 00328 {
00329 gw_assert(format != NULL);
00330
00331 custom_log_format = octstr_duplicate(format);
00332 }
|
|
|
Definition at line 335 of file bb_alog.c. References custom_log_format, and octstr_destroy(). Referenced by main(). 00336 {
00337 octstr_destroy(custom_log_format);
00338 custom_log_format = NULL;
00339 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 342 of file bb_alog.c. References alog(), custom_log_format, DC_8BIT, get_pattern(), gw_assert, message, msg_type, octstr_binary_to_hex(), octstr_convert_printable(), octstr_create, octstr_destroy(), octstr_duplicate, octstr_get_cstr, octstr_imm(), octstr_len(), sms, SMSCConn, smscconn_id(), smscconn_name(), and text. Referenced by bb_smscconn_receive(), bb_smscconn_send_failed(), bb_smscconn_sent(), and handle_pdu(). 00343 {
00344 Octstr *text = NULL;
00345
00346 gw_assert(msg_type(msg) == sms);
00347
00348 /* if we don't have any custom log, then use our "default" one */
00349
00350 if (custom_log_format == NULL) {
00351 Octstr *udh;
00352 const Octstr *cid;
00353
00354 text = msg->sms.msgdata ? octstr_duplicate(msg->sms.msgdata) : octstr_create("");
00355 udh = msg->sms.udhdata ? octstr_duplicate(msg->sms.udhdata) : octstr_create("");
00356
00357 if (conn && smscconn_id(conn))
00358 cid = smscconn_id(conn);
00359 else if (conn && smscconn_name(conn))
00360 cid = smscconn_name(conn);
00361 else if (msg->sms.smsc_id)
00362 cid = msg->sms.smsc_id;
00363 else
00364 cid = octstr_imm("");
00365
00366 if ((msg->sms.coding == DC_8BIT || msg->sms.coding == DC_UCS2))
00367 octstr_binary_to_hex(text, 1);
00368 else
00369 octstr_convert_printable(text);
00370 octstr_binary_to_hex(udh, 1);
00371
00372 alog("%s [SMSC:%s] [SVC:%s] [ACT:%s] [BINF:%s] [from:%s] [to:%s] [flags:%ld:%ld:%ld:%ld:%ld] "
00373 "[msg:%ld:%s] [udh:%ld:%s]",
00374 message,
00375 octstr_get_cstr(cid),
00376 msg->sms.service ? octstr_get_cstr(msg->sms.service) : "",
00377 msg->sms.account ? octstr_get_cstr(msg->sms.account) : "",
00378 msg->sms.binfo ? octstr_get_cstr(msg->sms.binfo) : "",
00379 msg->sms.sender ? octstr_get_cstr(msg->sms.sender) : "",
00380 msg->sms.receiver ? octstr_get_cstr(msg->sms.receiver) : "",
00381 msg->sms.mclass, msg->sms.coding, msg->sms.mwi, msg->sms.compress,
00382 msg->sms.dlr_mask,
00383 octstr_len(msg->sms.msgdata), octstr_get_cstr(text),
00384 octstr_len(msg->sms.udhdata), octstr_get_cstr(udh)
00385 );
00386
00387 octstr_destroy(udh);
00388 } else {
00389 text = get_pattern(conn, msg, message);
00390 alog("%s", octstr_get_cstr(text));
00391 }
00392
00393 octstr_destroy(text);
00394 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 112 of file bb_alog.c. References custom_log_format, DC_8BIT, gw_assert, gw_gmtime(), gwlist_create, gwlist_destroy(), gwlist_get(), gwlist_len(), message, octstr_append(), octstr_append_char(), octstr_append_cstr(), octstr_append_data(), octstr_append_decimal(), octstr_binary_to_hex(), octstr_convert_printable(), octstr_create, octstr_destroy_item(), octstr_duplicate, octstr_format_append(), octstr_get_char(), octstr_get_cstr, octstr_len(), octstr_split_words(), result, SMSCConn, smscconn_id(), smscconn_name(), text, uuid_is_null(), UUID_STR_LEN, uuid_unparse(), and warning(). Referenced by bb_alog_sms(). 00113 {
00114 int nextarg, j;
00115 struct tm tm;
00116 int num_words;
00117 List *word_list;
00118 Octstr *result;
00119 const char *pattern;
00120 Octstr *temp, *text, *udh;
00121 size_t n;
00122 long i;
00123
00124 text = msg->sms.msgdata ? octstr_duplicate(msg->sms.msgdata) : octstr_create("");
00125 udh = msg->sms.udhdata ? octstr_duplicate(msg->sms.udhdata) : octstr_create("");
00126 if ((msg->sms.coding == DC_8BIT || msg->sms.coding == DC_UCS2))
00127 octstr_binary_to_hex(text, 1);
00128 else
00129 octstr_convert_printable(text);
00130 octstr_binary_to_hex(udh, 1);
00131
00132 if (octstr_len(text)) {
00133 word_list = octstr_split_words(text);
00134 num_words = gwlist_len(word_list);
00135 } else {
00136 word_list = gwlist_create();
00137 num_words = 0;
00138 }
00139
00140 result = octstr_create("");
00141 pattern = octstr_get_cstr(custom_log_format);
00142
00143 nextarg = 1;
00144
00145 while(*pattern != '\0') {
00146 n = strcspn(pattern, "%");
00147 octstr_append_data(result, pattern, n);
00148 pattern += n;
00149 gw_assert(*pattern == '%' || *pattern == '\0');
00150 if (*pattern == '\0')
00151 break;
00152
00153 pattern++;
00154
00155 switch (*pattern) {
00156 case 'k':
00157 if (num_words <= 0)
00158 break;
00159 octstr_append(result, gwlist_get(word_list, 0));
00160 break;
00161
00162 case 's':
00163 if (nextarg >= num_words)
00164 break;
00165 octstr_append(result, gwlist_get(word_list, nextarg));
00166 ++nextarg;
00167 break;
00168
00169 case 'S':
00170 if (nextarg >= num_words)
00171 break;
00172 temp = gwlist_get(word_list, nextarg);
00173 for (i = 0; i < octstr_len(temp); ++i) {
00174 if (octstr_get_char(temp, i) == '*')
00175 octstr_append_char(result, '~');
00176 else
00177 octstr_append_char(result, octstr_get_char(temp, i));
00178 }
00179 ++nextarg;
00180 break;
00181
00182 case 'r':
00183 for (j = nextarg; j < num_words; ++j) {
00184 if (j != nextarg)
00185 octstr_append_char(result, '+');
00186 octstr_append(result, gwlist_get(word_list, j));
00187 }
00188 break;
00189
00190 case 'l':
00191 if (message)
00192 octstr_append_cstr(result, message);
00193 break;
00194
00195 case 'P':
00196 if (msg->sms.receiver)
00197 octstr_append(result, msg->sms.receiver);
00198 break;
00199
00200 case 'p':
00201 if (msg->sms.sender)
00202 octstr_append(result, msg->sms.sender);
00203 break;
00204
00205 case 'a':
00206 for (j = 0; j < num_words; ++j) {
00207 if (j > 0)
00208 octstr_append_char(result, ' ');
00209 octstr_append(result, gwlist_get(word_list, j));
00210 }
00211 break;
00212
00213 case 'b':
00214 if (text)
00215 octstr_append(result, text);
00216 break;
00217
00218 case 'L':
00219 octstr_append_decimal(result, octstr_len(msg->sms.msgdata));
00220 break;
00221
00222 case 't':
00223 tm = gw_gmtime(msg->sms.time);
00224 octstr_format_append(result, "%04d-%02d-%02d %02d:%02d:%02d",
00225 tm.tm_year + 1900,
00226 tm.tm_mon + 1,
00227 tm.tm_mday,
00228 tm.tm_hour,
00229 tm.tm_min,
00230 tm.tm_sec);
00231 break;
00232
00233 case 'T':
00234 if (msg->sms.time != MSG_PARAM_UNDEFINED)
00235 octstr_format_append(result, "%ld", msg->sms.time);
00236 break;
00237
00238 case 'i':
00239 if (conn && smscconn_id(conn))
00240 octstr_append(result, smscconn_id(conn));
00241 else if (conn && smscconn_name(conn))
00242 octstr_append(result, smscconn_name(conn));
00243 else if (msg->sms.smsc_id)
00244 octstr_append(result, msg->sms.smsc_id);
00245 break;
00246
00247 case 'I':
00248 if (!uuid_is_null(msg->sms.id)) {
00249 char id[UUID_STR_LEN + 1];
00250 uuid_unparse(msg->sms.id, id);
00251 octstr_append_cstr(result, id);
00252 }
00253 break;
00254
00255 case 'n':
00256 if (msg->sms.service != NULL)
00257 octstr_append(result, msg->sms.service);
00258 break;
00259
00260 case 'd':
00261 octstr_append_decimal(result, msg->sms.dlr_mask);
00262 break;
00263
00264 case 'c':
00265 octstr_append_decimal(result, msg->sms.coding);
00266 break;
00267
00268 case 'm':
00269 octstr_append_decimal(result, msg->sms.mclass);
00270 break;
00271
00272 case 'C':
00273 octstr_append_decimal(result, msg->sms.compress);
00274 break;
00275
00276 case 'M':
00277 octstr_append_decimal(result, msg->sms.mwi);
00278 break;
00279
00280 case 'u':
00281 if (octstr_len(udh)) {
00282 octstr_append(result, udh);
00283 }
00284 break;
00285
00286 case 'U':
00287 octstr_append_decimal(result, octstr_len(msg->sms.udhdata));
00288 break;
00289
00290 case 'B': /* billing identifier/information */
00291 if (octstr_len(msg->sms.binfo)) {
00292 octstr_append(result, msg->sms.binfo);
00293 }
00294 break;
00295
00296 case 'A': /* account */
00297 if (octstr_len(msg->sms.account)) {
00298 octstr_append(result, msg->sms.account);
00299 }
00300 break;
00301
00302 /* XXX add more here if needed */
00303
00304 case '%':
00305 octstr_format_append(result, "%%");
00306 break;
00307
00308 default:
00309 warning(0, "Unknown escape code (%%%c) within custom-log-format, skipping!", *pattern);
00310 octstr_format_append(result, "%%%c", *pattern);
00311 break;
00312 } /* switch(...) */
00313
00314 pattern++;
00315 } /* for ... */
00316
00317 gwlist_destroy(word_list, octstr_destroy_item);
00318
00319 return result;
00320 }
|
Here is the call graph for this function:

|
|
Definition at line 70 of file bb_alog.c. Referenced by bb_alog_init(), bb_alog_shutdown(), bb_alog_sms(), and get_pattern(). |