381 uint16_t version : 15;
382 uint16_t control_bit : 1;
385 uint32_t length : 24;
394 uint32_t stream_id : 31;
395 uint32_t control_bit : 1;
397 uint32_t length : 24;
1059 #define DLL_insert(head,tail,element) do { \
1060 (element)->next = (head); \
1061 (element)->prev = NULL; \
1062 if ((tail) == NULL) \
1065 (head)->prev = element; \
1066 (head) = (element); } while (0)
1078 #define DLL_remove(head,tail,element) do { \
1079 if ((element)->prev == NULL) \
1080 (head) = (element)->next; \
1082 (element)->prev->next = (element)->next; \
1083 if ((element)->next == NULL) \
1084 (tail) = (element)->prev; \
1086 (element)->next->prev = (element)->prev; \
1087 (element)->next = NULL; \
1088 (element)->prev = NULL; } while (0)
1098 #define SPDYF_CONTROL_FRAME_HTON(frame)
1100 #define SPDYF_CONTROL_FRAME_HTON(frame) do { \
1101 (*((uint16_t *) frame )) = (*((uint8_t *) (frame) +1 )) | ((*((uint8_t *) frame ))<<8);\
1102 (frame)->type = htons((frame)->type); \
1103 (frame)->length = HTON24((frame)->length); \
1115 #define SPDYF_CONTROL_FRAME_NTOH(frame)
1117 #define SPDYF_CONTROL_FRAME_NTOH(frame) do { \
1118 (*((uint16_t *) frame )) = (*((uint8_t *) (frame) +1 )) | ((*((uint8_t *) frame ))<<8);\
1119 (frame)->type = ntohs((frame)->type); \
1120 (frame)->length = NTOH24((frame)->length); \
1132 #define SPDYF_DATA_FRAME_HTON(frame)
1134 #define SPDYF_DATA_FRAME_HTON(frame) do { \
1135 *((uint32_t *) frame ) = htonl(*((uint32_t *) frame ));\
1136 (frame)->length = HTON24((frame)->length); \
1148 #define SPDYF_DATA_FRAME_NTOH(frame)
1150 #define SPDYF_DATA_FRAME_NTOH(frame) do { \
1151 *((uint32_t *) frame ) = ntohl(*((uint32_t *) frame ));\
1152 (frame)->length = NTOH24((frame)->length); \
struct SPDYF_Response_Queue * SPDYF_response_queue_create(bool is_data, void *data, size_t data_size, struct SPDY_Response *response, struct SPDYF_Stream *stream, bool closestream, SPDYF_ResponseQueueResultCallback frqcb, void *frqcb_cls, SPDY_ResponseResultCallback rrcb, void *rrcb_cls)
SPDY_NewSessionCallback new_session_cb
struct SPDYF_Response_Queue * response_queue_tail
struct SPDYF_Stream * streams_head
z_stream zlib_recv_stream
int(* SPDYF_IOBeforeWrite)(struct SPDY_Session *session)
struct SPDY_Daemon * daemon
public interface to libmicrospdy
unsigned long long session_timeout
uint32_t current_stream_id
struct SPDY_Session * next
int SPDYF_name_value_from_stream(void *stream, size_t size, struct SPDY_NameValue **container)
int(* SPDYF_IORecv)(struct SPDY_Session *session, void *buffer, size_t size)
SPDYF_IODeinit fio_deinit
struct SPDYF_Response_Queue * response_queue_head
SPDYF_IOCloseSession fio_close_session
SPDYF_IONewSession fio_new_session
uint32_t last_replied_to_stream_id
struct SPDYF_Control_Frame * control_frame
uint32_t last_out_stream_id
int(* SPDYF_IONewSession)(struct SPDY_Session *session)
size_t write_buffer_beginning
SPDY_NewRequestCallback new_request_cb
void(* SPDY_NewSessionCallback)(void *cls, struct SPDY_Session *session)
void SPDYF_response_queue_destroy(struct SPDYF_Response_Queue *response_queue)
void(* frame_handler)(struct SPDY_Session *session)
int(* process_response_handler)(struct SPDY_Session *session)
struct sockaddr * address
void(* SPDY_NewRequestCallback)(void *cls, struct SPDY_Request *request, uint8_t priority, const char *method, const char *path, const char *version, const char *host, const char *scheme, struct SPDY_NameValue *headers, bool more)
SPDY_SessionClosedCallback session_closed_cb
unsigned long long last_activity
Signatures for IO functions.
struct SPDYF_Response_Queue * prev
enum SPDY_IO_SUBSYSTEM io_subsystem
int SPDYF_name_value_is_empty(struct SPDY_NameValue *container)
SPDYF_ResponseQueueResultCallback frqcb
SPDY_ResponseCallback rcb
int(* SPDYF_NewStreamCallback)(void *cls, struct SPDYF_Stream *stream)
struct SPDY_Session * cleanup_head
void(* SPDY_SessionClosedCallback)(void *cls, struct SPDY_Session *session, int by_client)
void(* SPDYF_IOCloseSession)(struct SPDY_Session *session)
struct SPDY_NameValue * next
uint32_t last_in_stream_id
void(* SPDY_ResponseResultCallback)(void *cls, struct SPDY_Response *response, struct SPDY_Request *request, enum SPDY_RESPONSE_RESULT status, bool streamopened)
struct SPDYF_Stream * next
int(* SPDY_NewDataCallback)(void *cls, struct SPDY_Request *request, const void *buf, size_t size, bool more)
enum SPDY_DAEMON_OPTION options
struct SPDY_Session * sessions_head
void(* SPDYF_ResponseQueueResultCallback)(void *cls, struct SPDYF_Response_Queue *response_queue, enum SPDY_RESPONSE_RESULT status)
SPDYF_IOAfterWrite fio_after_write
struct SPDYF_Stream * prev
struct SPDYF_Data_Frame * data_frame
SPDYF_NewStreamCallback fnew_stream_cb
void(* SPDYF_IODeinit)(struct SPDY_Daemon *daemon)
ssize_t SPDYF_name_value_to_stream(struct SPDY_NameValue *container[], int num_containers, void **stream)
size_t read_buffer_beginning
enum SPDY_SESSION_STATUS status
struct SPDY_Session * cleanup_tail
struct SPDY_NameValue * prev
size_t write_buffer_offset
struct SPDY_Session * prev
struct SPDY_NameValue * headers
int(* SPDYF_IOInit)(struct SPDY_Daemon *daemon)
struct __attribute__((__packed__)) SPDYF_Control_Frame
SPDY_ResponseResultCallback rrcb
struct SPDY_Session * sessions_tail
int(* SPDYF_IOAfterWrite)(struct SPDY_Session *session, int was_written)
int(* SPDYF_NewDataCallback)(void *cls, struct SPDYF_Stream *stream, const void *buf, size_t size, bool more)
enum SPDY_DAEMON_FLAG flags
ssize_t(* SPDY_ResponseCallback)(void *cls, void *buffer, size_t max, bool *more)
struct SPDYF_Stream * streams_tail
int(* SPDYF_IOIsPending)(struct SPDY_Session *session)
int(* SPDYF_IOSend)(struct SPDY_Session *session, const void *buffer, size_t size)
SPDYF_IOIsPending fio_is_pending
size_t read_buffer_offset
struct SPDYF_Response_Queue * next
struct SPDYF_Stream * stream
SPDYF_NewDataCallback freceived_data_cb
z_stream zlib_send_stream
SPDYF_IOBeforeWrite fio_before_write
struct SPDY_Response * response
SPDY_NewDataCallback received_data_cb
struct SPDY_Session * session