46 size_t name_value_strm_size = 0;
47 unsigned int compressed_data_size;
49 void *name_value_strm =
NULL;
50 struct SPDYF_Control_Frame *frame;
55 "the function is called wrong");
62 if(0 == frame->length)
96 compressed_data_size = frame->length
105 if(compressed_data_size > 0
108 compressed_data_size,
110 &name_value_strm_size))
117 free(name_value_strm);
129 if(0 == name_value_strm_size || 0 == compressed_data_size)
145 free(name_value_strm);
154 free(name_value_strm);
159 free(name_value_strm);
181 struct SPDYF_Control_Frame *frame;
182 uint32_t last_good_stream_id;
187 "the function is called wrong");
198 if(0 != frame->flags || 8 != frame->length)
215 if(8 == frame->length)
218 last_good_stream_id =
NTOH31(last_good_stream_id);
222 status = ntohl(status_int);
260 struct SPDYF_Control_Frame *frame;
267 "the function is called wrong");
271 if(0 != frame->flags || 8 != frame->length)
288 stream_id =
NTOH31(stream_id);
300 while(
NULL != stream)
308 stream = stream->
next;
333 struct SPDYF_Data_Frame * frame;
338 "the function is called wrong");
368 SPDYF_DEBUG(
"No callback for DATA frame set; Ignoring DATA frame!");
424 struct SPDYF_Control_Frame control_frame;
425 void *compressed_headers =
NULL;
426 size_t compressed_headers_size=0;
429 uint32_t stream_id_nbo;
433 memcpy(&control_frame, response_queue->
control_frame,
sizeof(control_frame));
436 response_queue->
data,
440 &compressed_headers_size))
449 free(compressed_headers);
457 total_size =
sizeof(
struct SPDYF_Control_Frame)
459 + compressed_headers_size;
469 free(compressed_headers);
477 control_frame.length = compressed_headers_size + 4;
504 free(compressed_headers);
518 struct SPDYF_Control_Frame control_frame;
520 int last_good_stream_id;
524 memcpy(&control_frame, response_queue->
control_frame,
sizeof(control_frame));
528 total_size =
sizeof(
struct SPDYF_Control_Frame)
540 control_frame.length = 8;
573 struct SPDYF_Data_Frame data_frame;
579 memcpy(&data_frame, response_queue->
data_frame,
sizeof(data_frame));
586 total_size =
sizeof(
struct SPDYF_Data_Frame)
587 + response_queue->data_size;
597 data_frame.length = response_queue->data_size;
614 total_size =
sizeof(
struct SPDYF_Data_Frame)
615 + SPDY_MAX_SUPPORTED_FRAME_SIZE;
626 session->
write_buffer +
sizeof(
struct SPDYF_Data_Frame),
681 response_queue->
frqcb,
683 response_queue->
rrcb,
696 new_response_queue->
prev = response_queue;
697 new_response_queue->
next = response_queue->
next;
704 response_queue->
next->
prev = new_response_queue;
706 response_queue->
next = new_response_queue;
718 data_frame.length = ret;
724 sizeof(
struct SPDYF_Data_Frame));
743 struct SPDYF_Control_Frame control_frame;
748 memcpy(&control_frame, response_queue->
control_frame,
sizeof(control_frame));
750 total_size =
sizeof(
struct SPDYF_Control_Frame)
762 control_frame.length = 8;
788 struct SPDYF_Control_Frame control_frame;
793 memcpy(&control_frame, response_queue->
control_frame,
sizeof(control_frame));
795 total_size =
sizeof(
struct SPDYF_Control_Frame)
807 control_frame.length = 8;
830 struct SPDYF_Control_Frame *frame;
834 "the function is called wrong");
868 size_t actual_buf_size;
888 if(actual_buf_size <
sizeof(
struct SPDYF_Control_Frame))
898 "no frame for session");
940 bytes_read = session->
fio_recv(session,
1006 while(
NULL != response_queue)
1078 bytes_written = session->
fio_send(session,
1082 switch(bytes_written)
1155 size_t read_buffer_beginning;
1156 size_t frame_length;
1157 struct SPDYF_Control_Frame* control_frame;
1158 struct SPDYF_Data_Frame *data_frame;
1179 <
sizeof(
struct SPDYF_Control_Frame))
1188 if(
NULL == (control_frame = malloc(
sizeof(
struct SPDYF_Control_Frame))))
1195 memcpy(control_frame,
1197 sizeof(
struct SPDYF_Control_Frame));
1203 switch(control_frame->type){
1223 if(
NULL == (data_frame = malloc(
sizeof(
struct SPDYF_Data_Frame))))
1232 sizeof(
struct SPDYF_Data_Frame));
1243 SPDYF_DEBUG(
"another protocol or version received!");
1277 frame_length = ((
struct SPDYF_Control_Frame *)session->
frame_handler_cls)->length;
1286 SPDYF_DEBUG(
"received frame with unsupported size: %zu", frame_length);
1292 + read_buffer_beginning
1320 "Session is in wrong state");
1393 struct sockaddr *addr;
1396 struct sockaddr_in6 addr6;
1398 addr = (
struct sockaddr *)&addr6;
1399 addr_len =
sizeof(addr6);
1401 struct sockaddr_in addr4;
1403 addr = (
struct sockaddr *)&addr4;
1404 addr_len =
sizeof(addr6);
1407 new_socket_fd = accept (daemon->
socket_fd, addr, &addr_len);
1409 if(new_socket_fd < 1)
1418 session->
daemon = daemon;
1440 if (
NULL == (session->
addr = malloc (addr_len)))
1445 memcpy (session->
addr, addr, addr_len);
1476 shutdown (new_socket_fd, SHUT_RDWR);
1477 (void)close (new_socket_fd);
1482 free (session->
addr);
1494 int consider_priority)
1501 "called with consider_priority but no stream provided");
1503 last = response_to_queue;
1509 if(
SPDY_NO == consider_priority)
1520 else if(-1 == consider_priority)
1558 response_to_queue->
prev = pos;
1559 pos->
next = response_to_queue;
1564 response_to_queue->
prev = pos;
1566 pos->
next = response_to_queue;
1607 free(session->
addr);
1620 struct SPDYF_Control_Frame *control_frame;
1629 if(
NULL == (control_frame = malloc(
sizeof(
struct SPDYF_Control_Frame))))
1631 free(response_to_queue);
1634 memset(control_frame, 0,
sizeof(
struct SPDYF_Control_Frame));
1636 if(
NULL == (data = malloc(4)))
1638 free(control_frame);
1639 free(response_to_queue);
1642 *(data) = htonl(status);
1644 control_frame->control_bit = 1;
1647 control_frame->flags = 0;
1651 response_to_queue->
data = data;
1668 struct SPDYF_Control_Frame *control_frame;
1683 if(
NULL == (control_frame = malloc(
sizeof(
struct SPDYF_Control_Frame))))
1685 free(response_to_queue);
1688 memset(control_frame, 0,
sizeof(
struct SPDYF_Control_Frame));
1690 if(
NULL == (data = malloc(8)))
1692 free(control_frame);
1693 free(response_to_queue);
1696 *(data) =
HTON31(stream_id);
1697 *(data + 1) = htonl(status);
1699 control_frame->control_bit = 1;
1702 control_frame->flags = 0;
1706 response_to_queue->
data = data;
1708 response_to_queue->
stream = stream;
1721 int32_t delta_window_size)
1724 struct SPDYF_Control_Frame *control_frame;
1735 if(
NULL == (control_frame = malloc(
sizeof(
struct SPDYF_Control_Frame))))
1737 free(response_to_queue);
1740 memset(control_frame, 0,
sizeof(
struct SPDYF_Control_Frame));
1742 if(
NULL == (data = malloc(8)))
1744 free(control_frame);
1745 free(response_to_queue);
1749 *(data + 1) =
HTON31(delta_window_size);
1751 control_frame->control_bit = 1;
1754 control_frame->flags = 0;
1758 response_to_queue->
data = data;
1760 response_to_queue->
stream = stream;