mirror of
https://github.com/simon987/sist2.git
synced 2025-04-24 12:45:56 +00:00
replace onion with mongoose (wip)
This commit is contained in:
parent
f8a9d427e4
commit
035fa26dc4
@ -96,6 +96,7 @@ add_dependencies(
|
|||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
sist2
|
sist2
|
||||||
|
|
||||||
|
z
|
||||||
lmdb
|
lmdb
|
||||||
cjson
|
cjson
|
||||||
argparse
|
argparse
|
||||||
@ -110,6 +111,13 @@ target_link_libraries(
|
|||||||
pthread
|
pthread
|
||||||
magic
|
magic
|
||||||
|
|
||||||
|
# TODO: compile ffmpeg with those disabled?
|
||||||
|
va
|
||||||
|
va-drm
|
||||||
|
va-x11
|
||||||
|
X11
|
||||||
|
vdpau
|
||||||
|
|
||||||
scan
|
scan
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "src/io/serialize.h"
|
#include "src/io/serialize.h"
|
||||||
|
|
||||||
#include <magic.h>
|
#include <magic.h>
|
||||||
|
#include <src/ctx.h>
|
||||||
|
|
||||||
__thread magic_t Magic = NULL;
|
__thread magic_t Magic = NULL;
|
||||||
|
|
||||||
@ -111,7 +112,12 @@ void parse(void *arg) {
|
|||||||
} else if ((mmime == MimeVideo && doc.size >= MIN_VIDEO_SIZE) ||
|
} else if ((mmime == MimeVideo && doc.size >= MIN_VIDEO_SIZE) ||
|
||||||
(mmime == MimeImage && doc.size >= MIN_IMAGE_SIZE) || mmime == MimeAudio) {
|
(mmime == MimeImage && doc.size >= MIN_IMAGE_SIZE) || mmime == MimeAudio) {
|
||||||
|
|
||||||
// parse_media(&job->vfile, &doc);
|
scan_media_ctx_t media_ctx;
|
||||||
|
media_ctx.tn_qscale = ScanCtx.tn_qscale;
|
||||||
|
media_ctx.tn_size = ScanCtx.tn_size;
|
||||||
|
media_ctx.content_size = ScanCtx.content_size;
|
||||||
|
|
||||||
|
parse_media(&media_ctx, &job->vfile, &doc);
|
||||||
|
|
||||||
} else if (IS_PDF(doc.mime)) {
|
} else if (IS_PDF(doc.mime)) {
|
||||||
// parse_ebook(pdf_buf, doc.size, &doc);
|
// parse_ebook(pdf_buf, doc.size, &doc);
|
||||||
|
@ -116,41 +116,45 @@ int img_sprite_skin_flat(struct mg_connection *nc, struct http_message *hm) {
|
|||||||
nc->flags |= MG_F_SEND_AND_CLOSE;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int thumbnail(void *p, onion_request *req, onion_response *res) {
|
void thumbnail(struct mg_connection *nc, struct http_message *hm, struct mg_str *path) {
|
||||||
int flags = onion_request_get_flags(req);
|
|
||||||
if ((flags & OR_METHODS) != OR_GET) {
|
|
||||||
return OCS_NOT_PROCESSED;
|
|
||||||
}
|
|
||||||
const char *arg_index = onion_request_get_query(req, "1");
|
|
||||||
const char *arg_uuid = onion_request_get_query(req, "2");
|
|
||||||
|
|
||||||
if (arg_uuid == NULL || arg_index == NULL) {
|
if (path->len != UUID_STR_LEN * 2 + 2) {
|
||||||
return OCS_NOT_PROCESSED;
|
LOG_DEBUGF("serve.c", "Invalid thumnail path: %.*s", (int) path->len, path->p);
|
||||||
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char arg_uuid[UUID_STR_LEN];
|
||||||
|
char arg_index[UUID_STR_LEN];
|
||||||
|
|
||||||
|
memcpy(arg_index, hm->uri.p + 3, UUID_STR_LEN);
|
||||||
|
*(arg_index + UUID_STR_LEN - 1) = '\0';
|
||||||
|
memcpy(arg_uuid, hm->uri.p + 3 + UUID_STR_LEN, UUID_STR_LEN);
|
||||||
|
*(arg_uuid + UUID_STR_LEN - 1) = '\0';
|
||||||
|
|
||||||
uuid_t uuid;
|
uuid_t uuid;
|
||||||
uuid_parse(arg_uuid, uuid);
|
int ret = uuid_parse(arg_uuid, uuid);
|
||||||
|
if (ret != 0) {
|
||||||
store_t *store = get_store(arg_index);
|
LOG_DEBUGF("serve.c", "Invalid thumbnail UUID: %s", arg_uuid);
|
||||||
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
if (store == NULL) {
|
return;
|
||||||
return OCS_NOT_PROCESSED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// set_default_headers(res);
|
store_t *store = get_store(arg_index);
|
||||||
onion_response_set_header(res, "Content-Type", "image/jpeg");
|
if (store == NULL) {
|
||||||
|
LOG_DEBUGF("serve.c", "Could not get store for index: %s", arg_index);
|
||||||
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
size_t data_len = 0;
|
size_t data_len = 0;
|
||||||
char *data = store_read(store, (char *) uuid, sizeof(uuid_t), &data_len);
|
char *data = store_read(store, (char *) uuid, sizeof(uuid_t), &data_len);
|
||||||
onion_response_set_length(res, data_len);
|
if (data_len != 0) {
|
||||||
int written = onion_response_write(res, data, data_len);
|
send_response_line(nc, 200, data_len, "Content-Type: image/jpeg");
|
||||||
onion_response_flush(res);
|
mg_send(nc, data, data_len);
|
||||||
if (written != data_len || data_len == 0) {
|
|
||||||
LOG_DEBUG("serve.c", "Couldn't write thumbnail");
|
|
||||||
}
|
|
||||||
free(data);
|
free(data);
|
||||||
|
}
|
||||||
return OCS_PROCESSED;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -374,6 +378,7 @@ void file(struct mg_connection *nc, struct http_message *hm, struct mg_str *path
|
|||||||
|
|
||||||
if (path->len != UUID_STR_LEN + 2) {
|
if (path->len != UUID_STR_LEN + 2) {
|
||||||
LOG_DEBUGF("serve.c", "Invalid file path: %.*s", (int) path->len, path->p);
|
LOG_DEBUGF("serve.c", "Invalid file path: %.*s", (int) path->len, path->p);
|
||||||
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,7 +397,7 @@ void file(struct mg_connection *nc, struct http_message *hm, struct mg_str *path
|
|||||||
index_id = cJSON_GetObjectItem(source, "index");
|
index_id = cJSON_GetObjectItem(source, "index");
|
||||||
if (index_id == NULL) {
|
if (index_id == NULL) {
|
||||||
cJSON_Delete(doc);
|
cJSON_Delete(doc);
|
||||||
// return OCS_NOT_PROCESSED;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cJSON *parent = cJSON_GetObjectItem(source, "parent");
|
cJSON *parent = cJSON_GetObjectItem(source, "parent");
|
||||||
@ -406,21 +411,20 @@ void file(struct mg_connection *nc, struct http_message *hm, struct mg_str *path
|
|||||||
|
|
||||||
if (idx == NULL) {
|
if (idx == NULL) {
|
||||||
cJSON_Delete(doc);
|
cJSON_Delete(doc);
|
||||||
// return OCS_NOT_PROCESSED;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(idx->desc.rewrite_url) == 0) {
|
if (strlen(idx->desc.rewrite_url) == 0) {
|
||||||
serve_file_from_disk(source, idx, nc, hm);
|
serve_file_from_disk(source, idx, nc, hm);
|
||||||
} else {
|
} else {
|
||||||
|
//TODO:
|
||||||
// serve_file_from_url(source, idx, nc, hm);
|
// serve_file_from_url(source, idx, nc, hm);
|
||||||
}
|
}
|
||||||
cJSON_Delete(doc);
|
cJSON_Delete(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
int status(UNUSED(void *p), UNUSED(onion_request *req), onion_response *res) {
|
int status(UNUSED(void *p), UNUSED(onion_request *req), onion_response *res) {
|
||||||
// set_default_headers(res);
|
|
||||||
|
|
||||||
onion_response_set_header(res, "Content-Type", "application/x-empty");
|
onion_response_set_header(res, "Content-Type", "application/x-empty");
|
||||||
|
|
||||||
char *status = elastic_get_status();
|
char *status = elastic_get_status();
|
||||||
@ -470,10 +474,13 @@ static void ev_router(struct mg_connection *nc, int ev, void *p) {
|
|||||||
index_info(nc);
|
index_info(nc);
|
||||||
} else if (has_prefix(&path, &((struct mg_str) MG_MK_STR("/f/")))) {
|
} else if (has_prefix(&path, &((struct mg_str) MG_MK_STR("/f/")))) {
|
||||||
file(nc, hm, &path);
|
file(nc, hm, &path);
|
||||||
|
} else if (has_prefix(&path, &((struct mg_str) MG_MK_STR("/t/")))) {
|
||||||
|
thumbnail(nc, hm, &path);
|
||||||
|
} else {
|
||||||
|
|
||||||
nc->flags |= MG_F_SEND_AND_CLOSE;
|
nc->flags |= MG_F_SEND_AND_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// nc->flags |= MG_F_SEND_AND_CLOSE;
|
|
||||||
|
|
||||||
} else if (ev == MG_EV_POLL) {
|
} else if (ev == MG_EV_POLL) {
|
||||||
if (nc->user_data != NULL) {
|
if (nc->user_data != NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user