aboutsummaryrefslogtreecommitdiff
path: root/src/microspdy
diff options
context:
space:
mode:
authorAndrey Uzunov <andrey.uzunov@gmail.com>2013-06-28 22:30:10 +0000
committerAndrey Uzunov <andrey.uzunov@gmail.com>2013-06-28 22:30:10 +0000
commit21f9a70d53a472e0c3894099308ca040d401209a (patch)
tree33f04adf13635fdbe5a9efe7fa698c4d46bc5755 /src/microspdy
parentd9ab40f53238b49c9f4a4df13e0262fbefb4a95a (diff)
downloadlibmicrohttpd-21f9a70d53a472e0c3894099308ca040d401209a.tar.gz
libmicrohttpd-21f9a70d53a472e0c3894099308ca040d401209a.zip
spdy: minor leaks, dead code, etc. fixed
Diffstat (limited to 'src/microspdy')
-rw-r--r--src/microspdy/applicationlayer.c16
-rw-r--r--src/microspdy/daemon.c21
-rw-r--r--src/microspdy/session.c43
-rw-r--r--src/microspdy/structures.c98
4 files changed, 96 insertions, 82 deletions
diff --git a/src/microspdy/applicationlayer.c b/src/microspdy/applicationlayer.c
index 9ba47948..8abeb57b 100644
--- a/src/microspdy/applicationlayer.c
+++ b/src/microspdy/applicationlayer.c
@@ -124,17 +124,20 @@ spdy_handler_new_stream (void *cls,
124 else 124 else
125 for(i=0; i<iterator->num_values; ++i) 125 for(i=0; i<iterator->num_values; ++i)
126 if (SPDY_YES != SPDY_name_value_add(headers,iterator->name,iterator->value[i])) 126 if (SPDY_YES != SPDY_name_value_add(headers,iterator->name,iterator->value[i]))
127 {
128 SPDY_destroy_request(request);
127 goto free_and_fail; 129 goto free_and_fail;
130 }
128 131
129 iterator = iterator->next; 132 iterator = iterator->next;
130 } 133 }
131 134
132 request->method=method; 135 request->method=method;
133 request->path=path; 136 request->path=path;
134 request->version=version; 137 request->version=version;
135 request->host=host; 138 request->host=host;
136 request->scheme=scheme; 139 request->scheme=scheme;
137 request->headers=headers; 140 request->headers=headers;
138 141
139 //check request validity, all these fields are mandatory for a request 142 //check request validity, all these fields are mandatory for a request
140 if(NULL == method || strlen(method) == 0 143 if(NULL == method || strlen(method) == 0
@@ -366,7 +369,7 @@ SPDY_build_response(int status,
366 size_t size) 369 size_t size)
367{ 370{
368 struct SPDY_Response *response = NULL; 371 struct SPDY_Response *response = NULL;
369 struct SPDY_NameValue ** all_headers = NULL; 372 struct SPDY_NameValue ** all_headers = NULL; //TODO maybe array in stack is enough
370 char *fullstatus = NULL; 373 char *fullstatus = NULL;
371 int ret; 374 int ret;
372 int num_hdr_containers = 1; 375 int num_hdr_containers = 1;
@@ -417,6 +420,7 @@ SPDY_build_response(int status,
417 420
418 SPDY_name_value_destroy(all_headers[0]); 421 SPDY_name_value_destroy(all_headers[0]);
419 free(all_headers); 422 free(all_headers);
423 all_headers = NULL;
420 424
421 if(size > 0) 425 if(size > 0)
422 { 426 {
diff --git a/src/microspdy/daemon.c b/src/microspdy/daemon.c
index 09cf2107..d96df020 100644
--- a/src/microspdy/daemon.c
+++ b/src/microspdy/daemon.c
@@ -231,9 +231,7 @@ SPDYF_start_daemon_va (uint16_t port,
231 } 231 }
232 232
233 if(NULL == daemon->address) 233 if(NULL == daemon->address)
234 { 234 {
235 addrlen = sizeof (struct sockaddr_in6);
236
237 if (NULL == (servaddr6 = malloc (addrlen))) 235 if (NULL == (servaddr6 = malloc (addrlen)))
238 { 236 {
239 SPDYF_DEBUG("malloc"); 237 SPDYF_DEBUG("malloc");
@@ -246,7 +244,16 @@ SPDYF_start_daemon_va (uint16_t port,
246 daemon->address = (struct sockaddr *) servaddr6; 244 daemon->address = (struct sockaddr *) servaddr6;
247 } 245 }
248 246
249 afamily = AF_INET6 == daemon->address->sa_family ? PF_INET6 : PF_INET; 247 if(AF_INET6 == daemon->address->sa_family)
248 {
249 afamily = PF_INET6;
250 addrlen = sizeof (struct sockaddr_in6);
251 }
252 else
253 {
254 afamily = PF_INET;
255 addrlen = sizeof (struct sockaddr_in);
256 }
250#else 257#else
251 //handling IPv4 258 //handling IPv4
252 if(daemon->flags & SPDY_DAEMON_FLAG_ONLY_IPV6) 259 if(daemon->flags & SPDY_DAEMON_FLAG_ONLY_IPV6)
@@ -255,10 +262,10 @@ SPDYF_start_daemon_va (uint16_t port,
255 goto free_and_fail; 262 goto free_and_fail;
256 } 263 }
257 264
265 addrlen = sizeof (struct sockaddr_in);
266
258 if(NULL == daemon->address) 267 if(NULL == daemon->address)
259 { 268 {
260 addrlen = sizeof (struct sockaddr_in);
261
262 if (NULL == (servaddr4 = malloc (addrlen))) 269 if (NULL == (servaddr4 = malloc (addrlen)))
263 { 270 {
264 SPDYF_DEBUG("malloc"); 271 SPDYF_DEBUG("malloc");
diff --git a/src/microspdy/session.c b/src/microspdy/session.c
index 1b62f649..6057c05b 100644
--- a/src/microspdy/session.c
+++ b/src/microspdy/session.c
@@ -136,29 +136,32 @@ spdyf_handler_read_syn_stream (struct SPDY_Session *session)
136 return; 136 return;
137 } 137 }
138 } 138 }
139 139 else
140 ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers); 140 {
141 if(SPDY_NO == ret) 141 ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers);
142 { 142 if(SPDY_NO == ret)
143 //memory error, try later 143 {
144 free(name_value_strm); 144 //memory error, try later
145 return; 145 free(name_value_strm);
146 } 146 return;
147 147 }
148 session->streams_head->headers = headers; 148
149 //inform the application layer for the new stream received 149 session->streams_head->headers = headers;
150 if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head)) 150 //inform the application layer for the new stream received
151 { 151 if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head))
152 //memory error, try later 152 {
153 free(name_value_strm); 153 //memory error, try later
154 return; 154 free(name_value_strm);
155 } 155 return;
156 156 }
157 session->read_buffer_beginning += compressed_data_size; 157
158 session->read_buffer_beginning += compressed_data_size;
159 free(name_value_strm);
160 }
161
158 //change state to wait for new frame 162 //change state to wait for new frame
159 session->status = SPDY_SESSION_STATUS_WAIT_FOR_HEADER; 163 session->status = SPDY_SESSION_STATUS_WAIT_FOR_HEADER;
160 free(frame); 164 free(frame);
161 free(name_value_strm);
162} 165}
163 166
164 167
diff --git a/src/microspdy/structures.c b/src/microspdy/structures.c
index 6308fd95..6430ddb2 100644
--- a/src/microspdy/structures.c
+++ b/src/microspdy/structures.c
@@ -455,25 +455,25 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[],
455 455
456 for(j=0; j<num_containers; ++j) 456 for(j=0; j<num_containers; ++j)
457 { 457 {
458 iterator = container[j]; 458 iterator = container[j];
459 while(iterator != NULL) 459 while(iterator != NULL)
460 { 460 {
461 ++num_pairs; 461 ++num_pairs;
462 size += 4 + strlen(iterator->name); //length + string 462 size += 4 + strlen(iterator->name); //length + string
463 463
464 SPDYF_ASSERT(iterator->num_values>0, "num_values is 0"); 464 SPDYF_ASSERT(iterator->num_values>0, "num_values is 0");
465 465
466 size += 4; //value length 466 size += 4; //value length
467 467
468 for(i=0; i<iterator->num_values; ++i) 468 for(i=0; i<iterator->num_values; ++i)
469 { 469 {
470 size += strlen(iterator->value[i]); // string 470 size += strlen(iterator->value[i]); // string
471 if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator 471 if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator
472 } 472 }
473 473
474 iterator = iterator->next; 474 iterator = iterator->next;
475 } 475 }
476} 476 }
477 477
478 if(NULL == (*stream = malloc(size))) 478 if(NULL == (*stream = malloc(size)))
479 { 479 {
@@ -488,36 +488,36 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[],
488 //put all other headers to the stream 488 //put all other headers to the stream
489 for(j=0; j<num_containers; ++j) 489 for(j=0; j<num_containers; ++j)
490 { 490 {
491 iterator = container[j]; 491 iterator = container[j];
492 while(iterator != NULL) 492 while(iterator != NULL)
493 { 493 {
494 name_size = strlen(iterator->name); 494 name_size = strlen(iterator->name);
495 temp = htonl(name_size); 495 temp = htonl(name_size);
496 memcpy(*stream + offset, &temp, 4); 496 memcpy(*stream + offset, &temp, 4);
497 offset += 4; 497 offset += 4;
498 strncpy(*stream + offset, iterator->name, name_size); 498 strncpy(*stream + offset, iterator->name, name_size);
499 offset += name_size; 499 offset += name_size;
500 500
501 value_offset = offset; 501 value_offset = offset;
502 offset += 4; 502 offset += 4;
503 for(i=0; i<iterator->num_values; ++i) 503 for(i=0; i<iterator->num_values; ++i)
504 { 504 {
505 if(i /*|| !strlen(iterator->value[0])*/) 505 if(i /*|| !strlen(iterator->value[0])*/)
506 { 506 {
507 memset(*stream + offset, 0, 1); 507 memset(*stream + offset, 0, 1);
508 ++offset; 508 ++offset;
509 if(!i) continue; 509 //if(!i) continue;
510 } 510 }
511 strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i])); 511 strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i]));
512 offset += strlen(iterator->value[i]); 512 offset += strlen(iterator->value[i]);
513 } 513 }
514 value_size = offset - value_offset - 4; 514 value_size = offset - value_offset - 4;
515 value_size = htonl(value_size); 515 value_size = htonl(value_size);
516 memcpy(*stream + value_offset, &value_size, 4); 516 memcpy(*stream + value_offset, &value_size, 4);
517 517
518 iterator = iterator->next; 518 iterator = iterator->next;
519 } 519 }
520} 520 }
521 521
522 SPDYF_ASSERT(offset == size,"offset is wrong"); 522 SPDYF_ASSERT(offset == size,"offset is wrong");
523 523