diff --git a/Makefile b/Makefile index 2f196b2..c7ba944 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ all: debug debug: mkdir -p build/debug - $(CC) -o $(BUILD_DIR)/debug/$(BUILD_NAME)-$(OS) $(CFLAGS) -Iinclude -lcrypto -lssl src/* lib/gemini.c + $(CC) -o $(BUILD_DIR)/debug/$(BUILD_NAME)-$(OS) $(CFLAGS) -Iinclude -lcrypto -lssl src/* lib/* test: testgemparse testurllib diff --git a/include/url.h b/include/url.h new file mode 100644 index 0000000..9b4f2dd --- /dev/null +++ b/include/url.h @@ -0,0 +1,17 @@ +#ifndef _URL_H +#define _URL_H + +typedef struct _url { + char *scheme; + char *host; + char *port; + char *path; +} Url; + +Url *urllib_init (void); +void urllib_free (Url *url); +int urllib_parse (Url *url, const char *url_string); +void urllib_tostring (Url *url, char *dest); +int urllib_join (Url *url, const char *path); + +#endif diff --git a/lib/url.c b/lib/url.c index 30055e7..11d5bf8 100644 --- a/lib/url.c +++ b/lib/url.c @@ -3,21 +3,10 @@ #include #include +#include + #ifdef TESTURLLIB -typedef struct _url { - char *scheme; - char *host; - char *port; - char *path; -} Url; - -Url *urllib_init (void); -void urllib_free (Url *url); -int urllib_parse (Url *url, const char *url_string); -void urllib_tostring (Url *url, char *dest); -int urllib_join (Url *url, const char *path); - int main (int argc, char **argv) diff --git a/src/main.c b/src/main.c index 1345269..ad684cd 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,7 @@ #include #include #include +#include GtkEntryBuffer *pathBarContent = NULL; GtkWidget *render = NULL; @@ -33,10 +34,36 @@ loadPage (const char *link) FILE *file = tmpfile (); if (file != NULL) { - GEM_send_request ("gemini://rdelaage.ovh\r\n", "rdelaage.ovh:1965", file); - makeRender (file); + Url *url = urllib_init (); - fclose (file); + if (url != NULL) + { + if (!urllib_parse (url, link)) + { + char request[1030]; + char host[1024]; + + sprintf (request, "%s\r\n", link); + sprintf (host, "%s:%s", url->host, url->port ? url->port : "1965"); + + GEM_send_request (request, host, file); + makeRender (file); + + fclose (file); + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Invalid Gemini URL !"); + } + + urllib_free (url); + } + else + { + gtk_container_foreach (GTK_CONTAINER (render), (GtkCallback)gtk_widget_destroy, NULL); + addH1 (render, "Failed to create URL !"); + } } else {