KmsSCTPResult
kms_sctp_connection_send (KmsSCTPConnection * conn, guint32 stream_id,
    guint32 timetolive, const KmsSCTPMessage * message,
    GCancellable * cancellable, GError ** err)
{
  gsize written = 0;
  gssize rret;

  g_return_val_if_fail (g_socket_is_connected (conn->socket), KMS_SCTP_EOF);

  /* write buffer data */
  while (written < message->used) {
    rret = sctp_socket_send (conn->socket, stream_id, timetolive,
        message->buf + written, message->used - written, cancellable, err);

    if (rret < 0)
      return KMS_SCTP_ERROR;

    written += rret;
  }

  return KMS_SCTP_OK;
}
static GstFlowReturn
gst_sctp_client_sink_render (GstBaseSink * bsink, GstBuffer * buf)
{
  GstSCTPClientSink *self = GST_SCTP_CLIENT_SINK (bsink);

  GST_OBJECT_LOCK (self);

  if (!self->priv->connected) {
    GST_OBJECT_UNLOCK (self);
    return GST_FLOW_NOT_LINKED;
  }

  GST_OBJECT_UNLOCK (self);

  /* Ignore buffers so far. Let's focus on events and caps negotiation  */
  return GST_FLOW_OK;
#if 0
  GstSCTPClientSink *self = GST_SCTP_CLIENT_SINK (bsink);
  GstMapInfo map;
  gsize written = 0;
  gssize rret;
  GError *err = NULL;

  g_return_val_if_fail (g_socket_is_connected (self->priv->socket),
      GST_FLOW_FLUSHING);

  gst_buffer_map (buf, &map, GST_MAP_READ);
  GST_LOG_OBJECT (self, "writing %" G_GSIZE_FORMAT " bytes for buffer data",
      map.size);

  /* write buffer data */
  while (written < map.size) {
    rret = sctp_socket_send (self->priv->socket, SCTP_DEFAULT_STREAM,
        self->priv->timetolive, (gchar *) map.data + written,
        map.size - written, self->priv->cancellable, &err);

    if (rret < 0)
      goto write_error;

    written += rret;
  }

  gst_buffer_unmap (buf, &map);

  return GST_FLOW_OK;

  /* ERRORS */
write_error:
  {
    GstFlowReturn ret;

    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
      ret = GST_FLOW_FLUSHING;
      GST_DEBUG_OBJECT (self, "Cancelled reading from socket");
    } else {
      GST_ELEMENT_ERROR (self, RESOURCE, WRITE,
          (("Error while sending data to \"%s:%d\"."), self->priv->host,
              self->priv->port), ("Only %" G_GSIZE_FORMAT " of %" G_GSIZE_FORMAT
              " bytes written: %s", written, map.size, err->message));
      ret = GST_FLOW_ERROR;
    }
    gst_buffer_unmap (buf, &map);
    g_clear_error (&err);
    return ret;
  }
#endif
}