ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/kernel/realtek-wl/src/Users/mini_upnp/upnphttp.h b/package/kernel/realtek-wl/src/Users/mini_upnp/upnphttp.h
new file mode 100644
index 0000000..ba24aaa
--- /dev/null
+++ b/package/kernel/realtek-wl/src/Users/mini_upnp/upnphttp.h
@@ -0,0 +1,212 @@
+#ifndef __UPNPHTTP_H__

+#define __UPNPHTTP_H__

+#include <sys/queue.h>

+#include <sys/un.h>

+

+#include "mini_upnp_global.h"

+

+/** @name UPNP_E_SUCCESS [0]

+ *  {\tt UPNP_E_SUCCESS} signifies that the operation completed successfully.

+ *  For asynchronous functions, this only means that the packet generated by 

+ *  the operation was successfully transmitted on the network.  The result of 

+ *  the entire operation comes as part of the callback for that operation.

+ */

+//@{

+#define UPNP_E_SUCCESS          0

+//@}

+

+/** @name UPNP_E_INVALID_PARAM [-101]

+ *  {\tt UPNP_E_INVALID_PARAM} signifies that one or more of the parameters 

+ *  passed to the function is not valid.  Refer to the documentation for each 

+ *  function for more information on the valid ranges of the parameters.

+ */

+//@{

+#define UPNP_E_INVALID_PARAM    -101

+//@}

+

+/** @name UPNP_E_OUTOF_MEMORY [-104]

+ *  {\tt UPNP_E_OUTOF_MEMORY} signifies that not enough resources are 

+ *  currently available to complete the operation.  Most operations require 

+ *  some free memory in order to complete their work.

+ */

+//@{

+#define UPNP_E_OUTOF_MEMORY     -102

+//@}

+

+#define UPNP_E_TOOMANY_SUBSCRIBERS	-103

+

+/* event ID */

+#define UPNP_EVENT_SUBSCRIPTION_REQUEST 	1

+#define UPNP_EVENT_RENEWAL_COMPLETE		2

+#define UPNP_EVENT_UNSUBSCRIBE_COMPLETE	3

+

+typedef struct _IPCon {

+  char *ifname;

+} _IPCon;

+

+typedef struct _IPCon *IPCon;

+

+/*

+ States :

+  0 - Waiting for data to read

+  1 - Waiting for HTTP Post Content.

+ ...

+ >= 100 - to be deleted

+*/

+enum httpCommands {

+	EUnknown = 0,

+	EGet,

+	EPost

+};

+

+struct Upnp_Document_element {

+	char *VarName;

+	char *message;

+	LIST_ENTRY(Upnp_Document_element) entries;

+};

+

+typedef struct Upnp_Document_record {

+	unsigned int TotalMessageLen; // (total strlen(VarName) * 2) + total strlen(message)

+	unsigned short NumOfVarName;

+	LIST_HEAD(DocumentHead, Upnp_Document_element) doc_head;

+} Upnp_Document_CTX, *Upnp_Document;

+

+struct EvtRespElement {

+	int socket;

+	char sid[SID_LEN];

+	unsigned short TimeOut;

+	LIST_ENTRY(EvtRespElement) entries;

+};

+

+struct process_upnp_subscription {

+	char IP[IP_ADDRLEN];

+	int IP_inet_addr;

+	unsigned int port;

+	char sid[SID_LEN];

+	char callback_url[URL_MAX_LEN];

+	unsigned long TimeOut;

+};

+

+struct upnp_subscription_element {

+	char IP[IP_ADDRLEN];

+	int IP_inet_addr;

+	unsigned int port;

+	char sid[SID_LEN];

+	char callback_url[URL_MAX_LEN];

+	unsigned long seq;

+	unsigned long TimeOut;

+	unsigned int subscription_timeout;

+	int eventID;

+	int wscdReNewState;  //add for wscd report renew state;2009-09-10

+	LIST_ENTRY(upnp_subscription_element) entries;

+};

+

