#include "string.h"
#include "error.h"
+
+/** \cond holds information about one encrypted connection */
struct crypt_data {
crypt_function *recv;
crypt_function *send;
void *private_data;
};
-
-static struct crypt_data *crypt_data_array;
static unsigned cda_size = 0;
+static struct crypt_data *crypt_data_array;
+/** \endcond */
-void enable_crypt(int fd, crypt_function *recv, crypt_function *send,
+
+/**
+ * activate encryption for one file descriptor
+ *
+ * \param fd the file descriptor
+ * \param recv_f the function used for decrypting received data
+ * \param send_f the function used for encrypting before sending
+ * \param private_data user data supplied by the caller
+ */
+void enable_crypt(int fd, crypt_function *recv_f, crypt_function *send_f,
void *private_data)
{
if (fd + 1 > cda_size) {
crypt_data_array = para_realloc(crypt_data_array,
(fd + 1) * sizeof(struct crypt_data));
- memset(crypt_data_array + cda_size * sizeof(struct crypt_data), 0,
+ memset(crypt_data_array + cda_size, 0,
(fd + 1 - cda_size) * sizeof(struct crypt_data));
cda_size = fd + 1;
}
- crypt_data_array[fd].recv = recv;
- crypt_data_array[fd].send = send;
+ crypt_data_array[fd].recv = recv_f;
+ crypt_data_array[fd].send = send_f;
crypt_data_array[fd].private_data = private_data;
PARA_INFO_LOG("rc4 encryption activated for fd %d\n", fd);
}
+/**
+ * deactivate encryption for a given fd
+ *
+ * \param fd the file descriptor
+ *
+ * This must be called if and only if \p fd was activated via enable_crypt().
+ */
void disable_crypt(int fd)
{
if (cda_size < fd + 1)
goto out;
ret = 1;
out:
- if (ret < 0)
- PARA_NOTICE_LOG("did not receive pattern '%s'\n", pattern);
+ if (ret < 0) {
+ PARA_NOTICE_LOG("n = %d, did not receive pattern '%s'\n", n, pattern);
+ if (n > 0)
+ PARA_NOTICE_LOG("recvd: %s\n", buf);
+ }
free(buf);
return ret;
}