c->host_port = 0;
c->proxy = 0;
c->tproxy = 0;
+ c->proxy_mode = 0;
c->charset = c->lang = 0;
if (c->cs)
cs_close(c->cs);
- c->cs = cs_create_host_proxy(logical_url, CS_FLAGS_DNS_NO_BLOCK, &add,
- c->tproxy ? c->tproxy : c->proxy);
+ c->cs = cs_create_host2(logical_url, CS_FLAGS_DNS_NO_BLOCK, &add,
+ c->tproxy ? c->tproxy : c->proxy,
+ &c->proxy_mode);
+ if (!c->proxy)
+ c->proxy_mode = 0;
if (c->cs && c->cs->protocol == PROTO_HTTP)
{
if (!z_GDU(c->odr_in, &gdu, 0, 0))
{
- int x;
- int err = odr_geterrorx(c->odr_in, &x);
- char msg[100];
- const char *element = odr_getelement(c->odr_in);
- yaz_snprintf(msg, sizeof(msg),
- "ODR code %d:%d element=%s offset=%d",
- err, x, element ? element : "<unknown>",
- odr_offset(c->odr_in));
- ZOOM_set_error(c, ZOOM_ERROR_DECODE, msg);
- if (c->log_api)
+ /* even on failures we try to re-connect (HTTP) */
+ if (!ZOOM_test_reconnect(c))
{
- FILE *ber_file = yaz_log_file();
- if (ber_file)
- odr_dumpBER(ber_file, c->buf_in, r);
+ int x;
+ int err = odr_geterrorx(c->odr_in, &x);
+ char msg[100];
+ const char *element = odr_getelement(c->odr_in);
+ yaz_snprintf(msg, sizeof(msg),
+ "ODR code %d:%d element=%s offset=%d",
+ err, x, element ? element : "<unknown>",
+ odr_offset(c->odr_in));
+ ZOOM_set_error(c, ZOOM_ERROR_DECODE, msg);
+ if (c->log_api)
+ {
+ FILE *ber_file = yaz_log_file();
+ if (ber_file)
+ odr_dumpBER(ber_file, c->buf_in, r);
+ }
+ ZOOM_connection_close(c);
}
- ZOOM_connection_close(c);
}
else
{