• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ bufferevent_get_output函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中bufferevent_get_output函数的典型用法代码示例。如果您正苦于以下问题:C++ bufferevent_get_output函数的具体用法?C++ bufferevent_get_output怎么用?C++ bufferevent_get_output使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了bufferevent_get_output函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: readcb

void readcb(struct bufferevent *bev, void *ctx) {
	struct evbuffer *input, *output;
	char *line;
	size_t n;
	int i;

	input=bufferevent_get_input(bev);
	output=bufferevent_get_output(bev);

	while( (line=evbuffer_readln(input, &n, EVBUFFER_EOL_LF))) {
		for(i=0;i<n;++i) {
			line[i]=rot13_char(line[i]);
		}
		evbuffer_add(output, line, n);
		evbuffer_add(output, "\n", 1);
		free(line);
	}

	if(evbuffer_get_length(input)>=MAX_LINE) {
		char buf[1024];

		while(evbuffer_get_length(input)) {
			int n=evbuffer_remove(input, buf, sizeof(buf));

			for(i=0;i<n;++i) {
				buf[i]=rot13_char(buf[i]);
			}
			evbuffer_add(output, buf, n);
		}
		evbuffer_add(output, "\n", 1);
	}
}
开发者ID:anton4o123,项目名称:school_work,代码行数:32,代码来源:rot13-libevent.c


示例2: respond_to_number

static void
respond_to_number(struct bufferevent *bev, void *ctx)
{
	struct evbuffer *b = bufferevent_get_input(bev);
	char *line;
	int n;
	line = evbuffer_readln(b, NULL, EVBUFFER_EOL_LF);
	if (! line)
		return;
	n = atoi(line);
	if (n <= 0)
		TT_FAIL(("Bad number: %s", line));
	TT_BLATHER(("The number was %d", n));
	if (n == 1001) {
		++test_is_done;
		bufferevent_free(bev); /* Should trigger close on other side. */
		return;
	}
	if (!strcmp(ctx, "client") && n == renegotiate_at) {
		SSL_renegotiate(bufferevent_openssl_get_ssl(bev));
	}
	++n;
	evbuffer_add_printf(bufferevent_get_output(bev),
	    "%d\n", n);
	TT_BLATHER(("Done reading; now writing."));
	bufferevent_enable(bev, EV_WRITE);
	bufferevent_disable(bev, EV_READ);
}
开发者ID:Abyss116,项目名称:luaplus51-all,代码行数:28,代码来源:regress_ssl.c


示例3: bio_bufferevent_write

/* Called to write data info the BIO */
static int
bio_bufferevent_write(BIO *b, const char *in, int inlen)
{
	struct bufferevent *bufev = b->ptr;
	struct evbuffer *output;
	size_t outlen;

	BIO_clear_retry_flags(b);

	if (!b->ptr)
		return -1;

	output = bufferevent_get_output(bufev);
	outlen = evbuffer_get_length(output);

	/* Copy only as much data onto the output buffer as can fit under the
	 * high-water mark. */
	if (bufev->wm_write.high && bufev->wm_write.high <= (outlen+inlen)) {
		if (bufev->wm_write.high <= outlen) {
			/* If no data can fit, we'll need to retry later. */
			BIO_set_retry_write(b);
			return -1;
		}
		inlen = bufev->wm_write.high - outlen;
	}

	EVUTIL_ASSERT(inlen > 0);
	evbuffer_add(output, in, inlen);
	return inlen;
}
开发者ID:agct,项目名称:dnscrypt-proxy,代码行数:31,代码来源:bufferevent_openssl.c


示例4: echo_writecb

static void
echo_writecb(struct bufferevent *bev, void *ctx)
{
	struct evbuffer *output = bufferevent_get_output(bev);
	if (evbuffer_get_length(output) < 512000)
		bufferevent_enable(bev, EV_READ);
}
开发者ID:2asoft,项目名称:freebsd,代码行数:7,代码来源:test-ratelim.c


