projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Using the ICU wrapper from YAZ rather than its own.
[pazpar2-moved-to-github.git]
/
src
/
connection.c
diff --git
a/src/connection.c
b/src/connection.c
index
b567114
..
528fef4
100644
(file)
--- a/
src/connection.c
+++ b/
src/connection.c
@@
-34,19
+34,8
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef WIN32
-#include <winsock.h>
-typedef int socklen_t;
-#endif
-#if HAVE_NETDB_H
-#include <netdb.h>
-#endif
#include <signal.h>
#include <signal.h>
-#include <ctype.h>
#include <assert.h>
#include <yaz/log.h>
#include <assert.h>
#include <yaz/log.h>
@@
-92,9
+81,10
@@
static int connection_is_idle(struct connection *co)
if (co->state != Conn_Open || !link)
return 0;
if (co->state != Conn_Open || !link)
return 0;
+ if (!ZOOM_connection_is_idle(link))
+ return 0;
event = ZOOM_connection_peek_event(link);
event = ZOOM_connection_peek_event(link);
- if (event == ZOOM_EVENT_NONE ||
- event == ZOOM_EVENT_END)
+ if (event == ZOOM_EVENT_NONE || event == ZOOM_EVENT_END)
return 1;
else
return 0;
return 1;
else
return 0;
@@
-133,12
+123,6
@@
static void remove_connection_from_host(struct connection *con)
assert(*conp == 0);
}
assert(*conp == 0);
}
-void connection_continue(struct connection *co)
-{
- yaz_log(YLOG_LOG, "connection_continue");
- iochan_setevent(co->iochan, EVENT_OUTPUT);
-}
-
// Close connection and recycle structure
void connection_destroy(struct connection *co)
{
// Close connection and recycle structure
void connection_destroy(struct connection *co)
{
@@
-192,9
+176,10
@@
static struct connection *connection_create(struct client *cl)
return new;
}
return new;
}
-static void non_block_events(struct connection *co, IOCHAN iochan)
+static void non_block_events(struct connection *co)
{
struct client *cl = co->client;
{
struct client *cl = co->client;
+ IOCHAN iochan = co->iochan;
ZOOM_connection link = co->link;
while (1)
{
ZOOM_connection link = co->link;
while (1)
{
@@
-203,10
+188,21
@@
static void non_block_events(struct connection *co, IOCHAN iochan)
if (!r)
break;
ev = ZOOM_connection_last_event(link);
if (!r)
break;
ev = ZOOM_connection_last_event(link);
+#if 0
+ yaz_log(YLOG_LOG, "ZOOM_EVENT_%s", ZOOM_get_event_str(ev));
+#endif
switch (ev)
{
case ZOOM_EVENT_END:
switch (ev)
{
case ZOOM_EVENT_END:
- client_set_state(co->client, Client_Idle);
+ {
+ const char *error, *addinfo;
+ if (ZOOM_connection_error(link, &error, &addinfo))
+ {
+ yaz_log(YLOG_LOG, "Error %s from %s",
+ error, client_get_url(cl));
+ }
+ client_set_state(cl, Client_Idle);
+ }
break;
case ZOOM_EVENT_SEND_DATA:
break;
break;
case ZOOM_EVENT_SEND_DATA:
break;
@@
-222,15
+218,12
@@
static void non_block_events(struct connection *co, IOCHAN iochan)
case ZOOM_EVENT_CONNECT:
yaz_log(YLOG_LOG, "Connected to %s", client_get_url(cl));
co->state = Conn_Open;
case ZOOM_EVENT_CONNECT:
yaz_log(YLOG_LOG, "Connected to %s", client_get_url(cl));
co->state = Conn_Open;
- client_set_state(co->client, Client_Connected);
iochan_settimeout(iochan, global_parameters.z3950_session_timeout);
break;
case ZOOM_EVENT_RECV_SEARCH:
iochan_settimeout(iochan, global_parameters.z3950_session_timeout);
break;
case ZOOM_EVENT_RECV_SEARCH:
- yaz_log(YLOG_LOG, "Search response from %s", client_get_url(cl));
client_search_response(cl);
break;
case ZOOM_EVENT_RECV_RECORD:
client_search_response(cl);
break;
case ZOOM_EVENT_RECV_RECORD:
- yaz_log(YLOG_LOG, "Record from %s", client_get_url(cl));
client_record_response(cl);
break;
default:
client_record_response(cl);
break;
default:
@@
-240,6
+233,11
@@
static void non_block_events(struct connection *co, IOCHAN iochan)
}
}
}
}
+void connection_continue(struct connection *co)
+{
+ non_block_events(co);
+}
+
static void connection_handler(IOCHAN iochan, int event)
{
struct connection *co = iochan_getdata(iochan);
static void connection_handler(IOCHAN iochan, int event)
{
struct connection *co = iochan_getdata(iochan);
@@
-269,11
+267,11
@@
static void connection_handler(IOCHAN iochan, int event)
}
else
{
}
else
{
- non_block_events(co, iochan);
+ non_block_events(co);
ZOOM_connection_fire_event_socket(co->link, event);
ZOOM_connection_fire_event_socket(co->link, event);
- non_block_events(co, iochan);
+ non_block_events(co);
}
}
}
}
@@
-400,16
+398,7
@@
static int connection_connect(struct connection *con)
if (sru && *sru)
strcpy(ipport, "http://");
strcat(ipport, host->ipport);
if (sru && *sru)
strcpy(ipport, "http://");
strcat(ipport, host->ipport);
- /* deal with SRU path here because databaseName option is not read in
- ZOOM in SRU mode */
- if (sru && *sru)
- {
- if (*sdb->database->databases[0])
- {
- strcat(ipport, "/");
- strcat(ipport, sdb->database->databases[0]);
- }
- }
+
ZOOM_connection_connect(link, ipport, 0);
con->link = link;
ZOOM_connection_connect(link, ipport, 0);
con->link = link;
@@
-471,9
+460,14
@@
int client_prep_connection(struct client *cl)
connection_release(co);
client_set_connection(cl, co);
co->client = cl;
connection_release(co);
client_set_connection(cl, co);
co->client = cl;
+ /* tells ZOOM to reconnect if necessary. Disabled becuase
+ the ZOOM_connection_connect flushes the task queue */
+ ZOOM_connection_connect(co->link, 0, 0);
}
else
}
else
+ {
co = connection_create(cl);
co = connection_create(cl);
+ }
}
if (co && co->link)
}
if (co && co->link)