Apache HTTPD
Classes | Typedefs | Functions | Variables
h2_proxy_session.c File Reference
#include <stddef.h>
#include <apr_strings.h>
#include <nghttp2/nghttp2.h>
#include <mpm_common.h>
#include <httpd.h>
#include <http_protocol.h>
#include <mod_proxy.h>
#include "mod_http2.h"
#include "h2.h"
#include "h2_proxy_util.h"
#include "h2_proxy_session.h"

Go to the source code of this file.

Classes

struct  h2_proxy_stream
 
struct  cleanup_iter_ctx
 
struct  win_update_ctx
 

Typedefs

typedef struct h2_proxy_stream h2_proxy_stream
 

Functions

static void dispatch_event (h2_proxy_session *session, h2_proxys_event_t ev, int arg, const char *msg)
 
static void ping_arrived (h2_proxy_session *session)
 
static apr_status_t check_suspended (h2_proxy_session *session)
 
static void stream_resume (h2_proxy_stream *stream)
 
static apr_status_t submit_trailers (h2_proxy_stream *stream)
 
static void set_ping_timeout (h2_proxy_session *session)
 
static void unset_ping_timeout (h2_proxy_session *session)
 
static void enter_ping_state (h2_proxy_session *session, h2_ping_state_t state)
 
static void ping_new_session (h2_proxy_session *session, proxy_conn_rec *p_conn)
 
static void ping_reuse_session (h2_proxy_session *session)
 
static void ping_ev_frame_received (h2_proxy_session *session, const nghttp2_frame *frame)
 
static apr_status_t proxy_session_pre_close (void *theconn)
 
static int proxy_pass_brigade (apr_bucket_alloc_t *bucket_alloc, proxy_conn_rec *p_conn, conn_rec *origin, apr_bucket_brigade *bb, int flush)
 
static ssize_t raw_send (nghttp2_session *ngh2, const uint8_t *data, size_t length, int flags, void *user_data)
 
static int on_frame_recv (nghttp2_session *ngh2, const nghttp2_frame *frame, void *user_data)
 
static int before_frame_send (nghttp2_session *ngh2, const nghttp2_frame *frame, void *user_data)
 
static int add_header (void *table, const char *n, const char *v)
 
static void process_proxy_header (apr_table_t *headers, h2_proxy_stream *stream, const char *n, const char *v)
 
static apr_status_t h2_proxy_stream_add_header_out (h2_proxy_stream *stream, const char *n, apr_size_t nlen, const char *v, apr_size_t vlen)
 
static int log_header (void *ctx, const char *key, const char *value)
 
static void h2_proxy_stream_end_headers_out (h2_proxy_stream *stream)
 
static int stream_response_data (nghttp2_session *ngh2, uint8_t flags, int32_t stream_id, const uint8_t *data, size_t len, void *user_data)
 
static int on_stream_close (nghttp2_session *ngh2, int32_t stream_id, uint32_t error_code, void *user_data)
 
static int on_header (nghttp2_session *ngh2, const nghttp2_frame *frame, const uint8_t *namearg, size_t nlen, const uint8_t *valuearg, size_t vlen, uint8_t flags, void *user_data)
 
static ssize_t stream_request_data (nghttp2_session *ngh2, int32_t stream_id, uint8_t *buf, size_t length, uint32_t *data_flags, nghttp2_data_source *source, void *user_data)
 
h2_proxy_sessionh2_proxy_session_setup (const char *id, proxy_conn_rec *p_conn, proxy_server_conf *conf, int h2_front, unsigned char window_bits_connection, unsigned char window_bits_stream, h2_proxy_request_done *done)
 
static apr_status_t session_start (h2_proxy_session *session)
 
static apr_status_t open_stream (h2_proxy_session *session, const char *url, request_rec *r, int standalone, h2_proxy_stream **pstream)
 
static apr_status_t submit_stream (h2_proxy_session *session, h2_proxy_stream *stream)
 
static apr_status_t feed_brigade (h2_proxy_session *session, apr_bucket_brigade *bb)
 
static apr_status_t h2_proxy_session_read (h2_proxy_session *session, int block, apr_interval_time_t timeout)
 
apr_status_t h2_proxy_session_submit (h2_proxy_session *session, const char *url, request_rec *r, int standalone)
 
