projects
/
mod-proxy-fdpass.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
dfac0a1
)
refactoring to be closer to original proxy_pass plugin code
author
Matteo Nastasi
<nastasi@alternativeoutput.it>
Thu, 14 May 2020 05:16:25 +0000
(
05:16
+0000)
committer
Matteo Nastasi
<nastasi@alternativeoutput.it>
Thu, 14 May 2020 05:16:25 +0000
(
05:16
+0000)
mod_proxy_fdpass2.c
patch
|
blob
|
history
diff --git
a/mod_proxy_fdpass2.c
b/mod_proxy_fdpass2.c
index
3b2afb4
..
84e8ed3
100644
(file)
--- a/
mod_proxy_fdpass2.c
+++ b/
mod_proxy_fdpass2.c
@@
-75,7
+75,7
@@
static int proxy_fdpass2_canon(request_rec *r, char *url)
}
/* TODO: In APR 2.x: Extend apr_sockaddr_t to possibly be a path !!! */
}
/* TODO: In APR 2.x: Extend apr_sockaddr_t to possibly be a path !!! */
-static apr_status_t socket_connect_un(
request_rec *r,
apr_socket_t *sock,
+static apr_status_t socket_connect_un(apr_socket_t *sock,
struct sockaddr_un *sa)
{
apr_status_t rv;
struct sockaddr_un *sa)
{
apr_status_t rv;
@@
-84,14
+84,14
@@
static apr_status_t socket_connect_un(request_rec *r, apr_socket_t *sock,
rv = apr_os_sock_get(&rawsock, sock);
if (rv != APR_SUCCESS) {
rv = apr_os_sock_get(&rawsock, sock);
if (rv != APR_SUCCESS) {
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
"proxy: FD: apr_os_sock_get failed");
return rv;
}
rv = apr_socket_timeout_get(sock, &t);
if (rv != APR_SUCCESS) {
"proxy: FD: apr_os_sock_get failed");
return rv;
}
rv = apr_socket_timeout_get(sock, &t);
if (rv != APR_SUCCESS) {
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
"proxy: FD: apr_socket_timeout_get failed");
return rv;
}
"proxy: FD: apr_socket_timeout_get failed");
return rv;
}
@@
-100,7
+100,7
@@
static apr_status_t socket_connect_un(request_rec *r, apr_socket_t *sock,
/* ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
"proxy: FD: pre_connect"); */
rv = connect(rawsock, (struct sockaddr*)sa,
/* ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
"proxy: FD: pre_connect"); */
rv = connect(rawsock, (struct sockaddr*)sa,
- sizeof(*sa) /* + strlen(sa->sun_path)*/ );
+
sizeof(*sa) /* + strlen(sa->sun_path)*/ );
/* ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
"proxy: FD: post_connect %d", rv); */
} while (rv == -1 && errno == EINTR);
/* ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
"proxy: FD: post_connect %d", rv); */
} while (rv == -1 && errno == EINTR);
@@
-121,15
+121,15
@@
static apr_status_t socket_connect_un(request_rec *r, apr_socket_t *sock,
}
if (rv == -1 && errno != EISCONN) {
}
if (rv == -1 && errno != EISCONN) {
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
-
"proxy: FD: socket_connect_un preexit %d", errno);
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
+ "proxy: FD: socket_connect_un preexit %d", errno);
return errno;
}
return APR_SUCCESS;
}
return errno;
}
return APR_SUCCESS;
}
-static apr_status_t get_socket_from_path(
request_rec *r,
apr_pool_t *p,
+static apr_status_t get_socket_from_path(apr_pool_t *p,
const char* path,
apr_socket_t **out_sock)
{
const char* path,
apr_socket_t **out_sock)
{
@@
-139,17
+139,17
@@
static apr_status_t get_socket_from_path(request_rec *r, apr_pool_t *p,
*out_sock = NULL;
/*
*out_sock = NULL;
/*
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
-
"proxy: FD: Failed to connect to '%s' %d xxx",
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
+ "proxy: FD: Failed to connect to '%s' %d xxx",
url, rv);
url, rv);
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
"proxy: FD: get_socket_from_path::START");
*/
rv = apr_socket_create(&s, AF_UNIX, SOCK_STREAM, 0, p);
if (rv != APR_SUCCESS) {
"proxy: FD: get_socket_from_path::START");
*/
rv = apr_socket_create(&s, AF_UNIX, SOCK_STREAM, 0, p);
if (rv != APR_SUCCESS) {
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
"proxy: FD: get_socket_from_path::create %d", rv);
return rv;
}
"proxy: FD: get_socket_from_path::create %d", rv);
return rv;
}
@@
-157,9
+157,9
@@
static apr_status_t get_socket_from_path(request_rec *r, apr_pool_t *p,
sa.sun_family = AF_UNIX;
apr_cpystrn(sa.sun_path, path, sizeof(sa.sun_path));
sa.sun_family = AF_UNIX;
apr_cpystrn(sa.sun_path, path, sizeof(sa.sun_path));
- rv = socket_connect_un(
r,
s, &sa);
+ rv = socket_connect_un(s, &sa);
if (rv != APR_SUCCESS) {
if (rv != APR_SUCCESS) {
- ap_log_
rerror(APLOG_MARK, APLOG_ERR, rv, r
,
+ ap_log_
error(APLOG_MARK, APLOG_ERR, rv, NULL
,
"proxy: FD: get_socket_from_path::connect_un %d", rv);
return rv;
}
"proxy: FD: get_socket_from_path::connect_un %d", rv);
return rv;
}
@@
-411,7
+411,7
@@
static int proxy_fdpass2_handler(request_rec *r, proxy_worker *worker,
return DECLINED;
}
return DECLINED;
}
- rv = get_socket_from_path(r
, r
->pool, url, &sock);
+ rv = get_socket_from_path(r->pool, url, &sock);
#if ALTOUT_DEBUG > 0
long long t_cur;
#if ALTOUT_DEBUG > 0
long long t_cur;
@@
-487,27
+487,27
@@
static int proxy_fdpass2_handler(request_rec *r, proxy_worker *worker,
}
rv = apr_os_sock_put(&ctrlsock, &(ctrlrawsock[0]), r->connection->pool);
if (rv != APR_SUCCESS) {
}
rv = apr_os_sock_put(&ctrlsock, &(ctrlrawsock[0]), r->connection->pool);
if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
APLOGNO(01152)
"proxy: FD: apr_os_sock_put failed");
return HTTP_INTERNAL_SERVER_ERROR;
}
rv = apr_os_sock_put(&clientctrlsock, &(ctrlrawsock[1]), r->connection->pool);
if (rv != APR_SUCCESS) {
"proxy: FD: apr_os_sock_put failed");
return HTTP_INTERNAL_SERVER_ERROR;
}
rv = apr_os_sock_put(&clientctrlsock, &(ctrlrawsock[1]), r->connection->pool);
if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
APLOGNO(01152)
"proxy: FD: apr_os_sock_put failed");
return HTTP_INTERNAL_SERVER_ERROR;
}
{
int status;
"proxy: FD: apr_os_sock_put failed");
return HTTP_INTERNAL_SERVER_ERROR;
}
{
int status;
- /* const char *flush_method = worker->
flusher ? worker
->flusher : "flush"; */
+ /* const char *flush_method = worker->
s->flusher ? worker->s
->flusher : "flush"; */
const char *flush_method = "flush";
proxy_fdpass2_flush *flush = ap_lookup_provider(PROXY_FDPASS_FLUSHER,
const char *flush_method = "flush";
proxy_fdpass2_flush *flush = ap_lookup_provider(PROXY_FDPASS_FLUSHER,
- flush_method, "0");
+
flush_method, "0");
if (!flush) {
if (!flush) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
APLOGNO(01153)
"proxy: FD: Unable to find configured flush "
"provider '%s'", flush_method);
return HTTP_INTERNAL_SERVER_ERROR;
"proxy: FD: Unable to find configured flush "
"provider '%s'", flush_method);
return HTTP_INTERNAL_SERVER_ERROR;
@@
-528,11
+528,13
@@
static int proxy_fdpass2_handler(request_rec *r, proxy_worker *worker,
/* XXXXX: THIS IS AN EVIL HACK */
/* There should really be a (documented) public API for this ! */
/* XXXXX: THIS IS AN EVIL HACK */
/* There should really be a (documented) public API for this ! */
- clientsock = ap_get_module_config(r->connection->conn_config, &core_module);
+ /* oldmop clientsock = ap_get_module_config(r->connection->conn_config, &core_module); */
+ clientsock = ap_get_core_module_config(r->connection->conn_config);
+
rv = send_socket(r->pool, sock, clientsock, clientctrlsock);
if (rv != APR_SUCCESS) {
rv = send_socket(r->pool, sock, clientsock, clientctrlsock);
if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
APLOGNO(01154)
"proxy: FD: send_socket failed:");
return HTTP_INTERNAL_SERVER_ERROR;
}
"proxy: FD: send_socket failed:");
return HTTP_INTERNAL_SERVER_ERROR;
}
@@
-567,8
+569,9
@@
static int proxy_fdpass2_handler(request_rec *r, proxy_worker *worker,
}
}
apr_socket_shutdown(ctrlsock, APR_SHUTDOWN_READWRITE);
}
}
apr_socket_shutdown(ctrlsock, APR_SHUTDOWN_READWRITE);
- if (headers_out)
+ if (headers_out)
{
free(headers_out);
free(headers_out);
+ }
{
apr_socket_t *dummy;
{
apr_socket_t *dummy;
@@
-579,11
+582,11
@@
static int proxy_fdpass2_handler(request_rec *r, proxy_worker *worker,
rv = apr_socket_create(&dummy, APR_INET, SOCK_STREAM, APR_PROTO_TCP,
r->connection->pool);
if (rv != APR_SUCCESS) {
rv = apr_socket_create(&dummy, APR_INET, SOCK_STREAM, APR_PROTO_TCP,
r->connection->pool);
if (rv != APR_SUCCESS) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
APLOGNO(01155)
"proxy: FD: failed to create dummy socket");
return HTTP_INTERNAL_SERVER_ERROR;
}
"proxy: FD: failed to create dummy socket");
return HTTP_INTERNAL_SERVER_ERROR;
}
- ap_set_
module_config(r->connection->conn_config, &core_module
, dummy);
+ ap_set_
core_module_config(r->connection->conn_config
, dummy);
}
#if ALTOUT_DEBUG > 0
}
#if ALTOUT_DEBUG > 0
@@
-619,11
+622,30
@@
static int standard_flush(request_rec *r)
status = ap_pass_brigade(r->output_filters, bb);
if (status != OK) {
status = ap_pass_brigade(r->output_filters, bb);
if (status != OK) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r,
APLOGNO(01156)
"proxy: FD: ap_pass_brigade failed:");
return status;
}
"proxy: FD: ap_pass_brigade failed:");
return status;
}
+#if ALTOUT_DEBUG > 0
+ long long t_cur;
+ int t_rnd;
+ t_cur = (long long)time(NULL);
+ t_rnd = rand();
+#endif
+
+#if ALTOUT_DEBUG > 0
+ {
+ int mop_fd;
+ char mop_bf[512];
+
+ mop_fd = open(ALTOUT_DBG_FILE, O_WRONLY | O_APPEND | O_CREAT, 0644);
+ sprintf(mop_bf, "%lld: (%d) proxy_fdpass2_handler: flusher\n", t_cur, t_rnd);
+ write(mop_fd, mop_bf, strlen(mop_bf));
+ close(mop_fd);
+ }
+#endif
+
return OK;
}
return OK;
}