37#define APR_WANT_MEMFUNC
38#define APR_WANT_STRFUNC
54#define UWSGI_SCHEME "uwsgi"
55#define UWSGI_DEFAULT_PORT 3031
57module AP_MODULE_DECLARE_DATA proxy_uwsgi_module;
74 "error parsing URL %s: %s",
url,
err);
107 "To be forwarded path contains control "
108 "characters or spaces");
130 "sending data to %s:%u failed",
160 const char *path_info;
180 if (
strcmp(path_info,
"/")) {
203 "can't send headers to %s:%u: packet size too "
220 vallen =
env[j].val ? strlen(
env[j].
val) : 0;
255 "receiving request body failed");
287 rp->output_filters =
c->output_filters;
288 rp->input_filters =
c->input_filters;
289 rp->proto_output_filters =
c->output_filters;
290 rp->proto_input_filters =
c->input_filters;
291 rp->useragent_ip =
c->client_ip;
292 rp->useragent_addr =
c->client_addr;
418#if AP_MODULE_MAGIC_AT_LEAST(20101106,0)
507 char server_portstr[32];
525 "unable to decode uwsgi uri: %s",
url);
548 sizeof(server_portstr));
557 "failed to make connection to backend: %s:%u",
593module AP_MODULE_DECLARE_DATA proxy_uwsgi_module = {
594 STANDARD20_MODULE_STUFF,
const char apr_size_t len
APR-UTIL Buckets/Bucket Brigades.
Apache optional hook functions.
apr_size_t const unsigned char unsigned int unsigned int d
#define ap_get_module_config(v, m)
ap_conf_vector_t * ap_create_request_config(apr_pool_t *p)
request_rec int int apr_table_t const char * path
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
apr_status_t ap_get_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
#define ap_get_core_module_config(v)
const unsigned char * buf
int ap_should_client_block(request_rec *r)
void ap_set_content_type(request_rec *r, const char *ct)
int ap_getline(char *s, int n, request_rec *r, int flags)
long ap_get_client_block(request_rec *r, char *buffer, apr_size_t bufsiz)
int ap_setup_client_block(request_rec *r, int read_policy)
void ap_add_common_vars(request_rec *r)
void ap_add_cgi_vars(request_rec *r)
const char apr_port_t port
#define APR_STATUS_IS_EAGAIN(s)
#define APR_BRIGADE_LAST(b)
#define APR_BRIGADE_INSERT_TAIL(b, e)
#define APR_BRIGADE_EMPTY(b)
#define APR_BUCKET_IS_EOS(e)
apr_dbd_transaction_t int mode
const char apr_ssize_t int flags
#define HTTP_SERVICE_UNAVAILABLE
#define HTTP_INTERNAL_SERVER_ERROR
int ap_proxy_connect_backend(const char *proxy_function, proxy_conn_rec *conn, proxy_worker *worker, server_rec *s)
int ap_proxy_should_override(proxy_dir_conf *conf, int code)
char * ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp, char **passwordp, char **hostp, apr_port_t *port)
int ap_proxy_release_connection(const char *proxy_function, proxy_conn_rec *conn, server_rec *s)
int ap_proxy_acquire_connection(const char *proxy_function, proxy_conn_rec **conn, proxy_worker *worker, server_rec *s)
char * ap_proxy_canonenc_ex(apr_pool_t *p, const char *x, int len, enum enctype t, int flags, int proxyreq)
void ap_proxy_backend_broke(request_rec *r, apr_bucket_brigade *brigade)
#define PROXY_CANONENC_NOENCODEDSLASHENCODING
apr_status_t ap_proxy_buckets_lifetime_transform(request_rec *r, apr_bucket_brigade *from, apr_bucket_brigade *to)
void proxy_hook_canon_handler(proxy_HOOK_canon_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
int ap_proxy_determine_connection(apr_pool_t *p, request_rec *r, proxy_server_conf *conf, proxy_worker *worker, proxy_conn_rec *conn, apr_uri_t *uri, char **url, const char *proxyname, apr_port_t proxyport, char *server_portstr, int server_portstr_size)
void proxy_hook_scheme_handler(proxy_HOOK_scheme_handler_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
int ap_proxy_connection_create(const char *proxy_function, proxy_conn_rec *conn, conn_rec *c, server_rec *s)
int proxy_run_create_req(request_rec *r, request_rec *pr)
const char * ap_scan_http_token(const char *ptr)
const char * ap_scan_vchar_obstext(const char *ptr)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
const char * ap_scan_http_field_content(const char *ptr)
int ap_unescape_url(char *url)
#define PROXYREQ_RESPONSE
const char int apr_pool_t * pool
void const char apr_status_t(* cleanup)(void *))
apr_vformatter_buff_t * c
char const *const char const *const ** env
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
apr_int32_t apr_int32_t apr_int32_t err
#define REQUEST_CHUNKED_ERROR
Proxy Extension Module for Apache.
static int uwsgi_handler(request_rec *r, proxy_worker *worker, proxy_server_conf *conf, char *url, const char *proxyname, apr_port_t proxyport)
static int uwsgi_send(proxy_conn_rec *conn, const char *buf, apr_size_t length, request_rec *r)
static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_conf *conf)
static int uwsgi_send_headers(request_rec *r, proxy_conn_rec *conn)
static int uwsgi_canon(request_rec *r, char *url)
static void register_hooks(apr_pool_t *p)
#define UWSGI_DEFAULT_PORT
static int uwsgi_send_body(request_rec *r, proxy_conn_rec *conn)
static request_rec * make_fake_req(conn_rec *c, request_rec *r)
Structure to store things which are per connection.
Per-directory configuration.
apr_size_t io_buffer_size
A structure that represents the current request.
struct ap_filter_t * output_filters
const struct ap_logconf * log
apr_table_t * subprocess_env
struct ap_conf_vector_t * per_dir_config
apr_table_t * headers_out
apr_status_t apr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len)
static size_t keylen(KEY s)