2 @file osrf_app_session.h
3 @brief Header for osrfAppSession.
6 #ifndef OSRF_APP_SESSION_H
7 #define OSRF_APP_SESSION_H
9 #include "opensrf/transport_client.h"
10 #include "opensrf/osrf_message.h"
11 #include "opensrf/osrf_system.h"
12 #include "opensrf/string_array.h"
13 #include "opensrf/osrfConfig.h"
14 #include "opensrf/osrf_hash.h"
15 #include "opensrf/osrf_list.h"
16 #include "opensrf/osrf_json.h"
22 #define DEF_RECV_TIMEOUT 6 /* receive timeout */
23 #define DEF_QUEUE_SIZE
25 enum OSRF_SESSION_STATE {
26 OSRF_SESSION_CONNECTING,
27 OSRF_SESSION_CONNECTED,
28 OSRF_SESSION_DISCONNECTED
31 enum OSRF_SESSION_TYPE {
36 struct osrf_app_request_struct;
37 typedef struct osrf_app_request_struct osrfAppRequest;
39 #define OSRF_REQUEST_HASH_SIZE 64
42 @brief Representation of a session with another application.
44 An osrfAppSession is a list of lists. It includes a list of osrfAppRequests
45 representing outstanding requests. Each osrfAppRequest includes a list of
48 struct osrf_app_session_struct {
50 /** Our message passing object */
51 transport_client* transport_handle;
53 /** The original remote id of the remote service we're talking to */
55 /** The current remote id of the remote service we're talking to */
58 /** Whom we're talking to if we're a client;
59 what app we're serving if we're a server */
62 /** The current request thread_trace */
67 /** Boolean; true if this session does not require connect messages.
68 Assigned a value depending on the compile-time macro ASSUME_STATELESS. */
71 /** The connect state */
72 enum OSRF_SESSION_STATE state;
74 /** SERVER or CLIENT */
75 enum OSRF_SESSION_TYPE type;
77 /** the current locale for this session. **/
80 /** let the user use the session to store their own session data. */
83 /** Callback function for freeing user's session data. */
84 void (*userDataFree) (void*);
88 /** Hash table of pending requests. */
89 osrfAppRequest* request_hash[ OSRF_REQUEST_HASH_SIZE ];
91 typedef struct osrf_app_session_struct osrfAppSession;
93 // --------------------------------------------------------------------------
95 // --------------------------------------------------------------------------
97 osrfAppSession* osrfAppSessionClientInit( const char* remote_service );
99 osrfAppSession* osrf_app_server_session_init(
100 const char* session_id, const char* our_app, const char* remote_id );
102 char* osrf_app_session_set_locale( osrfAppSession*, const char* );
104 osrfAppSession* osrf_app_session_find_session( const char* session_id );
106 /* DEPRECATED; use osrfAppSessionSendRequest() instead. */
107 int osrfAppSessionMakeRequest(
108 osrfAppSession* session, const jsonObject* params,
109 const char* method_name, int protocol, osrfStringArray* param_strings);
111 int osrfAppSessionSendRequest(
112 osrfAppSession* session, const jsonObject* params,
113 const char* method_name, int protocol );
115 void osrf_app_session_set_complete( osrfAppSession* session, int request_id );
117 int osrf_app_session_request_complete( const osrfAppSession* session, int request_id );
119 osrfMessage* osrfAppSessionRequestRecv(
120 osrfAppSession* session, int request_id, int timeout );
122 void osrf_app_session_request_finish( osrfAppSession* session, int request_id );
124 int osrf_app_session_request_resend( osrfAppSession*, int request_id );
126 void osrf_app_session_reset_remote( osrfAppSession* );
128 void osrf_app_session_set_remote( osrfAppSession* session, const char* remote_id );
130 void osrf_app_session_push_queue( osrfAppSession*, osrfMessage* msg );
132 int osrfAppSessionConnect( osrfAppSession* );
134 int osrf_app_session_disconnect( osrfAppSession* );
136 int osrf_app_session_queue_wait( osrfAppSession*, int timeout, int* recvd );
138 void osrfAppSessionFree( osrfAppSession* );
140 void osrf_app_session_request_reset_timeout( osrfAppSession* session, int req_id );
142 int osrfAppRequestRespond( osrfAppSession* ses, int requestId, const jsonObject* data );
144 int osrfAppRequestRespondComplete(
145 osrfAppSession* ses, int requestId, const jsonObject* data );
147 int osrfAppSessionStatus( osrfAppSession* ses, int type,
148 const char* name, int reqId, const char* message );
150 void osrfAppSessionCleanup( void );