struct ssl_ctx_st
typedef struct ssl_st SSL; typedef struct ssl_ctx_st SSL_CTX;   typedef struct ssl_method_st
DECLARE_STACK_OF(SSL_COMP)struct ssl_ctx_st	{	SSL_METHOD *method;	STACK_OF(SSL_CIPHER) *cipher_list;	/* same as above but sorted for lookup */	STACK_OF(SSL_CIPHER) *cipher_list_by_id;	struct x509_store_st /* X509_STORE */ *cert_store;	struct lhash_st /* LHASH */ *sessions;	/* a set of SSL_SESSIONs */	/* Most session-ids that will be cached, default is	 * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */	unsigned long session_cache_size;	struct ssl_session_st *session_cache_head;	struct ssl_session_st *session_cache_tail;	/* This can have one of 2 values, ored together,	 * SSL_SESS_CACHE_CLIENT,	 * SSL_SESS_CACHE_SERVER,	 * Default is SSL_SESSION_CACHE_SERVER, which means only	 * SSL_accept which cache SSL_SESSIONS. */	int session_cache_mode;	/* If timeout is not 0, it is the default timeout value set	 * when SSL_new() is called.  This has been put in to make	 * life easier to set things up */	long session_timeout;	/* If this callback is not null, it will be called each	 * time a session id is added to the cache.  If this function	 * returns 1, it means that the callback will do a	 * SSL_SESSION_free() when it has finished using it.  Otherwise,	 * on 0, it means the callback has finished with it.	 * If remove_session_cb is not null, it will be called when	 * a session-id is removed from the cache.  After the call,	 * OpenSSL will SSL_SESSION_free() it. */	int (*new_session_cb)(struct ssl_st *ssl,SSL_SESSION *sess);	void (*remove_session_cb)(struct ssl_ctx_st *ctx,SSL_SESSION *sess);	SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl,		unsigned char *data,int len,int *copy);	struct		{		int sess_connect;	/* SSL new conn - started */		int sess_connect_renegotiate;/* SSL reneg - requested */		int sess_connect_good;	/* SSL new conne/reneg - finished */		int sess_accept;	/* SSL new accept - started */		int sess_accept_renegotiate;/* SSL reneg - requested */		int sess_accept_good;	/* SSL accept/reneg - finished */		int sess_miss;		/* session lookup misses  */		int sess_timeout;	/* reuse attempt on timeouted session */		int sess_cache_full;	/* session removed due to full cache */		int sess_hit;		/* session reuse actually done */		int sess_cb_hit;	/* session-id that was not					 * in the cache was					 * passed back via the callback.  This					 * indicates that the application is					 * supplying session-id's from other					 * processes - spooky :-) */		} stats;	int references;	/* if defined, these override the X509_verify_cert() calls */	int (*app_verify_callback)(X509_STORE_CTX *, void *);	void *app_verify_arg;	/* before OpenSSL 0.9.7, 'app_verify_arg' was ignored	 * ('app_verify_callback' was called with just one argument) */	/* Default password callback. */	pem_password_cb *default_passwd_callback;	/* Default password callback user data. */	void *default_passwd_callback_userdata;	/* get client cert callback */	int (*client_cert_cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey);    /* cookie generate callback */    int (*app_gen_cookie_cb)(SSL *ssl, unsigned char *cookie,         unsigned int *cookie_len);    /* verify cookie callback */    int (*app_verify_cookie_cb)(SSL *ssl, unsigned char *cookie,         unsigned int cookie_len);	CRYPTO_EX_DATA ex_data;	const EVP_MD *rsa_md5;/* For SSLv2 - name is 'ssl2-md5' */	const EVP_MD *md5;	/* For SSLv3/TLSv1 'ssl3-md5' */	const EVP_MD *sha1;   /* For SSLv3/TLSv1 'ssl3->sha1' */	STACK_OF(X509) *extra_certs;	STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */	/* Default values used when no per-SSL value is defined follow */	void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */	/* what we put in client cert requests */	STACK_OF(X509_NAME) *client_CA;	/* Default values to use in SSL structures follow (these are copied by SSL_new) */	unsigned long options;	unsigned long mode;	long max_cert_list;	struct cert_st /* CERT */ *cert;	int read_ahead;	/* callback that allows applications to peek at protocol messages */	void (*msg_callback)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);	void *msg_callback_arg;	int verify_mode;	unsigned int sid_ctx_length;	unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];	int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */	/* Default generate session ID callback. */	GEN_SESSION_CB generate_session_id;	X509_VERIFY_PARAM *param;#if 0	int purpose;		/* Purpose setting */	int trust;		/* Trust setting */#endif	int quiet_shutdown;	};