[wfdmananger] Refactorying 'gst_wfd_src_create_socket'. 55/198255/8
authorHyunsoo Park <hance.park@samsung.com>
Wed, 23 Jan 2019 02:21:07 +0000 (11:21 +0900)
committerHyunsoo Park <hance.park@samsung.com>
Mon, 8 Jul 2019 07:29:56 +0000 (16:29 +0900)
Before this patch, socket apis are in mixed using.
I replaced winsocks to g socket apis.

Change-Id: Ib5bcf164599bfc8d576bcec78797c72b46d0fa0a
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
packaging/gst-plugins-tizen.spec
wfdmanager/wfdsrc/gstwfdsrc.c

index 3e35e0f..73ec72c 100644 (file)
@@ -5,7 +5,7 @@
 Name:       gst-plugins-tizen
 Version:    1.0.0
 Summary:    GStreamer tizen plugins (common)
-Release:    77
+Release:    78
 Group:      Multimedia/Framework
 Url:        http://gstreamer.freedesktop.org/
 License:    LGPL-2.1+
index 7ff2b46..a28e916 100644 (file)
@@ -79,6 +79,7 @@
 #include "config.h"
 #endif
 
+#include <gio/gio.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/ioctl.h>
@@ -111,8 +112,8 @@ enum
 #define DEFAULT_DO_RTCP          TRUE
 #define DEFAULT_LATENCY_MS       2000
 #define DEFAULT_UDP_BUFFER_SIZE  0x80000
-#define DEFAULT_UDP_TIMEOUT          10000000
-
+#define DEFAULT_UDP_TIMEOUT      10000000
+#define DEFAULT_TCP_BACKLOG          5
 
 /* object */
 static void gst_wfd_src_set_property (GObject * object, guint prop_id,
@@ -975,40 +976,61 @@ gst_wfd_src_switch_udp (GstWFDBaseSrc *bsrc,
 static GstRTSPResult
 gst_wfd_src_create_socket (GstWFDSrc *src, gint port)
 {
-  /* length of address structure */
-  struct sockaddr_in my_addr;
-  /* client's address */
-  gint sockoptval = 1;
-  int tcp_socket;
-
-  /* create a TCP/IP socket */
-  if ((tcp_socket = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
-    GST_ERROR ("cannot create socket");
-    return GST_RTSP_ERROR;
+  GSocket* tcp_socket = NULL;
+  GSocketFamily socket_family = G_SOCKET_FAMILY_IPV4;
+  GInetAddress *bind_addr = NULL;
+  GSocketAddress *bind_saddr = NULL;
+  GError *error = NULL;
+
+  tcp_socket = g_socket_new (socket_family, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_TCP, &error);
+  if (tcp_socket == NULL) {
+    GST_ERROR ("socket creation is failed [%s]", error->message);
+    goto failed;
   }
-  /* allow immediate reuse of the port */
-  setsockopt (tcp_socket, SOL_SOCKET, SO_REUSEADDR, &sockoptval, sizeof(int));
-  /* bind the socket to our source address */
-  memset ((char*)&my_addr, 0, sizeof(my_addr));
-  /* 0 out the structure */
-  my_addr.sin_family = AF_INET;
-  /* address family */
-  my_addr.sin_port = htons (port);
-  if (bind (tcp_socket, (struct sockaddr *)&my_addr, sizeof(my_addr)) < 0) {
-    GST_ERROR ("cannot bind socket");
-    close (tcp_socket);
-    return GST_RTSP_ERROR;
+
+  GST_DEBUG_OBJECT (src, "got socket %p", tcp_socket);
+
+  if (!g_socket_set_option (tcp_socket, SOL_SOCKET, SO_REUSEADDR, TRUE, &error)) {
+    GST_ERROR ("cannot set socket option. [%s]", error->message);
+    goto failed;
   }
-  /* set the socket for listening (queue backlog of 5) */
-  if (listen(tcp_socket, 5) < 0) {
-    close (tcp_socket);
-    GST_ERROR ("error while listening socket");
-    return GST_RTSP_ERROR;
+
+  bind_addr =  g_inet_address_new_any (socket_family);
+  if (!bind_addr){
+    GST_ERROR ("get bind_addr failed.");
+    goto failed;
   }
 
-  src->tcp = g_socket_new_from_fd(tcp_socket, NULL);
+  bind_saddr = g_inet_socket_address_new (bind_addr, port);
+  if (!bind_saddr){
+    GST_ERROR ("get bind_saddr failed.");
+    goto failed;
+  }
 
+  if (!g_socket_bind (tcp_socket, bind_saddr, TRUE, &error)){
+    GST_ERROR ("bind failed [%s]", error->message);
+    goto failed;
+  }
+
+  g_socket_set_listen_backlog (tcp_socket, DEFAULT_TCP_BACKLOG);
+  if (!g_socket_listen (tcp_socket, &error)){
+    GST_ERROR ("cannot listen socket [%s]", error->message);
+    goto failed;
+  }
+  src->tcp = tcp_socket;
+
+  g_object_unref (bind_addr);
+  g_object_unref (bind_saddr);
   return GST_RTSP_OK;
+
+failed:
+  {
+    g_object_unref (bind_addr);
+    g_object_unref (bind_saddr);
+    g_object_unref (tcp_socket);
+
+    return GST_RTSP_ERROR;
+  }
 }
 
 static GstRTSPResult