aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/daemon/daemon.c25
-rw-r--r--src/daemon/session.c3
2 files changed, 18 insertions, 10 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c
index 1b882a08..0abb74b0 100644
--- a/src/daemon/daemon.c
+++ b/src/daemon/daemon.c
@@ -58,7 +58,7 @@ MHD_register_handler(struct MHD_Daemon * daemon,
58 return MHD_NO; 58 return MHD_NO;
59 ah = ah->next; 59 ah = ah->next;
60 } 60 }
61 ah = malloc(sizeof(MHD_AccessHandlerCallback)); 61 ah = malloc(sizeof(struct MHD_AccessHandler));
62 ah->next = daemon->handlers; 62 ah->next = daemon->handlers;
63 ah->uri_prefix = strdup(uri_prefix); 63 ah->uri_prefix = strdup(uri_prefix);
64 ah->dh = dh; 64 ah->dh = dh;
@@ -186,7 +186,8 @@ MHD_handle_connection(void * data) {
186 } 186 }
187 if ( ( (FD_ISSET(con->socket_fd, &rs)) && 187 if ( ( (FD_ISSET(con->socket_fd, &rs)) &&
188 (MHD_YES != MHD_session_handle_read(con)) ) || 188 (MHD_YES != MHD_session_handle_read(con)) ) ||
189 ( (FD_ISSET(con->socket_fd, &ws)) && 189 ( (con->socket_fd != -1) &&
190 (FD_ISSET(con->socket_fd, &ws)) &&
190 (MHD_YES != MHD_session_handle_write(con)) ) ) 191 (MHD_YES != MHD_session_handle_write(con)) ) )
191 break; 192 break;
192 } 193 }
@@ -214,9 +215,10 @@ MHD_accept_connection(struct MHD_Daemon * daemon) {
214 memset(&addr, 215 memset(&addr,
215 0, 216 0,
216 sizeof(struct sockaddr)); 217 sizeof(struct sockaddr));
217 if ( (0 != (s = accept(daemon->socket_fd, 218 s = accept(daemon->socket_fd,
218 &addr, 219 &addr,
219 &addrlen))) || 220 &addrlen);
221 if ( (s < 0) ||
220 (addrlen <= 0) ) { 222 (addrlen <= 0) ) {
221 MHD_DLOG(daemon, 223 MHD_DLOG(daemon,
222 "Error accepting connection: %s\n", 224 "Error accepting connection: %s\n",
@@ -298,20 +300,23 @@ MHD_cleanup_sessions(struct MHD_Daemon * daemon) {
298 free(hpos->header); 300 free(hpos->header);
299 free(hpos->value); 301 free(hpos->value);
300 } 302 }
301
302 if (pos->response != NULL) 303 if (pos->response != NULL)
303 MHD_destroy_response(pos->response); 304 MHD_destroy_response(pos->response);
304 free(pos); 305 free(pos);
305 } 306 if (prev == NULL)
306 307 pos = daemon->connections;
308 else
309 pos = prev->next;
310 continue;
311 }
312
307 if ( (pos->headersReceived == 1) && 313 if ( (pos->headersReceived == 1) &&
308 (pos->read_buffer_size == pos->readLoc) && 314 (pos->read_buffer_size == pos->readLoc) &&
309 (pos->readLoc > 0) ) 315 (pos->readLoc > 0) )
310 MHD_call_session_handler(pos); 316 MHD_call_session_handler(pos);
311 317
312
313 prev = pos; 318 prev = pos;
314 pos = pos->next; 319 pos = pos->next;
315 } 320 }
316} 321}
317 322
diff --git a/src/daemon/session.c b/src/daemon/session.c
index ed1b6b88..7dbc781d 100644
--- a/src/daemon/session.c
+++ b/src/daemon/session.c
@@ -361,6 +361,9 @@ MHD_session_handle_read(struct MHD_Session * session) {
361 session->read_buffer, 361 session->read_buffer,
362 session->read_buffer_size); 362 session->read_buffer_size);
363 session->read_buffer_size = session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE; 363 session->read_buffer_size = session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE;
364 if (session->read_buffer != NULL)
365 free(session->read_buffer);
366 session->read_buffer = tmp;
364 } 367 }
365 if (session->readLoc >= session->read_buffer_size) { 368 if (session->readLoc >= session->read_buffer_size) {
366 MHD_DLOG(session->daemon, 369 MHD_DLOG(session->daemon,