IBR-DTNSuite  0.10
StreamBundle.cpp
Go to the documentation of this file.
1 /*
2  * StreamBundle.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 "streaming/StreamBundle.h"
24 
26  : _ref(ibrcommon::BLOB::create())
27 {
28  dtn::data::StreamBlock &block = push_front<dtn::data::StreamBlock>();
29  block.setSequenceNumber(0);
30 
31  push_back(_ref);
32 }
33 
35  : dtn::data::Bundle(b), _ref(find<dtn::data::PayloadBlock>().getBLOB())
36 {
37 }
38 
40 {
41 }
42 
43 void StreamBundle::append(const char* data, size_t length)
44 {
45  ibrcommon::BLOB::iostream stream = _ref.iostream();
46  (*stream).seekp(0, ios::end);
47  (*stream).write(data, length);
48 }
49 
51 {
52  ibrcommon::BLOB::iostream stream = _ref.iostream();
53  stream.clear();
54 
55  // increment the sequence number
56  try {
57  dtn::data::StreamBlock &block = find<dtn::data::StreamBlock>();
58  block.setSequenceNumber(block.getSequenceNumber() + 1);
60 }
61 
63 {
64  ibrcommon::BLOB::iostream stream = _ref.iostream();
65  return stream.size();
66 }