blob: c689f954d02f54769a40308f528bb92c8bde52b5 [file] [log] [blame]
Jeff Thompson687ea652013-12-06 11:28:23 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/**
3 * Copyright (C) 2013 Regents of the University of California.
4 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
5 * See COPYING for copyright and distribution information.
6 */
7
8#include <iostream>
9#include <time.h>
10#include <sys/time.h>
Jeff Thompson18dba8b2013-12-09 12:17:40 -080011#include <stdexcept>
Jeff Thompson687ea652013-12-06 11:28:23 -080012#include <ndn-cpp/data.hpp>
13// Hack: Hook directly into non-API functions.
14#include "../src/c/encoding/binary-xml-decoder.h"
15#include "../src/c/data.h"
16#include "../src/c/encoding/binary-xml-data.h"
17
18using namespace std;
19using namespace ndn;
20using namespace ndn::ptr_lib;
21
22static double
Jeff Thompson18dba8b2013-12-09 12:17:40 -080023getNowSeconds()
Jeff Thompson687ea652013-12-06 11:28:23 -080024{
25 struct timeval t;
26 gettimeofday(&t, 0);
Jeff Thompson18dba8b2013-12-09 12:17:40 -080027 return t.tv_sec + t.tv_usec / 1000000.0;
Jeff Thompson687ea652013-12-06 11:28:23 -080028}
29
30uint8_t Data1[] = {
310x04, 0x82, // NDN Data
32 0x02, 0xaa, // Signature
33 0x03, 0xb2, // SignatureBits
34 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
35 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
36 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
37 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
38 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
39 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
40 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
41 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
42 0x00,
43 0x00,
44 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
45 0x01, 0xa2, // SignedInfo
46 0x03, 0xe2, // PublisherPublicKeyDigest
47 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
48 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
49 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
50 0x00,
51 0x02, 0xba, // Timestamp
52 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
53 0x00,
54 0x01, 0xe2, // KeyLocator
55 0x01, 0xda, // Key
56 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
57 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
58 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
59 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
60 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
61 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
62 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
63 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
64 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
65 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
66 0x00,
67 0x00,
68 0x00,
69 0x01, 0x9a, // Content
70 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
71 0x00,
720x00,
731
74};
75
76static void
77testDataDecodeCpp()
78{
79 double nIterations = 1000000;
80
81 size_t nameSize = 0;
Jeff Thompson18dba8b2013-12-09 12:17:40 -080082 double start = getNowSeconds();
Jeff Thompson687ea652013-12-06 11:28:23 -080083 for (int i = 0; i < nIterations; ++i) {
84 Data data;
85 data.wireDecode(Data1, sizeof(Data1));
86 nameSize = data.getName().size();
87 }
Jeff Thompson18dba8b2013-12-09 12:17:40 -080088 double finish = getNowSeconds();
89
90 // Sanity check that we are actually decoding.
91 if (nameSize != 2)
92 throw runtime_error("Unexpected data packet name size");
Jeff Thompson687ea652013-12-06 11:28:23 -080093
Jeff Thompson18dba8b2013-12-09 12:17:40 -080094 cout << "Data decode C++: Duration sec: " << (finish - start) << ", Hz: " << (nIterations / (finish - start)) << endl;
Jeff Thompson687ea652013-12-06 11:28:23 -080095}
96
97static void
98testDataDecodeC()
99{
100 double nIterations = 20000000;
101
102 size_t nameSize = 0;
Jeff Thompson18dba8b2013-12-09 12:17:40 -0800103 double start = getNowSeconds();
Jeff Thompson687ea652013-12-06 11:28:23 -0800104 for (int i = 0; i < nIterations; ++i) {
105 struct ndn_NameComponent nameComponents[100];
106 struct ndn_NameComponent keyNameComponents[100];
107 struct ndn_Data dataStruct;
108 ndn_Data_initialize
109 (&dataStruct, nameComponents, sizeof(nameComponents) / sizeof(nameComponents[0]),
110 keyNameComponents, sizeof(keyNameComponents) / sizeof(keyNameComponents[0]));
111
112 ndn_BinaryXmlDecoder decoder;
113 ndn_BinaryXmlDecoder_initialize(&decoder, Data1, sizeof(Data1));
114 size_t signedPortionBeginOffset, signedPortionEndOffset;
115 ndn_Error error;
116 if ((error = ndn_decodeBinaryXmlData(&dataStruct, &signedPortionBeginOffset, &signedPortionEndOffset, &decoder)))
117 {
118 cout << "Error in ndn_decodeBinaryXmlData: " << ndn_getErrorString(error) << endl;
119 return;
120 }
121
122 nameSize = dataStruct.name.nComponents;
123 }
Jeff Thompson18dba8b2013-12-09 12:17:40 -0800124 double finish = getNowSeconds();
125
126 // Sanity check that we are actually decoding.
127 if (nameSize != 2)
128 throw runtime_error("Unexpected data packet name size");
Jeff Thompson687ea652013-12-06 11:28:23 -0800129
Jeff Thompson18dba8b2013-12-09 12:17:40 -0800130 cout << "Data decode C: Duration sec: " << (finish - start) << ", Hz: " << (nIterations / (finish - start)) << endl;
Jeff Thompson687ea652013-12-06 11:28:23 -0800131}
132
133int
134main(int argc, char** argv)
135{
Jeff Thompson18dba8b2013-12-09 12:17:40 -0800136 try {
137 testDataDecodeCpp();
138 testDataDecodeC();
139 } catch (std::exception& e) {
140 cout << "exception: " << e.what() << endl;
141 }
Jeff Thompson687ea652013-12-06 11:28:23 -0800142 return 0;
143}