示例5: echo_read_cb

static void echo_read_cb(struct bufferevent *bev, void *ctx)
{
	
		char * line;
		char* retval;
		size_t len;
        /* This callback is invoked when there is data to read on bev. */
        struct evbuffer *input = bufferevent_get_input(bev);
        struct evbuffer *output = bufferevent_get_output(bev);
		struct evbuffer_iovec v[2];

		line = evbuffer_readln(input, &len, EVBUFFER_EOL_CRLF);
		retval = (char*)command_parser(line);
		//command_parser(line);
		evbuffer_reserve_space(output, strlen(retval), v, 2);
		evbuffer_add(output, retval, strlen(retval));
		evbuffer_commit_space(output, v, 1);
		
		//evbuffer_add_buffer(output, input);
		

		//evbuffer_copyout(input, line, buffer_len);
		
        /* Copy all the data from the input buffer to the output buffer. */
		printf("%s\n",line);
		free(line);    
}
开发者ID:RaoHai,项目名称:chinese_full_text_search,代码行数:27,代码来源:key_value_tcp.c


示例6: write_callback

/* if data are sent from output buffer of bev, this function is called,
 * it is not active all the time, but only in some situations (bev has too many data in output buffer)
 * we can find out if all data are written to network and free memory
 */
void write_callback(struct bufferevent *bev, void *ptr)
{
	struct bev_arg *bev_arg=ptr;

	/* if bufferevent send all data to socket */
	if (evbuffer_get_length(bufferevent_get_output(bev))==0) {
		/* if remote socket exist */
		if (bev_arg->remote) {
			/*
			 * now enable EV_READ on remote socket bufferevent so we can receive data from it
			 * and disable write_callback fn for self
			 */
			struct bufferevent *bev_remote=bev_arg->remote->bev;

			bufferevent_enable(bev_remote, EV_READ);
			bufferevent_setcb(bev, read_callback, NULL, event_callback, (void *)bev_arg);
		} else {
			/* if remote socket is closed and we dont have any data in output buffer, free self */
			bev_arg->listener->nr_conn--;

			bufferevent_free(bev);
			free(bev_arg);
		}
	}
}
开发者ID:Apploud,项目名称:rum,代码行数:29,代码来源:default_callback.c


示例7: NEW_OBJECT

static ad_conn_t *conn_new(ad_server_t *server, struct bufferevent *buffer) {
    if (server == NULL || buffer == NULL) {
        return NULL;
    }

    // Create a new connection container.
    ad_conn_t *conn = NEW_OBJECT(ad_conn_t);
    if (conn == NULL) return NULL;

    // Initialize with default values.
    conn->server = server;
    conn->buffer = buffer;
    conn->in = bufferevent_get_input(buffer);
    conn->out = bufferevent_get_output(buffer);
    conn_reset(conn);

    // Bind callback
    bufferevent_setcb(buffer, conn_read_cb, conn_write_cb, conn_event_cb, (void *)conn);
    bufferevent_setwatermark(buffer, EV_WRITE, 0, 0);
    bufferevent_enable(buffer, EV_WRITE);
    bufferevent_enable(buffer, EV_READ);

    // Run callbacks with AD_EVENT_INIT event.
    conn->status = call_hooks(AD_EVENT_INIT | AD_EVENT_WRITE, conn);

    return conn;
}
开发者ID:GuillaumeLeclerc,项目名称:libasyncd,代码行数:27,代码来源:ad_server.c


示例8: echo_read_cb

