本文整理汇总了C++中VSB_new_auto函数的典型用法代码示例。如果您正苦于以下问题:C++ VSB_new_auto函数的具体用法?C++ VSB_new_auto怎么用?C++ VSB_new_auto使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了VSB_new_auto函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vtc_hex_to_bin
struct vsb *
vtc_hex_to_bin(struct vtclog *vl, const char *arg)
{
struct vsb *vsb;
unsigned sh = 4;
unsigned c, b = 0;
vsb = VSB_new_auto();
AN(vsb);
for (; *arg != '\0'; arg++) {
if (vct_issp(*arg) || *arg == '\n')
continue;
c = (uint8_t)*arg;
if (c >= '0' && c <= '9')
b |= (c - 48U) << sh;
else if (c >= 'A' && c <= 'F')
b |= (c - 55U) << sh;
else if (c >= 'a' && c <= 'f')
b |= (c - 87U) << sh;
else
vtc_fatal(vl,"Illegal hex string");
sh = 4 - sh;
if (sh == 4) {
VSB_putc(vsb, b);
b = 0;
}
}
if (sh != 4)
VSB_putc(vsb, b);
AZ(VSB_finish(vsb));
return (vsb);
}
示例2: VSB_new_auto
static char *vbackends_show_json(char *raw)
{
char *out1 = NULL, *out2 = NULL, *out3 = NULL ;
struct vsb *final= VSB_new_auto();
char *tokens = NULL, *ptr = NULL;
char tmp[1000];
int raw_len = 0;
int state = 0;
int cont = 0;
int sum = 0;
raw_len = strlen(raw);
tokens = strtok(raw, "\n");
sum = sum + strlen(tokens);
while(tokens != NULL){
strcpy(tmp, (tokens));
tokens = strtok(NULL, "\n");
sum = sum + strlen(tmp);
if(cont > 0){
ptr = format_line(tmp);
VSB_cat(final, ptr);
if(sum < raw_len)
VSB_cat(final, ",\n");
free(ptr);
}
cont++;
}
示例3: http_process
int
http_process(struct vtclog *vl, const char *spec, int sock, int *sfd)
{
struct http *hp;
char *s, *q;
int retval;
(void)sfd;
ALLOC_OBJ(hp, HTTP_MAGIC);
AN(hp);
hp->fd = sock;
hp->timeout = 15000;
hp->nrxbuf = 2048*1024;
hp->vsb = VSB_new_auto();
hp->rxbuf = malloc(hp->nrxbuf); /* XXX */
hp->sfd = sfd;
hp->vl = vl;
hp->gziplevel = 0;
hp->gzipresidual = -1;
AN(hp->rxbuf);
AN(hp->vsb);
s = strdup(spec);
q = strchr(s, '\0');
assert(q > s);
AN(s);
parse_string(s, http_cmds, hp, vl);
retval = hp->fd;
VSB_delete(hp->vsb);
free(hp->rxbuf);
free(hp);
return (retval);
}
示例4: VEP_Init
struct vep_state *
VEP_Init(struct vfp_ctx *vc, const struct http *req, vep_callback_t *cb,
void *cb_priv)
{
struct vep_state *vep;
CHECK_OBJ_NOTNULL(vc, VFP_CTX_MAGIC);
CHECK_OBJ_NOTNULL(req, HTTP_MAGIC);
vep = WS_Alloc(vc->http->ws, sizeof *vep);
AN(vep);
INIT_OBJ(vep, VEP_MAGIC);
vep->url = req->hd[HTTP_HDR_URL].b;
vep->vc = vc;
vep->vsb = VSB_new_auto();
AN(vep->vsb);
if (cb != NULL) {
vep->dogzip = 1;
/* XXX */
VSB_printf(vep->vsb, "%c", VEC_GZ);
vep->cb = cb;
vep->cb_priv = cb_priv;
} else {
vep->cb = vep_default_cb;
vep->cb_priv = &vep->cb_x;
}
vep->state = VEP_START;
vep->crc = crc32(0L, Z_NULL, 0);
vep->crcp = crc32(0L, Z_NULL, 0);
vep->startup = 1;
return (vep);
}
示例5: vbp_build_req
static void
vbp_build_req(struct vbp_target *vt, const struct vrt_backend_probe *vbp,
const struct backend *be)
{
struct vsb *vsb;
vsb = VSB_new_auto();
AN(vsb);
VSB_clear(vsb);
if (vbp->request != NULL) {
VSB_cat(vsb, vbp->request);
} else {
VSB_printf(vsb, "GET %s HTTP/1.1\r\n",
vbp->url != NULL ? vbp->url : "/");
if (be->hosthdr != NULL)
VSB_printf(vsb, "Host: %s\r\n", be->hosthdr);
VSB_printf(vsb, "Connection: close\r\n");
VSB_printf(vsb, "\r\n");
}
AZ(VSB_finish(vsb));
vt->req = strdup(VSB_data(vsb));
AN(vt->req);
vt->req_len = VSB_len(vsb);
VSB_destroy(&vsb);
}
示例6: cnt_synth
static enum req_fsm_nxt
cnt_synth(struct worker *wrk, struct req *req)
{
char date[40];
struct http *h;
double now;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
wrk->stats.s_synth++;
now = W_TIM_real(wrk);
VSLb_ts_req(req, "Process", now);
if (req->err_code < 100 || req->err_code > 999)
req->err_code = 501;
HTTP_Setup(req->resp, req->ws, req->vsl, SLT_RespMethod);
h = req->resp;
VTIM_format(now, date);
http_PrintfHeader(h, "Date: %s", date);
http_SetHeader(h, "Server: Varnish");
http_PrintfHeader(req->resp, "X-Varnish: %u", VXID(req->vsl->wid));
http_PutResponse(h, "HTTP/1.1", req->err_code, req->err_reason);
AZ(req->synth_body);
req->synth_body = VSB_new_auto();
AN(req->synth_body);
VCL_synth_method(req->vcl, wrk, req, NULL, req->http->ws);
http_Unset(h, H_Content_Length);
AZ(VSB_finish(req->synth_body));
if (wrk->handling == VCL_RET_RESTART) {
HTTP_Setup(h, req->ws, req->vsl, SLT_RespMethod);
VSB_delete(req->synth_body);
req->synth_body = NULL;
req->req_step = R_STP_RESTART;
return (REQ_FSM_MORE);
}
assert(wrk->handling == VCL_RET_DELIVER);
if (http_HdrIs(req->resp, H_Connection, "close"))
req->doclose = SC_RESP_CLOSE;
V1D_Deliver_Synth(req);
VSLb_ts_req(req, "Resp", W_TIM_real(wrk));
VSB_delete(req->synth_body);
req->synth_body = NULL;
req->err_code = 0;
req->err_reason = NULL;
return (REQ_FSM_DONE);
}
示例7: h_order
static int
h_order(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
unsigned spec, const char *ptr, uint64_t bm)
{
char type;
struct vlog_priv_t *vlog = priv;
/* XXX: Just ignore any fd not inside the bitmap */
if (fd >= sizeof vlog->bitmap / sizeof vlog->bitmap[0])
return (0);
vlog->bitmap[fd] |= bm;
type = (spec & VSL_S_CLIENT) ? 'c' :
(spec & VSL_S_BACKEND) ? 'b' : '-';
if (!(spec & (VSL_S_CLIENT|VSL_S_BACKEND))) {
(void)local_print(vlog, tag, fd, len, spec, ptr, bm);
return (0);
}
if (vlog->ob[fd] == NULL) {
vlog->ob[fd] = VSB_new_auto();
assert(vlog->ob[fd] != NULL);
}
if ((tag == SLT_BackendOpen || tag == SLT_SessionOpen ||
(tag == SLT_ReqStart &&
vlog->last[fd] != SLT_SessionOpen &&
vlog->last[fd] != SLT_VCL_acl) ||
(tag == SLT_BackendXID &&
vlog->last[fd] != SLT_BackendOpen)) &&
VSB_len(vlog->ob[fd]) != 0) {
/*
* This is the start of a new request, yet we haven't seen
* the end of the previous one. Spit it out anyway before
* starting on the new one.
*/
if (vlog->last[fd] != SLT_SessionClose)
VSB_printf(vlog->ob[fd], "{ \"fd\": \"%d\","
"\"tag\": \"%s\", \"type\":\"%c\","
"\"value\":\"%s\"},\n",
fd, "Interrupted", type, VSL_tags[tag]);
h_order_finish(vlog, fd);
}
vlog->last[fd] = tag;
print_entry(vlog, fd, tag, type, ptr, len);
switch (tag) {
case SLT_ReqEnd:
case SLT_BackendClose:
case SLT_BackendReuse:
case SLT_StatSess:
h_order_finish(vlog, fd);
break;
default:
break;
}
return (0);
}
示例8: mgt_sandbox_init
void
mgt_sandbox_init(void)
{
struct passwd *pwd;
struct group *grp;
struct vsb *sb;
unsigned subs;
/* Pick a sandbox */
#ifdef HAVE_SETPPRIV
mgt_sandbox = mgt_sandbox_solaris;
#else
mgt_sandbox = mgt_sandbox_unix;
#endif
/* Test it */
sb = VSB_new_auto();
subs = VSUB_run(sb, run_sandbox_test, NULL, "SANDBOX-test", 10);
VSB_delete(sb);
if (subs) {
MGT_complain(C_SECURITY,
"Platform-specific sandbox failed - sandboxing disabled");
MGT_complain(C_SECURITY,
"Varnish runs with elevated privileges");
mgt_sandbox = mgt_sandbox_null;
}
MCF_AddParams(mgt_parspec_sandbox);
/*
* If we have nobody/nogroup, use them as defaults for sandboxes,
* else fall back to whoever we run as.
*/
if (getpwnam("nobody") != NULL) {
MCF_SetDefault("user", "nobody");
} else {
pwd = getpwuid(getuid());
if (pwd == NULL)
ARGV_ERR("Neither user 'nobody' or my uid (%jd)"
" found in password database.\n",
(intmax_t)getuid());
MCF_SetDefault("user", pwd->pw_name);
}
endpwent();
if (getgrnam("nogroup") != NULL) {
MCF_SetDefault("group", "nogroup");
} else {
grp = getgrgid(getgid());
if (grp == NULL)
ARGV_ERR("Neither group 'nogroup' or my gid (%jd)"
" found in password database.\n",
(intmax_t)getgid());
MCF_SetDefault("group", grp->gr_name);
}
endgrent();
}
示例9: vtc_send_proxy
int
vtc_send_proxy(int fd, int version, const struct suckaddr *sac,
const struct suckaddr *sas)
{
struct vsb *vsb;
char hc[VTCP_ADDRBUFSIZE];
char pc[VTCP_PORTBUFSIZE];
char hs[VTCP_ADDRBUFSIZE];
char ps[VTCP_PORTBUFSIZE];
int i, len;
int proto;
AN(sac);
AN(sas);
assert(version == 1 || version == 2);
vsb = VSB_new_auto();
AN(vsb);
proto = VSA_Get_Proto(sas);
assert(proto == PF_INET6 || proto == PF_INET);
if (version == 1) {
VSB_bcat(vsb, vpx1_sig, sizeof(vpx1_sig));
if (proto == PF_INET6)
VSB_printf(vsb, " TCP6 ");
else if (proto == PF_INET)
VSB_printf(vsb, " TCP4 ");
VTCP_name(sac, hc, sizeof(hc), pc, sizeof(pc));
VTCP_name(sas, hs, sizeof(hs), ps, sizeof(ps));
VSB_printf(vsb, "%s %s %s %s\r\n", hc, hs, pc, ps);
} else if (version == 2) {
VSB_bcat(vsb, vpx2_sig, sizeof(vpx2_sig));
VSB_putc(vsb, 0x21);
if (proto == PF_INET6) {
VSB_putc(vsb, 0x21);
VSB_putc(vsb, 0x00);
VSB_putc(vsb, 0x24);
} else if (proto == PF_INET) {
VSB_putc(vsb, 0x11);
VSB_putc(vsb, 0x00);
VSB_putc(vsb, 0x0c);
}
vpx_enc_addr(vsb, proto, sac);
vpx_enc_addr(vsb, proto, sas);
vpx_enc_port(vsb, sac);
vpx_enc_port(vsb, sas);
} else
WRONG("Wrong proxy version");
AZ(VSB_finish(vsb));
len = VSB_len(vsb);
i = write(fd, VSB_data(vsb), len);
VSB_delete(vsb);
return (i != len);
}
示例10: vstat_init_ctx
static void
vstat_init_ctx(struct agent_core_t *core, struct vstat_thread_ctx_t *t_ctx)
{
t_ctx->vd = VSM_New();
t_ctx->vsb = VSB_new_auto();
t_ctx->curl = ipc_register(core,"curl");
t_ctx->logger = ipc_register(core,"logger");
if (core->config->n_arg)
VSC_Arg(t_ctx->vd, 'n', core->config->n_arg);
}
示例11: varnish_new
static struct varnish *
varnish_new(const char *name)
{
struct varnish *v;
struct vsb *vsb;
char buf[1024];
AN(name);
ALLOC_OBJ(v, VARNISH_MAGIC);
AN(v);
REPLACE(v->name, name);
v->vl = vtc_logopen(name);
AN(v->vl);
bprintf(buf, "${tmpdir}/%s", name);
vsb = macro_expand(v->vl, buf);
AN(vsb);
v->workdir = strdup(VSB_data(vsb));
AN(v->workdir);
VSB_delete(vsb);
bprintf(buf, "rm -rf %s ; mkdir -p %s ; echo ' %ld' > %s/_S",
v->workdir, v->workdir, random(), v->workdir);
AZ(system(buf));
if (*v->name != 'v')
vtc_log(v->vl, 0, "Varnish name must start with 'v'");
v->args = VSB_new_auto();
v->storage = VSB_new_auto();
VSB_printf(v->storage, "-sfile,%s,10M", v->workdir);
AZ(VSB_finish(v->storage));
v->cli_fd = -1;
VTAILQ_INSERT_TAIL(&varnishes, v, list);
return (v);
}
示例12: vcc_new_expr
static struct expr *
vcc_new_expr(void)
{
struct expr *e;
/* XXX: use TlAlloc() ? */
ALLOC_OBJ(e, EXPR_MAGIC);
AN(e);
e->vsb = VSB_new_auto();
e->fmt = VOID;
return (e);
}
示例13: mgt_VccCompile
char *
mgt_VccCompile(struct cli *cli, const char *vclname, const char *vclsrc,
int C_flag)
{
struct vcc_priv vp;
struct vsb *sb;
unsigned status;
AN(cli);
sb = VSB_new_auto();
XXXAN(sb);
INIT_OBJ(&vp, VCC_PRIV_MAGIC);
vp.src = vclsrc;
VSB_printf(sb, "./vcl_%s.c", vclname);
AZ(VSB_finish(sb));
vp.srcfile = strdup(VSB_data(sb));
AN(vp.srcfile);
VSB_clear(sb);
VSB_printf(sb, "./vcl_%s.so", vclname);
AZ(VSB_finish(sb));
vp.libfile = strdup(VSB_data(sb));
AN(vp.srcfile);
VSB_clear(sb);
status = mgt_vcc_compile(&vp, sb, C_flag);
AZ(VSB_finish(sb));
if (VSB_len(sb) > 0)
VCLI_Out(cli, "%s", VSB_data(sb));
VSB_delete(sb);
(void)unlink(vp.srcfile);
free(vp.srcfile);
if (status || C_flag) {
(void)unlink(vp.libfile);
free(vp.libfile);
if (!C_flag) {
VCLI_Out(cli, "VCL compilation failed");
VCLI_SetResult(cli, CLIS_PARAM);
}
return(NULL);
}
VCLI_Out(cli, "VCL compiled.\n");
return (vp.libfile);
}
示例14: vtc_logopen
struct vtclog *
vtc_logopen(const char *id)
{
struct vtclog *vl;
ALLOC_OBJ(vl, VTCLOG_MAGIC);
AN(vl);
vl->id = id;
vl->vsb = VSB_new_auto();
AZ(pthread_mutex_init(&vl->mtx, NULL));
AZ(pthread_setspecific(log_key, vl));
return (vl);
}
示例15: vcl_list_json
/*
* Takes unformatted vcl.list as input and returns a vsb with the json
* version. The caller must clean up the vsb.
*/
static struct vsb *
vcl_list_json(char *raw)
{
struct vcl_list tmp;
int ret;
char *pos;
char ref_temp[10];
const char *sep = "";
struct vsb *vsb;
vsb = VSB_new_auto();
pos = raw;
VSB_printf(vsb,"{\n\t\"vcls\": [");
while (1) {
if (pos[30] != ' ')
ret = sscanf(pos, "%10s %4s/%4s %6s %s\n",
tmp.available, tmp.state, tmp.temp, ref_temp,
tmp.name);
else
ret = sscanf(pos, "%10s %4s/%4s %s\n",
tmp.available, tmp.state, tmp.temp, tmp.name);
if (ret <= 0) {
/*
* FIXME: This should go into the logger
*/
printf("Confused! line: %s\n", pos);
VSB_clear(vsb);
return (vsb);
}
assert(ret>0);
VSB_printf(vsb,
"%s\n"
"\t\t{\n"
"\t\t\t\"name\": \"%s\",\n"
"\t\t\t\"status\": \"%s\",\n"
"\t\t\t\"temp\": \"%s\",\n"
"\t\t\t\"mode\": \"%s\"\n"
"\t\t}",
sep, tmp.name, tmp.available, tmp.temp, tmp.state);
sep = ",";
pos = strstr(pos,"\n");
if (pos == NULL)
break;
pos += 1;
if (pos[0] == '\0' || pos[0] == '\n')
break;
}
VSB_printf(vsb,"\n\t]\n}\n");
return vsb;
}