typedef struct {
ASN1_INTEGER *version; /*协议版本 */
ASN1_INTEGER *reqType; /*请求类型*/
SVSREQUSET *request; /*请求包*/
ASN1_GENERALIZEDTIME *reqTime; /*请求时间*/
} GM_0029_SVSREQUEST;
DECLARE_ASN1_FUNCTIONS(GM_0029_SVSREQUEST);
查询openssl 在ASN1.H 头文件中有以下定义:
1、# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type)
展开得到DECLARE_ASN1_FUNCTIONS_name(GM_0029_SVSREQUEST, GM_0029_SVSREQUEST)
- 继续查找到得到
# define DECLARE_ASN1_FUNCTIONS_name(type, name) \
DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \
DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name)
继续展开得到
DECLARE_ASN1_ALLOC_FUNCTIONS_name(GM_0029_SVSREQUEST, GM_0029_SVSREQUEST)
DECLARE_ASN1_ENCODE_FUNCTIONS(GM_0029_SVSREQUEST, GM_0029_SVSREQUEST, GM_0029_SVSREQUEST)
2.1 继续查到分为2个宏函数(DECLARE_ASN1_ALLOC_FUNCTIONS_name)
# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \
type *name##_new(void); \
void name##_free(type *a);
展开DECLARE_ASN1_ALLOC_FUNCTIONS_name(GM_0029_SVSREQUEST, GM_0029_SVSREQUEST)
得到2个函数
1、GM_0029_SVSREQUEST* GM_0029_SVSREQUEST_new(void)
2、void GM_0029_SVSREQUEST_free(GM_0029_SVSREQUEST*a);
2.2 DECLARE_ASN1_ALLOC_FUNCTIONS_name
继续展开得到
# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \
type *d2i_##name(type **a, const unsigned char **in, long len); \
int i2d_##name(const type *a, unsigned char **out); \
DECLARE_ASN1_ITEM(name)
DECLARE_ASN1_ENCODE_FUNCTIONS(GM_0029_SVSREQUEST, GM_0029_SVSREQUEST, GM_0029_SVSREQUEST)
展开得到:
3、GM_0029_SVSREQUEST* d2i_GM_0029_SVSREQUEST(GM_0029_SVSREQUEST**a,const unsigned char**in,long len )
和函数/
4、Int i2d_GM_0029_SVSREQUEST(const GM_0029_SVSREQUEST*a,unsigned char **out)
3、即可得到4个函数,分别是:
GM_0029_SVSREQUEST* GM_0029_SVSREQUEST_new(void)
void GM_0029_SVSREQUEST_free(GM_0029_SVSREQUEST*a);
GM_0029_SVSREQUEST* d2i_GM_0029_SVSREQUEST(GM_0029_SVSREQUEST**a,const unsigned char**in,long len )
Int i2d_GM_0029_SVSREQUEST(const GM_0029_SVSREQUEST*a,unsigned char **out)
new函数用于分配空间、生成ASN1数据结构、free用于释放空间、i2d函数将ASN1数据结构转换为DER编码、d2i将DER编码转换为ASN1数据结构