static void echo_read_cb(struct bufferevent *bev, void *ctx) {
    struct evbuffer *input = bufferevent_get_input(bev);
    size_t str_len = 0;
    char* str_input = evbuffer_readln(input,&str_len,EVBUFFER_EOL_ANY);

    char* val = NULL;
    enum CMD_TYPE cmdtype = parse_cmd(str_input, str_len, &val);
    if (cmdtype == CMD_QUIT){
        bufferevent_free(bev);
        return;
    }
    struct evbuffer *ret = evbuffer_new();
    switch (cmdtype) {
        case CMD_GET:
        case CMD_ECHO:
            evbuffer_add(ret,val,strlen(val));
            break;
        case CMD_ERR:
            evbuffer_add(ret,"(ERR)",5);
            break;
        case CMD_OK:
            evbuffer_add(ret,"(OK)",4);
            break;
        case CMD_NULL:
            evbuffer_add(ret,"(NULL)",6);break;
        default:
            evbuffer_add(ret,"(UNKNOWN)",9);break;
    }
    evbuffer_add(ret,"\n",1);
    evbuffer_add_buffer(bufferevent_get_output(bev), ret);
}
开发者ID:itsusony,项目名称:adkvs,代码行数:31,代码来源:main.c


示例9: encrypt_mem

static void encrypt_mem(redsocks_client * client,
                      char * data, size_t len,
                      struct bufferevent * to, int decrypt)
{
    ss_client *sclient = (void*)(client + 1);
    struct evbuffer_iovec vec;
    struct evbuffer * buf_out = bufferevent_get_output(to);
    size_t required;
    int rc;

    if (!len || !data)
        return;

    if (decrypt)
        required = ss_calc_buffer_size(&sclient->d_ctx, len);
    else
        required = ss_calc_buffer_size(&sclient->e_ctx, len);
    if (required && evbuffer_reserve_space(buf_out, required, &vec, 1) == 1)
    {
        if (decrypt)
            rc = ss_decrypt(&sclient->d_ctx, data, len, vec.iov_base, &vec.iov_len);
        else
            rc = ss_encrypt(&sclient->e_ctx, data, len, vec.iov_base, &vec.iov_len);
        if (!rc)
            vec.iov_len = 0;
        evbuffer_commit_space(buf_out, &vec, 1);
    }
}
开发者ID:BEA3CCCE,项目名称:redsocks,代码行数:28,代码来源:shadowsocks.c


示例10: readcbout

	static void
readcbout(struct bufferevent *bev_out, void *ctx_in)
{
	struct bufferevent *partner_in = ctx_in;
	struct evbuffer *src, *dst;
	size_t len;
	src = bufferevent_get_input(bev_out);
	len = evbuffer_get_length(src);
	if (!partner_in) {
		fprintf(stderr, "partner_in == NULL");
		evbuffer_drain(src, len);
		return;
	}
	dst = bufferevent_get_output(partner_in);
	evbuffer_add_buffer(dst, src);

	if (evbuffer_get_length(dst) >= MAX_OUTPUT_C2P) {
		/* We're giving the other side data faster than it can
		 * pass it on.  Stop reading here until we have drained the
		 * other side to MAX_OUTPUT_C2P/2 bytes. */
		fprintf(stderr, "adjust the wartermark of <client-proxy>\n");
		bufferevent_setcb(partner_in, readcbin, drained_writecbin, eventcbin, bev_out);
		bufferevent_setwatermark(partner_in, EV_WRITE, MAX_OUTPUT_C2P/2, MAX_OUTPUT_C2P);
		bufferevent_disable(bev_out, EV_READ);
	}
}
开发者ID:hzsunzixiang,项目名称:programming,代码行数:26,代码来源:proxy2.c


示例11: ss_relay_readcb

