diff options
Diffstat (limited to 'trunk/TAO/orbsvcs/orbsvcs/AV/FlowSpec_Entry.h')
-rw-r--r-- | trunk/TAO/orbsvcs/orbsvcs/AV/FlowSpec_Entry.h | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/orbsvcs/AV/FlowSpec_Entry.h b/trunk/TAO/orbsvcs/orbsvcs/AV/FlowSpec_Entry.h new file mode 100644 index 00000000000..bc5b0aa1ba2 --- /dev/null +++ b/trunk/TAO/orbsvcs/orbsvcs/AV/FlowSpec_Entry.h @@ -0,0 +1,359 @@ +// -*- C++ -*- + +// ============================================================================ +/** + * @file FlowSpec_Entry.h + * + * $Id$ + * + * @author Nagarajan Surendran <naga@cs.wustl.edu> + * + */ +// ============================================================================ + +#ifndef TAO_AV_FLOWSPEC_ENTRY_H +#define TAO_AV_FLOWSPEC_ENTRY_H +#include /**/ "ace/pre.h" + +#include "orbsvcs/AV/AV_export.h" +#include "orbsvcs/AV/AV_Core.h" +#include "ace/Addr.h" +#include "ace/Containers.h" +#include "ace/SString.h" + + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class TAO_Tokenizer + * @brief + */ +class TAO_AV_Export TAO_Tokenizer +{ +public: + /// constructor. + TAO_Tokenizer (const char *string,char delimiter); + + /// destructor. + ~TAO_Tokenizer (void); + + /// parses the string and tokenizes it. + int parse (const char *string,char delimiter); + + /// Returns the next token. + char *token (void); + + /// Number of tokens. + int num_tokens (void); + + const char *operator [] (size_t index) const; + +protected: + ACE_Array<char*> token_array_; + size_t count_; + size_t num_tokens_; + char string_ [BUFSIZ]; +}; + +// Forward declaration. +class TAO_AV_Transport; +class TAO_AV_Flow_Handler; +class TAO_AV_Protocol_Object; + +/** + * @class TAO_FlowSpec_Entry + * @brief A helper entry class in the flow spec sequence passed to + * bind_devs. + */ +class TAO_AV_Export TAO_FlowSpec_Entry +{ +public: + + enum Direction + { + TAO_AV_INVALID = -1, + TAO_AV_DIR_IN = 0, + TAO_AV_DIR_OUT = 1 + }; + + enum Role + { + TAO_AV_INVALID_ROLE = -1, + TAO_AV_PRODUCER = 0, + TAO_AV_CONSUMER = 1 + }; + + /// default constructor. + TAO_FlowSpec_Entry (void); + + /// constructor to construct an entry from the arguments. + TAO_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *carrier_protocol, + ACE_Addr *fwd_address, + //ACE_Addr *peer_address, + ACE_Addr *control_address = 0); + + TAO_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *fwd_address); + //const char *peer_address); + + /// construct the entry from a string specified by the flowSpec grammar. + virtual int parse (const char* flowSpec_entry) = 0; + + /// virtual destructor. + virtual ~TAO_FlowSpec_Entry (void); + + /// accessor to the direction. + int direction (void); + + virtual Role role (void) = 0; + void role (Role role); + /// accessor to string version of direction . + const char * direction_str (void) const; + + /// accessor to the flow protocol string. + const char *flow_protocol_str (void) const; + + /// set the flow protocol string. + void flow_protocol_str (const char *flow_protocol_str); + + /// accessor to address of the carrier protocol. + //ACE_Addr *fwd_address (void); + ACE_Addr *address (void); + ACE_Addr *control_address (void); + void address (ACE_Addr *address); + void control_address (ACE_Addr *address); + + /// Address in string format i. hostname:port. + const char *address_str (void) const; + // const char * peer_address_str (void) const; + + /// accessor to carrier protocol i.e TCP,UDP,RTP/UDP. + TAO_AV_Core::Protocol carrier_protocol (void); + + /// accessor to string version of carrier protocol. + const char * carrier_protocol_str (void) const; + + /// accessor to format to be used for this flow. + const char *format (void) const; + + /// accessor to name of this flow. + const char *flowname (void) const; + + /// converts the entry to a string. + virtual const char *entry_to_string (void) = 0; + + int set_peer_addr (ACE_Addr *peer_addr); + ACE_Addr *get_peer_addr (void); + int set_peer_control_addr (ACE_Addr *peer_control_addr); + ACE_Addr *get_peer_control_addr (void); + + int set_local_sec_addr (char** local_sec_addr, int size); + char** get_local_sec_addr (void); + int num_local_sec_addrs (void); + + int set_peer_sec_addr (char** peer_sec_addr, int size); + char** get_peer_sec_addr (void); + int num_peer_sec_addrs (void); + + int set_local_addr (ACE_Addr *local_addr); + ACE_Addr *get_local_addr (void); + char *get_local_addr_str (void); + int set_local_control_addr (ACE_Addr *local_control_addr); + ACE_Addr *get_local_control_addr (void); + char *get_local_control_addr_str (void); + + TAO_AV_Transport *transport (void); + void transport (TAO_AV_Transport *transport); + TAO_AV_Transport *control_transport (void); + void control_transport (TAO_AV_Transport *control_transport); + + TAO_AV_Flow_Handler* handler (void); + void handler (TAO_AV_Flow_Handler *handler); + TAO_AV_Flow_Handler* control_handler (void); + void control_handler (TAO_AV_Flow_Handler *control_handler); + + TAO_AV_Protocol_Object* protocol_object (void); + void protocol_object (TAO_AV_Protocol_Object *object); + TAO_AV_Protocol_Object* control_protocol_object (void); + void control_protocol_object (TAO_AV_Protocol_Object *object); + + /// sets the address for this flow. + int parse_address (const char *format_string, + TAO_AV_Core::Flow_Component flow_component); + + /// returns true for a multicast address. + int is_multicast (void); + +protected: + + /// parses the flow protocol string with tokens separated by : + int parse_flow_protocol_string (const char *flow_options_string); + + /// sets the direction flag. + int set_direction (const char *direction_string); + + /// sets the protocol_ enum from the carrier_protocol_ string. + int set_protocol (void); + + /// Addr information for the carrier protocol. + ACE_Addr *address_; + int clean_up_address_; // added to clean up a memory leak + ACE_Addr *control_address_; + int clean_up_control_address_; // added to clean up a memory leak + + /// Fwd Addr in string format i.e hostname:port. + ACE_CString address_str_; + + /// Peer Addr in string format i.e hostname:port. + ACE_CString peer_address_str_; + + /// format string. + ACE_CString format_; + + /// Direction of this flow. + Direction direction_; + + /// string representation of the direction. + ACE_CString direction_str_; + + /// name of this flow. + ACE_CString flowname_; + + /// name of the protocol used. + TAO_AV_Core::Protocol protocol_; + + /// carrier protocol string. + ACE_CString carrier_protocol_; + + /// flow protocol string. + ACE_CString flow_protocol_; + + int use_flow_protocol_; + + /// The flowspec entry; + ACE_CString entry_; + + int is_multicast_; + bool delete_peer_addr_; + ACE_Addr *peer_addr_; + char** local_sec_addr_; + int num_local_sec_addrs_; + char** peer_sec_addr_; + int num_peer_sec_addrs_; + ACE_Addr *peer_control_addr_; + ACE_Addr *local_addr_; + ACE_Addr *local_control_addr_; + TAO_AV_Transport *transport_; + TAO_AV_Transport *control_transport_; + TAO_AV_Flow_Handler *handler_; + TAO_AV_Flow_Handler *control_handler_; + TAO_AV_Protocol_Object *protocol_object_; + TAO_AV_Protocol_Object *control_protocol_object_; + Role role_; +}; + + +/** + * @class TAO_Forward_FlowSpec_Entry + */ +class TAO_AV_Export TAO_Forward_FlowSpec_Entry + : public TAO_FlowSpec_Entry +{ +public: + enum Position {TAO_AV_FLOWNAME = 0, + TAO_AV_DIRECTION = 1, + TAO_AV_FORMAT = 2, + TAO_AV_FLOW_PROTOCOL = 3, + TAO_AV_ADDRESS = 4, + TAO_AV_PEER_ADDR = 5}; + + /// default constructor. + TAO_Forward_FlowSpec_Entry (void); + + /// constructor to construct an entry from the arguments. + TAO_Forward_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *carrier_protocol, + ACE_Addr *address, + ACE_Addr *control_address = 0); + + TAO_Forward_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *address); + + virtual ~TAO_Forward_FlowSpec_Entry (void); + + /// converts the entry to a string. + virtual const char *entry_to_string (void); + + virtual Role role (void); + + /// construct the entry from a string specified by the flowSpec grammar. + virtual int parse (const char* flowSpec_entry); +}; + +/** + * @class TAO_Reverse_FlowSpec_Entry + * @brief + */ +class TAO_AV_Export TAO_Reverse_FlowSpec_Entry + :public TAO_FlowSpec_Entry +{ +public: + enum Position {TAO_AV_FLOWNAME = 0, + TAO_AV_ADDRESS = 1, + TAO_AV_FLOW_PROTOCOL = 2, + TAO_AV_DIRECTION = 3, + TAO_AV_FORMAT = 4}; + + // default constructor. + TAO_Reverse_FlowSpec_Entry (void); + + // constructor to construct an entry from the arguments. + TAO_Reverse_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *carrier_protocol, + ACE_Addr *address, + ACE_Addr *control_address = 0); + + // Takes the address in protocol=endpoint form. + TAO_Reverse_FlowSpec_Entry (const char *flowname, + const char *direction, + const char *format_name, + const char *flow_protocol, + const char *address); + + virtual ~TAO_Reverse_FlowSpec_Entry (void); + + /// converts the entry to a string. + virtual const char *entry_to_string (void); + + virtual Role role (void); + + /// construct the entry from a string specified by the flowSpec grammar. + virtual int parse (const char* flowSpec_entry); +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#include "orbsvcs/AV/Transport.h" + +#if defined (__ACE_INLINE__) +#include "orbsvcs/AV/FlowSpec_Entry.inl" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* TAO_AV_FLOWSPEC_ENTRY_H */ |