diff options
| author | Syndamia <kamen@syndamia.com> | 2024-01-07 12:36:39 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-01-07 12:36:39 +0200 |
| commit | f9990172848eb65f6549a0326d9476df3215e567 (patch) | |
| tree | 1431fb6085c4f5656d128312fb4383ede2a6478b /src | |
| parent | 43de4b0bfa52a7b3bf6b92df344bd76a97200e18 (diff) | |
| download | pico-web-f9990172848eb65f6549a0326d9476df3215e567.tar pico-web-f9990172848eb65f6549a0326d9476df3215e567.tar.gz pico-web-f9990172848eb65f6549a0326d9476df3215e567.zip | |
(browser-net) Separated main function in it's own C file, so testing could be done
Diffstat (limited to 'src')
| -rw-r--r-- | src/browser-net.c | 99 | ||||
| -rw-r--r-- | src/browser-net.h | 9 | ||||
| -rw-r--r-- | src/browser.c | 99 |
3 files changed, 111 insertions, 96 deletions
diff --git a/src/browser-net.c b/src/browser-net.c new file mode 100644 index 0000000..7e0b4c2 --- /dev/null +++ b/src/browser-net.c @@ -0,0 +1,99 @@ +/* Receives a markdown file and "renders" it + */ +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> + +#include <string.h> +#include "sds/sds.h" +#include "util.h" +#include "browser-cli.h" + +#define READ_BUFFER_SIZE 512 + +sds get_page(const char* ip, const char* port, const char* URL) { + if (streq(URL, "blank")) return sdsnew("\n"); + + /* + * Create socket for connecting with server + */ + int fd_socket = socket(AF_INET, SOCK_STREAM, 0); + herrc(fd_socket, "socket"); + + int aton_status = 0; + struct sockaddr_in sa_server = { + .sin_family = AF_INET, + .sin_port = atop(port), + .sin_addr = aton(ip, &aton_status), + }; + herrc(aton_status, "inet_aton"); + + /* + * Request page + */ + + int connectStatus = connect(fd_socket, (struct sockaddr*)&sa_server, sizeof(struct sockaddr_in)); + herrc(connectStatus, "connect"); + if (connectStatus < 0) return sdsnew("Couldn't connect to server!\n"); + + write(fd_socket, URL, strlen(URL)); + + /* + * Receive page + */ + + sds page = sdsempty(); + + char buff[READ_BUFFER_SIZE]; + clear_arr(buff); + while (read(fd_socket, buff, READ_BUFFER_SIZE)) { + page = sdscat(page, buff); + clear_arr(buff); + } + + /* + * Final + */ + + close(fd_socket); + return page; +} + +void run(int argc, char* argv[]) { + initRendering(); + + /* + * Server-client communication + */ + + sds page; + sds host = sdsnew("127.0.0.1"); + sds port = sdsnew("8080"); + sds uri = sdsnew("blank"); + + int stopProgram = 0; + while (!stopProgram) { + /* + * Get the page + */ + + printf("\033[30;107m%s\033[0m\n", uri); + page = get_page(host, port, uri); + renderPage(page); + + /* + * Handle user input + */ + stopProgram = handleBrowserCLI(&host, &port, &uri, page); + sdsfree(page); + } + + freeRendering(); + sdsfree(host); + sdsfree(port); + sdsfree(uri); +} diff --git a/src/browser-net.h b/src/browser-net.h new file mode 100644 index 0000000..04b6c67 --- /dev/null +++ b/src/browser-net.h @@ -0,0 +1,9 @@ +#ifndef BROWSER_NET +#define BROWSER_NET + +#include "sds/sds.h" + +sds get_page(const char* ip, const char* port, const char* URL); +void run(int argc, char* argv[]); + +#endif diff --git a/src/browser.c b/src/browser.c index 7268831..b521cc8 100644 --- a/src/browser.c +++ b/src/browser.c @@ -1,99 +1,6 @@ -/* Receives a markdown file and "renders" it - */ -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> - -#include <string.h> -#include <sds/sds.h> -#include <util.h> -#include <browser-cli.h> - -#define READ_BUFFER_SIZE 512 - -sds get_page(const char* ip, const char* port, const char* URL) { - if (streq(URL, "blank")) return sdsnew("\n"); - - /* - * Create socket for connecting with server - */ - int fd_socket = socket(AF_INET, SOCK_STREAM, 0); - herrc(fd_socket, "socket"); - - int aton_status = 0; - struct sockaddr_in sa_server = { - .sin_family = AF_INET, - .sin_port = atop(port), - .sin_addr = aton(ip, &aton_status), - }; - herrc(aton_status, "inet_aton"); - - /* - * Request page - */ - - int connectStatus = connect(fd_socket, (struct sockaddr*)&sa_server, sizeof(struct sockaddr_in)); - herrc(connectStatus, "connect"); - if (connectStatus < 0) return sdsnew("Couldn't connect to server!\n"); - - write(fd_socket, URL, strlen(URL)); - - /* - * Receive page - */ - - sds page = sdsempty(); - - char buff[READ_BUFFER_SIZE]; - clear_arr(buff); - while (read(fd_socket, buff, READ_BUFFER_SIZE)) { - page = sdscat(page, buff); - clear_arr(buff); - } - - /* - * Final - */ - - close(fd_socket); - return page; -} +#include "browser-net.h" int main(int argc, char* argv[]) { - initRendering(); - - /* - * Server-client communication - */ - - sds page; - sds host = sdsnew("127.0.0.1"); - sds port = sdsnew("8080"); - sds uri = sdsnew("blank"); - - int stopProgram = 0; - while (!stopProgram) { - /* - * Get the page - */ - - printf("\033[30;107m%s\033[0m\n", uri); - page = get_page(host, port, uri); - renderPage(page); - - /* - * Handle user input - */ - stopProgram = handleCLI(&host, &port, &uri, page); - sdsfree(page); - } - - freeRendering(); - sdsfree(host); - sdsfree(port); - sdsfree(uri); + run(argc, argv); + return 0; } |
