~ubuntu-branches/ubuntu/wily/pianobar/wily-proposed

« back to all changes in this revision

Viewing changes to src/libwaitress/waitress.h

  • Committer: Package Import Robot
  • Author(s): Luke Faraone
  • Date: 2011-11-16 14:26:36 UTC
  • mfrom: (1.3.6)
  • Revision ID: package-import@ubuntu.com-20111116142636-x2v716fs6wrybq46
Tags: 2011.11.11-1
* New upstream version 
  - SSL support and XMLRPC api version compatibility (v33) 
    (closes: #648209, LP: #887886)

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
#define _WAITRESS_H
26
26
 
27
27
#include <stdlib.h>
 
28
#include <unistd.h>
28
29
#include <stdbool.h>
29
 
 
30
 
#define WAITRESS_RECV_BUFFER 10*1024
31
 
 
32
 
typedef enum {WAITRESS_METHOD_GET = 0, WAITRESS_METHOD_POST} WaitressMethod_t;
33
 
 
34
 
typedef enum {WAITRESS_CB_RET_ERR, WAITRESS_CB_RET_OK} WaitressCbReturn_t;
 
30
#include <gnutls/gnutls.h>
 
31
 
 
32
#define WAITRESS_BUFFER_SIZE 10*1024
 
33
 
 
34
typedef enum {
 
35
        WAITRESS_METHOD_GET = 0,
 
36
        WAITRESS_METHOD_POST,
 
37
} WaitressMethod_t;
 
38
 
 
39
typedef enum {
 
40
        WAITRESS_CB_RET_ERR,
 
41
        WAITRESS_CB_RET_OK,
 
42
} WaitressCbReturn_t;
 
43
 
 
44
typedef enum {
 
45
        WAITRESS_HANDLER_CONTINUE,
 
46
        WAITRESS_HANDLER_DONE,
 
47
        WAITRESS_HANDLER_ERR,
 
48
        WAITRESS_HANDLER_ABORTED,
 
49
} WaitressHandlerReturn_t;
35
50
 
36
51
typedef struct {
37
52
        char *url; /* splitted url, unusable */
 
53
        bool tls;
38
54
        const char *user;
39
55
        const char *password;
40
56
        const char *host;
42
58
        const char *path; /* without leading '/' */
43
59
} WaitressUrl_t;
44
60
 
 
61
typedef enum {
 
62
        WAITRESS_RET_ERR = 0,
 
63
        WAITRESS_RET_OK,
 
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,
 
72
        WAITRESS_RET_TIMEOUT,
 
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,
 
81
} WaitressReturn_t;
 
82
 
 
83
/*      reusable handle
 
84
 */
45
85
typedef struct {
46
86
        WaitressUrl_t url;
47
87
        WaitressMethod_t method;
48
88
        const char *extraHeaders;
49
89
        const char *postData;
50
 
        size_t contentLength;
51
 
        size_t contentReceived;
52
90
        WaitressUrl_t proxy;
53
91
        /* extra data handed over to callback function */
54
92
        void *data;
55
93
        WaitressCbReturn_t (*callback) (void *, size_t, void *);
56
 
        int socktimeout;
 
94
        int timeout;
 
95
        gnutls_certificate_credentials_t tlsCred;
 
96
        bool tlsInitialized;
 
97
 
 
98
        /* per-request data */
 
99
        struct {
 
100
                size_t contentLength, contentReceived, chunkSize;
 
101
                int sockfd;
 
102
                char *buf;
 
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;
 
110
        } request;
57
111
} WaitressHandle_t;
58
112
 
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
65
 
} WaitressReturn_t;
66
 
 
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 *);