/* This file is part of Pazpar2.
- Copyright (C) 2006-2009 Index Data
+ Copyright (C) 2006-2010 Index Data
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
struct connection *next; // next for same host or next in free list
};
-static struct connection *connection_freelist = 0;
+static struct connection *connection_freelist = 0; /* thread pr */
-static int connection_connect(struct connection *con);
+static int connection_connect(struct connection *con, iochan_man_t iochan_man);
static int connection_is_idle(struct connection *co)
{
// client's database
static struct connection *connection_create(struct client *cl,
int operation_timeout,
- int session_timeout)
+ int session_timeout,
+ iochan_man_t iochan_man)
{
struct connection *new;
struct host *host = client_get_host(cl);
new->operation_timeout = operation_timeout;
new->session_timeout = session_timeout;
if (host->ipport)
- connection_connect(new);
+ connection_connect(new, iochan_man);
return new;
}
co->client = 0;
}
-void connect_resolver_host(struct host *host)
+void connect_resolver_host(struct host *host, iochan_man_t iochan_man)
{
struct connection *con = host->connections;
while (con)
}
else
{
- connection_connect(con);
+ connection_connect(con, iochan_man);
client_start_search(con->client);
}
}
return ZOOM_connection_get_mask(co->link);
}
-static int connection_connect(struct connection *con)
+static int connection_connect(struct connection *con, iochan_man_t iochan_man)
{
ZOOM_connection link = 0;
struct host *host = connection_get_host(con);
ZOOM_options zoptions = ZOOM_options_create();
const char *auth;
+ const char *charset;
const char *sru;
const char *sru_version = 0;
ZOOM_options_set(zoptions, "async", "1");
ZOOM_options_set(zoptions, "implementationName", PACKAGE_NAME);
ZOOM_options_set(zoptions, "implementationVersion", VERSION);
+
+ if ((charset = session_setting_oneval(sdb, PZ_NEGOTIATION_CHARSET)))
+ ZOOM_options_set(zoptions, "charset", charset);
+
if (zproxy && *zproxy)
{
con->zproxy = xstrdup(zproxy);
iochan_setdata(con->iochan, con);
iochan_setsocketfun(con->iochan, socketfun);
iochan_setmaskfun(con->iochan, maskfun);
- pazpar2_add_channel(con->iochan);
+ iochan_add(iochan_man, con->iochan);
/* this fragment is bad DRY: from client_prep_connection */
client_set_state(con->client, Client_Connecting);
// Ensure that client has a connection associated
int client_prep_connection(struct client *cl,
- int operation_timeout, int session_timeout)
+ int operation_timeout, int session_timeout,
+ iochan_man_t iochan_man)
{
struct connection *co;
struct session *se = client_get_session(cl);
}
else
{
- co = connection_create(cl, operation_timeout, session_timeout);
+ co = connection_create(cl, operation_timeout, session_timeout,
+ iochan_man);
}
}