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); }
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); }
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; }
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); }