... | ... |
@@ -463,7 +463,7 @@ wk_serve_etagset(wk *paramweb, int connid, char *etag) |
463 | 463 |
} |
464 | 464 |
|
465 | 465 |
int |
466 |
-wk_serve_buffer_as_file(wk *paramweb, int connid, void *data, int datalen, const char *mime) |
|
466 |
+wk_serve_generic_headers(wk *paramweb, int connid, int datalen, const char *mime, int *etagnotmodified) |
|
467 | 467 |
{ |
468 | 468 |
static const char *strcontenttype={"Content-Type: "}; |
469 | 469 |
_wk *web=(_wk *)paramweb; |
... | ... |
@@ -476,6 +476,8 @@ wk_serve_buffer_as_file(wk *paramweb, int connid, void *data, int datalen, const |
476 | 476 |
if((client=wk_clientget(web,connid))==NULL) |
477 | 477 |
return(-1); |
478 | 478 |
cachedetag=(wk_etagnotmodified(web,client)==0)?1:0; |
479 |
+ if(etagnotmodified!=NULL) |
|
480 |
+ *etagnotmodified=cachedetag; |
|
479 | 481 |
if(!cachedetag) |
480 | 482 |
wk_writestr((wk *)web,connid,"HTTP/1.0 200 OK\r\n"); |
481 | 483 |
else |
... | ... |
@@ -505,6 +507,20 @@ wk_serve_buffer_as_file(wk *paramweb, int connid, void *data, int datalen, const |
505 | 507 |
if(client->keepalive) |
506 | 508 |
wk_writestr((wk *)web,connid,"Connection: keep-alive\r\n"); |
507 | 509 |
wk_writestr((wk *)web,connid,"\r\n"); |
510 |
+ return(0); |
|
511 |
+} |
|
512 |
+ |
|
513 |
+int |
|
514 |
+wk_serve_buffer_as_file(wk *paramweb, int connid, void *data, int datalen, const char *mime) |
|
515 |
+{ |
|
516 |
+ _wk *web=(_wk *)paramweb; |
|
517 |
+ int cachedetag; |
|
518 |
+ int res; |
|
519 |
+ if(web==NULL || datalen<0 || (data==NULL && datalen>0)) |
|
520 |
+ return(-1); |
|
521 |
+ res=wk_serve_generic_headers((wk *)web,connid,datalen,mime,&cachedetag); |
|
522 |
+ if(res!=0) |
|
523 |
+ return(res); |
|
508 | 524 |
if(!cachedetag) |
509 | 525 |
return(wk_write((wk *)web,connid,data,datalen)); |
510 | 526 |
return(0); |
... | ... |
@@ -52,6 +52,7 @@ int wk_service(wk *web); /* To be called after sselelect_wait() but before ssele |
52 | 52 |
|
53 | 53 |
int wk_serve_cookieadd(wk *web, int connid, char *cookiename, char *value, char *domain, int maxage, char *attributes); |
54 | 54 |
int wk_serve_etagset(wk *web, int connid, char *etag); |
55 |
+int wk_serve_generic_headers(wk *web, int connid, int datalen, const char *mime, int *etagnotmodified); |
|
55 | 56 |
int wk_serve_buffer_as_file(wk *web, int connid, void *data, int datalen, const char *mime); |
56 | 57 |
int wk_serve_file(wk *web, int connid, char *filename, const char *mime); |
57 | 58 |
int wk_serve_error(wk *web, int connid, wk_error wkerror); |