Backport of most of upnp.h with documentation.
git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@475 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
parent
7963e97469
commit
ceca478180
@ -21,7 +21,8 @@ upnpincludedir = $(includedir)/upnp
|
|||||||
upnpinclude_HEADERS = \
|
upnpinclude_HEADERS = \
|
||||||
inc/upnp.h \
|
inc/upnp.h \
|
||||||
inc/upnpdebug.h \
|
inc/upnpdebug.h \
|
||||||
inc/UpnpGlobal.h
|
inc/UpnpGlobal.h \
|
||||||
|
inc/UpnpInet.h
|
||||||
|
|
||||||
nodist_upnpinclude_HEADERS = inc/upnpconfig.h
|
nodist_upnpinclude_HEADERS = inc/upnpconfig.h
|
||||||
if ENABLE_TOOLS
|
if ENABLE_TOOLS
|
||||||
@ -47,7 +48,6 @@ libupnp_la_SOURCES = \
|
|||||||
src/inc/gena_device.h \
|
src/inc/gena_device.h \
|
||||||
src/inc/global.h \
|
src/inc/global.h \
|
||||||
src/inc/gmtdate.h \
|
src/inc/gmtdate.h \
|
||||||
src/inc/http_client.h \
|
|
||||||
src/inc/httpparser.h \
|
src/inc/httpparser.h \
|
||||||
src/inc/httpreadwrite.h \
|
src/inc/httpreadwrite.h \
|
||||||
src/inc/md5.h \
|
src/inc/md5.h \
|
||||||
@ -111,7 +111,9 @@ libupnp_la_SOURCES += \
|
|||||||
src/gena/gena_callback2.c
|
src/gena/gena_callback2.c
|
||||||
|
|
||||||
# api
|
# api
|
||||||
libupnp_la_SOURCES += src/api/upnpapi.c
|
libupnp_la_SOURCES += \
|
||||||
|
src/api/upnpapi.c
|
||||||
|
|
||||||
if ENABLE_TOOLS
|
if ENABLE_TOOLS
|
||||||
libupnp_la_SOURCES += src/api/upnptools.c
|
libupnp_la_SOURCES += src/api/upnptools.c
|
||||||
endif
|
endif
|
||||||
|
23
upnp/inc/UpnpInet.h
Normal file
23
upnp/inc/UpnpInet.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#ifndef UPNPINET_H
|
||||||
|
#define UPNPINET_H
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief Provides a platform independent way to include TCP/IP types and functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <Ws2tcpip.h>
|
||||||
|
#else
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* UPNPINET_H */
|
||||||
|
|
3703
upnp/inc/upnp.h
3703
upnp/inc/upnp.h
File diff suppressed because it is too large
Load Diff
@ -1736,25 +1736,7 @@ UpnpSubscribe( IN UpnpClient_Handle Hnd,
|
|||||||
|
|
||||||
#ifdef INCLUDE_CLIENT_APIS
|
#ifdef INCLUDE_CLIENT_APIS
|
||||||
|
|
||||||
/**************************************************************************
|
int UpnpUnSubscribe(UpnpClient_Handle Hnd, const Upnp_SID SubsId)
|
||||||
* Function: UpnpUnSubscribe
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IN UpnpClient_Handle Hnd: The handle of the control point.
|
|
||||||
* IN Upnp_SID SubsId: The ID returned when the control point
|
|
||||||
* subscribed to the service.
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This function removes the subscription of a control point from a
|
|
||||||
* service previously subscribed to using UpnpSubscribe or
|
|
||||||
* UpnpSubscribeAsync. This is a synchronous call.
|
|
||||||
*
|
|
||||||
* Return Values: int
|
|
||||||
* UPNP_E_SUCCESS if successful else sends appropriate error.
|
|
||||||
***************************************************************************/
|
|
||||||
int
|
|
||||||
UpnpUnSubscribe( IN UpnpClient_Handle Hnd,
|
|
||||||
IN Upnp_SID SubsId )
|
|
||||||
{
|
{
|
||||||
struct Handle_Info *SInfo = NULL;
|
struct Handle_Info *SInfo = NULL;
|
||||||
int RetVal;
|
int RetVal;
|
||||||
@ -1861,33 +1843,12 @@ UpnpUnSubscribeAsync( IN UpnpClient_Handle Hnd,
|
|||||||
|
|
||||||
return UPNP_E_SUCCESS;
|
return UPNP_E_SUCCESS;
|
||||||
|
|
||||||
} /****************** End of UpnpUnSubscribeAsync *********************/
|
}
|
||||||
#endif // INCLUDE_CLIENT_APIS
|
#endif // INCLUDE_CLIENT_APIS
|
||||||
|
|
||||||
#ifdef INCLUDE_CLIENT_APIS
|
#ifdef INCLUDE_CLIENT_APIS
|
||||||
|
|
||||||
/**************************************************************************
|
int UpnpRenewSubscription(UpnpClient_Handle Hnd, int *TimeOut, const Upnp_SID SubsId)
|
||||||
* Function: UpnpRenewSubscription
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* IN UpnpClient_Handle Hnd: The handle of the control point that
|
|
||||||
* is renewing the subscription.
|
|
||||||
* INOUT int *TimeOut: Pointer to a variable containing the
|
|
||||||
* requested subscription time. Upon return,
|
|
||||||
* it contains the actual renewal time.
|
|
||||||
* IN Upnp_SID SubsId: The ID for the subscription to renew.
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This function renews a subscription that is about to
|
|
||||||
* expire. This function is synchronous.
|
|
||||||
*
|
|
||||||
* Return Values: int
|
|
||||||
* UPNP_E_SUCCESS if successful else sends appropriate error.
|
|
||||||
***************************************************************************/
|
|
||||||
int
|
|
||||||
UpnpRenewSubscription( IN UpnpClient_Handle Hnd,
|
|
||||||
INOUT int *TimeOut,
|
|
||||||
IN Upnp_SID SubsId )
|
|
||||||
{
|
{
|
||||||
struct Handle_Info *SInfo = NULL;
|
struct Handle_Info *SInfo = NULL;
|
||||||
int RetVal;
|
int RetVal;
|
||||||
@ -2158,40 +2119,14 @@ UpnpNotifyExt( IN UpnpDevice_Handle Hnd,
|
|||||||
|
|
||||||
#ifdef INCLUDE_DEVICE_APIS
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
|
|
||||||
/**************************************************************************
|
int UpnpAcceptSubscription(
|
||||||
* Function: UpnpAcceptSubscription
|
UpnpDevice_Handle Hnd,
|
||||||
*
|
const char *DevID_const,
|
||||||
* Parameters:
|
const char *ServName_const,
|
||||||
* IN UpnpDevice_Handle Hnd: The handle of the device.
|
const char **VarName_const,
|
||||||
* IN const char *DevID: The device ID of the subdevice of the
|
const char **NewVal_const,
|
||||||
* service generating the event.
|
int cVariables,
|
||||||
* IN const char *ServID: The unique service identifier of the
|
const Upnp_SID SubsId)
|
||||||
* service generating the event.
|
|
||||||
* IN const char **VarName: Pointer to an array of event variables.
|
|
||||||
* IN const char **NewVal: Pointer to an array of values for
|
|
||||||
* the event variables.
|
|
||||||
* IN int cVariables: The number of event variables in VarName.
|
|
||||||
* IN Upnp_SID SubsId: The subscription ID of the newly
|
|
||||||
* registered control point.
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This function accepts a subscription request and sends
|
|
||||||
* out the current state of the eventable variables for a service.
|
|
||||||
* The device application should call this function when it receives a
|
|
||||||
* UPNP_EVENT_SUBSCRIPTION_REQUEST callback. This function is sychronous
|
|
||||||
* and generates no callbacks.
|
|
||||||
*
|
|
||||||
* Return Values: int
|
|
||||||
* UPNP_E_SUCCESS if successful else sends appropriate error.
|
|
||||||
***************************************************************************/
|
|
||||||
int
|
|
||||||
UpnpAcceptSubscription( IN UpnpDevice_Handle Hnd,
|
|
||||||
IN const char *DevID_const,
|
|
||||||
IN const char *ServName_const,
|
|
||||||
IN const char **VarName_const,
|
|
||||||
IN const char **NewVal_const,
|
|
||||||
int cVariables,
|
|
||||||
IN Upnp_SID SubsId )
|
|
||||||
{
|
{
|
||||||
struct Handle_Info *SInfo = NULL;
|
struct Handle_Info *SInfo = NULL;
|
||||||
int retVal;
|
int retVal;
|
||||||
|
@ -1,52 +1,65 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/*******************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* \file
|
||||||
|
*
|
||||||
|
* \brief Contains functions for scanner and parser for http messages.
|
||||||
|
*/
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Purpose: This file contains functions for scanner and parser for http
|
|
||||||
* messages.
|
|
||||||
************************************************************************/
|
|
||||||
|
|
||||||
#define _GNU_SOURCE // For strcasestr() in string.h
|
#define _GNU_SOURCE // For strcasestr() in string.h
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <assert.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "strintmap.h"
|
#include "strintmap.h"
|
||||||
#include "httpparser.h"
|
#include "httpparser.h"
|
||||||
#include "statcodes.h"
|
#include "statcodes.h"
|
||||||
#include "unixutil.h"
|
#include "unixutil.h"
|
||||||
|
#include "upnpdebug.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* entity positions */
|
||||||
|
|
||||||
// entity positions
|
|
||||||
|
|
||||||
#define NUM_HTTP_METHODS 9
|
#define NUM_HTTP_METHODS 9
|
||||||
static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = {
|
static str_int_entry Http_Method_Table[NUM_HTTP_METHODS] = {
|
||||||
@ -122,8 +135,8 @@ str_int_entry Http_Header_Names[NUM_HTTP_HEADER_NAMES] = {
|
|||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
static UPNP_INLINE void
|
static UPNP_INLINE void
|
||||||
scanner_init( OUT scanner_t * scanner,
|
scanner_init( OUT scanner_t *scanner,
|
||||||
IN membuffer * bufptr )
|
IN membuffer *bufptr )
|
||||||
{
|
{
|
||||||
scanner->cursor = 0;
|
scanner->cursor = 0;
|
||||||
scanner->msg = bufptr;
|
scanner->msg = bufptr;
|
||||||
@ -395,12 +408,12 @@ scanner_get_str( IN scanner_t * scanner )
|
|||||||
*
|
*
|
||||||
* Note :
|
* Note :
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
#ifndef WIN32
|
#ifdef WIN32
|
||||||
#warning The only use of the function 'scanner_pushback()' in the code is commented out.
|
#pragma message ("The only use of the function 'scanner_pushback()' in the code is commented out.")
|
||||||
#warning 'scanner_pushback()' is a candidate for removal.
|
#pragma message ("'scanner_pushback()' is a candidate for removal.")
|
||||||
#else
|
#else
|
||||||
#pragma message ("The only use of the function 'scanner_pushback()' in the code is commented out.")
|
#warning The only use of the function 'scanner_pushback()' in the code is commented out.
|
||||||
#pragma message ("'scanner_pushback()' is a candidate for removal.")
|
#warning 'scanner_pushback()' is a candidate for removal.
|
||||||
#endif
|
#endif
|
||||||
static UPNP_INLINE void
|
static UPNP_INLINE void
|
||||||
scanner_pushback( INOUT scanner_t * scanner,
|
scanner_pushback( INOUT scanner_t * scanner,
|
||||||
@ -970,12 +983,12 @@ read_until_crlf( INOUT scanner_t * scanner,
|
|||||||
* PARSE_FAILURE
|
* PARSE_FAILURE
|
||||||
* PARSE_INCOMPLETE
|
* PARSE_INCOMPLETE
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
#ifndef WIN32
|
#ifdef WIN32
|
||||||
#warning There are currently no uses of the function 'skip_to_end_of_header()' in the code.
|
#pragma message("There are currently no uses of the function 'skip_to_end_of_header()' in the code.")
|
||||||
#warning 'skip_to_end_of_header()' is a candidate for removal.
|
#pragma message("'skip_to_end_of_header()' is a candidate for removal.")
|
||||||
#else
|
#else
|
||||||
#pragma message("There are currently no uses of the function 'skip_to_end_of_header()' in the code.")
|
#warning There are currently no uses of the function 'skip_to_end_of_header()' in the code.
|
||||||
#pragma message("'skip_to_end_of_header()' is a candidate for removal.")
|
#warning 'skip_to_end_of_header()' is a candidate for removal.
|
||||||
#endif
|
#endif
|
||||||
static UPNP_INLINE int
|
static UPNP_INLINE int
|
||||||
skip_to_end_of_header( INOUT scanner_t * scanner )
|
skip_to_end_of_header( INOUT scanner_t * scanner )
|
||||||
@ -2496,26 +2509,15 @@ method_to_str( IN http_method_t method )
|
|||||||
return index == -1 ? NULL : Http_Method_Table[index].name;
|
return index == -1 ? NULL : Http_Method_Table[index].name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function: print_http_headers
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* http_message_t* hmsg ; HTTP Message object
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* void
|
|
||||||
************************************************************************/
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void
|
void print_http_headers(http_message_t *hmsg)
|
||||||
print_http_headers( http_message_t * hmsg )
|
|
||||||
{
|
{
|
||||||
ListNode *node;
|
ListNode *node;
|
||||||
// NNS: dlist_node *node;
|
/* NNS: dlist_node *node; */
|
||||||
http_header_t *header;
|
http_header_t *header;
|
||||||
|
|
||||||
// print start line
|
/* print start line */
|
||||||
if( hmsg->is_request ) {
|
if( hmsg->is_request ) {
|
||||||
printf( "method = %d, version = %d.%d, url = %.*s\n",
|
printf( "method = %d, version = %d.%d, url = %.*s\n",
|
||||||
hmsg->method, hmsg->major_version, hmsg->minor_version,
|
hmsg->method, hmsg->major_version, hmsg->minor_version,
|
||||||
@ -2526,18 +2528,18 @@ print_http_headers( http_message_t * hmsg )
|
|||||||
(int)hmsg->status_msg.length, hmsg->status_msg.buf);
|
(int)hmsg->status_msg.length, hmsg->status_msg.buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// print headers
|
/* print headers */
|
||||||
node = ListHead( &hmsg->headers );
|
node = ListHead( &hmsg->headers );
|
||||||
// NNS: node = dlist_first_node( &hmsg->headers );
|
/* NNS: node = dlist_first_node( &hmsg->headers ); */
|
||||||
while( node != NULL ) {
|
while( node != NULL ) {
|
||||||
header = ( http_header_t * ) node->item;
|
header = ( http_header_t * ) node->item;
|
||||||
// NNS: header = (http_header_t *)node->data;
|
/* NNS: header = (http_header_t *)node->data; */
|
||||||
printf( "hdr name: %.*s, value: %.*s\n",
|
printf( "hdr name: %.*s, value: %.*s\n",
|
||||||
(int)header->name.length, header->name.buf,
|
(int)header->name.length, header->name.buf,
|
||||||
(int)header->value.length, header->value.buf );
|
(int)header->value.length, header->value.buf );
|
||||||
|
|
||||||
node = ListNext( &hmsg->headers, node );
|
node = ListNext( &hmsg->headers, node );
|
||||||
// NNS: node = dlist_next( &hmsg->headers, node );
|
/* NNS: node = dlist_next( &hmsg->headers, node ); */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,314 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
|
||||||
// and/or other materials provided with the distribution.
|
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
|
||||||
// may be used to endorse or promote products derived from this software
|
|
||||||
// without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef _http_client_h_
|
|
||||||
#define _http_client_h_
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define EXTERN_C extern "C"
|
|
||||||
#else
|
|
||||||
#define EXTERN_C
|
|
||||||
#endif
|
|
||||||
#include "genlib/closesocket/upnpclosesocket.h"
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
//#include <malloc.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include "tools/config.h"
|
|
||||||
#include "upnp.h"
|
|
||||||
//#include "upnp_debug.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define HTTP_DATE_LENGTH 37 // length for HTTP DATE:
|
|
||||||
//"DATE: Sun, 01 Jul 2000 08:15:23 GMT<cr><lf>"
|
|
||||||
#define SEPARATORS "()<>@,;:\\\"/[]?={} \t"
|
|
||||||
#define MARK "-_.!~*'()"
|
|
||||||
#define RESERVED ";/?:@&=+$,"
|
|
||||||
#define HTTP_SUCCESS 1
|
|
||||||
#define HTTP_E_BAD_URL UPNP_E_INVALID_URL
|
|
||||||
#define HTTP_E_READ_SOCKET UPNP_E_SOCKET_READ
|
|
||||||
#define HTTP_E_BIND_SOCKET UPNP_E_SOCKET_BIND
|
|
||||||
#define HTTP_E_WRITE_SOCKET UPNP_E_SOCKET_WRITE
|
|
||||||
#define HTTP_E_CONNECT_SOCKET UPNP_E_SOCKET_CONNECT
|
|
||||||
#define HTTP_E_SOCKET UPNP_E_OUTOF_SOCKET
|
|
||||||
#define HTTP_E_BAD_RESPONSE UPNP_E_BAD_RESPONSE
|
|
||||||
#define HTTP_E_BAD_REQUEST UPNP_E_BAD_REQUEST
|
|
||||||
#define HTTP_E_BAD_IP_ADDRESS UPNP_E_INVALID_URL
|
|
||||||
#define FALSE 0
|
|
||||||
#define TAB 9
|
|
||||||
#define CR 13
|
|
||||||
#define LF 10
|
|
||||||
#define RESPONSE_TIMEOUT 30
|
|
||||||
#define SOCKET_BUFFER_SIZE 5000
|
|
||||||
|
|
||||||
enum hostType { HOSTNAME, IPv4address };
|
|
||||||
enum pathType { ABS_PATH, REL_PATH, OPAQUE_PART };
|
|
||||||
enum uriType { ABSOLUTE, RELATIVE };
|
|
||||||
|
|
||||||
//Buffer used to store data read from
|
|
||||||
//a socket during an http transfer
|
|
||||||
//in function read_bytes.
|
|
||||||
typedef struct SOCKET_BUFFER{
|
|
||||||
char buff[SOCKET_BUFFER_SIZE];
|
|
||||||
int size;
|
|
||||||
struct SOCKET_BUFFER *next;
|
|
||||||
} socket_buffer;
|
|
||||||
|
|
||||||
//Buffer used in parsing
|
|
||||||
//http messages, urls, etc.
|
|
||||||
//generally this simply
|
|
||||||
//holds a pointer into a larger array
|
|
||||||
typedef struct TOKEN {
|
|
||||||
char * buff;
|
|
||||||
size_t size;
|
|
||||||
} token;
|
|
||||||
|
|
||||||
|
|
||||||
//Represents a host port:
|
|
||||||
//e.g. :"127.127.0.1:80"
|
|
||||||
//text is a token pointing to
|
|
||||||
//the full string representation
|
|
||||||
typedef struct HOSTPORT {
|
|
||||||
token text; //full host port
|
|
||||||
struct sockaddr_in IPv4address; //Network Byte Order
|
|
||||||
} hostport_type;
|
|
||||||
|
|
||||||
//Represents a URI
|
|
||||||
//used in parse_uri and elsewhere
|
|
||||||
typedef struct URI{
|
|
||||||
enum uriType type;
|
|
||||||
token scheme;
|
|
||||||
enum pathType path_type;
|
|
||||||
token pathquery;
|
|
||||||
token fragment;
|
|
||||||
hostport_type hostport;
|
|
||||||
} uri_type;
|
|
||||||
|
|
||||||
//Represents a list of URLs as in
|
|
||||||
//the "callback" header of SUBSCRIBE
|
|
||||||
//message in GENA
|
|
||||||
//char * URLs holds dynamic memory
|
|
||||||
typedef struct URL_LIST {
|
|
||||||
int size;
|
|
||||||
char * URLs; //all the urls, delimited by <>
|
|
||||||
uri_type *parsedURLs;
|
|
||||||
} URL_list;
|
|
||||||
|
|
||||||
typedef struct HTTP_HEADER {
|
|
||||||
token header;
|
|
||||||
token value;
|
|
||||||
struct HTTP_HEADER * next;
|
|
||||||
} http_header;
|
|
||||||
|
|
||||||
typedef struct HTTP_STATUS_LINE{
|
|
||||||
token http_version;
|
|
||||||
token status_code;
|
|
||||||
token reason_phrase;
|
|
||||||
} http_status;
|
|
||||||
|
|
||||||
typedef struct HTTP_REQUEST_LINE {
|
|
||||||
token http_version;
|
|
||||||
uri_type request_uri;
|
|
||||||
token method;
|
|
||||||
} http_request;
|
|
||||||
|
|
||||||
//Represents a parsed HTTP_MESSAGE
|
|
||||||
//head_list is dynamically allocated
|
|
||||||
typedef struct HTTP_MESSAGE {
|
|
||||||
http_status status;
|
|
||||||
http_request request;
|
|
||||||
http_header * header_list;
|
|
||||||
token content;
|
|
||||||
} http_message;
|
|
||||||
|
|
||||||
|
|
||||||
EXTERN_C int transferHTTP( char * request, char * toSend,
|
|
||||||
int toSendSize, char **out, char * Url);
|
|
||||||
|
|
||||||
|
|
||||||
EXTERN_C int transferHTTPRaw( char * toSend, int toSendSize,
|
|
||||||
char **out, char *URL);
|
|
||||||
|
|
||||||
//helper function
|
|
||||||
EXTERN_C int transferHTTPparsedURL( char * request,
|
|
||||||
char * toSend, int toSendSize,
|
|
||||||
char **out, uri_type *URL);
|
|
||||||
|
|
||||||
//assumes that char * out has enough space ( 38 characters)
|
|
||||||
//outputs the current time in the following null terminated string:
|
|
||||||
// "DATE: Sun, Jul 06 2000 08:53:01 GMT\r\n"
|
|
||||||
EXTERN_C void currentTmToHttpDate(char *out);
|
|
||||||
|
|
||||||
//returns dynamic memory or NULL on error
|
|
||||||
EXTERN_C char * resolve_rel_url( char * base_url, char * rel_url);
|
|
||||||
|
|
||||||
EXTERN_C int parse_uri( char * in, int max, uri_type * out);
|
|
||||||
|
|
||||||
EXTERN_C int token_cmp( token *in1, token *in2);
|
|
||||||
|
|
||||||
EXTERN_C int token_string_casecmp( token * in1, char * in2);
|
|
||||||
|
|
||||||
EXTERN_C int token_string_cmp( token * in1, char * in2);
|
|
||||||
|
|
||||||
EXTERN_C int parse_http_response( char * in, http_message * out,
|
|
||||||
int max_len);
|
|
||||||
|
|
||||||
EXTERN_C int parse_http_request( char * in, http_message *out,
|
|
||||||
int max_len);
|
|
||||||
|
|
||||||
EXTERN_C int search_for_header( http_message * in,
|
|
||||||
char * header, token *out_value);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EXTERN_C int parse_hostport( char* in, int max, hostport_type *out );
|
|
||||||
|
|
||||||
EXTERN_C size_t write_bytes(int fd, char * bytes, size_t n,
|
|
||||||
int timeout);
|
|
||||||
EXTERN_C void free_http_message(http_message * message);
|
|
||||||
EXTERN_C int copy_URL_list( URL_list *in, URL_list *out);
|
|
||||||
EXTERN_C void free_URL_list(URL_list * list);
|
|
||||||
EXTERN_C int parse_port(int max, char * port, unsigned short int * out);
|
|
||||||
|
|
||||||
EXTERN_C int parse_http_line( char * in, int max_size);
|
|
||||||
EXTERN_C int parse_not_LWS( char *in, token *out, int max_size);
|
|
||||||
EXTERN_C int parse_LWS( char * in, int max_size);
|
|
||||||
EXTERN_C int parse_token( char * in, token * out, int max_size);
|
|
||||||
EXTERN_C ssize_t readLine(int fd, char *out, int max, int *timeout);
|
|
||||||
EXTERN_C int remove_dots(char * in, int size);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_http_request(
|
|
||||||
http_message *message,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_http_request(
|
|
||||||
http_message *message,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_http_response(
|
|
||||||
http_message *message,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_http_response(
|
|
||||||
http_message *message,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_token(
|
|
||||||
token *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_token(
|
|
||||||
token *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_status_line(
|
|
||||||
http_status *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_status_line(
|
|
||||||
http_status *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_request_line(
|
|
||||||
http_request *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_request_line(
|
|
||||||
http_request *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
EXTERN_C void print_uri(
|
|
||||||
uri_type *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo);
|
|
||||||
#else
|
|
||||||
static inline void print_uri(
|
|
||||||
uri_type *in,
|
|
||||||
Upnp_LogLevel DLevel,
|
|
||||||
Dbg_Module Module,
|
|
||||||
char *DbgFileName,
|
|
||||||
int DbgLineNo) {}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -48,6 +48,7 @@ extern "C" {
|
|||||||
#include "uri.h"
|
#include "uri.h"
|
||||||
#include "ixml.h"
|
#include "ixml.h"
|
||||||
#include "upnp.h"
|
#include "upnp.h"
|
||||||
|
#include "upnpdebug.h"
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -131,139 +132,100 @@ subscription *GetSubscriptionSID(
|
|||||||
service_info *service);
|
service_info *service);
|
||||||
|
|
||||||
|
|
||||||
//returns a pointer to the subscription with the SID, NULL if not found
|
/*!
|
||||||
|
* \brief Gets pointer to the first subscription node in the service table.
|
||||||
|
*
|
||||||
|
* \return Pointer to the first subscription node.
|
||||||
|
*/
|
||||||
|
subscription *GetFirstSubscription(
|
||||||
|
/*! [in] Service object providing the list of subscriptions. */
|
||||||
|
service_info *service);
|
||||||
|
|
||||||
subscription * CheckSubscriptionSID(Upnp_SID sid,service_info * service);
|
|
||||||
|
|
||||||
//returns a pointer to the first subscription
|
/*!
|
||||||
subscription * GetFirstSubscription(service_info *service);
|
* \brief Get current and valid subscription from the service table.
|
||||||
|
*
|
||||||
|
* \return Pointer to the next subscription node.
|
||||||
|
*/
|
||||||
|
subscription *GetNextSubscription(
|
||||||
|
/*! [in] Service object providing the list of subscriptions. */
|
||||||
|
service_info *service,
|
||||||
|
/*! [in] Current subscription object. */
|
||||||
|
subscription *current);
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : GetNextSubscription
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* service_info * service ; service object providing the list of
|
|
||||||
* subscriptions
|
|
||||||
* subscription *current ; current subscription object
|
|
||||||
*
|
|
||||||
* Description : Get current and valid subscription from the service
|
|
||||||
* table.
|
|
||||||
*
|
|
||||||
* Return : subscription * - Pointer to the next subscription node;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
subscription * GetNextSubscription(service_info * service, subscription *current);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : freeSubscription
|
* \brief Free's the memory allocated for storing the URL of the subscription.
|
||||||
*
|
*/
|
||||||
* Parameters :
|
void freeSubscription(
|
||||||
* subscription * sub ; subscription to be freed
|
/*! [in] Subscription object to be freed. */
|
||||||
*
|
subscription *sub);
|
||||||
* Description : Free's the memory allocated for storing the URL of
|
|
||||||
* the subscription.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeSubscription(subscription * sub);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : freeSubscriptionList
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* subscription * head ; head of the subscription list
|
|
||||||
*
|
|
||||||
* Description : Free's memory allocated for all the subscriptions
|
|
||||||
* in the service table.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeSubscriptionList(subscription * head);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : FindServiceId
|
* \brief Free's memory allocated for all the subscriptions in the service table.
|
||||||
*
|
*/
|
||||||
* Parameters :
|
void freeSubscriptionList(
|
||||||
* service_table *table ; service table
|
/*! [in] Head of the subscription list. */
|
||||||
* const char * serviceId ;string representing the service id
|
subscription * head);
|
||||||
* to be found among those in the table
|
|
||||||
* const char * UDN ; string representing the UDN
|
|
||||||
* to be found among those in the table
|
|
||||||
*
|
|
||||||
* Description : Traverses through the service table and returns a
|
|
||||||
* pointer to the service node that matches a known service id
|
|
||||||
* and a known UDN
|
|
||||||
*
|
|
||||||
* Return : service_info * - pointer to the matching service_info node;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
service_info *FindServiceId( service_table * table,
|
|
||||||
const char * serviceId, const char * UDN);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : FindServiceEventURLPath
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* service_table *table ; service table
|
|
||||||
* char * eventURLPath ; event URL path used to find a service
|
|
||||||
* from the table
|
|
||||||
*
|
|
||||||
* Description : Traverses the service table and finds the node whose
|
|
||||||
* event URL Path matches a know value
|
|
||||||
*
|
|
||||||
* Return : service_info * - pointer to the service list node from the
|
|
||||||
* service table whose event URL matches a known event URL;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
service_info * FindServiceEventURLPath( service_table *table,
|
|
||||||
char * eventURLPath
|
|
||||||
);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : FindServiceControlURLPath
|
* \brief Traverses through the service table and returns a pointer to the
|
||||||
*
|
* service node that matches a known service id and a known UDN.
|
||||||
* Parameters :
|
*
|
||||||
* service_table * table ; service table
|
* \return Pointer to the matching service_info node.
|
||||||
* char * controlURLPath ; control URL path used to find a service
|
*/
|
||||||
* from the table
|
service_info *FindServiceId(
|
||||||
*
|
/*! [in] Service table. */
|
||||||
* Description : Traverses the service table and finds the node whose
|
service_table *table,
|
||||||
* control URL Path matches a know value
|
/*! [in] String representing the service id to be found among those
|
||||||
*
|
* in the table. */
|
||||||
* Return : service_info * - pointer to the service list node from the
|
const char *serviceId,
|
||||||
* service table whose control URL Path matches a known value;
|
/*! [in] String representing the UDN to be found among those in the
|
||||||
*
|
* table. */
|
||||||
* Note :
|
const char *UDN);
|
||||||
************************************************************************/
|
|
||||||
service_info * FindServiceControlURLPath( service_table *table,
|
|
||||||
const char * controlURLPath);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : printService
|
/*!
|
||||||
*
|
* \brief Traverses the service table and finds the node whose event URL Path
|
||||||
* Parameters :
|
* matches a know value.
|
||||||
* service_info *service ;Service whose information is to be printed
|
*
|
||||||
* Upnp_LogLevel level ; Debug level specified to the print function
|
* \return Pointer to the service list node from the service table whose event
|
||||||
* Dbg_Module module ; Debug module specified to the print function
|
* URL matches a known event URL.
|
||||||
*
|
*/
|
||||||
* Description : For debugging purposes prints information from the
|
service_info *FindServiceEventURLPath(
|
||||||
* service passed into the function.
|
/*! [in] Service table. */
|
||||||
*
|
service_table *table,
|
||||||
* Return : void ;
|
/*! [in] Event URL path used to find a service from the table. */
|
||||||
*
|
char *eventURLPath);
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
|
/*!
|
||||||
|
* \brief Traverses the service table and finds the node whose control URL Path
|
||||||
|
* matches a know value.
|
||||||
|
*
|
||||||
|
* \return Pointer to the service list node from the service table whose control
|
||||||
|
* URL Path matches a known value.
|
||||||
|
*/
|
||||||
|
service_info * FindServiceControlURLPath(
|
||||||
|
/*! [in] Service table. */
|
||||||
|
service_table *table,
|
||||||
|
/*! [in] Control URL path used to find a service from the table. */
|
||||||
|
const char *controlURLPath);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief For debugging purposes prints information from the service passed
|
||||||
|
* into the function.
|
||||||
|
*/
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void printService(
|
void printService(
|
||||||
|
/*! [in] Service whose information is to be printed. */
|
||||||
service_info *service,
|
service_info *service,
|
||||||
|
/*! [in] Debug level specified to the print function. */
|
||||||
Upnp_LogLevel level,
|
Upnp_LogLevel level,
|
||||||
|
/*! [in] Debug module specified to the print function. */
|
||||||
Dbg_Module module);
|
Dbg_Module module);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE void printService(
|
static UPNP_INLINE void printService(
|
||||||
@ -272,25 +234,18 @@ static UPNP_INLINE void printService(
|
|||||||
Dbg_Module module) {}
|
Dbg_Module module) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : printServiceList
|
/*!
|
||||||
*
|
* \brief For debugging purposes prints information of each service from the
|
||||||
* Parameters :
|
* service table passed into the function.
|
||||||
* service_info *service ; Service whose information is to be printed
|
*/
|
||||||
* Upnp_LogLevel level ; Debug level specified to the print function
|
|
||||||
* Dbg_Module module ; Debug module specified to the print function
|
|
||||||
*
|
|
||||||
* Description : For debugging purposes prints information of each
|
|
||||||
* service from the service table passed into the function.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void printServiceList(
|
void printServiceList(
|
||||||
|
/*! [in] Service whose information is to be printed. */
|
||||||
service_info *service,
|
service_info *service,
|
||||||
|
/*! [in] Debug level specified to the print function. */
|
||||||
Upnp_LogLevel level,
|
Upnp_LogLevel level,
|
||||||
|
/*! [in] Debug module specified to the print function. */
|
||||||
Dbg_Module module);
|
Dbg_Module module);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE void printServiceList(
|
static UPNP_INLINE void printServiceList(
|
||||||
@ -299,26 +254,18 @@ static UPNP_INLINE void printServiceList(
|
|||||||
Dbg_Module module) {}
|
Dbg_Module module) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : printServiceTable
|
/*!
|
||||||
*
|
* \brief For debugging purposes prints the URL base of the table and information
|
||||||
* Parameters :
|
* of each service from the service table passed into the function.
|
||||||
* service_table * table ; Service table to be printed
|
*/
|
||||||
* Upnp_LogLevel level ; Debug level specified to the print function
|
|
||||||
* Dbg_Module module ; Debug module specified to the print function
|
|
||||||
*
|
|
||||||
* Description : For debugging purposes prints the URL base of the table
|
|
||||||
* and information of each service from the service table passed into
|
|
||||||
* the function.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void printServiceTable(
|
void printServiceTable(
|
||||||
|
/*! [in] Service table to be printed. */
|
||||||
service_table *table,
|
service_table *table,
|
||||||
|
/*! [in] Debug level specified to the print function. */
|
||||||
Upnp_LogLevel level,
|
Upnp_LogLevel level,
|
||||||
|
/*! [in] Debug module specified to the print function. */
|
||||||
Dbg_Module module);
|
Dbg_Module module);
|
||||||
#else
|
#else
|
||||||
static UPNP_INLINE void printServiceTable(
|
static UPNP_INLINE void printServiceTable(
|
||||||
@ -327,150 +274,106 @@ static UPNP_INLINE void printServiceTable(
|
|||||||
Dbg_Module module) {}
|
Dbg_Module module) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : freeService
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* service_info *in ; service information that is to be freed
|
|
||||||
*
|
|
||||||
* Description : Free's memory allocated for the various components
|
|
||||||
* of the service entry in the service table.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeService(service_info * in);
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : freeServiceList
|
* \brief Free's memory allocated for the various components of the service
|
||||||
*
|
* entry in the service table.
|
||||||
* Parameters :
|
*/
|
||||||
* service_info * head ; Head of the service list to be freed
|
void freeService(
|
||||||
*
|
/*! [in] Service information that is to be freed. */
|
||||||
* Description : Free's memory allocated for the various components
|
service_info *in);
|
||||||
* of each service entry in the service table.
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeServiceList(service_info * head);
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : freeServiceTable
|
* \brief Free's memory allocated for the various components of each service
|
||||||
*
|
* entry in the service table.
|
||||||
* Parameters :
|
*/
|
||||||
* service_table * table ; Service table whose memory needs to be
|
void freeServiceList(
|
||||||
* freed
|
/*! [in] Head of the service list to be freed. */
|
||||||
*
|
service_info *head);
|
||||||
* Description : Free's dynamic memory in table.
|
|
||||||
* (does not free table, only memory within the structure)
|
|
||||||
*
|
|
||||||
* Return : void ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
void freeServiceTable(service_table * table);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : removeServiceTable
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* IXML_Node *node ; XML node information
|
|
||||||
* service_table *in ; service table from which services will be
|
|
||||||
* removed
|
|
||||||
*
|
|
||||||
* Description : This function assumes that services for a particular
|
|
||||||
* root device are placed linearly in the service table, and in the
|
|
||||||
* order in which they are found in the description document
|
|
||||||
* all services for this root device are removed from the list
|
|
||||||
*
|
|
||||||
* Return : int ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
int removeServiceTable(IXML_Node *node,
|
|
||||||
service_table *in);
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : addServiceTable
|
* \brief Free's dynamic memory in table (does not free table, only memory
|
||||||
*
|
* within the structure).
|
||||||
* Parameters :
|
*/
|
||||||
* IXML_Node *node ; XML node information
|
void freeServiceTable(
|
||||||
* service_table *in ; service table that will be initialized with
|
/*! [in] Service table whose internal memory needs to be freed. */
|
||||||
* services
|
service_table *table);
|
||||||
* const char *DefaultURLBase ; Default base URL on which the URL
|
|
||||||
* will be returned to the service list.
|
|
||||||
*
|
|
||||||
* Description : Add Service to the table.
|
|
||||||
*
|
|
||||||
* Return : int ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
int addServiceTable(IXML_Node *node, service_table *in, const char *DefaultURLBase);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : getServiceTable
|
|
||||||
*
|
|
||||||
* Parameters :
|
|
||||||
* IXML_Node *node ; XML node information
|
|
||||||
* service_table *out ; output parameter which will contain the
|
|
||||||
* service list and URL
|
|
||||||
* const char *DefaultURLBase ; Default base URL on which the URL
|
|
||||||
* will be returned.
|
|
||||||
*
|
|
||||||
* Description : Retrieve service from the table
|
|
||||||
*
|
|
||||||
* Return : int ;
|
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
|
||||||
int getServiceTable(IXML_Node *node, service_table * out, const char * DefaultURLBase);
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc helper functions */
|
/*!
|
||||||
|
* \brief This function assumes that services for a particular root device are
|
||||||
|
* placed linearly in the service table, and in the order in which they are
|
||||||
|
* found in the description document all services for this root device are
|
||||||
|
* removed from the list.
|
||||||
|
*
|
||||||
|
* \return An integer.
|
||||||
|
*/
|
||||||
|
int removeServiceTable(
|
||||||
|
/*! [in] XML node information. */
|
||||||
|
IXML_Node *node,
|
||||||
|
/*! [in] Service table from which services will be removed. */
|
||||||
|
service_table *in);
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/*!
|
||||||
* Function : getElementValue
|
* \brief Add Service to the table.
|
||||||
*
|
*/
|
||||||
* Parameters :
|
int addServiceTable(
|
||||||
* IXML_Node *node ; Input node which provides the list of child
|
/*! [in] XML node information. */
|
||||||
* nodes
|
IXML_Node *node,
|
||||||
*
|
/*! [in] Service table that will be initialized with services. */
|
||||||
* Description : Returns the clone of the element value
|
service_table *in,
|
||||||
*
|
/*! [in] Default base URL on which the URL will be returned to the
|
||||||
* Return : DOMString ;
|
* service list. */
|
||||||
*
|
const char *DefaultURLBase);
|
||||||
* Note : value must be freed with DOMString_free
|
|
||||||
************************************************************************/
|
|
||||||
DOMString getElementValue(IXML_Node *node);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Function : getSubElement
|
/*!
|
||||||
*
|
* \brief Retrieve service from the table.
|
||||||
* Parameters :
|
*
|
||||||
* const char *element_name ; sub element name to be searched for
|
* \return An integer
|
||||||
* IXML_Node *node ; Input node which provides the list of child
|
*/
|
||||||
* nodes
|
int getServiceTable(
|
||||||
* IXML_Node **out ; Ouput node to which the matched child node is
|
/*! [in] XML node information. */
|
||||||
* returned.
|
IXML_Node *node,
|
||||||
*
|
/*! [in] Output parameter which will contain the service list and URL. */
|
||||||
* Description : Traverses through a list of XML nodes to find the
|
service_table *out,
|
||||||
* node with the known element name.
|
/*! [in] Default base URL on which the URL will be returned. */
|
||||||
*
|
const char *DefaultURLBase);
|
||||||
* Return : int ;
|
|
||||||
* 1 - On Success
|
|
||||||
* 0 - On Failure
|
/* Misc helper functions */
|
||||||
*
|
|
||||||
* Note :
|
|
||||||
************************************************************************/
|
/*!
|
||||||
int getSubElement(const char *element_name, IXML_Node *node,
|
* \brief Returns the clone of the element value.
|
||||||
IXML_Node **out);
|
*
|
||||||
|
* \note Value must be freed with DOMString_free.
|
||||||
|
*
|
||||||
|
* \return DOMString
|
||||||
|
*/
|
||||||
|
DOMString getElementValue(
|
||||||
|
/*! [in] Input node which provides the list of child nodes. */
|
||||||
|
IXML_Node *node);
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Traverses through a list of XML nodes to find the node with the
|
||||||
|
* known element name.
|
||||||
|
*
|
||||||
|
* \return
|
||||||
|
* \li 1 - On Success
|
||||||
|
* \li 0 - On Failure
|
||||||
|
*/
|
||||||
|
int getSubElement(
|
||||||
|
/*! [in] Sub element name to be searched for. */
|
||||||
|
const char *element_name,
|
||||||
|
/*! [in] Input node which provides the list of child nodes. */
|
||||||
|
IXML_Node *node,
|
||||||
|
/*! [out] Ouput node to which the matched child node is returned. */
|
||||||
|
IXML_Node **out);
|
||||||
|
|
||||||
|
|
||||||
#endif /* INCLUDE_DEVICE_APIS */
|
#endif /* INCLUDE_DEVICE_APIS */
|
||||||
@ -479,5 +382,5 @@ int getSubElement(const char *element_name, IXML_Node *node,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _SERVICE_TABLE */
|
#endif /* SERVICE_TABLE */
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,60 +1,62 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef INCLUDE_DEVICE_APIS
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
#if EXCLUDE_SSDP == 0
|
#if EXCLUDE_SSDP == 0
|
||||||
|
|
||||||
|
|
||||||
|
#include "httpparser.h"
|
||||||
|
#include "httpreadwrite.h"
|
||||||
|
#include "ssdplib.h"
|
||||||
|
#include "statcodes.h"
|
||||||
|
#include "ThreadPool.h"
|
||||||
|
#include "unixutil.h"
|
||||||
|
#include "upnpapi.h"
|
||||||
|
#include "UpnpInet.h"
|
||||||
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "ssdplib.h"
|
|
||||||
#include "upnpapi.h"
|
|
||||||
#include "ThreadPool.h"
|
|
||||||
#include "httpparser.h"
|
|
||||||
#include "httpreadwrite.h"
|
|
||||||
#include "statcodes.h"
|
|
||||||
#include "unixutil.h"
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#include <ws2tcpip.h>
|
|
||||||
#include <winsock2.h>
|
|
||||||
#endif /* WIN32 */
|
|
||||||
|
|
||||||
#define MSGTYPE_SHUTDOWN 0
|
#define MSGTYPE_SHUTDOWN 0
|
||||||
#define MSGTYPE_ADVERTISEMENT 1
|
#define MSGTYPE_ADVERTISEMENT 1
|
||||||
#define MSGTYPE_REPLY 2
|
#define MSGTYPE_REPLY 2
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : advertiseAndReplyThread
|
* Function : advertiseAndReplyThread
|
||||||
*
|
*
|
||||||
@ -88,7 +90,7 @@ advertiseAndReplyThread( IN void *data )
|
|||||||
* Function : ssdp_handle_device_request
|
* Function : ssdp_handle_device_request
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* IN http_message_t* hmsg: SSDP search request from the control point
|
* IN http_message_t *hmsg: SSDP search request from the control point
|
||||||
* IN struct sockaddr_in* dest_addr: The address info of control point
|
* IN struct sockaddr_in* dest_addr: The address info of control point
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
@ -101,7 +103,7 @@ advertiseAndReplyThread( IN void *data )
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#ifdef INCLUDE_DEVICE_APIS
|
#ifdef INCLUDE_DEVICE_APIS
|
||||||
void
|
void
|
||||||
ssdp_handle_device_request( IN http_message_t * hmsg,
|
ssdp_handle_device_request( IN http_message_t *hmsg,
|
||||||
IN struct sockaddr_in *dest_addr )
|
IN struct sockaddr_in *dest_addr )
|
||||||
{
|
{
|
||||||
#define MX_FUDGE_FACTOR 10
|
#define MX_FUDGE_FACTOR 10
|
||||||
@ -337,7 +339,7 @@ CreateServicePacket( IN int msg_type,
|
|||||||
|
|
||||||
// NOTE: The CACHE-CONTROL and LOCATION headers are not present in
|
// NOTE: The CACHE-CONTROL and LOCATION headers are not present in
|
||||||
// a shutdown msg, but are present here for MS WinMe interop.
|
// a shutdown msg, but are present here for MS WinMe interop.
|
||||||
|
|
||||||
ret_code = http_MakeMessage(
|
ret_code = http_MakeMessage(
|
||||||
&buf, 1, 1,
|
&buf, 1, 1,
|
||||||
"Q" "sssdc" "sdc" "ssc" "ssc" "ssc" "S" "Xc" "sscc",
|
"Q" "sssdc" "sdc" "ssc" "ssc" "ssc" "S" "Xc" "sscc",
|
||||||
@ -397,7 +399,7 @@ DeviceAdvertisement( IN char *DevType,
|
|||||||
int ret_code;
|
int ret_code;
|
||||||
|
|
||||||
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
UpnpPrintf( UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||||
"In function SendDeviceAdvertisemenrt\n" );
|
"In function DeviceAdvertisement\n" );
|
||||||
|
|
||||||
DestAddr.sin_family = AF_INET;
|
DestAddr.sin_family = AF_INET;
|
||||||
DestAddr.sin_addr.s_addr = inet_addr( SSDP_IP );
|
DestAddr.sin_addr.s_addr = inet_addr( SSDP_IP );
|
||||||
@ -412,7 +414,7 @@ DeviceAdvertisement( IN char *DevType,
|
|||||||
if( RootDev ) {
|
if( RootDev ) {
|
||||||
sprintf( Mil_Usn, "%s::upnp:rootdevice", Udn );
|
sprintf( Mil_Usn, "%s::upnp:rootdevice", Udn );
|
||||||
CreateServicePacket( MSGTYPE_ADVERTISEMENT, "upnp:rootdevice",
|
CreateServicePacket( MSGTYPE_ADVERTISEMENT, "upnp:rootdevice",
|
||||||
Mil_Usn, Location, Duration, &msgs[0] );
|
Mil_Usn, Location, Duration, &msgs[0] );
|
||||||
}
|
}
|
||||||
// both root and sub-devices need to send these two messages
|
// both root and sub-devices need to send these two messages
|
||||||
//
|
//
|
||||||
@ -550,7 +552,7 @@ DeviceReply( IN struct sockaddr_in *DestAddr,
|
|||||||
IN int RootDev,
|
IN int RootDev,
|
||||||
IN char *Udn,
|
IN char *Udn,
|
||||||
IN char *Location,
|
IN char *Location,
|
||||||
IN int Duration )
|
IN int Duration)
|
||||||
{
|
{
|
||||||
char *szReq[3],
|
char *szReq[3],
|
||||||
Mil_Nt[LINE_SIZE],
|
Mil_Nt[LINE_SIZE],
|
||||||
@ -624,7 +626,7 @@ int
|
|||||||
ServiceAdvertisement( IN char *Udn,
|
ServiceAdvertisement( IN char *Udn,
|
||||||
IN char *ServType,
|
IN char *ServType,
|
||||||
IN char *Location,
|
IN char *Location,
|
||||||
IN int Duration )
|
IN int Duration)
|
||||||
{
|
{
|
||||||
char Mil_Usn[LINE_SIZE];
|
char Mil_Usn[LINE_SIZE];
|
||||||
char *szReq[1];
|
char *szReq[1];
|
||||||
@ -713,7 +715,7 @@ int
|
|||||||
ServiceShutdown( IN char *Udn,
|
ServiceShutdown( IN char *Udn,
|
||||||
IN char *ServType,
|
IN char *ServType,
|
||||||
IN char *Location,
|
IN char *Location,
|
||||||
IN int Duration )
|
IN int Duration)
|
||||||
{
|
{
|
||||||
char Mil_Usn[LINE_SIZE];
|
char Mil_Usn[LINE_SIZE];
|
||||||
char *szReq[1];
|
char *szReq[1];
|
||||||
@ -762,7 +764,7 @@ DeviceShutdown( IN char *DevType,
|
|||||||
IN char *Udn,
|
IN char *Udn,
|
||||||
IN char *_Server,
|
IN char *_Server,
|
||||||
IN char *Location,
|
IN char *Location,
|
||||||
IN int Duration )
|
IN int Duration)
|
||||||
{
|
{
|
||||||
struct sockaddr_in DestAddr;
|
struct sockaddr_in DestAddr;
|
||||||
char *msgs[3];
|
char *msgs[3];
|
||||||
|
@ -1,51 +1,60 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
/**************************************************************************
|
||||||
//
|
*
|
||||||
// Copyright (c) 2000-2003 Intel Corporation
|
* Copyright (c) 2000-2003 Intel Corporation
|
||||||
// All rights reserved.
|
* All rights reserved.
|
||||||
//
|
*
|
||||||
// Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
//
|
*
|
||||||
// * Redistributions of source code must retain the above copyright notice,
|
* - Redistributions of source code must retain the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer.
|
* this list of conditions and the following disclaimer.
|
||||||
// * Redistributions in binary form must reproduce the above copyright notice,
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||||
// this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
// * Neither name of Intel Corporation nor the names of its contributors
|
* - Neither name of Intel Corporation nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
* without specific prior written permission.
|
||||||
//
|
*
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR
|
||||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
*
|
||||||
///////////////////////////////////////////////////////////////////////////
|
**************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <assert.h>
|
|
||||||
#ifndef WIN32
|
|
||||||
#include <sys/types.h>
|
#include "membuffer.h"
|
||||||
#include <sys/socket.h>
|
#include "unixutil.h"
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#else
|
|
||||||
#include <winsock2.h>
|
|
||||||
#endif
|
|
||||||
#include "upnp.h"
|
#include "upnp.h"
|
||||||
|
#include "upnpdebug.h"
|
||||||
|
#include "UpnpInet.h"
|
||||||
|
#include "uri.h"
|
||||||
|
#include "urlconfig.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "webserver.h"
|
#include "webserver.h"
|
||||||
#include "uri.h"
|
|
||||||
#include "membuffer.h"
|
|
||||||
#include "urlconfig.h"
|
#include <assert.h>
|
||||||
#include "unixutil.h"
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#else
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Function : addrToString
|
* Function : addrToString
|
||||||
|
Loading…
x
Reference in New Issue
Block a user