Example #1
0
/********************************************************************************
 * upnp_igd_send_action
 *
 * Description:
 *       Send an Action request to the specified service of a device.
 *
 * Parameters:
 *   igd_ctxt    -- The upnp igd context
 *   device_node -- The device
 *   service     -- The service
 *   actionname  -- The name of the action.
 *   param_name  -- An array of parameter names
 *   param_val   -- The corresponding parameter values
 *   param_count -- The number of parameters
 *   fun         -- Callback function
 *   cookie      -- Callback cookie
 *
 ********************************************************************************/
int upnp_igd_send_action(upnp_igd_context* igd_ctxt, upnp_igd_device_node *device_node, int service,
		const char *actionname, const char **param_name, const char **param_val, int param_count,
		Upnp_FunPtr fun, const void *cookie) {
	IXML_Document *actionNode = NULL;
	int ret = 0;
	int param;
	if (0 == param_count) {
		actionNode = UpnpMakeAction(actionname, IGDServiceType[service], 0, NULL);
	} else {
		for (param = 0; param < param_count; param++) {
			if (UpnpAddToAction(&actionNode, actionname, IGDServiceType[service], param_name[param], param_val[param]) != UPNP_E_SUCCESS) {
				upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "ERROR: upnp_igd_send_action: Trying to add action param");
			}
		}
	}

	ret = UpnpSendActionAsync(igd_ctxt->upnp_handle, device_node->device.services[service].control_url,
				 IGDServiceType[service], NULL, actionNode, fun, cookie);

	if (ret != UPNP_E_SUCCESS) {
		upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in UpnpSendActionAsync -- %d", ret);
		ret = -1;
	}

	if (actionNode)
		ixmlDocument_free(actionNode);

	return ret;
}
Example #2
0
/********************************************************************************
 * TvCtrlPointSendAction
 *
 * Description: 
 *       Send an Action request to the specified service of a device.
 *
 * Parameters:
 *   service -- The service
 *   devnum -- The number of the device (order in the list,
 *             starting with 1)
 *   actionname -- The name of the action.
 *   param_name -- An array of parameter names
 *   param_val -- The corresponding parameter values
 *   param_count -- The number of parameters
 *
 ********************************************************************************/
int TvCtrlPointSendAction(
	int service,
	int devnum,
	const char *actionname,
	const char **param_name,
	char **param_val,
	int param_count)
{
	struct TvDeviceNode *devnode;
	IXML_Document *actionNode = NULL;
	int rc = TV_SUCCESS;
	int param;

	ithread_mutex_lock(&DeviceListMutex);

	rc = TvCtrlPointGetDevice(devnum, &devnode);
	if (TV_SUCCESS == rc) {
		if (0 == param_count) {
			actionNode =
			    UpnpMakeAction(actionname, TvServiceType[service],
					   0, NULL);
		} else {
			for (param = 0; param < param_count; param++) {
				if (UpnpAddToAction
				    (&actionNode, actionname,
				     TvServiceType[service], param_name[param],
				     param_val[param]) != UPNP_E_SUCCESS) {
					SampleUtil_Print
					    ("ERROR: TvCtrlPointSendAction: Trying to add action param\n");
					/*return -1; // TBD - BAD! leaves mutex locked */
				}
			}
		}

		rc = UpnpSendActionAsync(ctrlpt_handle,
					 devnode->device.
					 TvService[service].ControlURL,
					 TvServiceType[service], NULL,
					 actionNode,
					 TvCtrlPointCallbackEventHandler, NULL);

		if (rc != UPNP_E_SUCCESS) {
			SampleUtil_Print("Error in UpnpSendActionAsync -- %d\n",
					 rc);
			rc = TV_ERROR;
		}
	}

	ithread_mutex_unlock(&DeviceListMutex);

	if (actionNode)
		ixmlDocument_free(actionNode);

	return rc;
}
/********************************************************************************
 * WscUPnPCPSendAction
 *
 * Description: 
 *       Send an Action request to the specified service of a device.
 *
 * Parameters:
 *   devnum -- The number of the device (order in the list,
 *             starting with 1)
 *   actionname -- The name of the action.
 *   param_name -- An array of parameter names
 *   param_val -- The corresponding parameter values
 *   param_count -- The number of parameters
 *
 ********************************************************************************/
int WscUPnPCPSendAction(
	IN uint32 ipAddr,
	IN char *actionname,
	IN char **param_name,
	IN char **param_val,
	IN int param_count)
{
	struct upnpDeviceNode *devnode;
	IXML_Document *actionNode = NULL;
	int rc = WSC_SYS_SUCCESS;
	int param;

    rc = WscUPnPCPGetDevice(ipAddr, &devnode);
	if (rc == WSC_SYS_SUCCESS)
	{
		if (param_count == 0) 
		{
			actionNode = UpnpMakeAction(actionname, WscServiceTypeStr, 0, NULL);
		}
		else
		{
			for (param = 0; param < param_count; param++)
			{
				rc = UpnpAddToAction(actionNode, actionname, WscServiceTypeStr, 
										param_name[param], param_val[param]);
				if (rc != UPNP_E_SUCCESS ) 
				{
					DBGPRINTF(RT_DBG_ERROR, "ERROR: WscUPnPCPSendAction: Trying to add action param, rc=%d!\n", rc);
					//return -1; // TBD - BAD! leaves mutex locked
				}
			}
		}
		DBGPRINTF(RT_DBG_INFO, "ControlURL=%s!\n", devnode->device.services.ControlURL);
		rc = UpnpSendActionAsync( WscCPHandle, devnode->device.services.ControlURL, 
									WscServiceTypeStr, NULL, actionNode, 
									WscUPnPCPDeviceHandler, NULL);

        if (rc != UPNP_E_SUCCESS)
		{
			DBGPRINTF(RT_DBG_ERROR, "Error in UpnpSendActionAsync -- %d\n", rc);
			rc = WSC_SYS_ERROR;
		}
	}
	else 
	{
		DBGPRINTF(RT_DBG_ERROR, "WscUPnPCPGetDevice failed!\n");
	}
	
	if (actionNode)
		ixmlDocument_free(actionNode);

	return rc;
}
Example #4
0
/* Access part */
IXML_Document* MediaServer::_browseAction( const char* psz_object_id_,
        const char* psz_browser_flag_,
        const char* psz_filter_,
        const char* psz_requested_count_,
        const char* psz_sort_criteria_ )
{
    IXML_Document* p_action = NULL;
    IXML_Document* p_response = NULL;
    Upnp_i11e_cb *i11eCb = NULL;
    access_sys_t *sys = (access_sys_t *)m_access->p_sys;

    int i_res;

    if ( vlc_killed() )
        return NULL;

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "ObjectID", psz_object_id_ ? psz_object_id_ : "0" );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'ObjectID' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "BrowseFlag", psz_browser_flag_ );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'BrowseFlag' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "Filter", psz_filter_ );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'Filter' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "StartingIndex", "0" );
    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'StartingIndex' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "RequestedCount", psz_requested_count_ );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'RequestedCount' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    i_res = UpnpAddToAction( &p_action, "Browse",
                             CONTENT_DIRECTORY_SERVICE_TYPE, "SortCriteria", psz_sort_criteria_ );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Dbg( m_access, "AddToAction 'SortCriteria' failed: %s",
                 UpnpGetErrorMessage( i_res ) );
        goto browseActionCleanup;
    }

    /* Setup an interruptible callback that will call sendActionCb if not
     * interrupted by vlc_interrupt_kill */
    i11eCb = new Upnp_i11e_cb( sendActionCb, &p_response );
    i_res = UpnpSendActionAsync( sys->p_upnp->handle(),
                                 m_psz_root,
                                 CONTENT_DIRECTORY_SERVICE_TYPE,
                                 NULL, /* ignored in SDK, must be NULL */
                                 p_action,
                                 Upnp_i11e_cb::run, i11eCb );

    if ( i_res != UPNP_E_SUCCESS )
    {
        msg_Err( m_access, "%s when trying the send() action with URL: %s",
                 UpnpGetErrorMessage( i_res ), m_access->psz_location );
    }
    /* Wait for the callback to fill p_response or wait for an interrupt */
    i11eCb->waitAndRelease();

