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 enum OSRF_SESSION_STATE {
23 OSRF_SESSION_CONNECTING,
24 OSRF_SESSION_CONNECTED,
25 OSRF_SESSION_DISCONNECTED
28 enum OSRF_SESSION_TYPE {
33 struct osrf_app_request_struct;
34 typedef struct osrf_app_request_struct osrfAppRequest;
36 #define OSRF_REQUEST_HASH_SIZE 64
39 @brief Representation of a session with another application.
41 An osrfAppSession is a list of lists. It includes a list of osrfAppRequests
42 representing outstanding requests. Each osrfAppRequest includes a list of
45 struct osrf_app_session_struct {
47 /** Our message passing object */
48 transport_client* transport_handle;
50 /** The original remote id of the remote service we're talking to */
52 /** The current remote id of the remote service we're talking to */
55 /** Whom we're talking to if we're a client;
56 what app we're serving if we're a server */
59 /** The current request thread_trace */
64 /** Boolean; true if this session does not require connect messages.
65 Assigned a value depending on the compile-time macro ASSUME_STATELESS. */
68 /** The connect state */
69 enum OSRF_SESSION_STATE state;
71 /** SERVER or CLIENT */
72 enum OSRF_SESSION_TYPE type;
74 /** the current locale for this session. **/
77 /** let the user use the session to store their own session data. */
80 /** Callback function for freeing user's session data. */
81 void (*userDataFree) (void*);
85 /** Hash table of pending requests. */
86 osrfAppRequest* request_hash[ OSRF_REQUEST_HASH_SIZE ];
88 /** Boolean: true if the app wants to terminate the process. Typically this means that */
89 /** a drone has lost its database connection and can therefore no longer function. */
92 /** Buffer used by server drone to collect outbound response messages */
93 growing_buffer* outbuf;
95 typedef struct osrf_app_session_struct osrfAppSession;
97 // --------------------------------------------------------------------------
99 // --------------------------------------------------------------------------
101 osrfAppSession* osrfAppSessionClientInit( const char* remote_service );
103 osrfAppSession* osrf_app_server_session_init(
104 const char* session_id, const char* our_app, const char* remote_id );
106 char* osrf_app_session_set_locale( osrfAppSession*, const char* );
108 /* ingress used by all sessions until replaced */
109 char* osrfAppSessionSetIngress( const char* );
111 const char* osrfAppSessionGetIngress();
113 osrfAppSession* osrf_app_session_find_session( const char* session_id );
115 /* DEPRECATED; use osrfAppSessionSendRequest() instead. */
116 int osrfAppSessionMakeRequest(
117 osrfAppSession* session, const jsonObject* params,
118 const char* method_name, int protocol, osrfStringArray* param_strings);
120 int osrfAppSessionSendRequest(
121 osrfAppSession* session, const jsonObject* params,
122 const char* method_name, int protocol );
124 void osrf_app_session_set_complete( osrfAppSession* session, int request_id );
126 int osrf_app_session_request_complete( const osrfAppSession* session, int request_id );
128 osrfMessage* osrfAppSessionRequestRecv(
129 osrfAppSession* session, int request_id, int timeout );
131 void osrf_app_session_request_finish( osrfAppSession* session, int request_id );
133 int osrf_app_session_request_resend( osrfAppSession*, int request_id );
135 int osrfSendTransportPayload( osrfAppSession* session, const char* payload );
137 void osrf_app_session_reset_remote( osrfAppSession* );
139 void osrf_app_session_set_remote( osrfAppSession* session, const char* remote_id );
141 void osrf_app_session_push_queue( osrfAppSession*, osrfMessage* msg );
143 int osrfAppSessionConnect( osrfAppSession* );
145 int osrf_app_session_disconnect( osrfAppSession* );
147 int osrf_app_session_queue_wait( osrfAppSession*, int timeout, int* recvd );
149 void osrfAppSessionFree( osrfAppSession* );
151 void osrf_app_session_request_reset_timeout( osrfAppSession* session, int req_id );
153 int osrfAppRequestRespond( osrfAppSession* ses, int requestId, const jsonObject* data );
155 int osrfAppRequestRespondComplete(
156 osrfAppSession* ses, int requestId, const jsonObject* data );
158 int osrfAppSessionStatus( osrfAppSession* ses, int type,
159 const char* name, int reqId, const char* message );
161 void osrfAppSessionCleanup( void );
163 void osrfAppSessionPanic( osrfAppSession* ses );