コード例 #1
0
static void
g_tls_output_stream_gnutls_write_async (GOutputStream        *stream,
					const void           *buffer,
					gsize                 count,
					gint                  io_priority,
					GCancellable         *cancellable,
					GAsyncReadyCallback   callback,
					gpointer              user_data)
{
  GTlsOutputStreamGnutls *tls_stream = G_TLS_OUTPUT_STREAM_GNUTLS (stream);
  GSimpleAsyncResult *simple;
  gssize nwrote;
  GError *error = NULL;
  GSource *source;

  g_return_if_fail (tls_stream->priv->conn != NULL);

  simple = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
				      g_tls_output_stream_gnutls_write_async);
  nwrote = g_tls_connection_gnutls_write (tls_stream->priv->conn,
					  buffer, count, FALSE,
					  cancellable, &error);

  if (nwrote >= 0 ||
      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
    {
      if (error)
	{
	  g_simple_async_result_set_from_error (simple, error);
	  g_error_free (error);
	}
      else
	g_simple_async_result_set_op_res_gssize (simple, nwrote);
      g_simple_async_result_complete_in_idle (simple);
      g_object_unref (simple);
      return;
    }

  if (error)
    g_error_free (error);

  tls_stream->priv->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
  tls_stream->priv->buffer = buffer;
  tls_stream->priv->count = count;

  source = g_tls_connection_gnutls_create_source (tls_stream->priv->conn,
						  G_IO_OUT,
						  tls_stream->priv->cancellable);
  g_source_set_callback (source,
			 (GSourceFunc) g_tls_output_stream_gnutls_write_ready,
			 simple, NULL);
  g_source_attach (source, g_main_context_get_thread_default ());
  g_source_unref (source);
}
コード例 #2
0
static GSource *
g_tls_input_stream_gnutls_pollable_create_source (GPollableInputStream *
    pollable, GCancellable * cancellable)
{
  KmsGTlsInputStreamGnutls *tls_stream =
      G_KMS_TLS_INPUT_STREAM_GNUTLS (pollable);

  g_return_val_if_fail (tls_stream->priv->conn != NULL, NULL);

  return g_tls_connection_gnutls_create_source (tls_stream->priv->conn,
      G_IO_IN, cancellable);
}
コード例 #3
0
static GSource *
g_tls_output_stream_gnutls_pollable_create_source (GPollableOutputStream *pollable,
						   GCancellable         *cancellable)
{
  GTlsOutputStreamGnutls *tls_stream = G_TLS_OUTPUT_STREAM_GNUTLS (pollable);

  g_return_val_if_fail (tls_stream->priv->conn != NULL, NULL);

  return g_tls_connection_gnutls_create_source (tls_stream->priv->conn,
						G_IO_OUT,
						cancellable);
}