[Pkg-telepathy-commits] [libnice] 127/265: agent: Replace nice_agent_build_io_stream() with nice_agent_get_io_stream()

Simon McVittie smcv at debian.org
Wed May 14 12:05:00 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository libnice.

commit 430e8db5076bef6e112d34fa07b51ed0a6ded49b
Author: Olivier Crête <olivier.crete at collabora.com>
Date:   Thu Jan 30 21:59:33 2014 -0500

    agent: Replace nice_agent_build_io_stream() with nice_agent_get_io_stream()
    
    Also made the GIOStream into a singleton, it always returns the same one.
    Also make it impossible to create a GIOStream for a non-existing stream/component
---
 agent/agent.c                 | 39 ++++++++++++++++---------------
 agent/agent.h                 | 15 ++++++------
 agent/component.c             |  2 ++
 agent/component.h             |  2 ++
 nice/libnice.sym              |  2 +-
 tests/test-build-io-stream.c  | 53 ++++++++-----------------------------------
 tests/test-io-stream-common.c |  2 +-
 7 files changed, 42 insertions(+), 73 deletions(-)

diff --git a/agent/agent.c b/agent/agent.c
index 0c69e33..7e6af0d 100644
--- a/agent/agent.c
+++ b/agent/agent.c
@@ -4465,33 +4465,32 @@ nice_agent_parse_remote_candidate_sdp (NiceAgent *agent, guint stream_id,
   return candidate;
 }
 
-/**
- * nice_agent_build_io_stream:
- * @agent: A reliable #NiceAgent
- * @stream_id: The ID of the agent’s stream to wrap
- * @component_id: The ID of the agent’s component to wrap
- *
- * Create a new #NiceIOStream wrapping the given stream/component from @agent,
- * which must be a reliable #NiceAgent. The given stream/component must be
- * created using nice_agent_add_stream() before any I/O operations are performed
- * on the #NiceIOStream.
- *
- * Note that if multiple I/O streams are created for a single stream/component,
- * only one of them may be used at any time.
- *
- * Returns: (transfer full): The new #NiceIOStream object
- *
- * Since: 0.1.5
- */
+
 NICEAPI_EXPORT GIOStream *
-nice_agent_build_io_stream (NiceAgent *agent, guint stream_id,
+nice_agent_get_io_stream (NiceAgent *agent, guint stream_id,
     guint component_id)
 {
+  GIOStream *iostream = NULL;
+  Component *component;
+
   g_return_val_if_fail (NICE_IS_AGENT (agent), NULL);
   g_return_val_if_fail (stream_id >= 1, NULL);
   g_return_val_if_fail (component_id >= 1, NULL);
 
   g_return_val_if_fail (agent->reliable, NULL);
 
-  return nice_io_stream_new (agent, stream_id, component_id);
+  agent_lock ();
+
+  if (!agent_find_component (agent, stream_id, component_id, NULL, &component))
+    goto done;
+
+  if (component->iostream == NULL)
+    component->iostream = nice_io_stream_new (agent, stream_id, component_id);
+
+  iostream = g_object_ref (component->iostream);
+
+ done:
+  agent_unlock ();
+
+  return iostream;
 }
diff --git a/agent/agent.h b/agent/agent.h
index bd10bec..f0acd14 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -60,7 +60,7 @@
  * Each stream can receive data in one of two ways: using
  * nice_agent_attach_recv() or nice_agent_recv_messages() (and the derived
  * #NiceInputStream and #NiceIOStream classes accessible using
- * nice_agent_build_io_stream()). nice_agent_attach_recv() is non-blocking: it
+ * nice_agent_get_io_stream()). nice_agent_attach_recv() is non-blocking: it
  * takes a user-provided callback function and attaches the stream’s socket to
  * the provided #GMainContext, invoking the callback in that context for every
  * packet received. nice_agent_recv_messages() instead blocks on receiving a
@@ -1373,25 +1373,26 @@ nice_agent_parse_remote_candidate_sdp (
     const gchar *sdp);
 
 /**
- * nice_agent_build_io_stream:
+ * nice_agent_get_io_stream:
  * @agent: A #NiceAgent
  * @stream_id: The ID of the stream to wrap
  * @component_id: The ID of the component to wrap
  *
- * Build a #GIOStream wrapper around the given stream and component in
+ * Gets a #GIOStream wrapper around the given stream and component in
  * @agent. The I/O stream will be valid for as long as @stream_id is valid.
  * The #GInputStream and #GOutputStream implement #GPollableInputStream and
  * #GPollableOutputStream.
  *
- * This function may only be called on reliable #NiceAgents. It is an error to
- * try and create an I/O stream wrapper for an unreliable stream.
+ * This function may only be called on reliable #NiceAgents. It is a
+ * programming error to try and create an I/O stream wrapper for an
+ * unreliable stream.
  *
- * Returns: (transfer full): A new #GIOStream.
+ * Returns: (transfer full): A #GIOStream.
  *
  * Since: 0.1.5
  */
 GIOStream *
-nice_agent_build_io_stream (
+nice_agent_get_io_stream (
     NiceAgent *agent,
     guint stream_id,
     guint component_id);
diff --git a/agent/component.c b/agent/component.c
index 9060a15..a2044f0 100644
--- a/agent/component.c
+++ b/agent/component.c
@@ -209,6 +209,8 @@ component_free (Component *cmp)
     g_slice_free (GOutputVector, vec);
   }
 
+  g_clear_object (&cmp->iostream);
+
   g_mutex_clear (&cmp->io_mutex);
 
   g_slice_free (Component, cmp);
diff --git a/agent/component.h b/agent/component.h
index d76de0f..5c01158 100644
--- a/agent/component.h
+++ b/agent/component.h
@@ -190,6 +190,8 @@ struct _Component
   gboolean tcp_readable;
   GCancellable *tcp_writable_cancellable;
 
+  GIOStream *iostream;
+
   guint min_port;
   guint max_port;
 
diff --git a/nice/libnice.sym b/nice/libnice.sym
index b1d0d15..d083d9e 100644
--- a/nice/libnice.sym
+++ b/nice/libnice.sym
@@ -16,7 +16,6 @@ nice_address_set_port
 nice_address_to_string
 nice_agent_add_local_address
 nice_agent_add_stream
-nice_agent_build_io_stream
 nice_agent_recv
 nice_agent_recv_messages
 nice_agent_recv_nonblocking
@@ -27,6 +26,7 @@ nice_agent_generate_local_candidate_sdp
 nice_agent_generate_local_sdp
 nice_agent_generate_local_stream_sdp
 nice_agent_get_default_local_candidate
+nice_agent_get_io_stream
 nice_agent_get_local_candidates
 nice_agent_get_local_credentials
 nice_agent_get_remote_candidates
diff --git a/tests/test-build-io-stream.c b/tests/test-build-io-stream.c
index f9e4536..312e80a 100644
--- a/tests/test-build-io-stream.c
+++ b/tests/test-build-io-stream.c
@@ -47,39 +47,18 @@ test_invalid_stream (NiceAddress *addr)
 {
   NiceAgent *agent;
   GIOStream *io_stream;
-  GInputStream *input_stream;
-  GOutputStream *output_stream;
-  uint8_t data[65536];
-  GError *error = NULL;
 
   agent = nice_agent_new_reliable (NULL, NICE_COMPATIBILITY_RFC5245);
   nice_agent_add_local_address (agent, addr);
 
   /* Try building an I/O stream for an invalid stream. All its operations should
    * return G_IO_ERROR_BROKEN_PIPE. */
-  io_stream = nice_agent_build_io_stream (agent, 5, 5);
-  g_assert (G_IS_IO_STREAM (io_stream));
-  g_assert (NICE_IS_IO_STREAM (io_stream));
-
-  input_stream = g_io_stream_get_input_stream (G_IO_STREAM (io_stream));
-  g_assert (
-     g_input_stream_read (input_stream, data, G_N_ELEMENTS (data),
-         NULL, &error) == -1);
-  g_assert_error (error, G_IO_ERROR, G_IO_ERROR_BROKEN_PIPE);
-  g_clear_error (&error);
-
-  output_stream = g_io_stream_get_output_stream (G_IO_STREAM (io_stream));
-  g_assert (
-     g_output_stream_write (output_stream, data, G_N_ELEMENTS (data),
-         NULL, &error) == -1);
-  g_assert_error (error, G_IO_ERROR, G_IO_ERROR_BROKEN_PIPE);
-  g_clear_error (&error);
-
-  g_object_unref (io_stream);
+  io_stream = nice_agent_get_io_stream (agent, 5, 5);
+  g_assert (io_stream == NULL);
 }
 
 static void
