版本号 |
修订日期 |
修订人 |
内容 |
0.0.1.0 |
2018-01-28 |
厉华 |
创建 |
1. API接口
1.1. 公共API接口
1.1.1. 文件类
1.1.1.1. IBPCreateTempFile
|
|
函数原型: |
FILE *IBPCreateTempFile( char *file_id , char *filename , char *pathfilename , char *mode ); |
函数描述: |
创建本地唯一附带临时文件 |
函数说明: |
char *file_id 文件ID,用于前后台交换多个文件时指定文件用<br />char *filename 附带文件名;声明变量“char filename[ IBP_MAXLEN_FILENAME + 1 ] ;”;如果填为NULL,则函数返回时不填充<br />char *pathfilename 带路径的附带文件名;声明变量“char filename[ IBP_MAXLEN_FILENAME + 1 ] ;”;如果填为NULL,则函数返回时不填充<br />char *mode fopen打开模式,文本文件用"w",二进制文件用"b" |
返回值: |
返回非NULL表示成功,值为打开FILE指针;返回NULL表示失败 |
|
|
1.2. 注册代理API接口
1.2.1. 环境类
1.2.1.1. IBMAOpenConfigSpace
|
|
函数原型: |
struct IbmaConfigSpace *IBMAOpenConfigSpace( char *config_filename ); |
函数描述: |
打开配置共享内存 |
函数说明: |
从注册代理主配置文件config_filename得到配置共享内存key,申请配置共享内存句柄所需内存,打开配置共享内存,返回该句柄指针。<br />当config_filename为NULL时取缺省值"ibma.conf"。<br />config_filename不含路径,写死路径在"$HOME/etc"。 |
返回值: |
返回非NULL表示成功,值为打开句柄指针;返回NULL表示失败 |
|
|
1.2.1.2. IBMACheckConfigSpaceAttaching
|
|
函数原型: |
int IBMACheckConfigSpaceAttaching( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
检查是否有新构建的配置共享内存,如果有则切换到新构建的 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄。 |
返回值: |
返回1表示切换配置共享内存;0表示成功;非0表示失败 |
|
|
1.2.1.3. IBMACloseConfigSpace
|
|
函数原型: |
void IBMACloseConfigSpace( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
关闭配置共享内存打开句柄 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
(无) |
|
|
1.2.1.4. IBMAGetConfigSpaceAttaching
|
|
函数原型: |
struct ConfigSpaceAttaching *IBMAGetConfigSpaceAttaching( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到配置空间首区结构指针 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
配置空间首区结构地址(只读) |
|
|
1.2.1.5. IBMAGetThisNodePtr
|
|
函数原型: |
char *IBMAGetThisNodePtr( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到自己通讯节点名 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回自己通讯节点名(只读) |
|
|
1.2.1.6. IBMAGetRetryConnectTimeval
|
|
函数原型: |
int IBMAGetRetryConnectTimeval( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到暂禁时间配置 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回暂禁时间配置(只读) |
|
|
1.2.1.7. IBMAGetMinCompressSize
|
|
函数原型: |
int IBMAGetMinCompressSize( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到最小压缩数据大小 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回最小压缩数据大小(只读);当HTTP体数据大于等于该配置值时才激活压缩 |
|
|
1.2.1.8. IBMAGetIbmsServerIp
|
|
函数原型: |
char *IBMAGetIbmsServerIp( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到注册中心IP |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回注册中心IP(只读) |
|
|
1.2.1.9. IBMAGetIbmsServerPort
|
|
函数原型: |
int IBMAGetIbmsServerPort( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到注册中心PORT |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回注册中心PORT(只读) |
|
|
1.2.2. 通讯节点类
1.2.2.1. IBMAGetNodeCount
|
|
函数原型: |
int IBMAGetNodeCount( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到本地配置副本中的通讯节点数量(包含自己) |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回通讯节点数量 |
|
|
1.2.2.2. IBMAGetThisNode
|
|
函数原型: |
struct NodeSpaceUnit *IBMAGetThisNode( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到自己通讯节点结构信息,需要通过其它函数获取属性 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回自己通讯节点结构信息(只读) |
|
|
1.2.2.3. IBMATravelNodes
|
|
函数原型: |
struct NodeSpaceUnit *IBMATravelNodes( struct IbmaConfigSpace *ibma_config_space , struct NodeSpaceUnit *p_node_unit ); |
函数描述: |
遍历本地配置副本中所有通讯节点结构信息,需要通过其它函数获取属性 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />struct NodeSpaceUnit *p_node_unit 上一次遍历值,第一次设置为NULL |
返回值: |
返回每次遍历的通讯节点结构信息(只读) |
|
|
1.2.2.4. IBMAQueryNode
|
|
函数原型: |
struct NodeSpaceUnit *IBMAQueryNode( struct IbmaConfigSpace *ibma_config_space , char *node ); |
函数描述: |
查询本地配置副本中指定名字的通讯节点结构信息,需要通过其它函数获取属性 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />char *node 指定通讯节点名 |
返回值: |
返回指定名字的通讯节点结构信息(只读) |
|
|
1.2.2.5. IBMAGetNodePtr
|
|
函数原型: |
char *IBMAGetNodePtr( struct NodeSpaceUnit *p_node_unit ); |
函数描述: |
从通讯节点结构信息中获取节点名 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回节点名(只读) |
|
|
1.2.2.6. IBMAGetNodeInvalid
|
|
函数原型: |
char IBMAGetNodeInvalid( struct NodeSpaceUnit *p_node_unit ); |
函数描述: |
从通讯节点结构信息中获取节点是否被禁用 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回0表示该节点可用,返回非0表示该节点禁用 |
|
|
1.2.2.7. IBMAGetNodeHostCount
|
|
函数原型: |
int IBMAGetNodeHostCount( struct NodeSpaceUnit *p_node_unit ); |
函数描述: |
从通讯节点结构信息中获取节点的主机集群数量 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回主机集群数量 |
|
|
1.2.2.8. IBMAGetNodeEncryptKeyExpPtr
|
|
函数原型: |
char *IBMAGetNodeEncryptKeyExpPtr( struct NodeSpaceUnit *p_node_unit ) |
函数描述: |
从通讯节点结构信息中获取节点的通讯节点密钥 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回通讯节点密钥 |
|
|
1.2.2.9. IBMAGetNodeOldKeyDisableTimestamp
|
|
函数原型: |
int IBMAGetNodeOldKeyDisableTimestamp( struct NodeSpaceUnit *p_node_unit ) |
函数描述: |
从通讯节点结构信息中获取节点的旧密钥失效时间戳 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回旧密钥失效时间戳 |
|
|
1.2.2.10. IBMAGetNodeNewKeyEnableTimestamp
|
|
函数原型: |
int IBMAGetNodeNewKeyEnableTimestamp( struct NodeSpaceUnit *p_node_unit ) |
函数描述: |
从通讯节点结构信息中获取节点的新密钥生效时间戳 |
函数说明: |
struct NodeSpaceUnit *p_node_unit 通讯节点结构信息 |
返回值: |
返回新密钥生效时间戳 |
|
|
1.2.3. 通讯节点主机集群类
1.2.3.1. IBMATravelNodeHosts
|
|
函数原型: |
struct HostSpaceUnit *IBMATravelNodeHosts( struct IbmaConfigSpace *ibma_config_space , struct NodeSpaceUnit *p_node_unit , struct HostSpaceUnit *p_host_unit ); |
函数描述: |
遍历本地配置副本中的指定通讯节点的主机信息 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />struct NodeSpaceUnit *p_node_unit 通讯节点结构信息<br />struct HostSpaceUnit *p_host_unit 上一次主机信息结构指针,第一次设置为NULL |
返回值: |
遍历指定通讯节点的主机信息 |
|
|
1.2.3.2. IBMAQueryNodeHost
|
|
函数原型: |
struct HostSpaceUnit *IBMAQueryNodeHost( struct IbmaConfigSpace *ibma_config_space , struct NodeSpaceUnit *p_node_unit , char *ip , int port ); |
函数描述: |
查询指定通讯节点的主机信息结构 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />struct NodeSpaceUnit *p_node_unit 通讯节点结构信息<br />char *ip 主机IP<br />int port 主机PORT |
返回值: |
查询指定通讯节点的主机信息 |
|
|
1.2.3.3. IBMAGetHostIpPtr
|
|
函数原型: |
char *IBMAGetHostIpPtr( struct HostSpaceUnit *p_host_unit ); |
函数描述: |
得到主机信息结构中的IP |
函数说明: |
struct HostSpaceUnit *p_host_unit主机结构信息 |
返回值: |
主机信息结构IP |
|
|
1.2.3.4. IBMAGetHostPort
|
|
函数原型: |
int IBMAGetHostPort( struct HostSpaceUnit *p_host_unit ); |
函数描述: |
得到主机信息结构中的PORT |
函数说明: |
struct HostSpaceUnit *p_host_unit 主机结构信息 |
返回值: |
主机信息结构PORT |
|
|
1.2.3.5. IBMAGetHostLoad
|
|
函数原型: |
int IBMAGetHostLoad( struct HostSpaceUnit *p_host_unit ); |
函数描述: |
得到主机信息结构中的当前负载 |
函数说明: |
struct HostSpaceUnit *p_host_unit 主机结构信息 |
返回值: |
主机信息结构当前负载 |
|
|
1.2.3.6. IBMASetHostLoad
|
|
函数原型: |
void IBMASetHostLoad( struct HostSpaceUnit *p_host_unit , int load , int loop ); |
函数描述: |
设置主机信息结构中的当前负载 |
函数说明: |
struct HostSpaceUnit *p_host_unit 主机结构信息<br />int load 负载值<br />int loop 是否循环标志 |
返回值: |
设置主机信息结构的负载 |
|
|
1.2.3.7. IBMAGetHostInvalid
|
|
函数原型: |
char IBMAGetHostInvalid( struct HostSpaceUnit *p_host_unit ); |
函数描述: |
得到主机信息结构中的有效性 |
函数说明: |
struct HostSpaceUnit *p_host_unit 主机结构信息 |
返回值: |
主机信息结构有效性 |
|
|
1.2.3.8. IBMAGetHostRetryConnectTimestamp
|
|
函数原型: |
time_t IBMAGetHostRetryConnectTimestamp( struct HostSpaceUnit *p_host_unit ); |
函数描述: |
得到主机重连时间戳 |
函数说明: |
struct HostSpaceUnit *p_host_unit 主机结构信息 |
返回值: |
主机重连时间戳 |
|
|
1.2.4. 交易码信息类
1.2.4.1. IBMAGetAppCount
|
|
函数原型: |
int IBMAGetAppCount( struct IbmaConfigSpace *ibma_config_space ); |
函数描述: |
得到本地配置副本中的交易码数量(包含自己) |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄 |
返回值: |
返回交易码数量 |
|
|
1.2.4.2. IBMATravelApps
|
|
函数原型: |
struct AppSpaceUnit *IBMATravelApps( struct IbmaConfigSpace *ibma_config_space , struct AppSpaceUnit *p_app_unit ); |
函数描述: |
遍历本地配置副本中所有交易码结构信息,需要通过其它函数获取属性 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />struct AppSpaceUnit *p_app_unit 上一次遍历值,第一次设置为NULL |
返回值: |
返回每次遍历的交易码结构信息(只读) |
|
|
1.2.4.3. IBMAQueryApp
|
|
函数原型: |
struct AppSpaceUnit *IBMAQueryApp( struct IbmaConfigSpace *ibma_config_space , char *app ); |
函数描述: |
查询本地配置副本中指定名字的交易码结构信息,需要通过其它函数获取属性 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />char *app 指定交易码 |
返回值: |
返回指定名字的交易码结构信息(只读) |
|
|
1.2.4.4. IBMAGetAppPtr
|
|
函数原型: |
char *IBMAGetAppPtr( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的IP |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的交易码 |
|
|
1.2.4.5. IBMAGetAppDescPtr
|
|
函数原型: |
char *IBMAGetAppDescPtr( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的描述 |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的描述 |
|
|
1.2.4.6. IBMAGetAppBinPtr
|
|
函数原型: |
char *IBMAGetAppBinPtr( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的应用包名 |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的应用包名 |
|
|
1.2.4.7. IBMAGetAppTimeout
|
|
函数原型: |
int IBMAGetAppTimeout( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的超时值 |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的超时值<br /> |
|
|
1.2.4.8. IBMAGetAppTimeout2
|
|
函数原型: |
int IBMAGetAppTimeout2( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的timeout2值 |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的timeout2值 |
|
|
1.2.4.9. IBMAGetAppServerNodePtr
|
|
函数原型: |
char *IBMAGetAppServerNodePtr( struct AppSpaceUnit *p_app_unit ); |
函数描述: |
得到交易码信息结构中的服务节点 |
函数说明: |
struct AppSpaceUnit *p_app_unit 交易码信息结构 |
返回值: |
交易码信息结构中的服务节点 |
|
|
1.2.5. 应用自定义KV配置类
1.2.5.1. IBMATravelNodeKvs
|
|
函数原型: |
struct KvSpaceUnit *IBMATravelNodeKvs( struct IbmaConfigSpace *ibma_config_space , struct KvSpaceUnit *p_kv_unit ); |
函数描述: |
遍历本地配置副本中的本节点的key-value信息 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />struct KvSpaceUnit * p_kv_unit 上一次key-value信息结构指针,第一次设置为NULL |
返回值: |
遍历本节点的key-value信息 |
|
|
1.2.5.2. IBMAQueryNodekv
|
|
函数原型: |
struct KvSpaceUnit *IBMAQueryNodekv( struct IbmaConfigSpace *ibma_config_space , char *p_kv_key ); |
函数描述: |
查询本节点的key-value信息结构 |
函数说明: |
struct IbmaConfigSpace *ibma_config_space 配置共享内存句柄<br />char *p_kv_key key-value中key信息 |
返回值: |
查询本节点的key-value信息 |
|
|
1.2.5.3. IBMAGetKvKeyPtr
|
|
函数原型: |
char *IBMAGetKvKeyPtr( struct KvSpaceUnit *p_kv_unit ); |
函数描述: |
得到key-value信息结构中的key |
函数说明: |
struct KvSpaceUnit * p_kv_unit key-value结构信息 |
返回值: |
key-value结构中的key |
|
|
1.2.5.4. IBMAGetKvValuePtr
|
|
函数原型: |
char *IBMAGetKvValuePtr( struct KvSpaceUnit *p_kv_unit ); |
函数描述: |
得到key-value信息结构中的value |
函数说明: |
struct KvSpaceUnit * p_kv_unit key-value结构信息 |
返回值: |
key-value结构中的value |
|
|
1.2.5.5. IBMAGetNodeKvCount
|
|
函数原型: |
int IBMAGetNodeKvCount( struct NodeSpaceUnit *p_node_unit ); |
函数描述: |
得到本地配置副本中的key-value数量(包含自己) |
函数说明: |
struct NodeSpaceUnit *p_node_unit通讯节点结构信息 |
返回值: |
返回本节点key-value信息 |
|
|
1.3. 通讯客户端API接口
1.3.1. 环境类
1.3.1.1. IBACCreateEnvirment
|
|
函数原型: |
struct IbacApiEnv *IBACCreateEnvirment( char *config_filename ); |
函数描述: |
创建通讯客户端API环境 |
函数说明: |
char *config_filename 注册代理主配置文件 |
返回值: |
成功则返回通讯客户端API环境,失败则返回NULL |
|
|
1.3.1.2. IBACDestroyEnvirment
|
|
函数原型: |
void IBACDestroyEnvirment( struct IbacApiEnv *p_env ); |
函数描述: |
销毁通讯客户端API环境 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端API环境结构 |
返回值: |
(无) |
|
|
1.3.1.3. IBACCreateMultiEnvirments
|
|
函数原型: |
struct IbacMultiEnvs *IBACCreateMultiEnvirments( char *config_filename , int count ); |
函数描述: |
创建通讯客户端并行交易API环境 |
函数说明: |
char *config_filename 注册代理主配置文件<br />int count 并行交易数量 |
返回值: |
成功则返回通讯客户端并行交易API环境,失败则返回NULL |
|
|
1.3.1.4. IBACDestroyMultiEnvirments
|
|
函数原型: |
void IBACDestroyMultiEnvirments( struct IbacMultiEnvs *p_multi_envs ); |
函数描述: |
销毁通讯客户端并行交易API环境 |
函数说明: |
struct IbacMultiEnvs *p_multi_env 通讯客户端并行交易API环境结构 |
返回值: |
(无) |
|
|
1.3.2. 请求类(中层)
1.3.2.1. IBACRequester
|
|
函数原型: |
int IBACRequester( struct IbacApiEnv *p_env , char *node , char *app , char **pp_msg , int *p_msg_len , ... ); |
函数描述: |
连接服务端,发送接收交易,断开服务 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *node 服务端通讯节点名<br />char *app 交易码<br />char **pp_msg 输入时指向请求报文首地址的指针,输出时指向响应报文首地址的指针<br />int *p_msg_len 输入时存放请求报文大小,输出时存放响应报文大小<br />... 请求文件名字符串列表和响应文件名字符串列表(无请求响应文件时填"NULL,NULL",有一个请求文件无响应文件时填"req_pathfilename,NULL,NULL",无请求文件有一个响应文件时填"NULL,rsp_pathfilename,NULL",同时又请求响应文件时填"req_pathfilename,NULL,rsp_pathfilename,NULL"),如果字符串为空则跳过 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3. 请求类(低层)
1.3.3.1. IBACConnect
|
|
函数原型: |
int IBACConnect( struct IbacApiEnv *ibac_api_env , char *node ); |
函数描述: |
连接服务端主机 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *node 服务端通讯节点名 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.2. IBACSendRequestAndReceiveResponse
|
|
函数原型: |
int IBACSendRequestAndReceiveResponse( struct IbacApiEnv *ibac_api_env , char *app , char **pp_msg , int *p_msg_len , ... ); |
函数描述: |
发送请求到服务端主机并同步接收响应 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *app 交易码<br />char **pp_msg 输入时指向请求报文首地址的指针,输出时指向响应报文首地址的指针<br />int *p_msg_len 输入时存放请求报文大小,输出时存放响应报文大小<br />... 请求文件名字符串列表和响应文件名字符串列表(无请求响应文件时填"NULL,NULL",有一个请求文件无响应文件时填"req_pathfilename,NULL,NULL",无请求文件有一个响应文件时填"NULL,rsp_pathfilename,NULL",同时又请求响应文件时填"req_pathfilename,NULL,rsp_pathfilename,NULL"),如果字符串为空则跳过 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.3. IBACDisconnect
|
|
函数原型: |
int IBACDisconnect( struct IbacApiEnv *ibac_api_env ); |
函数描述: |
断开服务端主机 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.4. IBACMultiConnect
|
|
函数原型: |
int IBACMultiConnect( struct IbacMultiEnvs *p_multi_envs , struct IbacMultiRequesters *multi_requesters ); |
函数描述: |
并行连接通讯服务端 |
函数说明: |
struct IbacMultiEnvs *p_multi_envs通讯客户端并行交易API环境结构<br />struct IbacMultiRequesters *multi_requesters 并行交易配置 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.5. IBACMultiSendRequestsAndReceiveResponses
|
|
函数原型: |
int IBACMultiSendRequestsAndReceiveResponses( struct IbacMultiEnvs *p_multi_envs , struct IbacMultiRequesters *multi_requesters ); |
函数描述: |
发送并行交易请求并接收响应 |
函数说明: |
struct IbacMultiEnvs *p_multi_envs通讯客户端并行交易API环境结构<br />struct IbacMultiRequesters *multi_requesters 并行交易配置 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.6. IBACMultiSendCommitOrRollbackAndReceiveResponses
|
|
函数原型: |
int IBACMultiSendCommitOrRollbackAndReceiveResponses( struct IbacMultiEnvs *p_multi_envs , struct IbacMultiRequesters *multi_requesters , int commit_or_rollback_flag ); |
函数描述: |
发送二阶段提交或回滚请求并接收响应 |
函数说明: |
struct IbacMultiEnvs *p_multi_envs通讯客户端并行交易API环境结构<br />struct IbacMultiRequesters *multi_requesters 并行交易配置<br />int commit_or_rollback_flag 并行提交宏IBAC_MULTI_COMMIT_DATABASE 或 并行回滚宏IBAC_MULTI_ROLLBACK_DATABASE |
返回值: |
成功则0,失败则返回非0 |
|
|
1.3.3.7. IBACMultiDisconnect
|
|
函数原型: |
void IBACMultiDisconnect( struct IbacMultiEnvs *p_multi_envs , struct IbacMultiRequesters *multi_requesters ); |
函数描述: |
并行断开通讯服务端 |
函数说明: |
struct IbacMultiEnvs *p_multi_envs通讯客户端并行交易API环境结构<br />struct IbacMultiRequesters *multi_requesters 并行交易配置 |
返回值: |
(无) |
|
|
1.4. 通讯服务端API接口
1.4.1. 信息查询类
1.4.1.1. IBASGetThisNode
|
|
函数原型: |
const char *IBASGetThisNode( struct IbasEnv *p_env ); |
函数描述: |
得到本通讯节点名 |
函数说明: |
struct IbasEnv *p_env 通讯服务端环境结构 |
返回值: |
本通讯节点名(只读) |
|
|
1.4.1.2. IBASGetThisApp
|
|
函数原型: |
const char *IBASGetThisApp( struct IbasEnv *p_env ); |
函数描述: |
得到当前交易码 |
函数说明: |
struct IbasEnv *p_env 通讯服务端环境结构 |
返回值: |
当前交易码(只读) |
|
|
1.4.1.3. IBASSendResponseAhead
|
|
函数原型: |
int IBASSendResponseAhead(); |
函数描述: |
提前发送响应 |
函数说明: |
(无) |
返回值: |
0表示成功;非0表示失败 |
|
|
1.4.1.4. IBASGetClientNode
|
|
函数原型: |
const char *IBASGetClientNode(); |
函数描述: |
得到客户端节点 |
函数说明: |
(无) |
返回值: |
客户端节点 |
|
|
1.4.1.5. IBASGetClientIp
|
|
函数原型: |
const char *IBASGetClientIp(); |
函数描述: |
得到客户端IP |
函数说明: |
(无) |
返回值: |
客户端节点 |
|
|
1.4.1.6. IBASGetClientPort
|
|
函数原型: |
const int IBASGetClientPort() |
函数描述: |
得到客户端访问端口 |
函数说明: |
(无) |
返回值: |
客户端访问端口 |
|
|
1.4.1.7. IBASGetCommJnlsno
|
|
函数原型: |
const char *IBASGetCommJnlsno(); |
函数描述: |
得到客户端流水号 |
函数说明: |
(无) |
返回值: |
客户端流水号 |
|
|
1.4.1.8. IBASGetThisAppCommTimeout
|
|
函数原型: |
int IBASGetThisAppCommTimeout(); |
函数描述: |
得到客户端通讯超时时间 |
函数说明: |
(无) |
返回值: |
通讯超时时间 |
|
|
1.4.1.9. IBASGetThisAppTimeout
|
|
函数原型: |
int IBASGetThisAppTimeout(); |
函数描述: |
得到交易超时时间 |
函数说明: |
(无) |
返回值: |
交易超时时间 |
|
|
1.4.1.10. IBASGetWorkerIndex
|
|
函数原型: |
int IBASGetWorkerIndex(); |
函数描述: |
得到工作进程序号 |
函数说明: |
(无) |
返回值: |
工作进程序号 |
|
|
1.4.1.11. IBASGetWorkerProcessCount
|
|
函数原型: |
int IBASGetWorkerProcessCount(); |
函数描述: |
得到工作进程数目 |
函数说明: |
(无) |
返回值: |
工作进程数目 |
|
|
1.4.1.12. IBASGetResponseBody
|
|
函数原型: |
struct HttpBuffer *IBASGetResponseBody(); |
函数描述: |
得到响应报文体 |
函数说明: |
(无) |
返回值: |
响应报文体 |
|
|
1.4.2. 数据类
1.4.2.1. IBASGetHttpEnv
|
|
函数原型: |
struct HttpEnv *IBASGetHttpEnv( struct IbasEnv *p_env ); |
函数描述: |
得到HTTP协议环境 |
函数说明: |
struct IbasEnv *p_env 通讯服务端环境结构 |
返回值: |
HTTP协议环境 |
|
|
1.4.2.2. IBASSetTransactionAddonInfo
|
|
函数原型: |
int IBASSetTransactionAddonInfo( char *busi_channel , char *busi_jnlsno , char *busi_transaction_code , long response_code , char *addon_text ); |
函数描述: |
设置交易响应信息 |
函数说明: |
char *busi_channel 渠道号<br />char *busi_jnlsno 流水号<br />char *busi_transaction_code 业务交易码<br />long response_code 响应码<br />char *addon_text 附加信息 |
返回值: |
设置交易响应信息 |
|
|
1.4.3. 附带文件类
1.4.3.1. IBASGetRequestFileCount
|
|
函数原型: |
int IBASGetRequestFileCount( struct IbasAddonFiles *addon_files ); |
函数描述: |
得到请求附带文件数量 |
函数说明: |
struct IbasAddonFiles *addon_files 附带文件名容器 |
返回值: |
请求附带文件数量 |
|
|
1.4.3.2. IBASGetRequestFileById
|
|
函数原型: |
char *IBASGetRequestFileById( struct IbasAddonFiles *addon_files , char *file_id ); |
函数描述: |
得到指定文件ID的请求附带文件名 |
函数说明: |
struct IbasAddonFiles *addon_files 附带文件名容器<br />char *file_id |
返回值: |
指定文件ID的请求附带文件名 |
|
|
1.4.3.3. IBASGetResponseFileCount
|
|
函数原型: |
int IBASGetResponseFileCount( struct IbasAddonFiles *addon_files ); |
函数描述: |
得到响应附带文件数量 |
函数说明: |
struct IbasAddonFiles *addon_files 附带文件名容器 |
返回值: |
响应附带文件数量 |
|
|
1.4.3.4. IBASPutResponseFile
|
|
函数原型: |
int IBASPutResponseFile( struct IbasAddonFiles *addon_files , char *filename ); |
函数描述: |
压入响应附带文件名 |
函数说明: |
struct IbasAddonFiles *addon_files 附带文件名容器<br />char *file_id |
返回值: |
0表示成功;非0表示失败 |
|
|
1.4.3.5. IBASGetPathFilename
|
|
函数原型: |
void IBASGetPathFilename( char *filename , char *pathfilename , int sizeof_pathfilename ); |
函数描述: |
给定附加文件名,返回追加绝对路径的附带文件名 |
函数说明: |
char *filename 附加文件名<br />char *pathfilename 追加绝对路径的附带文件名<br />int sizeof_pathfilename 追加绝对路径的附带文件名缓冲区大小 |
返回值: |
(无) |
|
|
1.4.3.6. IBASGetEnv
|
|
函数原型: |
struct IbasEnv *IBASGetEnv(); |
函数描述: |
得到ibas主环境结构 |
函数说明: |
(无) |
返回值: |
ibas主环境结构 |
|
|
1.5. 报文转换层API接口
1.5.1. 交易发起类
1.5.1.1. IBMSGVSendRequestAndReceiveResponse_JSON
|
|
函数原型: |
int IBMSGVSendRequestAndReceiveResponse_JSON( struct IbacEnv *p_env , char *app , void *pv_req_st , DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func , void *pv_rsp_st , DSCDESERIALIZE_JSON_xxx_V *p_unpack_func , ... ); |
函数描述: |
打包JSON报文,发送接收通讯报文,解包JSON报文 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *app 交易码<br />void *pv_req_st 请求结构体<br />DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func打包JSON报文函数<br />void *pv_rsp_st 响应结构体<br />DSCDESERIALIZE_JSON_xxx_V *p_unpack_func 解包JSON报文函数<br />... 请求文件名字符串列表和响应文件名字符串列表(具体见通讯客户端API) |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.5.1.2. IBMSGVRequester_JSON
|
|
函数原型: |
int IBMSGVRequester_JSON( struct IbacApiEnv *p_env , char *node , char *app , void *pv_req_st , DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func , void *pv_rsp_st , DSCDESERIALIZE_JSON_xxx_V *p_unpack_func , ... ); |
函数描述: |
连接服务端,打包JSON报文,发送接收通讯报文,解包JSON报文,断开服务 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *node 服务端通讯节点名<br />char *app 交易码<br />void *pv_req_st 请求结构体<br />DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func打包JSON报文函数<br />void *pv_rsp_st 响应结构体<br />DSCDESERIALIZE_JSON_xxx_V *p_unpack_func 解包JSON报文函数<br />... 请求文件名字符串列表和响应文件名字符串列表(具体见通讯客户端API) |
返回值: |
成功则0,失败则返回非0 |
|
|
1.5.1.3. IBMSGVCall_JSON
|
|
函数原型: |
int IBMSGVCall_JSON( struct IbacApiEnv *ibac_api_env , char *app , void *pv_req_st , DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func , void *pv_rsp_st , DSCDESERIALIZE_JSON_xxx_V *p_unpack_func , ... ); |
函数描述: |
创建通讯客户端API环境,连接服务端,打包JSON报文,发送接收通讯报文,解包JSON报文,断开服务,销毁通讯客户端API环境 |
函数说明: |
struct IbacApiEnv *p_env 通讯客户端环境结构<br />char *app 交易码<br />void *pv_req_st 请求结构体<br />DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func打包JSON报文函数<br />void *pv_rsp_st 响应结构体<br />DSCDESERIALIZE_JSON_xxx_V *p_unpack_func 解包JSON报文函数<br />... 请求文件名字符串列表和响应文件名字符串列表(具体见通讯客户端API) |
返回值: |
成功则0,失败则返回非0<br /> |
|
|
1.5.2. 交易接收类
1.5.2.1. IBMSGVReceiver_JSON
|
|
函数原型: |
int IBMSGVReceiver_JSON( struct HttpBuffer *req_buf , DSCDESERIALIZE_JSON_xxx_V *p_unpack_func , void *pv_req_st , struct HttpBuffer *rsp_buf , DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func , void *pv_rsp_st , funcIbmsgvTransmain *p_transmain_func , struct IbasAddonFiles *addon_files ); |
函数描述: |
解包JSON报文,调用回调函数transmain,打包JSON报文 |
函数说明: |
struct HttpBuffer *req_buf 请求报文缓冲区<br />DSCDESERIALIZE_JSON_xxx_V *p_unpack_func 解包JSON报文函数<br />void *pv_req_st 请求结构体<br />struct HttpBuffer *rsp_buf 响应报文缓冲区<br />DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func 打包JSON报文函数<br />void *pv_rsp_st 响应结构体<br />funcIbmsgvTransmain *p_transmain_func 交易层入口回调函数<br />struct IbasAddonFiles *addon_files 请求和响应附带文件缓冲区,通过ibas_api函数存取 |
返回值: |
成功则0,失败则返回非0 |
|
|
1.5.2.2. IBMSGVReceiver_JSON_SendResponseAhead
|
|
函数原型: |
int IBMSGVReceiver_JSON_SendResponseAhead<br />( DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func , void *pv_rsp_st ); |
函数描述: |
打包JSON报文,通讯发送响应 |
函数说明: |
DSCSERIALIZE_JSON_DUP_xxx_V *p_pack_func 打包JSON报文函数<br />void *pv_rsp_st 响应结构体 |
返回值: |
成功则0,失败则返回非0<br /> |
|
|
1.6. 交易管理层API接口
1.6.1. 分阶段模板类
1.6.1.1. IBTSExecuteSchedule_BT_PC_BP_AP_AT
|
|
函数原型: |
int IBTSExecuteSchedule_BT_PC_BP_AP_AT( char *req_msg_name , int sizeof_req_msg , void *p_req_st , char *rsp_msg_name , int sizeof_rsp_msg , void *p_rsp_st , struct IbasAddonFiles *addon_files , char *trans_code , char *response_code , int response_code_bufsize , char *response_desc , int response_desc_bufsize , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_AP_AT *p_ts ); |
函数描述: |
数据库事务(交易前处理)(如果报错跳到交易后处理),<br />数据库事务(公共检查)(如果报错跳到交易后处理),<br />数据库事务(业务检查、业务处理、账务处理)(如果报错跳到交易后处理),<br />数据库事务(交易后处理)(如果报错则结束) |
函数说明: |
char *req_msg_name 请求结构体名称<br />int sizeof_req_msg 请求结构体大小<br />void *p_req_st 请求结构体<br />char *rsp_msg_name 响应结构体名称<br />int sizeof_rsp_msg 响应结构体大小<br />void *p_rsp_st 响应结构体<br />struct IbasAddonFiles *addon_files 请求和响应附带文件缓冲区<br />char *trans_code 业务交易码<br />char *response_code 响应码缓冲区<br />int response_code_bufsize 响应码缓冲区大小<br />char *response_desc 响应描述缓冲区<br />int response_desc_bufsize 响应描述缓冲区大小<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数<br />struct TransSchedule_BT_PC_BP_AP_AT *p_ts 分阶段模板配置 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.1.2. IBTSRecursiveSchedule_BT_PC_BP_AP_AT
|
|
函数原型: |
int IBTSRecursiveSchedule_BT_PC_BP_AP_AT( struct TransEnv *p_te , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_AP_AT *p_ts );<br /> <br /> |
函数描述: |
递归子交易分阶段模板 |
函数说明: |
struct TransEnv *p_te 交易环境结构<br />struct TransSchedule_BT_PC_BP_AP_AT *p_ts 分阶段模板配置<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数<br /> |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.1.3. IBTSExecuteSchedule_BT_PC_RI_BP_AP_AT
|
|
函数原型: |
int IBTSExecuteSchedule_BT_PC_BP_RI_AP_AT( char *req_msg_name , int sizeof_req_msg , void *p_req_st , char *rsp_msg_name , int sizeof_rsp_msg , void *p_rsp_st , struct IbasAddonFiles *addon_files , char *trans_code , char *response_code , int response_code_bufsize , char *response_desc , int response_desc_bufsize , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_RI_AP_AT *p_ts ); |
函数描述: |
数据库事务(交易前处理)(如果报错跳到交易后处理),<br />数据库事务(公共检查)(如果报错跳到交易后处理),<br />数据库事务(业务检查、请求联动交易、业务处理、账务处理)(如果报错跳到交易后处理),<br />数据库事务(交易后处理)(如果报错则结束) |
函数说明: |
char *req_msg_name 请求结构体名称<br />int sizeof_req_msg 请求结构体大小<br />void *p_req_st 请求结构体<br />char *rsp_msg_name 响应结构体名称<br />int sizeof_rsp_msg 响应结构体大小<br />void *p_rsp_st 响应结构体<br />struct IbasAddonFiles *addon_files 请求和响应附带文件缓冲区<br />char *trans_code 业务交易码<br />char *response_code 响应码缓冲区<br />int response_code_bufsize 响应码缓冲区大小<br />char *response_desc 响应描述缓冲区<br />int response_desc_bufsize 响应描述缓冲区大小<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数<br />struct TransSchedule_BT_PC_BP_RI_AP_AT *p_ts 分阶段模板配置 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.1.4. IBTSRecursiveSchedule_BT_PC_BP_RI_AP_AT
|
|
函数原型: |
int IBTSRecursiveSchedule_BT_PC_BP_RI_AP_AT( struct TransEnv *p_te , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_RI_AP_AT *p_ts ); |
函数描述: |
递归子交易分阶段模板 |
函数说明: |
struct TransEnv *p_te 交易环境结构<br />struct TransSchedule_BT_PC_BP_RI_AP_AT *p_ts 分阶段模板配置<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.1.5. IBTSExecuteSchedule_BT_PC_BP_AT__AP
|
|
函数原型: |
int IBTSExecuteSchedule_BT_PC_BP_AT_AP( char *req_msg_name , int sizeof_req_msg , void *p_req_st , char *rsp_msg_name , int sizeof_rsp_msg , void *p_rsp_st , struct IbasAddonFiles *addon_files , char *trans_code , char *response_code , int response_code_bufsize , char *response_desc , int response_desc_bufsize , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_AT_AP *p_ts ); |
函数描述: |
数据库事务(交易前处理)(如果报错跳到交易后处理),<br />数据库事务(公共检查)(如果报错跳到交易后处理),<br />数据库事务(交易后处理)(如果报错则结束),<br />数据库事务(业务检查、业务处理、账务处理)(如果报错则结束) |
函数说明: |
char *req_msg_name 请求结构体名称<br />int sizeof_req_msg 请求结构体大小<br />void *p_req_st 请求结构体<br />char *rsp_msg_name 响应结构体名称<br />int sizeof_rsp_msg 响应结构体大小<br />void *p_rsp_st 响应结构体<br />struct IbasAddonFiles *addon_files 请求和响应附带文件缓冲区<br />char *trans_code 业务交易码<br />char *response_code 响应码缓冲区<br />int response_code_bufsize 响应码缓冲区大小<br />char *response_desc 响应描述缓冲区<br />int response_desc_bufsize 响应描述缓冲区大小<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数<br />struct TransSchedule_BT_PC_BP_AT_AP *p_ts 分阶段模板配置 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.1.6. IBTSRecursiveSchedule_BT_PC_BP_AP_AT
|
|
函数原型: |
int IBTSRecursiveSchedule_BT_PC_BP_AT_AP( struct TransEnv *p_te , TransFunc *TF_HeaderMapping , TransFunc *TF_InsertTransList , TransFunc *TF_UpdateTransList , struct TransSchedule_BT_PC_BP_AT_AP *p_ts ); |
函数描述: |
递归子交易分阶段模板 |
函数说明: |
struct TransEnv *p_te 交易环境结构<br />struct TransSchedule_BT_PC_BP_AT_AP *p_ts 分阶段模板配置<br />TransFunc *TF_HeaderMapping 填充translist结构函数(注: IB2和IB1填充TF_BT_InsertTransListHeaderMapping即可,IB1自定义)<br />TransFunc *TF_InsertTransList 登记业务流水表函数<br />TransFunc *TF_UpdateTransList 更新业务流水表函数 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.2. 得到配置信息类
1.6.2.1. IBTMGetFuncParaPtr
|
|
函数原型: |
char *IBTMGetFuncParaPtr( struct TransEnv *p_te ); |
函数描述: |
得到函数树配置中的函数参数 |
函数说明: |
struct TransEnv *p_te 交易环境 |
返回值: |
返回函数树配置中的函数参数 |
|
|
1.6.3. 设置响应信息类
1.6.3.1. IBTMFormatResponseCode
|
|
函数原型: |
int IBTMFormatResponseCode( struct TransEnv *p_te , int response_code ); |
函数描述: |
设置响应码到交易环境中的响应码字段(调用分阶段执行引擎指定)中 |
函数说明: |
struct TransEnv *p_te 交易环境<br />int response_code 响应码 |
返回值: |
返回输入参数response_code的值 |
|
|
1.6.3.2. IBTMFormatResponseCode
|
|
函数原型: |
int IBTMFormatResponseCode( struct TransEnv *p_te , int response_code ); |
函数描述: |
设置响应码到交易环境中的响应码字段(调用分阶段执行引擎指定)中 |
函数说明: |
struct TransEnv *p_te 交易环境<br />int response_code 响应码 |
返回值: |
返回输入参数response_code的值 |
|
|
1.6.3.3. IBTMFormatResponseDesc
|
|
函数原型: |
void IBTMFormatResponseDesc( struct TransEnv *p_te , char *response_desc_format , ... ); |
函数描述: |
设置响应描述到交易环境中的响应码字段(调用分阶段执行引擎指定)中 |
函数说明: |
struct TransEnv *p_te 交易环境<br />char *response_desc_format , ... 响应描述可变参数列表 |
返回值: |
(无) |
|
|
1.6.3.4. IBTMFormatResponseInfo
|
|
函数原型: |
int IBTMFormatResponseInfo( struct TransEnv *p_te , int response_code , char *response_desc_format , ... ); |
函数描述: |
设置响应码和响应描述到交易环境中的响应码字段(调用分阶段执行引擎指定)中 |
函数说明: |
struct TransEnv *p_te 交易环境<br />int response_code 响应码<br />char *response_desc_format , ... 响应描述可变参数列表 |
返回值: |
返回输入参数response_code的值 |
|
|
1.6.4. 结构体树类
1.6.4.1. IBTMAppendStructBlock
|
|
函数原型: |
int IBTMAppendStructBlock( struct TransEnv *tpe , char *name , long struct_size , void **ppmem ); |
函数描述: |
挂接一个结构体到结构体树中 |
函数说明: |
struct TransEnv *p_te 交易环境<br />char *name 结构体名字(最长64字符)<br />long struct_size 结构体大小<br />void *ppmem 如果(ppmem)==NULL则自动分配内存用以存放该结构体 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.4.2. IBTMGetStructBlock
|
|
函数原型: |
int IBTMGetStructBlock( struct TransEnv *tpe , char *name , long struct_size , void **ppmem ); |
函数描述: |
从结构体树中获取一个结构体 |
函数说明: |
struct TransEnv *p_te 交易环境<br />char *name 结构体名字(最长64字符)<br />long struct_size 结构体大小<br />void *ppmem 返回成功时,(ppmem)指向该结构体 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.4.3. IBTMAppendGetStructBlock
|
|
函数原型: |
int IBTMAppendGetStructBlock( struct TransEnv *tpe , char *name , long struct_size , void **ppmem ); |
函数描述: |
从结构体树中获取一个结构体,如果没有就挂接一个 |
函数说明: |
struct TransEnv *p_te 交易环境<br />char *name 结构体名字(最长64字符)<br />long struct_size 结构体大小<br />void *ppmem如果(ppmem)==NULL则自动分配内存用以存放该结构体 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.5. 动态结构体类
1.6.5.1. DS_NEW
|
|
宏使用示例: |
DS *ds = DS_NEW( "struct_name" ) ; |
函数描述: |
创建一个动态结构体。动态结构体用于在应用模块之间安全的交换数据 |
函数说明: |
动态结构体名称 |
返回值: |
成功则返回动态结构体,失败则返回NULL |
|
|
1.6.5.2. DS_ADD
|
|
宏使用示例: |
DS_TRY(ds)<br />{ <br /> DS_ADD( ds , char , char_field , 0x30 ); <br /> DS_ADD( ds , int , int_field , 123 );<br /> DS_ADD( ds , long , long_field , 45678 );<br /> DS_ADD( ds , float , float_field , 123.0 );<br /> DS_ADD( ds , double , double_field , 456.789 );<br /> DS_ADD( ds , char* , string_field , "hello" );<br />} <br />DS_CATCH(ds)<br />{ <br /> ERRORLOGG( "DS_ADD failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) )<br /> DS_DELETE ( ds );<br /> return -1;<br />} |
函数描述: |
往动态结构体中添加变量字段并直接赋值 |
函数说明: |
动态结构体、变量类型、变量名、变量值 |
返回值: |
全部ADD成功则跳到DS_CATCH后面,有一个ADD失败则跳到DS_CATCH里面 |
|
|
1.6.5.3. DS_SET
|
|
宏使用示例: |
DS_TRY(ds)<br />{ <br /> DS_SET( ds , char , char_field , 0x30 ); <br /> DS_SET( ds , int , int_field , 123 );<br /> DS_SET( ds , long , long_field , 45678 );<br /> DS_SET( ds , float , float_field , 123.0 );<br /> DS_SET( ds , double , double_field , 456.789 );<br /> DS_SET( ds , char* , string_field , "hello" );<br />} <br />DS_CATCH(ds)<br />{ <br /> ERRORLOGG( "DS_SET failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) )<br /> DS_DELETE( ds );<br /> return -1;<br />} |
函数描述: |
设置值到动态结构体中的变量字段中 |
函数说明: |
动态结构体、变量类型、变量名、变量值 |
返回值: |
全部SET成功则跳到DS_CATCH后面,有一个SET失败则跳到DS_CATCH里面 |
|
|
1.6.5.4. DS_GET
|
|
宏使用示例: |
DS_TRY(ds)<br />{ <br /> DS_GET( ds , char , char_field , ch ); <br /> DS_GET( ds , int , int_field , i );<br /> DS_GET( ds , long , long_field , l );<br /> DS_GET( ds , float , float_field , f );<br /> DS_GET( ds , double , double_field , d );<br /> DS_GET( ds , char* , string_field , buf , sizeof(buf) );<br />} <br />DS_CATCH(ds)<br />{ <br /> ERRORLOGG( "DS_GET failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) )<br /> DS_DELETE( ds );<br /> return -1;<br />} |
函数描述: |
从动态结构体中的变量字段中提取值出来 |
函数说明: |
动态结构体、变量类型、变量名、变量值<br />当类型为字符串时,最后需要再加一个参数设置输出缓冲区大小 |
返回值: |
全部GET成功则跳到DS_CATCH后面,有一个GET失败则跳到DS_CATCH里面<br /> |
|
|
1.6.6. 数据库操作类
1.6.6.1. OpenDatabaseSessions
|
|
函数原型: |
int OpenDatabaseSessions(); |
函数描述: |
打开数据库 |
函数说明: |
无 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.6.2. CloseDatabaseSessions
|
|
函数原型: |
int CloseDatabaseSessions(); |
函数描述: |
关闭数据库 |
函数说明: |
无 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.6.3. BeginDatabaseTransaction
|
|
函数原型: |
int BeginDatabaseTransaction(); |
函数描述: |
开始数据库事务 |
函数说明: |
无 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.6.4. CommitDatabaseTransaction
|
|
函数原型: |
int CommitDatabaseTransaction(); |
函数描述: |
提交数据库事务 |
函数说明: |
无 |
返回值: |
成功则返回0,失败则返回非0 |
|
|
1.6.6.5. RollbackDatabaseTransaction
|
|
函数原型: |
int RollbackDatabaseTransaction(); |
函数描述: |
提交回滚数据库事务 |
函数说明: |
无 |
2. 代码示例
2.1. 公共API
2.1.1. 创建临时文件
char filename[ IBP_MAXLEN_FILENAME + 1 ] ;
FILE *fp = NULL ;
fp = IBPCreateTempFile( "id" , filename , NULL , "w" ) ;
if( fp == NULL )
{
printf( " IBPCreateTempFile failed , errno[%d]\n" , errno );
return -1;
}
...
fclose( fp );
nret = IBASPutResponseFile( addon_files , filename ) ;
if( nret )
{
printf( " IBASPutResponseFile failed , errno[%d]\n" , errno );
return -1;
}
2.2. 通讯客户端API
2.2.1. 发起通讯请求(中层)
test/test_ibpclient/ibp_test_echo/ibp_test_echo.c
#include "ibac_api.h"
int ibp_test_echo_IBACRequester( char *node , char *app , char *msg )
{
struct IbacEnv *p_env = NULL ;
char *p_msg = NULL ;
int msg_len ;
int nret = 0 ;
/* 创建通讯客户端环境 */
p_env = IBACCreateEnvirment( NULL ) ;
if( p_env == NULL )
{
printf( "IBACCreateEnvirment failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBACCreateEnvirment ok\n" );
}
/* 连接通讯服务端,发送请求,接收响应,断开通讯服务端 */
/* 向节点node发起交易app,p_msg指向请求报文,交易完成后,响应报文存放在通讯客户端环境中,p_msg指向它 */
p_msg = msg ;
msg_len = strlen(msg) ;
nret = IBACRequester( p_env , node , app , & p_msg , & msg_len , NULL , NULL ) ;
if( nret )
{
printf( "IBACRequester failed[%d] , errno[%d]\n" , nret , errno );
return -1;
}
else
{
printf( "IBACRequester ok , msg[%.*s]\n" , msg_len , p_msg );
}
/* 销毁通讯客户端环境 */
IBACDestroyEnvirment( p_env );
printf( "IBACDestroyEnvirment ok\n" );
return 0;
}
static void usage()
{
printf( "USAGE : ibp_test_echo node app msg\n" );
return;
}
int main( int argc , char *argv[] )
{
int nret = 0 ;
if( argc == 1 + 3 )
{
IBPInitLogEnv( "" , "ibp_test_echo" , "file::log/event.log" , LOG_LEVEL_DEBUG , "file::log/ibp_test_echo.log" );
nret = ibp_test_echo_IBACRequester( argv[1] , argv[2] , argv[3] ) ;
IBPCleanLogEnv();
return -nret;
}
else
{
usage();
exit(7);
}
}
test/test_ibpclient/ibp_test_echo/makefile
# 此文件由makeobj.sh自动生成
############################################################
# 项目名 :
# 模块名 :
# 备 注 :
############################################################
###### 源文件配置区
#@ c_FILE
c_FILE = \
ibp_test_echo.c \
###### 目标文件、安装目录配置区
include makeinstall
BIN = ibp_test_echo
BININST = $(_BININST)
###### 编译选项
CFLAGS = $(_CFLAGS) \
-std=gnu99 \
-I$(HOME)/include/ibp \
###### 链接选项
LFLAGS = $(_LFLAGS) \
-rdynamic \
-L$(HOME)/lib \
-libac_api
###### 额外宏定义区
CLEAN_ADDITION =
###### 加载mktpl模板库
#@ make_all
#@ make_clean
#@ make_install
#@ make_install_BININST
#@ make_install_DFTHDERINST
#@ make_uninstall
#@ make_uninstall_BININST
#@ make_uninstall_DFTHDERINST
include $(MKTPLDIR)/makeobj_$(MKTPLOS).inc
###### 目标文件依赖关系
ibp_test_echo : $(c_FILE_o)
$(CC) -o $@ $(c_FILE_o) $(LFLAGS)
2.2.2. 发起通讯请求(中层)(附带文件)
test/test_ibpclient/ibp_test_file/ibp_test_file.c
#include "ibac_api.h"
static int ibp_test_file( char *node , char *msg )
{
struct IbacEnv *p_env = NULL ;
FILE *fp = NULL ;
char tmp_req_filename1[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_req_filename2[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_req_filename3[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_req_filename4[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_rsp_filename1[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_rsp_filename2[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_rsp_filename3[ IBP_MAXLEN_FILENAME + 1 ] ;
char tmp_rsp_filename4[ IBP_MAXLEN_FILENAME + 1 ] ;
char *p_msg = NULL ;
int msg_len ;
int nret = 0 ;
/* 创建通讯客户端环境 */
p_env = IBACCreateEnvirment( NULL ) ;
if( p_env == NULL )
{
printf( "IBACCreateEnvirment failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBACCreateEnvirment ok\n" );
}
/* 创建请求临时文件1 */
/* 是个空文件 */
memset( tmp_req_filename1 , 0x00 , sizeof(tmp_req_filename1) );
fp = IBPCreateTempFile( "AFILE" , tmp_req_filename1 , NULL , "wb" ) ;
if( fp == NULL )
{
printf( "IBPCreateTempFile failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBPCreateTempFile ok , tmp_req_filename1[%s]\n" , tmp_req_filename1 );
fclose( fp );
}
/* 创建请求临时文件2 */
/* 文件大小为1个字节 */
memset( tmp_req_filename2 , 0x00 , sizeof(tmp_req_filename2) );
fp = IBPCreateTempFile( "BFILE" , tmp_req_filename2 , NULL , "wb" ) ;
if( fp == NULL )
{
printf( "IBPCreateTempFile failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBPCreateTempFile ok , tmp_req_filename2[%s]\n" , tmp_req_filename2 );
fprintf( fp , "2\n" );
fclose( fp );
}
/* 创建请求临时文件3 */
/* 文件大小为1024个字节 */
memset( tmp_req_filename3 , 0x00 , sizeof(tmp_req_filename3) );
fp = IBPCreateTempFile( "CFILE" , tmp_req_filename3 , NULL , "wb" ) ;
if( fp == NULL )
{
printf( "IBPCreateTempFile failed , errno[%d]\n" , errno );
return -1;
}
else
{
char buf[ 1023 ] ;
printf( "IBPCreateTempFile ok , tmp_req_filename3[%s]\n" , tmp_req_filename3 );
memset( buf , '3' , sizeof(buf) );
fwrite( buf , sizeof(buf) , 1 , fp );
fclose( fp );
}
/* 创建请求临时文件4 */
/* 文件大小为1024*1024个字节 */
memset( tmp_req_filename4 , 0x00 , sizeof(tmp_req_filename4) );
fp = IBPCreateTempFile( "DFILE" , tmp_req_filename4 , NULL , "wb" ) ;
if( fp == NULL )
{
printf( "IBPCreateTempFile failed , errno[%d]\n" , errno );
return -1;
}
else
{
char buf[ 1025 ] ;
int i ;
printf( "IBPCreateTempFile ok , tmp_req_filename4[%s]\n" , tmp_req_filename4 );
memset( buf , '4' , sizeof(buf) );
for( i = 0 ; i < 1025 ; i++ )
fwrite( buf , sizeof(buf) , 1 , fp );
fclose( fp );
}
/* 初始化响应临时文件名缓冲区,如果有响应临时文件回来就会往里面放 */
memset( tmp_rsp_filename1 , 0x00 , sizeof(tmp_rsp_filename1) );
memset( tmp_rsp_filename2 , 0x00 , sizeof(tmp_rsp_filename2) );
memset( tmp_rsp_filename3 , 0x00 , sizeof(tmp_rsp_filename3) );
memset( tmp_rsp_filename4 , 0x00 , sizeof(tmp_rsp_filename4) );
/* 连接通讯服务端,发送请求,接收响应,断开通讯服务端 */
/* 向节点node发起交易app,p_msg指向请求报文,交易完成后,响应报文存放在通讯客户端环境中,p_msg指向它 */
p_msg = msg ;
msg_len = strlen(msg) ;
nret = IBACRequester( p_env , node , "ibp_test_file" , & p_msg , & msg_len , tmp_req_filename1 , tmp_req_filename2 , tmp_req_filename3 , tmp_req_filename4 , NULL , tmp_rsp_filename1 , tmp_rsp_filename2 , tmp_rsp_filename3 , tmp_rsp_filename4 , NULL ) ;
if( nret )
{
printf( "IBACRequester failed[%d] , errno[%d]\n" , nret , errno );
return -1;
}
else
{
printf( "IBACRequester ok , msg[%.*s]\n" , msg_len , p_msg );
printf( "tmp_rsp_filename1[%s]\n" , tmp_rsp_filename1 );
printf( "tmp_rsp_filename2[%s]\n" , tmp_rsp_filename2 );
printf( "tmp_rsp_filename3[%s]\n" , tmp_rsp_filename3 );
printf( "tmp_rsp_filename4[%s]\n" , tmp_rsp_filename4 );
}
/* 销毁通讯客户端环境 */
IBACDestroyEnvirment( p_env );
printf( "IBACDestroyEnvirment ok\n" );
return 0;
}
static void usage()
{
printf( "USAGE : ibp_test_file node msg\n" );
return;
}
int main( int argc , char *argv[] )
{
int nret = 0 ;
if( argc == 1 + 2 )
{
IBPInitLogEnv( "" , "ibp_test_file" , "file::log/event.log" , LOG_LEVEL_DEBUG , "file::log/ibp_test_file.log" );
nret = ibp_test_file( argv[1] , argv[2] ) ;
IBPCleanLogEnv();
return -nret;
}
else
{
usage();
exit(7);
}
}
2.2.3. 发起通讯请求(低层)
test/test_ibpclient/ibp_test_echo/ibp_test_echo.c
#include "ibac_api.h"
int ibp_test_echo_IBACSendRequestAndReceiveResponse( char *node , char *app , char *msg )
{
struct IbacEnv *p_env = NULL ;
char *p_msg = NULL ;
int msg_len ;
int nret = 0 ;
/* 创建通讯客户端环境 */
p_env = IBACCreateEnvirment( NULL ) ;
if( p_env == NULL )
{
printf( "IBACCreateEnvirment failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBACCreateEnvirment ok\n" );
}
/* 连接通讯服务端 */
nret = IBACConnect( p_env , node ) ;
if( nret )
{
printf( "IBACConnect failed , errno[%d]\n" , errno );
return -1;
}
else
{
printf( "IBACConnect ok\n" );
}
/* 发送请求,接收响应 */
/* 向节点node发起交易app,p_msg指向请求报文,交易完成后,响应报文存放在通讯客户端环境中,p_msg指向它 */
p_msg = msg ;
msg_len = strlen(msg) ;
nret = IBACSendRequestAndReceiveResponse( p_env , app , & p_msg , & msg_len , NULL , NULL ) ;
if( nret )
{
printf( "IBACSendRequestAndReceiveResponse failed[%d] , errno[%d]\n" , nret , errno );
return -1;
}
else
{
printf( "IBACSendRequestAndReceiveResponse ok , msg[%.*s]\n" , msg_len , p_msg );
}
/* 断开通讯服务端 */
IBACDisconnect( p_env );
printf( "IBACDisconnect ok\n" );
/* 销毁通讯客户端环境 */
IBACDestroyEnvirment( p_env );
printf( "IBACDestroyEnvirment ok\n" );
return 0;
}
static void usage()
{
printf( "USAGE : ibp_test_echo node app msg\n" );
return;
}
int main( int argc , char *argv[] )
{
int nret = 0 ;
if( argc == 1 + 3 )
{
IBPInitLogEnv( "" , "ibp_test_echo" , "file::log/event.log" , LOG_LEVEL_DEBUG , "file::log/ibp_test_echo.log" );
nret = ibp_test_echo_IBACSendRequestAndReceiveResponse ( argv[1] , argv[2] , argv[3] ) ;
IBPCleanLogEnv();
return -nret;
}
else
{
usage();
exit(7);
}
}
2.3. 通讯服务端API
2.3.1. 回射服务
test/test_ibpserver/ibp_test_echo/ibp_test_echo.c
#include "ibas_api.h"
funcIbasSomain somain ;
int somain( struct HttpBuffer *req_body , struct HttpBuffer *rsp_body , struct IbasAddonFiles *addon_files )
{
char *msg = NULL ;
int msg_len ;
int nret = 0 ;
INFOLOGSG( "ENTER ibp_test_echo" );
/* 回射请求报文 */
msg = GetHttpBufferBase( req_body , & msg_len ) ;
nret = MemcatHttpBuffer( rsp_body , msg , msg_len ) ;
if( nret )
{
ERRORLOGG( "MemcatHttpBuffer failed[%d] , errno[%d]" , nret , errno );
return -1;
}
else
{
INFOLOGG( "msg[%.*s]" , msg_len , msg );
}
INFOLOGSG( "LEAVE ibp_test_echo" );
return nret;
}
test/test_ibpserver/ibp_test_echo/makefile
# 此文件由makeobj.sh自动生成
############################################################
# 项目名 :
# 模块名 :
# 备 注 :
############################################################
###### 源文件配置区
#@ c_FILE
c_FILE = \
ibp_test_echo.c \
###### 目标文件、安装目录配置区
include makeinstall
LIB = ibp_test_echo.so
LIBINST = $(_LIBINST)
###### 编译选项
CFLAGS = $(_CFLAGS) \
-std=gnu99 \
-I$(HOME)/include/ibp \
###### 链接选项
LFLAGS = $(_LFLAGS) \
-rdynamic \
-L$(HOME)/lib \
-libas_api \
###### 额外宏定义区
CLEAN_ADDITION =
###### 加载mktpl模板库
#@ make_all
#@ make_clean
#@ make_install
#@ make_install_LIBINST
#@ make_install_DFTHDERINST
#@ make_uninstall
#@ make_uninstall_LIBINST
#@ make_uninstall_DFTHDERINST
include $(MKTPLDIR)/makeobj_$(MKTPLOS).inc
###### 目标文件依赖关系
ibp_test_echo.so : $(c_FILE_o)
$(CC) -o $@ $(c_FILE_o) $(SOFLAGS) $(LFLAGS)
ibpcheckso $@ -r
2.3.2. 回射服务(附带文件)
test/test_ibpserver/ibp_test_file/ibp_test_file.c
#include "ibas_api.h"
funcIbasSomain somain ;
int somain( struct HttpBuffer *req_body , struct HttpBuffer *rsp_body , struct IbasAddonFiles *addon_files )
{
char *msg = NULL ;
int msg_len ;
int i ;
int count ;
char *p_filename = NULL ;
int nret = 0 ;
INFOLOGSG( "ENTER ibp_test_file" );
/* 回射请求报文 */
msg = GetHttpBufferBase( req_body , & msg_len ) ;
nret = MemcatHttpBuffer( rsp_body , msg , msg_len ) ;
if( nret )
{
ERRORLOGG( "MemcatHttpBuffer failed[%d] , errno[%d]" , nret , errno );
return -1;
}
else
{
INFOHEXLOGG( msg , msg_len , "msg [%d]bytes" , msg_len );
}
/* 按文件ID取请求文件名 */
p_filename = IBASGetRequestFileById( addon_files , "BFILE" ) ;
if( p_filename )
{
INFOLOGG( "IBASGetRequestFile ok , [%s]" , p_filename );
}
/* 回射所有请求文件 */
count = IBASGetRequestFileCount( addon_files ) ;
for( i = 0 ; i < count ; i++ )
{
p_filename = IBASGetRequestFile( addon_files , i ) ;
INFOLOGG( "FILE[%s] " , p_filename );
nret = IBASPutResponseFile( addon_files , p_filename ) ;
if( nret )
{
ERRORLOGG( "IBASPutResponseFile failed[%d]" , nret );
return -2;
}
}
INFOLOGSG( "LEAVE ibp_test_file" );
return 0;
}
2.4. 报文转换API
test/test_ibpclient/ibp_test_ts1/ibp_test_ts1.c
#include "ibmsgv_api.h"
#include "IDL_test_ibpts1_request.dsc.h"
#include "IDL_test_ibpts1_response.dsc.h"
static int ibp_test_ts1( char *node )
{
test_ibpts1_request req_msg ;
test_ibpts1_response rsp_msg ;
int nret = 0 ;
memset( & req_msg , 0x00 , sizeof(test_ibpts1_request) );
strcpy( req_msg.test_request_header.trans_code , "ibp_test_ts1" );
strcpy( req_msg.test_ibpts1.account_no , "603367123412341234" );
memset( & rsp_msg , 0x00 , sizeof(test_ibpts1_response) );
nret = IBMSGVCall_JSON( NULL , node , "ibp_test_ts1" , (void*) & req_msg , & DSCSERIALIZE_JSON_DUP_test_ibpts1_request_V , (void*) & rsp_msg , & DSCDESERIALIZE_JSON_test_ibpts1_response_V , NULL , NULL ) ;
if( nret )
{
printf( "IBMSGVCall failed[%d] , errno[%d]\n" , nret , errno );
return -1;
}
else
{
printf( "IBMSGVCall ok\n" );
}
printf( "response_code[%s] response_desc[%s] - account_no[%s] balance[%.2lf]\n"
, rsp_msg.test_response_header.response_code , rsp_msg.test_response_header.response_desc
, rsp_msg.test_ibpts1.account_no , rsp_msg.test_ibpts1.balance );
return 0;
}
static void usage()
{
printf( "USAGE : ibp_test_ts1 node\n" );
return;
}
int main( int argc , char *argv[] )
{
int nret = 0 ;
if( argc == 1 + 1 )
{
IBPInitLogEnv( "" , "ibp_test_ts1" , "file::log/event.log" , LOG_LEVEL_DEBUG , "file::log/ibp_test_ts1.log" );
nret = ibp_test_ts1( argv[1] ) ;
IBPCleanLogEnv();
return -nret;
}
else
{
usage();
exit(7);
}
}
test/test_ibpclient/ibp_test_ts1/makefile
# 此文件由makeobj.sh自动生成
############################################################
# 项目名 :
# 模块名 :
# 备 注 :
############################################################
###### 源文件配置区
#@ c_FILE
c_FILE = \
ibp_test_ts1.c \
###### 目标文件、安装目录配置区
include makeinstall
BIN = ibp_test_ts1
BININST = $(_BININST)
###### 编译选项
CFLAGS = $(_CFLAGS) \
-std=gnu99 \
-I$(HOME)/include/ibp \
-I../../test_ibpserver/ibp_test_ts1 \
###### 链接选项
LFLAGS = $(_LFLAGS) \
-rdynamic \
-L$(HOME)/lib \
-libmsgv_api \
###### 额外宏定义区
CLEAN_ADDITION =
###### 加载mktpl模板库
#@ make_all
#@ make_clean
#@ make_install
#@ make_install_BININST
#@ make_install_DFTHDERINST
#@ make_uninstall
#@ make_uninstall_BININST
#@ make_uninstall_DFTHDERINST
include $(MKTPLDIR)/makeobj_$(MKTPLOS).inc
###### 目标文件依赖关系
ibp_test_ts1 : $(c_FILE_o) IDL_test_ibpts1_request.dsc.o IDL_test_ibpts1_response.dsc.o
$(CC) -o $@ $(c_FILE_o) IDL_test_ibpts1_request.dsc.o IDL_test_ibpts1_response.dsc.o $(LFLAGS)
2.5. 动态结构容器
src/ibtm/test.c
/*
* IBP - Technology architecture for real-time transaction
* author : calvin
* email : calvinwilliams@163.com
*
* Licensed under the LGPL v2.1, see the file LICENSE in base directory.
*/
#include "ibtm_in.h"
struct DS_infunc
{
char ch ;
short s ;
int i ;
long l ;
float f ;
double d ;
char buf[ 64 + 1 ] ;
} ;
int test_DS_infunc( DS *ds )
{
struct DS_infunc infunc ;
DS_TRY(ds)
{
DS_GET( ds , char , char_field , & (infunc.ch) )
DS_GET( ds , short , short_field , & (infunc.s) )
DS_GET( ds , int , int_field , & (infunc.i) )
DS_GET( ds , long , long_field , & (infunc.l) )
DS_GET( ds , float , float_field , & (infunc.f) )
DS_GET( ds , double , double_field , & (infunc.d) )
DS_GET( ds , char* , string_field , infunc.buf , sizeof(infunc.buf) )
}
DS_CATCH(ds)
{
printf( "DS_GET failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]\n" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) );
return -1;
}
printf( "--- infunc ---\n" );
printf( "infunc.ch [%c]\n" , infunc.ch );
printf( "infunc.s [%hd]\n" , infunc.s );
printf( "infunc.i [%d]\n" , infunc.i );
printf( "infunc.l [%ld]\n" , infunc.l );
printf( "infunc.f [%f]\n" , infunc.f );
printf( "infunc.d [%lf]\n" , infunc.d );
printf( "infunc.buf[%s]\n" , infunc.buf );
DS_TRY(ds)
{
DS_SET( ds , char , char_field , 'Z' )
DS_SET( ds , short , short_field , 9 )
DS_SET( ds , int , int_field , 87 )
DS_SET( ds , long , long_field , 654321 )
DS_SET( ds , float , float_field , 9.8 )
DS_SET( ds , double , double_field , 7654.3210 )
DS_SET( ds , char* , string_field , "world" )
}
DS_CATCH(ds)
{
printf( "DS_SET failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]\n" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) );
return -1;
}
return 0;
}
struct DS_caller
{
char ch ;
short s ;
int i ;
long l ;
float f ;
double d ;
char buf[ 64 + 1 ] ;
} ;
int test_DS_caller()
{
struct DS_caller caller ;
DS *ds = DS_NEW( "struct_name" ) ;
if( ds == NULL )
{
printf( "DS_NEW failed , errno[%d]\n" , errno );
return -1;
}
memset( & caller , 0x00 , sizeof(struct DS_caller) );
caller.ch = 'A' ;
caller.s = 1 ;
caller.i = 23 ;
caller.l = 456789 ;
caller.f = 1.2 ;
caller.d = 3456.7890 ;
strcpy( caller.buf , "hello" );
DS_TRY(ds)
{
DS_ADD( ds , char , char_field , caller.ch )
DS_ADD( ds , short , short_field , caller.s )
DS_ADD( ds , int , int_field , caller.i )
DS_ADD( ds , long , long_field , caller.l )
DS_ADD( ds , float , float_field , caller.f )
DS_ADD( ds , double , double_field , caller.d )
DS_ADD( ds , char* , string_field , caller.buf )
}
DS_CATCH(ds)
{
printf( "DS_ADD failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]\n" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) );
DS_DELETE( ds )
return -1;
}
test_DS_infunc( ds );
memset( & caller , 0x00 , sizeof(struct DS_caller) );
DS_TRY(ds)
{
DS_GET( ds , char , char_field , & (caller.ch) )
DS_GET( ds , short , short_field , & (caller.s) )
DS_GET( ds , int , int_field , & (caller.i) )
DS_GET( ds , long , long_field , & (caller.l) )
DS_GET( ds , float , float_field , & (caller.f) )
DS_GET( ds , double , double_field , & (caller.d) )
DS_GET( ds , char* , string_field , caller.buf , sizeof(caller.buf) )
}
DS_CATCH(ds)
{
printf( "DS_GET failed , LINE[%d] FIELD_NAME[%s] ERROR[%d]\n" , DSGetLastSourceLine(ds) , DSGetFieldName(ds) , DSGetLastError(ds) );
DS_DELETE( ds )
return -1;
}
printf( "--- caller ---\n" );
printf( "caller.ch [%c]\n" , caller.ch );
printf( "caller.s [%hd]\n" , caller.s );
printf( "caller.i [%d]\n" , caller.i );
printf( "caller.l [%ld]\n" , caller.l );
printf( "caller.f [%f]\n" , caller.f );
printf( "caller.d [%lf]\n" , caller.d );
printf( "caller.buf[%s]\n" , caller.buf );
DS_DELETE( ds )
return 0;
}
int main()
{
return -test_DS_caller();
}
2.6. 分阶段管理层API
test/test_ibpserver/ibp_test_ts1/IDL_test_ibpts1_request.dsc
STRUCT test_ibpts1_request # 余额查询 请求
{
INCLUDE IDL_test_request_header.dsc
STRUCT test_ibpts1
{
STRING 40 account_no # 账号
STRING 16 password # 密码
}
}
test/test_ibpserver/ibp_test_ts1/IDL_test_ibpts1_response.dsc
STRUCT test_ibpts1_response # 余额查询 响应
{
INCLUDE IDL_test_response_header.dsc
STRUCT test_ibpts1
{
STRING 40 account_no # 账号
NUMERIC 16,2 balance # 余额
}
}
test/test_ibpserver/ibp_test_ts1/IDL_test_request_header.dsc
STRUCT test_request_header # 请求公共头
{
STRING 10 sender_date # 发起方日期
STRING 8 sender_time # 发起方时间
STRING 20 sender_trans_no # 发起方流水号
STRING 6 channel_code # 交易渠道
STRING 10 branch_no # 交易网点
STRING 12 oper_no # 交易柜员
STRING 32 login_session # 签到会话
STRING 20 trans_code # 交易码
}
test/test_ibpserver/ibp_test_ts1/IDL_test_response_header.dsc
STRUCT test_response_header # 响应公共头
{
STRING 10 sender_date # 发起方日期
STRING 8 sender_time # 发起方时间
STRING 20 sender_trans_no # 发起方流水号
STRING 10 receiver_date # 接收方日期
STRING 8 receiver_time # 接收方时间
STRING 20 receiver_trans_no # 接收方流水号
STRING 10 response_code # 交易结果
STRING 128 response_desc # 交易结果描述
STRING 128 response_message # 额外信息
}
test/test_ibpserver/ibp_test_ts1/somain.c
#include "ibmsgv_api.h"
#include "IDL_test_ibpts1_request.dsc.h"
#include "IDL_test_ibpts1_response.dsc.h"
funcIbmsgvTransmain transmain ;
funcIbasSomain somain ;
int somain( struct HttpBuffer *req_body , struct HttpBuffer *rsp_body , struct IbasAddonFiles *addon_files )
{
test_ibpts1_request req_st ;
test_ibpts1_response rsp_st ;
int nret = 0 ;
INFOLOGG( "ENTER TESTTPS1" );
memset( & req_st , 0x00 , sizeof(test_ibpts1_request) );
memset( & rsp_st , 0x00 , sizeof(test_ibpts1_response) );
nret = IBMSGVReceiver_JSON( req_body , & DSCDESERIALIZE_JSON_test_ibpts1_request_V , & req_st
, rsp_body , & DSCSERIALIZE_JSON_DUP_test_ibpts1_response_V , & rsp_st
, & transmain , addon_files ) ;
if( nret )
{
ERRORLOGG( "IBMSGVReceiver_JSON failed[%d]" , nret );
}
else
{
INFOLOGG( "IBMSGVReceiver_JSON ok" );
}
INFOLOGG( "LEAVE TESTTPS1" );
return nret;
}
test/test_ibpserver/ibp_test_ts1/transmain.c
#include "ibts_api.h"
#include "IDL_test_ibpts1_request.dsc.h"
#include "IDL_test_ibpts1_response.dsc.h"
#include "TF_BT.c"
#include "TF_PC.c"
#include "TF_BC.c"
#include "TF_BP.c"
#include "TF_AP.c"
#include "TF_AT.c"
struct TransFuncArray TFA_BT_TESTTPS1[] =
{
FUNC( "交易前处理1" , TF_BT_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_PC_CH_TESTTPS1[] =
{
FUNC( "渠道公共检查" , TF_PC_CH_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_PC_OP_TESTTPS1[] =
{
FUNC( "操作员公共检查" , TF_PC_OP_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_PC_OG_TESTTPS1[] =
{
FUNC( "机构公共检查" , TF_PC_OG_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BC_MD_TESTTPS1[] =
{
FUNC( "介质层业务检查" , TF_BC_MD_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BC_AT_TESTTPS1[] =
{
FUNC( "账户层业务检查" , TF_BC_AT_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BC_CT_TESTTPS1[] =
{
FUNC( "客户层业务检查" , TF_BC_CT_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BC_BS_TESTTPS1[] =
{
FUNC( "业务层检查函数1" , TF_BC_BS_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BP_MD_TESTTPS1[] =
{
FUNC( "介质层业务处理" , TF_BP_MD_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BP_AT_TESTTPS1[] =
{
FUNC( "账户层业务处理" , TF_BP_AT_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BP_CT_TESTTPS1[] =
{
FUNC( "客户层业务处理" , TF_BP_CT_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_BP_BS_TESTTPS1[] =
{
FUNC( "业务处理函数1" , TF_BP_BS_TESTTPS1_F1 )
FUNCARRAY( "业务处理函数数组2" , TFA_BP_TESTTPS1_FA2 )
IF_IN_TRANSCODES_THEN_FUNC( "业务处理函数数组3" , "TESTTPS1" , TF_BP_BS_TESTTPS1_F3 )
IF_NOTIN_TRANSCODES_THEN_FUNCARRAY( "业务处理函数数组0" , "TESTTPS1" , TFA_BP_BS_TESTTPS1_FA0 )
IF_FUNC_THEN( "业务处理函数4" , TF_BP_BS_TESTTPS1_F4 )
FUNC( "业务处理函数5" , TF_BP_BS_TESTTPS1_F5 )
ELSE
FUNC( "业务处理函数0" , TF_BP_BS_TESTTPS1_F0 )
ENDIF
IF_FUNCARRAY_THEN( "业务处理函数数组6" , TFA_BP_BS_TESTTPS1_FA6 )
FUNC( "业务处理函数0" , TF_BP_BS_TESTTPS1_F0 )
ELSE
FUNC( "业务处理函数7" , TF_BP_BS_TESTTPS1_F7 )
ENDIF
FUNC( "业务处理函数8" , TF_BP_BS_TESTTPS1_F8 )
RETURN
} ;
struct TransFuncArray TFA_AP_TESTTPS1[] =
{
FUNC( "账务处理" , TF_AP_TESTTPS1 )
RETURN
} ;
struct TransFuncArray TFA_AT_TESTTPS1[] =
{
FUNC( "交易后处理" , TF_AT_TESTTPS1 )
RETURN
} ;
struct TransSchedule_BT_PC_BP_AP_AT TS_TESTTPS1 =
{
"交易前处理" , TFA_BT_TESTTPS1 ,
{
"渠道公共检查" , TFA_PC_CH_TESTTPS1 ,
"操作员公共检查" , TFA_PC_OP_TESTTPS1 ,
"机构公共检查" , TFA_PC_OG_TESTTPS1 ,
"其它公共检查" , NULL
} ,
{
"介质层业务检查" , TFA_BC_MD_TESTTPS1 ,
"账户层业务检查" , TFA_BC_AT_TESTTPS1 ,
"客户层业务检查" , TFA_BC_CT_TESTTPS1 ,
"业务层业务检查" , TFA_BC_BS_TESTTPS1 ,
"其它业务检查" , NULL
} ,
{
"介质层业务处理" , TFA_BP_MD_TESTTPS1 ,
"账户层业务处理" , TFA_BP_AT_TESTTPS1 ,
"客户层业务处理" , TFA_BP_CT_TESTTPS1 ,
"业务层业务处理" , TFA_BP_BS_TESTTPS1 ,
"其它业务处理" , NULL
} ,
"账务处理" , TFA_AP_TESTTPS1 ,
"交易后处理" , TFA_AT_TESTTPS1
} ;
funcIbmsgvTransmain transmain ;
int transmain( void *pv_req_st , void *pv_rsp_st , struct IbasAddonFiles *addon_files )
{
test_ibpts1_request *p_req_st = (test_ibpts1_request *) pv_req_st ;
test_ibpts1_response *p_rsp_st = (test_ibpts1_response *) pv_rsp_st ;
int nret = 0 ;
nret = IBTSExecuteSchedule_BT_PC_BP_AP_AT( "test_ibpts1_request" , sizeof(test_ibpts1_request) , pv_req_st
, "test_ibpts1_response" , sizeof(test_ibpts1_response) , pv_rsp_st
, addon_files
, p_req_st->test_request_header.trans_code
, p_rsp_st->test_response_header.response_code , sizeof(p_rsp_st->test_response_header.response_code)
, p_rsp_st->test_response_header.response_desc , sizeof(p_rsp_st->test_response_header.response_desc)
, & TS_TESTTPS1 ) ;
if( nret )
{
ERRORLOGG( "IBTSExecuteSchedule_BT_PC_BP_AP_AT failed[%d]" , nret );
}
else
{
INFOLOGG( "IBTSExecuteSchedule_BT_PC_BP_AP_AT ok" );
}
return nret;
}
test/test_ibpserver/ibp_test_ts1/TF_BT.c
#include "ibtm_api.h"
TransFunc TF_BT_TESTTPS1 ;
int TF_BT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
test/test_ibpserver/ibp_test_ts1/TF_PC.c
#include "ibtm_api.h"
TransFunc TF_PC_CH_TESTTPS1 ;
int TF_PC_CH_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_PC_OP_TESTTPS1 ;
int TF_PC_OP_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_PC_OG_TESTTPS1 ;
int TF_PC_OG_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
test/test_ibpserver/ibp_test_ts1/TF_BC.c
#include "ibtm_api.h"
TransFunc TF_BC_MD_TESTTPS1 ;
int TF_BC_MD_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
/*
return IBTMFormatResponseInfo( p_te , -1 , "无此卡号[%s]" , "603367123412341234" );
*/
return 0;
}
TransFunc TF_BC_AT_TESTTPS1 ;
int TF_BC_AT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BC_CT_TESTTPS1 ;
int TF_BC_CT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BC_BS_TESTTPS1 ;
int TF_BC_BS_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
test/test_ibpserver/ibp_test_ts1/TF_BP.c
#include "ibtm_api.h"
TransFunc TF_BP_MD_TESTTPS1 ;
int TF_BP_MD_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_AT_TESTTPS1 ;
int TF_BP_AT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_CT_TESTTPS1 ;
int TF_BP_CT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_BS_TESTTPS1_F0 ;
int TF_BP_BS_TESTTPS1_F0( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
struct TransFuncArray TFA_BP_BS_TESTTPS1_FA0[] =
{
FUNC( "业务层业务处理0" , TF_BP_BS_TESTTPS1_F0 )
RETURN
} ;
TransFunc TF_BP_BS_TESTTPS1_F1 ;
int TF_BP_BS_TESTTPS1_F1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_BS_TESTTPS1_F2 ;
int TF_BP_BS_TESTTPS1_F2( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
struct TransFuncArray TFA_BP_TESTTPS1_FA2[] =
{
FUNC( "业务层业务处理2" , TF_BP_BS_TESTTPS1_F2 )
RETURN
} ;
TransFunc TF_BP_BS_TESTTPS1_F3 ;
int TF_BP_BS_TESTTPS1_F3( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_BS_TESTTPS1_F4 ;
int TF_BP_BS_TESTTPS1_F4( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_BS_TESTTPS1_F5 ;
int TF_BP_BS_TESTTPS1_F5( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
TransFunc TF_BP_BS_TESTTPS1_F6 ;
int TF_BP_BS_TESTTPS1_F6( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 1;
}
struct TransFuncArray TFA_BP_BS_TESTTPS1_FA6[] =
{
FUNC( "业务层业务处理6" , TF_BP_BS_TESTTPS1_F6 )
RETURN
} ;
TransFunc TF_BP_BS_TESTTPS1_F7 ;
int TF_BP_BS_TESTTPS1_F7( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
void do_coredump( struct TransEnv *p_te )
{
#if 0
char *p = NULL ;
strcpy( p , "let's core" );
#endif
return;
}
TransFunc TF_BP_BS_TESTTPS1_F8 ;
int TF_BP_BS_TESTTPS1_F8( struct TransEnv *p_te )
{
test_ibpts1_request *p_req_msg = NULL ;
test_ibpts1_response *p_rsp_msg = NULL ;
int nret = 0 ;
nret = IBTMGetStructBlock( p_te , "test_ibpts1_request" , sizeof(test_ibpts1_request) , (void**) & p_req_msg ) ;
if( nret )
{
ERRORLOGG( "IBTMGetStructBlock failed[%d]" , nret );
return 1;
}
nret = IBTMGetStructBlock( p_te , "test_ibpts1_response" , sizeof(test_ibpts1_response) , (void**) & p_rsp_msg ) ;
if( nret )
{
ERRORLOGG( "IBTMGetStructBlock failed[%d]" , nret );
return 1;
}
do_coredump( p_te );
strcpy( p_rsp_msg->test_ibpts1.account_no , p_req_msg->test_ibpts1.account_no );
p_rsp_msg->test_ibpts1.balance = 1000.00 ;
return 0;
}
test/test_ibpserver/ibp_test_ts1/TF_AP.c
#include "ibtm_api.h"
TransFunc TF_AP_TESTTPS1 ;
int TF_AP_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
test/test_ibpserver/ibp_test_ts1/TF_AT.c
#include "ibtm_api.h"
TransFunc TF_AT_TESTTPS1 ;
int TF_AT_TESTTPS1( struct TransEnv *p_te )
{
INFOLOGG( "..." );
return 0;
}
test/test_ibpserver/ibp_test_ts1/makefile
# 此文件由makeobj.sh自动生成
############################################################
# 项目名 :
# 模块名 :
# 备 注 :
############################################################
###### 源文件配置区
#@ c_FILE
c_FILE = \
IDL_test_ibpts1_request.dsc.c \
IDL_test_ibpts1_response.dsc.c \
somain.c \
transmain.c \
###### 目标文件、安装目录配置区
include makeinstall
LIB = ibp_test_ts1.so
LIBINST = $(_LIBINST)
###### 编译选项
CFLAGS = $(_CFLAGS) \
-std=gnu99 \
-I$(HOME)/include/ibp \
###### 链接选项
LFLAGS = $(_LFLAGS) \
-rdynamic \
-L$(HOME)/lib \
-libmsgv_api \
-libtm_api \
-libts_api \
###### 额外宏定义区
CLEAN_ADDITION =
###### 加载mktpl模板库
#@ make_all
#@ make_clean
#@ make_install
#@ make_install_LIBINST
#@ make_install_DFTHDERINST
#@ make_uninstall
#@ make_uninstall_LIBINST
#@ make_uninstall_DFTHDERINST
include $(MKTPLDIR)/makeobj_$(MKTPLOS).inc
###### 目标文件依赖关系
ibp_test_ts1.so : $(c_FILE_o)
$(CC) -o $@ $(c_FILE_o) $(SOFLAGS) $(LFLAGS)
ibpcheckso $@ -r
网友评论