示例#1
0
int kr_ogg_io_push (kr_ogg_io *ogg_io, int track, int64_t gpos,
 uint8_t *buffer, size_t sz) {

  if (ogg_io == NULL) return -2;

  int32_t bytes;
  int32_t ret;

  if (ogg_io->wrote_header == 0) {
    bytes = kr_ogg_generate_header (ogg_io->ogg);
    if (bytes < 1) return -1;
    memcpy(ogg_io->io->buf, ogg_io->ogg->hdr, ogg_io->ogg->hdr_sz);
    kr_io2_advance (ogg_io->io, ogg_io->ogg->hdr_sz);
    ret = kr_ogg_io_push_internal(ogg_io);
    if (ret != 0) return -1;
    ogg_io->wrote_header = 1;
    if (sz == 0) {
      return 0;
    }
  }

  bytes = kr_ogg_add_data (ogg_io->ogg, track, gpos, buffer, sz, ogg_io->io->buf);
  kr_io2_advance (ogg_io->io, bytes);
  ret = kr_ogg_io_push_internal(ogg_io);
  if (ret != 0) return -1;
  return 0;
}
示例#2
0
int32_t interweb_ws_shake(kr_web_client *client) {

  int32_t pos;
  char *buffer;
  char acceptkey[64];

  pos = 0;
  buffer = (char *)client->out->buf;
  memset(acceptkey, 0, sizeof(acceptkey));

  interweb_ws_pack_gen_accept_resp (acceptkey, client->ws.key);

  pos += sprintf (buffer + pos, "HTTP/1.1 101 Switching Protocols\r\n");
  pos += sprintf (buffer + pos, "Upgrade: websocket\r\n");
  pos += sprintf (buffer + pos, "Connection: Upgrade\r\n");
  pos += sprintf (buffer + pos, "Sec-WebSocket-Protocol: krad-ws-api\r\n");
  pos += sprintf (buffer + pos, "Sec-WebSocket-Accept: %s\r\n", acceptkey);
  pos += sprintf (buffer + pos, "\r\n");

  kr_io2_advance (client->out, pos);
  client->ws.shaked = 1;
  set_socket_nodelay(client->sd);
  interweb_ws_json_hello(client);
  interweb_ws_kr_client_connect(client);

  //printk("interweb_ws_shake happens");

  return 0;
}
示例#3
0
size_t kr_io2_read(kr_io2_t *io) {

  size_t ret;

  ret = read (io->fd, io->buf, io->space);
  if (ret > 0) {
    kr_io2_advance (io, ret);
  }
  return ret;
}
示例#4
0
void kr_io2_pack(kr_io2_t *io, void *buffer, size_t len) {

  if (len > io->space) {
    printk("io2_pack len: %zu buf len: %zu new len: %zu size: %zu space: %zu",
            len, io->len, len + io->len, io->size, io->space);
    printke("buffer overpack cancelling!");
    return;
  }
  memcpy (io->buf, buffer, len);
  kr_io2_advance (io, len);
}
示例#5
0
文件: krad_io2.c 项目: brooss/krcam
void kr_io2_pack (kr_io2_t *io, void *buffer, size_t len) {
    memcpy (io->buf, buffer, len);
    kr_io2_advance (io, len);
}