Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void client_read_cb(uv_stream_t *tcp, ssize_t nread, const uv_buf_t *buf) {
- client_t *client = (client_t*)tcp->data;
- int ret;
- if(nread<0) {
- if(buf->base) {
- free(buf->base);
- }
- free(base);
- uv_close((uv_handle_t*)tcp, client_close_cb);
- return;
- } else if(nread == 0) {
- if(buf->base) {
- free(buf->base);
- }
- free(base);
- return;
- }
- if(nread + client->cur_buf > client->buf.len) {
- size_t s = ((nread + client->cur_buf)/client->buf.len)+1;
- s = s*client->buf.len;
- char *c = memcpy(malloc(s), client->buf.base, client->cur_buf);
- free(client->buf.base);
- client->buf = uv_buf_init(c, s);
- }
- memcpy(client->buf.base + client->cur_buf, buf->base, nread);
- client->cur_buf += nread;
- free(buf->base);
- free(buf);
- if(client->read_len < 0) {
- ret = mcp_decode_varint(&client->read_len, (uint8_t*)client->buf.base);
- if(ret<0) {
- client->read_len = -1;
- return;
- }
- client->cur_buf -= ret;
- memmove(client->buf.base, client->buf.base + ret, client->cur_buf);
- }
- if(client->cur_buf < client->read_len) {
- return;
- }
- int32_t packet_id;
- ret = mcp_decode_varint(&packet_id, (uint8_t*)client->buf.base);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement