]> git.evergreen-ils.org Git - Evergreen.git/blob - OpenSRF/src/libstack/osrf_transgroup.h
cleaned up the code some
[Evergreen.git] / OpenSRF / src / libstack / osrf_transgroup.h
1 #include "opensrf/transport_client.h"
2 #include "opensrf/transport_message.h"
3 #include "osrf_list.h"
4 #include "osrf_hash.h"
5 #include "osrfConfig.h"
6 #include "opensrf/utils.h"
7 #include <time.h>
8
9 /**
10   Maintains a set of transport clients 
11   */
12
13 struct __osrfTransportGroupStruct {
14         osrfHash* nodes;                                                /* our hash of nodes keyed by domain */
15         osrfHashIterator* itr;                          /* points to the next node in the list */
16 };
17 typedef struct __osrfTransportGroupStruct osrfTransportGroup;
18
19
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 */
27
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 */
30 };
31 typedef struct __osrfTransportGroupNode osrfTransportGroupNode;
32
33
34 /**
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
42   */
43 osrfTransportGroupNode* osrfNewTransportGroupNode( 
44                 char* domain, int port, char* username, char* password, char* resource );
45
46
47 /**
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.
51   */
52 osrfTransportGroup* osrfNewTransportGroup( osrfTransportGroupNode* nodes[], int count );
53
54 /**
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
58   */
59 int osrfTransportGroupConnect( osrfTransportGroup* grp );
60
61
62 /**
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.
70
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.  
75   */
76 int osrfTransportGroupSend( osrfTransportGroup* grp, transport_message* msg );
77
78 /**
79   Sends the message to the exact recipient.  No failover is attempted.
80   @return 0 on success, -1 on error.
81   */
82 int osrfTransportGroupSendMatch( osrfTransportGroup* grp, transport_message* msg );
83
84
85 int _osrfTGServerSend( osrfTransportGroup* grp, char* domain, transport_message* msg );
86 int _osrfTGClientSend( osrfTransportGroup* grp, char* domain, transport_message* msg );
87
88 /**
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 
94   message was received 
95  */
96 transport_message* osrfTransportGroupRecvAll( osrfTransportGroup* grp, int timeout );
97
98 /**
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
103   */
104 transport_message* osrfTransportGroupRecv( osrfTransportGroup* grp, char* domain, int timeout );
105
106 /**
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
111   */
112 void osrfTransportGroupSetInactive( osrfTransportGroup* grp, char* domain );
113
114
115 /**
116   Finds a node in our list of nodes 
117   */
118 osrfTransportGroupNode* __osrfTransportGroupFindNode( osrfTransportGroup* grp, char* domain );
119
120