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; }
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; }
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; }
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); }
void kr_io2_pack (kr_io2_t *io, void *buffer, size_t len) { memcpy (io->buf, buffer, len); kr_io2_advance (io, len); }