#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "vncserv.h"
#include "proto.h"
#include "vncbuffer.h"

#define TEMPBUFFERSIZE  4096

static char buffer[TEMPBUFFERSIZE];
static int used = 0;

void vncbuffer_reset() {
  used = 0;
}

void vncbuffer_write(void *in, unsigned int n, vncserv *serv) {

  char *buf;

  buf = in;
  if (used + n > TEMPBUFFERSIZE) {
    vncbuffer_flush(serv);
    while (n >= TEMPBUFFERSIZE) {
      serv->io.write(serv, buf, TEMPBUFFERSIZE, serv->meta);
      n -= TEMPBUFFERSIZE;
      buf += TEMPBUFFERSIZE;
    }
  }
  if (n > 0) {
    memcpy(buffer+used, buf, n);
    used += n;
  }
}

void vncbuffer_flush(vncserv *serv) {
 if (used > 0)   serv->io.write(serv, buffer, used, serv->meta);
 used = 0;
}
