Advertisement
NickG

Untitled

Feb 25th, 2014
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.16 KB | None | 0 0
  1. void client_read_cb(uv_stream_t *tcp, ssize_t nread, const uv_buf_t *buf) {
  2.     client_t *client = (client_t*)tcp->data;
  3.     int ret;
  4.  
  5.     if(nread<0) {
  6.         if(buf->base) {
  7.             free(buf->base);
  8.         }
  9.         free(base);
  10.         uv_close((uv_handle_t*)tcp, client_close_cb);
  11.         return;
  12.     } else if(nread == 0) {
  13.         if(buf->base) {
  14.             free(buf->base);
  15.         }
  16.         free(base);
  17.         return;
  18.     }
  19.  
  20.     if(nread + client->cur_buf > client->buf.len) {
  21.         size_t s = ((nread + client->cur_buf)/client->buf.len)+1;
  22.         s = s*client->buf.len;
  23.         char *c = memcpy(malloc(s), client->buf.base, client->cur_buf);
  24.         free(client->buf.base);
  25.         client->buf = uv_buf_init(c, s);
  26.     }
  27.     memcpy(client->buf.base + client->cur_buf, buf->base, nread);
  28.     client->cur_buf += nread;
  29.     free(buf->base);
  30.     free(buf);
  31.  
  32.     if(client->read_len < 0) {
  33.         ret = mcp_decode_varint(&client->read_len, (uint8_t*)client->buf.base);
  34.         if(ret<0) {
  35.             client->read_len = -1;
  36.             return;
  37.         }
  38.         client->cur_buf -= ret;
  39.         memmove(client->buf.base, client->buf.base + ret, client->cur_buf);
  40.     }
  41.     if(client->cur_buf < client->read_len) {
  42.         return;
  43.     }
  44.  
  45.     int32_t packet_id;
  46.     ret = mcp_decode_varint(&packet_id, (uint8_t*)client->buf.base);
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement