aboutsummaryrefslogtreecommitdiff
path: root/src/daemon/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/daemon.c')
-rw-r--r--src/daemon/daemon.c77
1 files changed, 39 insertions, 38 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c
index e971c9b2..971196f8 100644
--- a/src/daemon/daemon.c
+++ b/src/daemon/daemon.c
@@ -172,7 +172,7 @@ MHD_handle_connection (void *data)
172static int 172static int
173MHD_accept_connection (struct MHD_Daemon *daemon) 173MHD_accept_connection (struct MHD_Daemon *daemon)
174{ 174{
175 struct MHD_Connection *pos; 175 struct MHD_Connection *pos;
176 struct MHD_Connection *connection; 176 struct MHD_Connection *connection;
177 struct sockaddr_in6 addr6; 177 struct sockaddr_in6 addr6;
178 struct sockaddr *addr = (struct sockaddr *) &addr6; 178 struct sockaddr *addr = (struct sockaddr *) &addr6;
@@ -204,42 +204,44 @@ MHD_accept_connection (struct MHD_Daemon *daemon)
204#if DEBUG_CONNECT 204#if DEBUG_CONNECT
205 MHD_DLOG (daemon, "Accepted connection on socket %d\n", s); 205 MHD_DLOG (daemon, "Accepted connection on socket %d\n", s);
206#endif 206#endif
207 have = 0; 207 have = 0;
208 if ( (daemon->per_ip_connection_limit != 0) && 208 if ((daemon->per_ip_connection_limit != 0) && (daemon->max_connections > 0))
209 (daemon->max_connections > 0) )
210 { 209 {
211 pos = daemon->connections; 210 pos = daemon->connections;
212 while (pos != NULL) 211 while (pos != NULL)
213 { 212 {
214 if ( (pos->addr != NULL) && 213 if ((pos->addr != NULL) && (pos->addr_len == addrlen))
215 (pos->addr_len == addrlen) ) 214 {
216 { 215 if (addrlen == sizeof (struct sockaddr_in))
217 if (addrlen == sizeof(struct sockaddr_in)) 216 {
218 { 217 const struct sockaddr_in *a1 =
219 const struct sockaddr_in * a1 = (const struct sockaddr_in *) &addr; 218 (const struct sockaddr_in *) &addr;
220 const struct sockaddr_in * a2 = (const struct sockaddr_in *) pos->addr; 219 const struct sockaddr_in *a2 =
221 if (0 == memcmp(&a1->sin_addr, 220 (const struct sockaddr_in *) pos->addr;
222 &a2->sin_addr, 221 if (0 ==
223 sizeof(struct in_addr))) 222 memcmp (&a1->sin_addr, &a2->sin_addr,
224 have++; 223 sizeof (struct in_addr)))
225 } 224 have++;
226 if (addrlen == sizeof(struct sockaddr_in6)) 225 }
227 { 226 if (addrlen == sizeof (struct sockaddr_in6))
228 const struct sockaddr_in6 * a1 = (const struct sockaddr_in6 *) &addr; 227 {
229 const struct sockaddr_in6 * a2 = (const struct sockaddr_in6 *) pos->addr; 228 const struct sockaddr_in6 *a1 =
230 if (0 == memcmp(&a1->sin6_addr, 229 (const struct sockaddr_in6 *) &addr;
231 &a2->sin6_addr, 230 const struct sockaddr_in6 *a2 =
232 sizeof(struct in6_addr))) 231 (const struct sockaddr_in6 *) pos->addr;
233 have++; 232 if (0 ==
234 } 233 memcmp (&a1->sin6_addr, &a2->sin6_addr,
235 } 234 sizeof (struct in6_addr)))
236 pos = pos->next; 235 have++;
237 } 236 }
237 }
238 pos = pos->next;
239 }
238 } 240 }
239 241
240 if ( (daemon->max_connections == 0) || 242 if ((daemon->max_connections == 0) ||
241 ( (daemon->per_ip_connection_limit != 0) && 243 ((daemon->per_ip_connection_limit != 0) &&
242 (daemon->per_ip_connection_limit <= have) ) ) 244 (daemon->per_ip_connection_limit <= have)))
243 { 245 {
244 /* above connection limit - reject */ 246 /* above connection limit - reject */
245#if HAVE_MESSAGES 247#if HAVE_MESSAGES
@@ -635,7 +637,7 @@ MHD_start_daemon (unsigned int options,
635 retVal = malloc (sizeof (struct MHD_Daemon)); 637 retVal = malloc (sizeof (struct MHD_Daemon));
636 if (retVal == NULL) 638 if (retVal == NULL)
637 { 639 {
638 CLOSE(socket_fd); 640 CLOSE (socket_fd);
639 return NULL; 641 return NULL;
640 } 642 }
641 memset (retVal, 0, sizeof (struct MHD_Daemon)); 643 memset (retVal, 0, sizeof (struct MHD_Daemon));
@@ -668,10 +670,9 @@ MHD_start_daemon (unsigned int options,
668 va_arg (ap, MHD_RequestCompletedCallback); 670 va_arg (ap, MHD_RequestCompletedCallback);
669 retVal->notify_completed_cls = va_arg (ap, void *); 671 retVal->notify_completed_cls = va_arg (ap, void *);
670 break; 672 break;
671 case MHD_OPTION_PER_IP_CONNECTION_LIMIT: 673 case MHD_OPTION_PER_IP_CONNECTION_LIMIT:
672 retVal->per_ip_connection_limit 674 retVal->per_ip_connection_limit = va_arg (ap, unsigned int);
673 = va_arg (ap, unsigned int); 675 break;
674 break;
675 default: 676 default:
676#if HAVE_MESSAGES 677#if HAVE_MESSAGES
677 fprintf (stderr, 678 fprintf (stderr,