1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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);
|