~ubuntu-branches/ubuntu/trusty/serf/trusty-security

1 by Noritada Kobayashi
Import upstream version 0.1.0
1
/* Copyright 2002-2004 Justin Erenkrantz and Greg Stein
2
 *
3
 * Licensed under the Apache License, Version 2.0 (the "License");
4
 * you may not use this file except in compliance with the License.
5
 * You may obtain a copy of the License at
6
 *
7
 *     http://www.apache.org/licenses/LICENSE-2.0
8
 *
9
 * Unless required by applicable law or agreed to in writing, software
10
 * distributed under the License is distributed on an "AS IS" BASIS,
11
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
 * See the License for the specific language governing permissions and
13
 * limitations under the License.
14
 */
15
16
#ifndef SERF_BUCKET_TYPES_H
17
#define SERF_BUCKET_TYPES_H
18
19
#include <apr_mmap.h>
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
20
#include <apr_hash.h>
1 by Noritada Kobayashi
Import upstream version 0.1.0
21
22
/* this header and serf.h refer to each other, so take a little extra care */
23
#ifndef SERF_H
24
#include "serf.h"
25
#endif
26
27
28
/**
29
 * @file serf_bucket_types.h
30
 * @brief serf-supported bucket types
31
 */
32
/* ### this whole file needs docco ... */
33
34
#ifdef __cplusplus
35
extern "C" {
36
#endif
37
38
/* ==================================================================== */
39
40
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
41
extern const serf_bucket_type_t serf_bucket_type_request;
1 by Noritada Kobayashi
Import upstream version 0.1.0
42
#define SERF_BUCKET_IS_REQUEST(b) SERF_BUCKET_CHECK((b), request)
43
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
44
serf_bucket_t *serf_bucket_request_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
45
    const char *method,
46
    const char *URI,
47
    serf_bucket_t *body,
48
    serf_bucket_alloc_t *allocator);
49
1.2.8 by Peter Samuelson
Import upstream version 1.1.0
50
/* Send a Content-Length header with @a len. The @a body bucket should
51
   contain precisely that much data.  */
52
void serf_bucket_request_set_CL(
53
    serf_bucket_t *bucket,
54
    apr_int64_t len);
55
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
56
serf_bucket_t *serf_bucket_request_get_headers(
1 by Noritada Kobayashi
Import upstream version 0.1.0
57
    serf_bucket_t *request);
58
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
59
void serf_bucket_request_become(
60
    serf_bucket_t *bucket,
61
    const char *method,
62
    const char *uri,
63
    serf_bucket_t *body);
1 by Noritada Kobayashi
Import upstream version 0.1.0
64
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
65
/**
66
 * Sets the root url of the remote host. If this request contains a relative
67
 * url, it will be prefixed with the root url to form an absolute url.
68
 * @a bucket is the request bucket. @a root_url is the absolute url of the
69
 * root of the remote host, without the closing '/'.
70
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
71
void serf_bucket_request_set_root(
72
    serf_bucket_t *bucket,
73
    const char *root_url);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
74
1 by Noritada Kobayashi
Import upstream version 0.1.0
75
/* ==================================================================== */
76
77
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
78
extern const serf_bucket_type_t serf_bucket_type_response;
1 by Noritada Kobayashi
Import upstream version 0.1.0
79
#define SERF_BUCKET_IS_RESPONSE(b) SERF_BUCKET_CHECK((b), response)
80
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
81
serf_bucket_t *serf_bucket_response_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
82
    serf_bucket_t *stream,
83
    serf_bucket_alloc_t *allocator);
