static void cockpit_channel_real_prepare (CockpitChannel *channel) { CockpitChannel *self = COCKPIT_CHANNEL (channel); JsonObject *options; const gchar *binary; options = cockpit_channel_get_options (self); if (!cockpit_channel_ensure_capable (self, options)) return; if (G_OBJECT_TYPE (channel) == COCKPIT_TYPE_CHANNEL) { cockpit_channel_close (channel, "not-supported"); return; } if (!cockpit_json_get_string (options, "binary", NULL, &binary)) { cockpit_channel_fail (self, "protocol-error", "channel has invalid \"binary\" option"); } else if (binary != NULL) { self->priv->binary_ok = TRUE; if (!g_str_equal (binary, "raw")) { cockpit_channel_fail (self, "protocol-error", "channel has invalid \"binary\" option: %s", binary); } } }
static void cockpit_channel_real_prepare (CockpitChannel *channel) { CockpitChannel *self = COCKPIT_CHANNEL (channel); JsonObject *options; const gchar *binary; const gchar *payload; options = cockpit_channel_get_options (self); if (!cockpit_channel_ensure_capable (self, options)) return; if (G_OBJECT_TYPE (channel) == COCKPIT_TYPE_CHANNEL) { if (!cockpit_json_get_string (options, "payload", NULL, &payload)) payload = NULL; if (payload) { g_warning ("bridge doesn't support payloads of type: %s", payload); cockpit_channel_close (channel, "not-supported"); } else { g_warning ("no payload type present in request to open channel"); cockpit_channel_close (channel, "protocol-error"); } return; } if (!cockpit_json_get_string (options, "binary", NULL, &binary)) { g_warning ("%s: channel has invalid \"binary\" option", self->priv->id); cockpit_channel_close (self, "protocol-error"); } else if (binary != NULL) { self->priv->binary_ok = TRUE; if (g_str_equal (binary, "base64")) { self->priv->base64_encoding = TRUE; } else if (!g_str_equal (binary, "raw")) { g_warning ("%s: channel has invalid \"binary\" option: %s", self->priv->id, binary); cockpit_channel_close (self, "protocol-error"); } } }
static void cockpit_channel_real_prepare (CockpitChannel *channel) { CockpitChannel *self = COCKPIT_CHANNEL (channel); JsonObject *options; const gchar *binary; options = cockpit_channel_get_options (self); if (!cockpit_channel_ensure_capable (self, options)) return; if (G_OBJECT_TYPE (channel) == COCKPIT_TYPE_CHANNEL) { cockpit_channel_close (channel, "not-supported"); return; } if (!cockpit_json_get_string (options, "binary", NULL, &binary)) { cockpit_channel_fail (self, "protocol-error", "channel has invalid \"binary\" option"); } else if (binary != NULL) { self->priv->binary_ok = TRUE; if (!g_str_equal (binary, "raw")) { cockpit_channel_fail (self, "protocol-error", "channel has invalid \"binary\" option: %s", binary); } } /* * The default here, can change from FALSE to TRUE over time once we assume that all * cockpit-ws participants have been upgraded sufficiently. The default when we're * on the channel creation side is to handle flow control. */ if (!cockpit_json_get_bool (options, "flow-control", FALSE, &self->priv->flow_control)) { cockpit_channel_fail (self, "protocol-error", "channel has invalid \"flow-control\" option"); } }