IBR-DTNSuite  0.10
CapsuleWorker.cpp
Go to the documentation of this file.
1 /*
2  * CapsuleWorker.cpp
3  *
4  * Copyright (C) 2011 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
22 #include "Configuration.h"
23 #include "CapsuleWorker.h"
25 #include "core/BundleCore.h"
27 #include <ibrdtn/utils/Clock.h>
28 #include <ibrcommon/Logger.h>
29 
30 namespace dtn
31 {
32  namespace daemon
33  {
35  {
36  AbstractWorker::initialize("/bundle-in-bundle", 2, true);
37  }
38 
40  {
41  }
42 
44  {
45  try {
46  const PayloadBlock &payload = capsule.find<PayloadBlock>();
47  ibrcommon::BLOB::iostream stream = payload.getBLOB().iostream();
48 
49  // read the number of bundles
51  (*stream) >> nob;
52 
53  // read all offsets
54  for (size_t i = 0; (nob - 1) > i; ++i)
55  {
56  dtn::data::Number offset;
57  (*stream) >> offset;
58  }
59 
60  // create a deserializer for all bundles
63 
64  try {
65  // read all bundles
66  for (size_t i = 0; nob > i; ++i)
67  {
68  // deserialize the next bundle
69  deserializer >> b;
70 
71  // raise default bundle received event
73  }
74  }
75  catch (const dtn::InvalidDataException &ex) {
76  // display the rejection
77  IBRCOMMON_LOGGER_TAG("CapsuleWorker", warning) << "invalid bundle-data received: " << ex.what() << IBRCOMMON_LOGGER_ENDL;
78  }
80  }
81  }
82 }