X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fclientsocket.c;h=1f163c222ef1ce5f8cdd33a848a0bccf11221aef;hb=aa7365c86de8e26e796d3aa3fd605c85d8c26220;hp=54bceb7a5f4468ffbd91a1f06071a925e3e47765;hpb=e152b333715749602773cc8bfd7ffef36a24b55c;p=citadel.git diff --git a/citadel/clientsocket.c b/citadel/clientsocket.c index 54bceb7a5..1f163c222 100644 --- a/citadel/clientsocket.c +++ b/citadel/clientsocket.c @@ -4,21 +4,15 @@ * sockets for the Citadel client; for that you must look in ipc_c_tcp.c * (which, uncoincidentally, bears a striking similarity to this file). * - * Copyright (c) 1987-2010 by the citadel.org team + * Copyright (c) 1987-2011 by the citadel.org team * - * This program 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 Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -36,6 +30,7 @@ #include #include #include +#include #include #include "citadel.h" #include "server.h" @@ -85,7 +80,7 @@ int sock_connect(char *host, char *service) rc = getaddrinfo(host, service, &hints, &res); if (rc != 0) { - CtdlLogPrintf(CTDL_ERR, "%s: %s\n", host, gai_strerror(rc)); + syslog(LOG_ERR, "%s: %s", host, gai_strerror(rc)); return(-1); } @@ -95,7 +90,7 @@ int sock_connect(char *host, char *service) for (ai = res; ai != NULL; ai = ai->ai_next) { sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (sock < 0) { - CtdlLogPrintf(CTDL_ERR, "socket() failed: %s\n", strerror(errno)); + syslog(LOG_ERR, "socket() failed: %s", strerror(errno)); freeaddrinfo(res); return(-1); } @@ -105,7 +100,7 @@ int sock_connect(char *host, char *service) return(sock); } else { - CtdlLogPrintf(CTDL_ERR, "connect() failed: %s\n", strerror(errno)); + syslog(LOG_ERR, "connect() failed: %s", strerror(errno)); close(sock); } } @@ -136,39 +131,17 @@ int socket_read_blob(int *Socket, StrBuf * Target, int bytes, int timeout) retval = StrBufReadBLOBBuffered(Target, - CCC->sReadBuf, - &CCC->sPos, + CCC->SBuf.Buf, + &CCC->SBuf.ReadWritePointer, Socket, 1, bytes, O_TERM, &Error); + if (retval < 0) { - CtdlLogPrintf(CTDL_CRIT, - "%s failed: %s\n", __FUNCTION__, Error); + syslog(LOG_CRIT, "socket_read_blob() failed: %s", Error); } return retval; } -int sock_read_to(int *sock, char *buf, int bytes, int timeout, - int keep_reading_until_full) -{ - CitContext *CCC = MyContext(); - int rc; - - FlushStrBuf(CCC->MigrateBuf); - rc = socket_read_blob(sock, CCC->sMigrateBuf, bytes, timeout); - if (rc < 0) { - *buf = '\0'; - return rc; - } else { - if (StrLength(CCC->MigrateBuf) < bytes) - bytes = StrLength(CCC->MigrateBuf); - memcpy(buf, ChrPtr(CCC->MigrateBuf), bytes); - - FlushStrBuf(CCC->MigrateBuf); - return rc; - } -} - - int CtdlSockGetLine(int *sock, StrBuf * Target, int nSec) { CitContext *CCC = MyContext(); @@ -177,12 +150,11 @@ int CtdlSockGetLine(int *sock, StrBuf * Target, int nSec) FlushStrBuf(Target); rc = StrBufTCP_read_buffered_line_fast(Target, - CCC->sReadBuf, - &CCC->sPos, + CCC->SBuf.Buf, + &CCC->SBuf.ReadWritePointer, sock, nSec, 1, &Error); if ((rc < 0) && (Error != NULL)) - CtdlLogPrintf(CTDL_CRIT, - "%s failed: %s\n", __FUNCTION__, Error); + syslog(LOG_CRIT, "CtdlSockGetLine() failed: %s", Error); return rc; } @@ -215,23 +187,13 @@ int sock_getln(int *sock, char *buf, int bufsize) } -/* - * sock_read() - input binary data from socket. - * Returns the number of bytes read, or -1 for error. - */ -INLINE int sock_read(int *sock, char *buf, int bytes, - int keep_reading_until_full) -{ - return sock_read_to(sock, buf, bytes, CLIENT_TIMEOUT, - keep_reading_until_full); -} - - /* * sock_write() - send binary to server. * Returns the number of bytes written, or -1 for error. */ -int sock_write(int *sock, const char *buf, int nbytes) +int sock_write(int *sock, const char *buf, int nbytes) +{ return sock_write_timeout(sock, buf, nbytes, 50); } +int sock_write_timeout(int *sock, const char *buf, int nbytes, int timeout) { int nSuccessLess = 0; int bytes_written = 0; @@ -239,7 +201,6 @@ int sock_write(int *sock, const char *buf, int nbytes) fd_set rfds; int fdflags; int IsNonBlock; - int timeout = 50; struct timeval tv; int selectresolution = 100;