HTTP keep-alive fixed. Network debugging capabilities.
This commit is contained in:
parent
e40e55bfe0
commit
21fc9de47a
|
@ -229,6 +229,10 @@ It is possible to display different categories of messages:
|
||||||
is greater than MODES_DEBUG_NOPREAMBLE_LEVEL (set to
|
is greater than MODES_DEBUG_NOPREAMBLE_LEVEL (set to
|
||||||
25 by default).
|
25 by default).
|
||||||
|
|
||||||
|
Network related debug modes:
|
||||||
|
|
||||||
|
--debug 6 Log network events (HTTP requests & others)
|
||||||
|
|
||||||
How this program works?
|
How this program works?
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
1
anet.h
1
anet.h
|
@ -54,5 +54,6 @@ int anetNonBlock(char *err, int fd);
|
||||||
int anetTcpNoDelay(char *err, int fd);
|
int anetTcpNoDelay(char *err, int fd);
|
||||||
int anetTcpKeepAlive(char *err, int fd);
|
int anetTcpKeepAlive(char *err, int fd);
|
||||||
int anetPeerToString(int fd, char *ip, int *port);
|
int anetPeerToString(int fd, char *ip, int *port);
|
||||||
|
int anetSetSendBuffer(char *err, int fd, int buffsize);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
36
dump1090.c
36
dump1090.c
|
@ -70,6 +70,7 @@
|
||||||
#define MODES_DEBUG_BADCRC 3
|
#define MODES_DEBUG_BADCRC 3
|
||||||
#define MODES_DEBUG_GOODCRC 4
|
#define MODES_DEBUG_GOODCRC 4
|
||||||
#define MODES_DEBUG_NOPREAMBLE 5
|
#define MODES_DEBUG_NOPREAMBLE 5
|
||||||
|
#define MODES_DEBUG_NET 6
|
||||||
|
|
||||||
/* When debug is set to MODES_DEBUG_NOPREAMBLE, the first sample must be
|
/* When debug is set to MODES_DEBUG_NOPREAMBLE, the first sample must be
|
||||||
* at least greater than a given level for us to dump the signal. */
|
* at least greater than a given level for us to dump the signal. */
|
||||||
|
@ -84,6 +85,7 @@
|
||||||
#define MODES_NET_INPUT_RAW_PORT 30001
|
#define MODES_NET_INPUT_RAW_PORT 30001
|
||||||
#define MODES_NET_HTTP_PORT 8080
|
#define MODES_NET_HTTP_PORT 8080
|
||||||
#define MODES_CLIENT_BUF_SIZE 1024
|
#define MODES_CLIENT_BUF_SIZE 1024
|
||||||
|
#define MODES_NET_SNDBUF_SIZE (1024*64)
|
||||||
|
|
||||||
#define MODES_NOTUSED(V) ((void) V)
|
#define MODES_NOTUSED(V) ((void) V)
|
||||||
|
|
||||||
|
@ -1734,9 +1736,13 @@ void modesAcceptClients(void) {
|
||||||
c->fd = fd;
|
c->fd = fd;
|
||||||
c->buflen = 0;
|
c->buflen = 0;
|
||||||
Modes.clients[fd] = c;
|
Modes.clients[fd] = c;
|
||||||
|
anetSetSendBuffer(Modes.aneterr,fd,MODES_NET_SNDBUF_SIZE);
|
||||||
|
|
||||||
if (Modes.maxfd < fd) Modes.maxfd = fd;
|
if (Modes.maxfd < fd) Modes.maxfd = fd;
|
||||||
j--; /* Try again with the same listening port. */
|
j--; /* Try again with the same listening port. */
|
||||||
|
|
||||||
|
if (Modes.debug == MODES_DEBUG_NET)
|
||||||
|
printf("Created new client %d\n", fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1746,6 +1752,9 @@ void modesFreeClient(int fd) {
|
||||||
free(Modes.clients[fd]);
|
free(Modes.clients[fd]);
|
||||||
Modes.clients[fd] = NULL;
|
Modes.clients[fd] = NULL;
|
||||||
|
|
||||||
|
if (Modes.debug == MODES_DEBUG_NET)
|
||||||
|
printf("Closing client %d\n", fd);
|
||||||
|
|
||||||
/* If this was our maxfd, rescan the full clients array to check what's
|
/* If this was our maxfd, rescan the full clients array to check what's
|
||||||
* the new max. */
|
* the new max. */
|
||||||
if (Modes.maxfd == fd) {
|
if (Modes.maxfd == fd) {
|
||||||
|
@ -1901,21 +1910,35 @@ char *aircraftsToJson(int *len) {
|
||||||
int handleHTTPRequest(struct client *c) {
|
int handleHTTPRequest(struct client *c) {
|
||||||
char hdr[512];
|
char hdr[512];
|
||||||
int clen, hdrlen;
|
int clen, hdrlen;
|
||||||
int keepalive;
|
int httpver, keepalive;
|
||||||
char *p, *url, *content;
|
char *p, *url, *content;
|
||||||
char *ctype;
|
char *ctype;
|
||||||
|
|
||||||
/* printf("HTTP request: %s\n", c->buf); */
|
if (Modes.debug == MODES_DEBUG_NET)
|
||||||
|
printf("\nHTTP request: %s\n", c->buf);
|
||||||
|
|
||||||
/* Minimally parse the request. */
|
/* Minimally parse the request. */
|
||||||
keepalive = strstr(c->buf, "keep-alive") != NULL;
|
httpver = (strstr(c->buf, "HTTP/1.1") != NULL) ? 11 : 10;
|
||||||
|
if (httpver == 10) {
|
||||||
|
/* HTTP 1.0 defaults to close, unless otherwise specified. */
|
||||||
|
keepalive = strstr(c->buf, "Connection: keep-alive") != NULL;
|
||||||
|
} else if (httpver == 11) {
|
||||||
|
/* HTTP 1.1 defaults to keep-alive, unless close is specified. */
|
||||||
|
keepalive = strstr(c->buf, "Connection: close") == NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Identify he URL. */
|
||||||
p = strchr(c->buf,' ');
|
p = strchr(c->buf,' ');
|
||||||
if (!p) return 1; /* There should be the method and a space... */
|
if (!p) return 1; /* There should be the method and a space... */
|
||||||
url = ++p; /* Now this should point to the requested URL. */
|
url = ++p; /* Now this should point to the requested URL. */
|
||||||
p = strchr(p, ' ');
|
p = strchr(p, ' ');
|
||||||
if (!p) return 1; /* There should be a space before HTTP/... */
|
if (!p) return 1; /* There should be a space before HTTP/... */
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
/* printf("URL: %s\n", url); */
|
|
||||||
|
if (Modes.debug == MODES_DEBUG_NET) {
|
||||||
|
printf("\nHTTP keep alive: %d\n", keepalive);
|
||||||
|
printf("HTTP requested URL: %s\n\n", url);
|
||||||
|
}
|
||||||
|
|
||||||
/* Select the content to send, we have just two so far:
|
/* Select the content to send, we have just two so far:
|
||||||
* "/" -> Our google map application.
|
* "/" -> Our google map application.
|
||||||
|
@ -1959,6 +1982,9 @@ int handleHTTPRequest(struct client *c) {
|
||||||
keepalive ? "keep-alive" : "close",
|
keepalive ? "keep-alive" : "close",
|
||||||
clen);
|
clen);
|
||||||
|
|
||||||
|
if (Modes.debug == MODES_DEBUG_NET)
|
||||||
|
printf("HTTP Reply header:\n%s", hdr);
|
||||||
|
|
||||||
/* Send header and content. */
|
/* Send header and content. */
|
||||||
if (write(c->fd, hdr, hdrlen) == -1 ||
|
if (write(c->fd, hdr, hdrlen) == -1 ||
|
||||||
write(c->fd, content, clen) == -1)
|
write(c->fd, content, clen) == -1)
|
||||||
|
@ -1968,7 +1994,7 @@ int handleHTTPRequest(struct client *c) {
|
||||||
}
|
}
|
||||||
free(content);
|
free(content);
|
||||||
Modes.stat_http_requests++;
|
Modes.stat_http_requests++;
|
||||||
return 0;
|
return !keepalive;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function polls the clients using read() in order to receive new
|
/* This function polls the clients using read() in order to receive new
|
||||||
|
|
Loading…
Reference in a new issue