2 * Copyright (c) [2012] Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <vconf-keys.h>
24 #include "mp-video-log.h"
25 #include "video-player.h"
26 #include "mp-video-type-define.h"
27 #include "mp-video-string-define.h"
28 #include "mp-video-streaming-ctrl.h"
31 #define NETWORK_TIMEOUT 30.0
33 static MpNetworkType nNetworkStatus = MP_NETWORK_TYPE_OFF;
34 static MpNetworkWifiState nWifiState = MP_NETWORK_WIFI_OFF;
35 static MpNetworkCellularState nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
37 static Ecore_Pipe *pEcorePipeHandleForPause = NULL;
38 static Ecore_Pipe *pEcorePipeHandleForResume = NULL;
40 static Eina_Bool bIsInitCallbackFunc = FALSE;
42 static Ecore_Timer *pNetworkTimeoutTimer = NULL;
50 static void MpVideoStreamingCtrlExitCb(void *pUserData, Evas_Object *pObject,
54 VideoLogInfo("No exist pUserData");
60 VideoAppData *pAppData = (VideoAppData *)pUserData;
62 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
65 static int MpVideoStreamingCtrlResumeCb(void *pUserData)
70 VideoLogInfo("No exist pUserData");
74 VideoAppData *pAppData = (VideoAppData *)pUserData;
76 if (pNetworkTimeoutTimer) {
77 ecore_timer_del(pNetworkTimeoutTimer);
78 pNetworkTimeoutTimer = NULL;
81 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
82 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStartByAppResume(pAppData);
87 static Eina_Bool MpVideoStreamingCtrlPopupCb(void *pUserData)
92 VideoLogInfo("No exist pUserData");
96 VideoAppData *pAppData = (VideoAppData *)pUserData;
98 if (pNetworkTimeoutTimer) {
99 ecore_timer_del(pNetworkTimeoutTimer);
100 pNetworkTimeoutTimer = NULL;
103 MpUtilNotifyPopUp(pAppData, MP_COM_CONNECTION_FAIL, MpVideoStreamingCtrlExitCb);
108 static int MpVideoStreamingCtrlPauseCb(void *pUserData)
113 VideoLogInfo("No exist pUserData");
117 VideoAppData *pAppData = (VideoAppData *)pUserData;
119 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
121 if (pNetworkTimeoutTimer) {
122 ecore_timer_del(pNetworkTimeoutTimer);
123 pNetworkTimeoutTimer = NULL;
126 pNetworkTimeoutTimer = ecore_timer_add(NETWORK_TIMEOUT,
127 MpVideoStreamingCtrlPopupCb,
134 static void MpVideoStreamingCtrlNetworkOnOffCb(keynode_t *pKeyNode,void *pUserData)
138 if (!pUserData || !pKeyNode) {
139 VideoLogInfo("User data is NULL.");
143 char *szkeyname = NULL;
145 szkeyname = vconf_keynode_get_name(pKeyNode);
146 if (!strcmp(szkeyname, VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND)) {
147 switch(vconf_keynode_get_int(pKeyNode))
149 case MP_NETWORK_CLOSE:
150 VideoLogInfo("MP_NETWORK_CLOSE");
151 if(pEcorePipeHandleForPause) {
152 if(!ecore_pipe_write(pEcorePipeHandleForPause,
153 pUserData, sizeof(VideoAppData))) {
154 VideoLogDebug("FAIL PIPE WRITE");
160 VideoLogInfo("MP_NETWORK_ON");
161 if(pEcorePipeHandleForResume) {
162 if(!ecore_pipe_write(pEcorePipeHandleForResume,
163 pUserData, sizeof(VideoAppData))) {
164 VideoLogDebug("FAIL PIPE WRITE");
170 VideoLogInfo("UNKNOWN NETWORK CONFIG");
177 static void MpVideoStreamingCtrlNetworkStatusCb(keynode_t *pKeyNode,void *pUserData)
179 if (!pUserData || !pKeyNode) {
180 VideoLogInfo("User data is NULL.");
185 char *szkeyname = NULL;
187 szkeyname = vconf_keynode_get_name(pKeyNode);
188 if (!strcmp(szkeyname, VCONFKEY_NETWORK_STATUS)) {
189 switch(vconf_keynode_get_int(pKeyNode))
191 case VCONFKEY_NETWORK_OFF:
192 nNetworkStatus = MP_NETWORK_TYPE_OFF;
193 VideoLogInfo("MP_NETWORK_TYPE_OFF");
195 if(pEcorePipeHandleForPause) {
196 if(!ecore_pipe_write(pEcorePipeHandleForPause,
197 pUserData, sizeof(VideoAppData))) {
198 VideoLogDebug("FAIL PIPE WRITE");
204 case VCONFKEY_NETWORK_CELLULAR:
205 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
207 if(pEcorePipeHandleForResume) {
208 if(!ecore_pipe_write(pEcorePipeHandleForResume,
209 pUserData, sizeof(VideoAppData))) {
210 VideoLogDebug("FAIL PIPE WRITE");
213 nNetworkStatus = MP_NETWORK_TYPE_CELLULAR;
217 case VCONFKEY_NETWORK_WIFI:
218 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
220 if(pEcorePipeHandleForResume) {
221 if(!ecore_pipe_write(pEcorePipeHandleForResume,
222 pUserData, sizeof(VideoAppData))) {
223 VideoLogDebug("FAIL PIPE WRITE");
226 nNetworkStatus = MP_NETWORK_TYPE_WIFI;
231 nNetworkStatus = MP_NETWORK_TYPE_OFF;
232 VideoLogInfo("UNKNOWN NETWORK STATE");
233 if(pEcorePipeHandleForPause) {
234 if(!ecore_pipe_write(pEcorePipeHandleForPause,
235 pUserData, sizeof(VideoAppData))) {
236 VideoLogDebug("FAIL PIPE WRITE");
243 if(pEcorePipeHandleForPause) {
244 if(!ecore_pipe_write(pEcorePipeHandleForPause,
245 pUserData, sizeof(VideoAppData))) {
246 VideoLogDebug("FAIL PIPE WRITE");
252 static void MpVideoStreamingCtrlChangeIpCb(keynode_t *pKeyNode, void *pUserData)
256 if (!pUserData || !pKeyNode) {
257 VideoLogInfo("User data is NULL.");
261 char *szkeyname = NULL;
264 szkeyname = vconf_keynode_get_name(pKeyNode);
265 if(szkeyname == NULL) {
266 VideoLogInfo("key name value is NULL");
270 if (!strcmp(szkeyname, VCONFKEY_NETWORK_IP)) {
271 szTmp = vconf_keynode_get_str(pKeyNode);
274 VideoLogInfo("node string value is NULL");
278 VideoLogInfo("Network ip address : %s", szTmp);
281 VideoLogInfo("Invalid ip address.");
285 static void MpVideoStreamingCtrlWiFiStateCb(keynode_t *pKeyNode, void *pUserData)
289 if (!pUserData || !pKeyNode) {
290 VideoLogInfo("User data is NULL.");
294 char *szkeyname = NULL;
296 szkeyname = vconf_keynode_get_name(pKeyNode);
297 if (!strcmp(szkeyname, VCONFKEY_NETWORK_WIFI_STATE)) {
298 switch(vconf_keynode_get_int(pKeyNode))
300 case VCONFKEY_NETWORK_WIFI_OFF:
301 nWifiState = MP_NETWORK_WIFI_OFF;
302 VideoLogInfo("MP_NETWORK_WIFI_OFF");
305 case VCONFKEY_NETWORK_WIFI_NOT_CONNECTED:
306 nWifiState = MP_NETWORK_WIFI_NOT_CONNECTED;
307 VideoLogInfo("MP_NETWORK_WIFI_NOT_CONNECTED");
310 case VCONFKEY_NETWORK_WIFI_CONNECTED:
311 nWifiState = MP_NETWORK_WIFI_CONNECTED;
312 VideoLogInfo("MP_NETWORK_WIFI_CONNECTED");
316 nWifiState = MP_NETWORK_WIFI_OFF;
317 VideoLogInfo("MP_NETWORK_WIFI_OFF - default");
321 nWifiState = MP_NETWORK_WIFI_OFF;
322 VideoLogInfo("MP_NETWORK_WIFI_OFF - invalid value");
326 static void MpVideoStreamingCtrlCellularStateCb(keynode_t *pKeyNode,void *pUserData)
330 if (!pUserData || !pKeyNode) {
331 VideoLogInfo("User data is NULL.");
335 char *szkeyname = NULL;
337 szkeyname = vconf_keynode_get_name(pKeyNode);
338 if (!strcmp(szkeyname, VCONFKEY_NETWORK_CELLULAR_STATE)) {
339 switch(vconf_keynode_get_int(pKeyNode))
341 case VCONFKEY_NETWORK_CELLULAR_ON:
342 nCellularState = MP_NETWORK_CELLULAR_ON;
343 VideoLogInfo("MP_NETWORK_CELLULAR_ON");
346 case VCONFKEY_NETWORK_CELLULAR_3G_OPTION_OFF:
347 nCellularState = MP_NETWORK_CELLULAR_3G_OPTION_OFF;
348 VideoLogInfo("MP_NETWORK_CELLULAR_3G_OPTION_OFF");
351 case VCONFKEY_NETWORK_CELLULAR_ROAMING_OFF:
352 nCellularState = MP_NETWORK_CELLULAR_ROAMING_OFF;
353 VideoLogInfo("MP_NETWORK_CELLULAR_ROAMING_OFF");
356 case VCONFKEY_NETWORK_CELLULAR_FLIGHT_MODE:
357 nCellularState = MP_NETWORK_CELLULAR_FLIGHT_MODE;
358 VideoLogInfo("MP_NETWORK_CELLULAR_FLIGHT_MODE");
361 case VCONFKEY_NETWORK_CELLULAR_NO_SERVICE :
362 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
363 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE");
367 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
368 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - default");
372 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
373 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - invalid value");
377 static void MpVideoStreamingCtrlPipeInit(void *pUserData)
382 VideoLogInfo("No exist pUserData");
386 VideoAppData *pAppData = (VideoAppData *)pUserData;
388 if(pEcorePipeHandleForPause) {
389 ecore_pipe_del(pEcorePipeHandleForPause);
390 pEcorePipeHandleForPause = NULL;
393 pEcorePipeHandleForPause = ecore_pipe_add(
394 (Ecore_Pipe_Cb)MpVideoStreamingCtrlPauseCb,
397 if(pEcorePipeHandleForResume) {
398 ecore_pipe_del(pEcorePipeHandleForResume);
399 pEcorePipeHandleForResume = NULL;
402 pEcorePipeHandleForResume = ecore_pipe_add(
403 (Ecore_Pipe_Cb)MpVideoStreamingCtrlResumeCb,
412 bool MpVideoStreamingCtrlSetNotifyNetworkOnOff(void *pUserData)
415 VideoLogInfo("[ERR] No exist pUserData.");
421 VideoAppData *pAppData = (VideoAppData *)pUserData;
425 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND,
426 MpVideoStreamingCtrlNetworkOnOffCb,
430 VideoLogInfo("[ERR] Fail to set network on/off notification.");
437 bool MpVideoStreamingCtrlSetNotifyNetworkStatus(void *pUserData)
440 VideoLogInfo("[ERR] No exist pUserData.");
446 VideoAppData *pAppData = (VideoAppData *)pUserData;
450 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_STATUS,
451 MpVideoStreamingCtrlNetworkStatusCb,
455 VideoLogInfo("[ERR] Fail to set network status notification.");
462 bool MpVideoStreamingCtrlSetNotifyChangingIp(void *pUserData)
465 VideoLogInfo("[ERR] No exist pUserData.");
471 VideoAppData *pAppData = (VideoAppData *)pUserData;
475 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_IP,
476 MpVideoStreamingCtrlChangeIpCb,
480 VideoLogInfo("[ERR] Fail to set ip address changing notification.");
487 bool MpVideoStreamingCtrlSetNotifyWiFiState(void *pUserData)
490 VideoLogInfo("[ERR] No exist pUserData.");
496 VideoAppData *pAppData = (VideoAppData *)pUserData;
500 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_WIFI_STATE,
501 MpVideoStreamingCtrlWiFiStateCb,
505 VideoLogInfo("[ERR] Fail to set wifi state notification.");
512 bool MpVideoStreamingCtrlSetNotifyCellularState(void *pUserData)
515 VideoLogInfo("[ERR] No exist pUserData.");
521 VideoAppData *pAppData = (VideoAppData *)pUserData;
525 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
526 MpVideoStreamingCtrlCellularStateCb,
530 VideoLogInfo("[ERR] Fail to set cellular notification.");
541 bool MpVideoStreamingCtrlGetIpAddress(char* szRetIpAddress)
547 szTmp = vconf_get_str(VCONFKEY_NETWORK_IP);
549 memset(szRetIpAddress, 0, sizeof(char) * STR_LEN_MAX);
550 strncpy(szRetIpAddress, szTmp, STR_LEN_MAX - 1);
552 VideoLogInfo("Current network ip address : %s", szRetIpAddress);
563 bool MpVideoStreamingCtrlGetProxy(char* szRetProxy)
569 szTmp = vconf_get_str(VCONFKEY_NETWORK_PROXY);
571 memset(szRetProxy, 0, sizeof(char) * STR_LEN_MAX);
572 strncpy(szRetProxy, szTmp, STR_LEN_MAX - 1);
574 VideoLogInfo("Current network ip address : %s", szRetProxy);
585 bool MpVideoStreamingCtrlIsNetworkOn(void)
589 int ntmpCheckNetworkON = 0;
591 if (!vconf_get_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, &ntmpCheckNetworkON)) {
592 switch(ntmpCheckNetworkON)
594 case MP_NETWORK_CLOSE:
595 VideoLogInfo("Network close.");
599 VideoLogInfo("Network on.");
603 VideoLogInfo("Network close.");
609 int MpVideoStreamingCtrlGetNetworkStatus(void)
613 int ntmpGetNetworkStatus = 0;
615 if (!vconf_get_int(VCONFKEY_NETWORK_STATUS, &ntmpGetNetworkStatus)) {
616 switch(ntmpGetNetworkStatus)
618 case VCONFKEY_NETWORK_OFF:
619 nNetworkStatus = MP_NETWORK_TYPE_OFF;
620 VideoLogInfo("MP_NETWORK_TYPE_OFF");
623 case VCONFKEY_NETWORK_CELLULAR:
624 nNetworkStatus = MP_NETWORK_TYPE_CELLULAR;
625 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
628 case VCONFKEY_NETWORK_WIFI:
629 nNetworkStatus = MP_NETWORK_TYPE_WIFI;
630 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
634 nNetworkStatus = MP_NETWORK_TYPE_OFF;
635 VideoLogInfo("MP_NETWORK_TYPE_OFF - default");
639 nNetworkStatus = MP_NETWORK_TYPE_OFF;
640 VideoLogInfo("MP_NETWORK_TYPE_OFF - invalid value");
643 return nNetworkStatus;
646 int MpVideoStreamingCtrlGetWifiState()
650 int ntmpGetWifiState = 0;
652 if (!vconf_get_int(VCONFKEY_NETWORK_WIFI_STATE, &ntmpGetWifiState)) {
653 switch(ntmpGetWifiState)
655 case VCONFKEY_NETWORK_WIFI_OFF:
656 nWifiState = MP_NETWORK_WIFI_OFF;
657 VideoLogInfo("MP_NETWORK_WIFI_OFF");
660 case VCONFKEY_NETWORK_WIFI_NOT_CONNECTED:
661 nWifiState = MP_NETWORK_WIFI_NOT_CONNECTED;
662 VideoLogInfo("MP_NETWORK_WIFI_NOT_CONNECTED");
665 case VCONFKEY_NETWORK_WIFI_CONNECTED:
666 nWifiState = MP_NETWORK_WIFI_CONNECTED;
667 VideoLogInfo("MP_NETWORK_WIFI_CONNECTED");
671 nWifiState = MP_NETWORK_WIFI_OFF;
672 VideoLogInfo("MP_NETWORK_WIFI_OFF - default");
676 nWifiState = MP_NETWORK_WIFI_OFF;
677 VideoLogInfo("MP_NETWORK_WIFI_OFF - invalid value");
684 int MpVideoStreamingCtrlGetCellularState()
688 int ntmpGetCellularState = 0;
690 if (!vconf_get_int(VCONFKEY_NETWORK_CELLULAR_STATE, &ntmpGetCellularState)) {
691 switch(ntmpGetCellularState)
693 case VCONFKEY_NETWORK_CELLULAR_ON:
694 nCellularState = MP_NETWORK_CELLULAR_ON;
695 VideoLogInfo("MP_NETWORK_CELLULAR_ON");
698 case VCONFKEY_NETWORK_CELLULAR_3G_OPTION_OFF:
699 nCellularState = MP_NETWORK_CELLULAR_3G_OPTION_OFF;
700 VideoLogInfo("MP_NETWORK_CELLULAR_3G_OPTION_OFF");
703 case VCONFKEY_NETWORK_CELLULAR_ROAMING_OFF:
704 nCellularState = MP_NETWORK_CELLULAR_ROAMING_OFF;
705 VideoLogInfo("MP_NETWORK_CELLULAR_ROAMING_OFF");
708 case VCONFKEY_NETWORK_CELLULAR_FLIGHT_MODE:
709 nCellularState = MP_NETWORK_CELLULAR_FLIGHT_MODE;
710 VideoLogInfo("MP_NETWORK_CELLULAR_FLIGHT_MODE");
713 case VCONFKEY_NETWORK_CELLULAR_NO_SERVICE :
714 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
715 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE");
719 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
720 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - default");
724 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
725 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - invalid value");
728 return nCellularState;
731 void MpVideoStreamingCtrlDestroy(void *pUserData)
735 if (pNetworkTimeoutTimer) {
736 ecore_timer_del(pNetworkTimeoutTimer);
737 pNetworkTimeoutTimer = NULL;
740 if(pEcorePipeHandleForPause) {
741 ecore_pipe_del(pEcorePipeHandleForPause);
742 pEcorePipeHandleForPause = NULL;
745 if(pEcorePipeHandleForResume) {
746 ecore_pipe_del(pEcorePipeHandleForResume);
747 pEcorePipeHandleForResume = NULL;
753 bool MpVideoStreamingCtrlInit(void *pUserData)
756 VideoLogInfo("[ERR] No exist pUserData.");
762 VideoAppData *pAppData = (VideoAppData *)pUserData;
763 char szTmp[STR_LEN_MAX] = {0};
764 bool bNetworkState = FALSE;
766 if(bIsInitCallbackFunc == EINA_FALSE) {
767 MpVideoStreamingCtrlPipeInit(pUserData);
769 MpVideoStreamingCtrlSetNotifyNetworkStatus(pUserData);
770 MpVideoStreamingCtrlSetNotifyChangingIp(pUserData);
771 MpVideoStreamingCtrlSetNotifyWiFiState(pUserData);
772 MpVideoStreamingCtrlSetNotifyCellularState(pUserData);
774 bIsInitCallbackFunc = EINA_TRUE;
777 if (pNetworkTimeoutTimer) {
778 ecore_timer_del(pNetworkTimeoutTimer);
779 pNetworkTimeoutTimer = NULL;
782 switch(MpVideoStreamingCtrlGetNetworkStatus())
784 case MP_NETWORK_TYPE_OFF:
785 VideoLogInfo("MP_NETWORK_TYPE_OFF");
786 pNetworkTimeoutTimer = ecore_timer_add(NETWORK_TIMEOUT,
787 MpVideoStreamingCtrlPopupCb,
789 bNetworkState = FALSE;
792 case MP_NETWORK_TYPE_CELLULAR:
793 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
794 if(MpVideoStreamingCtrlGetCellularState() == MP_NETWORK_CELLULAR_ON)
795 bNetworkState = TRUE;
798 case MP_NETWORK_TYPE_WIFI:
799 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
800 if(MpVideoStreamingCtrlGetWifiState() == MP_NETWORK_WIFI_CONNECTED)
801 bNetworkState = TRUE;
806 MpVideoStreamingCtrlGetIpAddress(szTmp);
807 VideoLogInfo("Current IP Address : %s", szTmp);
809 memset(szTmp, 0, STR_LEN_MAX);
810 MpVideoStreamingCtrlGetProxy(szTmp);
811 VideoLogInfo("Current Proxy Address : %s", szTmp);
813 memset(pAppData->szProxyAddress, 0, STR_LEN_MAX);
814 strncpy(pAppData->szProxyAddress, szTmp, STR_LEN_MAX - 1);
817 return bNetworkState;