summaryrefslogtreecommitdiff
path: root/src/lib/sockets.c
diff options
context:
space:
mode:
authorSander Vrijders <[email protected]>2016-03-28 16:35:40 +0200
committerSander Vrijders <[email protected]>2016-03-28 16:35:40 +0200
commitc45be0dcbd123881cc33ce61571578dcb22c3b54 (patch)
tree58c7c12665dc4e11d010fa89bfe11de239053fd2 /src/lib/sockets.c
parentb144406dbb9cbdf83354590746097a93d6e88bc4 (diff)
downloadouroboros-c45be0dcbd123881cc33ce61571578dcb22c3b54.tar.gz
ouroboros-c45be0dcbd123881cc33ce61571578dcb22c3b54.zip
lib: Add ipcp_messages proto file
This removes the custom ser/des methods for communicating with the IPCP daemon and also uses GPB instead.
Diffstat (limited to 'src/lib/sockets.c')
-rw-r--r--src/lib/sockets.c245
1 files changed, 0 insertions, 245 deletions
diff --git a/src/lib/sockets.c b/src/lib/sockets.c
index fcd5d55a..a699206d 100644
--- a/src/lib/sockets.c
+++ b/src/lib/sockets.c
@@ -111,7 +111,6 @@ int send_irm_msg(irm_msg_t * msg)
return -1;
}
- LOG_DBG("Size will be %lu", buf.size);
buf.data = malloc(buf.size);
if (buf.data == NULL) {
close(sockfd);
@@ -214,247 +213,3 @@ char * ipcp_sock_path(pid_t pid)
return full_name;
}
-
-static int serialized_string_len(uint8_t * data)
-{
- uint8_t * seek = data;
-
- while (*seek != '\0')
- seek++;
-
- return (seek - data) + 1;
-}
-
-static void ser_copy_value(size_t flen,
- void * dst,
- void * src,
- int * offset)
-{
- memcpy(dst + *offset, src, flen);
- *offset += flen;
-}
-
-static void deser_copy_value(size_t flen,
- void * dst,
- void * src,
- int * offset)
-{
- memcpy(dst, src + *offset, flen);
- *offset += flen;
-}
-
-static int deser_copy_string(uint8_t * data,
- char ** dst,
- int * offset)
-{
- size_t flen;
-
- flen = serialized_string_len(data + *offset);
- *dst = malloc(sizeof(**dst) * (flen + 1));
- if (*dst == NULL)
- return -1;
- deser_copy_value(flen, *dst, data, offset);
- return 0;
-}
-
-static void deser_copy_size_t(uint8_t * data,
- size_t * dst,
- int * offset)
-{
- *dst = 0;
- deser_copy_value(sizeof(size_t), dst, data, offset);
-}
-
-/* Move these to a separate file? */
-static buffer_t * buffer_create()
-{
- buffer_t * buf;
-
- buf = malloc(sizeof(*buf));
- if (buf == NULL)
- return NULL;
-
- buf->data = malloc(IRM_MSG_BUF_SIZE);
- if (buf->data == NULL) {
- free(buf);
- return NULL;
- }
-
- return buf;
-}
-
-static void buffer_destroy(buffer_t * buf)
-{
- if (buf->data != NULL)
- free(buf->data);
-
- if (buf != NULL)
- free(buf);
-}
-
-buffer_t * serialize_ipcp_msg(struct ipcp_msg * msg)
-{
- buffer_t * buf = NULL;
- uint8_t * data = NULL;
- int offset = 0;
- char ** pos = NULL;
- int i = 0;
-
- if (msg == NULL)
- return NULL;
-
- buf = buffer_create();
- if (buf == NULL)
- return NULL;
-
- data = buf->data;
-
- ser_copy_value(sizeof(enum ipcp_msg_code),
- data, &msg->code, &offset);
-
- switch (msg->code) {
- case IPCP_BOOTSTRAP:
- break;
- case IPCP_ENROLL:
- if (msg->dif_name == NULL) {
- buffer_destroy(buf);
- return NULL;
- }
-
- ser_copy_value(strlen(msg->dif_name) + 1, data,
- msg->dif_name, &offset);
-
- if (msg->ap_name == NULL) {
- LOG_ERR("Null pointer passed");
- buffer_destroy(buf);
- return NULL;
- }
- ser_copy_value(strlen(msg->ap_name) + 1, data,
- msg->ap_name, &offset);
-
- /* All these operations end with a list of DIFs */
- case IPCP_REG:
- case IPCP_UNREG:
- if (msg->difs == NULL || msg->difs[0] == NULL) {
- buffer_destroy(buf);
- return NULL;
- }
-
- ser_copy_value(sizeof(size_t), data, &msg->difs_size, &offset);
-
- pos = msg->difs;
- for (i = 0; i < msg->difs_size; i++) {
- ser_copy_value(strlen(*pos) + 1, data, *pos, &offset);
- pos++;
- }
- break;
- default:
- LOG_ERR("Don't know that code");
- buffer_destroy(buf);
- return NULL;
- }
-
- buf->size = offset;
-
- return buf;
-}
-
-struct ipcp_msg * deserialize_ipcp_msg(buffer_t * data)
-{
- struct ipcp_msg * msg;
- int i, j;
- int offset = 0;
- size_t difs_size;
-
- if (data == NULL || data->data == NULL) {
- LOG_ERR("Got a null pointer");
- return NULL;
- }
-
- msg = malloc(sizeof(*msg));
- if (msg == NULL) {
- LOG_ERR("Failed to allocate memory");
- return NULL;
- }
-
- deser_copy_value(sizeof(enum ipcp_msg_code),
- &msg->code, data->data, &offset);
-
- switch (msg->code) {
- case IPCP_BOOTSTRAP:
- break;
- case IPCP_ENROLL:
- if (deser_copy_string(data->data,
- &msg->dif_name,
- &offset)) {
- free(msg);
- return NULL;
- }
-
- deser_copy_string(data->data,
- &msg->ap_name,
- &offset);
- if (msg->ap_name == NULL) {
- LOG_ERR("Failed to reconstruct name");
- free(msg->dif_name);
- free(msg);
- return NULL;
- }
-
- deser_copy_size_t(data->data, &difs_size, &offset);
- msg->difs_size = difs_size;
-
- msg->difs = malloc(sizeof(*(msg->difs)) * difs_size);
- if (msg->difs == NULL) {
- free(msg->ap_name);
- free(msg->dif_name);
- free(msg);
- return NULL;
- }
-
- for (i = 0; i < difs_size; i++) {
- if (deser_copy_string(data->data,
- &msg->difs[i],
- &offset)) {
- for (j = 0; j < i; j++)
- free(msg->difs[j]);
- free(msg->dif_name);
- free(msg->difs);
- free(msg->ap_name);
- free(msg);
- return NULL;
- }
- }
- break;
- case IPCP_REG:
- case IPCP_UNREG:
- deser_copy_size_t(data->data, &difs_size, &offset);
- msg->difs_size = difs_size;
-
- msg->difs = malloc(sizeof(*(msg->difs)) * difs_size);
- if (msg->difs == NULL) {
- free(msg);
- return NULL;
- }
-
- for (i = 0; i < difs_size; i++) {
- if (deser_copy_string(data->data,
- &msg->difs[i],
- &offset)) {
- for (j = 0; j < i; j++)
- free(msg->difs[j]);
- free(msg->difs);
- free(msg);
- return NULL;
- }
- }
-
- break;
- default:
- LOG_ERR("Don't know that code");
- free(msg);
- return NULL;
- }
-
- return msg;
-}