MCPcopy Create free account
hub / github.com/apache/httpd / h2_proxy_session_read

Function h2_proxy_session_read

modules/http2/h2_proxy_session.c:1042–1090  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1040}
1041
1042static apr_status_t h2_proxy_session_read(h2_proxy_session *session, int block,
1043 apr_interval_time_t timeout)
1044{
1045 apr_status_t status = APR_SUCCESS;
1046
1047 if (APR_BRIGADE_EMPTY(session->input)) {
1048 apr_socket_t *socket = NULL;
1049 apr_time_t save_timeout = -1;
1050
1051 if (block && timeout > 0) {
1052 socket = ap_get_conn_socket(session->c);
1053 if (socket) {
1054 apr_socket_timeout_get(socket, &save_timeout);
1055 apr_socket_timeout_set(socket, timeout);
1056 }
1057 else {
1058 /* cannot block on timeout */
1059 ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, session->c, APLOGNO(03379)
1060 "h2_proxy_session(%s): unable to get conn socket",
1061 session->id);
1062 return APR_ENOTIMPL;
1063 }
1064 }
1065
1066 status = ap_get_brigade(session->c->input_filters, session->input,
1067 AP_MODE_READBYTES,
1068 block? APR_BLOCK_READ : APR_NONBLOCK_READ,
1069 64 * 1024);
1070 ap_log_cerror(APLOG_MARK, APLOG_TRACE3, status, session->c,
1071 "h2_proxy_session(%s): read from conn", session->id);
1072 if (socket && save_timeout != -1) {
1073 apr_socket_timeout_set(socket, save_timeout);
1074 }
1075 }
1076
1077 if (status == APR_SUCCESS) {
1078 status = feed_brigade(session, session->input);
1079 }
1080 else if (APR_STATUS_IS_TIMEUP(status)) {
1081 /* nop */
1082 }
1083 else if (!APR_STATUS_IS_EAGAIN(status)) {
1084 ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c, APLOGNO(03380)
1085 "h2_proxy_session(%s): read error", session->id);
1086 dispatch_event(session, H2_PROXYS_EV_CONN_ERROR, status, NULL);
1087 }
1088
1089 return status;
1090}
1091
1092apr_status_t h2_proxy_session_submit(h2_proxy_session *session,
1093 const char *url, request_rec *r,

Callers 1

h2_proxy_session_processFunction · 0.85

Calls 4

ap_get_conn_socketFunction · 0.85
ap_get_brigadeFunction · 0.85
feed_brigadeFunction · 0.85
dispatch_eventFunction · 0.85

Tested by

no test coverage detected