Now handle Gemini requests

This commit is contained in:
Romain de Laage 2021-02-18 17:03:01 +01:00
parent d0a0e2499d
commit 5df3a69a81
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
4 changed files with 50 additions and 17 deletions

View File

@ -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

17
include/url.h Normal file
View File

@ -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

View File

@ -3,21 +3,10 @@
#include <string.h>
#include <ctype.h>
#include <url.h>
#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)

View File

@ -3,6 +3,7 @@
#include <gemgui.h>
#include <gemparse.h>
#include <gemini.h>
#include <url.h>
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
{