Beispiel #1
0
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;
}
Beispiel #2
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;
}