Exemplo n.º 1
0
Arquivo: main.cpp Projeto: 2202877/acl
	bool run(void)
	{
		acl::string body;

		// 从本地文件中加载请求数据
		if (acl::ifstream::load(file_, &body) == false)
		{
			logger_error("load %s error", file_.c_str());
			return false;
		}

		// 创建  HTTP 请求客户端
		acl::http_request req(server_addr_);

		// 添加 HTTP 请求头字段

		acl::string ctype("text/");
		ctype << stype_ << "; charset=" << charset_;

		acl::http_header& hdr = req.request_header();  // 请求头对象的引用
		hdr.set_url("/");
		hdr.set_content_type(ctype);

		// 发送 HTTP 请求数据
		if (req.request(body.c_str(), body.length()) == false)
		{
			logger_error("send http request to %s error",
				server_addr_.c_str());
			return false;
		}

		// 取出 HTTP 响应头的数据字段
		const char* p = req.header_value("Content-Type");
		if (p == NULL || *p == 0)
		{
			logger_error("no Content-Type");
			return false;
		}

		// 分析 HTTP 响应头的数据类型
		acl::http_ctype content_type;
		content_type.parse(p);

		// 响应头数据类型的子类型
		const char* stype = content_type.get_stype();

		bool ret;
		if (stype == NULL)
			ret = do_plain(req);
		else if (strcasecmp(stype, "xml") == 0)
			ret = do_xml(req);
		else if (strcasecmp(stype, "json") == 0)
			ret = do_json(req);
		else
			ret = do_plain(req);
		if (ret == true)
			printf("read ok!\r\n");
		return ret;
	}