+struct upnp_subscription_record {

+	char my_IP[IP_ADDRLEN];

+	unsigned int my_port;

+	unsigned short total_subscription;

+	unsigned short max_subscription_num;

+	char event_url[URL_MAX_LEN];

+	unsigned short max_subscription_time;

+	unsigned short subscription_timeout;

+	void (*EventCallBack)(struct upnp_subscription_element *sub);

+	LIST_HEAD(subscriptionlisthead, upnp_subscription_element) subscription_head;

+	LIST_HEAD(EvtResplisthead, EvtRespElement) EvtResp_head;

+};

+

+struct upnphttp {

+	int socket;

+	/* Data structure added by Sean --begin-- */

+	char IP[IP_ADDRLEN];

+	struct _soapMethods *soapMethods;

+	struct _sendDesc *sendDesc;

+	struct upnp_subscription_record *subscribe_list;

+	/* Data structure added by Sean --end-- */

+	struct in_addr clientaddr;	/* client address */

+	int state;

+	char HttpVer[16];

+	/* request */

+	char * req_buf;

+	int req_buflen;

+	int req_contentlen;

+	int req_contentoff;     /* header length */

+	enum httpCommands req_command;

+	char * req_soapAction;

+	int req_soapActionLen;

+	/* response */

+	char * res_buf;

+	int res_buflen;

+	int res_buf_alloclen;

+	/*int res_contentlen;*/

+	/*int res_contentoff;*/		/* header length */

+	LIST_ENTRY(upnphttp) entries;

+};

+

+struct _soapMethods {

+	char * methodName;

+	void (*methodImpl)(struct upnphttp *h);

+};

+

+struct _sendDesc {

+	char * DescName;

+	char * (*sendDescImpl)(int *len);

+};

+

+struct upnphttp * New_upnphttp(int);

+

+void CloseSocket_upnphttp(struct upnphttp *);

+

+void Delete_upnphttp(struct upnphttp *);

+

+void Process_upnphttp(struct 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);

+/* BuildResp_upnphttp() 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);

+

+/* same but with given response code/message */

+void

+BuildResp2_upnphttp(struct upnphttp * h, int respcode,

+                    const char * respmsg,

+                    const char * body, int bodylen);

+

+void SendResp_upnphttp(struct upnphttp *);

+

+extern Upnp_Document CreatePropertySet(void);

+extern int UpnpAddToPropertySet(Upnp_Document PropSet,

+								const char *VarName, const char *message);

+extern void UpnpSendEventSingle(Upnp_Document PropSet,

+								struct upnp_subscription_record *subscribe_list,

+								struct upnp_subscription_element *sub);

+extern void UpnpSendEventAll(Upnp_Document PropSet,

+							struct upnp_subscription_record *sub);

+extern void UpnpDocument_free(Upnp_Document PropSet);

+extern void ProcessEventingResp(struct EvtRespElement *EvtResp);

+extern int OpenAndConfHTTPSocket(const char * addr, unsigned short port);

+extern IPCon IPCon_New(char *ifname);

+extern IPCon IPCon_Destroy(IPCon this);

+extern BOOLEAN IPCon_GetIpAddr(IPCon this, struct in_addr *adr);

+extern char *IPCon_GetIpAddrByStr(IPCon this);

+extern int ILibBase64Encode(unsigned char* input, const int inputlen, unsigned char** output);

+extern int ILibBase64Decode(unsigned char* input, const int inputlen, unsigned char** output);

+extern int ReliableSend(int socket, const char *data, const int len);

+

+// support HNAP1

+extern void SendError(struct upnphttp * h, const int code, const char *title, const char *realm, const char *body);

+extern int OpenAndConfUNIXSocket(const char *file_path);

+extern int CreateUnixSocket(const char *function_name,

+								const char *file_path,

+								const int time_out);

+extern int UnixSocketSendAndReceive(const char *function_name,

+								const char *file_path,

+								const int time_out,

+								const char *in, char *out, const int out_len);

+#endif

+

+