84
85
#define SERF_HTTP_VERSION(major, minor)  ((major) * 1000 + (minor))
86
#define SERF_HTTP_11 SERF_HTTP_VERSION(1, 1)
87
#define SERF_HTTP_10 SERF_HTTP_VERSION(1, 0)
1.2.9 by James McCoy
Import upstream version 1.3.3
88
#define SERF_HTTP_VERSION_MAJOR(shv) ((int)shv / 1000)
89
#define SERF_HTTP_VERSION_MINOR(shv) ((int)shv % 1000)
1 by Noritada Kobayashi
Import upstream version 0.1.0
90
91
typedef struct {
92
    int version;
93
    int code;
94
    const char *reason;
95
} serf_status_line;
96
97
/**
98
 * Return the Status-Line information, if available. This function
99
 * works like other bucket read functions: it may return APR_EAGAIN or
100
 * APR_EOF to signal the state of the bucket for reading. A return
101
 * value of APR_SUCCESS will always indicate that status line
102
 * information was returned; for other return values the caller must
103
 * check the version field in @a sline. A value of 0 means that the
104
 * data is not (yet) present.
105
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
106
apr_status_t serf_bucket_response_status(
1 by Noritada Kobayashi
Import upstream version 0.1.0
107
    serf_bucket_t *bkt,
108
    serf_status_line *sline);
109
110
/**
111
 * Wait for the HTTP headers to be processed for a @a response.
112
 *
113
 * If the headers are available, APR_SUCCESS is returned.
114
 * If the headers aren't available, APR_EAGAIN is returned.
115
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
116
apr_status_t serf_bucket_response_wait_for_headers(
1 by Noritada Kobayashi
Import upstream version 0.1.0
117
    serf_bucket_t *response);
118
119
/**
120
 * Get the headers bucket for @a response.
121
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
122
serf_bucket_t *serf_bucket_response_get_headers(
1 by Noritada Kobayashi
Import upstream version 0.1.0
123
    serf_bucket_t *response);
124
125
/**
126
 * Advise the response @a bucket that this was from a HEAD request and
127
 * that it should not expect to see a response body.
128
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
129
void serf_bucket_response_set_head(
130
    serf_bucket_t *bucket);
131
132
/* ==================================================================== */
133
1.2.9 by James McCoy
Import upstream version 1.3.3
134
extern const serf_bucket_type_t serf_bucket_type_response_body;
135
#define SERF_BUCKET_IS_RESPONSE_BODY(b) SERF_BUCKET_CHECK((b), response_body)
136
137
serf_bucket_t *serf_bucket_response_body_create(
138
    serf_bucket_t *stream,
139
    apr_uint64_t limit,
140
    serf_bucket_alloc_t *allocator);
141
142
/* ==================================================================== */
143
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
144
extern const serf_bucket_type_t serf_bucket_type_bwtp_frame;
145
#define SERF_BUCKET_IS_BWTP_FRAME(b) SERF_BUCKET_CHECK((b), bwtp_frame)
146
147
extern const serf_bucket_type_t serf_bucket_type_bwtp_incoming_frame;
148
#define SERF_BUCKET_IS_BWTP_INCOMING_FRAME(b) SERF_BUCKET_CHECK((b), bwtp_incoming_frame)
149
150
int serf_bucket_bwtp_frame_get_channel(
151
    serf_bucket_t *hdr);
152
153
int serf_bucket_bwtp_frame_get_type(
154
    serf_bucket_t *hdr);
155
156
const char *serf_bucket_bwtp_frame_get_phrase(
157
    serf_bucket_t *hdr);
158
159
serf_bucket_t *serf_bucket_bwtp_frame_get_headers(
160
    serf_bucket_t *hdr);
161
162
serf_bucket_t *serf_bucket_bwtp_channel_open(
163
    int channel,
164
    const char *URI,
165
    serf_bucket_alloc_t *allocator);
166
167
serf_bucket_t *serf_bucket_bwtp_channel_close(
168
    int channel,
169
    serf_bucket_alloc_t *allocator);
170
171
serf_bucket_t *serf_bucket_bwtp_header_create(
172
    int channel,
173
    const char *phrase,
174
    serf_bucket_alloc_t *allocator);
175
176
serf_bucket_t *serf_bucket_bwtp_message_create(
177
    int channel,
178
    serf_bucket_t *body,
179
    serf_bucket_alloc_t *allocator);
