CRYPTO_new_ex_data(ssl_ctx_meth,(char *)ret,&ret->ex_data);
CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data);
static IMPLEMENT_LHASH_HASH_FN(SSL_SESSION_hash, SSL_SESSION *)static IMPLEMENT_LHASH_COMP_FN(SSL_SESSION_cmp, SSL_SESSION *)SSL_CTX *SSL_CTX_new(SSL_METHOD *meth)	{	SSL_CTX *ret=NULL;		if (meth == NULL)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED);		return(NULL);		}	if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);		goto err;		}	ret=(SSL_CTX *)OPENSSL_malloc(sizeof(SSL_CTX));	if (ret == NULL)		goto err;	memset(ret,0,sizeof(SSL_CTX));	ret->method=meth;	ret->cert_store=NULL;	ret->session_cache_mode=SSL_SESS_CACHE_SERVER;	ret->session_cache_size=SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;	ret->session_cache_head=NULL;	ret->session_cache_tail=NULL;	/* We take the system default */	ret->session_timeout=meth->get_timeout();	ret->new_session_cb=NULL;	ret->remove_session_cb=NULL;	ret->get_session_cb=NULL;	ret->generate_session_id=NULL;	memset((char *)&ret->stats,0,sizeof(ret->stats));	ret->references=1;	ret->quiet_shutdown=0;/*	ret->cipher=NULL;*//*	ret->s2->challenge=NULL;	ret->master_key=NULL;	ret->key_arg=NULL;	ret->s2->conn_id=NULL; */	ret->info_callback=NULL;	ret->app_verify_callback=NULL;	ret->app_verify_arg=NULL;	ret->read_ahead=0;	ret->verify_mode=SSL_VERIFY_NONE;	ret->verify_depth=-1; /* Don't impose a limit (but x509_lu.c does) */	ret->default_verify_callback=NULL;	if ((ret->cert=ssl_cert_new()) == NULL)		goto err;	ret->default_passwd_callback=NULL;	ret->default_passwd_callback_userdata=NULL;	ret->client_cert_cb=NULL;	ret->sessions=lh_new(LHASH_HASH_FN(SSL_SESSION_hash),			LHASH_COMP_FN(SSL_SESSION_cmp));	if (ret->sessions == NULL) goto err;	ret->cert_store=X509_STORE_new();	if (ret->cert_store == NULL) goto err;	ssl_create_cipher_list(ret->method,		&ret->cipher_list,&ret->cipher_list_by_id,		SSL_DEFAULT_CIPHER_LIST);	if (ret->cipher_list == NULL	    || sk_SSL_CIPHER_num(ret->cipher_list) <= 0)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_LIBRARY_HAS_NO_CIPHERS);		goto err2;		}	if ((ret->rsa_md5=EVP_get_digestbyname("ssl2-md5")) == NULL)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES);		goto err2;		}	if ((ret->md5=EVP_get_digestbyname("ssl3-md5")) == NULL)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);		goto err2;		}	if ((ret->sha1=EVP_get_digestbyname("ssl3-sha1")) == NULL)		{		SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);		goto err2;		}	if ((ret->client_CA=sk_X509_NAME_new_null()) == NULL)		goto err;	CRYPTO_new_ex_data(ssl_ctx_meth,(char *)ret,&ret->ex_data);	ret->extra_certs=NULL;	ret->comp_methods=SSL_COMP_get_compression_methods();	return(ret);err:	SSLerr(SSL_F_SSL_CTX_NEW,ERR_R_MALLOC_FAILURE);err2:	if (ret != NULL) SSL_CTX_free(ret);	return(NULL);	}