00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef _DTNTUNNEL_H_
00039 #define _DTNTUNNEL_H_
00040
00041 #include <sys/types.h>
00042 #include <netinet/in.h>
00043 #include <netdb.h>
00044
00045 #include <dtn_api.h>
00046 #include <APIBundleQueue.h>
00047 #include <oasys/debug/Log.h>
00048 #include <oasys/thread/Mutex.h>
00049 #include <oasys/util/Singleton.h>
00050
00051 namespace dtntunnel {
00052
00053 class TCPTunnel;
00054 class UDPTunnel;
00055
00059 class DTNTunnel : public oasys::Logger,
00060 public oasys::Singleton<DTNTunnel>
00061 {
00062 public:
00064 DTNTunnel();
00065
00072 struct BundleHeader {
00073 BundleHeader() {}
00074
00075 BundleHeader(u_int8_t protocol,
00076 u_int32_t seqno,
00077 u_int32_t client_addr,
00078 u_int32_t remote_addr,
00079 u_int16_t client_port,
00080 u_int16_t remote_port)
00081 : protocol_(protocol),
00082 seqno_(seqno),
00083 client_addr_(client_addr),
00084 remote_addr_(remote_addr),
00085 client_port_(client_port),
00086 remote_port_(remote_port)
00087 {
00088 }
00089
00090 u_int8_t protocol_;
00091 u_int32_t seqno_;
00092 u_int32_t client_addr_;
00093 u_int32_t remote_addr_;
00094 u_int16_t client_port_;
00095 u_int16_t remote_port_;
00096
00097 } __attribute__((packed));
00098
00101 int send_bundle(dtn::APIBundle* bundle, dtn_endpoint_id_t* dest_eid);
00102
00104 int handle_bundle(dtn_bundle_spec_t* spec,
00105 dtn_bundle_payload_t* payload);
00106
00108 int main(int argc, char* argv[]);
00109
00111 u_int max_size() { return max_size_; }
00112 dtn_endpoint_id_t* dest_eid() { return &dest_eid_; }
00113
00114 protected:
00115 std::string loglevelstr_;
00116 oasys::log_level_t loglevel_;
00117 std::string logfile_;
00118
00119 UDPTunnel* udptunnel_;
00120 TCPTunnel* tcptunnel_;
00121
00122 dtn_handle_t recv_handle_;
00123 dtn_handle_t send_handle_;
00124 oasys::Mutex send_lock_;
00125 bool listen_;
00126 dtn_endpoint_id_t local_eid_;
00127 dtn_endpoint_id_t dest_eid_;
00128 u_int expiration_;
00129 bool tcp_;
00130 bool udp_;
00131 in_addr_t local_addr_;
00132 u_int16_t local_port_;
00133 in_addr_t remote_addr_;
00134 u_int16_t remote_port_;
00135 u_int max_size_;
00136
00137 void init_log();
00138 void init_tunnel();
00139 void init_registration();
00140 void get_options(int argc, char* argv[]);
00141 };
00142
00143 }
00144
00145 #endif