HTTP demo with Jansson for JSON parsing

This commit is contained in:
nez 2023-07-21 13:44:07 +00:00
commit a1c4428d37
5 changed files with 58 additions and 5 deletions

View File

@ -33,13 +33,13 @@ LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS := -lwiiuse -lbte -logc -lm
LIBS := -lwiiuse -lbte -logc -lm -ljansson
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS :=
LIBDIRS := $(PORTLIBS)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional

9
source/debug.c Normal file
View File

@ -0,0 +1,9 @@
// debug features for libreshop_client
#include <wiiuse/wpad.h>
void debug_pause() {
while(1) {
WPAD_ScanPads();
if (WPAD_ButtonsDown(0)) break;
}
}

6
source/debug.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef DEBUG_H
#define DEBUG_H
void debug_pause();
#endif

View File

@ -4,7 +4,13 @@
#include <network.h>
#include <wiiuse/wpad.h>
#include <stdbool.h>
#include "sandia/sandia.h"
#include <jansson.h>
// Uncomment if this is a development build
//#include "debug.h"
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
@ -79,8 +85,40 @@ int main(int argc, char **argv) {
sandia req = sandia_create("libreshop.donut.eu.org", 80);
sandia_response res = sandia_get_request(&req, "/");
printf("\n%s\n", res.body);
sandia_close(&res);
bool lastWasNewline = false;
int resBodyLength = strlen(res.body);
for (int i = 0; i < resBodyLength; i++) {
if (res.body[i] == '\r') continue;
if (res.body[i] == '\n') {
if (lastWasNewline) {
int rBL = resBodyLength - i;
char* body = malloc(rBL);
for (int j = 0; j < rBL; j++) {
body[j] = res.body[j + i + 1];
}
json_error_t error;
json_t *root = json_loads(body, 0, &error);
if (!root || !json_is_array(root)) {
printf("failed decoding\n");
}
else {
printf("%s\n", body);
for (int j = 0; j < json_array_size(root); j++) {
json_t *data = json_array_get(root, j);
printf("%s\n", json_string_value(data));
}
}
break;
}
else lastWasNewline = true;
}
else lastWasNewline = false;
}
printf("\n");
sandia_close(&req);
} else {
logprint(0, "Network configuration failed :(\n");
}

@ -1 +1 @@
Subproject commit 9b383cdda825ab4ba2767102b06cbd5dc734dae9
Subproject commit 62ea4d024fda8663463ddc20c13eec5e1c08b2de