run dos2unix to get rid of ^M
[platform/core/multimedia/libmm-wfd.git] / src / mm_wfd_proxy.c
index a827509..23a76d3 100755 (executable)
  * limitations under the License.
  *
  */
-\r
-#include "mm_wfd_proxy.h"\r
-#include <gst/gst.h>\r
-#include <fcntl.h>\r
-\r
-#include <dbus/dbus.h>\r
-#include <dbus/dbus-shared.h>\r
-#include <dbus/dbus-glib-lowlevel.h>\r
-\r
-#include "wfd-stub.h"\r
-#include <dlog.h>\r
-\r
-#define DEST_HOST "127.0.0.1"\r
-#define WFD_PROXY_COMM_PORT 8888\r
-#define WFD_TIME_SPAN_100_MILLISECOND (100 * G_TIME_SPAN_MILLISECOND)\r
+
+#include "mm_wfd_proxy.h"
+#include <gst/gst.h>
+#include <fcntl.h>
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-shared.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "wfd-stub.h"
+#include <dlog.h>
+
+#define DEST_HOST "127.0.0.1"
+#define WFD_PROXY_COMM_PORT 8888
+#define WFD_TIME_SPAN_100_MILLISECOND (100 * G_TIME_SPAN_MILLISECOND)
 #define LIMIT_TIME 50 /* 5 sec */
-\r
-/*WFD_PROXY_SET_IP_PORT\r
-IP 192.168.16.1\r
-PORT 2022\r
-*/\r
-/* REPLAY WFD_PROXY_SET_IP_PORT\r
-MM_ERROR_NONE\r
-*/\r
-// WFD_PROXY_START\r
-/* REPLAY WFD_PROXY_START\r
-MM_ERROR_NONE\r
-*/\r
-// WFD_PROXY_STOP\r
-/* REPLAY WFD_PROXY_STOP\r
-MM_ERROR_NONE\r
-*/\r
-// WFD_PROXY_PAUSE\r
-/* REPLAY WFD_PROXY_PAUSE\r
-MM_ERROR_NONE\r
-*/\r
-// WFD_PROXY_RESUME\r
-/* REPLAY WFD_PROXY_RESUME\r
-MM_ERROR_NONE\r
-*/\r
-//WFD_PROXY_DESTROY\r
-/* REPLAY WFD_PROXY_DESTROY\r
-MM_ERROR_NONE\r
-*/\r
-// WFD_PROXY_STATE_QUERY\r
-/* REPLAY WFD_PROXY_STATE_QUERY\r
-MM_WFD_STATE_NULL\r
-MM_WFD_STATE_READY\r
-MM_WFD_STATE_PLAYING\r
-MM_WFD_STATE_NONE\r
-*/\r
-\r
-/* NOTIFY\r
-MM_WFD_STATE_READY\r
-WFDSRC_ERROR_UNKNOWN\r
-*/\r
-\r
-/**\r
- * Data structure to hold call back info for proxy to send asynchronous\r
- * info received from WFD daemon\r
- */\r
-typedef struct{\r
-  WfdSrcProxyStateError_cb applicationCb;\r
-  void *user_data;\r
-  GCond *cond;\r
-  GMutex *cond_lock;\r
-  char outbuff[512];\r
-  char inbuff[512];\r
-  int sockfd;\r
-  gboolean quitloop;\r
-  GThread *thread;\r
-  gboolean response;\r
-} WfdSrcProxy;\r
-\r
-static int wfd_proxy_initialize(WfdSrcProxy *wfd);\r
-static WfdSrcProxyState wfd_proxy_message_parse_state (const char * data, guint size);\r
-static WfdSrcProxyRet wfd_proxy_message_parse_status (const char * data, guint size);\r
-static gboolean is_cmd_valid_in_current_state(WfdSrcProxyState aState, WfdSrcProxyCmd acmd);\r
-static gboolean proxy_write (WfdSrcProxy *wfd, char *wbuf);\r
-WfdSrcProxyState convert_string_to_state(gchar *buffer);\r
-WfdSrcProxyRet convert_string_to_status(gchar *buffer);\r
-\r
-WfdSrcProxyRet WfdSrcProxyInit(\r
-    MMHandleType *pHandle,\r
-    WfdSrcProxyStateError_cb *appCb,\r
-    void *user_data )\r
-{\r
-  WfdSrcProxy *temp = NULL;\r
-\r
-  debug_fenter();\r
-  debug_log("mm_wfd_proxy_create \n");\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_INVALID_ARGUMENT);\r
+
+/*WFD_PROXY_SET_IP_PORT
+IP 192.168.16.1
+PORT 2022
+*/
+/* REPLAY WFD_PROXY_SET_IP_PORT
+MM_ERROR_NONE
+*/
+// WFD_PROXY_START
+/* REPLAY WFD_PROXY_START
+MM_ERROR_NONE
+*/
+// WFD_PROXY_STOP
+/* REPLAY WFD_PROXY_STOP
+MM_ERROR_NONE
+*/
+// WFD_PROXY_PAUSE
+/* REPLAY WFD_PROXY_PAUSE
+MM_ERROR_NONE
+*/
+// WFD_PROXY_RESUME
+/* REPLAY WFD_PROXY_RESUME
+MM_ERROR_NONE
+*/
+//WFD_PROXY_DESTROY
+/* REPLAY WFD_PROXY_DESTROY
+MM_ERROR_NONE
+*/
+// WFD_PROXY_STATE_QUERY
+/* REPLAY WFD_PROXY_STATE_QUERY
+MM_WFD_STATE_NULL
+MM_WFD_STATE_READY
+MM_WFD_STATE_PLAYING
+MM_WFD_STATE_NONE
+*/
+
+/* NOTIFY
+MM_WFD_STATE_READY
+WFDSRC_ERROR_UNKNOWN
+*/
+
+/**
+ * Data structure to hold call back info for proxy to send asynchronous
+ * info received from WFD daemon
+ */
+typedef struct{
+  WfdSrcProxyStateError_cb applicationCb;
+  void *user_data;
+  GCond *cond;
+  GMutex *cond_lock;
+  char outbuff[512];
+  char inbuff[512];
+  int sockfd;
+  gboolean quitloop;
+  GThread *thread;
+  gboolean response;
+} WfdSrcProxy;
+
+static int wfd_proxy_initialize(WfdSrcProxy *wfd);
+static WfdSrcProxyState wfd_proxy_message_parse_state (const char * data, guint size);
+static WfdSrcProxyRet wfd_proxy_message_parse_status (const char * data, guint size);
+static gboolean is_cmd_valid_in_current_state(WfdSrcProxyState aState, WfdSrcProxyCmd acmd);
+static gboolean proxy_write (WfdSrcProxy *wfd, char *wbuf);
+WfdSrcProxyState convert_string_to_state(gchar *buffer);
+WfdSrcProxyRet convert_string_to_status(gchar *buffer);
+
+WfdSrcProxyRet WfdSrcProxyInit(
+    MMHandleType *pHandle,
+    WfdSrcProxyStateError_cb *appCb,
+    void *user_data )
+{
+  WfdSrcProxy *temp = NULL;
+
+  debug_fenter();
+  debug_log("mm_wfd_proxy_create \n");
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_INVALID_ARGUMENT);
   int ret = 0;
