ssize_t _web_server_connection_socket_recieve_callback(socket_p socket, const void* data, size_t data_size, struct sockaddr* remote_end_point, void* ctx) { struct web_server_connection_t* wc = (struct web_server_connection_t*)ctx; mutex_lock(wc->mutex); ssize_t ret = 0; web_request_p request = web_request_create(); if ((ret = web_request_parse(request, data, data_size)) > 0) { mutex_unlock(wc->mutex); if (wc->request_callback != NULL) wc->request_callback(wc, request, wc->request_callback_ctx); } else mutex_unlock(wc->mutex); web_request_destroy(request); return ret; }
void _dacp_client_send_request(struct dacp_client_t* dc, const char* request_name) { if (dacp_client_is_available(dc)) { web_request_p request = web_request_create(); char path[strlen(request_name) + 13]; sprintf(path, "/ctrl-int/1/%s", request_name); web_request_set_method(request, "GET"); web_request_set_path(request, path); web_request_set_protocol(request, "HTTP/1.1"); web_headers_set_value(web_request_get_headers(request), "Active-Remote", dc->active_remove); web_client_connection_send_request(dc->web_connection, request); object_release(request); } }