mirror of
https://git.kappach.at/lda/Parsee.git
synced 2025-04-20 18:56:58 +02:00
Used to open a flatfile database whenever it couldn't find an LMDB one, which obviously caused *problems*
118 lines
2.3 KiB
C
118 lines
2.3 KiB
C
/* Single-header tools for Parsee tools. */
|
|
|
|
#include <Cytoplasm/HttpClient.h>
|
|
#include <Cytoplasm/Memory.h>
|
|
#include <Cytoplasm/Json.h>
|
|
#include <Cytoplasm/Args.h>
|
|
#include <Cytoplasm/Util.h>
|
|
#include <Cytoplasm/Log.h>
|
|
#include <Cytoplasm/Uri.h>
|
|
#include <Cytoplasm/Str.h>
|
|
#include <Cytoplasm/Db.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define GrabString(obj, ...) JsonValueAsString(JsonGet(obj, __VA_ARGS__))
|
|
#define GrabInteger(obj, ...) JsonValueAsInteger(JsonGet(obj, __VA_ARGS__))
|
|
#define GrabBoolean(obj, ...) JsonValueAsBoolean(JsonGet(obj, __VA_ARGS__))
|
|
#define GrabObject(obj, ...) JsonValueAsObject(JsonGet(obj, __VA_ARGS__))
|
|
#define GrabArray(obj, ...) JsonValueAsArray(JsonGet(obj, __VA_ARGS__))
|
|
|
|
Uri *
|
|
DelegateServer(char *raw)
|
|
{
|
|
HttpClientContext *ctx = NULL;
|
|
Stream *stream = NULL;
|
|
HashMap *reply = NULL;
|
|
Uri *ret = NULL;
|
|
|
|
if (!raw)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
ctx = HttpRequest(
|
|
HTTP_GET,
|
|
HTTP_FLAG_TLS, 443,
|
|
raw, "/.well-known/matrix/client"
|
|
);
|
|
HttpRequestSendHeaders(ctx);
|
|
|
|
switch (HttpRequestSend(ctx))
|
|
{
|
|
case HTTP_OK:
|
|
stream = HttpClientStream(ctx);
|
|
reply = JsonDecode(stream);
|
|
if (!reply)
|
|
{
|
|
goto end;
|
|
}
|
|
|
|
ret = UriParse(JsonValueAsString(JsonGet(
|
|
reply, 2,
|
|
"m.homeserver", "base_url"
|
|
)));
|
|
break;
|
|
default:
|
|
/* TODO */
|
|
break;
|
|
}
|
|
|
|
if (ret && !ret->port && StrEquals(ret->proto, "https"))
|
|
{
|
|
ret->port = 443;
|
|
}
|
|
if (ret && !ret->port)
|
|
{
|
|
ret->port = 80;
|
|
}
|
|
|
|
end:
|
|
HttpClientContextFree(ctx);
|
|
JsonFree(reply);
|
|
|
|
return ret;
|
|
}
|
|
|
|
Db *
|
|
GetDB(char *config)
|
|
{
|
|
size_t lmdb_size;
|
|
Db *ret = NULL;
|
|
char *db_path;
|
|
HashMap *json;
|
|
Stream *file;
|
|
if (!config)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
file = StreamOpen(config, "r");
|
|
json = JsonDecode(file);
|
|
StreamClose(file);
|
|
if (!json)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
lmdb_size = GrabInteger(json, 1, "db_size");
|
|
db_path = GrabString(json, 1, "db");
|
|
|
|
if (!db_path)
|
|
{
|
|
JsonFree(json);
|
|
return NULL;
|
|
}
|
|
|
|
if (lmdb_size)
|
|
{
|
|
ret = DbOpenLMDB(db_path, lmdb_size);
|
|
}
|
|
else
|
|
{
|
|
ret = DbOpen(db_path, 0);
|
|
}
|
|
|
|
JsonFree(json);
|
|
return ret;
|
|
}
|