# define SSL_CONNECTION_NO_CONST

u0sqgete  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(114)

ssl_local. h openssl头文件包含以下内容

#  define SSL_CONNECTION_FROM_SSL(ssl) \
    SSL_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
    
# define SSL_CONNECTION_NO_CONST

# define SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c) \
    ((ssl) == NULL ? NULL                         \
     : ((ssl)->type == SSL_TYPE_SSL_CONNECTION    \
       ? (c SSL_CONNECTION *)(ssl)                \
       : NULL))

字符串
此宏的调用方式为:

int SSL_connect(SSL *s)
{
    SSL_CONNECTION *sc = SSL_CONNECTION_FROM_SSL(s);


我不明白下面的宏是做什么的,因为它没有实际的定义。

# define SSL_CONNECTION_NO_CONST


然而,它被用在下面提到的宏above。

SSL_CONNECTION_FROM_SSL_ONLY_int(ssl, c)

s4n0splo

s4n0splo1#

如您所见,宏用作cSSL_CONNECTION_FROM_SSL_ONLY_int的第二个参数,并用作SSL_CONNECTION的前缀:

? (c SSL_CONNECTION *)(ssl)                \
  ^^^^

字符串
ssl_local.h中,SSL_CONNECTION_FROM_SSL_ONLY_int实际上有多种用法:

#  define SSL_CONNECTION_FROM_SSL(ssl) \
    SSL_CONNECTION_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
#  define SSL_CONNECTION_FROM_CONST_SSL(ssl) \
    SSL_CONNECTION_FROM_SSL_int(ssl, const)


SSL_CONNECTION_FROM_SSL中使用SSL_CONNECTION_NO_CONST调用时,会将c扩展为空字符串,即

? ( SSL_CONNECTION *)(ssl)   
  ^^^^


SSL_CONNECTION_FROM_CONST_SSL中使用const调用时,会将c扩展为const,即

? (const SSL_CONNECTION *)(ssl)   
  ^^^^^^^


SSL_CONNECTION_FROM_SSLSSL_CONNECTION_FROM_CONST_SSL在OpenSSL源代码中的多个地方都有使用,因此这两种变体似乎都有用例--有const的也有SSL_CONNECTION_FROM_SSL的。

相关问题