From 4220890af628292a94ee4c912415af84417c7653 Mon Sep 17 00:00:00 2001 From: Alexander Vdolainen Date: Tue, 16 Mar 2021 01:59:03 +0200 Subject: [PATCH] eport read function; --- src/eport.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/eport.c b/src/eport.c index 7bef688..db68327 100644 --- a/src/eport.c +++ b/src/eport.c @@ -20,17 +20,39 @@ #include #include +#include +#include #include -size_t eport_read(FILE *stream, char *buffer, size_t buffer_size) +ssize_t eport_read(FILE *stream, char *buffer, size_t buffer_size) { - return 0; + int fd = fileno(stream); + int16_t port_msg_len = 0; + ssize_t pr = 0; + + if(fd < 0) return -1; + + /* firstly the size of plain text message is required. + * it has a short size and is going in bigendian order. + */ + pr = read(fd, &port_msg_len, sizeof(int16_t)); + if(pr < 0) return -1; + port_msg_len = (port_msg_len << 8) | ((port_msg_len >> 8) & 0xFF); + + /* check if a buffer has required amount of bytes */ + if(port_msg_len > buffer_size) { + errno = EMSGSIZE; /* message is too long */ + return -1; + } else + pr = read(fd, buffer, port_msg_len); + + return pr; } -size_t eport_write(FILE *stream, char *buffer, size_t buffer_size) +ssize_t eport_write(FILE *stream, char *buffer, size_t buffer_size) { - return 0; + return -1; } int eport_ejabberd_msgread(char *buffer, size_t buffer_size,