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