From d8b2273583bbca86a52290e95dedc44afdc46f90 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 18 Nov 2005 11:57:30 +0000 Subject: [PATCH] gst/net/gstnetclientclock.c (gst_net_client_clock_class_init): Port goes all the way to MAXUINT16. Original commit message from CVS: 2005-11-18 Andy Wingo * gst/net/gstnetclientclock.c (gst_net_client_clock_class_init): Port goes all the way to MAXUINT16. * gst/net/gstnettimeprovider.c: Make the port range the same as for the kernel: 0 assigns, otherwise ports are less than MAXUINT16. * check/net/gstnettimeprovider.c: Adapt for 0 == kernel assigns port change. * check/net/gstnetclientclock.c (test_functioning): Add the start of another test. --- ChangeLog | 16 +++++++- check/net/gstnetclientclock.c | 74 ++++++++++++++--------------------- check/net/gstnettimeprovider.c | 4 +- gst/net/gstnetclientclock.c | 4 +- gst/net/gstnettimeprovider.c | 7 ++-- libs/gst/net/gstnetclientclock.c | 4 +- libs/gst/net/gstnettimeprovider.c | 7 ++-- tests/check/libs/gstnetclientclock.c | 74 ++++++++++++++--------------------- tests/check/libs/gstnettimeprovider.c | 4 +- 9 files changed, 89 insertions(+), 105 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8ac38ed..397d9f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2005-11-18 Andy Wingo + + * gst/net/gstnetclientclock.c (gst_net_client_clock_class_init): + Port goes all the way to MAXUINT16. + + * gst/net/gstnettimeprovider.c: Make the port range the same as + for the kernel: 0 assigns, otherwise ports are less than + MAXUINT16. + + * check/net/gstnettimeprovider.c: Adapt for 0 == kernel assigns + port change. + + * check/net/gstnetclientclock.c (test_functioning): Add the start + of another test. + 2005-11-18 Wim Taymans * gst/gstbin.c: (gst_bin_provide_clock_func), (gst_bin_add_func), @@ -9,7 +24,6 @@ Make sure we reselect a clock when we received a clock lost message. Keep a reference to the element that provided the clock. - 2005-11-18 Andy Wingo * gst/net/gstnetclientclock.c (gst_net_client_clock_new): Adjust diff --git a/check/net/gstnetclientclock.c b/check/net/gstnetclientclock.c index 005d02f..cb46a20 100644 --- a/check/net/gstnetclientclock.c +++ b/check/net/gstnetclientclock.c @@ -39,72 +39,56 @@ GST_START_TEST (test_instantiation) gst_object_unref (client); - ASSERT_OBJECT_REFCOUNT (local, "net time provider", 2); + ASSERT_OBJECT_REFCOUNT (local, "system clock", 2); gst_object_unref (local); } GST_END_TEST; -#if 0 GST_START_TEST (test_functioning) { GstNetTimeProvider *ntp; - GstNetTimePacket *packet; - GstClock *clock; - GstClockTime local; - struct sockaddr_in servaddr; - gint port = -1, sockfd, ret; - socklen_t len; - - clock = gst_system_clock_obtain (); - fail_unless (clock != NULL, "failed to get system clock"); - ntp = gst_net_time_provider_new (clock, "127.0.0.1", -1); - fail_unless (ntp != NULL, "failed to create net time provider"); - - g_object_get (ntp, "port", &port, NULL); - fail_unless (port > 0); + GstClock *client, *server; + GstClockTimeDiff offset; + GstClockTime servint; //, servtime, localtime; + gint port; + gdouble rate; - sockfd = socket (AF_INET, SOCK_DGRAM, 0); - fail_if (sockfd < 0, "socket failed"); + server = gst_system_clock_obtain (); + fail_unless (server != NULL, "failed to get system clock"); - memset (&servaddr, 0, sizeof (servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons (port); - inet_aton ("127.0.0.1", &servaddr.sin_addr); + /* move the clock ahead 1 minute */ + gst_clock_get_rate_offset (server, &rate, &offset); + offset += 60 * GST_SECOND; + gst_clock_set_rate_offset (server, rate, offset); + servint = gst_clock_get_internal_time (GST_CLOCK (server)); - packet = gst_net_time_packet_new (NULL); - fail_unless (packet != NULL, "failed to create packet"); + ntp = gst_net_time_provider_new (server, "127.0.0.1", 0); + fail_unless (ntp != NULL, "failed to create network time provider"); - packet->local_time = local = gst_clock_get_time (clock); - - len = sizeof (servaddr); - ret = gst_net_time_packet_send (packet, sockfd, - (struct sockaddr *) &servaddr, len); - - fail_unless (ret == GST_NET_TIME_PACKET_SIZE, "failed to send packet"); + g_object_get (ntp, "port", &port, NULL); + /* g_print ("server port: %d\n", port); */ - g_free (packet); + client = gst_net_client_clock_new (NULL, "127.0.0.1", port, GST_SECOND); + fail_unless (client != NULL, "failed to get network client clock"); - packet = gst_net_time_packet_receive (sockfd, (struct sockaddr *) &servaddr, - &len); + g_object_get (client, "port", &port, NULL); + /* g_print ("client connecting to server port %d\n", port); */ - fail_unless (packet != NULL, "failed to receive packet"); - fail_unless (packet->local_time == local, "local time is not the same"); - fail_unless (packet->remote_time > local, "remote time not after local time"); - fail_unless (packet->remote_time < gst_clock_get_time (clock), - "remote time in the future"); + /* one for gstreamer, one for ntp, one for us */ + ASSERT_OBJECT_REFCOUNT (server, "system clock", 3); + ASSERT_OBJECT_REFCOUNT (client, "network client clock", 1); - g_free (packet); + gst_object_unref (ntp); - close (sockfd); + ASSERT_OBJECT_REFCOUNT (server, "system clock", 2); - gst_object_unref (ntp); - gst_object_unref (clock); + gst_object_unref (client); + gst_object_unref (server); } GST_END_TEST; -#endif Suite * gst_net_client_clock_suite (void) @@ -114,7 +98,7 @@ gst_net_client_clock_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_instantiation); - /* tcase_add_test (tc_chain, test_functioning); */ + tcase_add_test (tc_chain, test_functioning); return s; } diff --git a/check/net/gstnettimeprovider.c b/check/net/gstnettimeprovider.c index e005008..e0008da 100644 --- a/check/net/gstnettimeprovider.c +++ b/check/net/gstnettimeprovider.c @@ -35,7 +35,7 @@ GST_START_TEST (test_refcounts) /* one for gstreamer, one for us */ ASSERT_OBJECT_REFCOUNT (clock, "system clock", 2); - ntp = gst_net_time_provider_new (clock, NULL, -1); + ntp = gst_net_time_provider_new (clock, NULL, 0); fail_unless (ntp != NULL, "failed to create net time provider"); /* one for ntp, one for gstreamer, one for us */ @@ -63,7 +63,7 @@ GST_START_TEST (test_functioning) clock = gst_system_clock_obtain (); fail_unless (clock != NULL, "failed to get system clock"); - ntp = gst_net_time_provider_new (clock, "127.0.0.1", -1); + ntp = gst_net_time_provider_new (clock, "127.0.0.1", 0); fail_unless (ntp != NULL, "failed to create net time provider"); g_object_get (ntp, "port", &port, NULL); diff --git a/gst/net/gstnetclientclock.c b/gst/net/gstnetclientclock.c index 64cb272..4017052 100644 --- a/gst/net/gstnetclientclock.c +++ b/gst/net/gstnetclientclock.c @@ -104,7 +104,7 @@ gst_net_client_clock_class_init (GstNetClientClockClass * klass) "as a dotted quad (x.x.x.x)", DEFAULT_ADDRESS, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT, g_param_spec_int ("port", "port", - "The port on which the remote server is listening", 0, 32768, + "The port on which the remote server is listening", 0, G_MAXUINT16, DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WINDOW_SIZE, g_param_spec_int ("window-size", "Window size", @@ -568,7 +568,7 @@ gst_net_client_clock_new (gchar * name, const gchar * remote_address, g_return_val_if_fail (remote_address != NULL, NULL); g_return_val_if_fail (remote_port > 0, NULL); - g_return_val_if_fail (remote_port < 32768, NULL); + g_return_val_if_fail (remote_port <= G_MAXUINT16, NULL); g_return_val_if_fail (base_time != GST_CLOCK_TIME_NONE, NULL); ret = g_object_new (GST_TYPE_NET_CLIENT_CLOCK, "address", remote_address, diff --git a/gst/net/gstnettimeprovider.c b/gst/net/gstnettimeprovider.c index 54a83b5..0258dd7 100644 --- a/gst/net/gstnettimeprovider.c +++ b/gst/net/gstnettimeprovider.c @@ -102,7 +102,7 @@ gst_net_time_provider_class_init (GstNetTimeProviderClass * klass) g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT, g_param_spec_int ("port", "port", - "The port to receive the packets from, -1=allocate", -1, 32768, + "The port to receive the packets from, 0=allocate", 0, G_MAXUINT16, DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_ADDRESS, g_param_spec_string ("address", "address", @@ -330,7 +330,7 @@ gst_net_time_provider_start (GstNetTimeProvider * self) memset (&my_addr, 0, sizeof (my_addr)); my_addr.sin_family = AF_INET; /* host byte order */ - my_addr.sin_port = htons (self->port); /* short, network byte order */ + my_addr.sin_port = htons ((gint16) self->port); /* short, network byte order */ my_addr.sin_addr.s_addr = INADDR_ANY; if (self->address) inet_aton (self->address, &my_addr.sin_addr); @@ -347,6 +347,7 @@ gst_net_time_provider_start (GstNetTimeProvider * self) port = ntohs (my_addr.sin_port); GST_DEBUG_OBJECT (self, "bound, on port %d", port); + if (port != self->port) { self->port = port; GST_DEBUG_OBJECT (self, "notifying %d", port); @@ -432,7 +433,7 @@ gst_net_time_provider_new (GstClock * clock, const gchar * address, gint port) gint iret; g_return_val_if_fail (clock && GST_IS_CLOCK (clock), NULL); - g_return_val_if_fail (port == -1 || port >= 0, NULL); + g_return_val_if_fail (port >= 0 && port <= G_MAXUINT16, NULL); ret = g_object_new (GST_TYPE_NET_TIME_PROVIDER, "clock", clock, "address", address, "port", port, NULL); diff --git a/libs/gst/net/gstnetclientclock.c b/libs/gst/net/gstnetclientclock.c index 64cb272..4017052 100644 --- a/libs/gst/net/gstnetclientclock.c +++ b/libs/gst/net/gstnetclientclock.c @@ -104,7 +104,7 @@ gst_net_client_clock_class_init (GstNetClientClockClass * klass) "as a dotted quad (x.x.x.x)", DEFAULT_ADDRESS, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT, g_param_spec_int ("port", "port", - "The port on which the remote server is listening", 0, 32768, + "The port on which the remote server is listening", 0, G_MAXUINT16, DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WINDOW_SIZE, g_param_spec_int ("window-size", "Window size", @@ -568,7 +568,7 @@ gst_net_client_clock_new (gchar * name, const gchar * remote_address, g_return_val_if_fail (remote_address != NULL, NULL); g_return_val_if_fail (remote_port > 0, NULL); - g_return_val_if_fail (remote_port < 32768, NULL); + g_return_val_if_fail (remote_port <= G_MAXUINT16, NULL); g_return_val_if_fail (base_time != GST_CLOCK_TIME_NONE, NULL); ret = g_object_new (GST_TYPE_NET_CLIENT_CLOCK, "address", remote_address, diff --git a/libs/gst/net/gstnettimeprovider.c b/libs/gst/net/gstnettimeprovider.c index 54a83b5..0258dd7 100644 --- a/libs/gst/net/gstnettimeprovider.c +++ b/libs/gst/net/gstnettimeprovider.c @@ -102,7 +102,7 @@ gst_net_time_provider_class_init (GstNetTimeProviderClass * klass) g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT, g_param_spec_int ("port", "port", - "The port to receive the packets from, -1=allocate", -1, 32768, + "The port to receive the packets from, 0=allocate", 0, G_MAXUINT16, DEFAULT_PORT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_ADDRESS, g_param_spec_string ("address", "address", @@ -330,7 +330,7 @@ gst_net_time_provider_start (GstNetTimeProvider * self) memset (&my_addr, 0, sizeof (my_addr)); my_addr.sin_family = AF_INET; /* host byte order */ - my_addr.sin_port = htons (self->port); /* short, network byte order */ + my_addr.sin_port = htons ((gint16) self->port); /* short, network byte order */ my_addr.sin_addr.s_addr = INADDR_ANY; if (self->address) inet_aton (self->address, &my_addr.sin_addr); @@ -347,6 +347,7 @@ gst_net_time_provider_start (GstNetTimeProvider * self) port = ntohs (my_addr.sin_port); GST_DEBUG_OBJECT (self, "bound, on port %d", port); + if (port != self->port) { self->port = port; GST_DEBUG_OBJECT (self, "notifying %d", port); @@ -432,7 +433,7 @@ gst_net_time_provider_new (GstClock * clock, const gchar * address, gint port) gint iret; g_return_val_if_fail (clock && GST_IS_CLOCK (clock), NULL); - g_return_val_if_fail (port == -1 || port >= 0, NULL); + g_return_val_if_fail (port >= 0 && port <= G_MAXUINT16, NULL); ret = g_object_new (GST_TYPE_NET_TIME_PROVIDER, "clock", clock, "address", address, "port", port, NULL); diff --git a/tests/check/libs/gstnetclientclock.c b/tests/check/libs/gstnetclientclock.c index 005d02f..cb46a20 100644 --- a/tests/check/libs/gstnetclientclock.c +++ b/tests/check/libs/gstnetclientclock.c @@ -39,72 +39,56 @@ GST_START_TEST (test_instantiation) gst_object_unref (client); - ASSERT_OBJECT_REFCOUNT (local, "net time provider", 2); + ASSERT_OBJECT_REFCOUNT (local, "system clock", 2); gst_object_unref (local); } GST_END_TEST; -#if 0 GST_START_TEST (test_functioning) { GstNetTimeProvider *ntp; - GstNetTimePacket *packet; - GstClock *clock; - GstClockTime local; - struct sockaddr_in servaddr; - gint port = -1, sockfd, ret; - socklen_t len; - - clock = gst_system_clock_obtain (); - fail_unless (clock != NULL, "failed to get system clock"); - ntp = gst_net_time_provider_new (clock, "127.0.0.1", -1); - fail_unless (ntp != NULL, "failed to create net time provider"); - - g_object_get (ntp, "port", &port, NULL); - fail_unless (port > 0); + GstClock *client, *server; + GstClockTimeDiff offset; + GstClockTime servint; //, servtime, localtime; + gint port; + gdouble rate; - sockfd = socket (AF_INET, SOCK_DGRAM, 0); - fail_if (sockfd < 0, "socket failed"); + server = gst_system_clock_obtain (); + fail_unless (server != NULL, "failed to get system clock"); - memset (&servaddr, 0, sizeof (servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons (port); - inet_aton ("127.0.0.1", &servaddr.sin_addr); + /* move the clock ahead 1 minute */ + gst_clock_get_rate_offset (server, &rate, &offset); + offset += 60 * GST_SECOND; + gst_clock_set_rate_offset (server, rate, offset); + servint = gst_clock_get_internal_time (GST_CLOCK (server)); - packet = gst_net_time_packet_new (NULL); - fail_unless (packet != NULL, "failed to create packet"); + ntp = gst_net_time_provider_new (server, "127.0.0.1", 0); + fail_unless (ntp != NULL, "failed to create network time provider"); - packet->local_time = local = gst_clock_get_time (clock); - - len = sizeof (servaddr); - ret = gst_net_time_packet_send (packet, sockfd, - (struct sockaddr *) &servaddr, len); - - fail_unless (ret == GST_NET_TIME_PACKET_SIZE, "failed to send packet"); + g_object_get (ntp, "port", &port, NULL); + /* g_print ("server port: %d\n", port); */ - g_free (packet); + client = gst_net_client_clock_new (NULL, "127.0.0.1", port, GST_SECOND); + fail_unless (client != NULL, "failed to get network client clock"); - packet = gst_net_time_packet_receive (sockfd, (struct sockaddr *) &servaddr, - &len); + g_object_get (client, "port", &port, NULL); + /* g_print ("client connecting to server port %d\n", port); */ - fail_unless (packet != NULL, "failed to receive packet"); - fail_unless (packet->local_time == local, "local time is not the same"); - fail_unless (packet->remote_time > local, "remote time not after local time"); - fail_unless (packet->remote_time < gst_clock_get_time (clock), - "remote time in the future"); + /* one for gstreamer, one for ntp, one for us */ + ASSERT_OBJECT_REFCOUNT (server, "system clock", 3); + ASSERT_OBJECT_REFCOUNT (client, "network client clock", 1); - g_free (packet); + gst_object_unref (ntp); - close (sockfd); + ASSERT_OBJECT_REFCOUNT (server, "system clock", 2); - gst_object_unref (ntp); - gst_object_unref (clock); + gst_object_unref (client); + gst_object_unref (server); } GST_END_TEST; -#endif Suite * gst_net_client_clock_suite (void) @@ -114,7 +98,7 @@ gst_net_client_clock_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_instantiation); - /* tcase_add_test (tc_chain, test_functioning); */ + tcase_add_test (tc_chain, test_functioning); return s; } diff --git a/tests/check/libs/gstnettimeprovider.c b/tests/check/libs/gstnettimeprovider.c index e005008..e0008da 100644 --- a/tests/check/libs/gstnettimeprovider.c +++ b/tests/check/libs/gstnettimeprovider.c @@ -35,7 +35,7 @@ GST_START_TEST (test_refcounts) /* one for gstreamer, one for us */ ASSERT_OBJECT_REFCOUNT (clock, "system clock", 2); - ntp = gst_net_time_provider_new (clock, NULL, -1); + ntp = gst_net_time_provider_new (clock, NULL, 0); fail_unless (ntp != NULL, "failed to create net time provider"); /* one for ntp, one for gstreamer, one for us */ @@ -63,7 +63,7 @@ GST_START_TEST (test_functioning) clock = gst_system_clock_obtain (); fail_unless (clock != NULL, "failed to get system clock"); - ntp = gst_net_time_provider_new (clock, "127.0.0.1", -1); + ntp = gst_net_time_provider_new (clock, "127.0.0.1", 0); fail_unless (ntp != NULL, "failed to create net time provider"); g_object_get (ntp, "port", &port, NULL); -- 2.7.4