67 if(
NULL == container ||
NULL == name || 0 == (len = strlen(name)))
72 if(isupper((
int) name[i]))
79 if (
NULL == (container->
name = strdup (name)))
83 if (
NULL == (container->
value = malloc(
sizeof(
char *))))
85 free(container->
name);
88 if (
NULL == (container->
value[0] = strdup (value)))
90 free(container->
value);
91 free(container->
name);
101 if(0 == strcmp(pair->
name, name))
117 if (
NULL == (pair->
name = strdup (name)))
122 if (
NULL == (pair->
value = malloc(
sizeof(
char *))))
128 if (
NULL == (pair->
value[0] = strdup (value)))
148 if(0 == strcmp(pair->
value[i], value))
151 if(strlen(pair->
value[0]) > 0)
154 if (
NULL == (temp_value = malloc((pair->
num_values + 1) *
sizeof(
char *))))
165 pair->
value = temp_value;
172 if (
NULL == (temp_string = strdup (value)))
176 free(pair->
value[0]);
177 pair->
value[0] = temp_string;
190 if(
NULL == container ||
NULL == name ||
NULL == num_values)
197 if(strcmp(name, temp->
name) == 0)
200 return (
const char *
const *)temp->
value;
219 container = container->
next;
222 free(temp->
value[i]);
239 if(
NULL == container)
264 ret = iterator(iterator_cls, temp->
name, (
const char *
const *)temp->
value, temp->
num_values);
277 free(response->
data);
298 struct SPDYF_Control_Frame *control_frame;
299 struct SPDYF_Data_Frame *data_frame;
304 || ((0 == data_size) && (
NULL != response->
rcb))
305 || ((0 < data_size) && (
NULL == response->
rcb)),
306 "either data or request->rcb must not be null");
322 head = response_to_queue;
324 if(
NULL == (data_frame = malloc(
sizeof(
struct SPDYF_Data_Frame))))
326 free(response_to_queue);
329 memset(data_frame, 0,
sizeof(
struct SPDYF_Data_Frame));
330 data_frame->control_bit = 0;
331 data_frame->stream_id = stream->
stream_id;
332 if(is_last && closestream)
337 response_to_queue->
is_data = is_data;
338 response_to_queue->
stream = stream;
341 response_to_queue->
frqcb = frqcb;
342 response_to_queue->
frqcb_cls = frqcb_cls;
343 response_to_queue->
rrcb = rrcb;
344 response_to_queue->
rrcb_cls = rrcb_cls;
346 response_to_queue->
data = data + i;
350 response_to_queue->
response = response;
352 response_to_queue->
prev = prev;
354 prev->
next = response_to_queue;
355 prev = response_to_queue;
364 response_to_queue = head;
367 free(response_to_queue);
382 if(
NULL == (data_frame = malloc(
sizeof(
struct SPDYF_Data_Frame))))
384 free(response_to_queue);
387 memset(data_frame, 0,
sizeof(
struct SPDYF_Data_Frame));
388 data_frame->control_bit = 0;
389 data_frame->stream_id = stream->
stream_id;
390 if(closestream &&
NULL == response->
rcb)
398 if(
NULL == (control_frame = malloc(
sizeof(
struct SPDYF_Control_Frame))))
400 free(response_to_queue);
403 memset(control_frame, 0,
sizeof(
struct SPDYF_Control_Frame));
404 control_frame->control_bit = 1;
414 response_to_queue->
is_data = is_data;
415 response_to_queue->
stream = stream;
416 response_to_queue->
frqcb = frqcb;
417 response_to_queue->
frqcb_cls = frqcb_cls;
418 response_to_queue->
rrcb = rrcb;
419 response_to_queue->
rrcb_cls = rrcb_cls;
420 response_to_queue->
data = data;
421 response_to_queue->
data_size = data_size;
422 response_to_queue->
response = response;
424 return response_to_queue;
437 free(response_queue->
data);
444 free(response_queue);
454 int32_t num_pairs = 0;
460 unsigned int value_offset;
466 for(j=0; j<num_containers; ++j)
468 iterator = container[j];
469 while(iterator !=
NULL)
472 size += 4 + strlen(iterator->
name);
480 size += strlen(iterator->
value[i]);
484 iterator = iterator->
next;
488 if(
NULL == (*stream = malloc(size)))
494 num_pairs = htonl(num_pairs);
495 memcpy(*stream, &num_pairs, 4);
499 for(j=0; j<num_containers; ++j)
501 iterator = container[j];
502 while(iterator !=
NULL)
504 name_size = strlen(iterator->
name);
505 temp = htonl(name_size);
506 memcpy(*stream + offset, &temp, 4);
508 strncpy(*stream + offset, iterator->
name, name_size);
511 value_offset = offset;
517 memset(*stream + offset, 0, 1);
521 strncpy(*stream + offset, iterator->
value[i], strlen(iterator->
value[i]));
522 offset += strlen(iterator->
value[i]);
524 value_size = offset - value_offset - 4;
525 value_size = htonl(value_size);
526 memcpy(*stream + value_offset, &value_size, 4);
528 iterator = iterator->
next;
547 unsigned int offset = 0;
548 unsigned int value_end_offset;
558 memcpy(&num_pairs, stream, 4);
560 num_pairs = ntohl(num_pairs);
564 for(i = 0; i < num_pairs; ++i)
567 memcpy(&name_size, stream + offset, 4);
569 name_size = ntohl(name_size);
571 if(
NULL == (name = strndup(stream + offset, name_size)))
579 memcpy(&value_size, stream + offset, 4);
581 value_size = ntohl(value_size);
582 value_end_offset = offset + value_size;
586 if(
NULL == (value = strndup(stream + offset, value_size)))
592 offset += strlen(value);
593 if(offset < value_end_offset)
606 while(offset < value_end_offset);
610 if(offset != value_end_offset)