/* * Copyright (c) 2014, NORDUnet A/S. * See LICENSE for licensing information. */ #include #include #include #include #include #include #include "net_read_write.h" #include "erlport.h" static ssize_t read_length(size_t length_size) { unsigned char buf[2]; if (length_size != 2) { return -1; } if (length_size > sizeof(buf)) { return -1; } ssize_t ret; ret = net_read(0, (char *)buf, length_size); if (ret != (ssize_t) length_size) { return -1; } return (ssize_t)(((unsigned long)buf[0] << 8) | (unsigned long)buf[1]); } ssize_t read_command(char *buf, size_t maxlen) { ssize_t len; len = read_length(2); if (len < 0) { return -1; } if (len > (ssize_t) maxlen) { return -1; } return net_read(0, buf, (size_t)len); } static int write_length(size_t len, size_t length_size) { unsigned char buf[2]; if (length_size != 2) { return -1; } buf[0] = (len >> 8) & 0xff; buf[1] = len & 0xff; ssize_t ret; ret = net_write(1, (char *)buf, length_size); if (ret < 0) { return -1; } if (ret != (ssize_t) length_size) { return -1; } return 0; } static int write_reply(char *msg, size_t len) { ssize_t ret; ret = write_length(len, 2); if (ret < 0) { return -1; } ret = net_write(1, msg, len); if (ret < 0) { return -1; } return 0; } int write_status(char *msg) { return write_reply(msg, strlen(msg)); }