static void ss_relay_readcb(struct bufferevent *buffev, void *_arg)
{
    redsocks_client *client = _arg;
    struct bufferevent * from = buffev;
    struct bufferevent * to   = client->client;
    size_t input_size = evbuffer_get_contiguous_space(bufferevent_get_input(from));
    size_t output_size = evbuffer_get_length(bufferevent_get_output(to));

    assert(buffev == client->relay);
    redsocks_touch_client(client);

    if (client->state == ss_connected)
    {
        /* decrypt and forward data to client side */
        if (output_size < to->wm_write.high)
        {
            if (input_size)
                decrypt_buffer(client, from, to);
            if (bufferevent_enable(from, EV_READ) == -1)
                redsocks_log_errno(client, LOG_ERR, "bufferevent_enable");
        }
        else
        {
            if (bufferevent_disable(from, EV_READ) == -1)
                redsocks_log_errno(client, LOG_ERR, "bufferevent_disable");
        }
    }
    else
    {
        redsocks_drop_client(client);
    }
}
开发者ID:BEA3CCCE,项目名称:redsocks,代码行数:32,代码来源:shadowsocks.c


示例12: ss_relay_writecb

static void ss_relay_writecb(struct bufferevent *buffev, void *_arg)
{
    redsocks_client *client = _arg;
    struct bufferevent * from = client->client;
    struct bufferevent * to   = buffev;
    size_t input_size = evbuffer_get_contiguous_space(bufferevent_get_input(from));
    size_t output_size = evbuffer_get_length(bufferevent_get_output(to));

    assert(buffev == client->relay);
    redsocks_touch_client(client);

    if (process_shutdown_on_write_(client, from, to))
        return;

    if (client->state == ss_connected) 
    {
        /* encrypt and forward data received from client side */
        if (output_size < to->wm_write.high)
        {
            if (input_size)
                encrypt_buffer(client, from, to);
            if (!(client->client_evshut & EV_READ) && bufferevent_enable(from, EV_READ) == -1)
                redsocks_log_errno(client, LOG_ERR, "bufferevent_enable");
        }
    }
    else
    {
        redsocks_drop_client(client);
    }
}
开发者ID:BEA3CCCE,项目名称:redsocks,代码行数:30,代码来源:shadowsocks.c


示例13: ssh_relay_event_cb

static void
ssh_relay_event_cb(struct bufferevent *bev, short what, void *ptr)
{
	obfsproxyssh_client_session_t *session = ptr;
	struct evbuffer *buf;

	assert(bev == session->ssh_ev);

	if (what & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) {
		session->ssh_is_valid = 0;
		libssh2_channel_free(session->ssh_channel);
		session->ssh_channel = NULL;
		libssh2_session_free(session->ssh_session);
		session->ssh_session = NULL;
		buf = bufferevent_get_output(session->socks_ev);
		if (0 == session->socks_is_valid || 0 ==
				evbuffer_get_length(buf))
			session_free(session);
		else {
			bufferevent_disable(session->socks_ev, EV_READ);
			bufferevent_setcb(session->socks_ev, NULL,
					socks_relay_teardown_cb,
					socks_event_cb, session);
		}
	}
}
开发者ID:Yawning,项目名称:obfsproxyssh,代码行数:26,代码来源:obfsproxyssh_client.c


示例14: on_event

void on_event(struct bufferevent *bev, short event, void *arg){
    struct evbuffer *output = bufferevent_get_output(bev);
    struct event_base *base = bufferevent_get_base(bev);
    char buf[MAXLEN];
    //printf("event begin:%d\n", event);
    /*if(event & BEV_EVENT_READING){
        printf("Read?\n");
    }*/
    /*if(event & BEV_EVENT_WRITING){
        printf("Write?\n");
    }*/
    if(event & BEV_EVENT_EOF){
        //printf("EOF.\n");
        printf("Logged out.\n");
        pthread_cancel(tid);
        pthread_cancel(disptid);
        bufferevent_free(bev);
        event_base_loopexit(base, NULL);
    }
    if(event & BEV_EVENT_ERROR){
        printf("Error!\n");
    }
    if(event & BEV_EVENT_TIMEOUT){
        printf("Timeout!\n");
    }
    if(event & BEV_EVENT_CONNECTED){
        printf("Connected.\n");
        buf[0] = 0x80;
        buf[1] = user & 0xFF;
        *((package *)(&buf[2])) = pkg[user];
        evbuffer_add(output, buf, sizeof(pkg[user]) + 2);
    }
}
开发者ID:pw1316,项目名称:Position_Synchronization,代码行数:33,代码来源:TrivialClient.c


