2 * To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
4 * Copyright [2012] [JongDong Lee <jongdong.lee@samsung.com>, ChangSun Lee <cs78.lee@samsung.com>]
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
23 #include <vconf-keys.h>
26 #include "mp-video-log.h"
27 #include "video-player.h"
28 #include "mp-video-type-define.h"
29 #include "mp-video-string-define.h"
30 #include "mp-video-streaming-ctrl.h"
33 #define NETWORK_TIMEOUT 30.0
35 static char szNetworkProxy[STR_LEN_MAX] = {0};
36 static char szNetworkIpAddress[STR_LEN_MAX] = {0};
37 static MpNetworkType nNetworkStatus = MP_NETWORK_TYPE_OFF;
38 static MpNetworkWifiState nWifiState = MP_NETWORK_WIFI_OFF;
39 static MpNetworkCellularState nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
41 static Ecore_Pipe *pEcorePipeHandleForPause = NULL;
42 static Ecore_Pipe *pEcorePipeHandleForResume = NULL;
44 static Eina_Bool bIsInitCallbackFunc = FALSE;
46 static Ecore_Timer *pNetworkTimeoutTimer = NULL;
54 static void MpVideoStreamingCtrlExitCb(void *pUserData, Evas_Object *pObject,
58 VideoLogInfo("No exist pUserData");
64 VideoAppData *pAppData = (VideoAppData *)pUserData;
66 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
69 static int MpVideoStreamingCtrlResumeCb(void *pUserData)
74 VideoLogInfo("No exist pUserData");
78 VideoAppData *pAppData = (VideoAppData *)pUserData;
80 if (pNetworkTimeoutTimer) {
81 ecore_timer_del(pNetworkTimeoutTimer);
82 pNetworkTimeoutTimer = NULL;
85 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
86 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStartByAppResume(pAppData);
91 static Eina_Bool MpVideoStreamingCtrlPopupCb(void *pUserData)
96 VideoLogInfo("No exist pUserData");
100 VideoAppData *pAppData = (VideoAppData *)pUserData;
102 if (pNetworkTimeoutTimer) {
103 ecore_timer_del(pNetworkTimeoutTimer);
104 pNetworkTimeoutTimer = NULL;
107 MpUtilNotifyPopUp(pAppData, _(MP_VPL_CONNECTION_FAIL), MpVideoStreamingCtrlExitCb);
112 static int MpVideoStreamingCtrlPauseCb(void *pUserData)
117 VideoLogInfo("No exist pUserData");
121 VideoAppData *pAppData = (VideoAppData *)pUserData;
123 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
125 if (pNetworkTimeoutTimer) {
126 ecore_timer_del(pNetworkTimeoutTimer);
127 pNetworkTimeoutTimer = NULL;
130 pNetworkTimeoutTimer = ecore_timer_add(NETWORK_TIMEOUT,
131 MpVideoStreamingCtrlPopupCb,
138 static void MpVideoStreamingCtrlNetworkOnOffCb(keynode_t *pKeyNode,void *pUserData)
142 if (!pUserData || !pKeyNode) {
143 VideoLogInfo("User data is NULL.");
147 char *szkeyname = NULL;
149 szkeyname = vconf_keynode_get_name(pKeyNode);
150 if (!strcmp(szkeyname, VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND)) {
151 switch(vconf_keynode_get_int(pKeyNode))
153 case MP_NETWORK_CLOSE:
154 VideoLogInfo("MP_NETWORK_CLOSE");
158 VideoLogInfo("MP_NETWORK_ON");
162 VideoLogInfo("UNKNOWN NETWORK CONFIG");
169 static void MpVideoStreamingCtrlNetworkStatusCb(keynode_t *pKeyNode,void *pUserData)
171 if (!pUserData || !pKeyNode) {
172 VideoLogInfo("User data is NULL.");
177 char *szkeyname = NULL;
179 szkeyname = vconf_keynode_get_name(pKeyNode);
180 if (!strcmp(szkeyname, VCONFKEY_NETWORK_STATUS)) {
181 switch(vconf_keynode_get_int(pKeyNode))
183 case VCONFKEY_NETWORK_OFF:
184 nNetworkStatus = MP_NETWORK_TYPE_OFF;
185 VideoLogInfo("MP_NETWORK_TYPE_OFF");
186 if(pEcorePipeHandleForPause) {
187 if(!ecore_pipe_write(pEcorePipeHandleForPause,
188 pUserData, sizeof(pUserData))) {
189 VideoLogDebug("FAIL PIPE WRITE");
194 case VCONFKEY_NETWORK_CELLULAR:
195 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
196 if(pEcorePipeHandleForResume) {
197 if(!ecore_pipe_write(pEcorePipeHandleForResume,
198 pUserData, sizeof(pUserData))) {
199 VideoLogDebug("FAIL PIPE WRITE");
202 nNetworkStatus = MP_NETWORK_TYPE_CELLULAR;
205 case VCONFKEY_NETWORK_WIFI:
206 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
207 if(pEcorePipeHandleForResume) {
208 if(!ecore_pipe_write(pEcorePipeHandleForResume,
209 pUserData, sizeof(pUserData))) {
210 VideoLogDebug("FAIL PIPE WRITE");
213 nNetworkStatus = MP_NETWORK_TYPE_WIFI;
217 nNetworkStatus = MP_NETWORK_TYPE_OFF;
218 VideoLogInfo("UNKNOWN NETWORK STATE");
219 if(pEcorePipeHandleForPause) {
220 if(!ecore_pipe_write(pEcorePipeHandleForPause,
221 pUserData, sizeof(pUserData))) {
222 VideoLogDebug("FAIL PIPE WRITE");
229 if(pEcorePipeHandleForPause) {
230 if(!ecore_pipe_write(pEcorePipeHandleForPause,
231 pUserData, sizeof(pUserData))) {
232 VideoLogDebug("FAIL PIPE WRITE");
238 static void MpVideoStreamingCtrlChangeIpCb(keynode_t *pKeyNode, void *pUserData)
242 if (!pUserData || !pKeyNode) {
243 VideoLogInfo("User data is NULL.");
247 char *szkeyname = NULL;
250 memset(szNetworkIpAddress, 0, sizeof(char) * STR_LEN_MAX);
251 szkeyname = vconf_keynode_get_name(pKeyNode);
252 if(szkeyname == NULL) {
253 VideoLogInfo("key name value is NULL");
257 if (!strcmp(szkeyname, VCONFKEY_NETWORK_IP)) {
258 szTmp = vconf_keynode_get_str(pKeyNode);
261 VideoLogInfo("node string value is NULL");
265 strncpy(szNetworkIpAddress, szTmp, STR_LEN_MAX - 1);
267 VideoLogInfo("Network ip address : %s", szNetworkIpAddress);
270 VideoLogInfo("Invalid ip address.");
274 static void MpVideoStreamingCtrlWiFiStateCb(keynode_t *pKeyNode, void *pUserData)
278 if (!pUserData || !pKeyNode) {
279 VideoLogInfo("User data is NULL.");
283 char *szkeyname = NULL;
285 szkeyname = vconf_keynode_get_name(pKeyNode);
286 if (!strcmp(szkeyname, VCONFKEY_NETWORK_WIFI_STATE)) {
287 switch(vconf_keynode_get_int(pKeyNode))
289 case VCONFKEY_NETWORK_WIFI_OFF:
290 nWifiState = MP_NETWORK_WIFI_OFF;
291 VideoLogInfo("MP_NETWORK_WIFI_OFF");
294 case VCONFKEY_NETWORK_WIFI_NOT_CONNECTED:
295 nWifiState = MP_NETWORK_WIFI_NOT_CONNECTED;
296 VideoLogInfo("MP_NETWORK_WIFI_NOT_CONNECTED");
299 case VCONFKEY_NETWORK_WIFI_CONNECTED:
300 nWifiState = MP_NETWORK_WIFI_CONNECTED;
301 VideoLogInfo("MP_NETWORK_WIFI_CONNECTED");
305 nWifiState = MP_NETWORK_WIFI_OFF;
306 VideoLogInfo("MP_NETWORK_WIFI_OFF - default");
310 nWifiState = MP_NETWORK_WIFI_OFF;
311 VideoLogInfo("MP_NETWORK_WIFI_OFF - invalid value");
315 static void MpVideoStreamingCtrlCellularStateCb(keynode_t *pKeyNode,void *pUserData)
319 if (!pUserData || !pKeyNode) {
320 VideoLogInfo("User data is NULL.");
324 char *szkeyname = NULL;
326 szkeyname = vconf_keynode_get_name(pKeyNode);
327 if (!strcmp(szkeyname, VCONFKEY_NETWORK_CELLULAR_STATE)) {
328 switch(vconf_keynode_get_int(pKeyNode))
330 case VCONFKEY_NETWORK_CELLULAR_ON:
331 nCellularState = MP_NETWORK_CELLULAR_ON;
332 VideoLogInfo("MP_NETWORK_CELLULAR_ON");
335 case VCONFKEY_NETWORK_CELLULAR_3G_OPTION_OFF:
336 nCellularState = MP_NETWORK_CELLULAR_3G_OPTION_OFF;
337 VideoLogInfo("MP_NETWORK_CELLULAR_3G_OPTION_OFF");
340 case VCONFKEY_NETWORK_CELLULAR_ROAMING_OFF:
341 nCellularState = MP_NETWORK_CELLULAR_ROAMING_OFF;
342 VideoLogInfo("MP_NETWORK_CELLULAR_ROAMING_OFF");
345 case VCONFKEY_NETWORK_CELLULAR_FLIGHT_MODE:
346 nCellularState = MP_NETWORK_CELLULAR_FLIGHT_MODE;
347 VideoLogInfo("MP_NETWORK_CELLULAR_FLIGHT_MODE");
350 case VCONFKEY_NETWORK_CELLULAR_NO_SERVICE :
351 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
352 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE");
356 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
357 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - default");
361 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
362 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - invalid value");
366 static void MpVideoStreamingCtrlPipeInit(void *pUserData)
371 VideoLogInfo("No exist pUserData");
375 VideoAppData *pAppData = (VideoAppData *)pUserData;
377 if(pEcorePipeHandleForPause) {
378 ecore_pipe_del(pEcorePipeHandleForPause);
379 pEcorePipeHandleForPause = NULL;
382 pEcorePipeHandleForPause = ecore_pipe_add(
383 (Ecore_Pipe_Cb)MpVideoStreamingCtrlPauseCb,
386 if(pEcorePipeHandleForResume) {
387 ecore_pipe_del(pEcorePipeHandleForResume);
388 pEcorePipeHandleForResume = NULL;
391 pEcorePipeHandleForResume = ecore_pipe_add(
392 (Ecore_Pipe_Cb)MpVideoStreamingCtrlResumeCb,
401 bool MpVideoStreamingCtrlSetNotifyNetworkOnOff(void *pUserData)
404 VideoLogInfo("[ERR] No exist pUserData.");
410 VideoAppData *pAppData = (VideoAppData *)pUserData;
414 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND,
415 MpVideoStreamingCtrlNetworkOnOffCb,
419 VideoLogInfo("[ERR] Fail to set network on/off notification.");
426 bool MpVideoStreamingCtrlSetNotifyNetworkStatus(void *pUserData)
429 VideoLogInfo("[ERR] No exist pUserData.");
435 VideoAppData *pAppData = (VideoAppData *)pUserData;
439 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_STATUS,
440 MpVideoStreamingCtrlNetworkStatusCb,
444 VideoLogInfo("[ERR] Fail to set network status notification.");
451 bool MpVideoStreamingCtrlSetNotifyChangingIp(void *pUserData)
454 VideoLogInfo("[ERR] No exist pUserData.");
460 VideoAppData *pAppData = (VideoAppData *)pUserData;
464 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_IP,
465 MpVideoStreamingCtrlChangeIpCb,
469 VideoLogInfo("[ERR] Fail to set ip address changing notification.");
476 bool MpVideoStreamingCtrlSetNotifyWiFiState(void *pUserData)
479 VideoLogInfo("[ERR] No exist pUserData.");
485 VideoAppData *pAppData = (VideoAppData *)pUserData;
489 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_WIFI_STATE,
490 MpVideoStreamingCtrlWiFiStateCb,
494 VideoLogInfo("[ERR] Fail to set wifi state notification.");
501 bool MpVideoStreamingCtrlSetNotifyCellularState(void *pUserData)
504 VideoLogInfo("[ERR] No exist pUserData.");
510 VideoAppData *pAppData = (VideoAppData *)pUserData;
514 nRet = vconf_notify_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
515 MpVideoStreamingCtrlCellularStateCb,
519 VideoLogInfo("[ERR] Fail to set cellular notification.");
530 bool MpVideoStreamingCtrlGetIpAddress(char* szRetIpAddress)
536 szTmp = vconf_get_str(VCONFKEY_NETWORK_IP);
538 memset(szNetworkIpAddress, 0, sizeof(char) * STR_LEN_MAX);
539 strncpy(szNetworkIpAddress, szTmp, STR_LEN_MAX - 1);
541 memset(szRetIpAddress, 0, sizeof(char) * STR_LEN_MAX);
542 strncpy(szRetIpAddress, szTmp, STR_LEN_MAX - 1);
544 VideoLogInfo("Current network ip address : %s", szNetworkIpAddress);
555 bool MpVideoStreamingCtrlGetProxy(char* szRetProxy)
561 szTmp = vconf_get_str(VCONFKEY_NETWORK_PROXY);
563 memset(szNetworkProxy, 0, sizeof(char) * STR_LEN_MAX);
564 strncpy(szNetworkProxy, szTmp, STR_LEN_MAX - 1);
566 memset(szRetProxy, 0, sizeof(char) * STR_LEN_MAX);
567 strncpy(szRetProxy, szTmp, STR_LEN_MAX - 1);
569 VideoLogInfo("Current network ip address : %s", szNetworkProxy);
580 bool MpVideoStreamingCtrlIsNetworkOn(void)
584 int ntmpCheckNetworkON = 0;
586 if (!vconf_get_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, &ntmpCheckNetworkON)) {
587 switch(ntmpCheckNetworkON)
589 case MP_NETWORK_CLOSE:
590 VideoLogInfo("Network close.");
594 VideoLogInfo("Network on.");
598 VideoLogInfo("Network close.");
604 int MpVideoStreamingCtrlGetNetworkStatus(void)
608 int ntmpGetNetworkStatus = 0;
610 if (!vconf_get_int(VCONFKEY_NETWORK_STATUS, &ntmpGetNetworkStatus)) {
611 switch(ntmpGetNetworkStatus)
613 case VCONFKEY_NETWORK_OFF:
614 nNetworkStatus = MP_NETWORK_TYPE_OFF;
615 VideoLogInfo("MP_NETWORK_TYPE_OFF");
618 case VCONFKEY_NETWORK_CELLULAR:
619 nNetworkStatus = MP_NETWORK_TYPE_CELLULAR;
620 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
623 case VCONFKEY_NETWORK_WIFI:
624 nNetworkStatus = MP_NETWORK_TYPE_WIFI;
625 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
629 nNetworkStatus = MP_NETWORK_TYPE_OFF;
630 VideoLogInfo("MP_NETWORK_TYPE_OFF - default");
634 nNetworkStatus = MP_NETWORK_TYPE_OFF;
635 VideoLogInfo("MP_NETWORK_TYPE_OFF - invalid value");
638 return nNetworkStatus;
641 int MpVideoStreamingCtrlGetWifiState()
645 int ntmpGetWifiState = 0;
647 if (!vconf_get_int(VCONFKEY_NETWORK_WIFI_STATE, &ntmpGetWifiState)) {
648 switch(ntmpGetWifiState)
650 case VCONFKEY_NETWORK_WIFI_OFF:
651 nWifiState = MP_NETWORK_WIFI_OFF;
652 VideoLogInfo("MP_NETWORK_WIFI_OFF");
655 case VCONFKEY_NETWORK_WIFI_NOT_CONNECTED:
656 nWifiState = MP_NETWORK_WIFI_NOT_CONNECTED;
657 VideoLogInfo("MP_NETWORK_WIFI_NOT_CONNECTED");
660 case VCONFKEY_NETWORK_WIFI_CONNECTED:
661 nWifiState = MP_NETWORK_WIFI_CONNECTED;
662 VideoLogInfo("MP_NETWORK_WIFI_CONNECTED");
666 nWifiState = MP_NETWORK_WIFI_OFF;
667 VideoLogInfo("MP_NETWORK_WIFI_OFF - default");
671 nWifiState = MP_NETWORK_WIFI_OFF;
672 VideoLogInfo("MP_NETWORK_WIFI_OFF - invalid value");
679 int MpVideoStreamingCtrlGetCellularState()
683 int ntmpGetCellularState = 0;
685 if (!vconf_get_int(VCONFKEY_NETWORK_CELLULAR_STATE, &ntmpGetCellularState)) {
686 switch(ntmpGetCellularState)
688 case VCONFKEY_NETWORK_CELLULAR_ON:
689 nCellularState = MP_NETWORK_CELLULAR_ON;
690 VideoLogInfo("MP_NETWORK_CELLULAR_ON");
693 case VCONFKEY_NETWORK_CELLULAR_3G_OPTION_OFF:
694 nCellularState = MP_NETWORK_CELLULAR_3G_OPTION_OFF;
695 VideoLogInfo("MP_NETWORK_CELLULAR_3G_OPTION_OFF");
698 case VCONFKEY_NETWORK_CELLULAR_ROAMING_OFF:
699 nCellularState = MP_NETWORK_CELLULAR_ROAMING_OFF;
700 VideoLogInfo("MP_NETWORK_CELLULAR_ROAMING_OFF");
703 case VCONFKEY_NETWORK_CELLULAR_FLIGHT_MODE:
704 nCellularState = MP_NETWORK_CELLULAR_FLIGHT_MODE;
705 VideoLogInfo("MP_NETWORK_CELLULAR_FLIGHT_MODE");
708 case VCONFKEY_NETWORK_CELLULAR_NO_SERVICE :
709 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
710 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE");
714 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
715 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - default");
719 nCellularState = MP_NETWORK_CELLULAR_NO_SERVICE;
720 VideoLogInfo("MP_NETWORK_CELLULAR_NO_SERVICE - invalid value");
723 return nCellularState;
726 void MpVideoStreamingCtrlDestroy(void *pUserData)
730 if (pNetworkTimeoutTimer) {
731 ecore_timer_del(pNetworkTimeoutTimer);
732 pNetworkTimeoutTimer = NULL;
735 if(pEcorePipeHandleForPause) {
736 ecore_pipe_del(pEcorePipeHandleForPause);
737 pEcorePipeHandleForPause = NULL;
740 if(pEcorePipeHandleForResume) {
741 ecore_pipe_del(pEcorePipeHandleForResume);
742 pEcorePipeHandleForResume = NULL;
748 bool MpVideoStreamingCtrlInit(void *pUserData)
751 VideoLogInfo("[ERR] No exist pUserData.");
757 VideoAppData *pAppData = (VideoAppData *)pUserData;
758 char szTmp[STR_LEN_MAX] = {0};
759 bool bNetworkState = FALSE;
761 if(bIsInitCallbackFunc == EINA_FALSE) {
762 MpVideoStreamingCtrlPipeInit(pUserData);
764 MpVideoStreamingCtrlSetNotifyNetworkStatus(pUserData);
765 MpVideoStreamingCtrlSetNotifyChangingIp(pUserData);
766 MpVideoStreamingCtrlSetNotifyWiFiState(pUserData);
767 MpVideoStreamingCtrlSetNotifyCellularState(pUserData);
769 bIsInitCallbackFunc = EINA_TRUE;
772 if (pNetworkTimeoutTimer) {
773 ecore_timer_del(pNetworkTimeoutTimer);
774 pNetworkTimeoutTimer = NULL;
777 switch(MpVideoStreamingCtrlGetNetworkStatus())
779 case MP_NETWORK_TYPE_OFF:
780 VideoLogInfo("MP_NETWORK_TYPE_OFF");
781 pNetworkTimeoutTimer = ecore_timer_add(NETWORK_TIMEOUT,
782 MpVideoStreamingCtrlPopupCb,
784 bNetworkState = FALSE;
787 case MP_NETWORK_TYPE_CELLULAR:
788 VideoLogInfo("MP_NETWORK_TYPE_CELLULAR");
789 if(MpVideoStreamingCtrlGetCellularState() == MP_NETWORK_CELLULAR_ON)
790 bNetworkState = TRUE;
793 case MP_NETWORK_TYPE_WIFI:
794 VideoLogInfo("MP_NETWORK_TYPE_WIFI");
795 if(MpVideoStreamingCtrlGetWifiState() == MP_NETWORK_WIFI_CONNECTED)
796 bNetworkState = TRUE;
801 MpVideoStreamingCtrlGetIpAddress(szTmp);
802 VideoLogInfo("Current IP Address : %s", szTmp);
804 memset(szTmp, 0, STR_LEN_MAX);
805 MpVideoStreamingCtrlGetProxy(szTmp);
806 VideoLogInfo("Current Proxy Address : %s", szTmp);
808 memset(pAppData->szProxyAddress, 0, STR_LEN_MAX);
809 strncpy(pAppData->szProxyAddress, szTmp, STR_LEN_MAX - 1);
812 return bNetworkState;