2 * nghttp2 - HTTP/2 C Library
4 * Copyright (c) 2012 Tatsuhiro Tsujikawa
6 * Permission is hereby granted, free of charge, to any person obtaining
7 * a copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sublicense, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
14 * The above copyright notice and this permission notice shall be
15 * included in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #ifndef NGHTTP2_OUTBOUND_ITEM_H
26 #define NGHTTP2_OUTBOUND_ITEM_H
30 #endif /* HAVE_CONFIG_H */
32 #include <nghttp2/nghttp2.h>
33 #include "nghttp2_frame.h"
34 #include "nghttp2_mem.h"
36 /* A bit higher weight for non-DATA frames */
37 #define NGHTTP2_OB_EX_WEIGHT 300
38 /* Higher weight for SETTINGS */
39 #define NGHTTP2_OB_SETTINGS_WEIGHT 301
40 /* Highest weight for PING */
41 #define NGHTTP2_OB_PING_WEIGHT 302
43 /* struct used for HEADERS and PUSH_PROMISE frame */
45 nghttp2_data_provider data_prd;
46 void *stream_user_data;
47 /* nonzero if this item should be attached to stream object to make
48 it under priority control */
49 uint8_t attach_stream;
50 } nghttp2_headers_aux_data;
52 /* struct used for DATA frame */
55 * The data to be sent for this DATA frame.
57 nghttp2_data_provider data_prd;
59 * The flags of DATA frame. We use separate flags here and
60 * nghttp2_data frame. The latter contains flags actually sent to
61 * peer. This |flags| may contain NGHTTP2_FLAG_END_STREAM and only
62 * when |eof| becomes nonzero, flags in nghttp2_data has
63 * NGHTTP2_FLAG_END_STREAM set.
67 * The flag to indicate whether EOF was reached or not. Initially
68 * |eof| is 0. It becomes 1 after all data were read.
71 } nghttp2_data_aux_data;
74 NGHTTP2_GOAWAY_AUX_NONE = 0x0,
75 /* indicates that session should be terminated after the
76 transmission of this frame. */
77 NGHTTP2_GOAWAY_AUX_TERM_ON_SEND = 0x1,
78 /* indicates that this GOAWAY is just a notification for graceful
79 shutdown. No nghttp2_session.goaway_flags should be updated on
80 the reaction to this frame. */
81 NGHTTP2_GOAWAY_AUX_SHUTDOWN_NOTICE = 0x2,
82 } nghttp2_goaway_aux_flag;
84 /* struct used for GOAWAY frame */
86 /* bitwise-OR of one or more of nghttp2_goaway_aux_flag. */
88 } nghttp2_goaway_aux_data;
90 /* Additional data which cannot be stored in nghttp2_frame struct */
92 nghttp2_data_aux_data data;
93 nghttp2_headers_aux_data headers;
94 nghttp2_goaway_aux_data goaway;
99 nghttp2_aux_data aux_data;
101 /* Reset count of weight. See comment for last_cycle in
104 /* The priority used in priority comparion. Larger is served
107 /* nonzero if this object is queued. */
109 } nghttp2_outbound_item;
112 * Deallocates resource for |item|. If |item| is NULL, this function
115 void nghttp2_outbound_item_free(nghttp2_outbound_item *item, nghttp2_mem *mem);
117 #endif /* NGHTTP2_OUTBOUND_ITEM_H */