1 | #include "globals.h"
|
---|
2 |
|
---|
3 | #include "oscam-log.h"
|
---|
4 | #include "oscam-log-reader.h"
|
---|
5 | #include "oscam-reader.h"
|
---|
6 |
|
---|
7 | extern int log_remove_sensitive;
|
---|
8 |
|
---|
9 | static char *debug_mask_txt(int mask) {
|
---|
10 | switch (mask) {
|
---|
11 | case D_EMM : return "EMM: ";
|
---|
12 | case D_IFD : return "IFD: ";
|
---|
13 | case D_TRACE : return "TRACE: ";
|
---|
14 | case D_DEVICE : return "IO: ";
|
---|
15 | default : return "";
|
---|
16 | }
|
---|
17 | }
|
---|
18 |
|
---|
19 | static char *reader_desc_txt(struct s_reader *reader) {
|
---|
20 | if (reader->csystem.desc)
|
---|
21 | return reader->csystem.desc;
|
---|
22 | else if (reader->crdr.desc)
|
---|
23 | return reader->crdr.desc;
|
---|
24 | else if (reader->ph.desc)
|
---|
25 | return reader->ph.desc;
|
---|
26 | else
|
---|
27 | return reader_get_type_desc(reader, 1);
|
---|
28 | }
|
---|
29 |
|
---|
30 | static char *format_sensitive(char *result, int remove_sensitive) {
|
---|
31 | // Filter sensitive information
|
---|
32 | int i, n = strlen(result), p = 0;
|
---|
33 | if (remove_sensitive) {
|
---|
34 | int in_sens = 0;
|
---|
35 | for (i = 0; i < n; i++) {
|
---|
36 | switch(result[i]) {
|
---|
37 | case '{': in_sens = 1; continue;
|
---|
38 | case '}': in_sens = 0; break;
|
---|
39 | }
|
---|
40 | if (in_sens)
|
---|
41 | result[i] = '#';
|
---|
42 | }
|
---|
43 | }
|
---|
44 | // Filter sensitive markers
|
---|
45 | for (i = 0; i < n; i++) {
|
---|
46 | if (result[i] == '{' || result[i] == '}')
|
---|
47 | continue;
|
---|
48 | result[p++] = result[i];
|
---|
49 | }
|
---|
50 | result[p] = '\0';
|
---|
51 | return result;
|
---|
52 | }
|
---|
53 |
|
---|
54 | void rdr_log(struct s_reader * reader, char *fmt, ...) {
|
---|
55 | char txt[256];
|
---|
56 | va_list args;
|
---|
57 | va_start(args, fmt);
|
---|
58 | vsnprintf(txt, sizeof(txt), fmt, args);
|
---|
59 | va_end(args);
|
---|
60 | cs_log("%s [%s] %s", reader->label, reader_desc_txt(reader), txt);
|
---|
61 | }
|
---|
62 |
|
---|
63 | void rdr_log_sensitive(struct s_reader * reader, char *fmt, ...) {
|
---|
64 | char txt[256];
|
---|
65 | va_list args;
|
---|
66 | va_start(args, fmt);
|
---|
67 | vsnprintf(txt, sizeof(txt), fmt, args);
|
---|
68 | va_end(args);
|
---|
69 | format_sensitive(txt, log_remove_sensitive);
|
---|
70 | rdr_log(reader, "%s", txt);
|
---|
71 | }
|
---|
72 |
|
---|
73 | void rdr_debug_mask(struct s_reader * reader, uint16_t mask, char *fmt, ...) {
|
---|
74 | if (config_enabled(WITH_DEBUG)) {
|
---|
75 | char txt[2048];
|
---|
76 | va_list args;
|
---|
77 | va_start(args, fmt);
|
---|
78 | vsnprintf(txt, sizeof(txt), fmt, args);
|
---|
79 | va_end(args);
|
---|
80 | cs_debug_mask(mask, "%s [%s] %s%s", reader->label, reader_desc_txt(reader), debug_mask_txt(mask), txt);
|
---|
81 | }
|
---|
82 | }
|
---|
83 |
|
---|
84 | void rdr_debug_mask_sensitive(struct s_reader * reader, uint16_t mask, char *fmt, ...) {
|
---|
85 | if (config_enabled(WITH_DEBUG)) {
|
---|
86 | char txt[2048];
|
---|
87 | va_list args;
|
---|
88 | va_start(args, fmt);
|
---|
89 | vsnprintf(txt, sizeof(txt), fmt, args);
|
---|
90 | va_end(args);
|
---|
91 | format_sensitive(txt, log_remove_sensitive);
|
---|
92 | rdr_debug_mask(reader, mask, "%s", txt);
|
---|
93 | }
|
---|
94 | }
|
---|
95 |
|
---|
96 | void rdr_ddump_mask(struct s_reader * reader, uint16_t mask, const uint8_t * buf, int n, char *fmt, ...) {
|
---|
97 | if (config_enabled(WITH_DEBUG)) {
|
---|
98 | char txt[2048];
|
---|
99 | va_list args;
|
---|
100 | va_start(args, fmt);
|
---|
101 | vsnprintf(txt, sizeof(txt), fmt, args);
|
---|
102 | va_end(args);
|
---|
103 | cs_ddump_mask(mask, buf, n, "%s [%s] %s%s", reader->label, reader_desc_txt(reader), debug_mask_txt(mask), txt);
|
---|
104 | }
|
---|
105 | }
|
---|