diff options
author | sss <sss@dark-alexandr.net> | 2023-01-17 00:38:19 +0300 |
---|---|---|
committer | sss <sss@dark-alexandr.net> | 2023-01-17 00:38:19 +0300 |
commit | cc3f33db7a8d3c4ad373e646b199808e01bc5d9b (patch) | |
tree | ec09d690c7656ab5f2cc72607e05fb359c24d8b2 /src/core/curl_helpers.h |
added webrdp public code
Diffstat (limited to 'src/core/curl_helpers.h')
-rw-r--r-- | src/core/curl_helpers.h | 76 |
1 files changed, 76 insertions, 0 deletions
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 <www.newinfosec.ru>, sss <sss at dark-alexandr dot net>. + * + */ + + +#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); |