mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-22 21:23:07 +03:00
Keep socket connections open as per v1.1 HTTP
git-svn-id: svn://svn.code.sf.net/p/axtls/code/trunk@25 9a5d90b5-6617-0410-8a86-bb477d3ed2e3
This commit is contained in:
parent
3b1e1a8e79
commit
d978b9a522
@ -1,6 +1,6 @@
|
|||||||
diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
||||||
--- awhttpd/aw3.h 2005-01-23 13:17:14.000000000 +1000
|
--- awhttpd/aw3.h 2005-01-23 13:17:14.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/aw3.h 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/aw3.h 2006-07-22 18:09:01.968750000 +1000
|
||||||
@@ -7,17 +7,16 @@
|
@@ -7,17 +7,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
struct connstruct {
|
struct connstruct {
|
||||||
struct connstruct *next;
|
struct connstruct *next;
|
||||||
|
|
||||||
@@ -46,29 +45,46 @@
|
@@ -46,29 +45,48 @@
|
||||||
|
|
||||||
int networkdesc;
|
int networkdesc;
|
||||||
int filedesc;
|
int filedesc;
|
||||||
@ -72,7 +72,9 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
long offset;
|
long offset;
|
||||||
char databuf[BLOCKSIZE];
|
char databuf[BLOCKSIZE];
|
||||||
|
|
||||||
+ int is_ssl;
|
+ unsigned char is_ssl;
|
||||||
|
+ unsigned char close_when_done;
|
||||||
|
+ unsigned char modified_since;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -86,7 +88,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -111,13 +127,20 @@
|
@@ -111,13 +129,20 @@
|
||||||
|
|
||||||
|
|
||||||
// Useful macros
|
// Useful macros
|
||||||
@ -108,7 +110,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
void removeconnection(struct connstruct *cn);
|
void removeconnection(struct connstruct *cn);
|
||||||
|
|
||||||
|
|
||||||
@@ -129,16 +152,17 @@
|
@@ -129,16 +154,17 @@
|
||||||
void procsendhead(struct connstruct *cn);
|
void procsendhead(struct connstruct *cn);
|
||||||
void procreadfile(struct connstruct *cn);
|
void procreadfile(struct connstruct *cn);
|
||||||
void procsendfile(struct connstruct *cn);
|
void procsendfile(struct connstruct *cn);
|
||||||
@ -128,7 +130,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
int openlistener(int port);
|
int openlistener(int port);
|
||||||
int openlistener6(int port);
|
int openlistener6(int port);
|
||||||
|
|
||||||
@@ -150,9 +174,9 @@
|
@@ -150,9 +176,9 @@
|
||||||
|
|
||||||
|
|
||||||
// misc.c prototypes
|
// misc.c prototypes
|
||||||
@ -141,7 +143,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
void stripcrlf(char *p);
|
void stripcrlf(char *p);
|
||||||
char *my_strncpy(char *dest, const char *src, size_t n);
|
char *my_strncpy(char *dest, const char *src, size_t n);
|
||||||
#ifndef __HAVE_ARCH_STRNLEN
|
#ifndef __HAVE_ARCH_STRNLEN
|
||||||
@@ -166,12 +190,12 @@
|
@@ -166,12 +192,12 @@
|
||||||
void buildactualfile(struct connstruct *cn);
|
void buildactualfile(struct connstruct *cn);
|
||||||
int issockwriteable(int sd);
|
int issockwriteable(int sd);
|
||||||
int isdir(char *name);
|
int isdir(char *name);
|
||||||
@ -156,7 +158,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
|
|
||||||
|
|
||||||
// urldecode.c prototypes
|
// urldecode.c prototypes
|
||||||
@@ -188,7 +212,7 @@
|
@@ -188,7 +214,7 @@
|
||||||
|
|
||||||
|
|
||||||
// conf.c prototypes
|
// conf.c prototypes
|
||||||
@ -165,7 +167,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
void procconf(char *filename);
|
void procconf(char *filename);
|
||||||
|
|
||||||
|
|
||||||
@@ -202,4 +226,4 @@
|
@@ -202,4 +228,4 @@
|
||||||
|
|
||||||
|
|
||||||
// main.c prototypes
|
// main.c prototypes
|
||||||
@ -173,7 +175,7 @@ diff -Naur awhttpd/aw3.h axTLS/httpd/awhttpd/aw3.h
|
|||||||
+void initlists(void);
|
+void initlists(void);
|
||||||
diff -Naur awhttpd/cgi.c axTLS/httpd/awhttpd/cgi.c
|
diff -Naur awhttpd/cgi.c axTLS/httpd/awhttpd/cgi.c
|
||||||
--- awhttpd/cgi.c 2005-06-04 14:09:52.000000000 +1000
|
--- awhttpd/cgi.c 2005-06-04 14:09:52.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/cgi.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/cgi.c 2006-07-22 16:54:31.546875000 +1000
|
||||||
@@ -7,29 +7,33 @@
|
@@ -7,29 +7,33 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -362,7 +364,7 @@ diff -Naur awhttpd/cgi.c axTLS/httpd/awhttpd/cgi.c
|
|||||||
+#endif /* CONFIG_HTTP_HAS_CGI */
|
+#endif /* CONFIG_HTTP_HAS_CGI */
|
||||||
diff -Naur awhttpd/conf.c axTLS/httpd/awhttpd/conf.c
|
diff -Naur awhttpd/conf.c axTLS/httpd/awhttpd/conf.c
|
||||||
--- awhttpd/conf.c 2005-06-04 14:09:52.000000000 +1000
|
--- awhttpd/conf.c 2005-06-04 14:09:52.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/conf.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/conf.c 2006-07-22 16:54:31.562500000 +1000
|
||||||
@@ -10,11 +10,7 @@
|
@@ -10,11 +10,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -450,7 +452,7 @@ diff -Naur awhttpd/conf.c axTLS/httpd/awhttpd/conf.c
|
|||||||
+#endif /* CONFIG_STANDARD_AWHTTPD */
|
+#endif /* CONFIG_STANDARD_AWHTTPD */
|
||||||
diff -Naur awhttpd/conn.c axTLS/httpd/awhttpd/conn.c
|
diff -Naur awhttpd/conn.c axTLS/httpd/awhttpd/conn.c
|
||||||
--- awhttpd/conn.c 2004-12-07 16:11:02.000000000 +1000
|
--- awhttpd/conn.c 2004-12-07 16:11:02.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/conn.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/conn.c 2006-07-22 18:08:57.687500000 +1000
|
||||||
@@ -9,15 +9,11 @@
|
@@ -9,15 +9,11 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -490,7 +492,13 @@ diff -Naur awhttpd/conn.c axTLS/httpd/awhttpd/conn.c
|
|||||||
*(tp->virtualhostreq) = '\0';
|
*(tp->virtualhostreq) = '\0';
|
||||||
|
|
||||||
tp->state = STATE_WANT_TO_READ_HEAD;
|
tp->state = STATE_WANT_TO_READ_HEAD;
|
||||||
@@ -57,7 +62,6 @@
|
@@ -53,11 +58,12 @@
|
||||||
|
my_strncpy(tp->ip, ip, MAXIPLEN);
|
||||||
|
|
||||||
|
tp->offset = -1;
|
||||||
|
+ tp->close_when_done = 0;
|
||||||
|
+ tp->modified_since = 0;
|
||||||
|
|
||||||
numusers++;
|
numusers++;
|
||||||
|
|
||||||
updatetimeout(tp, time(NULL));
|
updatetimeout(tp, time(NULL));
|
||||||
@ -498,7 +506,7 @@ diff -Naur awhttpd/conn.c axTLS/httpd/awhttpd/conn.c
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -95,10 +99,22 @@
|
@@ -95,10 +101,22 @@
|
||||||
freeconns = cn;
|
freeconns = cn;
|
||||||
|
|
||||||
// Close it all down
|
// Close it all down
|
||||||
@ -525,7 +533,7 @@ diff -Naur awhttpd/conn.c axTLS/httpd/awhttpd/conn.c
|
|||||||
return;
|
return;
|
||||||
diff -Naur awhttpd/errors.c axTLS/httpd/awhttpd/errors.c
|
diff -Naur awhttpd/errors.c axTLS/httpd/awhttpd/errors.c
|
||||||
--- awhttpd/errors.c 2005-01-23 06:49:29.000000000 +1000
|
--- awhttpd/errors.c 2005-01-23 06:49:29.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/errors.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/errors.c 2006-07-22 16:54:31.562500000 +1000
|
||||||
@@ -8,7 +8,6 @@
|
@@ -8,7 +8,6 @@
|
||||||
|
|
||||||
|
|
||||||
@ -562,7 +570,7 @@ diff -Naur awhttpd/errors.c axTLS/httpd/awhttpd/errors.c
|
|||||||
char buf[1024];
|
char buf[1024];
|
||||||
diff -Naur awhttpd/index.c axTLS/httpd/awhttpd/index.c
|
diff -Naur awhttpd/index.c axTLS/httpd/awhttpd/index.c
|
||||||
--- awhttpd/index.c 2005-06-04 14:09:52.000000000 +1000
|
--- awhttpd/index.c 2005-06-04 14:09:52.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/index.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/index.c 2006-07-22 16:54:31.562500000 +1000
|
||||||
@@ -11,7 +11,6 @@
|
@@ -11,7 +11,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -588,7 +596,7 @@ diff -Naur awhttpd/index.c axTLS/httpd/awhttpd/index.c
|
|||||||
my_strncpy(cn->actualfile, tbuf, MAXREQUESTLENGTH);
|
my_strncpy(cn->actualfile, tbuf, MAXREQUESTLENGTH);
|
||||||
diff -Naur awhttpd/main.c axTLS/httpd/awhttpd/main.c
|
diff -Naur awhttpd/main.c axTLS/httpd/awhttpd/main.c
|
||||||
--- awhttpd/main.c 2005-06-04 14:09:52.000000000 +1000
|
--- awhttpd/main.c 2005-06-04 14:09:52.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/main.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/main.c 2006-07-22 16:54:31.562500000 +1000
|
||||||
@@ -11,7 +11,6 @@
|
@@ -11,7 +11,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -828,7 +836,7 @@ diff -Naur awhttpd/main.c axTLS/httpd/awhttpd/main.c
|
|||||||
return 0;
|
return 0;
|
||||||
diff -Naur awhttpd/mime_types.c axTLS/httpd/awhttpd/mime_types.c
|
diff -Naur awhttpd/mime_types.c axTLS/httpd/awhttpd/mime_types.c
|
||||||
--- awhttpd/mime_types.c 2004-01-26 01:08:47.000000000 +1000
|
--- awhttpd/mime_types.c 2004-01-26 01:08:47.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/mime_types.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/mime_types.c 2006-07-22 16:54:31.562500000 +1000
|
||||||
@@ -21,13 +21,14 @@
|
@@ -21,13 +21,14 @@
|
||||||
|
|
||||||
|
|
||||||
@ -862,7 +870,7 @@ diff -Naur awhttpd/mime_types.c axTLS/httpd/awhttpd/mime_types.c
|
|||||||
+
|
+
|
||||||
diff -Naur awhttpd/misc.c axTLS/httpd/awhttpd/misc.c
|
diff -Naur awhttpd/misc.c axTLS/httpd/awhttpd/misc.c
|
||||||
--- awhttpd/misc.c 2005-01-23 12:59:09.000000000 +1000
|
--- awhttpd/misc.c 2005-01-23 12:59:09.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/misc.c 2006-07-07 20:37:30.890625000 +1000
|
+++ axTLS/httpd/awhttpd/misc.c 2006-07-22 16:54:31.578125000 +1000
|
||||||
@@ -7,33 +7,33 @@
|
@@ -7,33 +7,33 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1008,7 +1016,7 @@ diff -Naur awhttpd/misc.c axTLS/httpd/awhttpd/misc.c
|
|||||||
+#endif
|
+#endif
|
||||||
diff -Naur awhttpd/net.c axTLS/httpd/awhttpd/net.c
|
diff -Naur awhttpd/net.c axTLS/httpd/awhttpd/net.c
|
||||||
--- awhttpd/net.c 2005-06-04 14:09:52.000000000 +1000
|
--- awhttpd/net.c 2005-06-04 14:09:52.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/net.c 2006-07-07 20:37:30.906250000 +1000
|
+++ axTLS/httpd/awhttpd/net.c 2006-07-22 16:54:31.578125000 +1000
|
||||||
@@ -8,9 +8,7 @@
|
@@ -8,9 +8,7 @@
|
||||||
|
|
||||||
|
|
||||||
@ -1111,7 +1119,7 @@ diff -Naur awhttpd/net.c axTLS/httpd/awhttpd/net.c
|
|||||||
|
|
||||||
diff -Naur awhttpd/permcheck.c axTLS/httpd/awhttpd/permcheck.c
|
diff -Naur awhttpd/permcheck.c axTLS/httpd/awhttpd/permcheck.c
|
||||||
--- awhttpd/permcheck.c 2005-01-23 06:49:29.000000000 +1000
|
--- awhttpd/permcheck.c 2005-01-23 06:49:29.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/permcheck.c 2006-07-07 20:37:30.906250000 +1000
|
+++ axTLS/httpd/awhttpd/permcheck.c 2006-07-22 16:54:31.578125000 +1000
|
||||||
@@ -7,21 +7,23 @@
|
@@ -7,21 +7,23 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1202,7 +1210,7 @@ diff -Naur awhttpd/permcheck.c axTLS/httpd/awhttpd/permcheck.c
|
|||||||
+#endif /* CONFIG_HTTP_PERM_CHECK */
|
+#endif /* CONFIG_HTTP_PERM_CHECK */
|
||||||
diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
||||||
--- awhttpd/proc.c 2005-01-23 10:59:41.000000000 +1000
|
--- awhttpd/proc.c 2005-01-23 10:59:41.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/proc.c 2006-07-07 21:07:26.250000000 +1000
|
+++ axTLS/httpd/awhttpd/proc.c 2006-07-23 10:32:07.593750000 +1000
|
||||||
@@ -13,14 +13,12 @@
|
@@ -13,14 +13,12 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -1229,7 +1237,18 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
|
|
||||||
} else if (strcmp(words[0], "Host:")==0) {
|
} else if (strcmp(words[0], "Host:")==0) {
|
||||||
|
|
||||||
@@ -85,19 +85,22 @@
|
@@ -80,24 +80,32 @@
|
||||||
|
if (isdigit(*words[1]) == 0) return 1;
|
||||||
|
|
||||||
|
cn->offset = atoi(words[1]);
|
||||||
|
-
|
||||||
|
+ } else if (strcmp(words[0], "Connection:")==0 &&
|
||||||
|
+ strcmp(words[1], "close")==0) {
|
||||||
|
+ cn->close_when_done = 1;
|
||||||
|
+ } else if (strcmp(words[0], "If-Modified-Since:")==0) {
|
||||||
|
+ /* TODO: parse this date properly with getdate() or similar */
|
||||||
|
+ cn->modified_since = 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -1254,7 +1273,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
|
|
||||||
if (cn->reqtype == TYPE_HEAD) {
|
if (cn->reqtype == TYPE_HEAD) {
|
||||||
snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nContent-Type: text/html\n\n");
|
snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nContent-Type: text/html\n\n");
|
||||||
@@ -107,7 +110,17 @@
|
@@ -107,7 +115,17 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1273,7 +1292,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
if (cn->dirp == NULL) {
|
if (cn->dirp == NULL) {
|
||||||
send404(cn);
|
send404(cn);
|
||||||
removeconnection(cn);
|
removeconnection(cn);
|
||||||
@@ -116,12 +129,13 @@
|
@@ -116,12 +134,13 @@
|
||||||
|
|
||||||
// Get rid of the "."
|
// Get rid of the "."
|
||||||
readdir(cn->dirp);
|
readdir(cn->dirp);
|
||||||
@ -1289,7 +1308,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
|
|
||||||
cn->state = STATE_DOING_DIR;
|
cn->state = STATE_DOING_DIR;
|
||||||
|
|
||||||
@@ -134,36 +148,48 @@
|
@@ -134,36 +153,48 @@
|
||||||
|
|
||||||
void procdodir(struct connstruct *cn) {
|
void procdodir(struct connstruct *cn) {
|
||||||
|
|
||||||
@ -1347,7 +1366,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -172,9 +198,10 @@
|
@@ -172,9 +203,10 @@
|
||||||
char buf[MAXREQUESTLENGTH*4], *tp, *next;
|
char buf[MAXREQUESTLENGTH*4], *tp, *next;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
@ -1361,14 +1380,18 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,36 +244,97 @@
|
@@ -217,36 +249,100 @@
|
||||||
void procsendhead(struct connstruct *cn) {
|
void procsendhead(struct connstruct *cn) {
|
||||||
|
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
+ char actualfile[1024];
|
+ char actualfile[1024];
|
||||||
struct stat stbuf;
|
struct stat stbuf;
|
||||||
|
-
|
||||||
- if (stat(cn->actualfile, &stbuf) == -1) {
|
- if (stat(cn->actualfile, &stbuf) == -1) {
|
||||||
|
+ time_t now = time(NULL);
|
||||||
|
+ char date[32];
|
||||||
|
+ strcpy(date, ctime(&now));
|
||||||
|
+
|
||||||
+ strcpy(actualfile, cn->actualfile);
|
+ strcpy(actualfile, cn->actualfile);
|
||||||
+
|
+
|
||||||
+#ifdef WIN32
|
+#ifdef WIN32
|
||||||
@ -1466,7 +1489,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
if ((stbuf.st_mode & S_IFMT) == S_IFDIR) {
|
if ((stbuf.st_mode & S_IFMT) == S_IFDIR) {
|
||||||
if (cn->filereq[strlen(cn->filereq)-1] != '/') {
|
if (cn->filereq[strlen(cn->filereq)-1] != '/') {
|
||||||
send301(cn);
|
send301(cn);
|
||||||
@@ -256,16 +344,24 @@
|
@@ -256,16 +352,24 @@
|
||||||
|
|
||||||
// Check to see if this dir has an index file
|
// Check to see if this dir has an index file
|
||||||
if (procindex(cn, &stbuf) == 0) {
|
if (procindex(cn, &stbuf) == 0) {
|
||||||
@ -1493,7 +1516,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
isdir(cn->actualfile)) {
|
isdir(cn->actualfile)) {
|
||||||
send404(cn);
|
send404(cn);
|
||||||
removeconnection(cn);
|
removeconnection(cn);
|
||||||
@@ -275,6 +371,7 @@
|
@@ -275,39 +379,57 @@
|
||||||
proccgi(cn,0);
|
proccgi(cn,0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1501,40 +1524,45 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
// If the index isn't a CGI, we continue on with the index file
|
// If the index isn't a CGI, we continue on with the index file
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -282,6 +379,7 @@
|
|
||||||
if (cn->offset == -1 || cn->offset >= stbuf.st_size) {
|
|
||||||
cn->offset = -1;
|
|
||||||
|
|
||||||
+#if defined (CONFIG_STANDARD_AWHTTPD)
|
- if (cn->offset == -1 || cn->offset >= stbuf.st_size) {
|
||||||
snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nServer: Anti-Web V%s (%s)\nContent-Type: %s\nContent-Length: %ld\nLast-Modified: %s\n",
|
+ if (cn->modified_since) {
|
||||||
VERSION,
|
+ snprintf(buf, sizeof(buf), "HTTP/1.1 304 Not Modified\nServer: Anti-Web V%s\nDate: %s\n", VERSION, date);
|
||||||
quote,
|
+ special_write(cn, buf, strlen(buf));
|
||||||
@@ -299,15 +397,41 @@
|
+ cn->modified_since = 0;
|
||||||
(long) stbuf.st_size - cn->offset,
|
+ cn->state = STATE_WANT_TO_READ_HEAD;
|
||||||
ctime(&(stbuf.st_mtime))); // ctime() has a \n on the end
|
+ return;
|
||||||
}
|
+ }
|
||||||
+#else
|
+ else if (cn->offset == -1 || cn->offset >= stbuf.st_size) {
|
||||||
+#ifdef CONFIG_HTTP_VERBOSE
|
+#ifdef CONFIG_HTTP_VERBOSE
|
||||||
+ printf("awhttpd: %s send %s\n",
|
+ printf("awhttpd: %s send %s\n",
|
||||||
+ cn->is_ssl ? "https" : "http", cn->actualfile);
|
+ cn->is_ssl ? "https" : "http", cn->actualfile);
|
||||||
+ TTY_FLUSH();
|
+ TTY_FLUSH();
|
||||||
+#endif
|
+#endif
|
||||||
+ snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nServer: Anti-Web V%s\nContent-Type: %s\nContent-Length: %ld\nLast-Modified: %s\n",
|
+
|
||||||
+ VERSION,
|
cn->offset = -1;
|
||||||
+ getmimetype(cn->actualfile),
|
|
||||||
+ (long) stbuf.st_size,
|
- snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nServer: Anti-Web V%s (%s)\nContent-Type: %s\nContent-Length: %ld\nLast-Modified: %s\n",
|
||||||
+ ctime(&(stbuf.st_mtime))); // ctime() has a \n on the end
|
+ snprintf(buf, sizeof(buf), "HTTP/1.1 200 OK\nServer: Anti-Web V%s\nContent-Type: %s\nContent-Length: %ld\nDate: %sLast-Modified: %s\n",
|
||||||
+ } else {
|
VERSION,
|
||||||
+ snprintf(buf, sizeof(buf), "HTTP/1.1 206 OK\nServer: Anti-Web V%s\nContent-Type: %s\nContent-Range: %ld-%ld/%ld\nContent-Length: %ld\nLast-Modified: %s\n",
|
- quote,
|
||||||
+ VERSION,
|
getmimetype(cn->actualfile),
|
||||||
+ getmimetype(cn->actualfile),
|
(long) stbuf.st_size,
|
||||||
+ cn->offset,
|
+ date,
|
||||||
+ (long) stbuf.st_size-1,
|
ctime(&(stbuf.st_mtime))); // ctime() has a \n on the end
|
||||||
+ (long) stbuf.st_size,
|
} else {
|
||||||
+ (long) stbuf.st_size - cn->offset,
|
- snprintf(buf, sizeof(buf), "HTTP/1.1 206 OK\nServer: Anti-Web V%s (%s)\nContent-Type: %s\nContent-Range: %ld-%ld/%ld\nContent-Length: %ld\nLast-Modified: %s\n",
|
||||||
+ ctime(&(stbuf.st_mtime))); // ctime() has a \n on the end
|
+ snprintf(buf, sizeof(buf), "HTTP/1.1 206 OK\nServer: Anti-Web V%s\nContent-Type: %s\nContent-Range: %ld-%ld/%ld\nContent-Length: %ld\nDate: %sLast-Modified: %s\n",
|
||||||
+ }
|
VERSION,
|
||||||
+#endif /* CONFIG_HTTP_USE_QUOTE */
|
- quote,
|
||||||
|
getmimetype(cn->actualfile),
|
||||||
|
cn->offset,
|
||||||
|
(long) stbuf.st_size-1,
|
||||||
|
(long) stbuf.st_size,
|
||||||
|
(long) stbuf.st_size - cn->offset,
|
||||||
|
+ date,
|
||||||
|
ctime(&(stbuf.st_mtime))); // ctime() has a \n on the end
|
||||||
|
}
|
||||||
|
|
||||||
- write(cn->networkdesc, buf, strlen(buf));
|
- write(cn->networkdesc, buf, strlen(buf));
|
||||||
+ special_write(cn, buf, strlen(buf));
|
+ special_write(cn, buf, strlen(buf));
|
||||||
@ -1544,7 +1572,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
+ int flags = O_RDONLY;
|
+ int flags = O_RDONLY;
|
||||||
+#ifdef WIN32
|
+#if defined(WIN32) || defined(CYGWIN)
|
||||||
+ flags |= O_BINARY;
|
+ flags |= O_BINARY;
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
@ -1553,7 +1581,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
if (cn->filedesc == -1) {
|
if (cn->filedesc == -1) {
|
||||||
send404(cn);
|
send404(cn);
|
||||||
removeconnection(cn);
|
removeconnection(cn);
|
||||||
@@ -318,7 +442,23 @@
|
@@ -318,7 +440,23 @@
|
||||||
lseek(cn->filedesc, cn->offset, SEEK_SET);
|
lseek(cn->filedesc, cn->offset, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1577,7 +1605,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,13 +468,13 @@
|
@@ -328,13 +466,19 @@
|
||||||
|
|
||||||
void procreadfile(struct connstruct *cn) {
|
void procreadfile(struct connstruct *cn) {
|
||||||
|
|
||||||
@ -1591,26 +1619,32 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
- return;
|
- return;
|
||||||
+ close(cn->filedesc);
|
+ close(cn->filedesc);
|
||||||
+ cn->filedesc = -1;
|
+ cn->filedesc = -1;
|
||||||
+ removeconnection(cn);
|
+ if (cn->close_when_done) /* close immediately */
|
||||||
|
+ removeconnection(cn);
|
||||||
|
+ else { /* keep socket open - HTTP 1.1 */
|
||||||
|
+ cn->state = STATE_WANT_TO_READ_HEAD;
|
||||||
|
+ cn->numbytes = 0;
|
||||||
|
+ cn->offset = -1;
|
||||||
|
+ }
|
||||||
+ return;
|
+ return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cn->numbytes = rv;
|
cn->numbytes = rv;
|
||||||
@@ -347,11 +487,9 @@
|
@@ -347,11 +491,9 @@
|
||||||
|
|
||||||
void procsendfile(struct connstruct *cn) {
|
void procsendfile(struct connstruct *cn) {
|
||||||
|
|
||||||
- int rv;
|
- int rv;
|
||||||
|
-
|
||||||
|
- rv = write(cn->networkdesc, cn->databuf, cn->numbytes);
|
||||||
+ int rv = special_write(cn, cn->databuf, cn->numbytes);
|
+ int rv = special_write(cn, cn->databuf, cn->numbytes);
|
||||||
|
|
||||||
- rv = write(cn->networkdesc, cn->databuf, cn->numbytes);
|
|
||||||
-
|
|
||||||
- if (rv == -1)
|
- if (rv == -1)
|
||||||
+ if (rv < 0)
|
+ if (rv < 0)
|
||||||
removeconnection(cn);
|
removeconnection(cn);
|
||||||
else if (rv == cn->numbytes)
|
else if (rv == cn->numbytes)
|
||||||
cn->state = STATE_WANT_TO_READ_FILE;
|
cn->state = STATE_WANT_TO_READ_FILE;
|
||||||
@@ -361,7 +499,47 @@
|
@@ -361,7 +503,47 @@
|
||||||
memmove(cn->databuf, cn->databuf + rv, cn->numbytes - rv);
|
memmove(cn->databuf, cn->databuf + rv, cn->numbytes - rv);
|
||||||
cn->numbytes -= rv;
|
cn->numbytes -= rv;
|
||||||
}
|
}
|
||||||
@ -1661,7 +1695,7 @@ diff -Naur awhttpd/proc.c axTLS/httpd/awhttpd/proc.c
|
|||||||
}
|
}
|
||||||
diff -Naur awhttpd/socket.c axTLS/httpd/awhttpd/socket.c
|
diff -Naur awhttpd/socket.c axTLS/httpd/awhttpd/socket.c
|
||||||
--- awhttpd/socket.c 2004-04-25 13:03:05.000000000 +1000
|
--- awhttpd/socket.c 2004-04-25 13:03:05.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/socket.c 2006-07-07 20:37:30.906250000 +1000
|
+++ axTLS/httpd/awhttpd/socket.c 2006-07-22 16:54:31.578125000 +1000
|
||||||
@@ -8,19 +8,11 @@
|
@@ -8,19 +8,11 @@
|
||||||
|
|
||||||
|
|
||||||
@ -1748,7 +1782,7 @@ diff -Naur awhttpd/socket.c axTLS/httpd/awhttpd/socket.c
|
|||||||
memset(&(my_addr.sin_zero), 0, 8); // zero the rest of the struct
|
memset(&(my_addr.sin_zero), 0, 8); // zero the rest of the struct
|
||||||
diff -Naur awhttpd/urlencode.c axTLS/httpd/awhttpd/urlencode.c
|
diff -Naur awhttpd/urlencode.c axTLS/httpd/awhttpd/urlencode.c
|
||||||
--- awhttpd/urlencode.c 2004-05-14 10:53:47.000000000 +1000
|
--- awhttpd/urlencode.c 2004-05-14 10:53:47.000000000 +1000
|
||||||
+++ axTLS/httpd/awhttpd/urlencode.c 2006-07-07 20:37:30.906250000 +1000
|
+++ axTLS/httpd/awhttpd/urlencode.c 2006-07-22 16:54:31.593750000 +1000
|
||||||
@@ -13,7 +13,7 @@
|
@@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user