7 #ifndef _NGX_HTTP_SPDY_H_INCLUDED_
8 #define _NGX_HTTP_SPDY_H_INCLUDED_
18 #define NGX_SPDY_VERSION 2
20 #ifdef TLSEXT_TYPE_next_proto_neg
21 #define NGX_SPDY_NPN_ADVERTISE "\x06spdy/2"
22 #define NGX_SPDY_NPN_NEGOTIATED "spdy/2"
25 #define NGX_SPDY_STATE_BUFFER_SIZE 16
27 #define NGX_SPDY_CTL_BIT 1
29 #define NGX_SPDY_SYN_STREAM 1
30 #define NGX_SPDY_SYN_REPLY 2
31 #define NGX_SPDY_RST_STREAM 3
32 #define NGX_SPDY_SETTINGS 4
33 #define NGX_SPDY_NOOP 5
34 #define NGX_SPDY_PING 6
35 #define NGX_SPDY_GOAWAY 7
36 #define NGX_SPDY_HEADERS 8
38 #define NGX_SPDY_FRAME_HEADER_SIZE 8
40 #define NGX_SPDY_SID_SIZE 4
42 #define NGX_SPDY_SYN_STREAM_SIZE 10
43 #define NGX_SPDY_SYN_REPLY_SIZE 6
44 #define NGX_SPDY_RST_STREAM_SIZE 8
45 #define NGX_SPDY_PING_SIZE 4
46 #define NGX_SPDY_GOAWAY_SIZE 4
47 #define NGX_SPDY_NV_NUM_SIZE 2
48 #define NGX_SPDY_NV_NLEN_SIZE 2
49 #define NGX_SPDY_NV_VLEN_SIZE 2
50 #define NGX_SPDY_SETTINGS_NUM_SIZE 4
51 #define NGX_SPDY_SETTINGS_IDF_SIZE 4
52 #define NGX_SPDY_SETTINGS_VAL_SIZE 4
54 #define NGX_SPDY_SETTINGS_PAIR_SIZE \
55 (NGX_SPDY_SETTINGS_IDF_SIZE + NGX_SPDY_SETTINGS_VAL_SIZE)
57 #define NGX_SPDY_HIGHEST_PRIORITY 0
58 #define NGX_SPDY_LOWEST_PRIORITY 3
60 #define NGX_SPDY_FLAG_FIN 0x01
61 #define NGX_SPDY_FLAG_UNIDIRECTIONAL 0x02
62 #define NGX_SPDY_FLAG_CLEAR_SETTINGS 0x01
64 #define NGX_SPDY_MAX_FRAME_SIZE ((1 << 24) - 1)
66 #define NGX_SPDY_DATA_DISCARD 1
67 #define NGX_SPDY_DATA_ERROR 2
68 #define NGX_SPDY_DATA_INTERNAL_ERROR 3
76 u_char *pos, u_char *end);
160 if (frame->
priority >= (*out)->priority) {
178 if (frame->
priority >= (*out)->priority) {
199 #define ngx_spdy_frame_aligned_write_uint16(p, s) \
200 (*(uint16_t *) (p) = htons((uint16_t) (s)), (p) + sizeof(uint16_t))
202 #define ngx_spdy_frame_aligned_write_uint32(p, s) \
203 (*(uint32_t *) (p) = htonl((uint32_t) (s)), (p) + sizeof(uint32_t))
205 #if (NGX_HAVE_NONALIGNED)
207 #define ngx_spdy_frame_write_uint16 ngx_spdy_frame_aligned_write_uint16
208 #define ngx_spdy_frame_write_uint32 ngx_spdy_frame_aligned_write_uint32
212 #define ngx_spdy_frame_write_uint16(p, s) \
213 ((p)[0] = (u_char) (s) >> 8, (p)[1] = (u_char) (s), (p) + sizeof(uint16_t))
215 #define ngx_spdy_frame_write_uint32(p, s) \
216 ((p)[0] = (u_char) (s) >> 24, \
217 (p)[1] = (u_char) (s) >> 16, \
218 (p)[2] = (u_char) (s) >> 8, \
219 (p)[3] = (u_char) (s), (p) + sizeof(uint32_t))
224 #define ngx_spdy_ctl_frame_head(t) \
225 ((uint32_t) NGX_SPDY_CTL_BIT << 31 | NGX_SPDY_VERSION << 16 | (t))
227 #define ngx_spdy_frame_write_head(p, t) \
228 ngx_spdy_frame_aligned_write_uint32(p, ngx_spdy_ctl_frame_head(t))
230 #define ngx_spdy_frame_write_flags_and_len(p, f, l) \
231 ngx_spdy_frame_aligned_write_uint32(p, (f) << 24 | (l))
233 #define ngx_spdy_frame_write_sid ngx_spdy_frame_aligned_write_uint32