| serf.h | | serf.h | |
| | | | |
| skipping to change at line 47 | | skipping to change at line 47 | |
| #endif | | #endif | |
| | | | |
| /* Forward declare some structures */ | | /* Forward declare some structures */ | |
| typedef struct serf_context_t serf_context_t; | | typedef struct serf_context_t serf_context_t; | |
| | | | |
| typedef struct serf_bucket_t serf_bucket_t; | | typedef struct serf_bucket_t serf_bucket_t; | |
| typedef struct serf_bucket_type_t serf_bucket_type_t; | | typedef struct serf_bucket_type_t serf_bucket_type_t; | |
| typedef struct serf_bucket_alloc_t serf_bucket_alloc_t; | | typedef struct serf_bucket_alloc_t serf_bucket_alloc_t; | |
| | | | |
| typedef struct serf_connection_t serf_connection_t; | | typedef struct serf_connection_t serf_connection_t; | |
|
| | | typedef struct serf_listener_t serf_listener_t; | |
| | | typedef struct serf_incoming_t serf_incoming_t; | |
| | | typedef struct serf_incoming_request_t serf_incoming_request_t; | |
| | | | |
| typedef struct serf_request_t serf_request_t; | | typedef struct serf_request_t serf_request_t; | |
| | | | |
| /** | | /** | |
| * @defgroup serf high-level constructs | | * @defgroup serf high-level constructs | |
| * @ingroup serf | | * @ingroup serf | |
| * @{ | | * @{ | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 71 | | skipping to change at line 74 | |
| /* This code is for when this is the last response on this connection: | | /* This code is for when this is the last response on this connection: | |
| * i.e. do not send any more requests on this connection or expect | | * i.e. do not send any more requests on this connection or expect | |
| * any more responses. | | * any more responses. | |
| */ | | */ | |
| #define SERF_ERROR_CLOSING (APR_OS_START_USERERR + SERF_ERROR_RANGE + 1) | | #define SERF_ERROR_CLOSING (APR_OS_START_USERERR + SERF_ERROR_RANGE + 1) | |
| /* This code is for when the connection terminated before the request | | /* This code is for when the connection terminated before the request | |
| * could be processed on the other side. | | * could be processed on the other side. | |
| */ | | */ | |
| #define SERF_ERROR_REQUEST_LOST (APR_OS_START_USERERR + SERF_ERROR_RANGE +
2) | | #define SERF_ERROR_REQUEST_LOST (APR_OS_START_USERERR + SERF_ERROR_RANGE +
2) | |
| | | | |
|
| | | /* General authentication related errors */ | |
| | | #define SERF_ERROR_AUTHN_FAILED (APR_OS_START_USERERR + SERF_ERROR_RANGE + | |
| | | 90) | |
| | | | |
| | | /* None of the available authn mechanisms for the request are supported */ | |
| | | #define SERF_ERROR_AUTHN_NOT_SUPPORTED (APR_OS_START_USERERR + SERF_ERROR_R | |
| | | ANGE + 91) | |
| | | | |
| | | /* Authn was requested by the server but the header lacked some attribute | |
| | | */ | |
| | | #define SERF_ERROR_AUTHN_MISSING_ATTRIBUTE (APR_OS_START_USERERR + SERF_ERR | |
| | | OR_RANGE + 92) | |
| | | | |
| | | /* Authentication handler initialization related errors */ | |
| | | #define SERF_ERROR_AUTHN_INITALIZATION_FAILED (APR_OS_START_USERERR +\ | |
| | | SERF_ERROR_RANGE + 93) | |
| | | | |
| /** | | /** | |
| * Create a new context for serf operations. | | * Create a new context for serf operations. | |
| * | | * | |
| * A serf context defines a control loop which processes multiple | | * A serf context defines a control loop which processes multiple | |
| * connections simultaneously. | | * connections simultaneously. | |
| * | | * | |
| * The context will be allocated within @a pool. | | * The context will be allocated within @a pool. | |
| */ | | */ | |
| SERF_DECLARE(serf_context_t *) serf_context_create(apr_pool_t *pool); | | SERF_DECLARE(serf_context_t *) serf_context_create(apr_pool_t *pool); | |
| | | | |
| | | | |
| skipping to change at line 199 | | skipping to change at line 215 | |
| * is based on the @see serf_request_deliver function, where the applicatio
n | | * is based on the @see serf_request_deliver function, where the applicatio
n | |
| * can assemble the appropriate bucket(s) before delivery. | | * can assemble the appropriate bucket(s) before delivery. | |
| * | | * | |
| * The returned bucket should live at least as long as the connection itsel
f. | | * The returned bucket should live at least as long as the connection itsel
f. | |
| * It is assumed that an appropriate allocator is passed in @a setup_baton. | | * It is assumed that an appropriate allocator is passed in @a setup_baton. | |
| * ### we may want to create a connection-level allocator and pass that | | * ### we may want to create a connection-level allocator and pass that | |
| * ### along. however, that allocator would *only* be used for this | | * ### along. however, that allocator would *only* be used for this | |
| * ### callback. it may be wasteful to create a per-conn allocator, so this | | * ### callback. it may be wasteful to create a per-conn allocator, so this | |
| * ### baton-based, app-responsible form might be best. | | * ### baton-based, app-responsible form might be best. | |
| * | | * | |
|
| * Responsibility for the bucket is passed to the serf library. It will be | | * Responsibility for the buckets is passed to the serf library. They will
be | |
| * destroyed when the connection is closed. | | * destroyed when the connection is closed. | |
| * | | * | |
| * All temporary allocations should be made in @a pool. | | * All temporary allocations should be made in @a pool. | |
| */ | | */ | |
|
| typedef serf_bucket_t * (*serf_connection_setup_t)(apr_socket_t *skt, | | typedef apr_status_t (*serf_connection_setup_t)(apr_socket_t *skt, | |
| | | serf_bucket_t **read_bkt | |
| | | , | |
| | | serf_bucket_t **write_bk | |
| | | t, | |
| void *setup_baton, | | void *setup_baton, | |
| apr_pool_t *pool); | | apr_pool_t *pool); | |
| | | | |
| /** | | /** | |
| * ### need to update docco w.r.t socket. became "stream" recently. | | * ### need to update docco w.r.t socket. became "stream" recently. | |
| * ### the stream does not have a barrier, this callback should generally | | * ### the stream does not have a barrier, this callback should generally | |
| * ### add a barrier around the stream before incorporating it into a | | * ### add a barrier around the stream before incorporating it into a | |
| * ### response bucket stack. | | * ### response bucket stack. | |
| * ### should serf add the barrier automatically to protect its data | | * ### should serf add the barrier automatically to protect its data | |
| * ### structure? i.e. the passed bucket becomes owned rather than | | * ### structure? i.e. the passed bucket becomes owned rather than | |
| | | | |
| skipping to change at line 292 | | skipping to change at line 310 | |
| * execution, or otherwise), then the connection will be reopened. | | * execution, or otherwise), then the connection will be reopened. | |
| * | | * | |
| * All temporary allocations should be made in @a pool. | | * All temporary allocations should be made in @a pool. | |
| */ | | */ | |
| typedef apr_status_t (*serf_response_handler_t)(serf_request_t *request, | | typedef apr_status_t (*serf_response_handler_t)(serf_request_t *request, | |
| serf_bucket_t *response, | | serf_bucket_t *response, | |
| void *handler_baton, | | void *handler_baton, | |
| apr_pool_t *pool); | | apr_pool_t *pool); | |
| | | | |
| /** | | /** | |
|
| | | * Callback function to be implemented by the application, so that serf | |
| | | * can handle server and proxy authentication. | |
| | | * code = 401 (server) or 407 (proxy). | |
| | | * baton = the baton passed to serf_context_run. | |
| | | * authn_type = one of "Basic", "Digest". | |
| | | */ | |
| | | typedef apr_status_t (*serf_credentials_callback_t)(char **username, | |
| | | char **password, | |
| | | serf_request_t *request, void *baton, | |
| | | int code, const char *authn_type, | |
| | | const char *realm, | |
| | | apr_pool_t *pool); | |
| | | | |
| | | /** | |
| * Create a new connection associated with the @a ctx serf context. | | * Create a new connection associated with the @a ctx serf context. | |
| * | | * | |
| * A connection will be created to (eventually) connect to the address | | * A connection will be created to (eventually) connect to the address | |
| * specified by @a address. The address must live at least as long as | | * specified by @a address. The address must live at least as long as | |
| * @a pool (thus, as long as the connection object). | | * @a pool (thus, as long as the connection object). | |
| * | | * | |
| * The connection object will be allocated within @a pool. Clearing or | | * The connection object will be allocated within @a pool. Clearing or | |
| * destroying this pool will close the connection, and terminate any | | * destroying this pool will close the connection, and terminate any | |
| * outstanding requests or responses. | | * outstanding requests or responses. | |
| * | | * | |
| | | | |
| skipping to change at line 354 | | skipping to change at line 386 | |
| SERF_DECLARE(apr_status_t) serf_connection_create2( | | SERF_DECLARE(apr_status_t) serf_connection_create2( | |
| serf_connection_t **conn, | | serf_connection_t **conn, | |
| serf_context_t *ctx, | | serf_context_t *ctx, | |
| apr_uri_t host_info, | | apr_uri_t host_info, | |
| serf_connection_setup_t setup, | | serf_connection_setup_t setup, | |
| void *setup_baton, | | void *setup_baton, | |
| serf_connection_closed_t closed, | | serf_connection_closed_t closed, | |
| void *closed_baton, | | void *closed_baton, | |
| apr_pool_t *pool); | | apr_pool_t *pool); | |
| | | | |
|
| | | typedef apr_status_t (*serf_accept_client_t)(serf_context_t *ctx, | |
| | | serf_listener_t *l, | |
| | | void *accept_baton, | |
| | | apr_socket_t *insock, | |
| | | apr_pool_t *pool); | |
| | | | |
| | | SERF_DECLARE(apr_status_t) serf_listener_create( | |
| | | serf_listener_t **listener, | |
| | | serf_context_t *ctx, | |
| | | const char *host, | |
| | | apr_uint16_t port, | |
| | | void *accept_baton, | |
| | | serf_accept_client_t accept_func, | |
| | | apr_pool_t *pool); | |
| | | | |
| | | typedef apr_status_t (*serf_incoming_request_cb_t)(serf_context_t *ctx, | |
| | | serf_incoming_request_t *req, | |
| | | void *request_baton, | |
| | | apr_pool_t *pool); | |
| | | | |
| | | SERF_DECLARE(apr_status_t) serf_incoming_create( | |
| | | serf_incoming_t **client, | |
| | | serf_context_t *ctx, | |
| | | apr_socket_t *insock, | |
| | | void *request_baton, | |
| | | serf_incoming_request_cb_t request, | |
| | | apr_pool_t *pool); | |
| | | | |
| /** | | /** | |
| * Reset the connection, but re-open the socket again. | | * Reset the connection, but re-open the socket again. | |
| */ | | */ | |
| SERF_DECLARE(apr_status_t) serf_connection_reset( | | SERF_DECLARE(apr_status_t) serf_connection_reset( | |
| serf_connection_t *conn); | | serf_connection_t *conn); | |
| | | | |
| /** | | /** | |
| * Close the connection associated with @a conn and cancel all pending requ
ests. | | * Close the connection associated with @a conn and cancel all pending requ
ests. | |
| * | | * | |
| * The closed callback passed to serf_connection_create() will be invoked | | * The closed callback passed to serf_connection_create() will be invoked | |
| | | | |
| skipping to change at line 379 | | skipping to change at line 439 | |
| /** | | /** | |
| * Sets the maximum number of outstanding requests @a max_requests on the | | * Sets the maximum number of outstanding requests @a max_requests on the | |
| * connection @a conn. Setting max_requests to 0 means unlimited (the defau
lt). | | * connection @a conn. Setting max_requests to 0 means unlimited (the defau
lt). | |
| * Ex.: setting max_requests to 1 means a request is sent when a response o
n the | | * Ex.: setting max_requests to 1 means a request is sent when a response o
n the | |
| * previous request was received and handled. | | * previous request was received and handled. | |
| */ | | */ | |
| SERF_DECLARE(void) | | SERF_DECLARE(void) | |
| serf_connection_set_max_outstanding_requests(serf_connection_t *conn, | | serf_connection_set_max_outstanding_requests(serf_connection_t *conn, | |
| unsigned int max_requests); | | unsigned int max_requests); | |
| | | | |
|
| | | SERF_DECLARE(void) | |
| | | serf_connection_set_async_responses(serf_connection_t *conn, | |
| | | serf_response_acceptor_t acceptor, | |
| | | void *acceptor_baton, | |
| | | serf_response_handler_t handler, | |
| | | void *handler_baton); | |
| | | | |
| /** | | /** | |
| * Setup the @a request for delivery on its connection. | | * Setup the @a request for delivery on its connection. | |
| * | | * | |
| * Right before this is invoked, @a pool will be built within the | | * Right before this is invoked, @a pool will be built within the | |
| * connection's pool for the request to use. The associated response will | | * connection's pool for the request to use. The associated response will | |
| * be allocated within that subpool. An associated bucket allocator will | | * be allocated within that subpool. An associated bucket allocator will | |
| * be built. These items may be fetched from the request object through | | * be built. These items may be fetched from the request object through | |
| * @see serf_request_get_pool or @see serf_request_get_alloc. | | * @see serf_request_get_pool or @see serf_request_get_alloc. | |
| * | | * | |
| * The content of the request is specified by the @a req_bkt bucket. When | | * The content of the request is specified by the @a req_bkt bucket. When | |
| | | | |
| skipping to change at line 500 | | skipping to change at line 567 | |
| * with the @a ctx serf context. | | * with the @a ctx serf context. | |
| * | | * | |
| * The next connection will be created to connect to the proxy server | | * The next connection will be created to connect to the proxy server | |
| * specified by @a address. The address must live at least as long as the | | * specified by @a address. The address must live at least as long as the | |
| * serf context. | | * serf context. | |
| */ | | */ | |
| SERF_DECLARE(void) serf_config_proxy( | | SERF_DECLARE(void) serf_config_proxy( | |
| serf_context_t *ctx, | | serf_context_t *ctx, | |
| apr_sockaddr_t *address); | | apr_sockaddr_t *address); | |
| | | | |
|
| | | /* Supported authentication types. */ | |
| | | #define SERF_AUTHN_NONE 0x00 | |
| | | #define SERF_AUTHN_BASIC 0x01 | |
| | | #define SERF_AUTHN_DIGEST 0x02 | |
| | | #define SERF_AUTHN_NTLM 0x04 | |
| | | #define SERF_AUTHN_NEGOTIATE 0x08 | |
| | | #define SERF_AUTHN_ALL 0xFF | |
| | | | |
| | | /** | |
| | | * Define the authentication handlers that serf will try on incoming reques | |
| | | ts. | |
| | | */ | |
| | | SERF_DECLARE(void) serf_config_authn_types( | |
| | | serf_context_t *ctx, | |
| | | int authn_types); | |
| | | | |
| | | /** | |
| | | * Set the credentials callback handler. | |
| | | */ | |
| | | SERF_DECLARE(void) serf_config_credentials_callback( | |
| | | serf_context_t *ctx, | |
| | | serf_credentials_callback_t cred_cb); | |
| | | | |
| /* ### maybe some connection control functions for flood? */ | | /* ### maybe some connection control functions for flood? */ | |
| | | | |
| /*** Special bucket creation functions ***/ | | /*** Special bucket creation functions ***/ | |
| | | | |
| /** | | /** | |
| * Create a bucket of type 'socket bucket'. | | * Create a bucket of type 'socket bucket'. | |
| * This is basically a wrapper around @a serf_bucket_socket_create, which | | * This is basically a wrapper around @a serf_bucket_socket_create, which | |
| * initializes the bucket using connection and/or context specific settings
. | | * initializes the bucket using connection and/or context specific settings
. | |
| */ | | */ | |
| SERF_DECLARE(serf_bucket_t *) serf_context_bucket_socket_create( | | SERF_DECLARE(serf_bucket_t *) serf_context_bucket_socket_create( | |
| | | | |
| skipping to change at line 902 | | skipping to change at line 991 | |
| SERF_DECLARE(apr_status_t) serf_debug__record_read( | | SERF_DECLARE(apr_status_t) serf_debug__record_read( | |
| const serf_bucket_t *bucket, | | const serf_bucket_t *bucket, | |
| apr_status_t status); | | apr_status_t status); | |
| SERF_DECLARE(void) serf_debug__entered_loop(serf_bucket_alloc_t *allocator)
; | | SERF_DECLARE(void) serf_debug__entered_loop(serf_bucket_alloc_t *allocator)
; | |
| SERF_DECLARE(void) serf_debug__closed_conn(serf_bucket_alloc_t *allocator); | | SERF_DECLARE(void) serf_debug__closed_conn(serf_bucket_alloc_t *allocator); | |
| SERF_DECLARE(void) serf_debug__bucket_destroy(const serf_bucket_t *bucket); | | SERF_DECLARE(void) serf_debug__bucket_destroy(const serf_bucket_t *bucket); | |
| SERF_DECLARE(void) serf_debug__bucket_alloc_check(serf_bucket_alloc_t *allo
cator); | | SERF_DECLARE(void) serf_debug__bucket_alloc_check(serf_bucket_alloc_t *allo
cator); | |
| | | | |
| /* Version info */ | | /* Version info */ | |
| #define SERF_MAJOR_VERSION 0 | | #define SERF_MAJOR_VERSION 0 | |
|
| #define SERF_MINOR_VERSION 3 | | #define SERF_MINOR_VERSION 5 | |
| #define SERF_PATCH_VERSION 1 | | #define SERF_PATCH_VERSION 0 | |
| | | | |
| /* Version number string */ | | /* Version number string */ | |
| #define SERF_VERSION_STRING APR_STRINGIFY(SERF_MAJOR_VERSION) "." \ | | #define SERF_VERSION_STRING APR_STRINGIFY(SERF_MAJOR_VERSION) "." \ | |
| APR_STRINGIFY(SERF_MINOR_VERSION) "." \ | | APR_STRINGIFY(SERF_MINOR_VERSION) "." \ | |
| APR_STRINGIFY(SERF_PATCH_VERSION) | | APR_STRINGIFY(SERF_PATCH_VERSION) | |
| | | | |
| /** | | /** | |
| * Check at compile time if the Serf version is at least a certain | | * Check at compile time if the Serf version is at least a certain | |
| * level. | | * level. | |
| * @param major The major version component of the version checked | | * @param major The major version component of the version checked | |
| | | | |
| skipping to change at line 926 | | skipping to change at line 1015 | |
| * for (e.g., the "3" of "1.3.0"). | | * for (e.g., the "3" of "1.3.0"). | |
| * @param patch The patch level component of the version checked | | * @param patch The patch level component of the version checked | |
| * for (e.g., the "0" of "1.3.0"). | | * for (e.g., the "0" of "1.3.0"). | |
| */ | | */ | |
| #define SERF_VERSION_AT_LEAST(major,minor,patch) \ | | #define SERF_VERSION_AT_LEAST(major,minor,patch) \ | |
| (((major) < SERF_MAJOR_VERSION) \ | | (((major) < SERF_MAJOR_VERSION) \ | |
| || ((major) == SERF_MAJOR_VERSION && (minor) < SERF_MINOR_VERSION) \ | | || ((major) == SERF_MAJOR_VERSION && (minor) < SERF_MINOR_VERSION) \ | |
| || ((major) == SERF_MAJOR_VERSION && (minor) == SERF_MINOR_VERSION && \ | | || ((major) == SERF_MAJOR_VERSION && (minor) == SERF_MINOR_VERSION && \ | |
| (patch) <= SERF_PATCH_VERSION)) | | (patch) <= SERF_PATCH_VERSION)) | |
| | | | |
|
| | | /** | |
| | | * Returns the version of the library the application has linked/loaded. | |
| | | * Values are returned in @a major, @a minor, and @a patch. | |
| | | * | |
| | | * Applications will want to use this function to verify compatibility, | |
| | | * expecially while serf has not reached a 1.0 milestone. APIs and | |
| | | * semantics may change drastically until the library hits 1.0. | |
| | | */ | |
| | | SERF_DECLARE(void) serf_lib_version(int *major, int *minor, int *patch); | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| /* | | /* | |
| * Every user of serf will want to deal with our various bucket types. | | * Every user of serf will want to deal with our various bucket types. | |
| * Go ahead and include that header right now. | | * Go ahead and include that header right now. | |
| * | | * | |
| * Note: make sure this occurs outside of the C++ namespace block | | * Note: make sure this occurs outside of the C++ namespace block | |
| */ | | */ | |
| #include "serf_bucket_types.h" | | #include "serf_bucket_types.h" | |
| | | | |
|
| #endif /* !SERF_H */ | | #endif /* !SERF_H */ | |
| | | | |
End of changes. 11 change blocks. |
| 4 lines changed or deleted | | 110 lines changed or added | |
|