Lines Matching refs:ws

37 #include "ws.h"
311 /* incomplete ws frame head */
344 static void update_meta(struct websocket *ws,
350 ws->frame.age = frame_age;
351 ws->frame.flags = frame_flags;
352 ws->frame.offset = payload_offset;
353 ws->frame.len = cur_len;
354 ws->frame.bytesleft = (payload_len - payload_offset - cur_len);
381 struct websocket *ws;
395 struct websocket *ws = ctx->ws;
410 update_meta(ws, frame_age, frame_flags, payload_offset,
427 struct websocket *ws;
433 ws = data->conn->proto.ws;
434 if(!ws) {
452 pass_ctx.ws = ws;
455 result = ws_dec_pass(&ws->dec, data, &ctx->buf,
478 "ws-decode",
750 struct websocket *ws;
755 ws = data->conn->proto.ws;
756 if(!ws) {
757 ws = calloc(1, sizeof(*ws));
758 if(!ws)
760 data->conn->proto.ws = ws;
761 Curl_bufq_init2(&ws->recvbuf, WS_CHUNK_SIZE, WS_CHUNK_COUNT,
763 Curl_bufq_init2(&ws->sendbuf, WS_CHUNK_SIZE, WS_CHUNK_COUNT,
765 ws_dec_init(&ws->dec);
766 ws_enc_init(&ws->enc);
769 Curl_bufq_reset(&ws->recvbuf);
770 ws_dec_reset(&ws->dec);
771 ws_enc_reset(&ws->enc);
794 result = Curl_rand(data, (unsigned char *)&ws->enc.mask,
795 sizeof(ws->enc.mask));
799 ws->enc.mask[0], ws->enc.mask[1], ws->enc.mask[2], ws->enc.mask[3]);
818 nwritten = Curl_bufq_write(&ws->recvbuf, (const unsigned char *)mem,
913 struct websocket *ws;
931 ws = conn->proto.ws;
932 if(!ws) {
951 if(Curl_bufq_is_empty(&ws->recvbuf)) {
952 ssize_t n = Curl_bufq_slurp(&ws->recvbuf, nw_in_recv, data, &result);
962 Curl_bufq_len(&ws->recvbuf)));
965 result = ws_dec_pass(&ws->dec, data, &ws->recvbuf,
969 ws_dec_info(&ws->dec, data, "need more input");
988 update_meta(ws, ctx.frame_age, ctx.frame_flags, ctx.payload_offset,
990 *metap = &ws->frame;
991 *nread = ws->frame.len;
994 buflen, *nread, ws->frame.offset, ws->frame.bytesleft); */
998 static CURLcode ws_flush(struct Curl_easy *data, struct websocket *ws,
1001 if(!Curl_bufq_is_empty(&ws->sendbuf)) {
1007 while(Curl_bufq_peek(&ws->sendbuf, &out, &outlen)) {
1016 Curl_bufq_len(&ws->sendbuf));
1031 Curl_bufq_skip(&ws->sendbuf, (size_t)n);
1043 struct websocket *ws;
1058 if(!data->conn->proto.ws) {
1062 ws = data->conn->proto.ws;
1089 result = ws_flush(data, ws, FALSE);
1095 space = Curl_bufq_space(&ws->sendbuf);
1097 buflen, Curl_bufq_len(&ws->sendbuf), space));
1104 n = ws_enc_write_head(data, &ws->enc, flags, fragsize,
1105 &ws->sendbuf, &result);
1110 if((curl_off_t)buflen > ws->enc.payload_remain) {
1113 buflen, ws->enc.payload_remain);
1117 else if(!ws->enc.payload_remain) {
1118 n = ws_enc_write_head(data, &ws->enc, flags, (curl_off_t)buflen,
1119 &ws->sendbuf, &result);
1124 n = ws_enc_write_payload(&ws->enc, data,
1125 buffer, buflen, &ws->sendbuf, &result);
1130 return ws_flush(data, ws, TRUE);
1135 if(conn && conn->proto.ws) {
1136 Curl_bufq_free(&conn->proto.ws->recvbuf);
1137 Curl_bufq_free(&conn->proto.ws->sendbuf);
1138 Curl_safefree(conn->proto.ws);
1171 data->conn->proto.ws && !data->set.ws_raw_mode)
1172 return &data->conn->proto.ws->frame;