static int is_waiting_for_backend (h2_proxy_session *session)
 
static apr_status_t session_shutdown (h2_proxy_session *session, int reason, const char *msg)
 
static const charstate_name (h2_proxys_state state)
 
static int is_accepting_streams (h2_proxy_session *session)
 
static void transit (h2_proxy_session *session, const char *action, h2_proxys_state nstate)
 
static void ev_init (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_local_goaway (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_remote_goaway (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_conn_error (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_proto_error (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_conn_timeout (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_no_io (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_stream_submitted (h2_proxy_session *session, int stream_id, const char *msg)
 
static void ev_stream_done (h2_proxy_session *session, int stream_id, const char *msg)
 
static void ev_stream_resumed (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_data_read (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_ngh2_done (h2_proxy_session *session, int arg, const char *msg)
 
static void ev_pre_close (h2_proxy_session *session, int arg, const char *msg)
 
static int send_loop (h2_proxy_session *session)
 
apr_status_t h2_proxy_session_process (h2_proxy_session *session)
 
static int cancel_iter (void *udata, void *val)
 
void h2_proxy_session_cancel_all (h2_proxy_session *session)
 
static int done_iter (void *udata, void *val)
 
void h2_proxy_session_cleanup (h2_proxy_session *session, h2_proxy_request_done *done)
 
int h2_proxy_session_is_reusable (h2_proxy_session *session)
 
static int ping_arrived_iter (void *udata, void *val)
 

Variables

static int *const aplog_module_index = &( proxy_http2_module.module_index)
 
static const charStateNames []
 

Typedef Documentation

◆ h2_proxy_stream

Function Documentation

◆ add_header()

static int add_header ( void *  table,
const char n,
const char v 
)
static

Definition at line 354 of file h2_proxy_session.c.

◆ before_frame_send()

static int before_frame_send ( nghttp2_session ngh2,
const nghttp2_frame frame,
void *  user_data 
)
static

Definition at line 339 of file h2_proxy_session.c.

◆ cancel_iter()

static int cancel_iter ( void *  udata,
void *  val 
)
static

Definition at line 1655 of file h2_proxy_session.c.

◆ check_suspended()

static apr_status_t check_suspended ( h2_proxy_session session)
static

Definition at line 1109 of file h2_proxy_session.c.

◆ dispatch_event()

static void dispatch_event ( h2_proxy_session session,
h2_proxys_event_t  ev,
int  arg,
const char msg 
)
static

Definition at line 1473 of file h2_proxy_session.c.

◆ done_iter()

static int done_iter ( void *  udata,
void *  val 
)
static

Definition at line 1678 of file h2_proxy_session.c.

◆ enter_ping_state()

static void enter_ping_state ( h2_proxy_session session,
h2_ping_state_t  state 
)
static

Definition at line 121 of file h2_proxy_session.c.

◆ ev_conn_error()

static void ev_conn_error ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1260 of file h2_proxy_session.c.

◆ ev_conn_timeout()

static void ev_conn_timeout ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1295 of file h2_proxy_session.c.

◆ ev_data_read()

static void ev_data_read ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1435 of file h2_proxy_session.c.

◆ ev_init()

static void ev_init ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1208 of file h2_proxy_session.c.

◆ ev_local_goaway()

static void ev_local_goaway ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1226 of file h2_proxy_session.c.

◆ ev_ngh2_done()

static void ev_ngh2_done ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1448 of file h2_proxy_session.c.

◆ ev_no_io()

static void ev_no_io ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1308 of file h2_proxy_session.c.

◆ ev_pre_close()

static void ev_pre_close ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1460 of file h2_proxy_session.c.

◆ ev_proto_error()

static void ev_proto_error ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1278 of file h2_proxy_session.c.

◆ ev_remote_goaway()

static void ev_remote_goaway ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1243 of file h2_proxy_session.c.

◆ ev_stream_done()

static void ev_stream_done ( h2_proxy_session session,
int  stream_id,
const char msg 
)
static

Definition at line 1359 of file h2_proxy_session.c.

◆ ev_stream_resumed()

static void ev_stream_resumed ( h2_proxy_session session,
int  arg,
const char msg 
)
static

Definition at line 1423 of file h2_proxy_session.c.

◆ ev_stream_submitted()

static void ev_stream_submitted ( h2_proxy_session session,
int  stream_id,
const char msg 
)
static

Definition at line 1345 of file h2_proxy_session.c.

◆ feed_brigade()

static apr_status_t feed_brigade ( h2_proxy_session session,
apr_bucket_brigade bb 
)
static

Definition at line 972 of file h2_proxy_session.c.

◆ h2_proxy_session_cancel_all()

void h2_proxy_session_cancel_all ( h2_proxy_session session)

Definition at line 1664 of file h2_proxy_session.c.

◆ h2_proxy_session_cleanup()

void h2_proxy_session_cleanup ( h2_proxy_session session,
h2_proxy_request_done done 
)

Definition at line 1698 of file h2_proxy_session.c.

◆ h2_proxy_session_is_reusable()

int h2_proxy_session_is_reusable ( h2_proxy_session session)

Definition at line 1713 of file h2_proxy_session.c.

◆ h2_proxy_session_process()

apr_status_t h2_proxy_session_process ( h2_proxy_session s)

Perform a step in processing the proxy session. Will return aftert one read/write cycle and indicate session status by status code.

Parameters
sthe session to process
Returns
APR_EAGAIN when processing needs to be invoked again APR_SUCCESS when all streams have been processed, session still live APR_EOF when the session has been terminated

Definition at line 1539 of file h2_proxy_session.c.

◆ h2_proxy_session_read()

static apr_status_t h2_proxy_session_read ( h2_proxy_session session,
int  block,
apr_interval_time_t  timeout 
)
static

Definition at line 1020 of file h2_proxy_session.c.

◆ h2_proxy_session_setup()

h2_proxy_session * h2_proxy_session_setup ( const char id,
proxy_conn_rec p_conn,
proxy_server_conf conf,
int  h2_front,
unsigned char  window_bits_connection,
unsigned char  window_bits_stream,
h2_proxy_request_done done 
)

Definition at line 722 of file h2_proxy_session.c.

◆ h2_proxy_session_submit()

apr_status_t h2_proxy_session_submit ( h2_proxy_session session,
const char url,
request_rec r,
int  standalone 
)

Definition at line 1070 of file h2_proxy_session.c.

◆ h2_proxy_stream_add_header_out()

static apr_status_t h2_proxy_stream_add_header_out ( h2_proxy_stream stream,
const char n,
apr_size_t  nlen,
const char v,
apr_size_t  vlen 
)
static

Definition at line 396 of file h2_proxy_session.c.

◆ h2_proxy_stream_end_headers_out()

static void h2_proxy_stream_end_headers_out ( h2_proxy_stream stream)
static

Definition at line 446 of file h2_proxy_session.c.

◆ is_accepting_streams()

static int is_accepting_streams ( h2_proxy_session session)
static

Definition at line 1187 of file h2_proxy_session.c.

◆ is_waiting_for_backend()

static int is_waiting_for_backend ( h2_proxy_session session)
static

Definition at line 1101 of file h2_proxy_session.c.

◆ log_header()

static int log_header ( void *  ctx,
const char key,
const char value 
)
static

Definition at line 437 of file h2_proxy_session.c.

◆ on_frame_recv()

static int on_frame_recv ( nghttp2_session ngh2,
const nghttp2_frame frame,
void *  user_data 
)
static

Definition at line 257 of file h2_proxy_session.c.

◆ on_header()

static int on_header ( nghttp2_session ngh2,
const nghttp2_frame frame,
const uint8_t namearg,
size_t  nlen,
const uint8_t valuearg,
size_t  vlen,
uint8_t  flags,
void *  user_data 
)
static

Definition at line 578 of file h2_proxy_session.c.

◆ on_stream_close()

static int on_stream_close ( nghttp2_session ngh2,
int32_t  stream_id,
uint32_t  error_code,
void *  user_data 
)
static

Definition at line 560 of file h2_proxy_session.c.

◆ open_stream()

static apr_status_t open_stream ( h2_proxy_session session,
const char url,
request_rec r,
int  standalone,
h2_proxy_stream **  pstream 
)
static

< Reverse proxy

Definition at line 815 of file h2_proxy_session.c.

◆ ping_arrived()

static void ping_arrived ( h2_proxy_session session)
static

Definition at line 1729 of file h2_proxy_session.c.

◆ ping_arrived_iter()

static int ping_arrived_iter ( void *  udata,
void *  val 
)
static

Definition at line 1719 of file h2_proxy_session.c.

◆ ping_ev_frame_received()

static void ping_ev_frame_received ( h2_proxy_session session,
const nghttp2_frame frame 
)
static

Definition at line 164 of file h2_proxy_session.c.

◆ ping_new_session()

static void ping_new_session ( h2_proxy_session session,
proxy_conn_rec p_conn 
)
static

Definition at line 145 of file h2_proxy_session.c.

◆ ping_reuse_session()

static void ping_reuse_session ( h2_proxy_session session)
static

Definition at line 154 of file h2_proxy_session.c.

◆ process_proxy_header()

static void process_proxy_header ( apr_table_t headers,
h2_proxy_stream stream,
const char n,
const char v 
)
static

Definition at line 360 of file h2_proxy_session.c.

◆ proxy_pass_brigade()

static int proxy_pass_brigade ( apr_bucket_alloc_t bucket_alloc,
proxy_conn_rec p_conn,
conn_rec origin,
apr_bucket_brigade bb,
int  flush 
)
static

Definition at line 204 of file h2_proxy_session.c.

◆ proxy_session_pre_close()

static apr_status_t proxy_session_pre_close ( void *  theconn)
static

Definition at line 185 of file h2_proxy_session.c.

◆ raw_send()

static ssize_t raw_send ( nghttp2_session ngh2,
const uint8_t data,
size_t  length,
int  flags,
void *  user_data 
)
static

Definition at line 231 of file h2_proxy_session.c.

◆ send_loop()

static int send_loop ( h2_proxy_session session)
static

Definition at line 1524 of file h2_proxy_session.c.

◆ session_shutdown()

static apr_status_t session_shutdown ( h2_proxy_session session,
int  reason,
const char msg 
)
static

Definition at line 1151 of file h2_proxy_session.c.

◆ session_start()

static apr_status_t session_start ( h2_proxy_session session)
static

Definition at line 785 of file h2_proxy_session.c.

◆ set_ping_timeout()

static void set_ping_timeout ( h2_proxy_session session)
static

Definition at line 95 of file h2_proxy_session.c.

◆ state_name()

static const char * state_name ( h2_proxys_state  state)
static

Definition at line 1179 of file h2_proxy_session.c.

◆ stream_request_data()

static ssize_t stream_request_data ( nghttp2_session ngh2,
int32_t  stream_id,
uint8_t buf,
size_t  length,
uint32_t data_flags,
nghttp2_data_source source,
void *  user_data 
)
static

Definition at line 603 of file h2_proxy_session.c.

◆ stream_response_data()

static int stream_response_data ( nghttp2_session ngh2,
uint8_t  flags,
int32_t  stream_id,
const uint8_t data,
size_t  len,
void *  user_data 
)
static

Definition at line 512 of file h2_proxy_session.c.

◆ stream_resume()

static void stream_resume ( h2_proxy_stream stream)
static

Definition at line 1089 of file h2_proxy_session.c.

◆ submit_stream()

static apr_status_t submit_stream ( h2_proxy_session session,
h2_proxy_stream stream 
)
static

Definition at line 914 of file h2_proxy_session.c.

◆ submit_trailers()

static apr_status_t submit_trailers ( h2_proxy_stream stream)
static

Definition at line 962 of file h2_proxy_session.c.

◆ transit()

static void transit ( h2_proxy_session session,
const char action,
h2_proxys_state  nstate 
)
static

Definition at line 1199 of file h2_proxy_session.c.

◆ unset_ping_timeout()

static void unset_ping_timeout ( h2_proxy_session session)
static

Definition at line 108 of file h2_proxy_session.c.

Variable Documentation

◆ aplog_module_index

int* const aplog_module_index = &( proxy_http2_module.module_index)
static

Definition at line 31 of file h2_proxy_session.c.

◆ StateNames

const char* StateNames[]
static
Initial value:
= {
"INIT",
"DONE",
"IDLE",
"BUSY",
"WAIT",
"LSHUTDOWN",
"RSHUTDOWN",
}

Definition at line 1169 of file h2_proxy_session.c.