void conn_add_data(struct connection *conn, uint8_t *data, int n, struct buf_ptr *start, struct buf_ptr *end) { // get buffer from local_data. struct mbuf *buf = conn_get_buf(conn, false, true); int remain = n, wlen, size, len = 0; if (remain > 0 && start != NULL) { start->pos = buf->last; start->buf = buf; } while (remain > 0) { wlen = mbuf_write_size(buf); size = remain < wlen ? remain : wlen; memcpy(buf->last, data + len, size); buf->last += size; len += size; remain -= size; if (remain <= 0 && end != NULL) { end->pos = buf->last; end->buf = buf; } if (wlen - size <= 0) { buf = conn_get_buf(conn, false, true); } } }
int conn_parse1(struct conn *conn, char *buf, size_t *pos, size_t n) { log_info("%.*s", (int)n, buf); struct mbuf *mbuf; int i; for(i = 0;i != 100000;++i) { mbuf = conn_get_buf(16); memcpy(mbuf->buf,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",16); conn_insert_send_queue(conn,mbuf); } *pos = n; conn->conn_parse = conn_parse2; conn_tmo_insert(conn, 10000); event_add_out(conn->ctx->evb,conn); return 0; }