diff options
author | Andrey Uzunov <andrey.uzunov@gmail.com> | 2013-06-28 22:30:10 +0000 |
---|---|---|
committer | Andrey Uzunov <andrey.uzunov@gmail.com> | 2013-06-28 22:30:10 +0000 |
commit | 21f9a70d53a472e0c3894099308ca040d401209a (patch) | |
tree | 33f04adf13635fdbe5a9efe7fa698c4d46bc5755 /src/microspdy | |
parent | d9ab40f53238b49c9f4a4df13e0262fbefb4a95a (diff) | |
download | libmicrohttpd-21f9a70d53a472e0c3894099308ca040d401209a.tar.gz libmicrohttpd-21f9a70d53a472e0c3894099308ca040d401209a.zip |
spdy: minor leaks, dead code, etc. fixed
Diffstat (limited to 'src/microspdy')
-rw-r--r-- | src/microspdy/applicationlayer.c | 16 | ||||
-rw-r--r-- | src/microspdy/daemon.c | 21 | ||||
-rw-r--r-- | src/microspdy/session.c | 43 | ||||
-rw-r--r-- | src/microspdy/structures.c | 98 |
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 | ||