Name: libmm-wfd
Summary: Multimedia Framework Wifi-Display Library
Version: 0.2.16
-Release: 4
+Release: 11
Group: System/Libraries
-License: Apache License 2.0
+License: LGPL
Source0: %{name}-%{version}.tar.gz
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
cp -rf %{_builddir}/%{name}-%{version}/LICENSE.APLv2.0 %{buildroot}%{_datadir}/license/%{name}
mkdir -p %{buildroot}/usr/etc
-mkdir -p %{buildroot}/opt/etc
cp -rf config/mmfw_wfd.ini %{buildroot}/usr/etc/mmfw_wfd.ini
-cp -rf config/mmfw_wfd.ini %{buildroot}/opt/etc/mmfw_wfd.ini
%clean
rm -rf %{buildroot}
%{_datadir}/dbus-1/services/com.samsung.wfd.server.service
%{_datadir}/license/%{name}
/usr/etc/mmfw_wfd.ini
-/opt/etc/mmfw_wfd.ini
%{_libdir}/*.so.*
%{_bindir}/*
%manifest libmm-wfd.manifest
$(MMTA_LIBS) \
$(VCONF_LIBS)\
$(INIPARSER_LIBS)
+
+miracast_server_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x01000000 -DMMF_DEBUG_PREFIX=\"MMF-MIRACAST\" -D_INTERNAL_SESSION_MANAGER_
+
+miracast_server_LDADD += $(MMLOG_LIBS)
-/*
- * libmm-wfd
- *
- * Copyright (c) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, ByungWook Jang <bw.jang@samsung.com>,
- * Manoj Kumar K <manojkumar.k@samsung.com>, Hyunil Park <hyunil46.park@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
- /*===========================================================================================
-| |
-| INCLUDE FILES |
-| |
-========================================================================================== */
-//#define MTRACE;
-#include <glib.h>
-#include <mm_types.h>
-#include <mm_error.h>
-#include <mm_message.h>
-#include <mm_wfd.h>
-#include <mm_debug.h>
-#include <mm_message.h>
-#include <mm_error.h>
-#include <mm_types.h>
-
-#include <iniparser.h>
-#include <mm_ta.h>
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <fcntl.h>
-#include <signal.h>
-
-#include <netdb.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
-#include <vconf.h>
-
-#define PACKAGE "mm_wfd_testsuite"
-
-/*===========================================================================================
-| |
-| LOCAL DEFINITIONS AND DECLARATIONS FOR MODULE |
-| |
-========================================================================================== */
-
-#if defined(_USE_GMAINLOOP)
-GMainLoop *g_loop;
-#endif
-
-gboolean wfd_server_test_method(void *pObject, int pid, char *test_name,
- int *return_code)
-{
- debug_log("Received test %s\n", test_name);
- return TRUE;
-}
-
-#include "wfd-structure.h"
-
-#define WFD_PROXY_COMM_PORT 8888
-
-typedef struct WfdServerObject WfdServerObject;
-typedef struct WfdServerObjectClass WfdServerObjectClass;
-
-GType Daemon_Object_get_type(void);
-struct WfdServerObject {
- GObject parent;
-};
-
-struct WfdServerObjectClass {
- GObjectClass parent;
-};
-
-#define DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT 0
-
-#define WFD_SERVER_TYPE_OBJECT (Daemon_Object_get_type())
-
-#define WFD_SERVER_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST \
- ((object), WFD_SERVER_TYPE_OBJECT, WfdServerObject))
-
-G_DEFINE_TYPE(WfdServerObject, Daemon_Object, G_TYPE_OBJECT)
-static void Daemon_Object_init(WfdServerObject * obj)
-{
- debug_log("Daemon_Object_init\n");
-}
-
-static void Daemon_Object_class_init(WfdServerObjectClass * klass)
-{
- debug_log("Daemon_Object_class_init\n");
-}
-
-/*---------------------------------------------------------------------------
-| LOCAL #defines: |
----------------------------------------------------------------------------*/
-#define MAX_STRING_LEN 2048
-
-/*---------------------------------------------------------------------------
-| LOCAL CONSTANT DEFINITIONS: |
----------------------------------------------------------------------------*/
-enum
-{
- CURRENT_STATUS_MAINMENU,
- CURRENT_STATUS_SERVER_IP,
- CURRENT_STATUS_SERVER_PORT,
- CURRENT_STATUS_CONNECT,
-};
-
-typedef struct {
- int connfd;
- socklen_t clilen;
- struct sockaddr_in cli_addr;
- GThread *thread;
- char inbuff[512];
- gboolean inactive;
- GMutex *lock;
- GIOChannel *channel;
- void *parent;
-} WFDClient;
-
-typedef struct {
- int sockfd;
- int portno;
- struct sockaddr_in serv_addr;
- GThread *thread;
- GList *clients;
-} WFDServer;
-
-/*---------------------------------------------------------------------------
-| LOCAL VARIABLE DEFINITIONS: |
----------------------------------------------------------------------------*/
-
-int g_current_state;
-static MMHandleType g_wfd = 0;
-char *g_err_name = NULL;
-gboolean quit_pushing;
-int socket_id = 0;
-/*---------------------------------------------------------------------------
-| LOCAL FUNCTION PROTOTYPES: |
----------------------------------------------------------------------------*/
-static void wfd_connect();
-static void wfd_start();
-static void wfd_stop();
-
-void quit_program();
-
-static void wfd_set_signal();
-
-/*---------------------------------------------------------------------------
- | LOCAL FUNCTION DEFINITIONS: |
- ---------------------------------------------------------------------------*/
-static bool msg_callback(int message, MMMessageParamType *param, void *user_param)
-{
- /* TODO any error notification or state change should be forwarded to the active list of proxy apps */
- switch (message) {
- case MM_MESSAGE_ERROR:
- {
- WFDClient *client = (WFDClient *)user_param;
- if(!client) return FALSE;
- WFDServer *lserver = (WFDServer*) client->parent;
- if(!lserver) return FALSE;
- debug_log("msg_callback error : code = %x\n", param->code);
- debug_log ("DESTROY..\n\n");
- quit_pushing = TRUE;
- shutdown (lserver->sockfd, SHUT_RDWR);
- debug_log("msg_callback error call quit_program()");
- quit_program();
- }
- break;
- case MM_MESSAGE_WARNING:
- // debug_log("warning : code = %d\n", param->code);
- break;
- case MM_MESSAGE_END_OF_STREAM:
- debug_log("msg_callback end of stream\n");
- mm_wfd_stop(g_wfd);
- break;
- case MM_MESSAGE_STATE_CHANGED:
- g_current_state = param->state.current;
- switch(g_current_state)
- {
- case MM_WFD_STATE_NULL:
- debug_log("\n ==> [WFDApp] Player is [NULL]\n");
- break;
- case MM_WFD_STATE_READY:
- debug_log("\n ==> [WFDApp] Player is [READY]\n");
- break;
- case MM_WFD_STATE_PLAYING:
- debug_log("\n ==> [WFDApp] Player is [PLAYING]\n");
- break;
- case MM_WFD_STATE_PAUSED:
- debug_log("\n ==> [WFDApp] Player is [PAUSED]\n");
- break;
- }
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static gboolean proxy_write (WFDClient *client, char *wbuf)
-{
- write(client->connfd, wbuf, strlen(wbuf));
- return TRUE;
-}
-
-static void input_server_ip_and_port(char *server_ip, char* port, WFDClient *client)
-{
- int len = strlen(server_ip);
- int ret = MM_ERROR_NONE;
- if ( len < 0 || len > MAX_STRING_LEN )
- return;
-
- if (!g_wfd)
- {
- if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )
- {
- debug_log("input_server_ip wfd create is failed\n");
- return;
- }
- ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)client);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("input_server_ip Error in setting server_port...\n");
- return;
- }
- }
- ret = mm_wfd_set_attribute(g_wfd,
- &g_err_name,
- "server_ip", server_ip, strlen(server_ip),
- NULL);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("input_server_ip Error in setting server_port...\n");
- return;
- }
- ret = mm_wfd_set_attribute(g_wfd,
- &g_err_name,
- "server_port", port, strlen(port),
- NULL);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("input_server_port Error in setting server_port...\n");
- return;
- }
- /*set wfd source status*/
- gboolean status = VCONFKEY_MIRACAST_WFD_SOURCE_ON;
- if (!vconf_set_bool(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, status)) {
- debug_log ("set VCONFKEY_MIRACAST_WFD_SOURCE_ON");
- }
-}
-static void wfd_connect()
-{
- int ret = MM_ERROR_NONE;
-
- if (!g_wfd)
- {
- debug_log ("wfd_start Creating server with default values : ");
- if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd create is failed\n");
- return;
- }
-
- ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_start Error in setting server_port...\n");
- return;
- }
- }
- if ( mm_wfd_realize(g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd realize is failed\n");
- return;
- }
-
- if ( mm_wfd_connect(g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd connect is failed\n");
- return;
- }
-
-}
-
-static void wfd_start()
-{
- int ret = MM_ERROR_NONE;
-
- if (!g_wfd)
- {
- debug_log ("wfd_start Creating server with default values : ");
- if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd create is failed\n");
- return;
- }
-
- ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_start Error in setting server_port...\n");
- return;
- }
-
- if ( mm_wfd_realize(g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd realize is failed\n");
- return;
- }
-
- if ( mm_wfd_connect(g_wfd) != MM_ERROR_NONE )
- {
- debug_log("wfd_start wfd connect is failed\n");
- return;
- }
- }
-
- if (mm_wfd_start(g_wfd) != MM_ERROR_NONE)
- {
- debug_log ("wfd_start Failed to start WFD");
- return;
- }
-}
-
-static void wfd_stop()
-{
- int ret = MM_ERROR_NONE;
-
- ret = mm_wfd_stop(g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_stop Error to do stop...\n");
- return;
- }
-}
-
-static void wfd_pause()
-{
- int ret = MM_ERROR_NONE;
-
- ret = mm_wfd_pause(g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_pause Error to do pausep...\n");
- return;
- }
-}
-
-static void wfd_resume()
-{
- int ret = MM_ERROR_NONE;
-
- ret = mm_wfd_resume(g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_resume Error to do resume...\n");
- return;
- }
-}
-
-static void wfd_standby()
-{
- int ret = MM_ERROR_NONE;
- ret = mm_wfd_standby(g_wfd);
- if (ret != MM_ERROR_NONE)
- {
- debug_log ("wfd_standby Error to do standby...\n");
- return;
- }
-}
-
-void quit_program()
-{
- MMTA_ACUM_ITEM_SHOW_RESULT_TO(MMTA_SHOW_STDOUT);
- MMTA_RELEASE();
- debug_log ("quit_program...\n");
-
- /*set wfd source status*/
- gboolean status = VCONFKEY_MIRACAST_WFD_SOURCE_OFF;
- if (!vconf_set_bool(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, status)) {
- debug_log ("set VCONFKEY_MIRACAST_WFD_SOURCE_OFF");
- }
-
- if (g_wfd) {
- mm_wfd_unrealize(g_wfd);
- mm_wfd_destroy(g_wfd);
- g_wfd = 0;
- }
- g_main_loop_quit(g_loop);
-}
-
-gchar * convert_state_to_string(MMWfdStateType aState)
-{
- GString *cmd_replay;
- cmd_replay = g_string_new ("");
- switch(aState)
- {
- case MM_WFD_STATE_NULL:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_NULL");
- break;
- case MM_WFD_STATE_READY:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_READY");
- break;
- case MM_WFD_STATE_CONNECTION_WAIT:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_CONNECTION_WAIT");
- break;
- case MM_WFD_STATE_CONNECTED:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_CONNECTED");
- break;
- case MM_WFD_STATE_PLAYING:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_PLAYING");
- break;
- case MM_WFD_STATE_PAUSED:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_PAUSED");
- break;
- case MM_WFD_STATE_NONE:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_NONE");
- break;
- case MM_WFD_STATE_NUM:
- g_string_append_printf (cmd_replay, "MM_WFD_STATE_NUM");
- break;
- }
- return g_string_free (cmd_replay, FALSE);
-}
-
-static void interpret (WFDClient *client, char *cmd)
-{
- GString *cmd_replay;
- if (strstr(cmd, "WFD_PROXY_SET_IP_PORT"))
- {
- gchar **IP_port;
- gchar **IP;
- gchar **port;
- debug_log ("setting attributes... WFD..\n\n");
- IP_port = g_strsplit(cmd,"\r\n",0);
- IP = g_strsplit(IP_port[1]," ",0);
- port = g_strsplit(IP_port[2]," ",0);
- debug_log ("received IP %s port %s\n", IP[1], port[1]);
- input_server_ip_and_port(IP[1], port[1], client);
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_SET_IP_PORT");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- }
- else if (strstr(cmd, "WFD_PROXY_CONNECT"))
- {
- debug_log ("Starting... WFD..\n\n");
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_CONNECT");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- wfd_connect();
- }
- else if (strstr(cmd, "WFD_PROXY_START"))
- {
- debug_log ("Starting... WFD..\n\n");
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_START");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- wfd_start();
- }
- else if (strstr(cmd, "WFD_PROXY_PAUSE"))
- {
- debug_log ("PAUSING..\n\n");
- wfd_pause();
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_PAUSE");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- }
- else if (strstr(cmd, "WFD_PROXY_RESUME"))
- {
- debug_log ("RESUMING..\n\n");
- wfd_resume();
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_RESUME");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- }
- else if (strstr(cmd, "WFD_PROXY_STOP"))
- {
- debug_log ("STOPPING..\n\n");
- wfd_stop();
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_STOP");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- }
- else if (strstr(cmd, "WFD_PROXY_DESTROY"))
- {
- WFDServer *lserver = (WFDServer*) client->parent;
- debug_log ("DESTROY..\n\n");
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_DESTROY");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, "MM_ERROR_NONE");
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- quit_pushing = TRUE;
- shutdown (lserver->sockfd, SHUT_RDWR);
- debug_log("interpret calll quit_program()");
+/*\r
+ * libmm-wfd\r
+ *\r
+ * Copyright (c) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, ByungWook Jang <bw.jang@samsung.com>,\r
+ * Manoj Kumar K <manojkumar.k@samsung.com>, Hyunil Park <hyunil46.park@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ */\r
+\r
+ /*===========================================================================================\r
+| |\r
+| INCLUDE FILES |\r
+| |\r
+========================================================================================== */\r
+//#define MTRACE;\r
+#include <glib.h>\r
+#include <mm_types.h>\r
+#include <mm_error.h>\r
+#include <mm_message.h>\r
+#include <mm_wfd.h>\r
+#include <mm_debug.h>\r
+#include <mm_message.h>\r
+#include <mm_error.h>\r
+#include <mm_types.h>\r
+\r
+#include <iniparser.h>\r
+#include <mm_ta.h>\r
+#include <dlfcn.h>\r
+#include <sys/types.h>\r
+#include <sys/socket.h>\r
+#include <netinet/in.h>\r
+#include <fcntl.h>\r
+#include <signal.h>\r
+\r
+#include <netdb.h>\r
+#include <dbus/dbus.h>\r
+#include <dbus/dbus-glib-lowlevel.h>\r
+\r
+#include <vconf.h>\r
+\r
+#define PACKAGE "mm_wfd_testsuite"\r
+\r
+/*===========================================================================================\r
+| |\r
+| LOCAL DEFINITIONS AND DECLARATIONS FOR MODULE |\r
+| |\r
+========================================================================================== */\r
+\r
+#if defined(_USE_GMAINLOOP)\r
+GMainLoop *g_loop;\r
+#endif\r
+\r
+gboolean wfd_server_test_method(void *pObject, int pid, char *test_name,\r
+ int *return_code)\r
+{\r
+ debug_log("Received test %s\n", test_name);\r
+ return TRUE;\r
+}\r
+\r
+#include "wfd-structure.h"\r
+\r
+#define WFD_PROXY_COMM_PORT 8888\r
+\r
+typedef struct WfdServerObject WfdServerObject;\r
+typedef struct WfdServerObjectClass WfdServerObjectClass;\r
+\r
+GType Daemon_Object_get_type(void);\r
+struct WfdServerObject {\r
+ GObject parent;\r
+};\r
+\r
+struct WfdServerObjectClass {\r
+ GObjectClass parent;\r
+};\r
+\r
+#define DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT 0\r
+\r
+#define WFD_SERVER_TYPE_OBJECT (Daemon_Object_get_type())\r
+\r
+#define WFD_SERVER_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST \\r
+ ((object), WFD_SERVER_TYPE_OBJECT, WfdServerObject))\r
+\r
+G_DEFINE_TYPE(WfdServerObject, Daemon_Object, G_TYPE_OBJECT)\r
+static void Daemon_Object_init(WfdServerObject * obj)\r
+{\r
+ debug_log("Daemon_Object_init\n");\r
+}\r
+\r
+static void Daemon_Object_class_init(WfdServerObjectClass * klass)\r
+{\r
+ debug_log("Daemon_Object_class_init\n");\r
+}\r
+\r
+/*---------------------------------------------------------------------------\r
+| LOCAL #defines: |\r
+---------------------------------------------------------------------------*/\r
+#define MAX_STRING_LEN 2048\r
+\r
+/*---------------------------------------------------------------------------\r
+| LOCAL CONSTANT DEFINITIONS: |\r
+---------------------------------------------------------------------------*/\r
+enum\r
+{\r
+ CURRENT_STATUS_MAINMENU,\r
+ CURRENT_STATUS_SERVER_IP,\r
+ CURRENT_STATUS_SERVER_PORT,\r
+ CURRENT_STATUS_CONNECT,\r
+};\r
+\r
+typedef struct {\r
+ int connfd;\r
+ socklen_t clilen;\r
+ struct sockaddr_in cli_addr;\r
+ GThread *thread;\r
+ char inbuff[512];\r
+ gboolean inactive;\r
+ GMutex *lock;\r
+ GIOChannel *channel;\r
+ void *parent;\r
+} WFDClient;\r
+\r
+typedef struct {\r
+ int sockfd;\r
+ int portno;\r
+ struct sockaddr_in serv_addr;\r
+ GThread *thread;\r
+ GList *clients;\r
+} WFDServer;\r
+\r
+/*---------------------------------------------------------------------------\r
+| LOCAL VARIABLE DEFINITIONS: |\r
+---------------------------------------------------------------------------*/\r
+\r
+int g_current_state;\r
+static MMHandleType g_wfd = 0;\r
+char *g_err_name = NULL;\r
+gboolean quit_pushing;\r
+gboolean quit = FALSE;
+int socket_id = 0;\r
+/*---------------------------------------------------------------------------\r
+| LOCAL FUNCTION PROTOTYPES: |\r
+---------------------------------------------------------------------------*/\r
+static void wfd_connect();\r
+static void wfd_start();\r
+static void wfd_stop();\r
+\r
+void quit_program();\r
+\r
+static void wfd_set_signal();\r
+\r
+/*---------------------------------------------------------------------------\r
+ | LOCAL FUNCTION DEFINITIONS: |\r
+ ---------------------------------------------------------------------------*/\r
+static bool msg_callback(int message, MMMessageParamType *param, void *user_param)\r
+{\r
+ /* TODO any error notification or state change should be forwarded to the active list of proxy apps */\r
+ switch (message) {\r
+ case MM_MESSAGE_ERROR:\r
+ {\r
+ WFDClient *client = (WFDClient *)user_param;\r
+ if(!client) return FALSE;\r
+ WFDServer *lserver = (WFDServer*) client->parent;\r
+ if(!lserver) return FALSE;\r
+ debug_log("msg_callback error : code = %x\n", param->code);\r
+ debug_log ("DESTROY..\n\n");\r
+ quit_pushing = TRUE;\r
+ shutdown (lserver->sockfd, SHUT_RDWR);\r
+ debug_log("msg_callback error call quit_program()");\r
+ quit_program();\r
+ }\r
+ break;\r
+ case MM_MESSAGE_WARNING:\r
+ // debug_log("warning : code = %d\n", param->code);\r
+ break;\r
+ case MM_MESSAGE_END_OF_STREAM:\r
+ debug_log("msg_callback end of stream\n");\r
+ mm_wfd_stop(g_wfd);\r
+ break;\r
+ case MM_MESSAGE_STATE_CHANGED:\r
+ g_current_state = param->state.current;\r
+ switch(g_current_state)\r
+ {\r
+ case MM_WFD_STATE_NULL:\r
+ debug_log("\n ==> [WFDApp] Player is [NULL]\n");\r
+ break;\r
+ case MM_WFD_STATE_READY:\r
+ debug_log("\n ==> [WFDApp] Player is [READY]\n");\r
+ break;\r
+ case MM_WFD_STATE_PLAYING:\r
+ debug_log("\n ==> [WFDApp] Player is [PLAYING]\n");\r
+ break;\r
+ case MM_WFD_STATE_PAUSED:\r
+ debug_log("\n ==> [WFDApp] Player is [PAUSED]\n");\r
+ break;\r
+ }\r
+ break;\r
+ default:\r
+ return FALSE;\r
+ }\r
+ return TRUE;\r
+}\r
+\r
+static gboolean proxy_write (WFDClient *client, char *wbuf)\r
+{\r
+ write(client->connfd, wbuf, strlen(wbuf));\r
+ return TRUE;\r
+}\r
+\r
+static void input_server_ip_and_port(char *server_ip, char* port, WFDClient *client)\r
+{\r
+ int len = strlen(server_ip);\r
+ int ret = MM_ERROR_NONE;\r
+ if ( len < 0 || len > MAX_STRING_LEN )\r
+ return;\r
+\r
+ if (!g_wfd)\r
+ {\r
+ if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("input_server_ip wfd create is failed\n");\r
+ return;\r
+ }\r
+ ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)client);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("input_server_ip Error in setting server_port...\n");\r
+ return;\r
+ }\r
+ }\r
+ ret = mm_wfd_set_attribute(g_wfd,\r
+ &g_err_name,\r
+ "server_ip", server_ip, strlen(server_ip),\r
+ NULL);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("input_server_ip Error in setting server_port...\n");\r
+ return;\r
+ }\r
+ ret = mm_wfd_set_attribute(g_wfd,\r
+ &g_err_name,\r
+ "server_port", port, strlen(port),\r
+ NULL);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("input_server_port Error in setting server_port...\n");\r
+ return;\r
+ }\r
+ /*set wfd source status*/\r
+ gboolean status = VCONFKEY_MIRACAST_WFD_SOURCE_ON;\r
+ if (!vconf_set_bool(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, status)) {\r
+ debug_log ("set VCONFKEY_MIRACAST_WFD_SOURCE_ON");\r
+ }\r
+}\r
+static void wfd_connect()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+\r
+ if (!g_wfd)\r
+ {\r
+ debug_log ("wfd_start Creating server with default values : ");\r
+ if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd create is failed\n");\r
+ return;\r
+ }\r
+\r
+ ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_start Error in setting server_port...\n");\r
+ return;\r
+ }\r
+ }\r
+ if ( mm_wfd_realize(g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd realize is failed\n");\r
+ return;\r
+ }\r
+\r
+ if ( mm_wfd_connect(g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd connect is failed\n");\r
+ return;\r
+ }\r
+\r
+}\r
+\r
+static void wfd_start()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+\r
+ if (!g_wfd)\r
+ {\r
+ debug_log ("wfd_start Creating server with default values : ");\r
+ if ( mm_wfd_create(&g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd create is failed\n");\r
+ return;\r
+ }\r
+\r
+ ret = mm_wfd_set_message_callback(g_wfd, msg_callback, (void*)g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_start Error in setting server_port...\n");\r
+ return;\r
+ }\r
+\r
+ if ( mm_wfd_realize(g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd realize is failed\n");\r
+ return;\r
+ }\r
+\r
+ if ( mm_wfd_connect(g_wfd) != MM_ERROR_NONE )\r
+ {\r
+ debug_log("wfd_start wfd connect is failed\n");\r
+ return;\r
+ }\r
+ }\r
+\r
+ if (mm_wfd_start(g_wfd) != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_start Failed to start WFD");\r
+ return;\r
+ }\r
+}\r
+\r
+static void wfd_stop()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+\r
+ ret = mm_wfd_stop(g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_stop Error to do stop...\n");\r
+ return;\r
+ }\r
+}\r
+\r
+static void wfd_pause()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+\r
+ ret = mm_wfd_pause(g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_pause Error to do pausep...\n");\r
+ return;\r
+ }\r
+}\r
+\r
+static void wfd_resume()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+\r
+ ret = mm_wfd_resume(g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_resume Error to do resume...\n");\r
+ return;\r
+ }\r
+}\r
+\r
+static void wfd_standby()\r
+{\r
+ int ret = MM_ERROR_NONE;\r
+ ret = mm_wfd_standby(g_wfd);\r
+ if (ret != MM_ERROR_NONE)\r
+ {\r
+ debug_log ("wfd_standby Error to do standby...\n");\r
+ return;\r
+ }\r
+}\r
+\r
+void quit_program()\r
+{\r
+ MMTA_ACUM_ITEM_SHOW_RESULT_TO(MMTA_SHOW_STDOUT);\r
+ MMTA_RELEASE();\r
+ debug_log ("quit_program...\n");\r
+\r
+ /*set wfd source status*/\r
+ gboolean status = VCONFKEY_MIRACAST_WFD_SOURCE_OFF;\r
+ if (!vconf_set_bool(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, status)) {\r
+ debug_log ("set VCONFKEY_MIRACAST_WFD_SOURCE_OFF");\r
+ }\r
+\r
+ if (g_wfd) {\r
+ mm_wfd_unrealize(g_wfd);\r
+ mm_wfd_destroy(g_wfd);\r
+ g_wfd = 0;\r
+ }\r
+ g_main_loop_quit(g_loop);\r
+}\r
+\r
+gchar * convert_state_to_string(MMWfdStateType aState)\r
+{\r
+ GString *cmd_replay;\r
+ cmd_replay = g_string_new ("");\r
+ switch(aState)\r
+ {\r
+ case MM_WFD_STATE_NULL:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_NULL");\r
+ break;\r
+ case MM_WFD_STATE_READY:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_READY");\r
+ break;\r
+ case MM_WFD_STATE_CONNECTION_WAIT:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_CONNECTION_WAIT");\r
+ break;\r
+ case MM_WFD_STATE_CONNECTED:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_CONNECTED");\r
+ break;\r
+ case MM_WFD_STATE_PLAYING:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_PLAYING");\r
+ break;\r
+ case MM_WFD_STATE_PAUSED:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_PAUSED");\r
+ break;\r
+ case MM_WFD_STATE_NONE:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_NONE");\r
+ break;\r
+ case MM_WFD_STATE_NUM:\r
+ g_string_append_printf (cmd_replay, "MM_WFD_STATE_NUM");\r
+ break;\r
+ }\r
+ return g_string_free (cmd_replay, FALSE);\r
+}\r
+\r
+static void interpret (WFDClient *client, char *cmd)\r
+{\r
+ GString *cmd_replay;\r
+ if (strstr(cmd, "WFD_PROXY_SET_IP_PORT"))\r
+ {\r
+ gchar **IP_port;\r
+ gchar **IP;\r
+ gchar **port;\r
+ debug_log ("setting attributes... WFD..\n\n");\r
+ IP_port = g_strsplit(cmd,"\r\n",0);\r
+ IP = g_strsplit(IP_port[1]," ",0);\r
+ port = g_strsplit(IP_port[2]," ",0);\r
+ debug_log ("received IP %s port %s\n", IP[1], port[1]);\r
+ input_server_ip_and_port(IP[1], port[1], client);\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_SET_IP_PORT");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_CONNECT"))\r
+ {\r
+ debug_log ("Starting... WFD..\n\n");\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_CONNECT");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ wfd_connect();\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_START"))\r
+ {\r
+ debug_log ("Starting... WFD..\n\n");\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_START");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ wfd_start();\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_PAUSE"))\r
+ {\r
+ debug_log ("PAUSING..\n\n");\r
+ wfd_pause();\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_PAUSE");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_RESUME"))\r
+ {\r
+ debug_log ("RESUMING..\n\n");\r
+ wfd_resume();\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_RESUME");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_STOP"))\r
+ {\r
+ debug_log ("STOPPING..\n\n");\r
+ wfd_stop();\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_STOP");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_DESTROY"))\r
+ {\r
+ WFDServer *lserver = (WFDServer*) client->parent;\r
+ debug_log ("DESTROY..\n\n");\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_DESTROY");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, "MM_ERROR_NONE");\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ quit_pushing = TRUE;\r
+ shutdown (lserver->sockfd, SHUT_RDWR);\r
+ debug_log("interpret calll quit_program()");\r
+ quit_program();\r
+ }\r
+ else if (strstr(cmd, "WFD_PROXY_STATE_QUERY"))\r
+ {\r
+ debug_log ("STATE QUERY..\n\n");\r
+ cmd_replay = g_string_new ("");\r
+ g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_STATE_QUERY");\r
+ g_string_append_printf (cmd_replay, "\r\n");\r
+ g_string_append_printf (cmd_replay, convert_state_to_string(g_current_state));\r
+ proxy_write(client, g_string_free (cmd_replay, FALSE));\r
+ debug_log ("STATE QUERY..demon return\n\n");\r
+ }\r
+ else\r
+ {\r
+ debug_log("unknown menu \n");\r
+ }\r
+}\r
+\r
+gboolean input (GIOChannel *channel, GIOCondition condition, gpointer data)\r
+{\r
+ WFDClient *client = (WFDClient*)data;\r
+ gsize read;\r
+ GError *error = NULL;\r
+ if(condition & G_IO_IN) {\r
+ memset(&(client->inbuff),0,sizeof(client->inbuff));\r
+ g_io_channel_read(client->channel, client->inbuff, sizeof(client->inbuff), &read);\r
+ if(read)\r
+ {\r
+ client->inbuff[read] = '\0';\r
+ g_strstrip(client->inbuff);\r
+ debug_log("got command %s\n", client->inbuff);\r
+ if(!g_str_has_prefix(client->inbuff,"WFD")) goto client_cleanup;\r
+ interpret (client, client->inbuff);\r
+ debug_log("command return \n");\r
+ }\r
+ else goto client_cleanup;\r
+ }\r
+ if (condition & G_IO_HUP) goto client_cleanup;\r
+ return TRUE;\r
+client_cleanup:\r
+ {\r
+ WFDServer *lserver = (WFDServer *)client->parent;\r
+ client->inactive = TRUE;\r
+ debug_log("client connection closed \n");\r
+ shutdown (client->connfd, SHUT_RDWR);\r
+ g_io_channel_shutdown(client->channel, TRUE, &error);\r
+ debug_log("IO channel closed \n");\r
+ if(g_list_length(lserver->clients))\r
+ {\r
+ lserver->clients = g_list_remove(lserver->clients, client);\r
+ }\r
+ free(client);\r
+ debug_log("client removed from list \n");\r
+ }\r
+ return TRUE;\r
+}\r
+\r
+static void* wfd_server_thread_function(void * asrc)\r
+{\r
+ int newsockfd;\r
+ int i=0;\r
+ int nSockOpt = 1;\r
+ WFDServer *pserver = (WFDServer *)asrc;\r
+ pserver->sockfd = socket(AF_INET, SOCK_STREAM, 0);\r
+ debug_log("wfd_proxy_initialize socke is %d", pserver->sockfd);\r
+ if (pserver->sockfd < 0)\r
+ {\r
+ debug_log("ERROR opening socket");\r
+ goto cleanup;\r
+ }\r
+ debug_log("wfd_proxy_initialize get socket created\n");\r
+ bzero((char *) &pserver->serv_addr, sizeof(pserver->serv_addr));\r
+ pserver->portno = WFD_PROXY_COMM_PORT;\r
+ pserver->serv_addr.sin_family = AF_INET;\r
+ pserver->serv_addr.sin_addr.s_addr = INADDR_ANY;\r
+ pserver->serv_addr.sin_port = htons(pserver->portno);\r
+ debug_log("serv_addr = %p sizeof %d ", (struct sockaddr *) &pserver->serv_addr, sizeof(pserver->serv_addr));\r
+ setsockopt(pserver->sockfd, SOL_SOCKET, SO_REUSEADDR, &nSockOpt, sizeof(nSockOpt));\r
+ if (bind(pserver->sockfd, (struct sockaddr *) &pserver->serv_addr, sizeof(pserver->serv_addr)) < 0)\r
+ {\r
+ debug_log("ERROR on binding");\r
+ goto cleanup;\r
+ }\r
+ debug_log("wfd_proxy_initialize get socket bind\n");\r
+ if (listen(pserver->sockfd,5) <0)\r
+ {\r
+ debug_log("ERROR on socket listen");\r
+ goto cleanup;\r
+ }\r
+ wfd_set_signal();\r
+ MMTA_INIT();\r
+\r
+ while(!quit_pushing)\r
+ {\r
+ socklen_t clilen = {0};\r
+ struct sockaddr_in cli_addr = {0};\r
+ WFDClient *client = NULL;\r
+ clilen = sizeof(cli_addr);\r
+ debug_log("wfd_proxy_initialize waiting for accept \n");\r
+ newsockfd = accept(pserver->sockfd, (struct sockaddr *) &cli_addr, &clilen);\r
+ if (newsockfd < 0) {\r
+ debug_log("ERROR on accept");\r
+ continue;\r
+ }\r
+ debug_log("wfd_proxy_initialize get socket accept \n");\r
+ client = g_malloc(sizeof(WFDClient));\r
+ if(!client)\r
+ {\r
+ debug_log("client malloc failed. out of memory");\r
+ continue;\r
+ }\r
+ client->connfd = newsockfd;\r
+ socket_id = newsockfd;\r
+ client->lock = g_mutex_new ();\r
+ client->inactive = 0;\r
+ client->parent = pserver;\r
+ client->channel = g_io_channel_unix_new(client->connfd);\r
+ g_io_add_watch(client->channel, G_IO_IN|G_IO_HUP|G_IO_ERR, (GIOFunc)input, client);\r
+ pserver->clients = g_list_prepend(pserver->clients, client);\r
+ }\r
+cleanup:\r
+ debug_log("wfd_server_thread_function cleanup \n");\r
+ for(i=0;i<g_list_length(pserver->clients); i++)\r
+ {\r
+ GError *error = NULL;\r
+ WFDClient *tempclient = (WFDClient *)g_list_nth_data(pserver->clients,i);\r
+ if(tempclient) {\r
+ tempclient->inactive = TRUE;\r
+ shutdown (tempclient->connfd, SHUT_RDWR);\r
+ g_io_channel_shutdown(tempclient->channel, TRUE, &error);\r
+ pserver->clients = g_list_remove(pserver->clients, tempclient);\r
+ free(tempclient);\r
+ }\r
+ }\r
+ g_list_free(pserver->clients);\r
+ shutdown (pserver->sockfd, SHUT_RDWR);\r
+ debug_log("wfd_server_thread_function calll quit_program()");\r
+ if(!quit)
quit_program();
- }
- else if (strstr(cmd, "WFD_PROXY_STATE_QUERY"))
- {
- debug_log ("STATE QUERY..\n\n");
- cmd_replay = g_string_new ("");
- g_string_append_printf (cmd_replay, "REPLAY WFD_PROXY_STATE_QUERY");
- g_string_append_printf (cmd_replay, "\r\n");
- g_string_append_printf (cmd_replay, convert_state_to_string(g_current_state));
- proxy_write(client, g_string_free (cmd_replay, FALSE));
- debug_log ("STATE QUERY..demon return\n\n");
- }
- else
- {
- debug_log("unknown menu \n");
- }
-}
-
-gboolean input (GIOChannel *channel, GIOCondition condition, gpointer data)
-{
- WFDClient *client = (WFDClient*)data;
- gsize read;
- GError *error = NULL;
- if(condition & G_IO_IN) {
- memset(&(client->inbuff),0,sizeof(client->inbuff));
- g_io_channel_read(client->channel, client->inbuff, sizeof(client->inbuff), &read);
- if(read)
- {
- client->inbuff[read] = '\0';
- g_strstrip(client->inbuff);
- debug_log("got command %s\n", client->inbuff);
- if(!g_str_has_prefix(client->inbuff,"WFD")) goto client_cleanup;
- interpret (client, client->inbuff);
- debug_log("command return \n");
- }
- else goto client_cleanup;
- }
- if (condition & G_IO_HUP) goto client_cleanup;
- return TRUE;
-client_cleanup:
- {
- WFDServer *lserver = (WFDServer *)client->parent;
- client->inactive = TRUE;
- debug_log("client connection closed \n");
- shutdown (client->connfd, SHUT_RDWR);
- g_io_channel_shutdown(client->channel, TRUE, &error);
- debug_log("IO channel closed \n");
- if(g_list_length(lserver->clients))
- {
- lserver->clients = g_list_remove(lserver->clients, client);
- }
- free(client);
- debug_log("client removed from list \n");
- }
- return TRUE;
-}
-
-static void* wfd_server_thread_function(void * asrc)
-{
- int newsockfd;
- int i=0;
- int nSockOpt = 1;
- WFDServer *pserver = (WFDServer *)asrc;
- pserver->sockfd = socket(AF_INET, SOCK_STREAM, 0);
- debug_log("wfd_proxy_initialize socke is %d", pserver->sockfd);
- if (pserver->sockfd < 0)
- {
- debug_log("ERROR opening socket");
- goto cleanup;
- }
- debug_log("wfd_proxy_initialize get socket created\n");
- bzero((char *) &pserver->serv_addr, sizeof(pserver->serv_addr));
- pserver->portno = WFD_PROXY_COMM_PORT;
- pserver->serv_addr.sin_family = AF_INET;
- pserver->serv_addr.sin_addr.s_addr = INADDR_ANY;
- pserver->serv_addr.sin_port = htons(pserver->portno);
- debug_log("serv_addr = %p sizeof %d ", (struct sockaddr *) &pserver->serv_addr, sizeof(pserver->serv_addr));
- setsockopt(pserver->sockfd, SOL_SOCKET, SO_REUSEADDR, &nSockOpt, sizeof(nSockOpt));
- if (bind(pserver->sockfd, (struct sockaddr *) &pserver->serv_addr, sizeof(pserver->serv_addr)) < 0)
- {
- debug_log("ERROR on binding");
- goto cleanup;
- }
- debug_log("wfd_proxy_initialize get socket bind\n");
- if (listen(pserver->sockfd,5) <0)
- {
- debug_log("ERROR on socket listen");
- goto cleanup;
- }
- wfd_set_signal();
- MMTA_INIT();
-
- while(!quit_pushing)
- {
- socklen_t clilen = {0};
- struct sockaddr_in cli_addr = {0};
- WFDClient *client = NULL;
- clilen = sizeof(cli_addr);
- debug_log("wfd_proxy_initialize waiting for accept \n");
- newsockfd = accept(pserver->sockfd, (struct sockaddr *) &cli_addr, &clilen);
- if (newsockfd < 0) {
- debug_log("ERROR on accept");
- continue;
- }
- debug_log("wfd_proxy_initialize get socket accept \n");
- client = g_malloc(sizeof(WFDClient));
- if(!client)
- {
- debug_log("client malloc failed. out of memory");
- continue;
- }
- client->connfd = newsockfd;
- socket_id = newsockfd;
- client->lock = g_mutex_new ();
- client->inactive = 0;
- client->parent = pserver;
- client->channel = g_io_channel_unix_new(client->connfd);
- g_io_add_watch(client->channel, G_IO_IN|G_IO_HUP|G_IO_ERR, (GIOFunc)input, client);
- pserver->clients = g_list_prepend(pserver->clients, client);
- }
-cleanup:
- debug_log("wfd_server_thread_function cleanup \n");
- for(i=0;i<g_list_length(pserver->clients); i++)
- {
- GError *error = NULL;
- WFDClient *tempclient = (WFDClient *)g_list_nth_data(pserver->clients,i);
- if(tempclient) {
- tempclient->inactive = TRUE;
- shutdown (tempclient->connfd, SHUT_RDWR);
- g_io_channel_shutdown(tempclient->channel, TRUE, &error);
- pserver->clients = g_list_remove(pserver->clients, tempclient);
- free(tempclient);
- }
- }
- g_list_free(pserver->clients);
- shutdown (pserver->sockfd, SHUT_RDWR);
- debug_log("wfd_server_thread_function calll quit_program()");
- quit_program();
-
- debug_log("wfd_server_thread_function THREAD EXIT \n");
-
- return NULL;
-}
-
-static gboolean __func1(void *data)
-{
- GError *error = NULL;
- WFDServer *server = (WFDServer *)data;
- debug_log("__func1 enter \n");
- server->thread = g_thread_create ((GThreadFunc) wfd_server_thread_function, server, TRUE, &error);
- server->clients = g_list_alloc ();
- debug_log("__func1 exit \n");
- return FALSE;
-}
-
-static bool __wfd_server_setup(void* pserver)
-{
- WFDServer *server = (WFDServer *)pserver;
- DBusGConnection *conn = NULL;
- GObject *object = NULL;
- DBusGObjectInfo dbus_glib_wfd_server_object_info;
- GError *err = NULL;
- DBusError derr;
- int ret = 0;
- debug_log("__wfd_server_setup start\n");
- dbus_g_object_type_install_info(WFD_SERVER_TYPE_OBJECT,
- &dbus_glib_wfd_server_object_info);
-
- conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &err);
- if (NULL == conn) {
- debug_log("Unable to get dbus!");
- return false;
- }
- dbus_error_init(&derr);
-
- ret = dbus_bus_request_name(dbus_g_connection_get_connection(conn),
- "com.samsung.wfd.server",
- DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, &derr);
-
- if (dbus_error_is_set(&derr)) {
- debug_log("dbus_bus_request_name failed with error:%s", derr.message);
- dbus_error_free(&derr);
- return false;
- }
- object = g_object_new(WFD_SERVER_TYPE_OBJECT, NULL);
- if (NULL == object) {
- debug_log("Unable to create new object");
- return false;
- }
- dbus_g_connection_register_g_object(conn, "/com/samsung/wfd/server", G_OBJECT(object));
- g_idle_add(__func1, server);
- debug_log("__wfd_server_setup end\n");
- return true;
-}
-void wfd_signal_handler(int signo) {
- quit_pushing = TRUE;
- debug_log("wfd_signal_handler calll quit_program()");
- shutdown (socket_id, SHUT_RDWR);
- quit_program();
- exit(1);
-}
-
-static void wfd_set_signal()
-{
-
- /*refer to signal.h*/
- /*SIGABRT A Process abort signal.
- SIGALRM T Alarm clock.
- SIGBUS A Access to an undefined portion of a memory object.
- SIGCHLD I Child process terminated, stopped,
- SIGCONT C Continue executing, if stopped.
- SIGFPE A Erroneous arithmetic operation.
- SIGHUP T Hangup.
- SIGILL A Illegal instruction.
- SIGINT T Terminal interrupt signal.
- SIGKILL T Kill (cannot be caught or ignored).
- SIGPIPE T Write on a pipe with no one to read it.
- SIGQUIT A Terminal quit signal.
- SIGSEGV A Invalid memory reference.
- SIGSTOP S Stop executing (cannot be caught or ignored).
- SIGTERM T Termination signal.
- SIGTSTP S Terminal stop signal.
- SIGTTIN S Background process attempting read.
- SIGTTOU S Background process attempting write.
- SIGUSR1 T User-defined signal 1.
- SIGUSR2 T User-defined signal 2.
- SIGPOLL T Pollable event.
- SIGPROF T Profiling timer expired.
- SIGSYS A Bad system call.
- SIGTRAP A Trace/breakpoint trap.
- SIGURG I High bandwidth data is available at a socket.
- SIGVTALRM T Virtual timer expired.
- SIGXCPU A CPU time limit exceeded.
- SIGXFSZ A File size limit exceeded.
-
-The default actions are as follows:
-T : Abnormal termination of the process. The process is terminated with all the consequences of _exit()
-A : Abnormal termination of the process.
-I : Ignore the signal.
-S : Stop the process
-*/
- struct sigaction act_new;
- memset (&act_new, 0, sizeof (struct sigaction));
-
- act_new.sa_handler = wfd_signal_handler;
-
- sigaction(SIGABRT, &act_new, NULL);
- sigaction(SIGBUS, &act_new, NULL);
- sigaction(SIGINT, &act_new, NULL); //
- sigaction(SIGKILL, &act_new, NULL);
- sigaction(SIGPIPE, &act_new, NULL);
- sigaction(SIGQUIT, &act_new, NULL); //
- sigaction(SIGSEGV, &act_new, NULL);
- sigaction(SIGTERM, &act_new, NULL); //
- sigaction(SIGSYS, &act_new, NULL);
-
-}
-
-
-
-static void wifi_direct_state_change_cb(keynode_t *key, void *data)
-{
- WFDServer *server = (WFDServer *)data;
- if(!server) return;
- debug_log("wifi direct state changed");
- int state = -1;
- state = vconf_keynode_get_int(key);
- if (state < VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
- debug_log("wifi disconnected");
- quit_pushing = TRUE;
- shutdown (server->sockfd, SHUT_RDWR);
- debug_log("wifi_direct_state_change_cb calll quit_program()");
- quit_program();
- }
-}
-
-static void lcd_state_change_cb(keynode_t *key, void *data)
-{
- WFDServer *server = (WFDServer *)data;
- if(!server)
- return;
- int state = -1;
- state = vconf_keynode_get_int(key);
- if (state == VCONFKEY_PM_STATE_NORMAL) {
- debug_log("source has woke up time to wake-up-sink");
- wfd_resume();
- }
- else if(state == VCONFKEY_PM_STATE_LCDOFF || VCONFKEY_PM_STATE_SLEEP) {
- debug_log("source is sleeping time to go to sleep");
- wfd_standby();
- }
-}
-
-int main(int argc, char *argv[])
-{
- WFDServer server;
- server.thread = NULL;
- server.clients = NULL;
-
- g_loop = g_main_loop_new(NULL, FALSE);
- if(NULL == g_loop) {
- debug_log("Unable to create gmain loop! Aborting wfd server\n");
- exit(-1);
- }
- g_type_init();
- debug_log("wfd_proxy_initialize\n");
- if (!__wfd_server_setup(&server)) {
- debug_log("Unable to initialize test server\n");
- exit(-1);
- }
- debug_log("set vconf_notify_key_changed about wifi direct");
- if (0 != vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_STATE, wifi_direct_state_change_cb, &server)) {
- debug_log("vconf_notify_key_changed() failed");
- }
- debug_log("set vconf_notify_key_changed about LCD state");
- if (0 != vconf_notify_key_changed(VCONFKEY_PM_STATE, lcd_state_change_cb, &server)) {
- debug_log("vconf_notify_key_changed() failed");
- }
- debug_log("wfd_proxy_initialize run loop \n");
- g_main_loop_run(g_loop);
- g_thread_join(server.thread);
- shutdown (server.sockfd, SHUT_RDWR);
- debug_log("WFD SERVER EXIT \n");
- exit(0);
-}
+\r
+ debug_log("wfd_server_thread_function THREAD EXIT \n");\r
+\r
+ return NULL;\r
+}\r
+\r
+static gboolean __func1(void *data)\r
+{\r
+ GError *error = NULL;\r
+ WFDServer *server = (WFDServer *)data;\r
+ debug_log("__func1 enter \n");\r
+ server->thread = g_thread_create ((GThreadFunc) wfd_server_thread_function, server, TRUE, &error);\r
+ server->clients = g_list_alloc ();\r
+ debug_log("__func1 exit \n");\r
+ return FALSE;\r
+}\r
+\r
+static bool __wfd_server_setup(void* pserver)\r
+{\r
+ WFDServer *server = (WFDServer *)pserver;\r
+ DBusGConnection *conn = NULL;\r
+ GObject *object = NULL;\r
+ DBusGObjectInfo dbus_glib_wfd_server_object_info;\r
+ GError *err = NULL;\r
+ DBusError derr;\r
+ int ret = 0;\r
+ debug_log("__wfd_server_setup start\n");\r
+ dbus_g_object_type_install_info(WFD_SERVER_TYPE_OBJECT,\r
+ &dbus_glib_wfd_server_object_info);\r
+\r
+ conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &err);\r
+ if (NULL == conn) {\r
+ debug_log("Unable to get dbus!");\r
+ return false;\r
+ }\r
+ dbus_error_init(&derr);\r
+\r
+ ret = dbus_bus_request_name(dbus_g_connection_get_connection(conn),\r
+ "com.samsung.wfd.server",\r
+ DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, &derr);\r
+\r
+ if (dbus_error_is_set(&derr)) {\r
+ debug_log("dbus_bus_request_name failed with error:%s", derr.message);\r
+ dbus_error_free(&derr);\r
+ return false;\r
+ }\r
+ object = g_object_new(WFD_SERVER_TYPE_OBJECT, NULL);\r
+ if (NULL == object) {\r
+ debug_log("Unable to create new object");\r
+ return false;\r
+ }\r
+ dbus_g_connection_register_g_object(conn, "/com/samsung/wfd/server", G_OBJECT(object));\r
+ g_idle_add(__func1, server);\r
+ debug_log("__wfd_server_setup end\n");\r
+ return true;\r
+}\r
+void wfd_signal_handler(int signo) {\r
+ quit_pushing = TRUE;\r
+ debug_log("wfd_signal_handler calll quit_program()");\r
+ shutdown (socket_id, SHUT_RDWR);\r
+ quit_program();\r
+ exit(1);\r
+}\r
+\r
+static void wfd_set_signal()\r
+{\r
+\r
+ /*refer to signal.h*/\r
+ /*SIGABRT A Process abort signal.\r
+ SIGALRM T Alarm clock.\r
+ SIGBUS A Access to an undefined portion of a memory object.\r
+ SIGCHLD I Child process terminated, stopped,\r
+ SIGCONT C Continue executing, if stopped.\r
+ SIGFPE A Erroneous arithmetic operation.\r
+ SIGHUP T Hangup.\r
+ SIGILL A Illegal instruction.\r
+ SIGINT T Terminal interrupt signal.\r
+ SIGKILL T Kill (cannot be caught or ignored).\r
+ SIGPIPE T Write on a pipe with no one to read it.\r
+ SIGQUIT A Terminal quit signal.\r
+ SIGSEGV A Invalid memory reference.\r
+ SIGSTOP S Stop executing (cannot be caught or ignored).\r
+ SIGTERM T Termination signal.\r
+ SIGTSTP S Terminal stop signal.\r
+ SIGTTIN S Background process attempting read.\r
+ SIGTTOU S Background process attempting write.\r
+ SIGUSR1 T User-defined signal 1.\r
+ SIGUSR2 T User-defined signal 2.\r
+ SIGPOLL T Pollable event.\r
+ SIGPROF T Profiling timer expired.\r
+ SIGSYS A Bad system call.\r
+ SIGTRAP A Trace/breakpoint trap.\r
+ SIGURG I High bandwidth data is available at a socket.\r
+ SIGVTALRM T Virtual timer expired.\r
+ SIGXCPU A CPU time limit exceeded.\r
+ SIGXFSZ A File size limit exceeded.\r
+\r
+The default actions are as follows:\r
+T : Abnormal termination of the process. The process is terminated with all the consequences of _exit()\r
+A : Abnormal termination of the process.\r
+I : Ignore the signal.\r
+S : Stop the process\r
+*/\r
+ struct sigaction act_new;\r
+ memset (&act_new, 0, sizeof (struct sigaction));\r
+\r
+ act_new.sa_handler = wfd_signal_handler;\r
+\r
+ sigaction(SIGABRT, &act_new, NULL);\r
+ sigaction(SIGBUS, &act_new, NULL);\r
+ sigaction(SIGINT, &act_new, NULL); //\r
+ sigaction(SIGKILL, &act_new, NULL);\r
+ sigaction(SIGPIPE, &act_new, NULL);\r
+ sigaction(SIGQUIT, &act_new, NULL); //\r
+ sigaction(SIGSEGV, &act_new, NULL);\r
+ sigaction(SIGTERM, &act_new, NULL); //\r
+ sigaction(SIGSYS, &act_new, NULL);\r
+\r
+}\r
+\r
+static void wifi_direct_state_change_cb(keynode_t *key, void *data)\r
+{\r
+ WFDServer *server = (WFDServer *)data;\r
+ if(!server) return;\r
+ debug_log("wifi direct state changed");\r
+ int state = -1;\r
+ state = vconf_keynode_get_int(key);\r
+ if (state < VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {\r
+ debug_log("wifi disconnected");\r
+ quit_pushing = TRUE;\r
+ if(!quit)
+ {
+ quit = TRUE;
+ shutdown (server->sockfd, SHUT_RDWR);
+ debug_log("wifi_direct_state_change_cb calll quit_program()");
+ quit_program();
+ }
+ }\r
+}\r
+int main(int argc, char *argv[])\r
+{\r
+ WFDServer server;\r
+ server.thread = NULL;\r
+ server.clients = NULL;\r
+\r
+ g_loop = g_main_loop_new(NULL, FALSE);\r
+ if(NULL == g_loop) {\r
+ debug_log("Unable to create gmain loop! Aborting wfd server\n");\r
+ exit(-1);\r
+ }\r
+ g_type_init();\r
+ debug_log("wfd_proxy_initialize\n");\r
+ if (!__wfd_server_setup(&server)) {\r
+ debug_log("Unable to initialize test server\n");\r
+ exit(-1);\r
+ }\r
+ debug_log("set vconf_notify_key_changed about wifi direct");\r
+ if (0 != vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_STATE, wifi_direct_state_change_cb, &server)) {\r
+ debug_log("vconf_notify_key_changed() failed");\r
+ }\r
+ debug_log("wfd_proxy_initialize run loop \n");\r
+ g_main_loop_run(g_loop);\r
+ g_thread_join(server.thread);\r
+ shutdown (server.sockfd, SHUT_RDWR);\r
+ debug_log("WFD SERVER EXIT \n");\r
+ exit(0);\r
+}\r
-lmmfwfd_rtsp_server \
$(INIPARSER_LIBS)
-libmmfwfd_la_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x008 -DMMF_DEBUG_PREFIX=\"MMF-WFD\" -D_INTERNAL_SESSION_MANAGER_
+libmmfwfd_la_CFLAGS += $(MMLOG_CFLAGS) -DMMF_LOG_OWNER=0x02000000 -DMMF_DEBUG_PREFIX=\"MMF-WFD\" -D_INTERNAL_SESSION_MANAGER_
libmmfwfd_la_LIBADD += $(MMLOG_LIBS)
* limitations under the License.
*
*/
-
-#ifndef _WFDSOURCEPROXY_H_
-#define _WFDSOURCEPROXY_H_
-
-/*******************
- * Allow for C++ users
- */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <string.h>
-#include <glib.h>
-#include <mm_message.h>
-#include <mm_error.h>
-#include <mm_types.h>
-#include <mm_debug.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-
-/**
- * Enumerations of wifi-display states.
- */
-typedef enum {
- WFDSRC_STATE_NULL = 0, /**< wifi-display is created, but not realized yet */
- WFDSRC_STATE_READY, /**< wifi-display is ready to play media */
- WFDSRC_STATE_CONNECTION_WAIT, /** < wifi-display is waiting for connection */
- WFDSRC_STATE_CONNECTED, /** < wifi-display is connected */
- WFDSRC_STATE_PLAYING, /**< wifi-display is now playing media */
- WFDSRC_STATE_PAUSED, /**< wifi-display is paused while playing media */
- WFDSRC_STATE_NONE, /**< wifi-display is not created yet */
- WFDSRC_STATE_NUM /**< Number of wifi-display states */
-} WfdSrcProxyState;
-
-typedef enum {
- WFDSRC_COMMAND_NONE = 0,
- WFDSRC_COMMAND_CREATE,
- WFDSRC_COMMAND_DESTROY,
- WFDSRC_COMMAND_REALIZE,
- WFDSRC_COMMAND_UNREALIZE,
- WFDSRC_COMMAND_CONNECT,
- WFDSRC_COMMAND_START,
- WFDSRC_COMMAND_STOP,
- WFDSRC_COMMAND_PAUSE,
- WFDSRC_COMMAND_RESUME,
- WFDSRC_COMMAND_NUM,
-}WfdSrcProxyCmd;
-
-/**
- * Enumerations of wifi-display source module errors and proxy errors
- * Note: Ensure appending of proxy errors after WFD source module errors
- */
-typedef enum {
- WFDSRC_ERROR_NONE = 0,
- WFDSRC_ERROR_UNKNOWN,
- WFDSRC_ERROR_WFD_INVALID_ARGUMENT,
- WFDSRC_ERROR_WFD_NO_FREE_SPACE,
- WFDSRC_ERROR_WFD_NOT_INITIALIZED,
- WFDSRC_ERROR_WFD_NO_OP,
- WFDSRC_ERROR_WFD_INVALID_STATE,
- WFDSRC_ERROR_WFD_INTERNAL
-} WfdSrcProxyRet;
-
-/**
- * Application callback,
- */
-typedef void (*WfdSrcProxyStateError_cb) (MMHandleType pHandle,
- WfdSrcProxyRet error_code,
- WfdSrcProxyState state,
- void *user_data);
-
-/*******************************************************
- * Function Name: WfdSrcProxyInit
- * =========
- * Description:
- * =======
- * This API does the following
- * - creates handle
- * - creates socket and connect to server address ( IPC)
- * - This ensures socket listen on server to be successful
- * - call back registration
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- * appCb - pointer to application callback
- *
- * Return : return WfdSrcProxyRet
- * ====
- *******************************************************/
-WfdSrcProxyRet WfdSrcProxyInit(
- MMHandleType *pHandle,
- WfdSrcProxyStateError_cb *appCb,
- void *user_data );
-
-
-/*******************************************************
- * Function Name: WfdSrcProxyDeInit
- * =========
- * Description:
- * =======
- * - Free the handle
- * - close the sockets
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return WfdSrcProxyRet
- * ====
- *******************************************************/
-WfdSrcProxyRet WfdSrcProxyDeInit(MMHandleType pHandle );
-
-
-/*******************************************************
- * Function Name: WfdSrcProxySetIPAddrAndPort
- * =========
- * Description:
- * =======
- * This API sets IP address and port number to be used by WFD source.
- * Application should call this API after Initialize is called.
- * IP address and port number is sent to WFD source Server (daemon)
- * on IPC
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- * wfdsrcIP - IP address string
- * wfdsrcPort : Port no string
- *
- * Return : return WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxySetIPAddrAndPort(
- MMHandleType pHandle,
- char *wfdsrcIP,
- char *wfdsrcPort);
-
-/*******************************************************
- * Function Name: WfdSrcProxyConnect
- * =========
- * Description:
- * =======
- * This API is used to connect WiFi display source to client.
- * After return, display mode should be set to X
- * refer to utilx_scrnconf_set_dispmode()
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyConnect(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyStart
- * =========
- * Description:
- * =======
- * This API is used to start WiFi display source to start sending data
- * to client.
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyStart(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyPause
- * =========
- * Description:
- * =======
- * This API is used to pause WFD streaming between source and sink.
- * This pauses the streaming between WFD source and sink. So that
- * when user resumes back, streaming does not continue from the point
- * where it stopped, instead it will start from current content.
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyPause(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyResume
- * =========
- * Description:
- * =======
- * This API is used to resume WFD streaming between source and sink
- * Resume after pause starts from current content that is viewed on source
- * No caching of content from the time it is paused is done.
- *
- * Arguments:
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyResume(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyStop
- * =========
- * Description:
- * =======
- * This API stops WFD streaming between source and sink.
- * The Server(daemon) will be still running even after stop.
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return one of WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyStop(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyDestroyServer
- * =========
- * Description:
- * =======
- * This API destroy WFD server which is already in STOP state.
- * The Server(daemon) will be destroyed after this call.
- *
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return one of WfdSrcProxyRet
- * ====
- ******************************************************/
-WfdSrcProxyRet WfdSrcProxyDestroyServer(MMHandleType pHandle);
-
-/*******************************************************
- * Function Name: WfdSrcProxyGetCurrentState
- * =========
- * Description:
- * =======
- * This API is a provision given to Application, if in any case
- * application needs to know the status of WiFi Source server state.
- * This is a synchronous call.
- * Arguments:
- * =======
- * pHandle - pointer to WfdSrcProxyInfo
- *
- * Return : return one of the states from WfdSrcProxyState
- * ====
- ******************************************************/
-WfdSrcProxyState WfdSrcProxyGetCurrentState(MMHandleType pHandle);
-
-
-#ifdef __cplusplus
-}
-#endif //__cplusplus
-
+#ifndef _WFDSOURCEPROXY_H_\r
+#define _WFDSOURCEPROXY_H_\r
+\r
+/*******************\r
+ * Allow for C++ users\r
+ */\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+#include <string.h>\r
+#include <glib.h>\r
+#include <mm_message.h>\r
+#include <mm_error.h>\r
+#include <mm_types.h>\r
+#include <mm_debug.h>\r
+#include <sys/types.h>\r
+#include <sys/socket.h>\r
+#include <netinet/in.h>\r
+#include <netdb.h>\r
+\r
+/**\r
+ * Enumerations of wifi-display states.\r
+ */\r
+typedef enum {\r
+ WFDSRC_STATE_NULL = 0, /**< wifi-display is created, but not realized yet */\r
+ WFDSRC_STATE_READY, /**< wifi-display is ready to play media */\r
+ WFDSRC_STATE_CONNECTION_WAIT, /** < wifi-display is waiting for connection */\r
+ WFDSRC_STATE_CONNECTED, /** < wifi-display is connected */\r
+ WFDSRC_STATE_PLAYING, /**< wifi-display is now playing media */\r
+ WFDSRC_STATE_PAUSED, /**< wifi-display is paused while playing media */\r
+ WFDSRC_STATE_NONE, /**< wifi-display is not created yet */\r
+ WFDSRC_STATE_NUM /**< Number of wifi-display states */\r
+} WfdSrcProxyState;\r
+\r
+typedef enum {\r
+ WFDSRC_COMMAND_NONE = 0,\r
+ WFDSRC_COMMAND_CREATE,\r
+ WFDSRC_COMMAND_DESTROY,\r
+ WFDSRC_COMMAND_REALIZE,\r
+ WFDSRC_COMMAND_UNREALIZE,\r
+ WFDSRC_COMMAND_CONNECT,\r
+ WFDSRC_COMMAND_START,\r
+ WFDSRC_COMMAND_STOP,\r
+ WFDSRC_COMMAND_PAUSE,\r
+ WFDSRC_COMMAND_RESUME,\r
+ WFDSRC_COMMAND_NUM,\r
+}WfdSrcProxyCmd;\r
+\r
+/**\r
+ * Enumerations of wifi-display source module errors and proxy errors\r
+ * Note: Ensure appending of proxy errors after WFD source module errors\r
+ */\r
+typedef enum {\r
+ WFDSRC_ERROR_NONE = 0,\r
+ WFDSRC_ERROR_UNKNOWN,\r
+ WFDSRC_ERROR_WFD_INVALID_ARGUMENT,\r
+ WFDSRC_ERROR_WFD_NO_FREE_SPACE,\r
+ WFDSRC_ERROR_WFD_NOT_INITIALIZED,\r
+ WFDSRC_ERROR_WFD_NO_OP,\r
+ WFDSRC_ERROR_WFD_INVALID_STATE,\r
+ WFDSRC_ERROR_WFD_INTERNAL\r
+} WfdSrcProxyRet;\r
+\r
+/**\r
+ * Application callback,\r
+ */\r
+typedef void (*WfdSrcProxyStateError_cb) (MMHandleType pHandle,\r
+ WfdSrcProxyRet error_code,\r
+ WfdSrcProxyState state,\r
+ void *user_data);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyInit\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API does the following\r
+ * - creates handle\r
+ * - creates socket and connect to server address ( IPC)\r
+ * - This ensures socket listen on server to be successful\r
+ * - call back registration\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ * appCb - pointer to application callback\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ *******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyInit(\r
+ MMHandleType *pHandle,\r
+ WfdSrcProxyStateError_cb *appCb,\r
+ void *user_data );\r
+\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyDeInit\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * - Free the handle\r
+ * - close the sockets\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ *******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyDeInit(MMHandleType pHandle );\r
+\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxySetIPAddrAndPort\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API sets IP address and port number to be used by WFD source.\r
+ * Application should call this API after Initialize is called.\r
+ * IP address and port number is sent to WFD source Server (daemon)\r
+ * on IPC\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ * wfdsrcIP - IP address string\r
+ * wfdsrcPort : Port no string\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxySetIPAddrAndPort(\r
+ MMHandleType pHandle,\r
+ char *wfdsrcIP,\r
+ char *wfdsrcPort);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyConnect\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API is used to connect WiFi display source to client.\r
+ * After return, display mode should be set to X\r
+ * refer to utilx_scrnconf_set_dispmode()\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyConnect(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyStart\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API is used to start WiFi display source to start sending data\r
+ * to client.\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyStart(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyPause\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API is used to pause WFD streaming between source and sink.\r
+ * This pauses the streaming between WFD source and sink. So that\r
+ * when user resumes back, streaming does not continue from the point\r
+ * where it stopped, instead it will start from current content.\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyPause(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyResume\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API is used to resume WFD streaming between source and sink\r
+ * Resume after pause starts from current content that is viewed on source\r
+ * No caching of content from the time it is paused is done.\r
+ *\r
+ * Arguments:\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyResume(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyStop\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API stops WFD streaming between source and sink.\r
+ * The Server(daemon) will be still running even after stop.\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return one of WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyStop(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyDestroyServer\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API destroy WFD server which is already in STOP state.\r
+ * The Server(daemon) will be destroyed after this call.\r
+ *\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return one of WfdSrcProxyRet\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyRet WfdSrcProxyDestroyServer(MMHandleType pHandle);\r
+\r
+/*******************************************************\r
+ * Function Name: WfdSrcProxyGetCurrentState\r
+ * =========\r
+ * Description:\r
+ * =======\r
+ * This API is a provision given to Application, if in any case\r
+ * application needs to know the status of WiFi Source server state.\r
+ * This is a synchronous call.\r
+ * Arguments:\r
+ * =======\r
+ * pHandle - pointer to WfdSrcProxyInfo\r
+ *\r
+ * Return : return one of the states from WfdSrcProxyState\r
+ * ====\r
+ ******************************************************/\r
+WfdSrcProxyState WfdSrcProxyGetCurrentState(MMHandleType pHandle);\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif //__cplusplus\r
+\r
#endif //_WFDSOURCEPROXY_H_
/* destroy can called at anytime */
MMWFD_CHECK_STATE_RETURN_IF_FAIL ( wfd, MMWFD_COMMAND_DESTROY );
+ g_object_unref (wfd->client);
+ g_object_unref (wfd->server);
g_object_unref (wfd->mapping);
g_object_unref (wfd->factory);
- g_object_unref (wfd->mapping);
- g_object_unref (wfd->server);
/* release attributes */
_mmwfd_deconstruct_attribute( wfd );
MMWFD_CHECK_STATE_RETURN_IF_FAIL( wfd, MMWFD_COMMAND_START );
/* set client params */
- gst_rtsp_server_set_client_params (wfd->server, wfd->client, WFD_INI()->videosrc_element, WFD_INI()->session_mode, WFD_INI()->videobitrate,
+ gst_rtsp_server_set_client_params (wfd->server, wfd->client, WFD_INI()->videosrc_element, WFD_INI()->session_mode, WFD_INI()->videobitrate, WFD_INI()->mtu_size,
WFD_INI()->infile);
if (!gst_rtsp_server_start_client (wfd->server, wfd->client))
* limitations under the License.
*
*/
-
-#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)
+\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
#define LIMIT_TIME 50 /* 5 sec */
-
-/*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);
+\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
+ gboolean server_destroyed;\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
int ret = 0;
- 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;
+ 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->server_destroyed = FALSE;\r
ret = wfd_proxy_initialize(temp);
if(ret < 0)
return WFDSRC_ERROR_WFD_NOT_INITIALIZED;
- *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;
+ *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
+ if(!lwfd->server_destroyed)\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
int limit = 0;
- 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");
+ 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
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
+ 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
int limit = 0;
- 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");
+ debug_fenter();\r
+\r
+ return_val_if_fail(pHandle, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\r
+ lwfd = (WfdSrcProxy *)pHandle;\r
+ return_val_if_fail(!lwfd->server_destroyed, WFDSRC_ERROR_WFD_NOT_INITIALIZED);\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
limit ++;
if(limit > LIMIT_TIME) return WFDSRC_ERROR_WFD_INTERNAL;
- 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;
-}
+ 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
+ wfd->server_destroyed = TRUE;\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
+ if((!wfd->quitloop) && wfd->applicationCb)\r
+ {\r
+ debug_log("sending notification to proxytest");\r
+ wfd->applicationCb(asrc, WFDSRC_ERROR_WFD_INVALID_STATE, WFDSRC_STATE_NULL, wfd->user_data);\r
+ }\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
g_print("a : server IP\t");
g_print("b : server port \t");
g_print("c : connect \t");
- g_print("d : display mode\t");
+ g_print("d : display mode\t");
g_print("s : start \t");
g_print("p : pause \t");
g_print("r : resume \t");