2012-05-31 13:29:18 +00:00
|
|
|
/* $Id: upnphttp.h,v 1.31 2012/05/28 11:00:44 nanard Exp $ */
|
2011-09-28 19:13:20 +00:00
|
|
|
/* MiniUPnP project
|
|
|
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
2012-04-06 17:28:05 +00:00
|
|
|
* (c) 2006-2012 Thomas Bernard
|
2011-09-28 19:13:20 +00:00
|
|
|
* This software is subject to the conditions detailed
|
|
|
|
* in the LICENCE file provided within the distribution */
|
|
|
|
|
|
|
|
#ifndef __UPNPHTTP_H__
|
|
|
|
#define __UPNPHTTP_H__
|
|
|
|
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <sys/queue.h>
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
2012-04-06 17:28:05 +00:00
|
|
|
#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
|
|
|
|
|
2011-09-28 19:13:20 +00:00
|
|
|
/* server: HTTP header returned in all HTTP responses : */
|
2012-04-06 17:28:05 +00:00
|
|
|
#define MINIUPNPD_SERVER_STRING OS_VERSION " " UPNP_VERSION_STRING " MiniUPnPd/" MINIUPNPD_VERSION
|
2011-09-28 19:13:20 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
states :
|
|
|
|
0 - waiting for data to read
|
|
|
|
1 - waiting for HTTP Post Content.
|
|
|
|
...
|
|
|
|
>= 100 - to be deleted
|
|
|
|
*/
|
2012-02-07 00:26:15 +00:00
|
|
|
enum httpStates {
|
|
|
|
EWaitingForHttpRequest = 0,
|
|
|
|
EWaitingForHttpContent,
|
|
|
|
ESendingAndClosing,
|
|
|
|
EToDelete = 100
|
|
|
|
};
|
|
|
|
|
2011-09-28 19:13:20 +00:00
|
|
|
enum httpCommands {
|
|
|
|
EUnknown = 0,
|
|
|
|
EGet,
|
|
|
|
EPost,
|
|
|
|
ESubscribe,
|
|
|
|
EUnSubscribe
|
|
|
|
};
|
|
|
|
|
|
|
|
struct upnphttp {
|
|
|
|
int socket;
|
|
|
|
struct in_addr clientaddr; /* client address */
|
|
|
|
#ifdef ENABLE_IPV6
|
|
|
|
int ipv6;
|
|
|
|
struct in6_addr clientaddr_v6;
|
|
|
|
#endif
|
2012-02-07 00:26:15 +00:00
|
|
|
enum httpStates state;
|
2011-09-28 19:13:20 +00:00
|
|
|
char HttpVer[16];
|
|
|
|
/* request */
|
|
|
|
char * req_buf;
|
|
|
|
int req_buflen;
|
|
|
|
int req_contentlen;
|
|
|
|
int req_contentoff; /* header length */
|
|
|
|
enum httpCommands req_command;
|
2012-04-25 22:30:32 +00:00
|
|
|
int req_soapActionOff;
|
2011-09-28 19:13:20 +00:00
|
|
|
int req_soapActionLen;
|
|
|
|
#ifdef ENABLE_EVENTS
|
2012-04-25 22:30:32 +00:00
|
|
|
int req_CallbackOff; /* For SUBSCRIBE */
|
2011-09-28 19:13:20 +00:00
|
|
|
int req_CallbackLen;
|
|
|
|
int req_Timeout;
|
2012-04-25 22:30:32 +00:00
|
|
|
int req_SIDOff; /* For UNSUBSCRIBE */
|
2011-09-28 19:13:20 +00:00
|
|
|
int req_SIDLen;
|
2012-04-25 22:30:32 +00:00
|
|
|
const char * res_SID;
|
2011-09-28 19:13:20 +00:00
|
|
|
#endif
|
|
|
|
int respflags; /* see FLAG_* constants below */
|
|
|
|
/* response */
|
|
|
|
char * res_buf;
|
|
|
|
int res_buflen;
|
2012-02-07 00:26:15 +00:00
|
|
|
int res_sent;
|
2011-09-28 19:13:20 +00:00
|
|
|
int res_buf_alloclen;
|
|
|
|
LIST_ENTRY(upnphttp) entries;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Include the "Timeout:" header in response */
|
|
|
|
#define FLAG_TIMEOUT 0x01
|
|
|
|
/* Include the "SID:" header in response */
|
|
|
|
#define FLAG_SID 0x02
|
|
|
|
|
|
|
|
/* If set, the Content-Type is set to text/xml, otherwise it is text/xml */
|
|
|
|
#define FLAG_HTML 0x80
|
|
|
|
|
2012-05-31 13:29:18 +00:00
|
|
|
/* If set, the corresponding Allow: header is set */
|
|
|
|
#define FLAG_ALLOW_POST 0x100
|
|
|
|
#define FLAG_ALLOW_SUB_UNSUB 0x200
|
|
|
|
|
2011-09-28 19:13:20 +00:00
|
|
|
/* New_upnphttp() */
|
|
|
|
struct upnphttp *
|
|
|
|
New_upnphttp(int);
|
|
|
|
|
|
|
|
/* CloseSocket_upnphttp() */
|
|
|
|
void
|
|
|
|
CloseSocket_upnphttp(struct upnphttp *);
|
|
|
|
|
|
|
|
/* Delete_upnphttp() */
|
|
|
|
void
|
|
|
|
Delete_upnphttp(struct upnphttp *);
|
|
|
|
|
|
|
|
/* Process_upnphttp() */
|
|
|
|
void
|
|
|
|
Process_upnphttp(struct upnphttp *);
|
|
|
|
|
|
|
|
/* BuildHeader_upnphttp()
|
|
|
|
* build the header for the HTTP Response
|
|
|
|
* also allocate the buffer for body data */
|
|
|
|
void
|
|
|
|
BuildHeader_upnphttp(struct upnphttp * h, int respcode,
|
|
|
|
const char * respmsg,
|
|
|
|
int bodylen);
|
|
|
|
|
2012-03-01 01:44:38 +00:00
|
|
|
/* BuildResp_upnphttp()
|
2011-09-28 19:13:20 +00:00
|
|
|
* fill the res_buf buffer with the complete
|
|
|
|
* HTTP 200 OK response from the body passed as argument */
|
|
|
|
void
|
|
|
|
BuildResp_upnphttp(struct upnphttp *, const char *, int);
|
|
|
|
|
|
|
|
/* BuildResp2_upnphttp()
|
|
|
|
* same but with given response code/message */
|
|
|
|
void
|
|
|
|
BuildResp2_upnphttp(struct upnphttp * h, int respcode,
|
|
|
|
const char * respmsg,
|
|
|
|
const char * body, int bodylen);
|
|
|
|
|
2011-11-18 11:23:16 +00:00
|
|
|
/* SendRespAndClose_upnphttp() */
|
2011-09-28 19:13:20 +00:00
|
|
|
void
|
2011-11-18 11:23:16 +00:00
|
|
|
SendRespAndClose_upnphttp(struct upnphttp *);
|
2011-09-28 19:13:20 +00:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|