libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 21f9a70d53a472e0c3894099308ca040d401209a
parent d9ab40f53238b49c9f4a4df13e0262fbefb4a95a
Author: Andrey Uzunov <andrey.uzunov@gmail.com>
Date:   Fri, 28 Jun 2013 22:30:10 +0000

spdy: minor leaks, dead code, etc. fixed

Diffstat:
Msrc/microspdy/applicationlayer.c | 16++++++++++------
Msrc/microspdy/daemon.c | 21++++++++++++++-------
Msrc/microspdy/session.c | 43+++++++++++++++++++++++--------------------
Msrc/microspdy/structures.c | 98++++++++++++++++++++++++++++++++++++++++----------------------------------------
4 files changed, 96 insertions(+), 82 deletions(-)

diff --git a/src/microspdy/applicationlayer.c b/src/microspdy/applicationlayer.c @@ -124,17 +124,20 @@ spdy_handler_new_stream (void *cls, else for(i=0; i<iterator->num_values; ++i) if (SPDY_YES != SPDY_name_value_add(headers,iterator->name,iterator->value[i])) + { + SPDY_destroy_request(request); goto free_and_fail; + } iterator = iterator->next; } request->method=method; - request->path=path; - request->version=version; - request->host=host; - request->scheme=scheme; - request->headers=headers; + request->path=path; + request->version=version; + request->host=host; + request->scheme=scheme; + request->headers=headers; //check request validity, all these fields are mandatory for a request if(NULL == method || strlen(method) == 0 @@ -366,7 +369,7 @@ SPDY_build_response(int status, size_t size) { struct SPDY_Response *response = NULL; - struct SPDY_NameValue ** all_headers = NULL; + struct SPDY_NameValue ** all_headers = NULL; //TODO maybe array in stack is enough char *fullstatus = NULL; int ret; int num_hdr_containers = 1; @@ -417,6 +420,7 @@ SPDY_build_response(int status, SPDY_name_value_destroy(all_headers[0]); free(all_headers); + all_headers = NULL; if(size > 0) { diff --git a/src/microspdy/daemon.c b/src/microspdy/daemon.c @@ -231,9 +231,7 @@ SPDYF_start_daemon_va (uint16_t port, } if(NULL == daemon->address) - { - addrlen = sizeof (struct sockaddr_in6); - + { if (NULL == (servaddr6 = malloc (addrlen))) { SPDYF_DEBUG("malloc"); @@ -246,7 +244,16 @@ SPDYF_start_daemon_va (uint16_t port, daemon->address = (struct sockaddr *) servaddr6; } - afamily = AF_INET6 == daemon->address->sa_family ? PF_INET6 : PF_INET; + if(AF_INET6 == daemon->address->sa_family) + { + afamily = PF_INET6; + addrlen = sizeof (struct sockaddr_in6); + } + else + { + afamily = PF_INET; + addrlen = sizeof (struct sockaddr_in); + } #else //handling IPv4 if(daemon->flags & SPDY_DAEMON_FLAG_ONLY_IPV6) @@ -255,10 +262,10 @@ SPDYF_start_daemon_va (uint16_t port, goto free_and_fail; } + addrlen = sizeof (struct sockaddr_in); + if(NULL == daemon->address) - { - addrlen = sizeof (struct sockaddr_in); - + { if (NULL == (servaddr4 = malloc (addrlen))) { SPDYF_DEBUG("malloc"); diff --git a/src/microspdy/session.c b/src/microspdy/session.c @@ -136,29 +136,32 @@ spdyf_handler_read_syn_stream (struct SPDY_Session *session) return; } } - - ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers); - if(SPDY_NO == ret) - { - //memory error, try later - free(name_value_strm); - return; - } - - session->streams_head->headers = headers; - //inform the application layer for the new stream received - if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head)) - { - //memory error, try later - free(name_value_strm); - return; - } - - session->read_buffer_beginning += compressed_data_size; + else + { + ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers); + if(SPDY_NO == ret) + { + //memory error, try later + free(name_value_strm); + return; + } + + session->streams_head->headers = headers; + //inform the application layer for the new stream received + if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head)) + { + //memory error, try later + free(name_value_strm); + return; + } + + session->read_buffer_beginning += compressed_data_size; + free(name_value_strm); + } + //change state to wait for new frame session->status = SPDY_SESSION_STATUS_WAIT_FOR_HEADER; free(frame); - free(name_value_strm); } diff --git a/src/microspdy/structures.c b/src/microspdy/structures.c @@ -455,25 +455,25 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[], for(j=0; j<num_containers; ++j) { - iterator = container[j]; - while(iterator != NULL) - { - ++num_pairs; - size += 4 + strlen(iterator->name); //length + string - - SPDYF_ASSERT(iterator->num_values>0, "num_values is 0"); - - size += 4; //value length - - for(i=0; i<iterator->num_values; ++i) - { - size += strlen(iterator->value[i]); // string - if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator - } - - iterator = iterator->next; - } -} + iterator = container[j]; + while(iterator != NULL) + { + ++num_pairs; + size += 4 + strlen(iterator->name); //length + string + + SPDYF_ASSERT(iterator->num_values>0, "num_values is 0"); + + size += 4; //value length + + for(i=0; i<iterator->num_values; ++i) + { + size += strlen(iterator->value[i]); // string + if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator + } + + iterator = iterator->next; + } + } if(NULL == (*stream = malloc(size))) { @@ -488,36 +488,36 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[], //put all other headers to the stream for(j=0; j<num_containers; ++j) { - iterator = container[j]; - while(iterator != NULL) - { - name_size = strlen(iterator->name); - temp = htonl(name_size); - memcpy(*stream + offset, &temp, 4); - offset += 4; - strncpy(*stream + offset, iterator->name, name_size); - offset += name_size; - - value_offset = offset; - offset += 4; - for(i=0; i<iterator->num_values; ++i) - { - if(i /*|| !strlen(iterator->value[0])*/) - { - memset(*stream + offset, 0, 1); - ++offset; - if(!i) continue; - } - strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i])); - offset += strlen(iterator->value[i]); - } - value_size = offset - value_offset - 4; - value_size = htonl(value_size); - memcpy(*stream + value_offset, &value_size, 4); - - iterator = iterator->next; - } -} + iterator = container[j]; + while(iterator != NULL) + { + name_size = strlen(iterator->name); + temp = htonl(name_size); + memcpy(*stream + offset, &temp, 4); + offset += 4; + strncpy(*stream + offset, iterator->name, name_size); + offset += name_size; + + value_offset = offset; + offset += 4; + for(i=0; i<iterator->num_values; ++i) + { + if(i /*|| !strlen(iterator->value[0])*/) + { + memset(*stream + offset, 0, 1); + ++offset; + //if(!i) continue; + } + strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i])); + offset += strlen(iterator->value[i]); + } + value_size = offset - value_offset - 4; + value_size = htonl(value_size); + memcpy(*stream + value_offset, &value_size, 4); + + iterator = iterator->next; + } + } SPDYF_ASSERT(offset == size,"offset is wrong");