Files
2026-09-28 15:28:50 +08:00

926 lines
38 KiB
C++

/*
*
* CBitAnswer 类的定义,开发人员可以直接调用操作授权
*
* BitAnswer Ltd. (C) 2009 - ?. All rights reserved.
*
*/
#pragma once
#include <string>
using namespace std;
#if !defined(WITH_AKSTYPES) && !defined(WITH_OEFTYPES)
#if defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)
typedef unsigned __int64 BIT_UINT64;
typedef signed __int64 BIT_INT64;
#else
typedef unsigned long long BIT_UINT64;
typedef signed long long BIT_INT64;
#endif
#if defined(_MSC_VER)
typedef unsigned long BIT_UINT32;
typedef signed long BIT_INT32;
#else
typedef unsigned int BIT_UINT32;
typedef signed int BIT_INT32;
#endif
typedef unsigned short BIT_USHORT;
typedef signed short BIT_SHORT;
typedef unsigned char BIT_UCHAR;
typedef char BIT_CHAR;
typedef const char *BIT_PCSTR;
#endif
typedef void *BIT_HANDLE;
typedef void BIT_VOID;
typedef enum BIT_ERROR_CODES BIT_STATUS;
#if defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) || defined(__BORLANDC__)
#define BIT_CALLCONV __stdcall
#else
#define BIT_CALLCONV
#endif
#if _MSC_VER >= 1900
#pragma comment(lib, "legacy_stdio_definitions.lib")
#endif
#ifdef _WIN64
#ifdef _MT
#ifdef _DLL
#pragma comment(lib, "00003564_000029CA_md_x64.lib")
#else
#pragma comment(lib, "00003564_000029CA_mt_x64.lib")
#endif
#else
#pragma comment(lib, "00003564_000029CA_mt_x64.lib")
#endif
#elif defined(_WIN32) || defined(WIN32)
#ifdef _MT
#ifdef _DLL
#pragma comment(lib, "00003564_000029CA_md.lib")
#else
#pragma comment(lib, "00003564_000029CA_mt.lib")
#endif
#else
#pragma comment(lib, "00003564_000029CA_mt.lib")
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** BITANSWER 下面部分不要修改 */
/** The Application Data is confidential information, please keep it carefully! */
static BIT_UCHAR m_application_data[] = {
0x40,0x80,0xbc,0x0c,0x96,0xd3,0x29,0x2f,0xa8,0x06,0xcd,0x14,0xe7,0x6d,0xba,0xe8,
0xec,0x0d,0x92,0xc1,0x33,0xc3,0x95,0x34,0xfa,0x12,0xc1,0x76,0x79,0x39,0x4d,0xa6,
0x7d,0xe2,0x7e,0xdf,0x3b,0xc4,0x84,0x25,0xf2,0x8e,0x9a,0x9a,0x7f,0x35,0x39,0x81,
0x56,0xd4,0xd5,0x75,0xc9,0xd9,0x47,0x46,0x7d,0xb0,0x57,0xb5,0x72,0xe3,0x88,0x1e,
0x47,0x6e,0x8b,0xd2,0x56,0x0a,0x92,0xa7,0xd9,0x20,0x7e,0x4a,0x80,0x96,0x40,0x88,
0x8a,0xbf,0x1f,0x77,0x72,0x44,0x14,0xc0,0xe9,0x05,0x79,0x29,0x87,0x03,0x63,0x40,
0xe4,0xe7,0x67,0x1b,0x56,0x76,0x24,0x48,0x92,0x0c,0x3c,0xe5,0xa2,0x65,0x4f,0x71,
0x26,0x04,0x48,0xe2,0x5e,0x32,0xd7,0xea,0x27,0x68,0xeb,0xac,0x51,0x19,0xa0,0x8a,
0x95,0x99,0x20,0x98,0xf6,0x5a,0x7a,0x2b,0xf7,0x07,0x95,0x6d,0xdd,0x3d,0x40,0x81,
0xb5,0xfd,0x6a,0x45,0xcb,0x66,0x80,0xac,0xb9,0xac,0xf8,0x86,0xf0,0x60,0xa1,0x4c,
0xdf,0x0f,0x5a,0x33,0x72,0x28,0x7a,0xc2,0x35,0xb7,0x94,0x18,0x28,0x5c,0xed,0x88,
0x26,0x58,0x65,0x64,0xfa,0xfa,0xda,0x32,0x02,0x28,0x58,0x22,0x44,0xd2,0xcd
};
typedef enum _FEATURE_TYPE
{
BIT_FEATURE_CONVERT = 0x03,
BIT_FEATURE_READ_ONLY = 0x04,
BIT_FEATURE_READ_WRITE = 0x05,
BIT_FEATURE_CRYPTION = 0x09,
BIT_FEATURE_USER = 0x0a,
BIT_FEATURE_UNIFIED = 0x0b,
BIT_FEATURE_NONE = 0xFFFFFFFF,
} FEATURE_TYPE;
typedef enum _LOGIN_MODE
{
BIT_MODE_LOCAL = 0x01,
BIT_MODE_REMOTE = 0x02,
BIT_MODE_AUTO = 0x03,
BIT_MODE_AUTO_CACHE = 0x07
} LOGIN_MODE;
#define LOGIN_MODE_CACHE 4
#define LOGIN_MODE_USB 8
#define LOGIN_MODE_PROCESS 0x10
typedef enum _BINDING_TYPE
{
BINDING_EXISTING = 0,
BINDING_LOCAL = 1,
BINDING_USB_STORAGE = 2
} BINDING_TYPE;
typedef enum _BIT_INFO_TYPE
{
BIT_INFO_SERVER_ADDRESS = 0,
BIT_INFO_SN = 1,
BIT_INFO_SN_FEATURE = 2,
BIT_INFO_SN_LICENSE = 3,
BIT_INFO_UPDATE_ERROR = 4,
BIT_INFO_CONFIG = 5,
BIT_INFO_TOKEN_LIST = 7
} BIT_INFO_TYPE;
#pragma pack(1)
typedef struct _BIT_DATE_TIME
{
BIT_USHORT year;
BIT_UCHAR month;
BIT_UCHAR dayOfMonth;
BIT_UCHAR hour;
BIT_UCHAR minute;
BIT_UCHAR second;
BIT_UCHAR unused;
} BIT_DATE_TIME, *PBIT_DATE_TIME;
typedef struct _BIT_FEATURE_INFO
{
BIT_UINT32 featureId;
FEATURE_TYPE type;
BIT_CHAR featureName[128];
BIT_DATE_TIME endDateTime;
BIT_UINT32 expirationDays;
BIT_UINT32 users;
} BIT_FEATURE_INFO, *PBIT_FEATURE_INFO;
#pragma pack()
/**
* @defgroup Run-time API Status Codes
*
* @{
*/
typedef enum BIT_ERROR_CODES
{
BIT_SUCCESS = 0x0000,
/** client side error */
BIT_ERR_NETWORK = 0x0101,
BIT_ERR_WRONG_HANDLE = 0x0102,
BIT_ERR_INVALID_PARAMETER = 0x0103,
BIT_ERR_BUFFER_SMALL = 0x0104,
BIT_ERR_APPLICATION_DATA = 0x0105,
BIT_ERR_HEARTBEAT_THREAD = 0x0106,
BIT_ERR_SERVER_BUSY = 0x0107,
BIT_ERR_SERVER_DOWN = 0x0108,
BIT_ERR_RETURN_NULL = 0x0109,
BIT_ERR_CMD_TYPE = 0x010A,
BIT_ERR_BADSTRING = 0x010B,
BIT_ERR_HANDLE_NULL = 0x010C,
BIT_ERR_INVALID_OFF_LINE_SN = 0x010E,
BIT_ERR_OFF_LINE_SN_DENIED = 0x010F,
BIT_ERR_SN_FILE_NOT_FOUND = 0x0110,
BIT_ERR_OFF_LINE_SN_SIGNATURE = 0x0111,
BIT_ERR_RUN_TIME_ERROR = 0x0112,
BIT_ERR_CHECK_THREAD = 0x0113,
BIT_ERR_LICENSE_NOT_FOUND = 0x0114,
BIT_ERR_UNEXPECTED = 0x0115,
BIT_ERR_DOWNLOAD_UNCOMPLETE = 0x0116,
BIT_ERR_POINTS_OVER = 0x0117,
BIT_ERR_TLV_BUF_OVER = 0x0118,
BIT_ERR_MORE_USB_DISK = 0x0119,
BIT_ERR_NO_USB_DISK = 0x011A,
BIT_ERR_GET_MID = 0x011B,
BIT_ERR_SN_INVALID = 0x011C,
BIT_ERR_TIME_TAMPER = 0x011D,
BIT_ERR_NOT_ENCRYPTED = 0x011E,
BIT_ERR_KEY_NOT_MATCH = 0x011F,
BIT_ERR_BINDINGPOLICY_NOT_MATCHED = 0x0120,
BIT_ERR_LOAD_EXTENSION_FAILED = 0x0121,
BIT_ERR_MALLOC_FAILED = 0x0122,
BIT_ERR_REVOKED = 0x0123,
BIT_ERR_EXTENSION_EXIST = 0x0124,
BIT_ERR_INIT_DBPATH = 0x0125,
BIT_ERR_LOCAL_HOST_NULL = 0x0126,
BIT_ERR_WRONG_SERVER_TYPE = 0x0127,
BIT_ERR_SOAP = 0x0128,
BIT_ERR_UDP = 0x0129,
BIT_ERR_UPDATE_CODE = 0x012A,
BIT_ERR_UPDATE_INFO_VERSION = 0x012B,
BIT_ERR_TYPE_NOT_MATCHED = 0x012C,
BIT_ERR_INVALID_URL = 0x012D,
BIT_ERR_UPDATE_INFO_FORMAT = 0x012E,
BIT_ERR_SN_EMPTY = 0x012F,
BIT_ERR_SN_ENTRY_NOT_FOUND = 0x0131,
BIT_ERR_FUNCTION_NOT_SUPPORT = 0x0132,
BIT_ERR_ACCESS_ERROR = 0x0151,
BIT_ERR_ACCESS_DENIED = 0x0152,
BIT_ERR_ACCESS_NOT_FOUND = 0x0153,
BIT_ERR_TOKEN_NOT_SUPPORT = 0x0181,
BIT_ERR_TOKEN_NOT_FOUND = 0x0182,
BIT_ERR_TOKEN_ACCESS_FAILED = 0x0183,
BIT_ERR_TOKEN_READ_FAILED = 0x0184,
BIT_ERR_TOKEN_WRITE_FAILED = 0x0185,
BIT_ERR_TOKEN_NOT_INIT = 0x0186,
BIT_ERR_TOKEN_ALREADY_INIT = 0x0187,
/** server side error */
BIT_ERR_NEED_LOGIN = 0x0201,
BIT_ERR_NULL_PARAMETER = 0x0202,
BIT_ERR_SRV_INVALID_PARAMETER = 0x0203,
BIT_ERR_UNKNOWN_EXCEPTION = 0x0204,
BIT_ERR_UNKNOWN_VAR = 0x0205,
BIT_ERR_PRODUCT_DISABLED = 0x0206,
BIT_ERR_DEVELOPER_DISABLED = 0x0207,
BIT_ERR_WEB_SERVICE_STOP = 0x0208,
BIT_ERR_PRODUCT_NOT_MATCH = 0x020A,
BIT_ERR_SERVER_KICKOUT = 0x0212,
BIT_ERR_SERVER_DENY = 0x0213,
BIT_ERR_OVER_USERS_IN_IP = 0x0214,
BIT_ERR_STRING_LENGH = 0x0301,
BIT_ERR_BADCOMMAND = 0x0302,
BIT_ERR_CMD_LENGTH = 0x0303,
BIT_ERR_FEATURE_ADDR = 0x0501,
BIT_ERR_FEATURE_ZERO = 0x0502,
BIT_ERR_FEATURE_NOT_FOUND = 0x0503,
BIT_ERR_FEATURE_TYPE_NOT_MATCH = 0x0504,
BIT_ERR_FEATURE_TYPE_PARAM = 0x0505,
BIT_ERR_FEATURE_EXPIRATION = 0x0509,
BIT_ERR_DATA_NOT_FOUND = 0x0601,
BIT_ERR_DATA_INDEX_OVER_LENGTH = 0x0602,
BIT_ERR_DATA_OVER_MAX_SIZE = 0x0603,
BIT_ERR_DATA_OVER_MAX_COUNT = 0x0604,
BIT_ERR_SN_LICENSE_EXPIRATION = 0x0701,
BIT_ERR_SN_USER_NUMBER_OVER = 0x0702,
BIT_ERR_SN_VOLUME_NUMBER_OVER = 0x0703,
BIT_ERR_SN_EXECUTION_COUNTER_OVER = 0x0704,
BIT_ERR_SN_DISABLED = 0x0705,
BIT_ERR_SN_NOT_FOUND = 0x0706,
BIT_ERR_SN_OVER_MAX_SESSION_COUNT = 0x0707,
BIT_ERR_SN_EXECUTE_MORE_COMMAND = 0x0708,
BIT_ERR_SN_DISABLED_FOR_ATTACK = 0x0709,
BIT_ERR_MISSING_USB = 0x070D,
BIT_ERR_SN_INVALID_FORMAT = 0x070E,
BIT_ERR_CAPACITY_EXHAUSTED = 0x0712,
BIT_ERR_CAPACITY_NOT_USED = 0x0713,
BIT_ERR_SN_TYPE_NOT_MATCH = 0x0714,
BIT_ERR_SN_OFFLINE_EXPIRED = 0x0780,
BIT_ERR_SN_MID_CHECK = 0x0781,
BIT_ERR_MACHINE_DISABLED = 0x0782,
BIT_ERR_NO_AVAILABLE_SN = 0x0783,
BIT_ERR_NO_AVAILABLE_MODULE = 0x0784,
BIT_ERR_DEMO_UPDATE = 0x0785,
BIT_ERR_VM_DISABLED = 0x0786,
BIT_ERR_SN_INVALID_STATUS = 0x0787,
BIT_ERR_OFF_LINE_ERR = 0x0801,
BIT_ERR_OFF_LINE = 0x0802,
BIT_ERR_DOWNLOAD_OVER = 0x0803,
BIT_ERR_SIGNATURE = 0x0804,
BIT_ERR_OFF_LINE_UPDATE_AGAIN = 0x0806,
BIT_ERR_WRONG_LOCAL_TIME = 0x0807,
BIT_ERR_NO_AVAILABLE_UPDATE = 0x0808,
BIT_ERR_LOCAL_SERVICE_UPDATE = 0x0809,
BIT_ERR_PRODUCT_NOT_FOUND = 0x0901,
BIT_ERR_DEVELOPER_NOT_FOUND = 0x0902,
BIT_ERR_INVALID_MID_FROMAT = 0x0903,
BIT_ERR_COMMAND_NOT_SUPPORT = 0x0904,
BIT_ERR_VERSION_NOT_SUPPORT = 0x0905,
BIT_ERR_BINDING_INFO = 0x0906,
BIT_ERR_CMD_DATA_LENGTH = 0x0907,
BIT_ERR_TABLE_SIGN = 0x090A,
BIT_ERR_NOT_INIT = 0x090B,
/** for bit service */
BIT_ERR_BIT_SERVICER_SIGN = 0x0A01,
BIT_ERR_CONFIG_FILE = 0x0A03,
BIT_ERR_INVALID_USER = 0x0A04,
BIT_ERR_OLD_PASSWORD_WRONG = 0x0A06,
BIT_ERR_PASSWORD_NOT_MATCHED = 0x0A07,
BIT_ERR_UPLOAD_FAILURE = 0x0A09,
BIT_ERR_LOAD_EXTENTION = 0x0A11,
BIT_ERR_PAGE_NOT_FOUND = 0x0A12,
BIT_ERR_SN_EXISTED = 0x0A13,
BIT_ERR_OLD_EXTENTION = 0x0A14,
BIT_ERR_SRV_ROLE_INVALID = 0x0A15,
BIT_ERR_SRV_ROLE_EXIST = 0x0A16
}BIT_STATUS;
#define BIT_DATA_ITEM_NAME_MAX_LEN 128
#define BIT_DATA_ITEM_MAX_LEN 1024
#define BIT_CIPH_DATA_MAX_LEN 256
/**
* @defgroup SESSION_TYPE of session information in XML or plain format
*
* @{
*/
typedef enum _SESSION_TYPE
{
XML_TYPE_SN_INFO = 3,
XML_TYPE_FEATURE_INFO = 4,
BIT_SERVER_ADDRESS = 0x101,
BIT_SERVER_TIME = 0x201,
BIT_CONTROL_TYPE = 0x302,
BIT_VOLUME_NUMBER = 0x303,
BIT_START_DATE = 0x304,
BIT_END_DATE = 0x305,
BIT_EXPIRATION_DAYS = 0x306,
BIT_USAGE_NUMBER = 0x307,
BIT_CONSUMED_USAGE_NUMBER = 0x308,
BIT_ACTIVATE_DATE = 0x30A,
BIT_USER_LIMIT = 0x30B,
BIT_LAST_UPDATE_DATE = 0x30C,
BIT_MAX_OFFLINE_MINUTES = 0x30D,
BIT_NEXT_CONNECT_DATE = 0x30E,
BIT_MID_BINARY = 0x1001
} SESSION_TYPE;
/**
* @}
*/
/**
* @defgroup The Basic Run-time API
*
* @{
*/
BIT_STATUS BIT_CALLCONV Bit_Login(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData,
BIT_HANDLE *pHandle,
LOGIN_MODE mode);
BIT_STATUS BIT_CALLCONV Bit_LoginEx(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UINT32 featureId,
BIT_PCSTR szReserved,
BIT_UCHAR *pApplicationData,
BIT_HANDLE *pHandle,
LOGIN_MODE mode);
BIT_STATUS BIT_CALLCONV Bit_Logout(
BIT_HANDLE handle);
BIT_STATUS BIT_CALLCONV Bit_ReadFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pFeatureValue);
BIT_STATUS BIT_CALLCONV Bit_WriteFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 featureValue);
BIT_STATUS BIT_CALLCONV Bit_ConvertFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 para1,
BIT_UINT32 para2,
BIT_UINT32 para3,
BIT_UINT32 para4,
BIT_UINT32 *pResult);
BIT_STATUS BIT_CALLCONV Bit_EncryptFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_VOID *pPlainBuffer,
BIT_VOID *pCipherBuffer,
BIT_UINT32 dataBufferSize);
BIT_STATUS BIT_CALLCONV Bit_DecryptFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_VOID *pCipherBuffer,
BIT_VOID *pPlainBuffer,
BIT_UINT32 dataBufferSize);
BIT_STATUS BIT_CALLCONV Bit_QueryFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pCapacity);
BIT_STATUS BIT_CALLCONV Bit_ReleaseFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pCapacity);
BIT_STATUS BIT_CALLCONV Bit_SetDataItem(
BIT_HANDLE handle,
BIT_PCSTR szDataItemName,
BIT_VOID *pDataItemValue,
BIT_UINT32 dataItemValueSize);
BIT_STATUS BIT_CALLCONV Bit_RemoveDataItem(
BIT_HANDLE handle,
BIT_PCSTR szDataItemName);
BIT_STATUS BIT_CALLCONV Bit_GetDataItem(
BIT_HANDLE handle,
BIT_PCSTR szDataItemName,
BIT_VOID *pDataItemValue,
BIT_UINT32 *pDataItemValueSize);
BIT_STATUS BIT_CALLCONV Bit_GetDataItemNum(
BIT_HANDLE handle,
BIT_UINT32 *pNum);
BIT_STATUS BIT_CALLCONV Bit_GetDataItemName(
BIT_HANDLE handle,
BIT_UINT32 index,
BIT_CHAR *pDataItemName,
BIT_UINT32 *pDataItemNameSize);
BIT_STATUS BIT_CALLCONV Bit_GetFeatureInfo(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_FEATURE_INFO *pFeatureInfo);
BIT_STATUS BIT_CALLCONV Bit_GetSessionInfo(
BIT_HANDLE handle,
SESSION_TYPE type,
BIT_CHAR *pSessionInfo,
BIT_UINT32 *pSessionInfoSize);
BIT_STATUS BIT_CALLCONV Bit_GetRequestInfo(
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData,
BINDING_TYPE type,
BIT_CHAR *pRequestInfo,
BIT_UINT32 *pRrequestInfoSize);
BIT_STATUS BIT_CALLCONV Bit_Revoke(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData,
BIT_CHAR *pRevocationInfo,
BIT_UINT32 *pRevocationInfoSize);
BIT_STATUS BIT_CALLCONV Bit_GetUpdateInfo(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData,
BIT_PCSTR pRequestInfo,
BIT_CHAR *pUpdateInfo,
BIT_UINT32 *pUpdateInfoSize);
BIT_STATUS BIT_CALLCONV Bit_ApplyUpdateInfo(
BIT_UCHAR *pApplicationData,
BIT_PCSTR pUpdateInfo,
BIT_CHAR *pReceiptInfo,
BIT_UINT32 *pReceiptInfoSize);
BIT_STATUS BIT_CALLCONV Bit_UpdateOnline(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData);
BIT_STATUS BIT_CALLCONV Bit_SetRootPath(
BIT_PCSTR szPath);
BIT_STATUS BIT_CALLCONV Bit_GetProductPath(
BIT_UCHAR *pApplicationData,
BIT_CHAR *buf,
BIT_UINT32 lenBuf);
BIT_STATUS BIT_CALLCONV Bit_SetLocalServer(
BIT_UCHAR *pApplicationData,
BIT_PCSTR szHostName,
BIT_UINT32 nPort,
BIT_UINT32 nTimeoutSeconds);
BIT_STATUS BIT_CALLCONV Bit_SetProxy(
BIT_UCHAR *pApplicationData,
BIT_PCSTR szHostName,
BIT_UINT32 nPort,
BIT_PCSTR szUserID,
BIT_PCSTR szPassword);
BIT_STATUS BIT_CALLCONV Bit_GetInfo(
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData,
BIT_INFO_TYPE type,
BIT_CHAR *pInfo,
BIT_UINT32 *pInfoSize);
BIT_STATUS BIT_CALLCONV Bit_GetVersion(
BIT_UINT32 *pVersion);
BIT_STATUS BIT_CALLCONV Bit_RemoveSn(
BIT_PCSTR szSN,
BIT_UCHAR *pApplicationData);
BIT_STATUS BIT_CALLCONV Bit_CheckOutSn(
BIT_PCSTR szURL,
BIT_UINT32 featureId,
BIT_UCHAR *pApplicationData,
BIT_UINT32 nDurationDays);
BIT_STATUS BIT_CALLCONV Bit_CheckOutFeatures(
BIT_PCSTR szURL,
BIT_UCHAR *pApplicationData,
BIT_UINT32 *pFeatureList,
BIT_UINT32 nFeatureInList,
BIT_UINT32 nDurationDays);
BIT_STATUS BIT_CALLCONV Bit_CheckIn(
BIT_PCSTR szURL,
BIT_UINT32 featureId,
BIT_UCHAR *pApplicationData);
BIT_STATUS BIT_CALLCONV Bit_TestBitService(
BIT_PCSTR szURL,
BIT_PCSTR szSN,
BIT_UINT32 featureId,
BIT_UCHAR *pApplicationData);
// 以上部分不要修改
#ifdef __cplusplus
} // extern "C"
#endif
class CBitAnswer
{
private:
BIT_HANDLE m_handle;
BIT_UINT32 m_ref;
BIT_PCSTR m_sn;
LOGIN_MODE m_mode;
public:
CBitAnswer(void);
~CBitAnswer(void);
/**
* 进行授权登陆,获取操作句柄。必须在除升级函数之外的其它操作前执行。根据登录模式的不同可能需要连接授权服务器。
* 成功调用一次Login后,对应要调用一次Logout
* 如果多次调用Login,没有调用Logout,除了第一次Login之外,其他的Login不会真正的连接授权文件或服务器
* 对于同一台机器,当登陆到云授权时,最大允许10个进程处于Login状态
* 参数:
* szSN - [IN] 授权码(SN),由比特平台产生。无论是单机授权还是集团授权,当SN不为NULL时,都表示只登陆这个授权码
* 当SN为空时,根据配置文件会按照以下顺序查找:
* 先查本地单机授权码,
* 然后查找云授权码(如果本机记住云授权码)
* 最后查找集团授权码,如果集团服务中存在多个授权码,均可用,服务会根据使用情况自动分配用户数
* mode - [IN] 登陆模式。 包含以下类型:
* BIT_MODE_LOCAL // 登陆本地授权,即单机离线授权码、浮动授权码和演示授权码
* BIT_MODE_REMOTE // 登陆授权,如果授权码失效,会自动连接服务器,并返回连接服务器的错误码
* BIT_MODE_AUTO // 登陆服务器,并自动升级授权
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS Login(BIT_PCSTR szSN, LOGIN_MODE mode);
/**
* 指定特征项进行授权登录,不连接授权服务器
*
* 参数:
* szSN - [IN] 同Login
* featureId - [IN] 特征项ID
* mode - [IN] 同Login
*/
BIT_STATUS LoginEx(BIT_PCSTR szSN, BIT_UINT32 featureId, LOGIN_MODE mode);
/**
* 此函数用于释放上下文句柄,退出登录状态。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS Logout();
/**
* 此函数用于读取特征项的数据内容,可用于“只读”和“读写”特征类型。
* 参数:
* featureId - [IN] 产品的特征项ID。
* pFeatureValue - [OUT] 特征项数据缓存区地址,用于存储读出的数据。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS ReadFeature(BIT_UINT32 featureId, BIT_UINT32 *pFeatureValue);
/**
* 此函数用于更新“读写”类型的特征项的数据内容。
* 参数:
* featureId - [IN] 产品的特征项ID。
* featureValue - [IN] 特征项数据值。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS WriteFeature(BIT_UINT32 featureId, BIT_UINT32 featureValue);
/**
* 此函数用于使用“算法”类型的特征项对输入参数进行变换操作,得到唯一对应的4字节结果。
* 参数:
* featureId - [IN] 产品的特征项ID。
* para1 - [IN] 变换输入因子1
* para2 - [IN] 变换输入因子2
* para3 - [IN] 变换输入因子3
* para4 - [IN] 变换输入因子4
* pResult - [OUT] 变换结果。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS ConvertFeature(BIT_UINT32 featureId, BIT_UINT32 para1, BIT_UINT32 para2, BIT_UINT32 para3, BIT_UINT32 para4, BIT_UINT32 * pResult);
/**
* 此函数用于使用“密钥”类型的特征项对输入的明文进行加密,返回密文结果。
* 参数:
* featureId - [IN] 产品的特征项ID。
* pPlainBuffer - [IN] 数据缓存区地址,用于存储明文数据。
* pCipherBuffer - [OUT] 数据缓存区地址,用于存储密文数据。
* bufferSize - [IN] 数据长度,最大长度为256字节。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS EncryptFeature(BIT_UINT32 featureId, BIT_UCHAR * pPlainBuffer, BIT_UCHAR * pCipherBuffer, BIT_UINT32 bufferSize);
/**
* 此函数用于使用“密钥”类型的特征项对输入的密文进行解密,返回明文结果。
* 参数:
* featureId - [IN] 产品的特征项ID。
* pCipherBuffer - [IN] 数据缓存区地址,用于存储密文数据。
* pPlainBuffer - [OUT] 数据缓存区地址,用于存储明文数据。
* bufferSize - [IN] 数据长度,最大长度为256字节。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS DecryptFeature(BIT_UINT32 featureId, BIT_UCHAR * pCipherBuffer, BIT_UCHAR * pPlainBuffer, BIT_UINT32 bufferSize);
/**
* 获取“用户”类型特征项的用户数,并返回剩余容量。如没有可分配用户数,则返回1810错误。
* 参数:
* featureId - [IN] 产品的特征项ID。
* pCapacity - [OUT] 特征项剩余容量。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS QueryFeature(BIT_UINT32 featureId, BIT_UINT32 *pCapacity);
/**
* 释放“用户”类型特征项的用户数,并返回剩余容量。
* 参数:
* featureId - [IN] 产品的特征项ID。
* pCapacity - [OUT] 特征项剩余容量。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS ReleaseFeature(BIT_UINT32 featureId, BIT_UINT32 *pCapacity);
/**
* 创建或更新配置项。如果相同名称的配置项存在,则会更新其中的数据;否则将添加新的授权码配置项。
* 参数:
* szDataItemName - [IN] 数据项名称,名称最大长度为128字节。
* pDataItemValue - [IN] 数据项数据缓存区地址,数据最大长度为1024字节。
* dataItemValueSize - [IN] 数据项长度。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS SetDataItem(BIT_PCSTR szDataItemName, BIT_PCSTR szDataValue);
/**
* 删除指定的配置项。该操作无法删除在比特平台上设置的产品配置项或模版配置项。
* 参数:
* szDataItemName - [IN] 数据项名称,名称最大长度为128字节。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS RemoveDataItem(BIT_PCSTR szDataItemName);
/**
* 读取指定的配置项数据。
* 参数:
* szDataItemName - [IN] 数据项名称,名称最大长度为128字节。
* dataValue - [OUT] 数据项数据缓存区地址,数据最大长度为1024字节。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetDataItem(BIT_PCSTR szDataItemName, string& dataValue);
/**
* 此函数用于获取可访问配置项的数量,一般用于配置项的枚举操作。
* 参数:
* pNumber - [OUT] 可访问的数据项总数,包括了所有可以访问到的产品、模版及授权码的数据项。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetDataItemNum(BIT_UINT32 *pNumber);
/**
* 根据配置项索引获取其名称,一般用于配置项的枚举操作。
* 参数:
* index - [IN] 数据项索引。
* dataName - [OUT] 用于存储数据项名称的存储区地址。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetDataItemName(BIT_UINT32 index, string &dataName);
/**
* 获取当前会话信息。根据获取的内容不同,此函数返回的数据可能是XML格式或非XML格式。
* 参数:
* type - [IN] 获取会话信息类型。
* sessionInfo - [OUT] 返回的结果存放位置。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetSessionInfo(SESSION_TYPE type, string &sessionInfo);
/**
* 获取当前运行环境的升级请求码,用于发起本地授权激活及升级请求。
* 参数:
* szSN - [IN] 授权码(SN),由比特平台产生,不能为空,必须输入
* type - [IN] 本地授权绑定类型。 包含以下类型:
* BINDING_EXISTING // 使用当前绑定类型,仅适用于授权码已经存在于本机或USB存储器
* BINDING_LOCAL // 使用本机指纹进行绑定
* BINDING_USB_STORAGE // 使用USB存储器进行绑定
* requestInfo - [OUT] 用于存储请求码的存储区地址。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetRequestInfo(BIT_PCSTR szSN, BINDING_TYPE type, string& requestInfo);
/**
* 使用请求码与授权服务器进行连接,获取升级码。本函数需要进行网络连接。
* 参数:
* szSN - [IN] 授权码(SN),由比特平台产生。
* pRequestInfo - [IN] 由获取请求码函数得到的请求码。
* updateInfo - [OUT] 由授权服务器获得的本地授权升级码。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetUpdateInfo(BIT_PCSTR szSN, BIT_PCSTR requestInfo, string &updateInfo);
/**
* 应用升级码完成本地授权激活或升级。本函数必须在获取请求码的同一环境下执行。
* 参数:
* pUpdateInfo - [IN] 由授权服务器获得的本地授权升级码。
* receiptInfo - [OUT] 确认码,记录升级状态,可由比特平台进行解析。为NULL表示不返回确认码
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS ApplyUpdateInfo(BIT_PCSTR pUpdateInfo, string& receiptInfo);
/**
* 此函数用于与授权服务器在线连接,自动完成本地授权的升级操作。本函数需要进行网络连接。
* 参数:
* szSN - [IN] 授权码(SN),为空表示升级第一个可用的授权码,但是如果授权码是迁出状态,不能为空
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS UpdateOnline(BIT_PCSTR szSN);
/**
* 此函数用于完成授权的在线迁出,迁出以后,其他机器就可以用了。本函数需要进行网络连接。
* 参数:
* szSN - [IN] 授权码(SN),为空表示迁出第一个可用的授权码。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS RevokeOnline(BIT_PCSTR szSN);
/**
* 此函数用于与产生授权的离线迁出请求码。本函数可能需要进行网络连接。
* 参数:
* szSN - [IN] 授权码(SN),不能为空
* revokeInfo - [OUT] 存放迁出请求码的存储区地址
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS Revoke(BIT_PCSTR szSN, string& revokeInfo);
/**
* 此函数用于获取授权码或集团服务等的相关信息,调用前不需要登录。
* 参数:
* szSerialNum - [IN] 授权码
* type - [IN] 获取信息类型。
* info - [OUT] 存放信息结果的存储区地址
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetInfo(BIT_PCSTR szSN, BIT_INFO_TYPE type, string& info);
/**
* 此函数用于设置集团服务的地址和端口。
* 参数:
* szHostName - [IN] 集团服务器的地址,可以为域名或IP
* nPort - [IN] 集团服务器的端口
* nTimeoutSeconds - [IN] 连接服务器超时时间,单位秒
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS SetLocalServer(BIT_PCSTR szHostName, BIT_UINT32 nPort, BIT_UINT32 nTimeoutSeconds);
/**
* 此函数用于设置代理服务的地址和端口。
* 参数:
* szHostName - [IN] 代理服务器的地址,可以为域名或IP
* nPort - [IN] 代理服务器的端口
* szUserID - [IN] 连接代理服务器的用户名
* szPassword - [IN] 连接代理服务器的密码
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS SetProxy(BIT_PCSTR szHostName, BIT_UINT32 nPort, BIT_PCSTR szUserID, BIT_PCSTR szPassword);
/**
* 此函数用于获取授权存储目录
* 参数:
* path - [OUT] 产品的存储路径
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetProductPath(string &path);
/**
* 此函数用于删除本地授权。
* 参数:
* szSN - [IN] 授权码
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS RemoveSn(BIT_PCSTR szSN);
/**
* 获取授权信息及使用环境信息,数据以XML格式返回。调用此函数前客户端不需要执行登录操作。
* 参数:
* szSN - [IN] 授权码(SN)字符串
* type - [IN] 获取信息类型。 包含以下类型:
* BIT_INFO_SERVER_ADDRESS // 获取局域网内的集团授权服务器地址列表
* BIT_INFO_SN // 获取本机已激活的授权码列表
* BIT_INFO_SN_FEATURE // 获取本机已激活授权码的特征项列表
* BIT_INFO_SN_LICENSE // 获取本机已激活授权码的授权信息
* BIT_INFO_UPDATE_ERROR // 获取指定授权码的升级错误详细信息。是否存在详细信息由授权码类型及错误类型决定
* pInfo - [OUT] 用于存储返回XML信息数据的存储区地址。
* pInfoSize - [IN/OUT] 输入的存储区长度。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetInfo(BIT_PCSTR szSN, BIT_INFO_TYPE type, BIT_CHAR *pInfo, BIT_UINT32 *pInfoSize);
/**
* 获取客户端安全库版本号。
* 参数:
* pVersion - [OUT] 客户端安全库版本号。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS GetVersion(BIT_UINT32 *pVersion);
/**
* 从集团授权服务器借出一个完整的授权码,以允许客户端脱离集团服务器单独使用。
* 被借出的集团授权码必须具有可借出属性,并在客户端成功借出后减少一个可用用户数。
* 被借出的用户数在到期后将自动返还给集团服务器。
* 参数:
* szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
* featureId - [IN] 指定借出授权码需要包含的特征项ID,为 0 则寻找第一个可借出授权码。
* nDurationDays - [IN] 借出时间,单位为天。借出时间不能超过被借出集团授权的强制认证周期或有效期。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS CheckOutSn(BIT_PCSTR szURL, BIT_UINT32 featureId, BIT_UINT32 nDurationDays);
/**
* 从集团授权服务器借出一组特征项,这些特征项必须包含在同一个授权码中。
* 被借出的集团授权码必须具有可借出属性,并在客户端成功借出后减少一个可用用户数。
* 被借出的用户数在到期后将自动返还给集团服务器。
* 参数:
* szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
* pFeatureList - [IN] 要借出的特征项列表。
* nFeatureInList - [IN] 要借出的特征项数量。
* nDurationDays - [IN] 借出时间,单位为天。借出时间不能超过被借出集团授权的强制认证周期或有效期。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS CheckOutFeatures(BIT_PCSTR szURL, BIT_UINT32 *pFeatureList, BIT_UINT32 nFeatureInList, BIT_UINT32 nDurationDays);
/**
* 提前返还从集团授权服务器借出的授权。要提前返还授权,该授权码必须具有允许提前返还属性。
* 参数:
* szURL - [IN] 集团授权服务器地址,包括端口。如输入NULL,则使用配置文件地址;如输入 * 号,则使用广播查找地址。
* featureId - [IN] 指定要返还授权码需要包含的特征项ID,为 0 则寻找第一个可返还授权码。
* 返回:
* 如果返回值为零,表示此函数调用成功。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS CheckIn(BIT_PCSTR szURL, BIT_UINT32 featureId);
/**
* 测试集团授权和特征项是否可用,不会占用授权码或特征项的用户数。
* 参数:
* szURL - [IN] 集团授权服务器地址,包括端口。
* szSN - [IN] 授权码(SN),为空表示不指定授权码。
* featureId - [IN] 指定要测试的特征项,为 0 则不检查特征项。
* 返回:
* 如果返回值为零,表示指定的授权码和特征项可用。如果非零,可以根据返回值,从错误码表中查看具体的错误原因。
*/
BIT_STATUS TestBitService(BIT_PCSTR szURL, BIT_PCSTR szSN, BIT_UINT32 featureId);
};