-  temp = g_malloc(sizeof(WfdSrcProxy));\r
-  if(!temp)\r
-  {\r
-    debug_log("WfdSrcProxy malloc failed. out of memory");\r
-    return WFDSRC_ERROR_WFD_NO_FREE_SPACE;\r
-  }\r
-  temp->cond = g_cond_new ();\r
-  temp->cond_lock = g_mutex_new ();\r
-  temp->applicationCb = appCb;\r
-  temp->user_data = user_data;\r
-  temp->quitloop = FALSE;\r
-  temp->response = FALSE;\r
+  temp = g_malloc(sizeof(WfdSrcProxy));
+  if(!temp)
+  {
+    debug_log("WfdSrcProxy malloc failed. out of memory");
+    return WFDSRC_ERROR_WFD_NO_FREE_SPACE;
+  }
+  temp->cond = g_cond_new ();
+  temp->cond_lock = g_mutex_new ();
+  temp->applicationCb = appCb;
+  temp->user_data = user_data;
+  temp->quitloop = FALSE;
+  temp->response = FALSE;
   ret = wfd_proxy_initialize(temp);
   if(ret < 0)
     return WFDSRC_ERROR_WFD_NOT_INITIALIZED;
-  *pHandle = (MMHandleType)temp;\r
-  debug_fleave ();\r
-  return WFDSRC_ERROR_NONE;\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyDeInit(MMHandleType pHandle )\r
-{\r
-  WfdSrcProxy *lwfd;\r
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lwfd->quitloop = TRUE;\r
-  debug_log("client close socket\n");\r
-  shutdown (lwfd->sockfd, SHUT_RDWR);\r
-  g_thread_join(lwfd->thread);\r
-  if(lwfd->cond_lock) g_mutex_free(lwfd->cond_lock);\r
-  if(lwfd->cond) g_cond_free(lwfd->cond);\r
-  debug_log("client after thread join\n");\r
-  g_free(lwfd);\r
-  debug_leave();\r
-  return WFDSRC_ERROR_NONE;\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxySetIPAddrAndPort(\r
-     MMHandleType pHandle,\r
-     char *wfdsrcIP,\r
-     char *wfdsrcPort)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+  *pHandle = (MMHandleType)temp;
+  debug_fleave ();
+  return WFDSRC_ERROR_NONE;
+}
+
+WfdSrcProxyRet WfdSrcProxyDeInit(MMHandleType pHandle )
+{
+  WfdSrcProxy *lwfd;
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lwfd->quitloop = TRUE;
+  debug_log("client close socket\n");
+  shutdown (lwfd->sockfd, SHUT_RDWR);
+  g_thread_join(lwfd->thread);
+  if(lwfd->cond_lock) g_mutex_free(lwfd->cond_lock);
+  if(lwfd->cond) g_cond_free(lwfd->cond);
+  debug_log("client after thread join\n");
+  g_free(lwfd);
+  debug_leave();
+  return WFDSRC_ERROR_NONE;
+}
+
+WfdSrcProxyRet WfdSrcProxySetIPAddrAndPort(
+     MMHandleType pHandle,
+     char *wfdsrcIP,
+     char *wfdsrcPort)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  return_val_if_fail(wfdsrcIP, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  return_val_if_fail(wfdsrcPort, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_SET_IP_PORT");\r
-  g_string_append_printf (proxy_cmd, "\r\nIP ");\r
-  g_string_append_printf (proxy_cmd, wfdsrcIP);\r
-  g_string_append_printf (proxy_cmd, "\r\nPORT ");\r
-  g_string_append_printf (proxy_cmd, wfdsrcPort);\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxySetIPAddrAndPort command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  return_val_if_fail(wfdsrcIP, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  return_val_if_fail(wfdsrcPort, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_SET_IP_PORT");
+  g_string_append_printf (proxy_cmd, "\r\nIP ");
+  g_string_append_printf (proxy_cmd, wfdsrcIP);
+  g_string_append_printf (proxy_cmd, "\r\nPORT ");
+  g_string_append_printf (proxy_cmd, wfdsrcPort);
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxySetIPAddrAndPort command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxySetIPAddrAndPort replay for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyConnect(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxySetIPAddrAndPort replay for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyConnect(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_CONNECT))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_CONNECT");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyConnect command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_CONNECT))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_CONNECT");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyConnect command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyConnect inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyStart(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyConnect inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyStart(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_START))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_START");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyStart command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_START))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_START");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyStart command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyStart inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyPause(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyStart inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyPause(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_PAUSE))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_PAUSE");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyPause command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_PAUSE))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_PAUSE");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyPause command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyPause inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyResume(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyPause inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyResume(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_RESUME))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_RESUME");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyResume command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_RESUME))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_RESUME");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyResume command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyResume inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyStop(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyResume inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyStop(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_STOP");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyStop command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_STOP");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyStop command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyStop inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyRet WfdSrcProxyDestroyServer(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxyState lstate;\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyStop inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyRet WfdSrcProxyDestroyServer(MMHandleType pHandle)
+{
+  WfdSrcProxyState lstate;
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  lstate = WfdSrcProxyGetCurrentState(pHandle);\r
-  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))\r
-    return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_DESTROY");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyDestroyServer command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  lstate = WfdSrcProxyGetCurrentState(pHandle);
+  if(!is_cmd_valid_in_current_state(lstate, WFDSRC_COMMAND_STOP))
+    return WFDSRC_ERROR_WFD_INVALID_STATE;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_DESTROY");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyDestroyServer command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-\r
-  debug_log("WfdSrcProxyDestroyServer inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-WfdSrcProxyState WfdSrcProxyGetCurrentState(MMHandleType pHandle)\r
-{\r
-  WfdSrcProxy *lwfd;\r
-  GString *proxy_cmd;\r
-  gchar *cmd_string;\r
-  gint64 end_time;\r
+    if(!lwfd->response) goto retry;
+  }
+
+  debug_log("WfdSrcProxyDestroyServer inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_status(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+WfdSrcProxyState WfdSrcProxyGetCurrentState(MMHandleType pHandle)
+{
+  WfdSrcProxy *lwfd;
+  GString *proxy_cmd;
+  gchar *cmd_string;
+  gint64 end_time;
   int limit = 0;
-  debug_fenter();\r
-\r
-  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
-  lwfd = (WfdSrcProxy *)pHandle;\r
-  proxy_cmd = g_string_new ("");\r
-  g_string_append_printf (proxy_cmd, "WFD_PROXY_STATE_QUERY");\r
-  g_string_append_printf (proxy_cmd, "\r\n");\r
-  cmd_string = g_string_free (proxy_cmd, FALSE);\r
-  debug_log("WfdSrcProxyGetCurrentState command sent: %s \n", cmd_string);\r
-  lwfd->response = FALSE;\r
-  proxy_write(lwfd, cmd_string);\r
-retry:\r
-  debug_log("try timed wait...\n");\r
-  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;\r
-  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))\r
-  {\r
-    debug_log("Out of timed wait but due to timeout...\n");\r
+  debug_fenter();
+
+  return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);
+  lwfd = (WfdSrcProxy *)pHandle;
+  proxy_cmd = g_string_new ("");
+  g_string_append_printf (proxy_cmd, "WFD_PROXY_STATE_QUERY");
+  g_string_append_printf (proxy_cmd, "\r\n");
+  cmd_string = g_string_free (proxy_cmd, FALSE);
+  debug_log("WfdSrcProxyGetCurrentState command sent: %s \n", cmd_string);
+  lwfd->response = FALSE;
+  proxy_write(lwfd, cmd_string);
+retry:
+  debug_log("try timed wait...\n");
+  end_time = g_get_monotonic_time () + WFD_TIME_SPAN_100_MILLISECOND;
+  if (!g_cond_wait_until(lwfd->cond, lwfd->cond_lock, end_time))
+  {
+    debug_log("Out of timed wait but due to timeout...\n");
     limit ++;
     if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
-    if(!lwfd->response) goto retry;\r
-  }\r
-  debug_log("WfdSrcProxyGetCurrentState inbuff for command: %s \n", lwfd->inbuff);\r
-  debug_leave();\r
-  return wfd_proxy_message_parse_state(lwfd->inbuff, strlen(lwfd->inbuff));\r
-}\r
-\r
-static gboolean proxy_write (WfdSrcProxy *wfd, char *wbuf)\r
-{\r
-  write(wfd->sockfd, wbuf, strlen(wbuf));\r
-  return TRUE;\r
-}\r
-\r
-static void* wfd_proxy_thread_function(void * asrc)\r
-{\r
-  fd_set read_flags,write_flags;\r
-  WfdSrcProxy *wfd = (WfdSrcProxy *)asrc;\r
-  int rc;\r
-  while(!wfd->quitloop)\r
-  {\r
-    FD_ZERO(&read_flags);\r
-    FD_ZERO(&write_flags);\r
-    FD_SET(wfd->sockfd, &read_flags);\r
-    debug_log("Waiting on select()...\n");\r
-    rc = select(wfd->sockfd+1, &read_flags, NULL, NULL, NULL);\r
-    if(rc < 0)\r
-      continue;\r
-    if(FD_ISSET(wfd->sockfd, &read_flags))\r
-    { //Socket ready for reading\r
-      FD_CLR(wfd->sockfd, &read_flags);\r
-      memset(&(wfd->inbuff),0,sizeof(wfd->inbuff));\r
-      debug_log("socket ready for reading...\n");\r
-      rc = read(wfd->sockfd, wfd->inbuff, sizeof(wfd->inbuff)-1);\r
-      if (rc <= 0)\r
-      {\r
-        debug_log("socket connection closed\n");\r
-        goto cleanup;\r
-      }\r
-      debug_log("wfd_proxy replay for command: %s \n", wfd->inbuff);\r
-      if(g_strrstr(wfd->inbuff, "NOTIFY"))\r
-      {\r
-        if(wfd->applicationCb)\r
-        {\r
-          gchar **notify;\r
-          notify = g_strsplit(wfd->inbuff,"\r\n",0);\r
-          wfd->applicationCb(asrc, convert_string_to_status(notify[2]), convert_string_to_state(notify[1]), wfd->user_data);\r
-        }\r
-      }\r
-      else \r
-      {\r
-        debug_log("wfd_proxy signalling \n");\r
-        wfd->response = TRUE;\r
-        g_cond_signal(wfd->cond);\r
-        debug_log("wfd_proxy signal emitted \n");\r
-      }\r
-    }\r
-  }\r
-cleanup:\r
-  close (wfd->sockfd);\r
-  FD_CLR (wfd->sockfd, &read_flags);\r
-  debug_log("thread function signal\n");\r
-  g_cond_signal(wfd->cond);\r
-  debug_log("thread function quit\n");\r
-  return NULL;\r
-}\r
-\r
-static int wfd_proxy_initialize(WfdSrcProxy *wfd)\r
-{\r
-  DBusGConnection *bus = NULL;\r
-  DBusGProxy *proxy = NULL;\r
-  g_type_init();\r
-  debug_log("wfd_proxy_initialize init \n");\r
-  int portno;\r
-  struct sockaddr_in serv_addr;\r
-  struct hostent *server;\r
-  GError *error = NULL;\r
-  debug_log("wfd_proxy_initialize get before socket\n");\r
-  wfd->sockfd = socket(AF_INET, SOCK_STREAM, 0);\r
-  if (wfd->sockfd < 0)\r
-  {\r
-    debug_log("ERROR opening socket\n");\r
-    return -1;\r
-  }\r
-\r
-  debug_log("wfd_proxy_initialize get socket created\n");\r
-  server = gethostbyname(DEST_HOST);\r
-  if (server == NULL) {\r
-    debug_log("ERROR, no such host\n");\r
-    return -1;\r
-  }\r
-  portno = WFD_PROXY_COMM_PORT;\r
-  bzero((char *) &serv_addr, sizeof(serv_addr));\r
-  serv_addr.sin_family = AF_INET;\r
-  debug_log("wfd_proxy_initialize bcopy\n");\r
-  bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);\r
-  serv_addr.sin_port = htons(portno);\r
-  debug_log("wfd_proxy_initialize get socket before connect\n");\r
-  if (connect(wfd->sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)\r
-  {\r
-    int return_code = 0;\r
-    int pid = getpid();\r
-    debug_log("-----------  wfd_proxy_initialize socket connect failed it means server is not yet started ------------\n");\r
-    debug_log("going to start WFD server \n");\r
-    bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);\r
-    if (bus == NULL) {\r
-      debug_log("dbus bus get failed\n");\r
-      return -1;\r
-    }\r
-    proxy = dbus_g_proxy_new_for_name(bus,\r
-              "com.samsung.wfd.server",\r
-              "/com/samsung/wfd/server",\r
-              "com.samsung.wfd.server");\r
-    if (proxy == NULL) {\r
-      debug_log("dbus bus proxy get failed\n");\r
-      return -1;\r
-    }\r
-    if (!com_samsung_wfd_server_test_method(proxy, pid, "miracast_server", &return_code, &error)) {\r
-      debug_log(\r
-      "com_samsung_wfd_server_test_method()failed.test_name[%s], "\r
-      "return_code[%d]\n", "miracast_server", return_code);\r
-      debug_log("error->message is %s\n", error->message);\r
-    }\r
-    sleep(1);\r
-    debug_log("wfd_proxy_initialize trying for connect\n");\r
-    if (connect(wfd->sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {\r
-      debug_log("wfd_proxy_initialize trying to connect failed\n");\r
-      return -1;\r
-    }\r
-  }\r
-  debug_log("WFD server initiated and connected\n");\r
-  wfd->thread = g_thread_create ((GThreadFunc) wfd_proxy_thread_function, wfd, TRUE, &error);\r
-  return 0;\r
-}\r
-\r
-static gboolean is_cmd_valid_in_current_state(WfdSrcProxyState aState, WfdSrcProxyCmd acmd)\r
-{\r
-  //TODO state checking needs to be implemented\r
-  return TRUE;\r
-}\r
-\r
-WfdSrcProxyState convert_string_to_state(gchar *buffer)\r
-{\r
-  g_return_val_if_fail (buffer != NULL, WFDSRC_STATE_NUM);\r
-  if(!strcmp(buffer, "MM_WFD_STATE_NULL")) return WFDSRC_STATE_NULL;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_READY")) return WFDSRC_STATE_READY;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_CONNECTION_WAIT")) return WFDSRC_STATE_CONNECTION_WAIT;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_CONNECTED")) return WFDSRC_STATE_CONNECTED;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_PLAYING")) return WFDSRC_STATE_PLAYING;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_PAUSED")) return WFDSRC_STATE_PAUSED;\r
-  if(!strcmp(buffer, "MM_WFD_STATE_NONE")) return WFDSRC_STATE_NONE;\r
-  return WFDSRC_STATE_NULL;\r
-}\r
-\r
-WfdSrcProxyRet convert_string_to_status(gchar *buffer)\r
-{\r
-  g_return_val_if_fail (buffer != NULL, WFDSRC_ERROR_UNKNOWN);\r
-  if(!strcmp(buffer, "MM_ERROR_NONE")) return WFDSRC_ERROR_NONE;\r
-  if(!strcmp(buffer, "MM_ERROR_UNKNOWN")) return WFDSRC_ERROR_UNKNOWN;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_INVALID_ARGUMENT")) return WFDSRC_ERROR_WFD_INVALID_ARGUMENT;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_NO_FREE_SPACE")) return WFDSRC_ERROR_WFD_NO_FREE_SPACE;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_NOT_INITIALIZED")) return WFDSRC_ERROR_WFD_NOT_INITIALIZED;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_NO_OP")) return WFDSRC_ERROR_WFD_NO_OP;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_INVALID_STATE")) return WFDSRC_ERROR_WFD_INVALID_STATE;\r
-  if(!strcmp(buffer, "MM_ERROR_WFD_INTERNAL")) return WFDSRC_ERROR_WFD_INTERNAL;\r
-  return WFDSRC_ERROR_UNKNOWN;\r
-}\r
-\r
-static WfdSrcProxyState wfd_proxy_message_parse_state (const char * data, guint size)\r
-{\r
-  gchar *p;\r
-  gchar buffer[128];\r
-  guint idx = 0;\r
-  gboolean statequery = false;\r
-  g_return_val_if_fail (data != NULL, WFDSRC_STATE_NUM);\r
-  g_return_val_if_fail (size != 0, WFDSRC_STATE_NUM);\r
-\r
-  p = (gchar *) data;\r
-  while (TRUE) {\r
-    if (*p == '\0')\r
-    break;\r
-    idx = 0;\r
-    while (*p != '\n' && *p != '\r' && *p != '\0') {\r
-      if (idx < sizeof (buffer) - 1)\r
-        buffer[idx++] = *p;\r
-      p++;\r
-    }\r
-    buffer[idx] = '\0';\r
-    if(g_strrstr(buffer, "REPLAY WFD_PROXY_STATE_QUERY")) statequery = TRUE;\r
-    else if(statequery) return convert_string_to_state(buffer);\r
-    if (*p == '\0')\r
-      break;\r
-    p+=2;\r
-  }\r
-  return WFDSRC_STATE_NUM;\r
-}\r
-\r
-WfdSrcProxyRet wfd_proxy_message_parse_status (const char * data, guint size)\r
-{\r
-  gchar *p;\r
-  gchar buffer[128];\r
-  guint idx = 0;\r
-  gboolean replay = false;\r
-  g_return_val_if_fail (data != NULL, WFDSRC_ERROR_UNKNOWN);\r
-  g_return_val_if_fail (size != 0, WFDSRC_ERROR_UNKNOWN);\r
-\r
-  p = (gchar *) data;\r
-  while (TRUE) {\r
-    if (*p == '\0')\r
-    break;\r
-    idx = 0;\r
-    while (*p != '\n' && *p != '\r' && *p != '\0') {\r
-      if (idx < sizeof (buffer) - 1)\r
-        buffer[idx++] = *p;\r
-      p++;\r
-    }\r
-    buffer[idx] = '\0';\r
-    if(g_strrstr(buffer, "REPLAY")) replay = TRUE;\r
-    else if(replay) return convert_string_to_status(buffer);\r
-    if (*p == '\0')\r
-      break;\r
-    p+=2;\r
-  }\r
-  return WFDSRC_ERROR_UNKNOWN;\r
-}\r
+    if(!lwfd->response) goto retry;
+  }
+  debug_log("WfdSrcProxyGetCurrentState inbuff for command: %s \n", lwfd->inbuff);
+  debug_leave();
+  return wfd_proxy_message_parse_state(lwfd->inbuff, strlen(lwfd->inbuff));
+}
+
+static gboolean proxy_write (WfdSrcProxy *wfd, char *wbuf)
+{
+  write(wfd->sockfd, wbuf, strlen(wbuf));
+  return TRUE;
+}
+
+static void* wfd_proxy_thread_function(void * asrc)
+{
+  fd_set read_flags,write_flags;
+  WfdSrcProxy *wfd = (WfdSrcProxy *)asrc;
+  int rc;
+  while(!wfd->quitloop)
+  {
+    FD_ZERO(&read_flags);
+    FD_ZERO(&write_flags);
+    FD_SET(wfd->sockfd, &read_flags);
+    debug_log("Waiting on select()...\n");
+    rc = select(wfd->sockfd+1, &read_flags, NULL, NULL, NULL);
+    if(rc < 0)
+      continue;
+    if(FD_ISSET(wfd->sockfd, &read_flags))
+    { //Socket ready for reading
+      FD_CLR(wfd->sockfd, &read_flags);
+      memset(&(wfd->inbuff),0,sizeof(wfd->inbuff));
+      debug_log("socket ready for reading...\n");
+      rc = read(wfd->sockfd, wfd->inbuff, sizeof(wfd->inbuff)-1);
+      if (rc <= 0)
+      {
+        debug_log("socket connection closed\n");
+        goto cleanup;
+      }
+      debug_log("wfd_proxy replay for command: %s \n", wfd->inbuff);
+      if(g_strrstr(wfd->inbuff, "NOTIFY"))
+      {
+        if(wfd->applicationCb)
+        {
+          gchar **notify;
+          notify = g_strsplit(wfd->inbuff,"\r\n",0);
+          wfd->applicationCb(asrc, convert_string_to_status(notify[2]), convert_string_to_state(notify[1]), wfd->user_data);
+        }
+      }
+      else 
+      {
+        debug_log("wfd_proxy signalling \n");
+        wfd->response = TRUE;
+        g_cond_signal(wfd->cond);
+        debug_log("wfd_proxy signal emitted \n");
+      }
+    }
+  }
+cleanup:
+  close (wfd->sockfd);
+  FD_CLR (wfd->sockfd, &read_flags);
+  debug_log("thread function signal\n");
+  g_cond_signal(wfd->cond);
+  debug_log("thread function quit\n");
+  return NULL;
+}
+
+static int wfd_proxy_initialize(WfdSrcProxy *wfd)
+{
+  DBusGConnection *bus = NULL;
+  DBusGProxy *proxy = NULL;
+  g_type_init();
+  debug_log("wfd_proxy_initialize init \n");
+  int portno;
+  struct sockaddr_in serv_addr;
+  struct hostent *server;
+  GError *error = NULL;
+  debug_log("wfd_proxy_initialize get before socket\n");
+  wfd->sockfd = socket(AF_INET, SOCK_STREAM, 0);
+  if (wfd->sockfd < 0)
+  {
+    debug_log("ERROR opening socket\n");
+    return -1;
+  }
+
+  debug_log("wfd_proxy_initialize get socket created\n");
+  server = gethostbyname(DEST_HOST);
+  if (server == NULL) {
+    debug_log("ERROR, no such host\n");
+    return -1;
+  }
+  portno = WFD_PROXY_COMM_PORT;
+  bzero((char *) &serv_addr, sizeof(serv_addr));
+  serv_addr.sin_family = AF_INET;
+  debug_log("wfd_proxy_initialize bcopy\n");
+  bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
+  serv_addr.sin_port = htons(portno);
+  debug_log("wfd_proxy_initialize get socket before connect\n");
+  if (connect(wfd->sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
+  {
+    int return_code = 0;
+    int pid = getpid();
+    debug_log("-----------  wfd_proxy_initialize socket connect failed it means server is not yet started ------------\n");
+    debug_log("going to start WFD server \n");
+    bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
+    if (bus == NULL) {
+      debug_log("dbus bus get failed\n");
+      return -1;
+    }
+    proxy = dbus_g_proxy_new_for_name(bus,
+              "com.samsung.wfd.server",
+              "/com/samsung/wfd/server",
+              "com.samsung.wfd.server");
+    if (proxy == NULL) {
+      debug_log("dbus bus proxy get failed\n");
+      return -1;
+    }
+    if (!com_samsung_wfd_server_test_method(proxy, pid, "miracast_server", &return_code, &error)) {
+      debug_log(
+      "com_samsung_wfd_server_test_method()failed.test_name[%s], "
+      "return_code[%d]\n", "miracast_server", return_code);
+      debug_log("error->message is %s\n", error->message);
+    }
+    sleep(1);
+    debug_log("wfd_proxy_initialize trying for connect\n");
+    if (connect(wfd->sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
+      debug_log("wfd_proxy_initialize trying to connect failed\n");
+      return -1;
+    }
+  }
+  debug_log("WFD server initiated and connected\n");
+  wfd->thread = g_thread_create ((GThreadFunc) wfd_proxy_thread_function, wfd, TRUE, &error);
+  return 0;
+}
+
+static gboolean is_cmd_valid_in_current_state(WfdSrcProxyState aState, WfdSrcProxyCmd acmd)
+{
+  //TODO state checking needs to be implemented
+  return TRUE;
+}
+
+WfdSrcProxyState convert_string_to_state(gchar *buffer)
+{
+  g_return_val_if_fail (buffer != NULL, WFDSRC_STATE_NUM);
+  if(!strcmp(buffer, "MM_WFD_STATE_NULL")) return WFDSRC_STATE_NULL;
+  if(!strcmp(buffer, "MM_WFD_STATE_READY")) return WFDSRC_STATE_READY;
+  if(!strcmp(buffer, "MM_WFD_STATE_CONNECTION_WAIT")) return WFDSRC_STATE_CONNECTION_WAIT;
+  if(!strcmp(buffer, "MM_WFD_STATE_CONNECTED")) return WFDSRC_STATE_CONNECTED;
+  if(!strcmp(buffer, "MM_WFD_STATE_PLAYING")) return WFDSRC_STATE_PLAYING;
+  if(!strcmp(buffer, "MM_WFD_STATE_PAUSED")) return WFDSRC_STATE_PAUSED;
+  if(!strcmp(buffer, "MM_WFD_STATE_NONE")) return WFDSRC_STATE_NONE;
+  return WFDSRC_STATE_NULL;
+}
+
+WfdSrcProxyRet convert_string_to_status(gchar *buffer)
+{
+  g_return_val_if_fail (buffer != NULL, WFDSRC_ERROR_UNKNOWN);
+  if(!strcmp(buffer, "MM_ERROR_NONE")) return WFDSRC_ERROR_NONE;
+  if(!strcmp(buffer, "MM_ERROR_UNKNOWN")) return WFDSRC_ERROR_UNKNOWN;
+  if(!strcmp(buffer, "MM_ERROR_WFD_INVALID_ARGUMENT")) return WFDSRC_ERROR_WFD_INVALID_ARGUMENT;
+  if(!strcmp(buffer, "MM_ERROR_WFD_NO_FREE_SPACE")) return WFDSRC_ERROR_WFD_NO_FREE_SPACE;
+  if(!strcmp(buffer, "MM_ERROR_WFD_NOT_INITIALIZED")) return WFDSRC_ERROR_WFD_NOT_INITIALIZED;
+  if(!strcmp(buffer, "MM_ERROR_WFD_NO_OP")) return WFDSRC_ERROR_WFD_NO_OP;
+  if(!strcmp(buffer, "MM_ERROR_WFD_INVALID_STATE")) return WFDSRC_ERROR_WFD_INVALID_STATE;
+  if(!strcmp(buffer, "MM_ERROR_WFD_INTERNAL")) return WFDSRC_ERROR_WFD_INTERNAL;
+  return WFDSRC_ERROR_UNKNOWN;
+}
+
+static WfdSrcProxyState wfd_proxy_message_parse_state (const char * data, guint size)
+{
+  gchar *p;
+  gchar buffer[128];
+  guint idx = 0;
+  gboolean statequery = false;
+  g_return_val_if_fail (data != NULL, WFDSRC_STATE_NUM);
+  g_return_val_if_fail (size != 0, WFDSRC_STATE_NUM);
+
+  p = (gchar *) data;
+  while (TRUE) {
+    if (*p == '\0')
+    break;
+    idx = 0;
+    while (*p != '\n' && *p != '\r' && *p != '\0') {
+      if (idx < sizeof (buffer) - 1)
+        buffer[idx++] = *p;
+      p++;
+    }
+    buffer[idx] = '\0';
+    if(g_strrstr(buffer, "REPLAY WFD_PROXY_STATE_QUERY")) statequery = TRUE;
+    else if(statequery) return convert_string_to_state(buffer);
+    if (*p == '\0')
+      break;
+    p+=2;
+  }
+  return WFDSRC_STATE_NUM;
+}
+
+WfdSrcProxyRet wfd_proxy_message_parse_status (const char * data, guint size)
+{
+  gchar *p;
+  gchar buffer[128];
+  guint idx = 0;
+  gboolean replay = false;
+  g_return_val_if_fail (data != NULL, WFDSRC_ERROR_UNKNOWN);
+  g_return_val_if_fail (size != 0, WFDSRC_ERROR_UNKNOWN);
+
+  p = (gchar *) data;
+  while (TRUE) {
+    if (*p == '\0')
+    break;
+    idx = 0;
+    while (*p != '\n' && *p != '\r' && *p != '\0') {
+      if (idx < sizeof (buffer) - 1)
+        buffer[idx++] = *p;
+      p++;
+    }
+    buffer[idx] = '\0';
+    if(g_strrstr(buffer, "REPLAY")) replay = TRUE;
+    else if(replay) return convert_string_to_status(buffer);
+    if (*p == '\0')
+      break;
+    p+=2;
+  }
+  return WFDSRC_ERROR_UNKNOWN;
+}