IBR-DTNSuite  0.10
BundleReceivedEvent.cpp
Go to the documentation of this file.
1 /*
2  * BundleReceivedEvent.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 
23 #include "core/BundleCore.h"
24 #include "core/EventDispatcher.h"
25 #include <ibrcommon/Logger.h>
26 
27 namespace dtn
28 {
29  namespace net
30  {
31  // static semaphore to limit the number of received bundles in transit between CL and storage
32  ibrcommon::Semaphore BundleReceivedEvent::_sem(5);
33 
34  BundleReceivedEvent::BundleReceivedEvent(const dtn::data::EID &p, const dtn::data::Bundle &b, const bool local)
35  : Event(-1), peer(p), bundle(b), fromlocal(local)
36  {
37  // allocate semaphore slot
38  _sem.wait();
39  }
40 
41  BundleReceivedEvent::~BundleReceivedEvent()
42  {
43  // free a semaphore slot
44  _sem.post();
45  }
46 
47  void BundleReceivedEvent::raise(const dtn::data::EID &peer, const dtn::data::Bundle &bundle, const bool local)
48  {
49  // raise the new event
51  }
52 
53  const std::string BundleReceivedEvent::getName() const
54  {
55  return BundleReceivedEvent::className;
56  }
57 
58  std::string BundleReceivedEvent::getMessage() const
59  {
60  if (fromlocal) {
61  return "Bundle received " + bundle.toString() + " (local)";
62  } else {
63  return "Bundle received " + bundle.toString() + " from " + peer.getString();
64  }
65  }
66 
67  const string BundleReceivedEvent::className = "BundleReceivedEvent";
68  }
69 }