⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upnptools.c

📁 电驴下载工具eMule0.47aVeryCD的源代码,可作分析测试也可用于P2P软件的开发研究.
💻 C
📖 第 1 页 / 共 2 页
字号:
        //va_start(ArgList, Arg);
        ArgName = Arg;
        while( Idx++ != NumArg ) {
            ArgValue = va_arg( ArgList, char * );

            if( ArgName != NULL ) {
                node = ixmlNode_getFirstChild( ( IXML_Node * ) ActionDoc );
                Ele = ixmlDocument_createElement( ActionDoc, ArgName );
                if( ArgValue ) {
                    Txt =
                        ixmlDocument_createTextNode( ActionDoc, ArgValue );
                    ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
                }

                ixmlNode_appendChild( node, ( IXML_Node * ) Ele );
            }

            ArgName = va_arg( ArgList, char * );
        }
        //va_end(ArgList);
    }

    return ActionDoc;
}

/************************************************************************
* Function : UpnpMakeAction											
*																	
* Parameters:														
*	IN char * ActionName: Name of the action request or response
*	IN char * ServType: Service type
*	IN int NumArg :Number of arguments in the action request or response
*	IN char * Arg : pointer to the first argument
*	IN ... : variable argument list
*	IN va_list ArgList: Argument list
*
* Description:		
*	This function creates the action request from the argument
* list. Its a wrapper function that calls makeAction function to create
* the action request.
*
* Returns: IXML_Document *
*	returns action request document if successful 
*	else returns NULL
***************************************************************************/
IXML_Document *
UpnpMakeAction( char *ActionName,
                char *ServType,
                int NumArg,
                char *Arg,
                ... )
{
    va_list ArgList;
    IXML_Document *out = NULL;

    if( NumArg > 0 ) {
        va_start( ArgList, Arg );
    }

    out = makeAction( 0, ActionName, ServType, NumArg, Arg, ArgList );
    if( NumArg > 0 ) {
        va_end( ArgList );
    }

    return out;
}

/************************************************************************
* Function : UpnpMakeActionResponse											
*																	
* Parameters:														
*	IN char * ActionName: Name of the action request or response
*	IN char * ServType: Service type
*	IN int NumArg :Number of arguments in the action request or response
*	IN char * Arg : pointer to the first argument
*	IN ... : variable argument list
*	IN va_list ArgList: Argument list
*
* Description:		
*	This function creates the action response from the argument
* list. Its a wrapper function that calls makeAction function to create
* the action response.
*
* Returns: IXML_Document *
*	returns action response document if successful 
*	else returns NULL
***************************************************************************/
IXML_Document *
UpnpMakeActionResponse( char *ActionName,
                        char *ServType,
                        int NumArg,
                        char *Arg,
                        ... )
{
    va_list ArgList;
    IXML_Document *out = NULL;

    if( NumArg > 0 ) {
        va_start( ArgList, Arg );
    }

    out = makeAction( 1, ActionName, ServType, NumArg, Arg, ArgList );
    if( NumArg > 0 ) {
        va_end( ArgList );
    }

    return out;
}

/************************************************************************
* Function : UpnpAddToActionResponse									
*																	
* Parameters:
*	INOUT IXML_Document **ActionResponse: action response document	
*	IN char * ActionName: Name of the action request or response
*	IN char * ServType: Service type
*	IN int ArgName :Name of argument to be added in the action response
*	IN char * ArgValue : value of the argument
*
* Description:		
*	This function adds the argument in the action response. Its a wrapper 
* function that calls addToAction function to add the argument in the 
* action response.
*
* Returns: int
*	returns UPNP_E_SUCCESS if successful 
*	else returns appropriate error
***************************************************************************/
int
UpnpAddToActionResponse( INOUT IXML_Document ** ActionResponse,
                         IN char *ActionName,
                         IN char *ServType,
                         IN char *ArgName,
                         IN char *ArgValue )
{
    return addToAction( 1, ActionResponse, ActionName, ServType, ArgName,
                        ArgValue );
}

/************************************************************************
* Function : UpnpAddToAction									
*																	
* Parameters:
*	INOUT IXML_Document **ActionDoc: action request document	
*	IN char * ActionName: Name of the action request or response
*	IN char * ServType: Service type
*	IN int ArgName :Name of argument to be added in the action response
*	IN char * ArgValue : value of the argument
*
* Description:		
*	This function adds the argument in the action request. Its a wrapper 
* function that calls addToAction function to add the argument in the 
* action request.
*
* Returns: int
*	returns UPNP_E_SUCCESS if successful 
*	else returns appropriate error
***************************************************************************/
int
UpnpAddToAction( IXML_Document ** ActionDoc,
                 char *ActionName,
                 char *ServType,
                 char *ArgName,
                 char *ArgValue )
{

    return addToAction( 0, ActionDoc, ActionName, ServType, ArgName,
                        ArgValue );
}

/************************************************************************
* Function : UpnpAddToPropertySet											
*																	
* Parameters:														
*	INOUT IXML_Document **PropSet: propertyset document
*	IN char *ArgName: Name of the argument
*	IN char *ArgValue: value of the argument
*
* Description:		
*	This function adds the argument in the propertyset node 
*
* Returns: int
*	returns UPNP_E_SUCCESS if successful else returns appropriate error
***************************************************************************/
int
UpnpAddToPropertySet( INOUT IXML_Document ** PropSet,
                      IN char *ArgName,
                      IN char *ArgValue )
{

    char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas"
        "-upnp-org:event-1-0\"></e:propertyset>";
    IXML_Node *node;
    IXML_Element *Ele;
    IXML_Element *Ele1;
    IXML_Node *Txt;
    int rc;

    if( ArgName == NULL ) {
        return UPNP_E_INVALID_PARAM;
    }

    if( *PropSet == NULL ) {
        rc = ixmlParseBufferEx( BlankDoc, PropSet );
        if( rc != IXML_SUCCESS ) {
            return UPNP_E_OUTOF_MEMORY;
        }
    }

    node = ixmlNode_getFirstChild( ( IXML_Node * ) * PropSet );

    Ele1 = ixmlDocument_createElement( *PropSet, "e:property" );
    Ele = ixmlDocument_createElement( *PropSet, ArgName );

    if( ArgValue ) {
        Txt = ixmlDocument_createTextNode( *PropSet, ArgValue );
        ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
    }

    ixmlNode_appendChild( ( IXML_Node * ) Ele1, ( IXML_Node * ) Ele );
    ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 );

    return UPNP_E_SUCCESS;
}

/************************************************************************
* Function : UpnpCreatePropertySet											
*																	
* Parameters:														
*	IN int NumArg: Number of argument that will go in the propertyset node
*	IN char * Args: argument strings
*
* Description:		
*	This function creates a propertyset node and put all the input 
*	parameters in the node as elements
*
* Returns: IXML_Document *
*	returns the document containing propertyset node.
***************************************************************************/
IXML_Document *
UpnpCreatePropertySet( IN int NumArg,
                       IN char *Arg,
                       ... )
{
    va_list ArgList;
    int Idx = 0;
    char BlankDoc[] = "<e:propertyset xmlns:e=\"urn:schemas-"
        "upnp-org:event-1-0\"></e:propertyset>";
    char *ArgName,
     *ArgValue;
    IXML_Node *node;
    IXML_Element *Ele;
    IXML_Element *Ele1;
    IXML_Node *Txt;
    IXML_Document *PropSet;

    if( ixmlParseBufferEx( BlankDoc, &PropSet ) != IXML_SUCCESS ) {
        return NULL;
    }

    if( NumArg < 1 ) {
        return NULL;
    }

    va_start( ArgList, Arg );
    ArgName = Arg;

    while( Idx++ != NumArg ) {
        ArgValue = va_arg( ArgList, char * );

        if( ArgName != NULL /*&& ArgValue != NULL */  ) {
            node = ixmlNode_getFirstChild( ( IXML_Node * ) PropSet );
            Ele1 = ixmlDocument_createElement( PropSet, "e:property" );
            Ele = ixmlDocument_createElement( PropSet, ArgName );
            if( ArgValue ) {
                Txt = ixmlDocument_createTextNode( PropSet, ArgValue );
                ixmlNode_appendChild( ( IXML_Node * ) Ele, Txt );
            }

            ixmlNode_appendChild( ( IXML_Node * ) Ele1,
                                  ( IXML_Node * ) Ele );
            ixmlNode_appendChild( node, ( IXML_Node * ) Ele1 );
        }

        ArgName = va_arg( ArgList, char * );

    }
    va_end( ArgList );
    return PropSet;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -