xref: /haiku/src/tests/kits/app/DanoMessageTest.cpp (revision 887f41e6463431620d5c5f002caee1d1745b1e08)
1698b96efSAxel Dörfler #include <File.h>
2698b96efSAxel Dörfler #include <Message.h>
3698b96efSAxel Dörfler 
4698b96efSAxel Dörfler #include <stdio.h>
5698b96efSAxel Dörfler #include <string.h>
6698b96efSAxel Dörfler #include <stdlib.h>
7698b96efSAxel Dörfler 
8698b96efSAxel Dörfler 
9698b96efSAxel Dörfler namespace BPrivate {
10698b96efSAxel Dörfler 	status_t unflatten_dano_message(uint32 magic, BDataIO& stream, BMessage& message);
11698b96efSAxel Dörfler 	size_t dano_message_size(const char* buffer);
12698b96efSAxel Dörfler }
13698b96efSAxel Dörfler 
14698b96efSAxel Dörfler 
15698b96efSAxel Dörfler extern const char* __progname;
16698b96efSAxel Dörfler 
17698b96efSAxel Dörfler static const uint32 kMessageFormat = 'FOB2';
18698b96efSAxel Dörfler static const uint32 kMessageFormatSwapped = '2BOF';
19698b96efSAxel Dörfler 
20698b96efSAxel Dörfler 
21698b96efSAxel Dörfler int
main(int argc,char ** argv)22698b96efSAxel Dörfler main(int argc, char** argv)
23698b96efSAxel Dörfler {
24698b96efSAxel Dörfler 	if (argc < 2) {
25698b96efSAxel Dörfler 		fprintf(stderr, "usage: %s <flattened dano message>\n", __progname);
26698b96efSAxel Dörfler 		return -1;
27698b96efSAxel Dörfler 	}
28698b96efSAxel Dörfler 
29698b96efSAxel Dörfler 	for (int32 i = 1; i < argc; i++) {
30698b96efSAxel Dörfler 		BFile file(argv[i], B_READ_ONLY);
31698b96efSAxel Dörfler 		if (file.InitCheck() != B_OK) {
32698b96efSAxel Dörfler 			fprintf(stderr, "Could not open message \"%s\": %s\n", argv[i], strerror(file.InitCheck()));
33698b96efSAxel Dörfler 			continue;
34698b96efSAxel Dörfler 		}
35698b96efSAxel Dörfler 
36698b96efSAxel Dörfler 		off_t size;
37698b96efSAxel Dörfler 		if (file.GetSize(&size) != B_OK)
38698b96efSAxel Dörfler 			continue;
39698b96efSAxel Dörfler 
40698b96efSAxel Dörfler 		uint32 magic;
41698b96efSAxel Dörfler 		if (file.Read(&magic, sizeof(uint32)) != sizeof(uint32))
42698b96efSAxel Dörfler 			continue;
43698b96efSAxel Dörfler 
44698b96efSAxel Dörfler 		if (magic != kMessageFormat && magic != kMessageFormatSwapped) {
45698b96efSAxel Dörfler 			fprintf(stderr, "Not a dano message \"%s\"\n", argv[i]);
46698b96efSAxel Dörfler 			continue;
47698b96efSAxel Dörfler 		}
48698b96efSAxel Dörfler 
49698b96efSAxel Dörfler 		BMessage message;
50*887f41e6SAxel Dörfler 		status_t status = BPrivate::unflatten_dano_message(magic, file, message);
51*887f41e6SAxel Dörfler 		if (status == B_OK)
52698b96efSAxel Dörfler 			message.PrintToStream();
53*887f41e6SAxel Dörfler 		else
54*887f41e6SAxel Dörfler 			fprintf(stderr, "Could not unflatten message: %s\n", strerror(status));
55698b96efSAxel Dörfler 	}
56698b96efSAxel Dörfler 
57698b96efSAxel Dörfler 	return 0;
58698b96efSAxel Dörfler }
59698b96efSAxel Dörfler 
60