00001 /* 00002 * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By 00003 * downloading, copying, installing or using the software you agree to 00004 * this license. If you do not agree to this license, do not download, 00005 * install, copy or use the software. 00006 * 00007 * Intel Open Source License 00008 * 00009 * Copyright (c) 2004 Intel Corporation. All rights reserved. 00010 * 00011 * Redistribution and use in source and binary forms, with or without 00012 * modification, are permitted provided that the following conditions are 00013 * met: 00014 * 00015 * Redistributions of source code must retain the above copyright 00016 * notice, this list of conditions and the following disclaimer. 00017 * 00018 * Redistributions in binary form must reproduce the above copyright 00019 * notice, this list of conditions and the following disclaimer in the 00020 * documentation and/or other materials provided with the distribution. 00021 * 00022 * Neither the name of the Intel Corporation nor the names of its 00023 * contributors may be used to endorse or promote products derived from 00024 * this software without specific prior written permission. 00025 * 00026 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00027 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00028 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00029 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR 00030 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00031 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00032 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00033 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00034 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00035 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00036 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00037 */ 00038 #ifndef _REGISTRATION_H_ 00039 #define _REGISTRATION_H_ 00040 00041 #include <list> 00042 #include <string> 00043 00044 #include <oasys/debug/Log.h> 00045 #include <oasys/serialize/Serialize.h> 00046 #include <oasys/thread/Timer.h> 00047 00048 #include "../naming/EndpointID.h" 00049 00050 namespace dtn { 00051 00052 class Bundle; 00053 00063 class Registration : public oasys::SerializableObject, public oasys::Logger { 00064 public: 00068 static const u_int32_t ADMIN_REGID = 0; 00069 static const u_int32_t LINKSTATEROUTER_REGID = 1; 00070 static const u_int32_t MAX_RESERVED_REGID = 9; 00071 00076 typedef enum { 00077 DROP, 00078 DEFER, 00079 EXEC 00080 } failure_action_t; 00081 00085 static const char* failure_action_toa(failure_action_t action); 00086 00090 Registration(const oasys::Builder&); 00091 00095 Registration(u_int32_t regid, 00096 const EndpointIDPattern& endpoint, 00097 failure_action_t action, 00098 u_int32_t expiration, 00099 const std::string& script = ""); 00100 00104 virtual ~Registration(); 00105 00109 virtual void deliver_bundle(Bundle* bundle) = 0; 00110 00112 00113 u_int32_t durable_key() { return regid_; } 00114 u_int32_t regid() { return regid_; } 00115 const EndpointIDPattern& endpoint() { return endpoint_; } 00116 failure_action_t failure_action() { return failure_action_; } 00117 const std::string& script() { return script_; } 00118 u_int32_t expiration() { return expiration_; } 00119 bool active() { return active_; } 00120 void set_active(bool a) { active_ = a; } 00121 bool expired() { return expired_; } 00122 void set_expired(bool e) { expired_ = e; } 00124 00128 void serialize(oasys::SerializeAction* a); 00129 00136 void force_expire(); 00137 00138 protected: 00142 class ExpirationTimer : public oasys::Timer { 00143 public: 00144 ExpirationTimer(Registration* reg) 00145 : reg_(reg) {} 00146 00147 void timeout(const struct timeval& now); 00148 00149 Registration* reg_; 00150 }; 00151 00152 void init_expiration_timer(); 00153 void cleanup_expiration_timer(); 00154 00155 u_int32_t regid_; 00156 EndpointIDPattern endpoint_; 00157 failure_action_t failure_action_; 00158 std::string script_; 00159 u_int32_t expiration_; 00160 u_int32_t creation_time_; 00161 ExpirationTimer* expiration_timer_; 00162 bool active_; 00163 bool bound_; 00164 bool expired_; 00165 }; 00166 00170 class RegistrationList : public std::list<Registration*> {}; 00171 00172 } // namespace dtn 00173 00174 #endif /* _REGISTRATION_H_ */