X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcomstack.c;h=1d0ee940950bc0458428e2a86789997f77246178;hp=1755fc721ce985558037ee66f65d156311e672c0;hb=b822082114c8d580461eb58ff90de9a92e397b90;hpb=afb059d3e508ad4fd38f4a9fd643a4bedf3e0b3f diff --git a/src/comstack.c b/src/comstack.c index 1755fc7..1d0ee94 100644 --- a/src/comstack.c +++ b/src/comstack.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2013 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -21,14 +21,6 @@ #include #include -#if HAVE_GNUTLS_H -#define ENABLE_SSL 1 -#endif - -#if HAVE_OPENSSL_SSL_H -#define ENABLE_SSL 1 -#endif - static const char *cs_errlist[] = { "No error or unspecified error", @@ -87,9 +79,9 @@ void cs_get_host_args(const char *type_and_host, const char **args) } } -static int cs_parse_host(const char *uri, const char **host, - CS_TYPE *t, enum oid_proto *proto, - char **connect_host) +int cs_parse_host(const char *uri, const char **host, + CS_TYPE *t, enum oid_proto *proto, + char **connect_host) { *connect_host = 0; @@ -124,6 +116,8 @@ static int cs_parse_host(const char *uri, const char **host, uri = cp + 1; } #ifdef WIN32 + xfree(*connect_host); + *connect_host = 0; return 0; #else *t = unix_type; @@ -137,11 +131,13 @@ static int cs_parse_host(const char *uri, const char **host, } else if (strncmp (uri, "ssl:", 4) == 0) { -#if ENABLE_SSL +#if HAVE_GNUTLS_H *t = ssl_type; *host = uri + 4; *proto = PROTO_Z3950; #else + xfree(*connect_host); + *connect_host = 0; return 0; #endif } @@ -154,13 +150,15 @@ static int cs_parse_host(const char *uri, const char **host, } else if (strncmp(uri, "https:", 6) == 0) { -#if ENABLE_SSL +#if HAVE_GNUTLS_H *t = ssl_type; *host = uri + 6; while (**host == '/') (*host)++; *proto = PROTO_HTTP; #else + xfree(*connect_host); + *connect_host = 0; return 0; #endif } @@ -187,10 +185,7 @@ COMSTACK cs_create_host_proxy(const char *vhost, int blocking, void **vp, char *connect_host = 0; if (!cs_parse_host(vhost, &host, &t, &proto, &connect_host)) - { - xfree(connect_host); return 0; - } if (proxy_host) { @@ -198,15 +193,18 @@ COMSTACK cs_create_host_proxy(const char *vhost, int blocking, void **vp, xfree(connect_host); if (!cs_parse_host(proxy_host, &host, &t, &proto1, &connect_host)) - { - xfree(connect_host); return 0; - } } if (t == tcpip_type) { - cs = yaz_tcpip_create(-1, blocking, proto, connect_host ? host : 0); + const char *bind_host = strchr(vhost, ' '); + if (bind_host && bind_host[1]) + bind_host++; + else + bind_host = 0; + cs = yaz_tcpip_create2(-1, blocking, proto, connect_host ? host : 0, + bind_host); } else { @@ -427,7 +425,7 @@ static int cs_complete_auto_x(const char *buf, int len, int head_only) int r = cs_complete_http(buf, len, head_only); return r; } - return completeBER((const unsigned char *) buf, len); + return completeBER(buf, len); }