diff --git a/spritehttpd/src/httpd.c b/spritehttpd/src/httpd.c index 5a796a6..769d1fb 100644 --- a/spritehttpd/src/httpd.c +++ b/spritehttpd/src/httpd.c @@ -223,12 +223,16 @@ void httpdQueueHeader(HttpdConnData *conn, const char *header, const char *value strcat(queEntry->headerLine, value); strcat(queEntry->headerLine, "\r\n"); - // Attach it to the linked list - HttpdQueuedHeader **ph = &conn->priv->headersToSend; - while (*ph) { - ph = &(*ph)->next; + if (!conn->priv->headersToSend) { + conn->priv->headersToSend = queEntry; + } else { + HttpdQueuedHeader *ph = conn->priv->headersToSend; + // Go to the end of the linked list + while (ph->next) { + ph = ph->next; + } + ph->next = queEntry; } - *ph = queEntry; } void httdSetTransferMode(HttpdConnData *conn, httpd_transfer_opt mode) @@ -292,8 +296,9 @@ void httpdHeader(HttpdConnData *conn, const char *field, const char *val) //Finish the headers. void httpdEndHeaders(HttpdConnData *conn) { - // Add queued headers + // Add queued headers & dealloc the struct HttpdQueuedHeader *qh = conn->priv->headersToSend; + conn->priv->headersToSend = NULL; while (qh) { httpdSendStr(conn, qh->headerLine); HttpdQueuedHeader *next = qh->next; @@ -473,7 +478,7 @@ bool httpdFlushSendBuffer(HttpdConnData *conn) return true; } -void httpdCgiIsDone(HttpdConnData *conn) +static void httpdCgiIsDone(HttpdConnData *conn) { conn->cgi = NULL; //no need to call this anymore if (conn->priv->flags & HFL_CHUNKED) { @@ -723,7 +728,7 @@ static void httpdParseHeader(char *h, HttpdConnData *conn) http_dbg("Mallocced buffer for %d + 1 bytes of post data.", (int) conn->post->buffSize); conn->post->buff = (char *) httpdPlatMalloc(conn->post->buffSize + 1); if (conn->post->buff == NULL) { - http_error("...failed!"); + http_error("post buf alloc failed"); return; } conn->post->buffLen = 0; @@ -937,10 +942,15 @@ int httpdConnectCb(ConnTypePtr conn, const uint8_t *remIp, uint16_t remPort) } memset(s_connData[i], 0, sizeof(HttpdConnData)); s_connData[i]->priv = httpdPlatMalloc(sizeof(HttpdPriv)); + if (s_connData[i]->priv == NULL) { + http_error("Out of memory allocating connData priv struct!"); + httpdPlatUnlock(); + return 0; + } memset(s_connData[i]->priv, 0, sizeof(HttpdPriv)); s_connData[i]->conn = conn; s_connData[i]->slot = i; - s_connData[i]->priv->headPos = 0; +// s_connData[i]->priv->headPos = 0; s_connData[i]->post = httpdPlatMalloc(sizeof(HttpdPostData)); if (s_connData[i]->post == NULL) { http_error("Out of memory allocating connData post struct!"); @@ -948,14 +958,15 @@ int httpdConnectCb(ConnTypePtr conn, const uint8_t *remIp, uint16_t remPort) return 0; } memset(s_connData[i]->post, 0, sizeof(HttpdPostData)); - s_connData[i]->post->buff = NULL; - s_connData[i]->post->buffLen = 0; - s_connData[i]->post->received = 0; +// s_connData[i]->post->buff = NULL; +// s_connData[i]->post->buffLen = 0; +// s_connData[i]->post->received = 0; s_connData[i]->post->len = -1; - s_connData[i]->hostName = NULL; +// s_connData[i]->hostName = NULL; s_connData[i]->remote_port = remPort; - s_connData[i]->priv->sendBacklog = NULL; - s_connData[i]->priv->sendBacklogSize = 0; +// s_connData[i]->priv->sendBacklog = NULL; +// s_connData[i]->priv->headersToSend = NULL; +// s_connData[i]->priv->sendBacklogSize = 0; memcpy(s_connData[i]->remote_ip, remIp, 4); httpdPlatUnlock();