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

📄 engine.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 2 页
字号:
                                BIO_printf(bio_out, "%s: %s\n", name,                                        (desc == NULL) ? "<no description>" : desc);                                /* ... and sometimes input flags */                                if((verbose >= 3) && !util_flags(bio_out, flags,                                        indent))                                        goto err;                                xpos = 0;                                }                        }		OPENSSL_free(name); name = NULL;		if(desc) { OPENSSL_free(desc); desc = NULL; }		/* Move to the next command */		num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,					num, NULL, NULL);		} while(num > 0);	if(xpos > 0)		BIO_printf(bio_out, "\n");	ret = 1;err:	if(cmds) sk_pop_free(cmds, identity);	if(name) OPENSSL_free(name);	if(desc) OPENSSL_free(desc);	return ret;	}static void util_do_cmds(ENGINE *e, STACK *cmds, BIO *bio_out, const char *indent)	{	int loop, res, num = sk_num(cmds);	if(num < 0)		{		BIO_printf(bio_out, "[Error]: internal stack error\n");		return;		}	for(loop = 0; loop < num; loop++)		{		char buf[256];		const char *cmd, *arg;		cmd = sk_value(cmds, loop);		res = 1; /* assume success */		/* Check if this command has no ":arg" */		if((arg = strstr(cmd, ":")) == NULL)			{			if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))				res = 0;			}		else			{			if((int)(arg - cmd) > 254)				{				BIO_printf(bio_out,"[Error]: command name too long\n");				return;				}			memcpy(buf, cmd, (int)(arg - cmd));			buf[arg-cmd] = '\0';			arg++; /* Move past the ":" */			/* Call the command with the argument */			if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))				res = 0;			}		if(res)			BIO_printf(bio_out, "[Success]: %s\n", cmd);		else			{			BIO_printf(bio_out, "[Failure]: %s\n", cmd);			ERR_print_errors(bio_out);			}		}	}int MAIN(int, char **);int MAIN(int argc, char **argv)	{	int ret=1,i;	const char **pp;	int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;	ENGINE *e;	STACK *engines = sk_new_null();	STACK *pre_cmds = sk_new_null();	STACK *post_cmds = sk_new_null();	int badops=1;	BIO *bio_out=NULL;	const char *indent = "     ";	apps_startup();	SSL_load_error_strings();	if (bio_err == NULL)		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);	if (!load_config(bio_err, NULL))		goto end;	bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);#ifdef OPENSSL_SYS_VMS	{	BIO *tmpbio = BIO_new(BIO_f_linebuffer());	bio_out = BIO_push(tmpbio, bio_out);	}#endif	argc--;	argv++;	while (argc >= 1)		{		if (strncmp(*argv,"-v",2) == 0)			{			if(strspn(*argv + 1, "v") < strlen(*argv + 1))				goto skip_arg_loop;			if((verbose=strlen(*argv + 1)) > 4)				goto skip_arg_loop;			}		else if (strcmp(*argv,"-c") == 0)			list_cap=1;		else if (strncmp(*argv,"-t",2) == 0)			{			test_avail=1;			if(strspn(*argv + 1, "t") < strlen(*argv + 1))				goto skip_arg_loop;			if((test_avail_noise = strlen(*argv + 1) - 1) > 1)				goto skip_arg_loop;			}		else if (strcmp(*argv,"-pre") == 0)			{			argc--; argv++;			if (argc == 0)				goto skip_arg_loop;			sk_push(pre_cmds,*argv);			}		else if (strcmp(*argv,"-post") == 0)			{			argc--; argv++;			if (argc == 0)				goto skip_arg_loop;			sk_push(post_cmds,*argv);			}		else if ((strncmp(*argv,"-h",2) == 0) ||				(strcmp(*argv,"-?") == 0))			goto skip_arg_loop;		else			sk_push(engines,*argv);		argc--;		argv++;		}	/* Looks like everything went OK */	badops = 0;skip_arg_loop:	if (badops)		{		for (pp=engine_usage; (*pp != NULL); pp++)			BIO_printf(bio_err,"%s",*pp);		goto end;		}	if (sk_num(engines) == 0)		{		for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))			{			sk_push(engines,(char *)ENGINE_get_id(e));			}		}	for (i=0; i<sk_num(engines); i++)		{		const char *id = sk_value(engines,i);		if ((e = ENGINE_by_id(id)) != NULL)			{			const char *name = ENGINE_get_name(e);			/* Do "id" first, then "name". Easier to auto-parse. */			BIO_printf(bio_out, "(%s) %s\n", id, name);			util_do_cmds(e, pre_cmds, bio_out, indent);			if (strcmp(ENGINE_get_id(e), id) != 0)				{				BIO_printf(bio_out, "Loaded: (%s) %s\n",					ENGINE_get_id(e), ENGINE_get_name(e));				}			if (list_cap)				{				int cap_size = 256;				char *cap_buf = NULL;				int k,n;				const int *nids;				ENGINE_CIPHERS_PTR fn_c;				ENGINE_DIGESTS_PTR fn_d;				if (ENGINE_get_RSA(e) != NULL					&& !append_buf(&cap_buf, "RSA",						&cap_size, 256))					goto end;				if (ENGINE_get_DSA(e) != NULL					&& !append_buf(&cap_buf, "DSA",						&cap_size, 256))					goto end;				if (ENGINE_get_DH(e) != NULL					&& !append_buf(&cap_buf, "DH",						&cap_size, 256))					goto end;				if (ENGINE_get_RAND(e) != NULL					&& !append_buf(&cap_buf, "RAND",						&cap_size, 256))					goto end;				fn_c = ENGINE_get_ciphers(e);				if(!fn_c) goto skip_ciphers;				n = fn_c(e, NULL, &nids, 0);				for(k=0 ; k < n ; ++k)					if(!append_buf(&cap_buf,						       OBJ_nid2sn(nids[k]),						       &cap_size, 256))						goto end;skip_ciphers:				fn_d = ENGINE_get_digests(e);				if(!fn_d) goto skip_digests;				n = fn_d(e, NULL, &nids, 0);				for(k=0 ; k < n ; ++k)					if(!append_buf(&cap_buf,						       OBJ_nid2sn(nids[k]),						       &cap_size, 256))						goto end;skip_digests:				if (cap_buf && (*cap_buf != '\0'))					BIO_printf(bio_out, " [%s]\n", cap_buf);				OPENSSL_free(cap_buf);				}			if(test_avail)				{				BIO_printf(bio_out, "%s", indent);				if (ENGINE_init(e))					{					BIO_printf(bio_out, "[ available ]\n");					util_do_cmds(e, post_cmds, bio_out, indent);					ENGINE_finish(e);					}				else					{					BIO_printf(bio_out, "[ unavailable ]\n");					if(test_avail_noise)						ERR_print_errors_fp(stdout);					ERR_clear_error();					}				}			if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))				goto end;			ENGINE_free(e);			}		else			ERR_print_errors(bio_err);		}	ret=0;end:	ERR_print_errors(bio_err);	sk_pop_free(engines, identity);	sk_pop_free(pre_cmds, identity);	sk_pop_free(post_cmds, identity);	if (bio_out != NULL) BIO_free_all(bio_out);	apps_shutdown();	OPENSSL_EXIT(ret);	}#else# if PEDANTICstatic void *dummy=&dummy;# endif#endif

⌨️ 快捷键说明

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