180
181
serf_bucket_t *serf_bucket_bwtp_incoming_frame_create(
182
    serf_bucket_t *bkt,
183
    serf_bucket_alloc_t *allocator);
184
185
apr_status_t serf_bucket_bwtp_incoming_frame_wait_for_headers(
186
    serf_bucket_t *bkt);
187
188
/* ==================================================================== */
189
190
191
extern const serf_bucket_type_t serf_bucket_type_aggregate;
1 by Noritada Kobayashi
Import upstream version 0.1.0
192
#define SERF_BUCKET_IS_AGGREGATE(b) SERF_BUCKET_CHECK((b), aggregate)
193
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
194
typedef apr_status_t (*serf_bucket_aggregate_eof_t)(
195
    void *baton,
196
    serf_bucket_t *aggregate_bucket);
197
198
/** serf_bucket_aggregate_cleanup will instantly destroy all buckets in
199
    the aggregate bucket that have been read completely. Whereas normally, 
200
    these buckets are destroyed on every read operation. */ 
201
void serf_bucket_aggregate_cleanup(
202
    serf_bucket_t *bucket,
203
    serf_bucket_alloc_t *allocator);
204
205
serf_bucket_t *serf_bucket_aggregate_create(
206
    serf_bucket_alloc_t *allocator);
207
208
/* Creates a stream bucket.
209
   A stream bucket is like an aggregate bucket, but:
210
   - it doesn't destroy its child buckets on cleanup
211
   - one can always keep adding child buckets, the handler FN should return
212
     APR_EOF when no more buckets will be added.
213
214
  Note: keep this factory function internal for now. If it turns out this
215
  bucket type is useful outside serf, we should make it an actual separate
216
  type.
217
  */
218
serf_bucket_t *serf__bucket_stream_create(
219
    serf_bucket_alloc_t *allocator,
220
    serf_bucket_aggregate_eof_t fn,
221
    void *baton);
1 by Noritada Kobayashi
Import upstream version 0.1.0
222
223
/** Transform @a bucket in-place into an aggregate bucket. */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
224
void serf_bucket_aggregate_become(
225
    serf_bucket_t *bucket);
1 by Noritada Kobayashi
Import upstream version 0.1.0
226
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
227
void serf_bucket_aggregate_prepend(
1 by Noritada Kobayashi
Import upstream version 0.1.0
228
    serf_bucket_t *aggregate_bucket,
229
    serf_bucket_t *prepend_bucket);
230
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
231
void serf_bucket_aggregate_append(
1 by Noritada Kobayashi
Import upstream version 0.1.0
232
    serf_bucket_t *aggregate_bucket,
233
    serf_bucket_t *append_bucket);
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
234
    
235
void serf_bucket_aggregate_hold_open(
236
    serf_bucket_t *aggregate_bucket,
237
    serf_bucket_aggregate_eof_t fn,
238
    void *baton);
1 by Noritada Kobayashi
Import upstream version 0.1.0
239
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
240
void serf_bucket_aggregate_prepend_iovec(
1 by Noritada Kobayashi
Import upstream version 0.1.0
241
    serf_bucket_t *aggregate_bucket,
242
    struct iovec *vecs,
243
    int vecs_count);
244
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
245
void serf_bucket_aggregate_append_iovec(
1 by Noritada Kobayashi
Import upstream version 0.1.0
246
    serf_bucket_t *aggregate_bucket,
247
    struct iovec *vecs,
248
    int vecs_count);
249
250
/* ==================================================================== */
251
252
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
253
extern const serf_bucket_type_t serf_bucket_type_file;
1 by Noritada Kobayashi
Import upstream version 0.1.0
254
#define SERF_BUCKET_IS_FILE(b) SERF_BUCKET_CHECK((b), file)
255
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
256
serf_bucket_t *serf_bucket_file_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
257
    apr_file_t *file,
258
    serf_bucket_alloc_t *allocator);
