From cc3f33db7a8d3c4ad373e646b199808e01bc5d9b Mon Sep 17 00:00:00 2001 From: sss Date: Tue, 17 Jan 2023 00:38:19 +0300 Subject: added webrdp public code --- src/core/curl_helpers.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/core/curl_helpers.h (limited to 'src/core/curl_helpers.h') diff --git a/src/core/curl_helpers.h b/src/core/curl_helpers.h new file mode 100644 index 0000000..e1f4205 --- /dev/null +++ b/src/core/curl_helpers.h @@ -0,0 +1,76 @@ +/* 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); -- cgit v1.2.3