*/
#include "httpd.h"
-#include "http_log.h"
-#include "http_log.h"
#include "apr_strings.h"
#include "apr_thread_proc.h"
#include "apr_hash.h"
#include "websocket_plugin.h"
+#include "opensrf/log.h"
#include "opensrf/osrf_json.h"
#include "opensrf/transport_client.h"
#include "opensrf/transport_message.h"
*/
void* APR_THREAD_FUNC osrf_responder_thread_main(apr_thread_t *thread, void *data) {
- request_rec *r = trans->server->request(trans->server);
transport_message *tmsg;
jsonObject *msg_wrapper;
char *msg_string;
while (1) {
tmsg = client_recv(osrf_handle, -1);
+
if (!tmsg) continue; // early exit on interrupt
// discard responses received after client disconnect
if (!trans->client_connected) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ osrfLogDebug(OSRF_LOG_MARK,
"WS discarding response for thread=%s, xid=%s",
- tmsg->thread, tmsg->osrf_xid);
+ tmsg->thread, tmsg->osrf_xid);
message_free(tmsg);
continue;
}
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+
+ osrfLogDebug(OSRF_LOG_MARK,
"WS received opensrf response for thread=%s, xid=%s",
tmsg->thread, tmsg->osrf_xid);
jsonObjectSetKey(msg_wrapper, "osrf_msg", jsonParseRaw(tmsg->body));
if (tmsg->is_error) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ fprintf(stderr,
"WS received jabber error message in response to thread=%s and xid=%s",
- tmsg->thread, tmsg->osrf_xid);
+ tmsg->thread, tmsg->osrf_xid);
+ fflush(stderr);
jsonObjectSetKey(msg_wrapper, "transport_error", jsonNewBoolObject(1));
}
// a last-touched timeout mechanism to periodically remove old entries
if (!apr_hash_get(trans->session_cache, tmsg->thread, APR_HASH_KEY_STRING)) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ osrfLogDebug(OSRF_LOG_MARK,
"WS caching sender thread=%s, sender=%s", tmsg->thread, tmsg->sender);
apr_hash_set(trans->session_cache,
apr_threadattr_t *thread_attr = NULL;
request_rec *r = server->request(server);
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "WS child_init");
+ osrfLogDebug(OSRF_LOG_MARK, "WS child_init");
// osrf_handle will already be connected if this is not the first request
// served by this process.
char* config_file = "/openils/conf/opensrf_core.xml";
char* config_ctx = "gateway"; //TODO config
if (!osrfSystemBootstrapClientResc(config_file, config_ctx, "websocket")) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ osrfLogError(OSRF_LOG_MARK,
"WS unable to bootstrap OpenSRF client with config %s", config_file);
return 1;
}
// create a standalone pool for our translator data
if (apr_pool_create(&pool, NULL) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "WS Unable to create apr_pool");
+ osrfLogError(OSRF_LOG_MARK, "WS Unable to create apr_pool");
return 1;
}
apr_palloc(pool, sizeof(osrfWebsocketTranslator));
if (trans == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "WS Unable to create translator");
+ osrfLogError(OSRF_LOG_MARK, "WS Unable to create translator");
return 1;
}
trans->responder_thread = thread;
} else {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "WS unable to create responder thread");
+ osrfLogError(OSRF_LOG_MARK, "WS unable to create responder thread");
return 1;
}
request_rec *r = server->request(server);
apr_pool_t *pool;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ osrfLogDebug(OSRF_LOG_MARK,
"WS connect from %s", r->connection->remote_ip);
//"WS connect from %s", r->connection->client_ip); // apache 2.4
// create a standalone pool for the session cache values, which will be
// destroyed on client disconnect.
if (apr_pool_create(&pool, trans->main_pool) != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "WS Unable to create apr_pool");
+ osrfLogError(OSRF_LOG_MARK, "WS Unable to create apr_pool");
return NULL;
}
trans->session_cache = apr_hash_make(trans->session_pool);
if (trans->session_cache == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
- "WS unable to create session cache");
+ osrfLogError(OSRF_LOG_MARK, "WS unable to create session cache");
return NULL;
}
if (buffer_size <= 0) return OK;
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "WS received message size=%d", buffer_size);
+ osrfLogDebug(OSRF_LOG_MARK, "WS received message size=%d", buffer_size);
// buffer may not be \0-terminated, which jsonParse requires
char buf[buffer_size + 1];
msg_wrapper = jsonParseRaw(buf);
if (msg_wrapper == NULL) {
- ap_log_rerror(APLOG_MARK,
- APLOG_NOTICE, 0, r, "WS Invalid JSON: %s", buf);
+ osrfLogWarning(OSRF_LOG_MARK, "WS Invalid JSON: %s", buf);
return HTTP_BAD_REQUEST;
}
// use the caller-provide log trace id
if (strlen(log_xid) > MAX_THREAD_SIZE) {
- ap_log_rerror(APLOG_MARK, APLOG_NOTICE,
- 0, r, "WS log_xid exceeds max length");
+ osrfLogWarning(OSRF_LOG_MARK, "WS log_xid exceeds max length");
return HTTP_BAD_REQUEST;
}
if (thread) {
if (strlen(thread) > MAX_THREAD_SIZE) {
- ap_log_rerror(APLOG_MARK, APLOG_NOTICE,
- 0, r, "WS thread exceeds max length");
+ osrfLogWarning(OSRF_LOG_MARK, "WS thread exceeds max length");
return HTTP_BAD_REQUEST;
}
trans->session_cache, thread, APR_HASH_KEY_STRING);
if (recipient) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "WS found cached recipient %s", recipient);
+ osrfLogDebug(OSRF_LOG_MARK, "WS found cached recipient %s", recipient);
}
}
recipient = recipient_buf;
} else {
- ap_log_rerror(APLOG_MARK, APLOG_NOTICE,
- 0, r, "WS Unable to determine recipient");
+ osrfLogWarning(OSRF_LOG_MARK, "WS Unable to determine recipient");
return HTTP_BAD_REQUEST;
}
}
// TODO: activity log entry? -- requires message analysis
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ osrfLogDebug(OSRF_LOG_MARK,
"WS relaying message thread=%s, xid=%s, recipient=%s",
thread, osrfLogGetXid(), recipient);
trans->session_cache = NULL;
request_rec *r = server->request(server);
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
+ osrfLogDebug(OSRF_LOG_MARK,
"WS disconnect from %s", r->connection->remote_ip);
//"WS disconnect from %s", r->connection->client_ip); // apache 2.4
}