⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_server.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 4 页
字号:
/*	return(BIO_gets(bp->next_bio,buf,size));*/	for (i=0; i<size-1; ++i)	{		ret = ebcdic_read(bp,&buf[i],1);		if (ret <= 0)			break;		else if (buf[i] == '\n')		{			++i;			break;		}	}	if (i < size)		buf[i] = '\0';	return (ret < 0 && i == 0) ? ret : i;}static int ebcdic_puts(BIO *bp, const char *str){	if (bp->next_bio == NULL) return(0);	return ebcdic_write(bp, str, strlen(str));}#endifint MAIN(int, char **);int MAIN(int argc, char *argv[])	{	X509_STORE *store = NULL;	int vflags = 0;	short port=PORT;	char *CApath=NULL,*CAfile=NULL;	unsigned char *context = NULL;	char *dhfile = NULL;#ifndef OPENSSL_NO_ECDH	char *named_curve = NULL;#endif	int badop=0,bugs=0;	int ret=1;	int off=0;	int no_tmp_rsa=0,no_dhe=0,no_ecdhe=0,nocert=0;	int state=0;	SSL_METHOD *meth=NULL;#ifdef sock_type#undef sock_type#endif    int sock_type=SOCK_STREAM;#ifndef OPENSSL_NO_ENGINE	ENGINE *e=NULL;#endif	char *inrand=NULL;	int s_cert_format = FORMAT_PEM, s_key_format = FORMAT_PEM;	char *passarg = NULL, *pass = NULL;	char *dpassarg = NULL, *dpass = NULL;	int s_dcert_format = FORMAT_PEM, s_dkey_format = FORMAT_PEM;	X509 *s_cert = NULL, *s_dcert = NULL;	EVP_PKEY *s_key = NULL, *s_dkey = NULL;#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)	meth=SSLv23_server_method();#elif !defined(OPENSSL_NO_SSL3)	meth=SSLv3_server_method();#elif !defined(OPENSSL_NO_SSL2)	meth=SSLv2_server_method();#endif	local_argc=argc;	local_argv=argv;	apps_startup();#ifdef MONOLITH	s_server_init();#endif	if (bio_err == NULL)		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);	if (!load_config(bio_err, NULL))		goto end;	verify_depth=0;#ifdef FIONBIO	s_nbio=0;#endif	s_nbio_test=0;	argc--;	argv++;	while (argc >= 1)		{		if	((strcmp(*argv,"-port") == 0) ||			 (strcmp(*argv,"-accept") == 0))			{			if (--argc < 1) goto bad;			if (!extract_port(*(++argv),&port))				goto bad;			}		else if	(strcmp(*argv,"-verify") == 0)			{			s_server_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;			if (--argc < 1) goto bad;			verify_depth=atoi(*(++argv));			BIO_printf(bio_err,"verify depth is %d\n",verify_depth);			}		else if	(strcmp(*argv,"-Verify") == 0)			{			s_server_verify=SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT|				SSL_VERIFY_CLIENT_ONCE;			if (--argc < 1) goto bad;			verify_depth=atoi(*(++argv));			BIO_printf(bio_err,"verify depth is %d, must return a certificate\n",verify_depth);			}		else if	(strcmp(*argv,"-context") == 0)			{			if (--argc < 1) goto bad;			context= (unsigned char *)*(++argv);			}		else if	(strcmp(*argv,"-cert") == 0)			{			if (--argc < 1) goto bad;			s_cert_file= *(++argv);			}		else if	(strcmp(*argv,"-certform") == 0)			{			if (--argc < 1) goto bad;			s_cert_format = str2fmt(*(++argv));			}		else if	(strcmp(*argv,"-key") == 0)			{			if (--argc < 1) goto bad;			s_key_file= *(++argv);			}		else if	(strcmp(*argv,"-keyform") == 0)			{			if (--argc < 1) goto bad;			s_key_format = str2fmt(*(++argv));			}		else if	(strcmp(*argv,"-pass") == 0)			{			if (--argc < 1) goto bad;			passarg = *(++argv);			}		else if	(strcmp(*argv,"-dhparam") == 0)			{			if (--argc < 1) goto bad;			dhfile = *(++argv);			}#ifndef OPENSSL_NO_ECDH				else if	(strcmp(*argv,"-named_curve") == 0)			{			if (--argc < 1) goto bad;			named_curve = *(++argv);			}#endif		else if	(strcmp(*argv,"-dcertform") == 0)			{			if (--argc < 1) goto bad;			s_dcert_format = str2fmt(*(++argv));			}		else if	(strcmp(*argv,"-dcert") == 0)			{			if (--argc < 1) goto bad;			s_dcert_file= *(++argv);			}		else if	(strcmp(*argv,"-dkeyform") == 0)			{			if (--argc < 1) goto bad;			s_dkey_format = str2fmt(*(++argv));			}		else if	(strcmp(*argv,"-dpass") == 0)			{			if (--argc < 1) goto bad;			dpassarg = *(++argv);			}		else if	(strcmp(*argv,"-dkey") == 0)			{			if (--argc < 1) goto bad;			s_dkey_file= *(++argv);			}		else if (strcmp(*argv,"-nocert") == 0)			{			nocert=1;			}		else if	(strcmp(*argv,"-CApath") == 0)			{			if (--argc < 1) goto bad;			CApath= *(++argv);			}		else if (strcmp(*argv,"-crl_check") == 0)			{			vflags |= X509_V_FLAG_CRL_CHECK;			}		else if (strcmp(*argv,"-crl_check") == 0)			{			vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;			}		else if	(strcmp(*argv,"-serverpref") == 0)			{ off|=SSL_OP_CIPHER_SERVER_PREFERENCE; }		else if	(strcmp(*argv,"-cipher") == 0)			{			if (--argc < 1) goto bad;			cipher= *(++argv);			}		else if	(strcmp(*argv,"-CAfile") == 0)			{			if (--argc < 1) goto bad;			CAfile= *(++argv);			}#ifdef FIONBIO			else if	(strcmp(*argv,"-nbio") == 0)			{ s_nbio=1; }#endif		else if	(strcmp(*argv,"-nbio_test") == 0)			{#ifdef FIONBIO				s_nbio=1;#endif			s_nbio_test=1;			}		else if	(strcmp(*argv,"-debug") == 0)			{ s_debug=1; }		else if	(strcmp(*argv,"-msg") == 0)			{ s_msg=1; }		else if	(strcmp(*argv,"-hack") == 0)			{ hack=1; }		else if	(strcmp(*argv,"-state") == 0)			{ state=1; }		else if	(strcmp(*argv,"-crlf") == 0)			{ s_crlf=1; }		else if	(strcmp(*argv,"-quiet") == 0)			{ s_quiet=1; }		else if	(strcmp(*argv,"-bugs") == 0)			{ bugs=1; }		else if	(strcmp(*argv,"-no_tmp_rsa") == 0)			{ no_tmp_rsa=1; }		else if	(strcmp(*argv,"-no_dhe") == 0)			{ no_dhe=1; }		else if	(strcmp(*argv,"-no_ecdhe") == 0)			{ no_ecdhe=1; }		else if	(strcmp(*argv,"-www") == 0)			{ www=1; }		else if	(strcmp(*argv,"-WWW") == 0)			{ www=2; }		else if	(strcmp(*argv,"-HTTP") == 0)			{ www=3; }		else if	(strcmp(*argv,"-no_ssl2") == 0)			{ off|=SSL_OP_NO_SSLv2; }		else if	(strcmp(*argv,"-no_ssl3") == 0)			{ off|=SSL_OP_NO_SSLv3; }		else if	(strcmp(*argv,"-no_tls1") == 0)			{ off|=SSL_OP_NO_TLSv1; }#ifndef OPENSSL_NO_SSL2		else if	(strcmp(*argv,"-ssl2") == 0)			{ meth=SSLv2_server_method(); }#endif#ifndef OPENSSL_NO_SSL3		else if	(strcmp(*argv,"-ssl3") == 0)			{ meth=SSLv3_server_method(); }#endif#ifndef OPENSSL_NO_TLS1		else if	(strcmp(*argv,"-tls1") == 0)			{ meth=TLSv1_server_method(); }#endif#ifndef OPENSSL_NO_DTLS1		else if	(strcmp(*argv,"-dtls1") == 0)			{ 			meth=DTLSv1_server_method();			sock_type = SOCK_DGRAM;			}		else if (strcmp(*argv,"-timeout") == 0)			enable_timeouts = 1;		else if (strcmp(*argv,"-mtu") == 0)			{			if (--argc < 1) goto bad;			mtu = atol(*(++argv));			}		else if (strcmp(*argv, "-chain") == 0)			cert_chain = 1;#endif		else if (strcmp(*argv, "-id_prefix") == 0)			{			if (--argc < 1) goto bad;			session_id_prefix = *(++argv);			}#ifndef OPENSSL_NO_ENGINE		else if (strcmp(*argv,"-engine") == 0)			{			if (--argc < 1) goto bad;			engine_id= *(++argv);			}#endif		else if (strcmp(*argv,"-rand") == 0)			{			if (--argc < 1) goto bad;			inrand= *(++argv);			}		else			{			BIO_printf(bio_err,"unknown option %s\n",*argv);			badop=1;			break;			}		argc--;		argv++;		}	if (badop)		{bad:		sv_usage();		goto end;		}	SSL_load_error_strings();	OpenSSL_add_ssl_algorithms();#ifndef OPENSSL_NO_ENGINE        e = setup_engine(bio_err, engine_id, 1);#endif	if (!app_passwd(bio_err, passarg, dpassarg, &pass, &dpass))		{		BIO_printf(bio_err, "Error getting password\n");		goto end;		}	if (s_key_file == NULL)		s_key_file = s_cert_file;	if (nocert == 0)		{		s_key = load_key(bio_err, s_key_file, s_key_format, 0, pass, e,		       "server certificate private key file");		if (!s_key)			{			ERR_print_errors(bio_err);			goto end;			}		s_cert = load_cert(bio_err,s_cert_file,s_cert_format,			NULL, e, "server certificate file");		if (!s_cert)			{			ERR_print_errors(bio_err);			goto end;			}		}	if (s_dcert_file)		{		if (s_dkey_file == NULL)			s_dkey_file = s_dcert_file;		s_dkey = load_key(bio_err, s_dkey_file, s_dkey_format,				0, dpass, e,			       "second certificate private key file");		if (!s_dkey)			{			ERR_print_errors(bio_err);			goto end;			}		s_dcert = load_cert(bio_err,s_dcert_file,s_dcert_format,				NULL, e, "second server certificate file");		if (!s_dcert)			{			ERR_print_errors(bio_err);			goto end;			}		}	if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL		&& !RAND_status())		{		BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");		}	if (inrand != NULL)		BIO_printf(bio_err,"%ld semi-random bytes loaded\n",			app_RAND_load_files(inrand));	if (bio_s_out == NULL)		{		if (s_quiet && !s_debug && !s_msg)			{			bio_s_out=BIO_new(BIO_s_null());			}		else			{			if (bio_s_out == NULL)				bio_s_out=BIO_new_fp(stdout,BIO_NOCLOSE);			}		}#if !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA)	if (nocert)#endif		{		s_cert_file=NULL;		s_key_file=NULL;		s_dcert_file=NULL;		s_dkey_file=NULL;		}	ctx=SSL_CTX_new(meth);	if (ctx == NULL)		{		ERR_print_errors(bio_err);		goto end;		}	if (session_id_prefix)		{		if(strlen(session_id_prefix) >= 32)			BIO_printf(bio_err,"warning: id_prefix is too long, only one new session will be possible\n");		else if(strlen(session_id_prefix) >= 16)			BIO_printf(bio_err,"warning: id_prefix is too long if you use SSLv2\n");		if(!SSL_CTX_set_generate_session_id(ctx, generate_session_id))			{			BIO_printf(bio_err,"error setting 'id_prefix'\n");			ERR_print_errors(bio_err);			goto end;			}		BIO_printf(bio_err,"id_prefix '%s' set.\n", session_id_prefix);		}	SSL_CTX_set_quiet_shutdown(ctx,1);	if (bugs) SSL_CTX_set_options(ctx,SSL_OP_ALL);	if (hack) SSL_CTX_set_options(ctx,SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);	SSL_CTX_set_options(ctx,off);	/* DTLS: partial reads end up discarding unread UDP bytes :-( 	 * Setting read ahead solves this problem.	 */	if (sock_type == SOCK_DGRAM) SSL_CTX_set_read_ahead(ctx, 1);	if (state) SSL_CTX_set_info_callback(ctx,apps_ssl_info_callback);	SSL_CTX_sess_set_cache_size(ctx,128);#if 0	if (cipher == NULL) cipher=getenv("SSL_CIPHER");#endif#if 0	if (s_cert_file == NULL)		{		BIO_printf(bio_err,"You must specify a certificate file for the server to use\n");		goto end;		}#endif	if ((!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)) ||		(!SSL_CTX_set_default_verify_paths(ctx)))		{		/* BIO_printf(bio_err,"X509_load_verify_locations\n"); */		ERR_print_errors(bio_err);		/* goto end; */		}	store = SSL_CTX_get_cert_store(ctx);	X509_STORE_set_flags(store, vflags);#ifndef OPENSSL_NO_DH	if (!no_dhe)		{		DH *dh=NULL;		if (dhfile)			dh = load_dh_param(dhfile);		else if (s_cert_file)			dh = load_dh_param(s_cert_file);		if (dh != NULL)			{			BIO_printf(bio_s_out,"Setting temp DH parameters\n");			}		else			{			BIO_printf(bio_s_out,"Using default temp DH parameters\n");			dh=get_dh512();			}		(void)BIO_flush(bio_s_out);		SSL_CTX_set_tmp_dh(ctx,dh);		DH_free(dh);		}#endif#ifndef OPENSSL_NO_ECDH	if (!no_ecdhe)		{		EC_KEY *ecdh=NULL;		if (named_curve)			{			int nid = OBJ_sn2nid(named_curve);			if (nid == 0)				{				BIO_printf(bio_err, "unknown curve name (%s)\n", 					named_curve);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -