summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/server.c106
1 files changed, 55 insertions, 51 deletions
diff --git a/src/server/server.c b/src/server/server.c
index a77046b..6fc2892 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -188,56 +188,6 @@ void handle_toggle_sink(struct camu_server *server, str *name, struct camu_serve
}
}
-static bool client_command_callback(void *userdata, struct aki_rpc_connection *conn,
- struct aki_packet *packet, struct aki_packet *rpacket)
-{
- struct camu_server *server = (struct camu_server *)userdata;
- (void)rpacket;
-
- struct camu_server_client *client = get_client_by_connection(server, conn);
- if (!client) goto out;
-
- u8 op = aki_packet_read_u8(packet);
- switch (op) {
- case CAMU_CLIENT_CREATE_LIST: {
- str name;
- aki_packet_read_str(packet, &name);
- struct lia_list *list = al_alloc_object(struct lia_list);
- lia_list_init(list, &name);
- al_array_push(server->lists, list);
- break;
- }
- case CAMU_CLIENT_TOGGLE_SINK: {
- str name;
- aki_packet_read_str(packet, &name);
- struct camu_server_sink *sink = get_sink_from_name(server, &name);
- if (!sink) goto out;
- aki_packet_read_str(packet, &name); // list name.
- bool enable = aki_packet_read_bool(packet);
- handle_toggle_sink(server, &name, sink, enable);
- break;
- }
- case CAMU_CLIENT_CREATE_SEARCH: {
- str module;
- aki_packet_read_str(packet, &module);
- str query;
- aki_packet_read_str(packet, &query);
- camu_portal_create_search(&server->bridge, &module, &query, client_portal_callback, conn);
- break;
- }
- case CAMU_CLIENT_GET_PAGE: {
- s32 id = aki_packet_read_s32(packet);
- u32 num = aki_packet_read_u32(packet);
- camu_portal_get_page(&server->bridge, id, num, client_portal_callback, conn);
- break;
- }
- }
-
-out:
- aki_packet_free(packet);
- return true;
-}
-
static void node_callback(void *userdata, u8 op, u64 duration)
{
struct camu_resource *resource = (struct camu_resource *)userdata;
@@ -293,6 +243,58 @@ static void list_callback(void *userdata, u8 op, struct lia_list_entry *entry, v
}
}
+static bool client_command_callback(void *userdata, struct aki_rpc_connection *conn,
+ struct aki_packet *packet, struct aki_packet *rpacket)
+{
+ struct camu_server *server = (struct camu_server *)userdata;
+ (void)rpacket;
+
+ struct camu_server_client *client = get_client_by_connection(server, conn);
+ if (!client) goto out;
+
+ u8 op = aki_packet_read_u8(packet);
+ switch (op) {
+ case CAMU_CLIENT_CREATE_LIST: {
+ str name;
+ aki_packet_read_str(packet, &name);
+ struct lia_list *list = al_alloc_object(struct lia_list);
+ lia_list_init(list, &name);
+ list->callback = list_callback;
+ list->userdata = server;
+ al_array_push(server->lists, list);
+ break;
+ }
+ case CAMU_CLIENT_TOGGLE_SINK: {
+ str name;
+ aki_packet_read_str(packet, &name);
+ struct camu_server_sink *sink = get_sink_from_name(server, &name);
+ if (!sink) goto out;
+ aki_packet_read_str(packet, &name); // list name.
+ bool enable = aki_packet_read_bool(packet);
+ handle_toggle_sink(server, &name, sink, enable);
+ break;
+ }
+ case CAMU_CLIENT_CREATE_SEARCH: {
+ str module;
+ aki_packet_read_str(packet, &module);
+ str query;
+ aki_packet_read_str(packet, &query);
+ camu_portal_create_search(&server->bridge, &module, &query, client_portal_callback, conn);
+ break;
+ }
+ case CAMU_CLIENT_GET_PAGE: {
+ s32 id = aki_packet_read_s32(packet);
+ u32 num = aki_packet_read_u32(packet);
+ camu_portal_get_page(&server->bridge, id, num, client_portal_callback, conn);
+ break;
+ }
+ }
+
+out:
+ aki_packet_free(packet);
+ return true;
+}
+
static void handle_add_command(struct camu_server *server, struct lia_list *list, struct aki_packet *packet)
{
u8 op = aki_packet_read_u8(packet);
@@ -300,11 +302,13 @@ static void handle_add_command(struct camu_server *server, struct lia_list *list
case CAMU_RESOURCE_FILE: {
str path;
aki_packet_read_str(packet, &path);
+ struct cch_entry *entry = cch_handler_file_create(&path);
+ if (!entry) return;
struct camu_resource_file *resource = al_alloc_object(struct camu_resource_file);
resource->r.type = CAMU_RESOURCE_FILE;
resource->r.load = CAMU_RESOURCE_NOT_LOADED;
al_str_clone(&resource->path, &path);
- resource->r.entry = cch_handler_file_create(&path);
+ resource->r.entry = entry;
resource->r.node = lia_server_create_node(&server->data.server, resource->r.entry);
resource->r.node->callback = node_callback;
resource->r.node->userdata = (struct camu_resource *)resource;