summaryrefslogtreecommitdiff
path: root/src/core/curl_helpers.h
diff options
context:
space:
mode:
authorsss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
committersss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
commitcc3f33db7a8d3c4ad373e646b199808e01bc5d9b (patch)
treeec09d690c7656ab5f2cc72607e05fb359c24d8b2 /src/core/curl_helpers.h
added webrdp public code
Diffstat (limited to 'src/core/curl_helpers.h')
-rw-r--r--src/core/curl_helpers.h76
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);