3.事件
/*
*函数含义: 接受预订请求发送当前状态的eventable变量服务。(字符串数组)
* 该设备应用程序应该调用此函数时,它收到一个upnp_event_subscription_request回*
* 调。这项功能是同步的,不产生回调。
*输入参数:
* @param UpnpDevice_Handle Hnd:Upnp设备的一个句柄
* @param const char *DevID_const:产生事件服务的子设备的设备号
* @param const char *ServName_const: 产生事件服务的唯一服务定位器
* @param const char **VarName_const: 指向事件变量数组的一个指针
* @param const char **NewVal_const: 指向事件变量值数组的一个指针
* @param int cVariables: VarName中事件变量个数
* @param const Upnp_SID SubsId: 订阅我的新注册的控制点的ID
*输出参数:
* 无
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:设备句柄是一个非法的句柄
* UPNP_E_INVALID_SERVICE: DevId/ServId 映射的是一个不合法的service
* UPNP_E_INVALID_SID: 指定的订阅标识符不正确。
* UPNP_E_INVALID_DEVICE: DevUDN设备非法
* UPNP_E_OUTOF_MEMORY: 资源不足,无法完成存在的操作
* UPNP_E_INVALID_PARAM: VarName, NewVal, DevID, or ServID 是非法指针或者
* cVariables<0
*备注:
* 它是事件中接受预定请求的提醒,是GENA协议的一部分
* 实质上会走到genaInitNotify函数,在这个函数里面有个用于通知事件提醒的结构体
* typedef struct NOTIFY_THREAD_STRUCT
*/
int UpnpAcceptSubscription(UpnpDevice_Handle Hnd,const char *DevID_const,
const char *ServName_const,const char **VarName_const,const char **NewVal_const,
int cVariables,const Upnp_SID SubsId)
/*
*函数含义: 接受预订请求发送当前状态的eventable变量服务。
* (它需要一个文档的变量事件而不是一个字符串数组)
*备注:
* propertySet得到的方式不同而已
*/
int UpnpAcceptSubscriptionExt(UpnpDevice_Handle Hnd,const char *DevID_const,
const char *ServName_const,IXML_Document *PropSet,Upnp_SID SubsId)
/*
*函数含义: 发出事件的变化通知所有订阅一个特定的服务控制点(不产生回调的同步函数)
*输入参数:
* @param UpnpDevice_Handle Hnd:处理设备发送事件
* @param const char *DevID_const:产生事件服务的子设备的设备号
* @param const char *ServName_const: 产生事件服务的唯一服务定位器
* @param const char **VarName_const: 指向那些改变了的变量的数组指针
* @param const char **NewVal_const: 指向新值(为那些改变了的变量)一个指针
* @param int cVariables: 包含本通知的计数变量
*输出参数:
* 无
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:设备句柄是一个非法的句柄
* UPNP_E_INVALID_SERVICE: DevId/ServId 映射的是一个不合法的service
* UPNP_E_OUTOF_MEMORY: 资源不足,无法完成存在的操作
* UPNP_E_INVALID_PARAM: VarName, NewVal, DevID, or ServID 是非法指针或者
* cVariables<0
*备注:
* 它是GENA协议的一部分,用来通知当事件变化时告知所有订阅这个特定服务的控制点
* 实质上会走到genaNotifyAll函数,在这个函数里面有个用于存放通知事件提醒的结构体
* typedef struct NOTIFY_THREAD_STRUCT,是用线程池来进行操作的
*/
int UpnpNotify(UpnpDevice_Handle Hnd,const char *DevID_const,
const char *ServName_const,const char **VarName_const,const char **NewVal_const,
int cVariables)
/*
*函数含义: 发出事件的变化通知所有订阅一个特定的服务控制点。
* (它需要一个文档的变量事件而不是一个字符串数组)
*备注:
* propertySet得到的方式不同而已
*/
int UpnpNotifyExt(UpnpDevice_Handle Hnd,const char *DevID_const,
const char *ServName_const,IXML_Document *PropSet)
/*
*函数含义: 更新即将到期订阅。(同步函数)
*输入参数:
* @param UpnpDevice_Handle Hnd:更新订阅的控制点句柄
* @param int *TimeOut:指向一个变量包含请求的订阅时间。返回时,它包含实际的更*
* 新时间
* @param const Upnp_SID SubsId: 需要更定订阅的ID
*输出参数:
* TimeOut 返回时间更新的时间
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:控制点句柄是一个非法的句柄
* UPNP_E_SOCKET_WRITE: 发生超时或者写入socket错误
* UPNP_E_OUTOF_MEMORY: 资源不足,无法完成存在的操作
* UPNP_E_INVALID_PARAM: Timeout这个指针非法
*备注:
* 它是GENA协议的一部分,用来更新当前订阅
* 实质上会走到genaRenewSubscription 函数,通过更新子订阅gena_subscribe 来一
* 个个的更新最终完成整个订阅的更新
*/
int UpnpRenewSubscription(UpnpClient_Handle Hnd,int *TimeOut,
const Upnp_SID SubsId)
/*
*函数含义: 更新即将到期订阅。
* (会根据回调函数Fun 产生一个回调得到用户需要的回调数据Cookie)
*备注:
* 有回调
*/
int UpnpRenewSubscriptionAsync(UpnpClient_Handle Hnd,int TimeOut,Upnp_SID SubsId,
Upnp_FunPtr Fun,const void *Cookie_const)
/*
*函数含义: 设置每个服务最大的订阅数
* 设置最大订阅数接受服务。默认值为系统资源允许接受。如果一些当前订阅的服务
* 比要求更大的价值,不接受新的订阅或更新的软件,但是并没有删除任何现有的订阅。
*输入参数:
* @param UpnpDevice_Handle Hnd:处理设备的最大订阅数的句柄
* @param int MaxSubscriptions: 每个服务最大的订阅数
*输出参数:
* 无
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:句柄是一个非法的句柄
*备注:
* 目的就是将MaxSubscriptions设置到结构体Handle_Info中去,便于处理订阅时候判断
*/
Int UpnpSetMaxSubscriptions(UpnpDevice_Handle Hnd, int MaxSubscriptions)
/*
*函数含义: 设置接受订阅请求和更新订阅的最大处理世家
*输入参数:
* @param UpnpDevice_Handle Hnd:处理设备的最大订阅数的句柄
* @param int MaxSubscriptionTimeOut: 每个服务最长的处理时间
*输出参数:
* 无
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:句柄是一个非法的句柄
*备注:
* 目的就是将MaxSubscriptionTimeOut设置到结构体Handle_Info中去,便于处理订阅时
* 候判断
*/
UpnpSetMaxSubscriptionTimeOut(UpnpDevice_Handle Hnd, int MaxSubscriptionTimeOut)
/*
*函数含义: 寄存器控制点接收事件通知从另一装置(同步函数)
*输入参数:
* @param UpnpDevice_Handle Hnd:控制点句柄
* @param const char *EvtUrl_const: 服务订阅的网址
* @param int *TimeOut: 指向一个变量包含请求的订阅时间。返回后,它包含的实际认
* 购时间返回从服务
* @param Upnp_SID SubsId: 指向一个接受订阅ID的变量
*输出参数:
* TimeOut 从服务处返回实际的认购时间
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:句柄是一个非法的句柄
* …….
*备注:
* 通知另一装置接收到的事件,返回从服务器处接受订阅的时间
*/
int UpnpSubscribe(UpnpClient_Handle Hnd,const char *EvtUrl_const,int *TimeOut,
Upnp_SID SubsId)
/*
*函数含义: 寄存器控制点接收事件通知从另一装置。
* (会根据回调函数Fun 产生一个回调得到用户需要的回调数据Cookie)
*备注:
* 有回调
*/
int UpnpSubscribeAsync(UpnpClient_Handle Hnd,const char *EvtUrl_const,
int TimeOut,Upnp_FunPtr Fun,const void *Cookie_const)
/*
*函数含义: 删除订阅一个控制点从以前的服务订阅使用
*输入参数:
* @param UpnpDevice_Handle Hnd: 订阅控制点句柄
* @param const Upnp_SID SubsId: 服务订阅控制点订阅服务的一个标志
*输出参数:
* 无
*返回值:
* 返回值是一个整型变量,定义在Upnp.h中
* UPNP_E_FINISH: Upnp的SDK未加载
* UPNP_E_SUCCESS: 操作正常的完成
* UPNP_E_INVALID_HANDLE:句柄是一个非法的句柄
* …….
*备注:
* 把订阅的ID free掉
*/
int UpnpUnSubscribe(UpnpClient_Handle Hnd, const Upnp_SID SubsId)