--- embedaddon/miniupnpd/upnphttp.h 2012/05/29 12:55:57 1.1.1.2 +++ embedaddon/miniupnpd/upnphttp.h 2013/07/22 00:32:35 1.1.1.3 @@ -1,20 +1,28 @@ -/* $Id: upnphttp.h,v 1.1.1.2 2012/05/29 12:55:57 misho Exp $ */ +/* $Id: upnphttp.h,v 1.1.1.3 2013/07/22 00:32:35 misho Exp $ */ /* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ - * (c) 2006-2011 Thomas Bernard + * (c) 2006-2012 Thomas Bernard * This software is subject to the conditions detailed * in the LICENCE file provided within the distribution */ -#ifndef __UPNPHTTP_H__ -#define __UPNPHTTP_H__ +#ifndef UPNPHTTP_H_INCLUDED +#define UPNPHTTP_H_INCLUDED #include #include #include "config.h" +#if 0 +/* according to "UPnP Device Architecture 1.0" */ +#define UPNP_VERSION_STRING "UPnP/1.0" +#else +/* according to "UPnP Device Architecture 1.1" */ +#define UPNP_VERSION_STRING "UPnP/1.1" +#endif + /* server: HTTP header returned in all HTTP responses : */ -#define MINIUPNPD_SERVER_STRING OS_VERSION " UPnP/1.0 MiniUPnPd/" MINIUPNPD_VERSION +#define MINIUPNPD_SERVER_STRING OS_VERSION " " UPNP_VERSION_STRING " MiniUPnPd/" MINIUPNPD_VERSION /* states : @@ -23,6 +31,14 @@ ... >= 100 - to be deleted */ +enum httpStates { + EWaitingForHttpRequest = 0, + EWaitingForHttpContent, + ESendingContinue, + ESendingAndClosing, + EToDelete = 100 +}; + enum httpCommands { EUnknown = 0, EGet, @@ -38,30 +54,35 @@ struct upnphttp { int ipv6; struct in6_addr clientaddr_v6; #endif - int state; + enum httpStates state; char HttpVer[16]; /* request */ char * req_buf; + char accept_language[8]; int req_buflen; int req_contentlen; int req_contentoff; /* header length */ enum httpCommands req_command; - const char * req_soapAction; + int req_soapActionOff; int req_soapActionLen; #ifdef ENABLE_EVENTS - const char * req_Callback; /* For SUBSCRIBE */ + int req_CallbackOff; /* For SUBSCRIBE */ int req_CallbackLen; int req_Timeout; - const char * req_SID; /* For UNSUBSCRIBE */ + int req_SIDOff; /* For UNSUBSCRIBE */ int req_SIDLen; + const char * res_SID; +#ifdef UPNP_STRICT + int req_NTOff; + int req_NTLen; #endif +#endif int respflags; /* see FLAG_* constants below */ /* response */ char * res_buf; int res_buflen; + int res_sent; int res_buf_alloclen; - /*int res_contentlen;*/ - /*int res_contentoff;*/ /* header length */ LIST_ENTRY(upnphttp) entries; }; @@ -70,9 +91,17 @@ struct upnphttp { /* Include the "SID:" header in response */ #define FLAG_SID 0x02 +/* If set, the POST request included a "Expect: 100-continue" header */ +#define FLAG_CONTINUE 0x40 + /* If set, the Content-Type is set to text/xml, otherwise it is text/xml */ #define FLAG_HTML 0x80 +/* If set, the corresponding Allow: header is set */ +#define FLAG_ALLOW_POST 0x100 +#define FLAG_ALLOW_SUB_UNSUB 0x200 + + /* New_upnphttp() */ struct upnphttp * New_upnphttp(int); @@ -97,7 +126,7 @@ BuildHeader_upnphttp(struct upnphttp * h, int respcode const char * respmsg, int bodylen); -/* BuildResp_upnphttp() +/* BuildResp_upnphttp() * fill the res_buf buffer with the complete * HTTP 200 OK response from the body passed as argument */ void @@ -110,9 +139,12 @@ BuildResp2_upnphttp(struct upnphttp * h, int respcode, const char * respmsg, const char * body, int bodylen); -/* SendResp_upnphttp() */ -void +int SendResp_upnphttp(struct upnphttp *); + +/* SendRespAndClose_upnphttp() */ +void +SendRespAndClose_upnphttp(struct upnphttp *); #endif