static struct uwsgi_buffer *uwsgi_websocket_message(struct wsgi_request *wsgi_req, char *msg, size_t len, uint8_t opcode) { struct uwsgi_buffer *ub = wsgi_req->websocket_send_buf; if (!ub) { wsgi_req->websocket_send_buf = uwsgi_buffer_new(10 + len); ub = wsgi_req->websocket_send_buf; } else { // reset the buffer ub->pos = 0; } if (uwsgi_buffer_u8(ub, opcode)) goto error; if (len < 126) { if (uwsgi_buffer_u8(ub, len)) goto error; } else if (len <= (uint16_t) 0xffff) { if (uwsgi_buffer_u8(ub, 126)) goto error; if (uwsgi_buffer_u16be(ub, len)) goto error; } else { if (uwsgi_buffer_u8(ub, 127)) goto error; if (uwsgi_buffer_u64be(ub, len)) goto error; } if (uwsgi_buffer_append(ub, msg, len)) goto error; return ub; error: return NULL; }
static struct uwsgi_buffer *uwsgi_websocket_message(char *msg, size_t len) { struct uwsgi_buffer *ub = uwsgi_buffer_new(10 + len); if (uwsgi_buffer_u8(ub, 0x81)) goto error; if (len < 126) { if (uwsgi_buffer_u8(ub, len)) goto error; } else if (len <= (uint16_t) 0xffff) { if (uwsgi_buffer_u8(ub, 126)) goto error; if (uwsgi_buffer_u16be(ub, len)) goto error; } else { if (uwsgi_buffer_u8(ub, 127)) goto error; if (uwsgi_buffer_u64be(ub, len)) goto error; } if (uwsgi_buffer_append(ub, msg, len)) goto error; return ub; error: uwsgi_buffer_destroy(ub); return NULL; }