void* serviceConnection(void* psa) { int success; connection conn; http_server srv; http_request request; http_response response; meta_error e = meta_error_new(); conn = (connection)psa; srv = connection_arg2(conn); request = http_server_get_request(srv); response = http_server_get_response(srv); success = serviceConnection2(srv, conn, request, response, e); if(!success && is_tcpip_error(e)) { connection_discard(conn); } else { connection_close(conn); } http_server_recycle_request(srv, request); http_server_recycle_response(srv, response); meta_error_free(e); return (void*)success; }
void die_with_error(meta_error e, const char *fmt, ...) { va_list ap; int rc; va_start(ap, fmt); if (is_tcpip_error(e)) syslog(LOG_ERR, "A tcp/ip error has occured"); else if (is_protocol_error(e)) syslog(LOG_ERR, "A protocol error has occured"); else if (is_app_error(e)) syslog(LOG_ERR, "A application error has occured"); else if (is_os_error(e)) syslog(LOG_ERR, "A os error has occured"); else if (is_db_error(e)) syslog(LOG_ERR, "A database error has occured"); else if (is_other_error(e)) syslog(LOG_ERR, "An unknown error has occured"); if (has_error_message(e)) syslog(LOG_ERR, "Error message: %s", get_error_message(e)); else if ((rc = get_error_code(e)) != 0) syslog(LOG_ERR, "Possible error: %d %s\n", rc, strerror(rc)); meta_vsyslog(LOG_ERR, fmt, ap); va_end(ap); exit(EXIT_FAILURE); }