00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <oasys/util/ScratchBuffer.h>
00019
00020 #include "PingRegistration.h"
00021 #include "RegistrationTable.h"
00022 #include "bundling/BundleDaemon.h"
00023
00024 namespace dtn {
00025
00026 PingRegistration::PingRegistration(const EndpointID& eid)
00027 : Registration(PING_REGID, eid, Registration::DEFER, 0)
00028 {
00029 logpathf("/dtn/reg/ping");
00030 set_active(true);
00031 }
00032
00033 void
00034 PingRegistration::deliver_bundle(Bundle* bundle)
00035 {
00036 size_t payload_len = bundle->payload_.length();
00037 log_debug("%zu byte ping from %s",
00038 payload_len, bundle->source_.c_str());
00039
00040 Bundle* reply = new Bundle();
00041 reply->source_.assign(bundle->dest_);
00042 reply->dest_.assign(bundle->source_);
00043 reply->replyto_.assign(EndpointID::NULL_EID());
00044 reply->custodian_.assign(EndpointID::NULL_EID());
00045 reply->expiration_ = bundle->expiration_;
00046
00047 reply->payload_.set_length(payload_len);
00048 reply->payload_.write_data(&bundle->payload_, 0, payload_len, 0);
00049
00050 BundleDaemon::post(new BundleReceivedEvent(reply, EVENTSRC_ADMIN));
00051 BundleDaemon::post(new BundleDeliveredEvent(bundle, this));
00052 }
00053
00054
00055 }