Mercurial > hg > nginx
comparison src/event/ngx_event_quic.c @ 8215: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
8214:6fd2cce50fe2 | 8215: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); |