1 #include "opensrf/transport_client.h"
2 #include "opensrf/transport_message.h"
5 #include "osrfConfig.h"
6 #include "opensrf/utils.h"
10 Maintains a set of transport clients
13 struct __osrfTransportGroupStruct {
14 osrfHash* nodes; /* our hash of nodes keyed by domain */
15 osrfHashIterator* itr; /* points to the next node in the list */
17 typedef struct __osrfTransportGroupStruct osrfTransportGroup;
20 struct __osrfTransportGroupNode {
21 transport_client* connection; /* our connection to the network */
22 char* domain; /* the domain we're connected to */
23 char* username; /* username used to connect to the group of servers */
24 char* password; /* password used to connect to the group of servers */
25 char* resource; /* the login resource */
26 int port; /* port used to connect to the group of servers */
28 int active; /* true if we're able to send data on this connection */
29 time_t lastsent; /* the last time we sent a message */
31 typedef struct __osrfTransportGroupNode osrfTransportGroupNode;
35 Creates a new group node
36 @param domain The domain we're connecting to
37 @param port The port to connect on
38 @param username The login name
39 @param password The login password
40 @param resource The login resource
41 @return A new transport group node
43 osrfTransportGroupNode* osrfNewTransportGroupNode(
44 char* domain, int port, char* username, char* password, char* resource );
48 Allocates and initializes a new transport group.
49 The first node in the array is the default node for client connections.
50 @param nodes The nodes in the group.
52 osrfTransportGroup* osrfNewTransportGroup( osrfTransportGroupNode* nodes[], int count );
55 Attempts to connect all of the nodes in this group.
56 @param grp The transport group
57 @return The number of nodes successfully connected
59 int osrfTransportGroupConnect( osrfTransportGroup* grp );
63 Sends a transport message by going to the next domain in the set.
64 if we have a connection for the recipient domain, then we consider it to be
65 a 'local' message. Local messages have their recipient domains re-written to
66 match the domain of the next server in the set and they are sent directly to
67 that server. If we do not have a connection for the recipient domain, it is
68 considered a 'remote' message and the message is sent directly (unchanged)
69 to the next connection in the set.
71 @param grp The transport group
72 @param msg The message to send
73 @return 0 on normal successful send.
74 Returns -1 if the message cannot be sent.
76 int osrfTransportGroupSend( osrfTransportGroup* grp, transport_message* msg );
79 Sends the message to the exact recipient. No failover is attempted.
80 @return 0 on success, -1 on error.
82 int osrfTransportGroupSendMatch( osrfTransportGroup* grp, transport_message* msg );
85 int _osrfTGServerSend( osrfTransportGroup* grp, char* domain, transport_message* msg );
86 int _osrfTGClientSend( osrfTransportGroup* grp, char* domain, transport_message* msg );
89 Waits on all connections for inbound data.
90 @param grp The transport group
91 @param timeout How long to wait for data. 0 means check for data
92 but don't wait, a negative number means to wait indefinitely
93 @return The received message or NULL if the timeout occurred before a
96 transport_message* osrfTransportGroupRecvAll( osrfTransportGroup* grp, int timeout );
99 Waits for data from a single domain
100 @param grp The transport group
101 @param domain The domain to wait for data on
102 @param timeout see osrfTransportGroupRecvAll
104 transport_message* osrfTransportGroupRecv( osrfTransportGroup* grp, char* domain, int timeout );
107 Tells the group that a message to the given domain failed
108 domain did not make it through;
109 @param grp The transport group
110 @param comain The failed domain
112 void osrfTransportGroupSetInactive( osrfTransportGroup* grp, char* domain );
116 Finds a node in our list of nodes
118 osrfTransportGroupNode* __osrfTransportGroupFindNode( osrfTransportGroup* grp, char* domain );