1 /* 2 * Copyright (C) 2009-2012 Codership Oy <info@codership.com> 3 */ 4 5 /*! 6 * @file transport.hpp 7 * 8 * @brief Transport interface. 9 */ 10 11 #ifndef _GCOMM_TRANSPORT_HPP_ 12 #define _GCOMM_TRANSPORT_HPP_ 13 14 #include "gcomm/uuid.hpp" 15 #include "gcomm/protolay.hpp" 16 #include "gcomm/protostack.hpp" 17 #include "gcomm/protonet.hpp" 18 19 #include "gu_uri.hpp" 20 21 namespace gcomm 22 { 23 /*! 24 * @class Transport 25 * 26 * @brief Transport interface 27 */ 28 class Transport; 29 } 30 31 /*! 32 * 33 */ 34 class gcomm::Transport : public Protolay 35 { 36 public: 37 virtual ~Transport(); 38 39 virtual size_t mtu() const = 0; 40 virtual const UUID& uuid() const = 0; 41 virtual std::string local_addr() const; 42 virtual std::string remote_addr() const; 43 44 int err_no() const; 45 connect(bool start_prim)46 virtual void connect(bool start_prim) 47 { 48 gu_throw_fatal << "connect(start_prim) not supported"; 49 } connect()50 virtual void connect() // if not overloaded, will default to connect(bool) 51 { 52 connect(false); 53 } connect(const gu::URI & uri)54 virtual void connect(const gu::URI& uri) 55 { 56 gu_throw_fatal << "connect(URI) not supported"; 57 } 58 59 virtual void close(bool force = false) = 0; close(const UUID & uuid)60 virtual void close(const UUID& uuid) 61 { 62 gu_throw_error(ENOTSUP) << "close(UUID) not supported by " 63 << uri_.get_scheme(); 64 } 65 66 virtual void listen(); 67 // Get configured listen addr. For test purposes only. configured_listen_addr() const68 virtual std::string configured_listen_addr() const 69 { 70 gu_throw_fatal << "not supported"; 71 } listen_addr() const72 virtual std::string listen_addr() const 73 { 74 gu_throw_fatal << "not supported"; 75 } 76 virtual Transport* accept(); handle_accept(Transport *)77 virtual void handle_accept(Transport*) 78 { 79 gu_throw_error(ENOTSUP) << "handle_accept() not supported by" 80 << uri_.get_scheme(); 81 } handle_connect()82 virtual void handle_connect() 83 { 84 gu_throw_error(ENOTSUP) << "handle_connect() not supported by" 85 << uri_.get_scheme(); 86 } 87 88 virtual int handle_down(Datagram&, const ProtoDownMeta&) = 0; 89 virtual void handle_up (const void*, const Datagram&, const ProtoUpMeta&) = 0; handle_stable_view(const View & view)90 virtual void handle_stable_view(const View& view) { } pstack()91 Protostack& pstack() { return pstack_; } pnet()92 Protonet& pnet() { return pnet_; } 93 94 static Transport* create(Protonet&, const std::string&); 95 static Transport* create(Protonet&, const gu::URI&); 96 97 protected: 98 Transport (Protonet&, const gu::URI&); 99 Protostack pstack_; 100 Protonet& pnet_; 101 gu::URI uri_; 102 int error_no_; 103 104 private: 105 Transport (const Transport&); 106 Transport& operator=(const Transport&); 107 }; 108 109 110 111 #endif // _GCOMM_TRANSPORT_HPP_ 112