apps/tca_admin/TcaController.h
changeset 0 2b3e5ec03512
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/tca_admin/TcaController.h	Thu Apr 21 14:57:45 2011 +0100
@@ -0,0 +1,131 @@
+/*
+ *    Copyright 2005-2006 University of Waterloo
+ * 
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+
+//#include <stdio.h>
+//#include <unistd.h>
+//#include <errno.h>
+//#include <strings.h>
+//#include <stdlib.h>
+//#include <sys/time.h>
+
+#include <string>
+//#include "dtn_api.h"
+#include "TcaEndpointID.h"
+#include "../../servlib/routing/TcaControlBundle.h"
+#include "TcaRegistry.h"
+
+
+class TcaController
+{
+public:
+
+    enum Role { TCA_MOBILE, TCA_ROUTER, TCA_GATEWAY };
+        
+    TcaController(Role role, const std::string& link_id,
+                  const std::string& ask_addr, const std::string& adv_str,
+                  int registry_ttl, int control_ttl);
+
+    virtual ~TcaController();
+
+    // open dtn, initialize class members
+    bool init(bool tidy);   
+
+    // process incoming bundles
+    void run();
+
+    // low-level send/recv functions
+    bool send_bundle(const dtn_bundle_spec_t& spec, const std::string& payload);
+    bool recv_bundle(dtn_bundle_spec_t& spec, std::string& payload,
+                     unsigned int timeout=0);
+
+    // a more convenient send, using reasonable defaults for most args
+    bool send_bundle(const std::string& dest, const std::string& payload);
+
+protected:
+    
+    Role                    role_;
+    std::string             link_id_;
+    std::string             ask_addr_;      // address to send ask to
+    std::string             adv_str_;
+    int                     registry_ttl_;
+    int                     control_ttl_;
+
+    TcaRegistry             registry_;      // the DHT registry (gateway only)
+    dtn_handle_t            handle_;
+    dtn_endpoint_id_t       local_eid_;
+
+    // register an endpoint id with the daemon and bind it to handle_
+    bool dtn_reg(dtn_endpoint_id_t& eid, dtn_reg_id_t& id);
+
+    bool handle_bundle_received(const dtn_bundle_spec_t& spec,
+                                const std::string& payload);
+
+    bool handle_reg_received(const dtn_bundle_spec_t& spec,
+                             const dtn::TcaControlBundle& cb);
+    bool route_reg(const dtn_bundle_spec_t& spec, const dtn::TcaControlBundle& cb);
+    bool gate_reg(const dtn_bundle_spec_t& spec, const dtn::TcaControlBundle& cb);
+
+    bool handle_unb(const dtn_bundle_spec_t& spec, const dtn::TcaControlBundle& cb);
+
+    bool handle_coa_sent(const dtn_bundle_spec_t& spec,
+                         const dtn::TcaControlBundle& cb);
+
+    bool handle_link_announce(const dtn_bundle_spec_t& spec,
+                              const dtn::TcaControlBundle& cb);
+
+    bool handle_ask(const dtn_bundle_spec_t& spec, const dtn::TcaControlBundle& cb);
+
+    bool handle_ask_received(const dtn_bundle_spec_t& spec,
+                             const dtn::TcaControlBundle& cb);
+
+    bool handle_ask_sent(const dtn_bundle_spec_t& spec,
+                         const dtn::TcaControlBundle& cb);
+
+    bool handle_adv(const dtn_bundle_spec_t& spec, const dtn::TcaControlBundle& cb);
+
+    bool handle_adv_sent(const dtn_bundle_spec_t& spec,
+                         const dtn::TcaControlBundle& cb);
+
+    bool handle_routes(const dtn_bundle_spec_t& spec,
+                       const dtn::TcaControlBundle& cb);
+
+    bool ask(const std::string& link);  // experimental
+    bool get_routes();
+    bool add_route(const std::string& route_pattern, const std::string& link);
+    bool del_route(const std::string& route_pattern);
+
+
+    // lookup existing registration info for the given endpoint
+    bool get_registration(const TcaEndpointID& eid, RegRecord& rr);
+
+    // update DHT registry for given endpoint
+    // link_addr is the link addr of the endpoint's new gateway
+    bool do_registration(const TcaEndpointID& eid,
+                         const std::string& link_addr);
+
+    // Testing functions for various parts of the protocol
+    // These generally send a query bundle, get the response, and check
+    // that it's correct.
+
+    bool test_all();
+    
+    // recv and discard all pending bundles
+    void eat_bundles(bool verbose = true);
+};
+
+
+