259
260
261
/* ==================================================================== */
262
263
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
264
extern const serf_bucket_type_t serf_bucket_type_socket;
1 by Noritada Kobayashi
Import upstream version 0.1.0
265
#define SERF_BUCKET_IS_SOCKET(b) SERF_BUCKET_CHECK((b), socket)
266
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
267
serf_bucket_t *serf_bucket_socket_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
268
    apr_socket_t *skt,
269
    serf_bucket_alloc_t *allocator);
270
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
271
/**
272
 * Call @a progress_func every time bytes are read from the socket, pass
273
 * the number of bytes read.
274
 *
275
 * When using serf's bytes read & written progress indicator, pass 
276
 * @a serf_context_progress_delta for progress_func and the serf_context for
277
 * progress_baton.
278
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
279
void serf_bucket_socket_set_read_progress_cb(
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
280
    serf_bucket_t *bucket,
281
    const serf_progress_t progress_func,
282
    void *progress_baton);
1 by Noritada Kobayashi
Import upstream version 0.1.0
283
284
/* ==================================================================== */
285
286
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
287
extern const serf_bucket_type_t serf_bucket_type_simple;
1 by Noritada Kobayashi
Import upstream version 0.1.0
288
#define SERF_BUCKET_IS_SIMPLE(b) SERF_BUCKET_CHECK((b), simple)
289
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
290
typedef void (*serf_simple_freefunc_t)(
291
    void *baton,
292
    const char *data);
1 by Noritada Kobayashi
Import upstream version 0.1.0
293
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
294
serf_bucket_t *serf_bucket_simple_create(
295
    const char *data,
296
    apr_size_t len,
1 by Noritada Kobayashi
Import upstream version 0.1.0
297
    serf_simple_freefunc_t freefunc,
298
    void *freefunc_baton,
299
    serf_bucket_alloc_t *allocator);
300
301
/**
302
 * Equivalent to serf_bucket_simple_create, except that the bucket takes
303
 * ownership of a private copy of the data.
304
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
305
serf_bucket_t *serf_bucket_simple_copy_create(
306
    const char *data,
307
    apr_size_t len,
1 by Noritada Kobayashi
Import upstream version 0.1.0
308
    serf_bucket_alloc_t *allocator);
309
1.2.9 by James McCoy
Import upstream version 1.3.3
310
/**
311
 * Equivalent to serf_bucket_simple_create, except that the bucket assumes
312
 * responsibility for freeing the data on this allocator without making
313
 * a copy.  It is assumed that data was created by a call from allocator.
314
 */
315
serf_bucket_t *serf_bucket_simple_own_create(
316
    const char *data,
317
    apr_size_t len,
318
    serf_bucket_alloc_t *allocator);
319
1 by Noritada Kobayashi
Import upstream version 0.1.0
320
#define SERF_BUCKET_SIMPLE_STRING(s,a) \
321
    serf_bucket_simple_create(s, strlen(s), NULL, NULL, a);
322
323
#define SERF_BUCKET_SIMPLE_STRING_LEN(s,l,a) \
324
    serf_bucket_simple_create(s, l, NULL, NULL, a);
325
326
/* ==================================================================== */
327
328
329
/* Note: apr_mmap_t is always defined, but if APR doesn't have mmaps, then
330
   the caller can never create an apr_mmap_t to pass to this function. */
331
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
332
extern const serf_bucket_type_t serf_bucket_type_mmap;
1 by Noritada Kobayashi
Import upstream version 0.1.0
333
#define SERF_BUCKET_IS_MMAP(b) SERF_BUCKET_CHECK((b), mmap)
334
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
335
serf_bucket_t *serf_bucket_mmap_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
336
    apr_mmap_t *mmap,
337
    serf_bucket_alloc_t *allocator);
338
339
340
/* ==================================================================== */
341
342
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
343
extern const serf_bucket_type_t serf_bucket_type_headers;
1 by Noritada Kobayashi
Import upstream version 0.1.0
344
#define SERF_BUCKET_IS_HEADERS(b) SERF_BUCKET_CHECK((b), headers)
345
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
346
serf_bucket_t *serf_bucket_headers_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
347
    serf_bucket_alloc_t *allocator);
348
349
/**
350
 * Set, default: value copied.
351
 *
352
 * Set the specified @a header within the bucket, copying the @a value
353
 * into space from this bucket's allocator. The header is NOT copied,
354
 * so it should remain in scope at least as long as the bucket.
355
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
356
void serf_bucket_headers_set(
1 by Noritada Kobayashi
Import upstream version 0.1.0
357
    serf_bucket_t *headers_bucket,
358
    const char *header,
359
    const char *value);
360
361
/**
362
 * Set, copies: header and value copied.
363
 *
364
 * Copy the specified @a header and @a value into the bucket, using space
365
 * from this bucket's allocator.
366
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
367
void serf_bucket_headers_setc(
1 by Noritada Kobayashi
Import upstream version 0.1.0
368
    serf_bucket_t *headers_bucket,
369
    const char *header,
370
    const char *value);
371
372
/**
373
 * Set, no copies.
374
 *
375
 * Set the specified @a header and @a value into the bucket, without
376
 * copying either attribute. Both attributes should remain in scope at
377
 * least as long as the bucket.
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
378
 *
379
 * @note In the case where a header already exists this will result
380
 *       in a reallocation and copy, @see serf_bucket_headers_setn.
1 by Noritada Kobayashi
Import upstream version 0.1.0
381
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
382
void serf_bucket_headers_setn(
1 by Noritada Kobayashi
Import upstream version 0.1.0
383
    serf_bucket_t *headers_bucket,
384
    const char *header,
385
    const char *value);
386
387
/**
388
 * Set, extended: fine grained copy control of header and value.
389
 *
390
 * Set the specified @a header, with length @a header_size with the
391
 * @a value, and length @a value_size, into the bucket. The header will
392
 * be copied if @a header_copy is set, and the value is copied if
393
 * @a value_copy is set. If the values are not copied, then they should
394
 * remain in scope at least as long as the bucket.
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
395
 *
396
 * If @a headers_bucket already contains a header with the same name
397
 * as @a header, then append @a value to the existing value,
398
 * separating with a comma (as per RFC 2616, section 4.2).  In this
399
 * case, the new value must be allocated and the header re-used, so
400
 * behave as if @a value_copy were true and @a header_copy false.
1 by Noritada Kobayashi
Import upstream version 0.1.0
401
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
402
void serf_bucket_headers_setx(
1 by Noritada Kobayashi
Import upstream version 0.1.0
403
    serf_bucket_t *headers_bucket,
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
404
    const char *header,
405
    apr_size_t header_size,
406
    int header_copy,
407
    const char *value,
408
    apr_size_t value_size,
409
    int value_copy);
1 by Noritada Kobayashi
Import upstream version 0.1.0
410
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
411
const char *serf_bucket_headers_get(
1 by Noritada Kobayashi
Import upstream version 0.1.0
412
    serf_bucket_t *headers_bucket,
413
    const char *header);
414
415
/**
416
 * @param baton opaque baton as passed to @see serf_bucket_headers_do
417
 * @param key The header key from this iteration through the table
418
 * @param value The header value from this iteration through the table
419
 */
420
typedef int (serf_bucket_headers_do_callback_fn_t)(
421
    void *baton,
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
422
    const char *key,
1 by Noritada Kobayashi
Import upstream version 0.1.0
423
    const char *value);
