summaryrefslogtreecommitdiff
path: root/src/tree
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-02-02 22:57:22 -0500
committerAndrew Opalach <andrew@akon.city> 2024-02-02 22:57:22 -0500
commit0b7a612a9baf49765db8b127e696913100b70f5f (patch)
tree78680777023d989b9148dd98a5a6e489e49b022a /src/tree
parentb100eb175e0cfa59a15c4125f26ab5474c2347ec (diff)
downloadcamu-0b7a612a9baf49765db8b127e696913100b70f5f.tar.gz
camu-0b7a612a9baf49765db8b127e696913100b70f5f.tar.bz2
camu-0b7a612a9baf49765db8b127e696913100b70f5f.zip
wip
- Getting somewhere with the client Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/tree')
-rw-r--r--src/tree/tree.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/tree/tree.c b/src/tree/tree.c
index 8dcc501..1be4891 100644
--- a/src/tree/tree.c
+++ b/src/tree/tree.c
@@ -5,7 +5,7 @@
#include "tree.h"
#include "common.h"
-#define USER_AGENT al_str_c("Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0")
+#define USER_AGENT al_str_c("Mozilla/5.0 (Windows NT 10.0; rv:122.0) Gecko/20100101 Firefox/122.0")
static void http_callback(void *userdata, struct aki_http_request *response, bool success)
{
@@ -64,21 +64,16 @@ static struct tree_user *get_user_by_connection(struct tree_server *tree, struct
al_array_foreach(tree->users, i, user) {
struct tree_client *client;
al_array_foreach(user->clients, j, client) {
- if (client->conn == conn) {
- return user;
- }
+ if (client->conn == conn) return user;
}
struct tree_list *list;
al_array_foreach(user->lists, j, list) {
struct tree_sink *sink;
al_array_foreach(list->sinks, k, sink) {
- if (sink->conn == conn) {
- return user;
- }
+ if (sink->conn == conn) return user;
}
}
}
-
return NULL;
}
@@ -173,6 +168,11 @@ out:
static bool get_page_command_callback(void *userdata, struct aki_rpc_connection *conn,
struct aki_packet *packet, struct aki_packet *rpacket)
{
+ s32 id = aki_packet_read_s32(packet);
+
+ // Always reciprocate the requested id, even if it turns out to be invalid.
+ aki_packet_write_s32(rpacket, id);
+
struct tree_server *tree = (struct tree_server *)userdata;
struct tree_user *user = get_user_by_connection(tree, conn);
if (!user) {
@@ -180,7 +180,6 @@ static bool get_page_command_callback(void *userdata, struct aki_rpc_connection
goto out;
}
- s32 id = aki_packet_read_s32(packet);
u32 page_request = aki_packet_read_u32(packet);
struct sho_search *search = sho_client_get_search(&user->search, id);
@@ -195,7 +194,6 @@ static bool get_page_command_callback(void *userdata, struct aki_rpc_connection
}
aki_packet_write_s32(rpacket, 0);
- aki_packet_write_s32(rpacket, search->id);
aki_packet_write_u32(rpacket, page_request);
struct sho_result_page *page = &al_array_at(search->pages, page_request);
aki_packet_write_u32(rpacket, page->posts.size);
@@ -228,7 +226,6 @@ static bool add_command_callback(void *userdata, struct aki_rpc_connection *conn
struct tree_list *list = al_array_at(user->lists, 0);
tree_list_add(list, &unique_id, index);
- tree_list_skip(list, 1);
out:
aki_packet_free(packet);
@@ -314,7 +311,6 @@ static void connection_closed_callback(void *userdata, struct aki_rpc_connection
static struct aki_rpc_command commands[] = {
{ .op = TREE_CMD_IDENTIFY, .callback = identify_command_callback, .userdata = NULL },
- // Client commands.
{ .op = TREE_CMD_CREATE_SEARCH, .callback = create_search_command_callback, .userdata = NULL },
{ .op = TREE_CMD_GET_PAGE, .callback = get_page_command_callback, .userdata = NULL },
{ .op = TREE_CMD_ADD, .callback = add_command_callback, .userdata = NULL },