/* * call-seq: * ctx.session_cache_mode -> integer * */ static VALUE ossl_sslctx_get_session_cache_mode(VALUE self) { SSL_CTX *ctx; Data_Get_Struct(self, SSL_CTX, ctx); return LONG2NUM(SSL_CTX_get_session_cache_mode(ctx)); }
static int openssl_session_cache_mode(lua_State *L) { static const char* smode[] = { "off", "client", "server", "both", "no_auto_clear", NULL }; static const int imode[] = { SSL_SESS_CACHE_OFF, SSL_SESS_CACHE_CLIENT, SSL_SESS_CACHE_SERVER, SSL_SESS_CACHE_BOTH, SSL_SESS_CACHE_NO_AUTO_CLEAR, -1 }; SSL_CTX* ctx = CHECK_OBJECT(1, SSL_CTX, "openssl.ssl_ctx"); int n = lua_gettop(L); long mode = 0; int i; if (n > 1) { if (lua_isnumber(L, 2)) { mode = luaL_checkinteger(L, 2); mode = SSL_CTX_set_session_cache_mode(ctx, mode); } else { for (i = 2; i <= n; i++) { int j = auxiliar_checkoption(L, i, NULL, smode, imode); mode |= j; } mode = SSL_CTX_set_session_cache_mode(ctx, mode); } } else { mode = SSL_CTX_get_session_cache_mode(ctx); }; lua_newtable(L); i = 0; if (mode & SSL_SESS_CACHE_NO_AUTO_CLEAR) { lua_pushstring(L, smode[4]); lua_rawseti(L, -2, i++); } if (mode & SSL_SESS_CACHE_BOTH) { lua_pushstring(L, smode[3]); lua_rawseti(L, -2, i++); } else if (mode & SSL_SESS_CACHE_SERVER) { lua_pushstring(L, smode[2]); lua_rawseti(L, -2, i++); } else if (mode & SSL_SESS_CACHE_CLIENT) { lua_pushstring(L, smode[1]); lua_rawseti(L, -2, i++); } else if (mode & SSL_SESS_CACHE_OFF) { lua_pushstring(L, smode[0]); lua_rawseti(L, -2, i++); } return 1; }
bool SSLContext::sessionCacheEnabled() const { return SSL_CTX_get_session_cache_mode(_sslContext) != SSL_SESS_CACHE_OFF; }