424
425
/**
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
426
 * Iterates over all headers of the message and invokes the callback 
427
 * function with header key and value. Stop iterating when no more
428
 * headers are available or when the callback function returned a 
429
 * non-0 value.
430
 *
1 by Noritada Kobayashi
Import upstream version 0.1.0
431
 * @param headers_bucket headers to iterate over
432
 * @param func callback routine to invoke for every header in the bucket
433
 * @param baton baton to pass on each invocation to func
434
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
435
void serf_bucket_headers_do(
1 by Noritada Kobayashi
Import upstream version 0.1.0
436
    serf_bucket_t *headers_bucket,
437
    serf_bucket_headers_do_callback_fn_t func,
438
    void *baton);
439
440
441
/* ==================================================================== */
442
443
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
444
extern const serf_bucket_type_t serf_bucket_type_chunk;
1 by Noritada Kobayashi
Import upstream version 0.1.0
445
#define SERF_BUCKET_IS_CHUNK(b) SERF_BUCKET_CHECK((b), chunk)
446
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
447
serf_bucket_t *serf_bucket_chunk_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
448
    serf_bucket_t *stream,
449
    serf_bucket_alloc_t *allocator);
450
451
452
/* ==================================================================== */
453
454
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
455
extern const serf_bucket_type_t serf_bucket_type_dechunk;
1 by Noritada Kobayashi
Import upstream version 0.1.0
456
#define SERF_BUCKET_IS_DECHUNK(b) SERF_BUCKET_CHECK((b), dechunk)
457
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
458
serf_bucket_t *serf_bucket_dechunk_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
459
    serf_bucket_t *stream,
460
    serf_bucket_alloc_t *allocator);
461
462
463
/* ==================================================================== */
464
465
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
466
extern const serf_bucket_type_t serf_bucket_type_deflate;
1 by Noritada Kobayashi
Import upstream version 0.1.0
467
#define SERF_BUCKET_IS_DEFLATE(b) SERF_BUCKET_CHECK((b), deflate)
468
469
#define SERF_DEFLATE_GZIP 0
470
#define SERF_DEFLATE_DEFLATE 1
471
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
472
serf_bucket_t *serf_bucket_deflate_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
473
    serf_bucket_t *stream,
474
    serf_bucket_alloc_t *allocator,
475
    int format);
476
477
478
/* ==================================================================== */
479
480
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
481
extern const serf_bucket_type_t serf_bucket_type_limit;
1 by Noritada Kobayashi
Import upstream version 0.1.0
482
#define SERF_BUCKET_IS_LIMIT(b) SERF_BUCKET_CHECK((b), limit)
483
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
484
serf_bucket_t *serf_bucket_limit_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
485
    serf_bucket_t *stream,
1.2.5 by Peter Samuelson
Import upstream version 1.0.0~0+svn1514
486
    apr_uint64_t limit,
1 by Noritada Kobayashi
Import upstream version 0.1.0
487
    serf_bucket_alloc_t *allocator);
488
489
490
/* ==================================================================== */
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
491
#define SERF_SSL_CERT_NOTYETVALID       1
492
#define SERF_SSL_CERT_EXPIRED           2
493
#define SERF_SSL_CERT_UNKNOWNCA         4
494
#define SERF_SSL_CERT_SELF_SIGNED       8
495
#define SERF_SSL_CERT_UNKNOWN_FAILURE  16
1.2.9 by James McCoy
Import upstream version 1.3.3
496
#define SERF_SSL_CERT_REVOKED          32
1 by Noritada Kobayashi
Import upstream version 0.1.0
497
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
498
extern const serf_bucket_type_t serf_bucket_type_ssl_encrypt;
1 by Noritada Kobayashi
Import upstream version 0.1.0
499
#define SERF_BUCKET_IS_SSL_ENCRYPT(b) SERF_BUCKET_CHECK((b), ssl_encrypt)
500
501
typedef struct serf_ssl_context_t serf_ssl_context_t;
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
502
typedef struct serf_ssl_certificate_t serf_ssl_certificate_t;
1 by Noritada Kobayashi
Import upstream version 0.1.0
503
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
504
typedef apr_status_t (*serf_ssl_need_client_cert_t)(
505
    void *data,
506
    const char **cert_path);
507
508
typedef apr_status_t (*serf_ssl_need_cert_password_t)(
509
    void *data,
510
    const char *cert_path,
511
    const char **password);
512
513
typedef apr_status_t (*serf_ssl_need_server_cert_t)(
514
    void *data, 
515
    int failures,
516
    const serf_ssl_certificate_t *cert);