int
main(int argc, char **argv)
{
	int c;
	struct varnish_stats *VSL_stats;
	int delay = 1, once = 0, xml = 0;
	const char *n_arg = NULL;
	const char *fields = NULL;

	while ((c = getopt(argc, argv, "1f:ln:Vw:x")) != -1) {
		switch (c) {
		case '1':
			once = 1;
			break;
		case 'f':
			fields = optarg;
			break;
		case 'l':
			list_fields();
			exit(0);
		case 'n':
			n_arg = optarg;
			break;
		case 'V':
			varnish_version("varnishstat");
			exit(0);
		case 'w':
			delay = atoi(optarg);
			break;
		case 'x':
			xml = 1;
			break;
		default:
			usage();
		}
	}

	if ((VSL_stats = VSL_OpenStats(n_arg)) == NULL)
		exit(1);

	if (fields != NULL && !valid_fields(fields)) {
		usage();
		exit(1);
	}
	
	if (xml) 
		do_xml(VSL_stats, fields);
	else if (once)
		do_once(VSL_stats, fields);
	else
		do_curses(VSL_stats, delay, fields);

	exit(0);
}
Exemplo n.º 3
0
int
main(int argc, char * const *argv)
{
	int c;
	struct VSM_data *vd;
	int delay = 1, once = 0, xml = 0, json = 0, do_repeat = 0;

	vd = VSM_New();

	while ((c = getopt(argc, argv, VSC_ARGS "1f:lVw:xjt:")) != -1) {
		switch (c) {
		case '1':
			once = 1;
			break;
		case 'l':
			list_fields(vd);
			exit(0);
		case 'V':
			VCS_Message("varnishstat");
			exit(0);
		case 'w':
			do_repeat = 1;
			delay = atoi(optarg);
			break;
		case 'x':
			xml = 1;
			break;
		case 'j':
			json = 1;
			break;
		default:
			if (VSC_Arg(vd, c, optarg) > 0)
				break;
			usage();
		}
	}

	if (VSM_Open(vd)) {
		fprintf(stderr, "%s\n", VSM_Error(vd));
		exit(1);
	}
	if (!(xml || json || once)) {
		do_curses(vd, delay);
		exit(0);
	}

	while (1) {
		if (xml)
			do_xml(vd);
		else if (json)
			do_json(vd);
		else if (once)
			do_once(vd, VSC_Main(vd, NULL));
		else {
			assert(0);
		}
		if (!do_repeat) break;

		// end of output block marker.
		printf("\n");

		sleep(delay);
	}
	exit(0);
}
Exemplo n.º 4
0
spocp_result_t
ldapproxy_test(cmd_param_t * cpp, octet_t * blob)
{
	spocp_result_t	r = SPOCP_DENIED;
	LDAP		*ld = 0;
	becon_t		*bc = 0;
	octarr_t	*argv;
	octet_t		*oct, *domain;
	pdyn_t		*dyn = cpp->pd;
	char		***ava = 0, *tmp, *filter, *fqdn;
	char 		*attr = 0, *val, *dn, **attrs = 0;
	char 		*xml;
	srvrec_t	*sr, *nsr;
	int		i, j;
	
	if (cpp->arg == 0 || cpp->arg->len == 0)
		return SPOCP_MISSING_ARG;

	if ((oct = element_atom_sub(cpp->arg, cpp->x)) == 0)
		return SPOCP_SYNTAXERROR;

	argv = oct_split( oct, ':', '\\', 0,0 );

	traceLog( LOG_DEBUG,"argc: %d", argv->n);

	domain = argv->arr[0];

	tmp = oct2strdup( domain, 0);
	fqdn = normalize(tmp);
	free(tmp);
	traceLog( LOG_DEBUG,"domain: %s", fqdn);

	if (dyn == 0 || (bc = becon_get(domain, dyn->bcp)) == 0) {
		/* find the server/-s */
		if(( sr = dnssrv_lookup( fqdn, "ldap")) == 0 ) {
			traceLog(LOG_DEBUG,"SRV record lookup failed");
			sr = ( srvrec_t * ) calloc( 1, sizeof( srvrec_t ));
			sr->srv = ( char * ) calloc( domain->len+7, sizeof( char ));
			tmp = oct2strdup( domain, 0 );
			snprintf(sr->srv, domain->len+6,"ldap.%s", tmp );
			free( tmp ); 
		}

		for( nsr = sr ; nsr ; nsr = nsr->next ) {
			/* should pick the one with the lowest priority first */
			LOG(SPOCP_DEBUG)
			    traceLog(LOG_DEBUG, "Trying %s:%d", nsr->srv, nsr->port);
			ld = open_conn(nsr->srv, nsr->port, &r);

			if (ld)
				break ;
		}

		srvrec_free( sr );

		if (ld == 0)
			r = SPOCP_UNAVAILABLE;
		else if (dyn && dyn->size) {
			if (!dyn->bcp)
				dyn->bcp = becpool_new(dyn->size);
			bc = becon_push(domain, &P_ldapclose, (void *) ld, dyn->bcp);
		}
	} else
		ld = (LDAP *) bc->con;

	if (r != SPOCP_UNAVAILABLE) {
		/* get the baseDN */
		dn = fqdn2dn( fqdn );
		free( fqdn );

		/* create the filter */
		val = oct2strdup( argv->arr[1], 0 );
		if( argv->n == 3 ) 
			attr = oct2strdup( argv->arr[2], 0 );
		else
			attr = "uid";

		filter = (char *)malloc( strlen(attr) + strlen(val) +4);
		sprintf( filter, "(%s=%s)", attr, val );

		traceLog(LOG_DEBUG, "Filter: %s, DN: %s", filter, dn);

		if( cpp->conf )
			attrs = match_base( (ainfo_t *) cpp->conf, dn );

		if (attrs == 0)
			attrs = defattrs;

		/* do the stuff */
	
		ava = do_ldap_query( ld, dn, filter, attrs, &r);

		if (bc)
			becon_return(bc);
		else
			ldap_unbind_s(ld);

		free(val);
		free(filter);
		free(dn);

		if( argv->n == 3) 
			free(attr);

	}

	/* create the blob */

	if (ava) {
		xml = do_xml( ava );
		oct_assign( blob, xml );
		blob->size = blob->len;
		traceLog(LOG_DEBUG, "%s", xml);

		for( i = 0; ava[i] ; i++) {
			for( j = 0; ava[i][j] ; j++) free( ava[i][j] );
			free( ava[i] );
		}
		free(ava);
	}

	if (oct != cpp->arg)
		oct_free(oct);

	return r;
}
Exemplo n.º 5
0
int
main(int argc, char * const *argv)
{
	struct VSM_data *vd;
	double t_arg = 5.0, t_start = NAN;
	int once = 0, xml = 0, json = 0, f_list = 0, curses = 0;
	signed char opt;
	int i;

	VUT_Init(progname, argc, argv, &vopt_spec);
	vd = VSM_New();
	AN(vd);

	while ((opt = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) {
		switch (opt) {
		case '1':
			once = 1;
			break;
		case 'h':
			/* Usage help */
			usage(0);
		case 'l':
			f_list = 1;
			break;
		case 't':
			if (!strcasecmp(optarg, "off"))
				t_arg = -1.;
			else {
				t_arg = VNUM(optarg);
				if (isnan(t_arg))
					VUT_Error(1, "-t: Syntax error");
				if (t_arg < 0.)
					VUT_Error(1, "-t: Range error");
			}
			break;
		case 'V':
			VCS_Message("varnishstat");
			exit(0);
		case 'x':
			xml = 1;
			break;
		case 'j':
			json = 1;
			break;
		default:
			i = VSC_Arg(vd, opt, optarg);
			if (i < 0)
				VUT_Error(1, "%s", VSM_Error(vd));
			if (!i)
				usage(1);
		}
	}

	if (optind != argc)
		usage(1);

	if (!(xml || json || once || f_list))
		curses = 1;

	while (1) {
		i = VSM_Open(vd);
		if (!i)
			break;
		if (isnan(t_start) && t_arg > 0.) {
			fprintf(stderr, "Can't open log -"
			    " retrying for %.0f seconds\n", t_arg);
			t_start = VTIM_real();
		}
		if (t_arg <= 0.)
			break;
		if (VTIM_real() - t_start > t_arg)
			break;
		VSM_ResetError(vd);
		VTIM_sleep(0.5);
	}

	if (curses) {
		if (i && t_arg >= 0.)
			VUT_Error(1, "%s", VSM_Error(vd));
		do_curses(vd, 1.0);
		exit(0);
	}

	if (i)
		VUT_Error(1, "%s", VSM_Error(vd));

	if (xml)
		do_xml(vd);
	else if (json)
		do_json(vd);
	else if (once)
		do_once(vd);
	else if (f_list)
		list_fields(vd);
	else
		assert(0);

	exit(0);
}