browseActionCleanup:
    ixmlDocument_free( p_action );
    return p_response;
}
Example #5
0
int
Cyber_Addmapport( int service,
                        char *cyber_ctrolUARL,
                     
                       char *actionname,
                      
                    
                       int param_count )
{
    struct TvDeviceNode *devnode;
    IXML_Document *actionNode = NULL;
    int rc = TV_SUCCESS;
    int param;
    char cyber_param_name1[]="NewRemoteHost";
    char cyber_param_name2[]="NewExternalPort";
    char cyber_param_name3[]="NewProtocol";
    char cyber_param_name4[]="NewInternalPort";
    char cyber_param_name5[]="NewInternalClient";
    char cyber_param_name6[]="NewEnabled";
    char cyber_param_name7[]="NewPortMappingDescription";
    char cyber_param_name8[]="NewLeaseDuration";
    
    char cyber_param_var1[]="";
    char cyber_param_var2[]="56050";
    char cyber_param_var3[]="tcp";
    char cyber_param_var4[]="80";
    char cyber_param_var5[]="192.168.0.231";
    char cyber_param_var6[]="";
    char cyber_param_var7[]="";
    char cyber_param_var8[]="";
    printf("cyber_param_name1[]=%s\n",cyber_param_name1);
    printf("cyber_param_name2[]=%s\n",cyber_param_name2);
    printf("cyber_param_name3[]=%s\n",cyber_param_name3);
    printf("cyber_param_name4[]=%s\n",cyber_param_name4);
    printf("cyber_param_name5[]=%s\n",cyber_param_name5);
    printf("cyber_param_name6[]=%s\n",cyber_param_name6);
    printf("cyber_param_name7[]=%s\n",cyber_param_name7);
    printf("cyber_param_name8[]=%s\n",cyber_param_name8);
    
     printf("cyber_param_var1[]=%s\n",cyber_param_var1);
     printf("cyber_param_var2[]=%s\n",cyber_param_var2);
     printf("cyber_param_var3[]=%s\n",cyber_param_var3);
     printf("cyber_param_var4[]=%s\n",cyber_param_var4);
     printf("cyber_param_var5[]=%s\n",cyber_param_var5);
     printf("cyber_param_var6[]=%s\n",cyber_param_var6);
     printf("cyber_param_var7[]=%s\n",cyber_param_var7);
     printf("cyber_param_var8[]=%s\n",cyber_param_var8);    
      
  ///  cyber_param_var[]={"","8898","tcp","80","192.168.0.231","","CTL IPCAM",""};
    
    ithread_mutex_lock( &DeviceListMutex );
    printf("actionname=%s\n",actionname);
        if(UpnpAddToAction( &actionNode, actionname, TvServiceType[service],cyber_param_name1,cyber_param_var1 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
    
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name2,cyber_param_var2 ) != UPNP_E_SUCCESS ) 
    {                     printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name3,cyber_param_var3 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name4,cyber_param_var4 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name5,cyber_param_var5 ) != UPNP_E_SUCCESS ) 
    {                    printf
                        ( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name6,cyber_param_var6 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name7,cyber_param_var7 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
       if( UpnpAddToAction( &actionNode, actionname, TvServiceType[service],
                       cyber_param_name8,cyber_param_var8 ) != UPNP_E_SUCCESS ) 
    {                    printf( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
    }
   
    
/*
   // rc = TvCtrlPointGetDevice( devnum, &devnode );
            for( param = 0; param < param_count; param++ ) {
                if( UpnpAddToAction
                    ( &actionNode, actionname, TvServiceType[service],
                      cyber_param_name[param],
                      cyber_param_var[param] ) != UPNP_E_SUCCESS ) {
                    printf
                        ( "ERROR: TvCtrlPointSendAction: Trying to add action param" );
                    //return -1; // TBD - BAD! leaves mutex locked
                }
            }
     
*/
printf("actionNode=%s\n",actionNode);
printf("send the action point\n");
        rc = UpnpSendActionAsync( ctrlpt_handle,
                                  cyber_ctrolUARL, TvServiceType[service],
                                  NULL, actionNode,
                                  TvCtrlPointCallbackEventHandler, NULL );

        if( rc != UPNP_E_SUCCESS ) {
            printf( "Error in UpnpSendActionAsync -- %d", rc );
            rc = TV_ERROR;
        }
        printf("portmappting ok");
  

    ithread_mutex_unlock( &DeviceListMutex );

    if( actionNode )
        ixmlDocument_free( actionNode );

    return rc;
}