diff options
author | Shav Kinderlehrer <[email protected]> | 2024-07-23 17:48:28 -0400 |
---|---|---|
committer | Shav Kinderlehrer <[email protected]> | 2024-07-23 17:48:28 -0400 |
commit | dc0f2ce9ba97ebb47e05b80a511da6eb29818b63 (patch) | |
tree | dc83035069f5a015047be1ca3da6f65781eb4695 /src/molerat/net.c | |
parent | f638f4bd1e3a03bc2bdd5f9dcd57d4830fd3c553 (diff) | |
download | molehole-ncurses.tar.gz molehole-ncurses.zip |
Merge old-moleholencurses
Diffstat (limited to 'src/molerat/net.c')
-rwxr-xr-x | src/molerat/net.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/molerat/net.c b/src/molerat/net.c new file mode 100755 index 0000000..f3eef06 --- /dev/null +++ b/src/molerat/net.c @@ -0,0 +1,68 @@ +#include <openssl/ssl.h> +#include <string.h> +#include <time.h> + +#include "config.h" +#include "connect.h" +#include "net.h" +#include "request.h" +#include "response.h" +#include "status.h" + +int send_request(struct config *conf, struct request *req) { + char *req_string = request_to_string(req); + + int rc = SSL_write(conf->s.conn->ssl, req_string, strlen(req_string)); + + if (rc < 0) { + return SSL_SEND_ERROR; + } + + free(req_string); + return 0; +} + +int read_response(struct config *conf, struct response *res) { + struct timespec start_time; + clock_gettime(CLOCK_MONOTONIC, &start_time); + + int buf_len = 4096; + char *buf = malloc(buf_len); + + int bytes_read = 0; + + do { + bytes_read = SSL_read(conf->s.conn->ssl, buf, buf_len); + + if (bytes_read == buf_len) { + buf_len *= 2; + char *temp_buf = realloc(buf, buf_len); + if (temp_buf == NULL) + return ALLOC_ERROR; + + buf = temp_buf; + } + } while (bytes_read > 0); + + int rc = parse_response(res, buf); + if (rc < 0) { + return RESPONSE_PARSE_ERROR; + } + free(buf); + + struct timespec end_time; + clock_gettime(CLOCK_MONOTONIC, &end_time); + + float time_diff = (end_time.tv_sec - start_time.tv_sec) + + 1e-9 * (end_time.tv_nsec - start_time.tv_nsec); + + int msg_len = + snprintf(NULL, 0, "Received after %0.3f seconds", time_diff) + 1; + char *msg = malloc(msg_len); + snprintf(msg, msg_len, "Received after %.3f seconds", time_diff); + + update_status(conf, msg); + free(msg); + + return 0; +} |