-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdump_scsp_events.c
More file actions
138 lines (131 loc) · 3.56 KB
/
dump_scsp_events.c
File metadata and controls
138 lines (131 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include "scsp.h"
SCSP_INT q_integer (SCSP_USERDATA userdata, SCSP_INT value) {
printf("integer(%ld)\n", value); fflush(stdout);
return 0;
}
SCSP_INT q_bytestring_opened(SCSP_USERDATA userdata, SCSP_INT size_or_minus_one) {
printf("bytestring_opened(%ld)\n", size_or_minus_one); fflush(stdout);
return 0;
}
SCSP_INT q_bytestring_chunk (SCSP_USERDATA userdata, const uint8_t* buf, size_t len) {
int i;
printf("bytestring_chunk(\"");
for (i=0; i<len; ++i) {
printf("\\x%02X", (int)buf[i]);
}
printf("\")\n");
fflush(stdout);
return 0;
}
SCSP_INT q_bytestring_closed(SCSP_USERDATA userdata) {
printf("bytestring_closed\n"); fflush(stdout);
return 0;
}
SCSP_INT q_string_opened(SCSP_USERDATA userdata, SCSP_INT size_or_minus_one) {
printf("string_opened(%ld)\n", size_or_minus_one); fflush(stdout);
return 0;
}
SCSP_INT q_string_chunk (SCSP_USERDATA userdata, const uint8_t* buf, size_t len) {
int i;
printf("string_chunk(\"");
for (i=0; i<len; ++i) {
printf("\\x%02X", (int)buf[i]);
}
printf("\")\n");
fflush(stdout);
return 0;
}
SCSP_INT q_string_closed(SCSP_USERDATA userdata) {
printf("string_closed\n"); fflush(stdout);
return 0;
}
SCSP_INT q_array_opened (SCSP_USERDATA userdata, SCSP_INT size_or_minus_one) {
printf("array_opened(%ld)\n", size_or_minus_one); fflush(stdout);
return 0;
}
SCSP_INT q_array_item (SCSP_USERDATA userdata) {
printf("array_item\n"); fflush(stdout);
return 0;
}
SCSP_INT q_array_closed (SCSP_USERDATA userdata) {
printf("array_closed\n"); fflush(stdout);
return 0;
}
SCSP_INT q_map_opened (SCSP_USERDATA userdata, SCSP_INT size_or_minus_one) {
printf("map_opened(%ld)\n", size_or_minus_one); fflush(stdout);
return 0;
}
SCSP_INT q_map_key (SCSP_USERDATA userdata) {
printf("map_key\n"); fflush(stdout);
return 0;
}
SCSP_INT q_map_value (SCSP_USERDATA userdata) {
printf("map_value\n"); fflush(stdout);
return 0;
}
SCSP_INT q_map_closed (SCSP_USERDATA userdata) {
printf("map_closed\n"); fflush(stdout);
return 0;
}
SCSP_INT q_simple (SCSP_USERDATA userdata, char value) {
printf("simple(%c)\n", value); fflush(stdout);
return 0;
}
SCSP_INT q_simple_other (SCSP_USERDATA userdata, SCSP_INT value) {
printf("simple_other(%ld)\n", value); fflush(stdout);
return 0;
}
SCSP_INT q_tag (SCSP_USERDATA userdata, SCSP_INT value) {
printf("tag(%ld)\n", value); fflush(stdout);
return 0;
}
SCSP_INT q_noninteger (SCSP_USERDATA userdata, double value) {
printf("noninteger(%lg)\n", value); fflush(stdout);
return 0;
}
struct scsp_callbacks q_callbacks = {
&q_integer,
&q_bytestring_opened,
&q_bytestring_chunk,
&q_bytestring_closed,
&q_string_opened,
&q_string_chunk,
&q_string_closed,
&q_array_opened,
&q_array_item,
&q_array_closed,
&q_map_opened,
&q_map_key,
&q_map_value,
&q_map_closed,
&q_simple,
&q_simple_other,
&q_tag,
&q_noninteger
};
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("Usage: dump_scsp_events {filename|-}\n");
return 1;
}
int f;
if (argv[1][0] == '-' && argv[1][1] == '\0') {
f = 0;
} else {
f = open(argv[1], O_RDONLY);
if (f == -1) {
perror("open");
return 2;
}
}
if ( -1 == scsp_parse_from_fd(f, &q_callbacks, NULL) ) {
fprintf(stderr, "Error reading CBOR\n");
return 4;
}
return 0;
}