/* BSD-2-Clause license * * Copyright (c) 2018-2023 NST , sss . * */ #pragma once void *init_curl_global(); void per_thread_curl_init(void *user_pool_data, wrdp_thpool_thread *t); bool curl_contact_auth_server(const char *token, void *user_data); typedef enum curl_request_type_ { curl_request_type_get, curl_request_type_post } curl_request_type; typedef struct _request_info { /* CURLM */ void *cm; /* type of HTTP request */ curl_request_type type; ws_session *session; /* buffer to be written (GET) / to be sent (POST) */ uint8_t *data; /* capacity of data */ size_t data_size; /* size of handled data */ size_t written; /* URL to use in the request; must be URL-encoded in the following * format: scheme://host:port/path */ char *url; /* handler callback * may be NULL * return false on failure */ bool (*user_data_handler_cb)( uint8_t *buf, ws_session *session, void *userdata); /* callback to clean up userdata */ void (*free_cb)(void *userdata); /* user specified data passed to all callbacks */ void *userdata; } curl_request_info; curl_request_info *curl_init_request(ws_session *session, curl_request_type type, uint8_t *data, size_t data_size, bool (*user_data_handler_cb)( uint8_t *buf, ws_session *session, void *userdata), void (*free_cb)(void *userdata), void *userdata); bool curl_request(curl_request_info *r); char *get_url(const char *s, curl_request_type type); void curl_list_session_destroy(ws_session *session); struct curls_easy_s { ws_session *session; void *curl; SLIST_ENTRY(curls_easy_s) entries; }; size_t curl_prepare_post_request_data(uint8_t **buf, ws_session *session);