1*c8d645caSAndroid Build Coastguard Worker /* Tests extension fields.
2*c8d645caSAndroid Build Coastguard Worker */
3*c8d645caSAndroid Build Coastguard Worker
4*c8d645caSAndroid Build Coastguard Worker #include <stdio.h>
5*c8d645caSAndroid Build Coastguard Worker #include <stdlib.h>
6*c8d645caSAndroid Build Coastguard Worker #include <string.h>
7*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
8*c8d645caSAndroid Build Coastguard Worker #include "alltypes.pb.h"
9*c8d645caSAndroid Build Coastguard Worker #include "extensions.pb.h"
10*c8d645caSAndroid Build Coastguard Worker #include "test_helpers.h"
11*c8d645caSAndroid Build Coastguard Worker
main(int argc,char ** argv)12*c8d645caSAndroid Build Coastguard Worker int main(int argc, char **argv)
13*c8d645caSAndroid Build Coastguard Worker {
14*c8d645caSAndroid Build Coastguard Worker uint8_t buffer[1024];
15*c8d645caSAndroid Build Coastguard Worker pb_ostream_t stream;
16*c8d645caSAndroid Build Coastguard Worker
17*c8d645caSAndroid Build Coastguard Worker AllTypes alltypes = {0};
18*c8d645caSAndroid Build Coastguard Worker int32_t extensionfield1 = 12345;
19*c8d645caSAndroid Build Coastguard Worker pb_extension_t ext1;
20*c8d645caSAndroid Build Coastguard Worker ExtensionMessage extensionfield2 = {"test", 54321};
21*c8d645caSAndroid Build Coastguard Worker pb_extension_t ext2;
22*c8d645caSAndroid Build Coastguard Worker
23*c8d645caSAndroid Build Coastguard Worker /* Set up the extensions */
24*c8d645caSAndroid Build Coastguard Worker alltypes.extensions = &ext1;
25*c8d645caSAndroid Build Coastguard Worker
26*c8d645caSAndroid Build Coastguard Worker ext1.type = &AllTypes_extensionfield1;
27*c8d645caSAndroid Build Coastguard Worker ext1.dest = &extensionfield1;
28*c8d645caSAndroid Build Coastguard Worker ext1.next = &ext2;
29*c8d645caSAndroid Build Coastguard Worker
30*c8d645caSAndroid Build Coastguard Worker ext2.type = &ExtensionMessage_AllTypes_extensionfield2;
31*c8d645caSAndroid Build Coastguard Worker ext2.dest = &extensionfield2;
32*c8d645caSAndroid Build Coastguard Worker ext2.next = NULL;
33*c8d645caSAndroid Build Coastguard Worker
34*c8d645caSAndroid Build Coastguard Worker /* Set up the output stream */
35*c8d645caSAndroid Build Coastguard Worker stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
36*c8d645caSAndroid Build Coastguard Worker
37*c8d645caSAndroid Build Coastguard Worker /* Now encode the message and check if we succeeded. */
38*c8d645caSAndroid Build Coastguard Worker if (pb_encode(&stream, AllTypes_fields, &alltypes))
39*c8d645caSAndroid Build Coastguard Worker {
40*c8d645caSAndroid Build Coastguard Worker SET_BINARY_MODE(stdout);
41*c8d645caSAndroid Build Coastguard Worker fwrite(buffer, 1, stream.bytes_written, stdout);
42*c8d645caSAndroid Build Coastguard Worker return 0; /* Success */
43*c8d645caSAndroid Build Coastguard Worker }
44*c8d645caSAndroid Build Coastguard Worker else
45*c8d645caSAndroid Build Coastguard Worker {
46*c8d645caSAndroid Build Coastguard Worker fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream));
47*c8d645caSAndroid Build Coastguard Worker return 1; /* Failure */
48*c8d645caSAndroid Build Coastguard Worker }
49*c8d645caSAndroid Build Coastguard Worker
50*c8d645caSAndroid Build Coastguard Worker /* Check that the field tags are properly generated */
51*c8d645caSAndroid Build Coastguard Worker (void)AllTypes_extensionfield1_tag;
52*c8d645caSAndroid Build Coastguard Worker (void)ExtensionMessage_AllTypes_extensionfield2_tag;
53*c8d645caSAndroid Build Coastguard Worker }
54*c8d645caSAndroid Build Coastguard Worker
55