int proc_loop(void) { int rc = 0; log_debug("setting working directory ...\n"); if ((mkdir(daemon_cfg.notify_dir, 0777) != 0) && (errno != EEXIST)) { rc = -errno; log_error("failed create folder %s (errno = %d)\n", daemon_cfg.notify_dir, errno); goto err; } log_debug("setting store ...\n"); rc = open_store(); if (rc < 0) { goto err; } log_debug("setting flow ...\n"); rc = open_flow(); if (rc < 0) { goto err; } log_debug("setting notification ...\n"); rc = open_notify(); if (rc < 0) { goto err; } log_debug("setting message processing ...\n"); rc = open_message(); if (rc < 0) { goto err; } log_debug("starting loop ...\n"); while ((0 == daemon_cfg.sig) && (errno != EINTR)) { fd_set readfds; struct timeval tv; int max_fd = -1; FD_ZERO(&readfds); FD_SET(daemon_cfg.sock_fd, &readfds); max_fd = daemon_cfg.sock_fd; FD_SET(daemon_cfg.notify_fd, &readfds); max_fd = (max_fd < daemon_cfg.notify_fd ? daemon_cfg.notify_fd : max_fd); /* Use timeout for select() call */ tv.tv_sec = 60; tv.tv_usec = 0; rc = select(max_fd + 1, &readfds, NULL, NULL, &tv); if (rc < 0) { rc = 0; if (errno != EINTR) { rc = -errno; log_error("Failed select() errno %d (%s)\n", errno, strerror(errno)); } goto err; } else if (rc == 0) { continue; } /* Check messages from processes */ if (FD_ISSET(daemon_cfg.sock_fd, &readfds)) { log_debug("message processing ...\n"); rc = proc_message(); } /* Check any events from file system monitor */ if (FD_ISSET(daemon_cfg.notify_fd, &readfds)) { log_debug("notification processing ...\n"); rc = proc_notify(); } } err: log_debug("finishing loop ...\n"); close_message(); close_notify(); close_flow(); close_store(); return rc; }
RET_CODE on_ca_message_update(control_t *p_ctrl, u16 msg, u32 para1, u32 para2) { u32 event_id = para2; BOOL card_is_removed = FALSE; rect_t ca_notify_rect = { 250, 125, 260 + NOTIFY_CONT_W, 125 + NOTIFY_CONT_H, }; if((g_ca_last_msg == event_id) && (event_id != CAS_S_CLEAR_DISPLAY)) //same msg { return SUCCESS; } if(event_id != CAS_S_ZONE_CHECK_END) { g_ca_last_msg = event_id; } OS_PRINTF("(ui_get_curpg_scramble_flag()) : %d\n",ui_get_curpg_scramble_flag()); switch(event_id)//from CCTB_HUNAN { case CAS_S_ADPT_CARD_INSERT://card insert OS_PRINTF("CAS_S_ADPT_CARD_INSERT\n"); ui_set_smart_card_insert(TRUE); update_ca_message(RSC_INVALID_ID); ui_reset_ca_last_msg(); ui_set_notify(&ca_notify_rect, NOTIFY_TYPE_STRID, IDS_CAS_S_CARD_INSERT); card_is_removed = FALSE; break; case CAS_S_ADPT_CARD_REMOVE://卡移除 OS_PRINTF("CAS_S_ADPT_CARD_REMOVE\n"); ui_set_smart_card_insert(FALSE); { control_t *p_cont = NULL; update_ca_message(RSC_INVALID_ID); ui_reset_ca_last_msg(); if((p_cont = fw_find_root_by_id(ROOT_ID_CA_FINGER)) != NULL) { ui_set_finger_show(FALSE); close_ca_finger_menu(); } if((p_cont = fw_find_root_by_id(ROOT_ID_DIALOG)) != NULL) { ui_comm_dlg_close(); } if((p_cont = fw_find_root_by_id(ROOT_ID_CA_ENTITLE_EXP_DLG)) != NULL) { close_ca_entitle_expire_dlg(); } if((p_cont = fw_find_root_by_id(ROOT_ID_CA_PAIR)) != NULL) { close_ca_pair_dlg(); } if((p_cont = fw_find_root_by_id(ROOT_ID_CA_BURSE_CHARGE)) != NULL) { close_ca_burse_dlg(); } card_is_removed = TRUE; ui_set_notify(&ca_notify_rect, NOTIFY_TYPE_STRID, IDS_CAS_S_CARD_REMOVE); } set_uiokey_status(FALSE); break; case CAS_C_EMM_APP_STOP://智能卡停止服务 OS_PRINTF("CAS_C_EMM_APP_STOP\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_APP_STOP); break; case CAS_C_EMM_APP_RESUME://智能卡恢复服务 OS_PRINTF("CAS_C_EMM_APP_RESUME\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_APP_RESUME); break; case CAS_C_EMM_PROG_UNAUTH://取消节目订购 OS_PRINTF("CAS_C_EMM_PROG_UNAUTH\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_PROG_UNAUTH); break; case CAS_C_EMM_PROG_AUTH://增加节目订购 OS_PRINTF("CAS_C_EMM_PROG_AUTH\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_PROG_AUTH); break; case CAS_C_EMM_UPDATE_GNO://智能卡组号更新 OS_PRINTF("CAS_C_EMM_UPDATE_GNO\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_UPDATE_GNO); break; case CAS_S_CARD_NEED_UPG://智能卡升级请拔插卡 OS_PRINTF("CAS_S_CARD_NEED_UPG\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_E_UPDATE_GK); break; case CAS_S_MODIFY_ZONECODE://区域码更新 OS_PRINTF("CAS_S_MODIFY_ZONECODE\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_CARD_AREA_CODE_UPDATE); break; case CAS_C_NOTIFY_UPDATE_CTRLCODE://智能卡限播码更新 OS_PRINTF("智能卡限播码更新!\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_MODIFY_CTRLCODE); break; case CAS_C_NOTIFY_UPDATE_CRT://授权更新 OS_PRINTF("授权更新!\n"); close_notify(); ui_set_notify(&ca_notify_rect, NOTIFY_TYPE_STRID,IDS_CA_CAS_CARD_ENTITLE_UPDATE); break; case CAS_C_SHOW_NEW_EMAIL://新邮件 OS_PRINTF("CAS_C_SHOW_NEW_EMAIL\n"); update_email_picture(EMAIL_PIC_SHOW); break; case CAS_C_EN_PARTNER://启用机卡匹配 OS_PRINTF("CAS_C_EN_PARTNER\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_START_PAIR); break; case CAS_C_DIS_PARTNER://取消机卡匹配 OS_PRINTF("CAS_C_DIS_PARTNER\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_CARD_REMATCH_CANCEL); break; case CAS_C_SET_SON_CARD://设置子母卡 OS_PRINTF("设置子母卡!\n"); ui_set_notify(&ca_notify_rect,NOTIFY_TYPE_STRID,IDS_CA_SET_MON_SON_CARD); break; case CAS_S_ZONE_CHECK_END: OS_PRINTF("\r\n*** %s :CAS_S_ZONE_CHECK_END ",__FUNCTION__); #ifndef WIN32 on_ca_zone_check_end();//rsc #else ui_desktop_start(); #endif break; case CAS_C_HIDE_NEW_EMAIL: OS_PRINTF("CAS_C_HIDE_NEW_EMAIL\n"); update_email_picture(EMAIL_PIC_HIDE); break; case CAS_S_CLEAR_DISPLAY: OS_PRINTF("CAS_S_CLEAR_DISPLAY\n"); ui_set_playpg_scrambled(FALSE); update_ca_message(RSC_INVALID_ID); ui_set_ecm_msg(FALSE); { control_t *p_cont = NULL; if((p_cont = fw_find_root_by_id(ROOT_ID_CA_PAIR)) != NULL) { close_ca_pair_dlg(); } } break; default: OS_PRINTF("on_ca_message_update : default : event_id = [%d]\n",event_id); break; } if(ui_get_curpg_scramble_flag()) { ui_set_ecm_msg(TRUE); switch(event_id)//from CCTB_HUNAN { case CAS_E_CADR_NOT_ACT://请激活子卡 OS_PRINTF("CAS_E_CADR_NOT_ACT\n"); update_ca_message(IDS_CAS_SON_CADR_NOT_ACT); break; case CAS_C_AUTH_LOGO_DISP://节目预授权 OS_PRINTF("节目预授权!\n"); manage_open_menu(ROOT_ID_CA_PRE_AUTH, 0, 0); break; case CAS_C_UPDATE_BALANCE://IPPV节目 OS_PRINTF("IPPV节目\n"); //manage_open_menu(ROOT_ID_CA_IPPV_PPT_DLG, 0, 0); manage_open_menu(ROOT_ID_CA_PPV_ICON, 0, 0); break; case CAS_E_ZONE_CODE_ERR://区域错误 OS_PRINTF("CAS_E_ZONE_CODE_ERR\n"); update_ca_message(IDS_CA_AREA_CODE_ERR); break; case CAS_E_CADR_NO_MONEY://智能卡余额不足 OS_PRINTF("CAS_E_CADR_NO_MONEY\n"); update_ca_message(IDS_CA_CARD_BALANCE_LESS); break; case CAS_E_PROG_UNAUTH://频道未授权 OS_PRINTF("CAS_E_PROG_UNAUTH\n"); OS_PRINTF("error num %d\n",__LINE__); update_ca_message(IDS_CA_SW1SW2_ECM_NOT_AUTHORIZED); break; case CAS_E_CARD_AUTH_FAILED: OS_PRINTF("智能卡授权错误\n"); update_ca_message(IDS_CA_ILLEGAL_AUTH); break; case CAS_E_CARD_LOCKED://智能卡被锁 OS_PRINTF("CAS_E_CARD_LOCKED\n"); update_ca_message(IDS_CAS_E_CARD_LOCKED); break; case CAS_E_SERVICE_LOCKED://服务已被锁 OS_PRINTF("CAS_E_SERVICE_LOCKED\n"); update_ca_message(IDS_CAS_E_SERVICE_LOCKED); break; case CAS_E_EXTER_AUTHEN://智能卡认证失败 OS_PRINTF("CAS_E_EXTER_AUTHEN\n"); update_ca_message(IDS_CAS_E_CARD_PARTNER_FAILED); break; case CAS_C_IPPT_BUY_OR_NOT://IPP信息 OS_PRINTF("CAS_C_IPPT_BUY_OR_NOT\n"); update_ca_message(IDS_IPPV_PROG); #ifndef WIN32 ui_ca_get_info(CAS_CMD_IPPV_INFO_SYNC_GET, 0,0); #endif break; case CAS_E_CARD_NOT_FOUND://机卡不匹配 OS_PRINTF("CAS_E_CARD_NOT_FOUND\n"); update_ca_message(IDS_CA_E31); break; case CAS_E_CARD_FAILED://智能卡升级失败 OS_PRINTF("CAS_E_CARD_FAILED\n"); update_ca_message(IDS_CAS_E_CARD_UPG_FAILED); break; case CAS_E_NOT_REG_CARD://请插入智能卡 OS_PRINTF("CAS_E_NOT_REG_CARD\n"); update_ca_message(IDS_CRYPTED_PROG_INSERT_SMC); break; case CAS_S_ADPT_CARD_INSERT://智能卡插入,清除提示信息 OS_PRINTF("CAS_S_ADPT_CARD_INSERT\n"); update_ca_message(RSC_INVALID_ID); break; case CAS_C_ENTITLE_CLOSED://授权关闭 update_ca_message(IDS_CA_AUTH_CLOSED); break; case CAS_S_CARD_AUTHEN_UPDATING://授权刷新 update_ca_message(IDS_CA_AUTH_UPDATE); break; case CAS_E_CARD_RENEW_RESET_STB://智能卡状态更新,请重启 update_ca_message(IDS_CA_STATUS_RENEW); break; case CAS_E_CARD_AUTHEN_OVERDUE: OS_PRINTF("CAS_E_CARD_AUTHEN_OVERDUE\n"); update_ca_message(IDS_CA_SW1SW2_EXPIRED); break; case CAS_E_CARD_DATA_GET:// 智能卡数据错误 OS_PRINTF("智能卡数据错误!\n"); update_ca_message(IDS_CA_CARD_DATA_ERROR); break; case CAS_E_ILLEGAL_CARD://智能卡通信错误 OS_PRINTF("智能卡通信错误!\n"); update_ca_message(IDS_CA_CARD_IC_CMD_ERROR); break; case CAS_C_USERCDN_LIMIT_CTRL_ENABLE://该用户被条件限播 OS_PRINTF("该用户被条件限播!\n"); update_ca_message(IDS_CAS_E_CARD_CONDITIONAL_LIMIT); break; case CAS_E_CARD_OPERATE_FAILE://智能卡操作失败 OS_PRINTF("智能卡操作失败!\n"); update_ca_message(IDS_CA_OPERATE_CARD_FAIL); break; case CAS_E_AUTHEN_EXPIRED://有节目授权已经过期,请及时续费 OS_PRINTF("有节目授权已经过期,请及时续费\n"); if(ui_is_fullscreen_menu(fw_get_focus_id())) { manage_open_menu(ROOT_ID_CA_ENTITLE_EXP_DLG, CAS_E_AUTHEN_EXPIRED, 0); } break; default: ui_set_ecm_msg(FALSE); OS_PRINTF("on_ca_message_update : ui_get_curpg_scramble_flag == 1 default : event_id = [%d]\n",event_id); break; } } else { g_ca_last_msg = INVALID_U32; } return SUCCESS; }