25
25
#define _WAITRESS_H
27
27
#include <stdlib.h>
28
29
#include <stdbool.h>
30
#define WAITRESS_RECV_BUFFER 10*1024
32
typedef enum {WAITRESS_METHOD_GET = 0, WAITRESS_METHOD_POST} WaitressMethod_t;
34
typedef enum {WAITRESS_CB_RET_ERR, WAITRESS_CB_RET_OK} WaitressCbReturn_t;
30
#include <gnutls/gnutls.h>
32
#define WAITRESS_BUFFER_SIZE 10*1024
35
WAITRESS_METHOD_GET = 0,
45
WAITRESS_HANDLER_CONTINUE,
46
WAITRESS_HANDLER_DONE,
48
WAITRESS_HANDLER_ABORTED,
49
} WaitressHandlerReturn_t;
37
52
char *url; /* splitted url, unusable */
39
55
const char *password;
42
58
const char *path; /* without leading '/' */
64
WAITRESS_RET_STATUS_UNKNOWN,
65
WAITRESS_RET_NOTFOUND,
66
WAITRESS_RET_FORBIDDEN,
67
WAITRESS_RET_CONNECT_REFUSED,
68
WAITRESS_RET_SOCK_ERR,
69
WAITRESS_RET_GETADDR_ERR,
70
WAITRESS_RET_CB_ABORT,
71
WAITRESS_RET_PARTIAL_FILE,
73
WAITRESS_RET_READ_ERR,
74
WAITRESS_RET_CONNECTION_CLOSED,
75
WAITRESS_RET_DECODING_ERR,
76
WAITRESS_RET_TLS_DISABLED,
77
WAITRESS_RET_TLS_WRITE_ERR,
78
WAITRESS_RET_TLS_READ_ERR,
79
WAITRESS_RET_TLS_HANDSHAKE_ERR,
80
WAITRESS_RET_TLS_TRUSTFILE_ERR,
47
87
WaitressMethod_t method;
48
88
const char *extraHeaders;
49
89
const char *postData;
51
size_t contentReceived;
52
90
WaitressUrl_t proxy;
53
91
/* extra data handed over to callback function */
55
93
WaitressCbReturn_t (*callback) (void *, size_t, void *);
95
gnutls_certificate_credentials_t tlsCred;
98
/* per-request data */
100
size_t contentLength, contentReceived, chunkSize;
103
gnutls_session_t tlsSession;
104
/* first argument is WaitressHandle_t, but that's not defined here */
105
WaitressHandlerReturn_t (*dataHandler) (void *, char *, const size_t);
106
ssize_t (*read) (void *, char *, const size_t, ssize_t *);
107
ssize_t (*write) (void *, const char *, const size_t);
108
/* temporary return value storage */
109
WaitressReturn_t readWriteRet;
57
111
} WaitressHandle_t;
59
typedef enum {WAITRESS_RET_ERR = 0, WAITRESS_RET_OK, WAITRESS_RET_STATUS_UNKNOWN,
60
WAITRESS_RET_NOTFOUND, WAITRESS_RET_FORBIDDEN, WAITRESS_RET_CONNECT_REFUSED,
61
WAITRESS_RET_SOCK_ERR, WAITRESS_RET_GETADDR_ERR,
62
WAITRESS_RET_CB_ABORT, WAITRESS_RET_HDR_OVERFLOW,
63
WAITRESS_RET_PARTIAL_FILE, WAITRESS_RET_TIMEOUT, WAITRESS_RET_READ_ERR,
64
WAITRESS_RET_CONNECTION_CLOSED
67
void WaitressInit (WaitressHandle_t *);
113
WaitressReturn_t WaitressInit (WaitressHandle_t *, const char *);
68
114
void WaitressFree (WaitressHandle_t *);
69
115
bool WaitressSetProxy (WaitressHandle_t *, const char *);
70
116
char *WaitressUrlEncode (const char *);