int wslay_event_queue_msg_ex(wslay_event_context_ptr ctx, const struct wslay_event_msg *arg, uint8_t rsv) { int r; struct wslay_event_omsg *omsg; if (!wslay_event_is_msg_queueable(ctx)) { return WSLAY_ERR_NO_MORE_MSG; } /* RSV1 is not allowed for control frames */ if ((wslay_is_ctrl_frame(arg->opcode) && (arg->msg_length > 125 || wslay_get_rsv1(rsv))) || !wslay_event_verify_rsv_bits(ctx, rsv)) { return WSLAY_ERR_INVALID_ARGUMENT; } if ((r = wslay_event_omsg_non_fragmented_init(&omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) { return r; } if (wslay_is_ctrl_frame(arg->opcode)) { if ((r = wslay_queue_push(ctx->send_ctrl_queue, omsg)) != 0) { return r; } } else { if ((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) { return r; } } ++ctx->queued_msg_count; ctx->queued_msg_length += arg->msg_length; return 0; }
int wslay_event_queue_msg(wslay_event_context_ptr ctx, const struct wslay_event_msg *arg) { int r; struct wslay_event_omsg *omsg; if(!wslay_event_is_msg_queueable(ctx)) { return WSLAY_ERR_NO_MORE_MSG; } if(wslay_is_ctrl_frame(arg->opcode) && arg->msg_length > 125) { return WSLAY_ERR_INVALID_ARGUMENT; } if((r = wslay_event_omsg_non_fragmented_init (&omsg, arg->opcode, arg->msg, arg->msg_length)) != 0) { return r; } if(wslay_is_ctrl_frame(arg->opcode)) { if((r = wslay_queue_push(ctx->send_ctrl_queue, omsg)) != 0) { return r; } } else { if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) { return r; } } ++ctx->queued_msg_count; ctx->queued_msg_length += arg->msg_length; return 0; }