]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - net.c
Get rid of E_RECV.
[paraslash.git] / net.c
diff --git a/net.c b/net.c
index c5f33c822164195615d7f8f318f22a3f1d43a79f..2991b6db5c42b58c0028c371890739323662bba7 100644 (file)
--- a/net.c
+++ b/net.c
@@ -7,9 +7,9 @@
 /** \file net.c networking-related helper functions */
 
 #include "para.h"
+#include "error.h"
 #include "net.h"
 #include "string.h"
-#include "error.h"
 
 
 /** Information about one encrypted connection. */
@@ -120,7 +120,7 @@ static int sendall(int fd, const char *buf, size_t *len)
                total += n;
                bytesleft -= n;
                if (total < *len)
-                       PARA_DEBUG_LOG("short write (%zd byte(s) left)",
+                       PARA_DEBUG_LOG("short write (%zd byte(s) left)\n",
                                *len - total);
        }
        *len = total; /* return number actually sent here */
@@ -128,15 +128,15 @@ static int sendall(int fd, const char *buf, size_t *len)
 }
 
 /**
- * encrypt and send buffer
+ * Encrypt and send a binary buffer.
  *
- * \param fd:  the file descriptor
- * \param buf the buffer to be encrypted and sent
- * \param len the length of \a buf
+ * \param fd The file descriptor.
+ * \param buf The buffer to be encrypted and sent.
+ * \param len The length of \a buf.
  *
- * Check if encrytpion is available. If yes, encrypt the given buffer.  Send out
- * the buffer, encrypted or not, and try to resend the remaing part in case of
- * short writes.
+ * Check if encryption is available. If yes, encrypt the given buffer.  Send
+ * out the buffer, encrypted or not, and try to resend the remaing part in case
+ * of short writes.
  *
  * \return Positive on success, \p -E_SEND on errors.
  */
@@ -151,7 +151,8 @@ int send_bin_buffer(int fd, const char *buf, size_t len)
                cf = crypt_data_array[fd].send;
        if (cf) {
                void *private = crypt_data_array[fd].private_data;
-               unsigned char *outbuf = para_malloc(len);
+               /* RC4 may write more than len to the output buffer */
+               unsigned char *outbuf = para_malloc(ROUND_UP(len, 8));
                (*cf)(len, (unsigned char *)buf, outbuf, private);
                ret = sendall(fd, (char *)outbuf, &len);
                free(outbuf);
@@ -202,12 +203,10 @@ __printf_2_3 int send_va_buffer(int fd, const char *fmt, ...)
  * \param buf the buffer to write the decrypted data to
  * \param size the size of \a buf
  *
- * Receive at most \a size bytes from filedescriptor fd. If encryption is
+ * Receive at most \a size bytes from file descriptor \a fd. If encryption is
  * available, decrypt the received buffer.
  *
- * \return The number of bytes received on success. On receive errors, -E_RECV
- * is returned. On crypt errors, the corresponding crypt error number is
- * returned.
+ * \return The number of bytes received on success, negative on errors.
  *
  * \sa recv(2)
  */
@@ -231,7 +230,7 @@ __must_check int recv_bin_buffer(int fd, char *buf, size_t size)
        } else
                n = recv(fd, buf, size, 0);
        if (n == -1)
-               n = -E_RECV;
+               return -ERRNO_TO_PARA_ERROR(errno);
        return n;
 }
 
@@ -253,8 +252,7 @@ int recv_buffer(int fd, char *buf, size_t size)
 {
        int n;
 
-       if (!size)
-               return -E_RECV;
+       assert(size);
        n = recv_bin_buffer(fd, buf, size - 1);
        if (n >= 0)
                buf[n] = '\0';
@@ -283,14 +281,16 @@ int get_host_info(char *host, struct hostent **ret)
 }
 
 /**
- * a wrapper around socket(2)
+ * A wrapper around socket(2).
  *
- * Create an IPv4 socket for sequenced, reliable, two-way, connection-based
- * byte streams.
+ * \param domain The communication domain that selects the protocol family.
  *
  * \return The socket fd on success, -E_SOCKET on errors.
  *
- * \sa socket(2)
+ * Create an IPv4 socket for sequenced, reliable, two-way, connection-based
+ * byte streams.
+ *
+ * \sa socket(2).
  */
 int get_stream_socket(int domain)
 {
@@ -301,26 +301,6 @@ int get_stream_socket(int domain)
        return socket_fd;
 }
 
-/**
- * a wrapper around connect(2)
- *
- * \param fd the file descriptor
- * \param their_addr the address to connect
- *
- * \return \p -E_CONNECT on errors, 1 on success
- *
- * \sa connect(2)
- */
-int para_connect(int fd, struct sockaddr_in *their_addr)
-{
-       int ret;
-
-       if ((ret = connect(fd, (struct sockaddr *)their_addr,
-                       sizeof(struct sockaddr))) == -1)
-               return -E_CONNECT;
-       return 1;
-}
-
 /**
  * paraslash's wrapper around the accept system call
  *