认证

Bit_Login / Bit_LoginEx

BIT_STATUS Bit_Login(
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle,
    LOGIN_MODE     mode);

BIT_STATUS Bit_LoginEx(
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UINT32     featureId,
    BIT_PCSTR      szReserved,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle,
    LOGIN_MODE     mode);

授权登录。初始化运行环境,获取操作句柄。必须在除升级函数之外的其它操作前执行。根据登录模式的不同可能需要连接授权服务器。

Bit_Login等价于Bit_LoginEx(…, featured=0,szReserved=NULL, …),当需要登录包含指定特征项的授权时才需要调用Bit_LoginEx。

参数

  • szURL - [IN] 自定义授权服务地址,包括端口,如未使用自定义授权服务器则为NULL。授权服务地址可以是网络地址、本地授权目录以及license串。
类型 格式 说明
授权服务器地址 bit://ip:porthttp://ip:port bit://”开头表示集团授权服务地址
http://”开头表示授权服务中心地址,一般是E3系统或者比特授权云的地址
授权文件路径 root://xxx 传入授权文件所在路径,Login就只会在该路径下查找授权,该设置等同于调用Bit_SetRootPath接口
License文件 lic://xxx 传入文件路径:读取文件内容,并加载到内存里使用
传入目录:自动加载该目录下的*.lic的授权文件
传入license串:将该license串加载到内存里使用

允许设置多个授权路径,通过“,”拆分。

如下:

lic:///tmp,lic:///data,bit://127.0.0.1:8273
/tmp,/data,127.0.0.1:8273  // 等价第1条

注意:该接口支持通过配置文件环境变量来设置该值,如果同时设置优先级为:环境变量 > API传入 > 配置文件。

  • szSN - [IN] 授权码(SN)字符串。如果为空(空串或NULL)则尝试寻找所有当前本机可用的SN。
类型 格式 说明
授权码 比特授权云平台产生的SN
示例:JNLTGZSEFA******
检查指定SN的license
BIT-ID(BIT-ID硬件,类似于加密的USB设备) #xxxxbitid:xxxx
以“#”或“bitid:”开头,表示使用激活BIT-ID,后面紧跟BIT-ID序号,从0开始依次递增
示例:#0,#1,bitid:0, bitid:1
使用BIT-ID授权
激活口令(帐号授权密码或SN激活口令) <xxx>
通过“<>”包裹起来,中间部分为密码
示例:<1234>, <1233>65447>
激活口令,是指授权码激活时,需要输入的一种口令,激活后不再需要,目前仅支持浮动授权
使用帐号授权时保存的是帐号授权的密码(已经不推荐),其它授权代表激活口令
既输入SN又输入激活口令 xxx<password>,授权码后边紧跟“<>”
示例:JNLTGZSEFA******<123>
  • featureId - [IN] 登录授权所需要包含的特征项ID。
  • szReserved - [IN] 一个xml串,表示登录的SN范围。

  xml格式如下:

<scope>
    <feature id="" name="" ver=""/>
</scope>
  • pApplicationData - [IN] 产品识别码,在Bitanswer SDK头文件里。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。
  • mode - [IN] 登录模式,按位操作。
说明
BIT_MODE_LOCAL(0x01) 只检查本地授权(单机授权、BIT-ID授权、内存授权)
BIT_MODE_REMOTE(0x02) 只检查远端授权(云授权、帐号授权、集团授权)
BIT_MODE_AUTO(0x03) 既检查本地授权,也检查远端授权(配置了远端IP的条件下)
优先级:本地授权 > 远端授权
BIT_MODE_CACHE(0x4) 云授权缓存
由于云授权SN比较难记,但登录时又必须传输,则可以使用该选项将SN串缓存起来,下次使用Login登录时可以不输入SN
BIT_MODE_USB(0x8) USB授权
LOGIN_MODE_PROCESS(0x10) 按进程模式登录
集团授权:普通模式一台机器占用一个用户数,进程模式是一个进程占用一个用户数
其它授权:不生效
LOGIN_MODE_SESSION(0x40) Session模式登录
集团授权:该模式比LOGIN_MODE_PROCESS控制的更细,一次会话占用一个点
其它授权:不生效
LOGIN_MODE_HIGH_PR(0x20) 高优先级登录
云授权:用户可以通过高优先级登录来挤掉普通登录。如果登录模式都是高优先级或者普通优先级则不生效
其它授权:不生效
LOGIN_MODE_NO_NETWORK(0x200) 禁用网络
禁止库联网时使用
LOGIN_MODE_CHECK_USERNAME(0x800) 检查当前设备的用户名
集团授权:默认情况下:一台的设备用户名不一样,会被识别为同一个机器,加了该模式,会识别为不同的设备。即:原来一台设备占用一个点,加了这个选项,“一台设备 + 用户名”占用一个点
其它授权:不生效
LOGIN_MODE_USE_SESSIONID(0x1000) Logout时不释放点数,并由第三方程序维护心跳
LOGIN_MODE_HIGH_PERFORMANCE(0x2000) 使用高性能模式登录
集团授权:将Login的两次请求转化为一次请求,可以减少服务负载
其它授权:不支持
LOGIN_MODE_PERSISTENT_CONN(0x4000) 使用长连接模式登录,只有集团授权支持,其它授权不支持
通过长连接可以减少TCP的频繁创建带来的性能损耗,但是会增加服务的socket连接数
LOGIN_MODE_CREATE_HANDLE_ONLY(0x10000) 仅创建handle,不检查license
集团授权:Login默认情况下会连接集团服务并占用一个用户数,加了该模式之后,在调用Query相关接口时才会连接服务器
其它授权:Login默认情况下会检查授权的可用性,加了该模式之后,在Query时才会检查
LOGIN_MODE_CREATE_NEW_HANDLE(0x20000) 创建新handle,每次创建的handle唯一
Login的请求默认都发pid
可以针对每一个handle进行设置属性,不会相互影响
LOGIN_MODE_MID(0x40000) 按设备占点(当没有设置LOGIN_MODE_ACCOUNT和LOGIN_MODE_GROUP时,默认按设备扣点)
LOGIN_MODE_ACCOUNT(0x80000) 按帐号占点
LOGIN_MODE_GROUP(0x100000) 按分组名占点

示例