-test_io_stream_properties (NiceAddress *addr, gboolean add_stream_first)
+test_io_stream_properties (NiceAddress *addr)
 {
   NiceAgent *agent;
   guint stream_id;
@@ -90,26 +69,13 @@ test_io_stream_properties (NiceAddress *addr, gboolean add_stream_first)
   agent = nice_agent_new_reliable (NULL, NICE_COMPATIBILITY_RFC5245);
   nice_agent_add_local_address (agent, addr);
 
-  if (add_stream_first) {
-    /* Add a stream. */
-    stream_id = nice_agent_add_stream (agent, 1);
-  } else {
-    /* Guess at the stream ID, then check it later. This tests the case where
-     * the I/O stream is built before the stream is created in the NiceAgent
-     * (but no I/O operations are performed on it until after both have been
-     * created). */
-    stream_id = 1;
-  }
+  stream_id = nice_agent_add_stream (agent, 1);
 
   /* Try building an I/O stream around it. */
-  io_stream = nice_agent_build_io_stream (agent, stream_id, 1);
+  io_stream = nice_agent_get_io_stream (agent, stream_id, 1);
   g_assert (G_IS_IO_STREAM (io_stream));
   g_assert (NICE_IS_IO_STREAM (io_stream));
 
-  if (!add_stream_first) {
-    g_assert (stream_id == nice_agent_add_stream (agent, 1));
-  }
-
   /* Check various initial properties. */
   g_assert (!g_io_stream_is_closed (G_IO_STREAM (io_stream)));
   g_assert (!g_io_stream_has_pending (G_IO_STREAM (io_stream)));
@@ -163,7 +129,7 @@ test_pollable_properties (NiceAddress *addr)
   stream_id = nice_agent_add_stream (agent, 1);
 
   /* Try building an I/O stream around it. */
-  io_stream = nice_agent_build_io_stream (agent, stream_id, 1);
+  io_stream = nice_agent_get_io_stream (agent, stream_id, 1);
   g_assert (G_IS_IO_STREAM (io_stream));
   g_assert (NICE_IS_IO_STREAM (io_stream));
 
@@ -334,7 +300,7 @@ test_pollable_cancellation (NiceAddress *addr)
   stream_id = nice_agent_add_stream (agent, 1);
 
   /* Try building an I/O stream around it. */
-  io_stream = nice_agent_build_io_stream (agent, stream_id, 1);
+  io_stream = nice_agent_get_io_stream (agent, stream_id, 1);
   g_assert (G_IS_IO_STREAM (io_stream));
   g_assert (NICE_IS_IO_STREAM (io_stream));
 
@@ -410,7 +376,7 @@ test_zero_length_reads_writes (NiceAddress *addr)
   stream_id = nice_agent_add_stream (agent, 1);
 
   /* Try building an I/O stream around it. */
-  io_stream = nice_agent_build_io_stream (agent, stream_id, 1);
+  io_stream = nice_agent_get_io_stream (agent, stream_id, 1);
   g_assert (G_IS_IO_STREAM (io_stream));
   g_assert (NICE_IS_IO_STREAM (io_stream));
 
@@ -477,8 +443,7 @@ main (void)
   g_assert (nice_address_set_from_string (&addr, "127.0.0.1"));
 
   test_invalid_stream (&addr);
-  test_io_stream_properties (&addr, TRUE);
-  test_io_stream_properties (&addr, FALSE);
+  test_io_stream_properties (&addr);
   test_pollable_properties (&addr);
   test_pollable_cancellation (&addr);
   test_zero_length_reads_writes (&addr);
diff --git a/tests/test-io-stream-common.c b/tests/test-io-stream-common.c
index fe63db8..b74e9d9 100644
--- a/tests/test-io-stream-common.c
+++ b/tests/test-io-stream-common.c
@@ -292,7 +292,7 @@ run_agent (TestIOStreamThreadData *data, NiceAgent *agent)
 
   if (data->reliable) {
     data->io_stream =
-        G_IO_STREAM (nice_agent_build_io_stream (agent, stream_id, 1));
+        G_IO_STREAM (nice_agent_get_io_stream (agent, stream_id, 1));
     g_object_set_data (G_OBJECT (agent), "io-stream", data->io_stream);
   } else {
     data->io_stream = NULL;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/libnice.git



More information about the Pkg-telepathy-commits mailing list