X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=comstack%2Ftcpip.c;h=ab08873e7921043b0ccfe2a762d09c351bbfc7b8;hb=29a22396d7d7b1219f5b83c35983c8fb1cd79e8f;hp=b1f4f737562fd7b34912662916a7bc6e013bae3c;hpb=4ca818ec201c9dcf5461e419002c95fd2eac620e;p=yaz-moved-to-github.git diff --git a/comstack/tcpip.c b/comstack/tcpip.c index b1f4f73..ab08873 100644 --- a/comstack/tcpip.c +++ b/comstack/tcpip.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. * - * $Id: tcpip.c,v 1.55 2003-02-21 12:08:57 adam Exp $ + * $Id: tcpip.c,v 1.59 2003-10-08 21:47:15 adam Exp $ */ #include @@ -134,19 +134,19 @@ COMSTACK tcpip_type(int s, int blocking, int protocol, void *vp) xmalloc(sizeof(tcpip_state))))) return 0; + if (!((p->blocking = blocking)&1)) + { #ifdef WIN32 - if (!(p->blocking = blocking) && ioctlsocket(s, FIONBIO, &tru) < 0) - return 0; + if (ioctlsocket(s, FIONBIO, &tru) < 0) + return 0; #else - if (!(p->blocking = blocking)) - { if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) return 0; #ifndef MSG_NOSIGNAL signal (SIGPIPE, SIG_IGN); #endif - } #endif + } p->io_pending = 0; p->iofile = s; @@ -225,11 +225,12 @@ COMSTACK ssl_type(int s, int blocking, int protocol, void *vp) } #endif -int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add) +int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add, + int default_port) { struct hostent *hp; char *p, buf[512]; - short int port = 210; + short int port = default_port; unsigned tmpadd; if (!tcpip_init ()) @@ -261,8 +262,12 @@ int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add) void *tcpip_straddr(COMSTACK h, const char *str) { tcpip_state *sp = (tcpip_state *)h->cprivate; + int port = 210; + + if (h->protocol == PROTO_HTTP) + port = 80; - if (!tcpip_strtoaddr_ex (str, &sp->addr)) + if (!tcpip_strtoaddr_ex (str, &sp->addr, port)) return 0; return &sp->addr; } @@ -271,7 +276,7 @@ struct sockaddr_in *tcpip_strtoaddr(const char *str) { static struct sockaddr_in add; - if (!tcpip_strtoaddr_ex (str, &add)) + if (!tcpip_strtoaddr_ex (str, &add, 210)) return 0; return &add; } @@ -298,7 +303,7 @@ int tcpip_connect(COMSTACK h, void *address) int r; #ifdef __sun__ int recbuflen; - socklen_t rbufsize = sizeof(recbuflen); + YAZ_SOCKLEN_T rbufsize = sizeof(recbuflen); #endif TRC(fprintf(stderr, "tcpip_connect\n")); h->io_pending = 0; @@ -601,11 +606,11 @@ COMSTACK tcpip_accept(COMSTACK h) } return 0; } - if (!cnew->blocking && + if (!(cnew->blocking&1) && #ifdef WIN32 (ioctlsocket(cnew->iofile, FIONBIO, &tru) < 0) #else - (!cnew->blocking && fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0) + (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0) #endif ) { @@ -721,8 +726,8 @@ int tcpip_get(COMSTACK h, char **buf, int *bufsize) return -1; #ifdef __sun__ yaz_set_errno( 0 ); - // unfortunatly, sun sometimes forgets to set errno in recv - // when EWOULDBLOCK etc. would be required (res = -1) + /* unfortunatly, sun sometimes forgets to set errno in recv + when EWOULDBLOCK etc. would be required (res = -1) */ #endif res = recv(h->iofile, *buf + hasread, CS_TCPIP_BUFCHUNK, 0); TRC(fprintf(stderr, " recv res=%d, hasread=%d\n", res, hasread)); @@ -1038,7 +1043,7 @@ char *tcpip_addrstr(COMSTACK h) { struct sockaddr_in addr; tcpip_state *sp = (struct tcpip_state *)h->cprivate; - char *r, *buf = sp->buf; + char *r = 0, *buf = sp->buf; YAZ_SOCKLEN_T len; struct hostent *host; @@ -1048,15 +1053,25 @@ char *tcpip_addrstr(COMSTACK h) h->cerrno = CSYSERR; return 0; } - if ((host = gethostbyaddr((char*)&addr.sin_addr, sizeof(addr.sin_addr), + if (!(h->blocking&2)) { + if ((host = gethostbyaddr((char*)&addr.sin_addr, sizeof(addr.sin_addr), AF_INET))) - r = (char*) host->h_name; - else + r = (char*) host->h_name; + } + if (!r) r = inet_ntoa(addr.sin_addr); - sprintf(buf, "tcp:%s", r); + if (h->protocol == PROTO_HTTP) + sprintf(buf, "http:%s", r); + else + sprintf(buf, "tcp:%s", r); #if HAVE_OPENSSL_SSL_H if (sp->ctx) - sprintf(buf, "ssl:%s", r); + { + if (h->protocol == PROTO_HTTP) + sprintf(buf, "https:%s", r); + else + sprintf(buf, "ssl:%s", r); + } #endif return buf; } @@ -1073,7 +1088,7 @@ int static tcpip_set_blocking(COMSTACK p, int blocking) return 0; #else flag = fcntl(p->iofile, F_GETFL, 0); - if(!blocking) + if(!(blocking&1)) flag = flag & ~O_NONBLOCK; else flag = flag | O_NONBLOCK;