示例15: sock_flush

///////////////////////////////////////////////
// coro socket interface
///////////////////////////////////////////////
int sock_flush(int fd)
{
    coro_sock *sock = find_sock_by_fd(fd);
    if ( !sock ) {
        return -1;
    }
    bufferevent_disable(sock->bev, EV_READ);
    evbuffer *buf = bufferevent_get_output(sock->bev);
    uthread_t cur = coro_current_uthread();
    size_t left = 0;
    int ret = 0;
    do {
        coro_sock *sock = find_sock_by_fd(fd);
        if ( !sock ) {
            return -1;
        }
        left = evbuffer_get_length(buf);
        if ( left > 0 ) {
            set_pending_status(sock, set_wait_write_status, cur, set_wait_write_status);
            sock->writequeue->push(cur);
            int status = coro_schedule_uthread(cur, 0);
            if ( status < 0 ) {
                ret = status;
                break;
            }
        }
    } while(left);
    return ret;
}
开发者ID:littletiny,项目名称:corotouine,代码行数:32,代码来源:sock.cpp


示例16: cmd_get

void
cmd_get(struct bufferevent *bev, void *ctx, int argc, char **argv)
{
    struct evbuffer *output = bufferevent_get_output(bev),
		    *buf = evbuffer_new();

    if (*argv == NULL) {
	evbuffer_add_reference(output, "ERROR\r\n", 7, NULL, NULL);
	return;
    }

    do {
	answer_key(buf, *argv);
	if (evbuffer_get_length(buf) == 0)
	    continue;
#ifdef CONVERT_TO_UTF8
	buf = evbuffer_b2u(buf);
	if (buf == NULL) {
	    // Failed to convert
	    buf = evbuffer_new();
	    continue;
	}
#endif
	evbuffer_add_printf(output, "VALUE %s 0 %ld\r\n", *argv, evbuffer_get_length(buf));
	evbuffer_add_buffer(output, buf);
	evbuffer_add_printf(output, "\r\n");
    } while (*++argv);

    evbuffer_add_reference(output, "END\r\n", 5, NULL, NULL);

    evbuffer_free(buf);
}
开发者ID:ChunHungLiu,项目名称:pttbbs,代码行数:32,代码来源:boardd.c


示例17: nbd_client_handler

/* private helper callbacks */
static void nbd_client_handler(struct bufferevent* bev, void* client)
{
    struct evbuffer* in  = bufferevent_get_input(bev);
    struct evbuffer* out = bufferevent_get_output(bev);

    while (evbuffer_get_length(in))
    {
        switch (((struct nbd_client*) client)->state)
        {
            case NBD_HANDSHAKE_SENT:
               if (__check_zero_handshake(in, client))
                   return;
               break;
            case NBD_ZERO_RECEIVED:
               if (__check_opt_header(bev, in, out, client))
                   return;
               break; 
            case NBD_DATA_PUSHING:
               if (__check_request(bev, in, out, client))
                   return;
               break;
            case NBD_DISCONNECTED:
               fprintf(stderr, "DISCONNECTED STATE.\n");
               nbd_ev_handler(bev, BEV_EVENT_EOF, client);
            default:
               return;
        };
    }
}
开发者ID:KristineMcNerney,项目名称:gammaray,代码行数:30,代码来源:nbd.c


示例18: readcb

static void
readcb(struct bufferevent *bev, void *ctx)
{
	struct bufferevent *partner = ctx;
	struct evbuffer *src, *dst;
	size_t len;
	src = bufferevent_get_input(bev);
	len = evbuffer_get_length(src);
	if (!partner) {
		evbuffer_drain(src, len);
		return;
	}
	dst = bufferevent_get_output(partner);
	evbuffer_add_buffer(dst, src);

	if (evbuffer_get_length(dst) >= MAX_OUTPUT) {
		/* We're giving the other side data faster than it can
		 * pass it on.  Stop reading here until we have drained the
		 * other side to MAX_OUTPUT/2 bytes. */
		bufferevent_setcb(partner, readcb, drained_writecb,
		    eventcb, bev);
		bufferevent_setwatermark(partner, EV_WRITE, MAX_OUTPUT/2,
		    MAX_OUTPUT);
		bufferevent_disable(bev, EV_READ);
	}
}
开发者ID:sambuc,项目名称:netbsd,代码行数:26,代码来源:le-proxy.c


示例19: nbd_new_conn

static void nbd_new_conn(struct evconnlistener *conn, evutil_socket_t sock,
                         struct sockaddr *addr, int len, void * handle)
{
    struct event_base* eb = evconnlistener_get_base(conn);
    struct bufferevent* bev = bufferevent_socket_new(eb, sock,
                                                     BEV_OPT_CLOSE_ON_FREE);
    struct evbuffer* out = bufferevent_get_output(bev);
    struct nbd_new_handshake hdr = { .magic        =
                                            htobe64(GAMMARAY_NBD_MAGIC),
                                     .protocol     =
                                            htobe64(GAMMARAY_NBD_NEW_PROTOCOL),
                                     .global_flags =
                                            htobe16(NBD_FLAG_FIXED_NEWSTYLE)
                                   };
    struct nbd_client* client = (struct nbd_client*)
                                    malloc(sizeof(struct nbd_client));

    client->handle = handle;
    client->state = NBD_HANDSHAKE_SENT;
    client->socket = sock;
    client->write_count = 0;
    client->write_bytes = 0;
    client->buf = NULL;

    bufferevent_setcb(bev, &nbd_client_handler, NULL, &nbd_ev_handler, client);
    evbuffer_add(out, &hdr, sizeof(hdr));
    bufferevent_enable(bev, EV_READ|EV_WRITE);
}
开发者ID:KristineMcNerney,项目名称:gammaray,代码行数:28,代码来源:nbd.c


示例20: read_cb

//********************************************************************************
// Event handler when there is data to be read
//********************************************************************************
static void read_cb(struct bufferevent *bev, void *ctx)
{
    // Get input buffer
    struct evbuffer *input = bufferevent_get_input(bev);
    ev_uint32_t record_len = evbuffer_get_length(input);

    // Setup buffer to get data
    char* record = (char*) malloc(record_len);
    if (record == NULL)
        return;

    // Obtain data
    evbuffer_remove(input, record, record_len);

    // Store in structure
    printf("Received: %s.\n", record);
    if(strncmp(record, "restore", strlen("restore")) == 0)
    {
        // Restore command received; send information back
        char fakeGroup[] = "fake:u1|Image uploaded#u2|Approved montage#$";
        struct evbuffer *output = bufferevent_get_output(bev);

        /* Copy all the data from the input buffer to the output buffer. */
        evbuffer_add(output, fakeGroup, sizeof(fakeGroup));
        //evbuffer_add(output, theGroup->userInfoString, sizeof(theGroup->userInfoString);
    }
    else if(strncmp(record, "store", strlen("store")) == 0)
    {
        theGroup = parseMsg(record+strlen("store:"));

        // Print what we received
        printf("Group name: %s (length=%d)\n", theGroup->name, strlen(theGroup->name));
        printf("Group info: %s (length=%d)\n", theGroup->userInfoString, strlen(theGroup->userInfoString));
    }
}
开发者ID:sebastian-echeverria,项目名称:eds-p4,代码行数:38,代码来源:server.c



注:本文中的bufferevent_get_output函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ bufferevent_new函数代码示例发布时间:2022-05-30
下一篇:
C++ bufferevent_enable函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap