}
-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();
}
-/*
- * 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_connect(char *host, char *service);
-int sock_read_to(int *sock, char *buf, int bytes, int timeout, int keep_reading_until_full);
-int sock_read(int *sock, char *buf, int bytes, int keep_reading_until_full);
int sock_write(int *sock, const char *buf, int nbytes);
int sock_write_timeout(int *sock, const char *buf, int nbytes, int timeout);
int ml_sock_gets(int *sock, char *buf, int nSec);
int sock_getln(int *sock, char *buf, int bufsize);
int CtdlSockGetLine(int *sock, StrBuf *Target, int nSec);
int sock_puts(int *sock, char *buf);
+int socket_read_blob(int *Socket, StrBuf * Target, int bytes, int timeout);
/*
int download_len = 0L;
int bytes_received = 0L;
char buf[SIZ];
- static char pbuf[IGNET_PACKET_SIZE];
char tempfilename[PATH_MAX];
char permfilename[PATH_MAX];
int plen;
if (buf[0] == '6') {
plen = extract_int(&buf[4], 0);
- if (sock_read(sock, pbuf, plen, 1) < 0) {
+ StrBuf *pbuf = NewStrBuf();
+ if (socket_read_blob(sock, pbuf, plen, CLIENT_TIMEOUT) != plen) {
+ CtdlLogPrintf(CTDL_INFO, "Short read from peer; aborting.\n");
fclose(fp);
unlink(tempfilename);
+ FreeStrBuf(&pbuf);
return;
}
- fwrite((char *) pbuf, plen, 1, fp);
+ fwrite(ChrPtr(pbuf), plen, 1, fp);
bytes_received += plen;
+ FreeStrBuf(&pbuf);
}
}
}
CtdlLogPrintf(CTDL_DEBUG, "%s\n", buf);
- CtdlLogPrintf(CTDL_NOTICE, "Received %ld octets from <%s>\n", download_len, remote_nodename);
/*
* Now move the temp file to its permanent location.