static int openssl_ssl_ctx_mode(lua_State*L) { SSL_CTX* ctx = CHECK_OBJECT(1, SSL_CTX, "openssl.ssl_ctx"); int mode = 0; int ret; int i; if (!lua_isnoneornil(L, 2)) { int clear = lua_isboolean(L, 2) ? lua_toboolean(L, 2) : 0; i = lua_isboolean(L, 2) ? 3 : 2; while (i <= lua_gettop(L)) { mode = mode | auxiliar_checkoption(L, i++, NULL, sMode_options, iMode_options); } if (clear != 0) mode = SSL_CTX_set_mode(ctx, mode); else mode = SSL_CTX_clear_mode(ctx, mode); } else mode = SSL_CTX_get_mode(ctx); ret = 0; for (i = 0; i < sizeof(iMode_options) / sizeof(int); i++) { if (mode & iMode_options[i]) { lua_pushstring(L, sMode_options[i]); ret++; } } return ret; };
/** * @brief TLS SSL_CTX_set_mode and SSL_CTX_clear_mode wrapper * @param ctx SSL context * @param mode SSL_MODE_* * @param clear if set to !=0 will do a clear, else (==0) a set * @return 0 (always succeeds) */ static int tls_ssl_ctx_mode(SSL_CTX* ctx, long mode, void* clear) { if (clear) #if OPENSSL_VERSION_NUMBER >= 0x01000000L || \ defined SSL_CTX_clear_mode SSL_CTX_clear_mode(ctx, mode); #else return -1; #endif else