all opensrf related headers are shoved into opensrf/*.h
[working/Evergreen.git] / OpenSRF / src / libtransport / transport_client.h
1 #include "transport_session.h"
2 #include "opensrf/utils.h"
3 #include "opensrf/logging.h"
4
5 #include <time.h>
6
7 #ifndef TRANSPORT_CLIENT_H
8 #define TRANSPORT_CLIENT_H
9
10 #define MESSAGE_LIST_HEAD 1
11 #define MESSAGE_LIST_ITEM 2
12
13
14 // ---------------------------------------------------------------------------
15 // Represents a node in a linked list.  The node holds a pointer to the next
16 // node (which is null unless set), a pointer to a transport_message, and
17 // and a type variable (which is not really curently necessary).
18 // ---------------------------------------------------------------------------
19 struct message_list_struct {
20         struct message_list_struct* next;
21         transport_message* message;
22         int type;
23 };
24
25 typedef struct message_list_struct transport_message_list;
26 typedef struct message_list_struct transport_message_node;
27
28 // ---------------------------------------------------------------------------
29 // Our client struct.  We manage a list of messages and a controlling session
30 // ---------------------------------------------------------------------------
31 struct transport_client_struct {
32         transport_message_list* m_list;
33         transport_session* session;
34 };
35 typedef struct transport_client_struct transport_client;
36
37 // ---------------------------------------------------------------------------
38 // Allocates and initializes and transport_client.  This does no connecting
39 // The user must call client_free(client) when finished with the allocated
40 // object.
41 // if port > 0 => connect via TCP
42 // else if unix_path != NULL => connect via UNIX socket
43 // ---------------------------------------------------------------------------
44 transport_client* client_init( char* server, int port, char* unix_path, int component );
45
46
47 // ---------------------------------------------------------------------------
48 // Connects to the Jabber server with the provided information. Returns 1 on
49 // success, 0 otherwise.
50 // ---------------------------------------------------------------------------
51 int client_connect( transport_client* client, 
52                 char* username, char* password, char* resource, 
53                 int connect_timeout, enum TRANSPORT_AUTH_TYPE auth_type );
54
55
56 int client_disconnect( transport_client* client );
57
58 // ---------------------------------------------------------------------------
59 // De-allocates memory associated with a transport_client object.  Users
60 // must use this method when finished with a client object.
61 // ---------------------------------------------------------------------------
62 int client_free( transport_client* client );
63
64 // ---------------------------------------------------------------------------
65 //  Sends the given message.  The message must at least have the recipient
66 // field set.
67 // ---------------------------------------------------------------------------
68 int client_send_message( transport_client* client, transport_message* msg );
69
70 // ---------------------------------------------------------------------------
71 // Returns 1 if this client is currently connected to the server, 0 otherwise
72 // ---------------------------------------------------------------------------
73 int client_connected( transport_client* client );
74
75 // ---------------------------------------------------------------------------
76 // This is the message handler required by transport_session.  This handler
77 // takes all incoming messages and puts them into the back of a linked list
78 // of messages.  
79 // ---------------------------------------------------------------------------
80 void client_message_handler( void* client, transport_message* msg );
81
82 // ---------------------------------------------------------------------------
83 // If there are any message in the message list, the 'oldest' message is
84 // returned.  If not, this function will wait at most 'timeout' seconds 
85 // for a message to arrive.  Specifying -1 means that this function will not
86 // return unless a message arrives.
87 // ---------------------------------------------------------------------------
88 transport_message* client_recv( transport_client* client, int timeout );
89
90
91 #endif