comparison src/event/ngx_event_quic.c @ 7681:38c0898b6df7 quic

HTTP/3.
author Roman Arutyunyan <arut@nginx.com>
date Fri, 13 Mar 2020 19:36:33 +0300
parents 6fd2cce50fe2
children 0aec63f50c29
comparison
equal deleted inserted replaced
7680:6fd2cce50fe2 7681:38c0898b6df7
1907 // XXX: how to return EOF? 1907 // XXX: how to return EOF?
1908 1908
1909 b = sn->b; 1909 b = sn->b;
1910 1910
1911 if (b->last - b->pos == 0) { 1911 if (b->last - b->pos == 0) {
1912 c->read->ready = 0;
1912 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, 1913 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
1913 "quic recv() not ready"); 1914 "quic recv() not ready");
1914 return NGX_AGAIN; // ? 1915 return NGX_AGAIN; // ?
1915 } 1916 }
1916 1917
2027 ngx_quic_payload_handler(ngx_connection_t *c, ngx_quic_header_t *pkt) 2028 ngx_quic_payload_handler(ngx_connection_t *c, ngx_quic_header_t *pkt)
2028 { 2029 {
2029 u_char *end, *p; 2030 u_char *end, *p;
2030 ssize_t len; 2031 ssize_t len;
2031 ngx_buf_t *b; 2032 ngx_buf_t *b;
2033 ngx_log_t *log;
2032 ngx_uint_t ack_this; 2034 ngx_uint_t ack_this;
2033 ngx_pool_t *pool; 2035 ngx_pool_t *pool;
2034 ngx_event_t *rev, *wev; 2036 ngx_event_t *rev, *wev;
2035 ngx_quic_frame_t frame, *ack_frame; 2037 ngx_quic_frame_t frame, *ack_frame;
2036 ngx_quic_connection_t *qc; 2038 ngx_quic_connection_t *qc;
2127 sn = ngx_pcalloc(c->pool, sizeof(ngx_quic_stream_node_t)); 2129 sn = ngx_pcalloc(c->pool, sizeof(ngx_quic_stream_node_t));
2128 if (sn == NULL) { 2130 if (sn == NULL) {
2129 return NGX_ERROR; 2131 return NGX_ERROR;
2130 } 2132 }
2131 2133
2132 pool = ngx_create_pool(NGX_DEFAULT_POOL_SIZE, c->log);
2133 if (pool == NULL) {
2134 return NGX_ERROR;
2135 }
2136
2137 sn->c = ngx_get_connection(-1, c->log); // TODO: free on connection termination 2134 sn->c = ngx_get_connection(-1, c->log); // TODO: free on connection termination
2138 if (sn->c == NULL) { 2135 if (sn->c == NULL) {
2139 return NGX_ERROR; 2136 return NGX_ERROR;
2140 } 2137 }
2141 2138
2139 pool = ngx_create_pool(NGX_DEFAULT_POOL_SIZE, c->log);
2140 if (pool == NULL) {
2141 /* XXX free connection */
2142 return NGX_ERROR;
2143 }
2144
2145 log = ngx_palloc(pool, sizeof(ngx_log_t));
2146 if (log == NULL) {
2147 /* XXX free pool and connection */
2148 return NGX_ERROR;
2149 }
2150
2151 *log = *c->log;
2152 pool->log = log;
2153
2154 sn->c->log = log;
2142 sn->c->pool = pool; 2155 sn->c->pool = pool;
2156
2157 sn->c->listening = c->listening;
2158 sn->c->sockaddr = c->sockaddr;
2159 sn->c->local_sockaddr = c->local_sockaddr;
2143 2160
2144 rev = sn->c->read; 2161 rev = sn->c->read;
2145 wev = sn->c->write; 2162 wev = sn->c->write;
2163
2164 rev->ready = 1;
2146 2165
2147 rev->log = c->log; 2166 rev->log = c->log;
2148 wev->log = c->log; 2167 wev->log = c->log;
2149 2168
2150 sn->c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); 2169 sn->c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);