// 使用高性能模式检查集团授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(
    NULL, NULL, application_data,
    &handle, LOGIN_MODE(BIT_MODE_REMOTE | LOGIN_MODE_HIGH_PERFORMANCE ));
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 使用Session + 长连接模式检查集团授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(
    NULL, NULL, application_data,
    &handle, LOGIN_MODE(BIT_MODE_REMOTE | LOGIN_MODE_SESSION  | LOGIN_MODE_PERSISTENT_CONN ));
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 使用内存license
BIT_HANDLE handle = NULL;
BIT_CHAR *pLicense = "lic://xxxxxxx";
BIT_STATUS status = Bit_Login(pLicense, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 先检查单机授权吗,如果没有再检查集团授权或云授权
BIT_HANDLE handle = NULL;
BIT_STATUS status = Bit_Login(NULL, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

// 检查包含指定特征项的授权
BIT_HANDLE handle = NULL;
BIT_UINT32 featureId = 1;
BIT_STATUS status = Bit_LoginEx(NULL, NULL,  featureId, NULL, application_data, &handle, BIT_MODE_AUTO);
if (status == BIT_SUCCESS) {
    // 校验成功
}

Bit_LoginByToken

BIT_STATUS Bit_LoginByToken(
    BIT_PCSTR      pUrl,
    BIT_PCSTR      pToken,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle)

帐号授权的登录接口。仅支持两种认证方式,这里是使用比特授权云平台自己产生的access_token进行认证。

参数

  • pUrl - [IN] 服务器地址,可以为空。
  • pToken - [IN] 第三方身份源颁发的token或id_token,通过前缀区分。
说明
token:xxx或xxx 使用access_token登录
  • pApplicationData - [IN] 产品识别码,记录在接口定义文件中,与产品一一对应。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。

Bit_LoginByTokenEx

BIT_STATUS Bit_LoginByTokenEx(
    BIT_PCSTR      pUrl,
    BIT_PCSTR      pBusinessGuid,
    BIT_PCSTR      pToken,
    BIT_PCSTR      pIdpGuid,
    BIT_PCSTR      pGrantType,
    BIT_UCHAR      *pApplicationData,
    BIT_HANDLE     *pHandle)

帐号授权的登录接口。仅支持两种认证方式,这里是使用OIDC协议产生的id_token认证。

参数

  • pUrl - [IN] 服务器地址,可以为空。
  • pBussinessGuid - [IN] 业务guid,在比特授权云平台获取。
  • pToken - [IN] 第三方身份源颁发的token或id_token,通过前缀区分。
说明
id_token:xxx 使用id_token登录
  • pIdpGuid - [IN] 第三方身份源guid,在比特授权云平台获取。参数为空表示使用比特授权云平台产生的token进行登录,即Bit_LoginByToken。
  • pGrantType - [IN] 授权类型。固定值为“bitanswer:idp:oidc:id_token”。
  • pApplicationData - [IN] 产品识别码,记录在接口定义文件中,与产品一一对应。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。

Bit_LoginByPassword

BIT_STATUS Bit_LoginByPassword(
    BIT_PCSTR       szURL,
    BIT_PCSTR       szBusinessGuid,
    BIT_PCSTR       szBusinessSecret,
    BIT_PCSTR       szAccount,
    BIT_PCSTR       szPassword,
    BIT_UCHAR       *pApplicationData,
    BIT_HANDLE      *pHandle);

通过用户名和密码登录帐号授权。

参数

  • szURL - [IN] 服务器地址,可以为空。
  • pBussinessGuid - [IN] 业务编号,在比特授权云平台获取。
  • szBusinessSecret [IN] 业务密钥,在比特授权云平台获取。
  • szAccount - [IN] 用户帐号。
  • szPassword - [IN] 用户密码。
  • pApplicationData - [IN] 产品识别码,记录在接口定义文件中,与产品一一对应。
  • pHandle - [OUT] 通过Login函数返回的上下文句柄。

Bit_Logout

BIT_STATUS Bit_Logout (
    BIT_HANDLE handle)

此函数用于释放上下文句柄,退出登录状态,与Login相关接口一一对应。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。

Bit_Revoke

BIT_STATUS Bit_Revoke (
    BIT_PCSTR     szURL,
    BIT_PCSTR     szSN,
    BIT_UCHAR     *pApplicationData,
    BIT_CHAR      *pRevocationInfo,
    BIT_UINT32    *pRevocationInfoSize)

从客户端迁出已激活的浮动授权码。授权码迁出后,可以用于其它的客户端。根据输入参数的不同,本函数可用于在线或离线迁出。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • szSN - [IN] 授权码(SN)字符串。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pRevocationInfo - [OUT] 迁出请求码的存储区地址。为NULL表示进行在线迁出,否则API将执行手工离线迁出,请求码应发给服务器进行确认。
  • pRevocationInfoSize - [IN/OUT] 输入时为请求码存储区大小,输出时为请求码长度。如此参数为NULL,函数将选择在线迁出。

Bit_RemoveSn

BIT_STATUS Bit_RemoveSn (
    BIT_PCSTR     szSN,
    BIT_UCHAR     *pApplicationData)

删除指定授权码在本机的授权数据。

参数

  • szSN - [IN] 授权码(SN)字符串。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

Bit_Heartbeat

BIT_STATUS Bit_Heartbeat(
    BIT_HANDLE     handle,
    BIT_UINT32     *pReconnectsNum)

手动心跳,可以无限次调用,10s只会触发一次。

注:当自动心跳停止后,调用该接口可以尝试恢复自动心跳。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • pReconnectsNum - [OUT] 保存心跳失败次数,开发上可以根据该次数决定是否退出程序。

Bit_SessionControl

BIT_STATUS Bit_SessionControl(
    BIT_PCSTR     szURL,
    BIT_PCSTR     pSessionId,
    BIT_UINT32    type,
    BIT_UCHAR     *pApplicationData,
    BIT_CHAR      *pValue,
    BIT_UINT32    *pValueLen)

控制或设置session的信息。具体使用场景可参考《浏览器并发控制》文档。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • pSessionId - [IN] Login后的sessionId,通过Bit_GetSessionInfo可以获取。
  • type - [IN] 类型。
类型 说明
SESSION_CTL_LOGOUT(0x1) 释放session
SESSION_CTL_CHECK(0x2) 触发心跳并获取sessionId状态
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pValue - [OUT] 数据缓存区。
  • pValueLen - [IN/OUT] 输入时是数据缓存区的大小,输出时是实际数据长度。

Bit_SetSessionState

BIT_STATUS Bit_SetSessionState (
    BIT_HANDLE     handle,
    BIT_UINT32     state,
    BIT_VOID       *pReserved)

设置客户端的状态为空闲状态或繁忙状态或激活状态。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • state - [IN] 设置客户端的状态选项。
说明
SESSION_STATE_UNSET 默认值,表示不设置客户端的状态,服务端根据心跳状态来维护session,心跳断开则释放session
SESSION_STATE_IDLE 表示设置客户端为空闲态,服务端会在空闲时间超过设10分钟后自动释放session
SESSION_STATE_BUSY 表示设置客户端为繁忙状态,服务端不会自动释放,直到心跳断开或者客户端主动释放
SESSION_STATE_ACTIVE 表示设置客户端为活跃状态,重新计算空闲时间
  • pReserved - [OUT] 目前保留必须传NULL。

示例

BIT_STATUS status = BIT_SUCCESS;
BIT_UINT32 reserved = 0;

if (用户正在操作) {
    status = Bit_SetSessionState (handle,  SESSION_STATE_ACTIVE,  &reserved);
} else if (用户空闲) {
    status = Bit_SetSessionState (handle,  SESSION_STATE_IDLE,  &reserved);
}

激活升级

Bit_UpdateOnline

BIT_STATUS Bit_UpdateOnline (
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData)

此函数用于与授权服务器在线连接,自动完成本地授权的升级操作。本函数需要进行网络连接。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • szSN - [IN] 该参数可以传入授权码;激活口令;帐号密码;BIT-ID序号。传入方式参考Bit_Login的szSN参数说明。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

示例

BIT_CHAR *pSn = "<授权码>";
BIT_STATUS status = Bit_UpdateOnline("",  pSn,  application_data);
if (status == BIT_SUCCESS) {
    // 激活或升级成功
}

Bit_GetRequestInfo

BIT_STATUS Bit_GetRequestInfo (
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    BINDING_TYPE   type,
    BIT_CHAR       *pRequestInfo,
    BIT_UINT32     *pRequestInfoSize)

获取当前运行环境的升级请求码,用于发起本地授权激活及升级请求。如果第一次调用返回错误码260,说明传入的pRequestInfoSize太小,可传入返回的pRequestInfoSize再重新调用一次。

参数

  • szSN - [IN] 授权码(SN)字符串。如果为空(空串或NULL)则尝试寻找所有当前本机可用的SN。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • type - [IN] 获取请求码的类型。
类型 说明
BINDING_EXISTING 使用当前绑定类型,对已激活授权码进行升级时使用
BINDING_LOCAL 使用本机指纹进行绑定
REQ_TYPE_MID 获取设备码
  • pRequestInfo - [OUT] 用于存储请求码的存储区地址。
  • pRequestInfoSize - [IN/OUT] 输入时为请求码存储区大小,输出时为请求码长度。

示例

// 获取请求串
BIT_CHAR *pSn = "<授权码>";
BIT_CHAR buff[1024] = { 0 };
BIT_UINT32 len = sizeof(buff);
BIT_STATUS status = Bit_GetRequestInfo (pSn, application_data, BINDING_LOCAL, buff, &len);
if (status == BIT_SUCCESS) {
    // 请求串保存在buff里
}

// 获取设备码
BIT_STATUS status = Bit_GetRequestInfo (NULL, application_data, REQ_TYPE_MID, buff, &len);
if (status == BIT_SUCCESS) {
    // 设备码保存在buff里
}

Bit_ApplyUpdateInfo

BIT_STATUS Bit_ApplyUpdateInfo(
    BIT_UCHAR      *pApplicationData,
    BIT_PCSTR      pUpdateInfo,
    BIT_CHAR       *pReceipt,
    BIT_UINT32     *pReceiptSize)

应用升级码完成本地授权激活或升级。本函数必须在获取请求码的同一环境下执行。

参数

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pUpdateInfo - [IN] 由授权服务器获得的本地授权升级码。
  • pReceiptInfo - [OUT] 确认码,记录升级状态,可在控制台上解析。
  • pReceiptInfoSize - [IN/OUT] 输入时为存储区大小,输出时为确认码长度。

示例

// 获取请求串
BIT_CHAR *pUpdateInfo = "<升级串>";
BIT_CHAR buff[1024] = { 0 };
BIT_UINT32 len = sizeof(buff);

BIT_STATUS status = Bit_ApplyUpdateInfo(application_data, pUpdateInfo, buff, &len);
if (status == BIT_SUCCESS) {
    // 升级串使用成功,Buff里保存的是确认串
}

Bit_ApplyUpdateInfoEx

BIT_STATUS Bit_ApplyUpdateInfoEx(
    BIT_CHAR       *pScope,
    BIT_UCHAR      *pApplicationData,
    BIT_PCSTR      pUpdateInfo,
    BIT_CHAR       *pReceipt,
    BIT_UINT32     *pReceiptSize);

应用升级码完成远程集团授权激活或升级。一般不建议使用。

参数

  • pScope - [IN] 集团服务的URL。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pUpdateInfo - [IN] 由授权服务器获得的本地授权升级码。
  • pReceiptInfo - [OUT] 确认码,记录升级状态,可在控制台上解析。pReceiptInfoSize - [IN/OUT] 输入时为存储区大小,输出时为确认码长度。

Bit_GetUpdateInfo

BIT_STATUS Bit_GetUpdateInfo (
    BIT_PCSTR      szURL,
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    BIT_PCSTR      pRequestInfo,
    BIT_CHAR       *pUpdateInfo,
    BIT_UINT32     *pUpdateInfoSize)

使用请求码与授权服务器进行连接,获取升级码。本函数需要进行网络连接。

参数

  • szURL - [IN] 自定义授权服务器地址,包括端口。如未使用自定义授权服务器则为NULL。
  • szSN - [IN] 授权码(SN)字符串。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pRequestInfo - [IN] 由获取请求码函数得到的请求码。
  • pUpdateInfo - [OUT] 由授权服务器获得的本地授权升级码。
  • pUpdateInfoSize - [IN/OUT] 输入时为存储区大小,输出时为升级码长度。

特征项操作

Bit_BatchBegin

BIT_STATUS Bit_BatchBegin(
    BIT_HANDLE       handle,
    BIT_UINT32        mode)

开启批量Query模式,调用此API后调用的所有Query相关API,全部由Bit_BatchEnd接口批量提交连接集团服务。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • mode - [IN] 批量请求的行为模式。
类型 说明
BIT_BATCH_MODE_CONTINUE (0x0) 批量提交过程中,遇到失败的接口会记录错误信息,并且继续执行
BIT_BATCH_MODE_BREAK (0x01) 批量提交过程中,遇到失败的接口会记录错误信息,直接返回错误

Bit_BatchEnd

BIT_STATUS Bit_BatchEnd(
    BIT_HANDLE       handle,
    BIT_UINT32       *pResultList,
    BIT_UINT32       *pResultListSize)

批量提交Query请求。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • pResultList - [OUT] 按顺序返回每个接口的错误码,0表示成功,非0表示失败,传NULL表示清理添加的批量数据。
  • pResultListSize - [OUT] 返回调用接口的数量。

示例

// 开启批次
Bit_BatchBegin(handle, BIT_BATCH_MODE_CONTINUE); 
BIT_UINT32 result[3] = { 0 };
BIT_UINT32 resultNum = 3;
BIT_TICKET ticket = NULL;
BIT_UINT32 capacity = 0;
Bit_QueryFeature(handle, 1, &capacity);
Bit_QueryFeatureEx2(handle, "test", 0, 10, "1.0", &ticket);
// 批量提交
Bit_BatchEnd(handle, result,& resultNum) ;
if (result[0] == BIT_SUCCESS) 
{
     // Bit_QueryFeature(1) success
}
if (result[1] == BIT_SUCCESS) 
{
     // Bit_QueryFeatureEx2 ("test") success}
}

Bit_QueryFeature

BIT_STATUS Bit_QueryFeature (
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      *pCapacity)

开发商可以对软件的某个功能进行单独授权,当程序运行该模块时,可以通过该接口检查是否可用。

对于单机授权:只检查特征项是否可用。

云/帐号/集团授权:调用该接口将占用一个用户数,用户数占满时,调用该接口会报错。开发商可以通过该方式来控制并发。(当客户端断开连接后,集团服务会自动释放占用的用户数)

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 特征项ID。
  • pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。

重复调用引用会+1,通过Bit_ReleaseFeature来减少引用,当引用减少到0时,释放占用的用户数。

示例

BIT_UINT32 featureId = 1;
BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeature(handle, featured, &capacity);
if (status == BIT_SUCCESS) {
    // 特征项1有效
}

Bit_ReleaseFeature

BIT_STATUS Bit_ReleaseFeature (
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      *pCapacity)

释放所占用的用户数,该函数和Bit_QueryFeature一一对应。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 特征项ID。
  • pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。

示例

BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeature(handle, 1,  capacity);
if (status != BIT_SUCCESS) {
    return;
}
// 执行业务逻辑

// 执行后,进行释放
status = Bit_ReleaseFeature(handle, 1, &capacity);

Bit_QueryFeatureEx

BIT_STATUS Bit_QueryFeatureEx (
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      mode,
    BIT_UINT32      required,
    BIT_UINT32      *pCapacity,
    BIT_PCSTR       xmlScope)

集团授权专用,该接口支持占用指定用户数,支持通过特征项版本进行检查。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 特征项ID。
  • mode - [IN]
类型 说明
BIT_QUERY_DEFAULT(0x0) 非阻塞占用required个用户数,如果用户数不够将返回错误
BIT_QUERY_AVAILABLE(0x01) 尽可能的占用required个用户数,如果用户数不够将占用剩余用户数
例如:Feature剩余10个用户数。Required需要占用20个,则返回成功,并占用10个用户数
BIT_QUERY_CHECK(0x02) 获取当前session占用的用户数
BIT_QUERY_TEST(0x100) 该类型可以与上面的选项组合使用,检查操作是否可以成功,但并不占用用户数
例如:(BIT_QUERY_DEFAULT| BIT_QUERY_TEST)
  • required - [IN] 请求的用户数,该接口可以调用多次,实际的占用的用户数为,每次调用的最大值。

  示例:

  第一次:required了10个。

  第二次:required了8个,此时总共占用10个。

  第三次:required了15个,此时总共占用15个。

  • pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。
  • xmlScope - [IN] 可以传入特征项版本。示例“1.0”,“2.0”,如果为空,则匹配任意版本的特征项。

示例

// 占用特征项ID为8的10个用户数:

BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeatureEx (
                                handle,
                                8,
                                BIT_QUERY_DEFAULT,
                                10,
                                &capacity,
                                NULL);
if (status == BIT_SUCCESS) {
    // 特征项“8”用户数占用成功
    // 执行业务逻辑代码
}

Bit_ReleaseFeatureEx

BIT_STATUS Bit_ReleaseFeatureEx (
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      consumed,
    BIT_UINT32      *pCapacity,
    BIT_PCSTR       xmlScope)

集团授权专用,释放指定的用户数。该接口与Bit_QueryFeatureEx对应。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 特征项ID。
  • consumed - [IN] 释放指定用户数,如果为0,表示释放全部用户数。
  • pCapacity - [OUT] 返回剩余用户数。
  • xmlScope - [IN] 可以传入特征项版本。注意:必须与Bit_QueryFeatureEx的输入的版本一致,才可以释放。

示例

// 释放占用特征项ID为8的2个用户数:

BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_ReleaseFeatureEx (
                                handle,
                                8,
                                2,
                                &capacity,
                                NULL)
if (status == BIT_SUCCESS) {
    // 用户数释放成功
}

Bit_QueryFeatureEx2

BIT_STATUS Bit_QueryFeatureEx2 (
    BIT_HANDLE     handle,
    BIT_PCSTR      featureName,
    BIT_UINT32     mode,
    BIT_UINT32     required,
    BIT_PCSTR      xmlScope,
    BIT_TICKET     *pTicket)

可以使用“特征项名称 + 特征项版本”进行用户数占用,支持队列模式。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureName - [IN] 特征项名称。
  • mode - [IN]
类型 说明
BIT_QUERY_DEFAULT(0x00) 非阻塞占用required个用户数,如果用户数不够将返回错误
BIT_QUERY_AVAILABLE(0x01) 尽可能的占用required个用户数,如果用户数不够将占用剩余用户数。
例如:Feature剩余10个用户数。Required需要占用20个,则返回成功,并占用10个用户数。
BIT_QUERY_WAIT(0x03) 加入等待队列,可以设置超时,超时后,将自动返回
BIT_QUERY_QUEUE(0x04) 加入队列,通过Bit_GetTicketInfo可以查看队列状态
BIT_QUERY_TEST(0x100) 该类型可以与上面的选项组合使用,检查操作是否可以成功,但并不占用用户数
例如:(BIT_QUERY_DEFAULT | BIT_QUERY_TEST)
BIT_QUERY_SHARED_USERS(0x200) User用户数共享。
默认情况下调用该接口的用户数是不共享的,即:第一次QueryFeatureEx2了10个用户数,第二次QueryFeatureEx2了10个用户数,总共占用20个用户数。
当设置了该属性,如果两次QueryFeature的特征项名称、版本都一致,则用户数是可以合并的,例如:两次各QueryFeatureEx2了10个用户数,则总共占用10用户数。
BIT_QUERY_SERVICE_RANDOM(0x400) IP随机。
该模式需要与Login的LOGIN_MODE_CREATE_HANDLE_ONLY配合使用。
设置了该模式后,当Login的handle没有登录过,则在连接服务器时会随机轮询IP。
默认情况下,客户端会按配置的IP顺序挨个查找,设置了该模式会随机轮询,从而减少排在前面的IP负载。
BIT_QUERY_USE_ID(0x800) 使用featureId占用feature。
设置了该模式后,featureName参数必须传入纯数字的字符串,例如“1”,客户端会将该字符串转化为featureId发送给服务端来占用featureId为1的feature。
BIT_QUERY_MID_ONLY(0x1000) 按MID占用特征项。
  • 未指定MID_ONLY时:默认优先占用已绑定MID的特征项;若不存在,则占用未绑定MID的特征项。
  • 指定MID_ONLY时:仅允许占用已绑定MID的特征项,具体场景及返回结果如下:
    • 若集团服务的所有特征项均未绑定MID,返回错误码1924。
    • 若集团服务存在绑定MID的特征项,但客户端传入的MID与集团授权绑定的MID不匹配,返回错误码416。
    • 若集团服务存在绑定MID的特征项,且客户端传入的MID与集团授权绑定的MID匹配,正常占用特征项。

版本支持:14.5.0及以上版本新增类型,需配合14.5.0及以上版本的集团服务和客户端库使用
  • required - [IN] 请求的用户数。
  • xmlScope - [IN] 可以传入特征项版本。示例:“1.0”,“2.1”。
  • pTicket - [OUT]

示例

// 占用特征项A 1.0版本,5个用户数:

BIT_TICKET ticket = NULL;
BIT_STATUS status = Bit_QueryFeatureEx2 (
                                handle,
                                "特征项A",
                                BIT_QUERY_DEFAULT,
                                5,
                                "1.0",
                                &ticket);

if (status == BIT_SUCCESS) {
    // 占用成功,执行业务逻辑
}

Bit_ReleaseFeatureEx2

BIT_STATUS Bit_ReleaseFeatureEx2 (
    BIT_TICKET      ticket,
    BIT_UINT32      consumed)

释放ticket所占用的用户数。该函数和Bit_QueryFeatureEx2一一对应。

参数

  • ticket - [IN] 通过QueryFeatureEx2返回的句柄。
  • consumed - [IN] 保留值,必须是0。

示例

BIT_STATUS status = Bit_ReleaseFeatureEx2 (ticket, 0);
if (status == BIT_SUCCESS) {
    // 释放ticket占用的用户数
}

特征项Query相关接口比较

函数 特征项ID 特征项名称 特征项版本 一次Query多个用户数 队列 用户数递增/递减
Bit_QueryFeature 支持
Bit_QueryFeatureEx 支持 支持 支持 支持
Bit_QueryFeatureEx2 支持 支持 支持 支持 支持

Bit_GetFeatureInfo2

BIT_STATUS Bit_GetFeatureInfo2 (
    BIT_HANDLE     handle,
    BIT_PCSTR      featureName,
    BIT_PCSTR      xmlScope,
    BIT_INT32      *pExpired)

检查特征项是否存在,不会占用授权码或特征项的用户数,获取特征项的剩余有效期。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureName - [IN] 产品的特征项名称。
  • xmlScope - [IN] 查找范围,可以通过 xml 格式传入版本,也可以直接传入版本的字符串。
<scope>
   <featureVersion>1.1</featureVersion>
</scope>

<!-- 或者直接输入:'1.1' -->
  • pExpired - [OUT] 返回该特征项的剩余有效期,正数代表剩余有效期,负数代表过期天数,36500代表永久有效。

Bit_GetFeatureInfoEx2

BIT_STATUS Bit_GetFeatureInfoEx2(
    BIT_HANDLE     handle,
    BIT_PCSTR      featureName,
    BIT_PCSTR      xmlScope,
    BIT_CHAR       *pFeatureInfo,
    BIT_UINT32     *pFeatureInfoSize);

获取指定feature的信息,以XML格式返回。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureName - [IN] 产品的特征项名称。
  • xmlScope - [IN] 查找范围,可以通过 xml 格式传入版本,也可以直接传入版本的字符串。
<scope>
   <featureVersion>1.1</featureVersion>
</scope>

<!-- 或者直接输入:'1.1' -->
  • pFeatureInfo - [OUT] feature信息存储区地址。
  • pFeatureInfoSize - [IN/OUT] 会话存储区大小。

Bit_GetTicketInfo

BIT_STATUS Bit_GetTicketInfo(
    BIT_TICKET      ticket,
    BIT_UINT32      type,
    BIT_CHAR        *pXmlInfo,
    BIT_UINT32      *pSize)

获取ticket信息。

参数

  • ticket - [IN] Bit_QueryFeatureEx2产生的句柄。
  • type - [IN] 类型。
类型 说明
BIT_TICKET_TYPE_USERS(0x1) 获取ticket占用的用户数
BIT_TICKET_TYPE_CHECK(0x2) 检查当前ticket的状态
BIT_TICKET_TYPE_INFO(0x3) 获取当前ticket的信息
  • pXmlInfo - [OUT] ticket信息存储区地址。
  • pSize - [IN/OUT] 输入时为存储区长度,输出时为返回信息的长度。

BIT_TICKET_TYPE_INFO返回的xml信息如下

<?xml version='1.0' encoding='UTF-8'?>
<ticketInfo>
    <requestInfo>
        <fId>1</fId>                                 <!-- 请求feature的id -->
        <fName>test</fName>                          <!-- 请求feature的名称 -->
        <requestUserNumber>10</requestUserNumber>    <!-- 请求feature的点数 -->
        <requestFversion>1.0</requestFversion>       <!-- 请求feature的版本 -->
    </requestInfo>
    <occupationInfos>
    <occupationInfo>
        <snInfo>
            <sn>4HAYJUOA7I******</sn>                <!-- 占用的是那个sn下的feature -->
            <controlType>Local/group</controlType>   <!-- 占用的feature类型 -->
        <snInfo/>
        <occFversion>1.0</occFversion>               <!-- 占用feature的版本 -->
        <occUserNumber>3</occUserNumber>             <!-- 占用feature的点数 -->
    </occupationInfo>
    <occupationInfo>
        <snInfo>
            <sn>4HAYJUOA7IAADUAB</sn>                <!-- 占用的是那个sn下的feature -->
            <controlType>Local/group</controlType>   <!-- 占用的feature类型 -->
        <snInfo/>
        <occFversion>2.0</occFversion>               <!-- 占用feature的版本 -->
        <occUserNumber>7</occUserNumber>             <!-- 占用feature的点数 -->
    </occupationInfo>
    </occupationInfos>
</ticketInfo>

Bit_ConvertFeature

BIT_STATUS Bit_ConvertFeature(
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      para1,
    BIT_UINT32      para2,
    BIT_UINT32      para3,
    BIT_UINT32      para4,
    BIT_UINT32      *pResult);

使用“算法”类型的特征项对输入参数进行变换操作,得到唯一对应的4字节结果。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 产品的特征项ID。
  • para1 - [IN] 变换输入因子1。
  • para2 - [IN] 变换输入因子2。
  • para3 - [IN] 变换输入因子3。
  • para4 - [IN] 变换输入因子4。
  • pResult - [OUT] 变换结果。

示例

BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UINT32 par1 = 0x1234;
BIT_UINT32 par2 = 0x2234;
BIT_UINT32 par3 = 0x3234;
BIT_UINT32 par4 = 0x4234;
BIT_UINT32    convertResult;
BIT_STATUS status = Bit_ConvertFeature(handle, featureId, par1, par2, par3, par4, &convertResult);

Bit_EncryptFeature

BIT_STATUS Bit_EncryptFeature( 
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_VOID        *pPlainBuffer,
    BIT_VOID        *pCipherBuffer,
    BIT_UINT32      dataBufferSize);

使用“密钥”类型的特征项对输入的明文进行加密,返回密文结果。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 产品的特征项ID。
  • pPlainBuffer - [IN] 数据缓存区地址,用于存储明文数据。
  • pCipherBuffer - [OUT] 数据缓存区地址,用于存储密文数据。
  • bufferSize - [IN] 数据长度,最大长度为256字节。

示例

BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UCHAR plainbuffer[256] = "this is plain data";
BIT_UCHAR cipherbuffer[256] = { 0 };
BIT_UINT32 dataLen = strlen(plainbuffer);

BIT_STATUS status = Bit_EncryptFeature(handle, featureId, plainbuffer, cipherbuffer, dataLen);

Bit_DecryptFeature

BIT_STATUS Bit_DecryptFeature(
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_VOID        *pCipherBuffer,
    BIT_VOID        *pPlainBuffer,
    BIT_UINT32      dataBufferSize);

使用“密钥”类型的特征项对输入的密文进行解密,返回明文结果。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 产品的特征项ID。
  • pCipherBuffer - [IN] 数据缓存区地址,用于存储密文数据。
  • pPlainBuffer - [OUT] 数据缓存区地址,用于存储明文数据。
  • bufferSize - [IN] 数据长度,最大长度为256字节。

示例

BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UCHAR plainbuffer[256] =  { 0 };
BIT_UCHAR cipherbuffer[256] ="xxxxxxxxx";
BIT_UINT32 dataLen = 16;

BIT_STATUS status = Bit_DecryptFeature(handle, featureId, cipherbuffer, plainbuffer, dataLen);

Bit_ReadFeature

BIT_STATUS Bit_ReadFeature(
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      *pFeatureValue);

读取特征项的数据内容,可用于“只读”和“读写”特征类型。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 产品的特征项ID。
  • pFeatureValue - [OUT] 特征项数据缓存区地址,用于存储读出的数据。

Bit_WriteFeature

BIT_STATUS Bit_WriteFeature(
    BIT_HANDLE      handle,
    BIT_UINT32      featureId,
    BIT_UINT32      featureValue);

更新“读写”类型的特征项的数据内容。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • featureId - [IN] 产品的特征项ID。
  • featureValue - [IN] 特征项数据值。

配置项操作

Bit_GetDataItem

BIT_STATUS Bit_GetDataItem (
    BIT_HANDLE     handle,
    BIT_PCSTR      szDataItemName,
    BIT_VOID       *pDataItemValue,
    BIT_UINT32     *pDataItemValueSize)

读取指定的配置项数据。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • szDataItemName - [IN] 数据项名称,名称最大长度为128字节。
  • pDataItemValue - [OUT] 数据缓存区地址,数据最大长度为1024字节。
  • pDataItemValueSize - [IN/OUT] 数据项长度。

Bit_SetDataItem

BIT_STATUS Bit_SetDataItem (
    BIT_HANDLE     handle,
    BIT_PCSTR      szDataItemName,
    BIT_VOID       *pDataItemValue,
    BIT_UINT32     dataItemValueSize)

创建或更新配置项。如果相同名称的配置项存在,则会更新其中的数据;否则将添加新的授权码配置项。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • szDataItemName - [IN] 数据项名称,名称最大长度为128字节。
  • pDataItemValue - [IN] 数据项数据缓存区地址,数据最大长度为1024字节。
  • dataItemValueSize - [IN] 数据项长度。

Bit_GetDataItemNum

BIT_STATUS Bit_GetDataItemNum (
    BIT_HANDLE      handle,
    BIT_UINT32      *pNum)

此函数用于获取可访问配置项的数量,一般用于配置项的枚举操作。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • pNum - [OUT] 可访问的数据项总数,包括了所有可以访问到的产品、模版及授权码的数据项。

Bit_GetDataItemName

BIT_STATUS Bit_GetDataItemName (
    BIT_HANDLE      handle,
    BIT_UINT32      index,
    BIT_CHAR        *pDataItemName,
    BIT_UINT32      *pDataItemNameSize)

根据配置项索引获取其名称,一般用于配置项的枚举操作。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • index - [IN] 数据项索引。
  • pDataItemName - [OUT] 用于存储数据项名称的存储区地址。
  • pDataItemNameSize - [IN/OUT] 数据项名称存储区大小。

Bit_RemoveDataItem

BIT_STATUS Bit_RemoveDataItem (
    BIT_HANDLE     handle,
    BIT_PCSTR      szDataItemName)

删除指定的配置项。该操作无法删除通过控制台设置的产品配置项或模版配置项。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • szDataItemName - [IN] 数据项名称,名称最大长度为128字节。

信息获取

Bit_GetSessionInfo

BIT_STATUS Bit_GetSessionInfo (
    BIT_HANDLE      handle,
    SESSION_TYPE    type,
    BIT_CHAR        *pSessionInfo,
    BIT_UINT32      *pSessionInfoSize)

获取当前会话信息,以字符串形式返回。根据获取的内容不同,返回结果可能是XML格式或非XML格式。返回数据中的日期项已根据客户端的本地时区进行调整。如果Login时未指定SN,返回串为当前系统所有可用SN的综合结果。

当函数返回BIT_ERR_BUFFER_SMALL时,pSessionInfoSize保存的是实际数据的大小。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。
  • type - [IN] 获取会话信息类型。
类型 说明
XML_TYPE_SN_INFO 获取当前会话中授权码的授权信息,以XML形式返回。未做限制的授权项将不会返回
XML_TYPE_FEATURE_INFO 获取当前会话中授权码的特征项信息,以XML形式返回
XML_TYPE_DATA_INFO 获取当前会话中授权码的配置项信息,以XML形式返回
BIT_SERVER_ADDRESS 授权服务器IP地址。单机授权不支持
BIT_SERVER_TIME 授权服务器系统时间。如果是本地授权,将返回本机系统时间
BIT_CONTROL_TYPE 授权类型。是以逗号分隔的以下几种类型的组合:Group(集团授权), Smart(智能连接), Float(可浮动), Demo(演示授权), USB(U盘授权), Force(强制认证)
BIT_VOLUME_NUMBER 允许使用的机器数量
BIT_START_DATE 授权开始日期,Unlimited表示无限制
BIT_END_DATE 授权结束日期,Unlimited表示无限制
BIT_EXPIRATION_DAYS 授权有效期,单位为天。有效期从激活时间算起,Unlimited表示无限制
BIT_USAGE_NUMBER 最大使用次数
BIT_CONSUMED_USAGE_NUMBER 对于设定最大使用次数的授权码,返回当前使用次数
BIT_ACTIVATE_DATE 授权码激活时间
BIT_USER_LIMIT 集团授权用户数,返回纯数字。对其它方式的授权返回0
BIT_LAST_UPDATE_DATE 最后与服务器连接时间
BIT_MAX_OFFLINE_MINUTES 强制认证最大离线时间(分钟),返回Unlimited表示无强制认证
BIT_SESSION_ID 获取当前会话的字符串sessionId
BIT_SERVER_HB_STATUS 获取心跳状态,pSessionInfo无数据,状态通过函数返回值区分
BIT_TICKET_LIST_BIN 获取TICKET列表
  • pSessionInfo - [OUT] 会话信息存储区地址。可以为NULL,此时仅用于获取存储区大小。
  • pSessionInfoSize - [IN/OUT] 会话存储区大小。

示例

BIT_UINT32 buffSize = 10240;
BIT_CHAR *pBuff = (BIT_CHAR *)malloc(buffSize);
if (pBuff == NULL) {
   return;
}
memset(pBuff, 0, buffSize);
BIT_STATUS status = Bit_GetSessionInfo (handle,
                                        XML_TYPE_SN_INFO,
                                        pBuff,
                                        & buffSize);

if (status == BIT_ERR_BUFFER_SMALL) {
    free(pBuff); 
    pBuff = malloc(buffSize + 1);
    memset(pBuff, 0, buffSize + 1);

    status = Bit_GetSessionInfo (handle,
                                XML_TYPE_SN_INFO,
                                pBuff,
                                &buffSize);
}

if (status == BIT_SUCCESS)  {
    // pBuff 保存的是需要查找的数据
}
free(pBuff);

Bit_GetInfo

BIT_STATUS Bit_GetInfo (
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    INFO_TYPE      type,
    BIT_CHAR       *pInfo,
    BIT_UINT32     *pInfoSize)

获取本地授权信息。

如果要获取集团授权的信息,则szSN输入“@bit://ip:port”,会获取集团授权信息(仅支持type=BIT_INFO_SN)。

由于集团授权需要登录才能获取信息,而登录需要占用用户数,此方式提供了一个在不登录的情况下来获取集团授权信息。

参数

  • szSN - [IN] 输入要检索的SN,如果为NULL,表示获取所有SN。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • type - [IN] 类型。
类型 说明
BIT_INFO_SERVER_ADDRESS 获取局域网内的集团授权服务器地址列表
BIT_INFO_SN 获取本机已激活的授权码列表
BIT_INFO_SN_FEATURE 获取本机已激活授权码的特征项列表
BIT_INFO_SN_LICENSE 获取本机已激活授权码的授权信息
BIT_INFO_UPDATE_ERROR 获取指定授权码的升级错误详细信息。是否存在详细信息由授权码类型及错误类型决定
BIT_INFO_CONFIG 获取当前产品的配置文件信息
BIT_INFO_TOKEN_LIST 获取当前机器上可用的BIT-ID列表信息
  • pInfo - [OUT] 数据缓存区地址。
  • pInfoSize - [IN/OUT] 输入时是数据缓存区大小,输出时是实际数据的长度。

Bit_GetServerInfo

BIT_STATUS Bit_GeServerInfo(
    BIT_PCSTR           szURL,
    BIT_PCSTR           szSN,
    BIT_PCSTR           xmlScope,
    BIT_UCHAR           *pApplicationData,
    BIT_INFO_EX_TYPE    type,
    BIT_CHAR            *pServerInfo,
    BIT_UINT32          *pServerInfoSize);

获取集团服务的license信息,数据以XML格式返回。调用此函数前客户端不需要执行登录操作。

参数

  • szURL - [IN] 指定集团授权服务器地址,包括端口。
  • szSN - [IN] 授权码(SN)字符串。
  • xmlScope- [IN] 查询指定特征项的信息,以xml格式传入。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • type- [IN] 获取信息类型。
类型 说明
BIT_SERVER_INFO_SN 获取集团服务的授权码列表
BIT_SERVER_INFO_SN_FEATURE 获取集团服务的授权码的特征项列表
BIT_SERVER_INFO_SN_LICENSE 获取集团服务的授权码的授权信息
BIT_SERVER_INFO_FEATURE_LICENSE 获取集团服务的特征项的授权信息
BIT_SERVER_INFO_SN_USERS 获取集团服务被占用的SN的用户信息
BIT_SERVER_INFO_FEATURE_USERS 获取集团服务被占用的feature的用户信息
  • pServiceLicenseInfo - [OUT] 用于存储返回XML信息数据的存储区地址。
  • pServiceLicenseInfoSize - [IN/OUT] 输入的存储区长度。

Bit_GetVersion

BIT_STATUS Bit_GetVersion (
    BIT_UINT32      *pVersion)

获取客户端安全库版本号。

参数

  • pVersion - [OUT] 客户端安全库版本号。

Bit_GetNextHandle

BIT_STATUS Bit_GetNextHandle(
    BIT_HANDLE      handle,
    BIT_HANDLE      *pNextHandle)

用来遍历当前进程内的handle。

参数

  • handle – [IN] 当前handle。如果传NULL,pNextHandle返回第一个handle。
  • pNextHandle – [OUT] 返回handle指向的下一个handle,如果返回为NULL,则表示已经到了末尾。

示例

BIT_HANDLE nextHandle = NULL;
while (Bit_GetNextHandle(nextHandle , &nextHandle) == BIT_SUCCESS && nextHandle != NULL) {
    // 使用nextHandle处理业务逻辑
}

Bit_TestBitService

BIT_STATUS Bit_TestBitService (
    BIT_PCSTR       szURL,
    BIT_PCSTR       szSN,
    BIT_UINT32      featureId,
    BIT_UCHAR       *pApplicationData)

测试集团授权的特征项是否可用,不会占用授权码或特征项的用户数。

参数

  • szURL - [IN] 自定义授权服务器地址,需包括端口。如未使用自定义授权服务器则为NULL。
  • szSN - [IN] 授权码(SN)字符串。如果为空(空字符串""或NULL)则尝试寻找所有当前本机可用的SN。
  • featureId - [IN] 登录授权所需要包含的特征项ID。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

注意:szSN和featureId为二选一互斥关系,需遵循以下规则

  • 指定授权码:当szSN不为NULL或空字符串("")时,featureId必须设为0。
  • 指定特征项:当featureId不为0时,szSN必须设为NULL或空字符串("")。
  • 特殊情况:允许szSN为NULL或空字符串,且featureId为0。

Bit_GetProductPath

BIT_STATUS Bit_GetProductPath(
    BIT_UCHAR      *pApplicationData,
    BIT_CHAR        *pPath,
    BIT_UINT32       lenPath);

获取授权存储目录。

参数

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pPath - [OUT] 授权存储目录。
  • lenPath - [IN] 指定授权目录pPath数据长度。建议值:Windows:PATH_MAX (260) Linux/Unix:PATH_MAX (4096)。

Bit_getLastError

BIT_STATUS Bit_getLastError();

获取上一个API调用返回的错误码。

参数

属性设置

Bit_SetAttr

BIT_STATUS Bit_SetAttr (
    BIT_HANDLE      handle,
    BIT_UINT32      type,
    BIT_VOID        *pValue)

设置全局配置或当前会话的配置。

参数

  • handle - [IN] 通过Login函数返回的上下文句柄。如果传NULL,表示设置全局,不为NULL表示设置该会话。
  • type - [IN] 类型。
类型 说明
ATTR_HB_STOPED_CALLBACK(0x1) void (T_HbStopedCallback)(BIT_HANDLE, void pData) 心跳停止回调。
心跳停止后,会回调该函数,开发商可以在该函数里检测是否与授权服务断开
ATTR_WAIT_TIMEOUT(0x2) BIT_UINT32 * 队列等待超时。
最小16秒,最大15天,默认是0,表示无限等待
ATTR_RETRY_COUNT(0x3) BIT_UINT32 * 心跳连接重试次数。
当心跳时候,总的重试次数
0:表示无限重试,直到客户端超时或授权失效,才会停止,默认是0
-1:表示无限重试,无论客户端是否超时或授权失效,都会重试
ATTR_RETRY_INTERVAL(0x4) BIT_UINT32 * 心跳连接重试间隔。
心跳失败后,下一次的重试的间隔。最小10秒,最大4小时,默认10秒
ATTR_CONNECT_TIMEOUT(0x5) BIT_UINT32 * 建立连接超时。
最小1秒,最大32秒,默认3秒
ATTR_CONNECT_RETRY_COUNT(0x6) BIT_UINT32 * 连接重试次数。
最小0次,最大10次,默认3次
ATTR_HB_RETRY_FAILED_CALLBACK(0x7) void (T_HbRetryFailedCallback)(BIT_HANDLE, BIT_STATUS, void pData) 心跳重试失败回调
ATTR_HB_INTERVAL(0x8) BIT_UINT32 * 心跳间隔。
最小30秒,默认由服务端控制
ATTR_HB_AUTO_ENABLE(0x9) BIT_UINT32 * 是否启动自动心跳
ATTR_HB_TIMEOUT(0x10) BIT_UINT32 * 心跳周期,超过该周期将被踢出。
集团服务端也可以设置心跳周期,该周期会覆盖服务端的设置
最小60秒,最大30天,默认由服务端控制
ATTR_HB_RETRY_FAILED_CALLBACK_DATA(0x11) void * 触发心跳失败回调时,会将该值传递到回调函数的最后一个参数
ATTR_HB_STOPED_CALLBACK_DATA(0x12) void * 触发心跳停止回调时,会将该值传递到回调函数的最后一个参数
ATTR_HB_STOPED_CALLBACK_EX(0x13) void (T_HbStopedCallbackEx)(BIT_HANDLE, BIT_TICKET, BIT_STATUS, void pData); 特征项的心跳失败回调
ATTR_HB_STOPED_CALLBACK_EX_DATA(0x14) void * 触发特征项心跳失败回调时,会将该值传递到回调函数的最后一个参数
ATTR_HB_RETRY_CALLBACK_EX(0x15) void (T_HbRetryFailedCallbackEx)(BIT_HANDLE, BIT_TICKET, BIT_STATUS, void pData); 特征项的心跳停止回调函数
ATTR_HB_RETRY_CALLBACK_EX_DATA(0x16) void * 触发特征项心跳停止回调时,会将该值传递到回调函数的最后一个参数
ATTR_SET_LOGIN_MODE(0x17) BIT_UINT32 * 设置login的mode值
ATTR_UNSET_LOGIN_MODE(0x18) BIT_UINT32 * 取消login的mode值
ATTR_DISABLE_ENV(0x19) BIT_BOOL * 禁用环境变量
传1表示禁用,设置了该属性后,客户端库将不再读取环境变量
ATTR_CURLOPT_TIMEOUT(0x1A) BIT_UINT32 * 自定义receiveTimeout
最小16s,最大64s,默认32s
ATTR_HB_RETRY_FAILED_CALLBACK_EX2(0x1B) void (T_HbRetryFailedCallback)(BIT_HANDLE, BIT_TICKET, BIT_STATUS, BIT_UINT32, BIT_UINT32, BIT_UINT32 pData)) 心跳重试失败回调函数
参数:
BIT_HANDLE handle login 返回的handle
BIT_TICKET ticket query 返回的ticket
BIT_STATUS status 心跳失败返回的错误码
BIT_UINT32 currentNumber 当前是第几次回调
BIT_UINT32 maxNumber 最大回调次数
BIT_UINT32 interval 每次回调的间隔,单位秒
VOID \pData 开发商自定义数据,须通过ATTR_HB_RETRY_CALLBACK_EX2_DATA传入
ATTR_HB_RETRY_FAILED_CALLBACK_EX2_DATA(0x1C) void * 触发Ex2的心跳失败回调时,会将该值传递到回调函数的最后一个参数
ATTR_HB_RETRY_SUCCESS_CALLBACK(0x1D) void (*T_HbRetrySuccessCallbackEx2)(BIT_HANDLE, BIT_TICKET, BIT_UINT32, BIT_UINT32, BIT_UINT32 *pDate) 心跳重试成功回调函数
参数:
BIT_HANDLE handle login 返回的handle
BIT_TICKET ticket query 返回的ticket
BIT_UINT32 currentNumber 当前是第几次回调
BIT_UINT32 maxNumber 最大回调次数
BIT_UINT32 interval 每次回调的间隔,单位秒
VOID \pData 开发商自定义数据,须通过ATTR_HB_RETRY_SUCCESS_CALLBACK_DATA传入
ATTR_HB_RETRY_SUCCESS_CALLBACK_DATA(0x1E) void * 触发心跳成功回调时,会将该值传递到回调函数的最后一个参数
ATTR_ENABLE_DIAGS_LOG(0x1F) BIT_UINT32 * 控制诊断log的生成
默认值为0
1表示开启,0表示禁用,禁用后环境变量不生效
ATTR_HB_DEFAULT_STOPED_CALLBACK(0x20) BIT_BOOL * 控制心跳停止程序自动退出功能
  • 0:表示禁用(默认)
  • 1:表示启动,若经过最大次重试次数后仍未重新建立连接,应用程序会默认终止运行,并输出错误信息:“许可证丢失,无法重新连接”(UNIX系统输出至stderr,Windows系统弹出对话框)
如果注册了ATTR_HB_STOPED_CALLBACK或ATTR_HB_STOPED_CALLBACK_EX默认退出行为将不再生效

handle不能为NULL

版本支持:14.5.0及以上版本新增类型
  • pValue - [IN] 不同类型,对应了不同的值。

示例

// 设置队列等待超时为20秒

BIT_UINT32 value = 20;
BIT_STATUS status = Bit_SetAttr (handle, ATTR_WAIT_TIMEOUT, &value);
if (status == BIT_SUCCESS) {
    // 设置成功
}

Bit_SetProxy

BIT_STATUS Bit_SetProxy (
    BIT_UCHAR      *pApplicationData,
    BIT_PCSTR      szHostName,
    BIT_UINT32     nPort,
    BIT_PCSTR      szUserID,
    BIT_PCSTR      szPassword)

设置代理服务的地址和端口。

参数

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • szHostName - [IN] 代理服务所在机器的IP地址。

说明:

  • 14.3.0及以上版本,将该参数扩展为支持Type:HostName格式,其中Type表示服务器类型,可取值为ws或bit,ws表示云授权服务器,bit表示集团授权服务器。
  • 为保持向后兼容,若不指定Type://前缀,则默认视为ws类型。
  • nPort - [IN] 代理服务开启的通讯端口。
  • szUserID - [IN] 代理服务所在机器的用户名。
  • szPassword - [IN] 代理服务所在机器的密码。

Bit_SetCustomInfo

BIT_STATUS Bit_SetCustomInfo (
    BIT_UINT32      infoId,
    BIT_VOID      *pInfoData,
    BIT_UINT32      infoDataSize)

设置客户端运行自定义信息,需要在程序的最开始调用。

参数

  • infoId - [IN] 自定义信息类型。
类型 说明
CUSTOM_CLIENT_ID(0x1) 字符串 自定义终端标识,配置后该自定义标识会发送给服务器并用于今后的机器指纹匹配

注意:必须同时将CUSTOM_OPTION_CLOUD_CLIENTID选项设置为启用状态,此配置才能生效
CUSTOM_ACCOUNT_LOCAL(0x2) 字符串 自定义客户端用户帐号,用于集团服务标识客户端用户
CUSTOM_COMMENT(0x3) 字符串 自定义客户端登录注释,用于集团服务管理员获取用户登录请求信息
CUSTOM_OPTION(0x4) BIT_UINT32 按位进行操作
  • CUSTOM_OPTION_SD1_FIRST (0x1) - 仅限Android选项,只检查第一张SD卡
  • - CUSTOM_OPTION_HIDE_FOLDER (0x2) - 隐藏默认的BitAnswer文件夹
  • CUSTOM_OPTION_SOAP_USERNAME (0x4) - 机器用户信息添加到soap头中
  • CUSTOM_OPTION_CONFINED_LINK (0x8) - 取消连接次数限制(1800)
  • CUSTOM_OPTION_BINARY_NAME(0x10) – 客户向集团服务发送进程名
  • CUSTOM_OPTION_DOCKER_INFO(0x40) – 客户端向服务端发送设备运行于Docker环境时的标识信息
  • CUSTOM_OPTION_CLOUD_CLIENTID(0x20) – 用于启用CUSTOM_CLIENT_ID(自定义终端标识)功能,开启后,系统会将已设置的CUSTOM_CLIENT_ID作为该设备的唯一标识,用于今后的机器指纹匹配与管理(需配合14.5.0及以上版本的集团服务和客户端库使用)
示例:
既要取消连接次数限制,又要隐藏BitAnswer目录,则传入:(CUSTOM_OPTION_HIDE_FOLDER| CUSTOM_OPTION_CONFINED_LINK)
CUSTOM_PRODUCT_CODE(0x6) 字符串 自定义授权目录名称
CUSTOM_ACCOUNT_DEVELOPER(0x7) 字符串 自定义登录帐号,用于帐号授权 (既使用account登录,又设置了此选项,则直接忽略
CUSTOM_VENDOR_CODE(0x8) 字符串 自定义开发商信息目前仅用于自定义环境变量名称
CUSTOM_HTTP_HEADER(0x9) 字符串 类似于“auth:xxxx”,普遍用于自定义认证信息 自定义HTTP头,所有联网的请求都会自带这个请求头
CUSTOM_GROUP_NAME(0xA) 字符串 设置自定义分组名
当开发商需要按照自定义的分组扣点(比如:部门,角色,窗口名等),可以设置此选项,并结合Bit_Login的LOGIN_MODE设置扣点方式
  • pInfoData - [IN] 自定义信息的存储地址。
  • infoDataSize - [IN] 自定义信息长度。针对CUSTOM_OPTION类型,该参数应为BIT_UINT32类型大小。

示例

// 设置字符串类型
// 自定义终端标识
BIT_PCSTR clientID = "Machine-123";
BIT_STATUS status = Bit_ SetCustomInfo (CUSTOM_CLIENT_ID, clientID, strlen(clientID));
if (status == BIT_SUCCESS) {
    // 设置成功
}

// 设置BIT_UINT32类型
// 机器用户信息添加到soap头中
BIT_UINT32 optSoapUserName = 4;
BIT_STATUS status = Bit_ SetCustomInfo (CUSTOM_OPTION, & optSoapUserName, sizeof(optSoapUserName));
if (status == BIT_SUCCESS) {
    // 设置成功
}

Bit_SetRootPath

BIT_STATUS Bit_SetRootPath (
    BIT_PCSTR szPath)

设置授权文件的存储路径。

参数

  • szPath - [IN] 数据缓存区地址,用于存储授权文件的路径。

Bit_SetLocalServer

BIT_STATUS Bit_SetLocalServer (
    BIT_UCHAR      *pApplicationData,
    BIT_PCSTR       szHostName,
    BIT_UINT32      nPort,
    BIT_UINT32      nTimeoutSecondes)

设置集团服务的地址和端口。

参数

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • szHostName - [IN] 集团服务所安装机器的IP地址。
  • nPort - [IN] 客户端应用程序的通讯端口,默认为8273。
  • nTimeoutSecondes - [IN] 客户端超时秒数。

借出操作

Bit_GetBorrowRequest

BIT_STATUS Bit_GetBorrowRequest(
    BIT_PCSTR      szSN,
    BIT_UCHAR      *pApplicationData,
    BIT_UINT32     nDurationDays,
    BIT_CHAR       *pRequestInfo,
    BIT_UINT32     *pRequestInfoSize)

获取借出请求串,用来离线借出。

参数

  • szSN - [IN] 指定要借出的SN,如果为NULL,找满足条件的第一个SN。
  • pApplicationData - [IN] 产品识别码,在Bitanswer SDK头文件里。
  • nDurationDays - [IN] 借出时间。100年代表永久借出(分发),0表示产生归还串。
  • pRequestInfo - [OUT] 借出请求串缓存区地址。
  • pRequestInfoSize - [IN/OUT] 输入的是缓存区大小,输出的是示例数据的大小。

Bit_GetBorrowFeatureRequest

BIT_STATUS Bit_GetBorrowFeatureRequest(
    BIT_PCSTR      pReserve,
    BIT_UCHAR      *pApplicationData,
    BIT_UINT32     nDurationDays,
    BIT_PCSTR      pBorrowScope,
    BIT_CHAR       *pRequestInfo,
    BIT_UINT32     *pRequestInfoSize)

获取借出请求串,该接口支持指定特征项借出。

参数

  • pReserve - [IN] 保留,必须是NULL。
  • pApplicationData - [IN] 产品识别码,在Bitanswer SDK头文件里。
  • nDurationDays - [IN] 借出时间。
  • pBorrowScope - [IN] xml结构。
  • pRequestInfo - [OUT] 借出请求串缓存区地址。
  • pRequestInfoSize - [IN/OUT] 输入的是缓存区大小,输出的是示例数据的大小。

Scope示例

<features>
    <feature id='' days=''/>
    <feature id='' days=''/>
    …
</features>

Bit_CheckOutSn / Bit_CheckOutSnEx

BIT_STATUS Bit_CheckOutSn(
    BIT_PCSTR      szURL,
    BIT_UINT32     featureId,
    BIT_UCHAR      *pApplicationData,
    BIT_UINT32     nDurationDays);

BIT_STATUS Bit_CheckOutSnEx(
    BIT_PCSTR      szURL,
    BIT_UINT32     featureId,
    BIT_PCSTR      pScope,
    BIT_UCHAR      *pApplicationData,
    BIT_UINT32     nDurationDays);

从授权服务器在线借出一个完整的授权码,以允许客户端服务器单独使用。被借出的授权码必须具有可借出属性,并在客户端成功借出后减少一个可用用户数。被借出的用户数在到期后将自动返还给服务器。

参数

  • szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
  • featured - [IN] 指定借出授权码需要包含的特征项ID,为0则寻找第一个可借出授权码。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pScope - [IN] xml结构,允许传NULL。
  • nDurationDays - [IN] 借出时间,单位为天。借出时间不能超过被借出集团授权的强制认证周期或有效期。

Scope示例

<scope>
    <type>ws</type>
    <sn>xxx</sn>
    <featureVersion>xxx</featureVersion>
</scope>

<!--
说明:
type:借出类型。目前仅支持ws,表示从外网借出(针对云授权和集团授权)
featureVersion:借出的特征项版本
sn:指定借出的SN
-->

Bit_CheckOut

BIT_STATUS Bit_CheckOut(
    BIT_PCSTR      szURL,
    BIT_PCSTR      pScope,
    BIT_PCSTR      pFeatureList,
    BIT_UCHAR      *pApplicationData,
    BIT_UINT32     nDurationDays)

从授权服务器在线借出授权码或者特征项。

参数

  • szURL 集团授权服务器地址,包括端口。如输入NULL,则从本地配置文件或者环境变量读取服务地址。
  • pScope xml结构,允许传NULL。
<scope>
    <type>ws</type>
    <sn>xxx</sn>
</scope>

<!--
说明:
type:借出类型。目前仅支持ws,表示从外网借出(针对云授权和集团授权)
sn:指定借出的SN
-->
  • pFeatureList xml结构,指定借出的特征项列表,如果不传则借出整个SN。
<features>
    <feature id='1' ver='2.0'  days='10' required='0|1'/>
    <!-- id:特征项编号,ver:特征项版本,days:借出时间,   required:0可选,1必选(默认是1) -->
    <feature id='10'/>
</features>

当feature指定了借出时间,则会覆盖nDurationDays该时间,没有指定,则借出nDurationDays天。

借出feature时,如果指定了版本,则直接大于等于借出版本的特征项,只借一个,如果没有指定版本,则该特征项的所有版本都借出一个。

  • pApplicationData 产品识别码。记录在接口定义文件中,与产品一一对应。
  • nDurationDays 借出时间,单位为天,最大不超过100年。
// 借出特征项1和特征项2,各借10天
BIT_STATUS status = Bit_CheckOut(
    "bit://127.0.0.1:8273",
    NULL, 
    "<features><feature id=\"1\"/><feature id=\"2\"/></features>",
    application_data,
    10);

if (status == BIT_SUCCESS) {
    // 借出成功
}

// 借出特征项1(5天) 和 特征项2(2天)
BIT_STATUS status = Bit_CheckOut(
    "bit://127.0.0.1:8273",
    NULL, 
    "<features><feature id=\"1\"  days=\"5\"/><feature id=\"2\" days=\"2\"/></features>",
    application_data,
    5);

if (status == BIT_SUCCESS) {
    // 借出成功
}

Bit_CheckOutFeatures

BIT_STATUS Bit_CheckOutFeatures(
    BIT_PCSTR       szURL,
    BIT_UCHAR       *pApplicationData,
    BIT_UINT32      *pFeatureList,
    BIT_UINT32      nFeatureInList,
    BIT_UINT32      nDurationDays);

从集团授权服务器借出一组特征项,这些特征项必须包含在同一个授权码中。被借出的集团授权码必须具有可借出属性,并在客户端成功借出后减少一个可用用户数。被借出的用户数在到期后将自动返还给集团服务器。

参数

  • szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pFeatureList - [IN] 要借出的特征项列表。
  • nFeatureInList - [IN] 要借出的特征项数量。
  • nDurationDays - [IN] 借出时间,单位为天,最大不超过100年。

示例

// 借出特征项1和特征项2,借3天
BIT_UINT32 borrowFeature[2] = { 0 };
borrowFeature[0] = 1;
borrowFeature[1] = 2;

BIT_STATUS status = Bit_CheckOutFeatures("bit://127.0.0.1:8273",
                                          application_data,
                                          borrowFeature,
                                          2,
                                          3);

if (status == BIT_SUCCESS) {
    // 借出成功
} else {
    // 借出失败
}

Bit_CheckIn

BIT_STATUS Bit_CheckIn(
    BIT_PCSTR      szURL,
    BIT_UINT32     featureId,
    BIT_UCHAR      *pApplicationData)

提前返还从集团授权服务器借出的授权。要提前返还授权,该授权码必须具有允许提前返还属性。

参数

  • szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
  • featureId - [IN] 指定要返还授权码需要包含的特征项ID,为0则寻找第一个可返还授权码。
  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

Bit_CheckInEx

BIT_STATUS Bit_CheckInEx(
    BIT_PCSTR      szURL,
    BIT_UINT32     featureId,
    BIT_PCSTR      szScope,
    BIT_UCHAR      *pApplicationData)

提前返还从授权服务器借出的授权。要提前返还授权,该授权码必须具有允许提前返还属性。

参数

  • szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
  • featureId - [IN] 指定要返还授权码需要包含的特征项ID,为0则寻找第一个可返还授权码。
  • xmlScope - [IN] xml结构,允许传NULL。
<scope>
    <type>ws</type>   <!-- type:归还类型,ws表示归还到云授权服务,默认是归还到集团授权服务 -->
</scope>

用于指定借出的参数,格式:wsxxxx,type设定为ws时表示从云授权服务器借出和归还。

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。

Bit_ApplyBorrowInfo

BIT_STATUS Bit_ApplyBorrowInfo(
    BIT_UCHAR         *pApplicationData,
    BIT_PCSTR         pBorrowInfo)

客户端应用离线借出串,ApplyUpdateInfo可以兼容该接口。

参数

  • pApplicationData - [IN] 产品识别码。记录在接口定义文件中,与产品一一对应。
  • pBorrowInfo - [IN] 借出请求串。