517
1.2.8 by Peter Samuelson
Import upstream version 1.1.0
518
typedef apr_status_t (*serf_ssl_server_cert_chain_cb_t)(
519
    void *data,
520
    int failures,
521
    int error_depth,
522
    const serf_ssl_certificate_t * const * certs,
523
    apr_size_t certs_len);
524
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
525
void serf_ssl_client_cert_provider_set(
526
    serf_ssl_context_t *context,
527
    serf_ssl_need_client_cert_t callback,
528
    void *data,
529
    void *cache_pool);
530
531
void serf_ssl_client_cert_password_set(
532
    serf_ssl_context_t *context,
533
    serf_ssl_need_cert_password_t callback,
534
    void *data,
535
    void *cache_pool);
536
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
537
/**
538
 * Set a callback to override the default SSL server certificate validation 
539
 * algorithm.
540
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
541
void serf_ssl_server_cert_callback_set(
542
    serf_ssl_context_t *context,
543
    serf_ssl_need_server_cert_t callback,
544
    void *data);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
545
546
/**
1.2.8 by Peter Samuelson
Import upstream version 1.1.0
547
 * Set callbacks to override the default SSL server certificate validation 
548
 * algorithm for the current certificate or the entire certificate chain. 
549
 */
550
void serf_ssl_server_cert_chain_callback_set(
551
    serf_ssl_context_t *context,
552
    serf_ssl_need_server_cert_t cert_callback,
553
    serf_ssl_server_cert_chain_cb_t cert_chain_callback,
554
    void *data);
555
556
/**
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
557
 * Use the default root CA certificates as included with the OpenSSL library.
558
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
559
apr_status_t serf_ssl_use_default_certificates(
560
    serf_ssl_context_t *context);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
561
562
/**
1.2.5 by Peter Samuelson
Import upstream version 1.0.0~0+svn1514
563
 * Allow SNI indicators to be sent to the server.
564
 */
565
apr_status_t serf_ssl_set_hostname(
566
    serf_ssl_context_t *context, const char *hostname);
567
568
/**
1.2.2 by Peter Samuelson
Import upstream version 0.3.0
569
 * Return the depth of the certificate.
570
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
571
int serf_ssl_cert_depth(
572
    const serf_ssl_certificate_t *cert);
1.2.2 by Peter Samuelson
Import upstream version 0.3.0
573
574
/**
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
575
 * Extract the fields of the issuer in a table with keys (E, CN, OU, O, L, 
576
 * ST and C). The returned table will be allocated in @a pool.
577
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
578
apr_hash_t *serf_ssl_cert_issuer(
579
    const serf_ssl_certificate_t *cert,
580
    apr_pool_t *pool);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
581
582
/**
583
 * Extract the fields of the subject in a table with keys (E, CN, OU, O, L, 
584
 * ST and C). The returned table will be allocated in @a pool.
585
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
586
apr_hash_t *serf_ssl_cert_subject(
587
    const serf_ssl_certificate_t *cert,
588
    apr_pool_t *pool);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
589
590
/**
591
 * Extract the fields of the certificate in a table with keys (sha1, notBefore,
1.2.9 by James McCoy
Import upstream version 1.3.3
592
 * notAfter, subjectAltName). The returned table will be allocated in @a pool.
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
593
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
594
apr_hash_t *serf_ssl_cert_certificate(
595
    const serf_ssl_certificate_t *cert,
596
    apr_pool_t *pool);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
597
598
/**
1.2.2 by Peter Samuelson
Import upstream version 0.3.0
599
 * Export a certificate to base64-encoded, zero-terminated string.
600
 * The returned string is allocated in @a pool. Returns NULL on failure.
601
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
602
const char *serf_ssl_cert_export(
603
    const serf_ssl_certificate_t *cert,
604
    apr_pool_t *pool);
1.2.2 by Peter Samuelson
Import upstream version 0.3.0
605
606
/**
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
607
 * Load a CA certificate file from a path @a file_path. If the file was loaded
608
 * and parsed correctly, a certificate @a cert will be created and returned.
609
 * This certificate object will be alloced in @a pool.
610
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
611
apr_status_t serf_ssl_load_cert_file(
612
    serf_ssl_certificate_t **cert,
613
    const char *file_path,
614
    apr_pool_t *pool);
1.2.1 by Noritada Kobayashi
Import upstream version 0.2.0
615
616
/**
617
 * Adds the certificate @a cert to the list of trusted certificates in 
618
 * @a ssl_ctx that will be used for verification. 
619
 * See also @a serf_ssl_load_cert_file.
620
 */
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
621
apr_status_t serf_ssl_trust_cert(
622
    serf_ssl_context_t *ssl_ctx,
623
    serf_ssl_certificate_t *cert);
