X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=comstack%2Fcomstack.c;h=07903eb7d9f3cdacb8b9f9505d3514231158b40f;hb=34203146338c5f6c89774bde4caad110345405bd;hp=d46b49ebc8af86cf525bb8cbeaff0d04be38ed5c;hpb=a2a7abe97309bb4b8e153145a00bd9817957dad7;p=yaz-moved-to-github.git diff --git a/comstack/comstack.c b/comstack/comstack.c index d46b49e..07903eb 100644 --- a/comstack/comstack.c +++ b/comstack/comstack.c @@ -1,31 +1,14 @@ /* - * Copyright (c) 1995-1997, Index Data + * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: comstack.c,v $ - * Revision 1.4 1997-09-29 07:16:14 adam - * Array cs_errlist no longer global. - * - * Revision 1.3 1997/09/01 08:49:14 adam - * New windows NT/95 port using MSV5.0. Minor changes only. - * - * Revision 1.2 1995/09/29 17:01:48 quinn - * More Windows work - * - * Revision 1.1 1995/06/14 09:58:20 quinn - * Renamed yazlib to comstack. - * - * Revision 1.2 1995/05/16 08:51:15 quinn - * License, documentation, and memory fixes - * - * Revision 1.1 1995/03/14 10:28:34 quinn - * Adding server-side support to tcpip.c and fixing bugs in nonblocking I/O - * * + * $Id: comstack.c,v 1.11 2003-02-14 18:49:23 adam Exp $ */ -#include +#include +#include +#include +#include static const char *cs_errlist[] = { @@ -33,10 +16,71 @@ static const char *cs_errlist[] = "System (lower-layer) error", "Operation out of state", "No data (operation would block)", - "New data while half of old buffer is on the line (flow control)" + "New data while half of old buffer is on the line (flow control)", + "Permission denied", + "SSL error" }; const char *cs_errmsg(int n) { + if (n < 0 || n > 6) + n = 0; return cs_errlist[n]; } + +const char *cs_strerror(COMSTACK h) +{ + return cs_errmsg(h->cerrno); +} + +COMSTACK cs_create_host(const char *type_and_host, int blocking, void **vp) +{ + const char *host = 0; + COMSTACK cs; + CS_TYPE t; + + if (strncmp (type_and_host, "tcp:", 4) == 0) + { + t = tcpip_type; + host = type_and_host + 4; + } + else if (strncmp (type_and_host, "ssl:", 4) == 0) + { +#if HAVE_OPENSSL_SSL_H + t = ssl_type; + host = type_and_host + 4; +#else + return 0; +#endif + } + else if (strncmp (type_and_host, "unix:", 5) == 0) + { +#ifndef WIN32 + t = unix_type; + host = type_and_host + 5; +#else + return 0; +#endif + } + else + { + t = tcpip_type; + host = type_and_host; + + } + cs = cs_create (t, blocking, PROTO_Z3950); + if (!cs) + return 0; + + if (!(*vp = cs_straddr(cs, host))) + { + cs_close (cs); + return 0; + } + return cs; +} + +int cs_look (COMSTACK cs) +{ + return cs->event; +}