diff -Nru gst-plugins-base-0.10.32/gst/tcp/gsttcpserversrc.c src/gst/tcp/gsttcpserversrc.c
--- gst-plugins-base-0.10.32/gst/tcp/gsttcpserversrc.c	2010-04-09 10:13:12.000000000 +0200
+++ src/gst/tcp/gsttcpserversrc.c	2012-02-20 11:23:32.479070181 +0100
@@ -68,8 +68,23 @@
 };
 
 
-GST_BOILERPLATE (GstTCPServerSrc, gst_tcp_server_src, GstPushSrc,
-    GST_TYPE_PUSH_SRC);
+static void gst_tcp_server_src_uri_handler_init (gpointer g_iface, gpointer iface_data);
+
+static void
+_do_init (GType tcp_server_src_type)
+{
+  static const GInterfaceInfo urihandler_info = {
+    gst_tcp_server_src_uri_handler_init,
+    NULL,
+    NULL
+  };
+
+  g_type_add_interface_static (tcp_server_src_type, GST_TYPE_URI_HANDLER,
+      &urihandler_info);
+}
+
+GST_BOILERPLATE_FULL (GstTCPServerSrc, gst_tcp_server_src, GstPushSrc,
+    GST_TYPE_PUSH_SRC, _do_init);
 
 
 static void gst_tcp_server_src_finalize (GObject * gobject);
@@ -481,3 +496,73 @@
 
   return TRUE;
 }
+
+/*** GSTURIHANDLER INTERFACE *************************************************/
+
+static GstURIType
+gst_tcp_server_src_uri_get_type (void)
+{
+  return GST_URI_SRC;
+}
+
+static gchar **
+gst_tcp_server_src_uri_get_protocols (void)
+{
+  static gchar *protocols[] = { (char *) "tcp", NULL };
+
+  return protocols;
+}
+
+static gboolean
+gst_tcp_server_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+{
+  gchar *protocol;
+  GstTCPServerSrc *src = GST_TCP_SERVER_SRC (handler);
+  gchar *p;
+  gchar *host;
+
+  GST_INFO_OBJECT (src, "checking uri %s", uri);
+
+  protocol = gst_uri_get_protocol (uri);
+  if (strcmp (protocol, "tcp") != 0) {
+    g_free (protocol);
+    return FALSE;
+  }
+  g_free (protocol);
+
+  host = gst_uri_get_location (uri);
+  p = strchr (host, '/');
+  if (p != NULL)
+    *p = '\0';
+
+  p = strchr (host, ':');
+  if (p != NULL) {
+    gint port;
+
+    *p++ = '\0';
+    port = atoi(p);
+
+    if (port >= 0)
+      src->server_port = port;
+  }
+
+  if (!*host || !strcmp(host, "@")) {
+    g_free(host);
+    host = NULL;
+  }
+
+  g_free(src->host);
+  src->host = host;
+
+  return TRUE;
+}
+
+static void
+gst_tcp_server_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_tcp_server_src_uri_get_type;
+  iface->get_protocols = gst_tcp_server_src_uri_get_protocols;
+  iface->set_uri = gst_tcp_server_src_uri_set_uri;
+}