1.1.1 by Noritada Kobayashi
Import upstream version 0.1.1
624
1.2.9 by James McCoy
Import upstream version 1.3.3
625
/**
626
 * Enable or disable SSL compression on a SSL session.
627
 * @a enabled = 1 to enable compression, 0 to disable compression.
628
 * Default = disabled.
629
 */
630
apr_status_t serf_ssl_use_compression(
631
    serf_ssl_context_t *ssl_ctx,
632
    int enabled);
633
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
634
serf_bucket_t *serf_bucket_ssl_encrypt_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
635
    serf_bucket_t *stream,
636
    serf_ssl_context_t *ssl_context,
637
    serf_bucket_alloc_t *allocator);
638
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
639
serf_ssl_context_t *serf_bucket_ssl_encrypt_context_get(
1 by Noritada Kobayashi
Import upstream version 0.1.0
640
    serf_bucket_t *bucket);
641
642
/* ==================================================================== */
643
644
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
645
extern const serf_bucket_type_t serf_bucket_type_ssl_decrypt;
1 by Noritada Kobayashi
Import upstream version 0.1.0
646
#define SERF_BUCKET_IS_SSL_DECRYPT(b) SERF_BUCKET_CHECK((b), ssl_decrypt)
647
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
648
serf_bucket_t *serf_bucket_ssl_decrypt_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
649
    serf_bucket_t *stream,
650
    serf_ssl_context_t *ssl_context,
651
    serf_bucket_alloc_t *allocator);
652
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
653
serf_ssl_context_t *serf_bucket_ssl_decrypt_context_get(
1 by Noritada Kobayashi
Import upstream version 0.1.0
654
    serf_bucket_t *bucket);
655
656
657
/* ==================================================================== */
658
659
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
660
extern const serf_bucket_type_t serf_bucket_type_barrier;
1 by Noritada Kobayashi
Import upstream version 0.1.0
661
#define SERF_BUCKET_IS_BARRIER(b) SERF_BUCKET_CHECK((b), barrier)
662
1.2.4 by Peter Samuelson
Import upstream version 0.7.2
663
serf_bucket_t *serf_bucket_barrier_create(
1 by Noritada Kobayashi
Import upstream version 0.1.0
664
    serf_bucket_t *stream,
665
    serf_bucket_alloc_t *allocator);
666
667
668
/* ==================================================================== */
669
1.2.5 by Peter Samuelson
Import upstream version 1.0.0~0+svn1514
670
extern const serf_bucket_type_t serf_bucket_type_iovec;
671
#define SERF_BUCKET_IS_IOVEC(b) SERF_BUCKET_CHECK((b), iovec)
672
673
serf_bucket_t *serf_bucket_iovec_create(
674
    struct iovec vecs[],
675
    int len,
676
    serf_bucket_alloc_t *allocator);
677
678
679
/* ==================================================================== */
680
1 by Noritada Kobayashi
Import upstream version 0.1.0
681
/* ### do we need a PIPE bucket type? they are simple apr_file_t objects */
682
683
684
#ifdef __cplusplus
685
}
686
#endif
687
688
#endif	/* !SERF_BUCKET_TYPES_H */