openssl 1.0.2版本 协议处理初始化接口

1.0.2版本的openssl接口很多都是通过回调函数处理,例如 SSL_read 内部 s->method->ssl_read,其ssl_read回调定义在哪里?

比如客户端程序中通过调用 meth = SSLv23_client_method( ); 进行关联

其在ssl/s23_clnt.c中定义

IMPLEMENT_ssl23_meth_func(SSLv23_client_method,                  
                          ssl_undefined_function,                
                          ssl23_connect, ssl23_get_client_method)

IMPLEMENT_ssl23_meth_func 为宏,在ssl_locl.h中有展开

#define IMPLEMENT_ssl23_meth_func(func_name, s_accept, s_connect, s_get_meth) \
const SSL_METHOD *func_name(void)  \                                             
         { \                                                                      
         static const SSL_METHOD func_name##_data= { \                            
         TLS1_2_VERSION, \                                                        
         tls1_new, \                                                              
         tls1_clear, \                                                            
         tls1_free, \                                                             
         s_accept, \                                                              
         s_connect, \                                                             
         ssl23_read, \                                                            
         ssl23_peek, \                                                            
       	 ...
       	 ...
         ssl23_default_timeout, \                                                 
         &TLSv1_2_enc_data, \                                                     
         ssl_undefined_void_function, \                                           
         ssl3_callback_ctrl, \                                                    
         ssl3_ctx_callback_ctrl, \                                                
         }; \                                                                     
         return &func_name##_data; \                                              
         }                                                                        

这里有个##的特殊用法,连接符,在预编译的时候进行。

简化该宏的实现

const SSL_METHOD *SSLv23_client_method(void) 
{
    static const SSL_METHOD SSLv23_client_method_data = {
        ...
    };
    return &SSLv23_client_method_data;
}

ssl_read的就是调用的ssl23_read

实际上用宏生成一个函数,在函数内部用static初始化一个结构,返回这个结构。
宏的参数是结构中特有的一些回调处理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值