From 04ce0292ec65ae607bd796a9e5e3ca1169fa66e6 Mon Sep 17 00:00:00 2001 From: Sooyoung Ha Date: Tue, 17 Jun 2014 18:50:32 +0900 Subject: [PATCH] vmodem: modify the communication channel to ecp. Now, the vmodem-daemon will use the vmodem device to communicate with ECP, not emulator daemon. Change-Id: I5722ea56fea130c8fbd00ca7bc022f0bd05fa48d Signed-off-by: Sooyoung Ha --- vmodem/include/server/phoneserver.h | 82 +- vmodem/server/client.c | 2006 ++++++++++++----------------------- vmodem/server/server.c | 579 +++++----- 3 files changed, 909 insertions(+), 1758 deletions(-) diff --git a/vmodem/include/server/phoneserver.h b/vmodem/include/server/phoneserver.h index 77cf59c..0e55074 100644 --- a/vmodem/include/server/phoneserver.h +++ b/vmodem/include/server/phoneserver.h @@ -33,12 +33,7 @@ #ifndef __phoneserver_h #define __phoneserver_h -#ifdef __arm__ -#include "dpram.h" -//#include "mesgbox_set.h" -#else #include -#endif #include #include @@ -46,8 +41,6 @@ #include #include -//#include - #include "gsmstate.h" #define MAX_MISSED_MESSAGE 64 @@ -63,60 +56,6 @@ typedef enum { typedef struct _Phone_Server PhoneServer; /* --------------------------------------------------------------------------- - IOManager - ---------------------------------------------------------------------------*/ -#ifdef __arm__ -typedef struct -{ - int (*Open) (PhoneServer *); - int (*Close) (PhoneServer *); - void (*SendQuery)(PhoneServer * s, const char * query); - void (*SendCast) (PhoneServer * s, const LXT_MESSAGE * packet); - int (*CallBack) (PhoneServer * s,int fd,EloopCondition cond,void * data); - int (*Init) (PhoneServer *); -} FunctionsIOM; - -extern FunctionsIOM IOMHandle; - -typedef enum -{ - TFactoryCableStatus_off =0x00, - TFactoryCableStatus_on =0x01 -} -TFactoryCableStatus; - -typedef enum -{ - TFactoryCardStatus_off =0x00, - TFactoryCardStatus_on =0x01 -} -TFactoryCardStatus; - -typedef enum -{ - TFactoryMode_exit =0x00, - TFactoryMode_enter =0x01, - TFactoryMode_unknown =0x0f -} -TFactoryMode; - -typedef struct -{ - int fd; - //MBSET mbs; - - signed int _battery_level; - TFactoryCableStatus _factory_cable_status; - TFactoryCardStatus _factory_card_status; - TFactoryMode _factory_mode; - char _calibration_status; - char _earjack_status; - - FunctionsIOM * Functions; -} IOManager; -#endif - -/* --------------------------------------------------------------------------- PPP Gateway : comunicate with ppp gateway for Dial up Networking ---------------------------------------------------------------------------*/ typedef struct @@ -252,21 +191,17 @@ typedef struct extern int vgsm_server_port; -// typedef struct { - //GSM_WaitingCall WaitingCall; // unused LXT_PHONE_STATE CurrentPhoneState; - // char prevCallList[MAX_CALL_COUNT]; - // unsigned short prevCallList[MAX_CALL_COUNT]; gsm_call_list_t prevCallList; bool m_waitingmode; bool m_deviceCall; - int UIMLockType; - int UIMLockKey; - int LastNetState; - int StatePhoneOn; - int GSMDataRequest; + int UIMLockType; + int UIMLockKey; + int LastNetState; + int StatePhoneOn; + int GSMDataRequest; } PhoneServerData; /* --------------------------------------------------------------------------- main structure @@ -284,14 +219,12 @@ extern PhoneServerFunc PhoneServerHandle; struct _Phone_Server { -#ifdef __arm__ - //IOManager Iom; -#endif PPP_GATEWAY PPPGW; DPRAM Dpram; DPRAM_EVENT DpramEvent; DPRAM_ERROR DpramError; Server ServerSocket; + // phone server's data collection PhoneServerData Data; PhoneServerFunc * Functions1; @@ -299,8 +232,6 @@ struct _Phone_Server extern const char * clientName[]; - -////////////////////////////////////////////////////////////////////// // by nsclass : remove implicit warning sign. int PhoneServer_Init(PhoneServer * server, GSM_StateMachine * s); int PhoneServer_Connect(void); @@ -310,5 +241,4 @@ extern PhoneServerFunc * FuncPhoneServer; extern FunctionsServer * FuncServer; extern PhoneServerFunc * FuncPhoneServer; - #endif diff --git a/vmodem/server/client.c b/vmodem/server/client.c index 9a78f17..42df968 100644 --- a/vmodem/server/client.c +++ b/vmodem/server/client.c @@ -29,13 +29,12 @@ #include #include #include +#include #include #include "gsmstate.h" #include "phoneprotocol4gsm.h" #include "vgsm_phone.h" #include "vgsm_ss.h" -// #include -// #include #include "vgsm_sms.h" #include "vgsm_gprs.h" #include "db_gprs.h" @@ -49,7 +48,6 @@ #include "at_tx_sms.h" #include "state.h" -//#include "db_phonebook.h" #include "server_common_security.h" #include "server_common_network.h" #include "vgsm_sim.h" @@ -74,141 +72,36 @@ #include "server_tx_display.h" #include "server_tx_power.h" #include "server_client.h" -/* for temporary power code. so it will be removed */ -#include "at_msg.h" -#include "vgsm_phone.h" -/* end */ + #include #include #define MAX_RESULT_LENGTH 1024 -GSM_Device_Functions * Device; -int smsSentStatus = 0; - -extern GSM_StateMachine GlobalS; - -#define MMI_SC_LENGTH2 14 -#define MMI_SC_LENGTH3 10 - -#define MMS_SEND_OK 10 -#define MMS_SEND_FAIL 11 -#define MMS_MODIFIER 10 - -#if 0 -static char * mmi_sc2[] = -{ - "21", // CFU - "67", // CF Busy - "61", // CF No Reply - "62", // CF Not Reachable - "43", // Call Waiting - "30", // CLIP - "31", // CLIR - "76", // COLP - "77", // COLR - "33", // CB, all outgoing - "35", // CB, all incoming" - "03", // CB, change of password - "04", // Change PIN1 - "05" // Change PUK1 -}; - -static char * mmi_sc3[] = -{ - "331",// CB, outgoing int'l - "332",// CB, outgoing int'l except HOME - "351",// CB, incoming Roaming - "330",// CB, all calls - "333",// CB, all outgoing - "353",// CB, all incoming - "002",// All CF - "004",// All Conditional CF - "042",// Change PIN2 - "052" // Change PUK2 -}; - -static bool isUSSD(char * data) -{ - // ** : register and activate - // * : activate - // *# : interrogate - // # : deactivate - // ## : de-register (and de-activate) - - int start = 0; - int ii; - - if (data[0] == '*' && data[1] == '*') // register and activate - start = 2; - else - if (data[0] == '*' && (data[1] != '*' && data[1] != '#') ) // activate - start = 1; - else - if (data[0] == '*' && data[1] == '#') // interrogate - start = 2; - else - if (data[0] == '#' && (data[1] != '#' && data[1] != '*')) // deactivate - start = 1; - else - if (data[0] == '#' && data[1] == '#') // de-register (and deactivate) - start = 2; - else - TRACE(MSGL_WARN, "Warning : Bad MMI code <%s>\n", data); - - for (ii = 0; ii < MMI_SC_LENGTH2; ii ++) - { - if (strncmp( (const char *)&data[start], mmi_sc2[ii], 2) == 0) // Normal SS SC - return false; - } +GSM_Device_Functions *Device; +int smsSentStatus = 0; - for (ii = 0; ii < MMI_SC_LENGTH3; ii ++) - { - if (strncmp( (const char *)&data[start], mmi_sc3[ii], 3) == 0) // Normal SS SC - return false; - } +extern GSM_StateMachine GlobalS; - return true; -} -#endif +typedef struct _msg_info { + char buf[1024]; -#if 0 -void do_ext(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) -{ - int action = packet->action; - int length = packet->length; - int klass = ci->klass; + uint32_t route; + uint32_t use; + uint16_t count; + uint16_t index; - char * p = (char *)(packet->data); - switch (action) - { - case GSM_EXT_SET_INTERNAL_STATE_REQ : - { - LXT_PHONE_STATE state = (LXT_PHONE_STATE)p[0]; - TRACE(MSGL_VGSM_INFO, "## GSM_EXT_SET_INTERNAL_STATE_REQ %d\n", - (int)state); - FuncPhoneServer->BroadcastInternalStatus( &GlobalPS, - state); - } - break; - - case GSM_EXT_SET_AUDIO_PATH_REQ : - break; - case GSM_EXT_SET_VOICE_VOL_REQ : - break; - case GSM_EXT_SET_IMEI_REQ : - break; - case GSM_EXT_SET_BTMAC_REQ : - break; - case GSM_EXT_GET_BTMAC_REQ : - break; - } -} + unsigned int cclisn; +} msg_info; +#define MMI_SC_LENGTH2 14 +#define MMI_SC_LENGTH3 10 -#endif /* 0 */ +#define MMS_SEND_OK 10 +#define MMS_SEND_FAIL 11 +#define MMS_MODIFIER 10 -// 090326 // restore data in EI +// 090326 // restore data in EI static void do_restore_ei(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) { unsigned char data[MAX_GSM_DIALED_DIGITS_NUMBER+4]; @@ -226,24 +119,23 @@ static void do_restore_ei(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packe get_call_list(callList); - for( i=0; iCallInfo[i].stat == GSM_CALL_STATUS_DIALING || callList->CallInfo[i].stat == GSM_CALL_STATUS_ALERT) - { - data[0] = callList->CallInfo[i].idx; - data[1] = callList->CallInfo[i].call_type; - data[2] = callList->CallInfo[i].num_len; - data[3] = callList->CallInfo[i].stat; - - memset(&data[4], 0, MAX_GSM_DIALED_DIGITS_NUMBER); - memcpy(&data[4], callList->CallInfo[i].number, callList->CallInfo[i].num_len); - MOpacket.data = data; - MOpacket.group = GSM_CALL; - MOpacket.action = GSM_CALL_MAKE_REQ; - MOpacket.length = callList->CallInfo[i].num_len + 4; - - FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_EVENT_INJECTOR, &MOpacket); - } + for( i=0; iCallInfo[i].stat == GSM_CALL_STATUS_DIALING + || callList->CallInfo[i].stat == GSM_CALL_STATUS_ALERT) { + data[0] = callList->CallInfo[i].idx; + data[1] = callList->CallInfo[i].call_type; + data[2] = callList->CallInfo[i].num_len; + data[3] = callList->CallInfo[i].stat; + + memset(&data[4], 0, MAX_GSM_DIALED_DIGITS_NUMBER); + memcpy(&data[4], callList->CallInfo[i].number, callList->CallInfo[i].num_len); + MOpacket.data = data; + MOpacket.group = GSM_CALL; + MOpacket.action = GSM_CALL_MAKE_REQ; + MOpacket.length = callList->CallInfo[i].num_len + 4; + + FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_EVENT_INJECTOR, &MOpacket); + } } free(callList); @@ -256,7 +148,6 @@ static void do_sat(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) { int action = packet->action; - // char * p = (char *)(packet->data); DP_TEXT *dp_text; GET_INKEY *get_inkey; @@ -265,123 +156,39 @@ static void do_sat(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) TRACE(MSGL_VGSM_INFO, "%x\n", action); switch (action) { - case GSM_SAT_PROACTIVE_DISPLAY_TEXT : - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_DISPLAY_TEXT\n"); - - dp_text = (DP_TEXT *)(packet->data); - Display_Text(dp_text); - break; - } - - case GSM_SAT_PROACTIVE_GET_INKEY: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_GET_INKEY\n"); - get_inkey = (GET_INKEY *)(packet->data); - Get_Inkey(get_inkey); - break; - } - - case GSM_SAT_PROACTIVE_GET_INPUT: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_GET_INPUT\n"); - get_input = (GET_INPUT *)(packet->data); - Get_Input(get_input); - break; - } - - case GSM_SAT_PROACTIVE_SET_MENU: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SET_MENU\n"); - Set_Menu(packet->data); - break; - } - - case GSM_SAT_PROACTIVE_SELECT_ITEM: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SELECT_ITEM\n"); - Select_Item(packet->data); - break; - } - case GSM_SAT_PROACTIVE_SEND_SMS: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SEND_SMS\n"); - Send_SMS(packet->data); - break; - } - case GSM_SAT_PROACTIVE_SET_UP_CALL: - { - log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SET_UP_CALL\n"); - Set_Up_Call(packet->data); - break; - } - -#if 0 - case GSM_SAT_ENVELOPE_COMMAND_REQ: - { - GSM_SatEnvelopeCmd cmd; - - cmd.length = length; - cmd.cmd = p; - TxSAT_ExecEnvelopeCommand(&cmd); - } - break; - case GSM_SAT_PROFILE_DOWNLOAD_SET: - { - GSM_SatProfileDown cmd; - - cmd.result_code = length; - memcpy(cmd.usat_profile, p, 20); - TxSAT_SetProfileDownload(&cmd); - } - break; - case GSM_SAT_TERMINATE_SESSION_SET: - { - TxSAT_SetTerminateUSATSession(p); - } - break; - case GSM_SAT_PROVIDE_LOCAL_INFOMATION_GET: - { - unsigned char infoType; - infoType = *p; - TxSAT_GetProvideLocalInfo(infoType); - } - break; - case GSM_SAT_POLLING_GET: - { - GSM_SatPollingGetType cmd; - cmd.pollReqType = *p++; - cmd.present = *p++; - cmd.units = *p++; - cmd.value = *p; - TxSAT_GetPolling(&cmd); - } - break; - case GSM_SAT_REFRESH_GET: - { - GSM_SatRefreshGetType cmd; - cmd.refreshMode = *p++; - cmd.numOfFile = *p++; - cmd.filePathLength = *p++; - memcpy(cmd.fullFilePath, p, 256); - p += 256; - cmd.aidPresent = *p++; - memcpy(cmd.aid, p, 16); - TxSAT_GetRefresh(&cmd); - } - break; - case GSM_SAT_SETUP_EVENT_LIST_GET: - { - GSM_SatEventListGetType cmd; - cmd.length = *p++; - memcpy(cmd.eventList, p, 17); - TxSAT_GetSetupEventList(&cmd); - } - break; -#endif - - default : - break; + case GSM_SAT_PROACTIVE_DISPLAY_TEXT: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_DISPLAY_TEXT\n"); + dp_text = (DP_TEXT *)(packet->data); + Display_Text(dp_text); + break; + case GSM_SAT_PROACTIVE_GET_INKEY: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_GET_INKEY\n"); + get_inkey = (GET_INKEY *)(packet->data); + Get_Inkey(get_inkey); + break; + case GSM_SAT_PROACTIVE_GET_INPUT: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_GET_INPUT\n"); + get_input = (GET_INPUT *)(packet->data); + Get_Input(get_input); + break; + case GSM_SAT_PROACTIVE_SET_MENU: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SET_MENU\n"); + Set_Menu(packet->data); + break; + case GSM_SAT_PROACTIVE_SELECT_ITEM: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SELECT_ITEM\n"); + Select_Item(packet->data); + break; + case GSM_SAT_PROACTIVE_SEND_SMS: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SEND_SMS\n"); + Send_SMS(packet->data); + break; + case GSM_SAT_PROACTIVE_SET_UP_CALL: + log_msg(MSGL_VGSM_INFO,"Client - GSM_SAT_PROACTIVE_SET_UP_CALL\n"); + Set_Up_Call(packet->data); + break; + default : + break; } } @@ -389,19 +196,14 @@ static void do_data(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) { TRACE(MSGL_VGSM_INFO, "\n"); - //GSM_Error error; - int action = packet->action; - //int length = packet->length; - //int client_id = ci->klass; - //char * p = (char *)(packet->data); TRACE(MSGL_VGSM_INFO, "%x\n", action); switch (action) { - case GSM_DATA_STATUS : - server_tx_data_CallStatus(packet); - break; + case GSM_DATA_STATUS : + server_tx_data_CallStatus(packet); + break; } } @@ -415,60 +217,57 @@ static void preprocess_do_gprs(LXT_MESSAGE * packet) // preprocess gprs data from evt injector char *p = (char *)(packet->data); TRACE(MSGL_VGSM_CALL, "\n"); + // clean up gprs db if (g_gprs_conflist.num > 0) { + for (i = 0; i < g_gprs_conflist.num; i++) { + GprsDbEntry rm_entry; - for (i = 0; i < g_gprs_conflist.num; i++) { - GprsDbEntry rm_entry; - - strcpy(rm_entry.apn, g_gprs_conflist.pentry[i].apn); - - vgsm_gprs_database_remove(&rm_entry); - } + strcpy(rm_entry.apn, g_gprs_conflist.pentry[i].apn); + vgsm_gprs_database_remove(&rm_entry); + } } num = *((int *)p); if(num < 0 || num > (254 * sizeof(int)) ) { - TRACE(MSGL_VGSM_INFO, "ERROR!! Invalid value of packet.data.\n"); - return; + TRACE(MSGL_VGSM_INFO, "ERROR!! Invalid value of packet.data.\n"); + return; } pos = p + sizeof(int); for (i = 0; i < num; i++ ) { - strcpy(entry.apn, (char *)pos); - strcpy(entry.intf, (char *)(pos + 255)); + strcpy(entry.apn, (char *)pos); + strcpy(entry.intf, (char *)(pos + 255)); - entry.ipconf.cid = pos[265]; + entry.ipconf.cid = pos[265]; - memcpy((char *)(&(entry.ipconf.fieldflag)), pos + 266, 2); - memcpy((char *)(entry.ipconf.ip_addr), pos + 268, 4); - memcpy((char *)(entry.ipconf.primary_dns), pos + 272, 4); - memcpy((char *)(entry.ipconf.secondary_dns), pos + 276, 4); - memcpy((char *)(entry.ipconf.default_gateway), pos + 280, 4); - memcpy((char *)(entry.ipconf.subnet_mask), pos + 284, 4); + memcpy((char *)(&(entry.ipconf.fieldflag)), pos + 266, 2); + memcpy((char *)(entry.ipconf.ip_addr), pos + 268, 4); + memcpy((char *)(entry.ipconf.primary_dns), pos + 272, 4); + memcpy((char *)(entry.ipconf.secondary_dns), pos + 276, 4); + memcpy((char *)(entry.ipconf.default_gateway), pos + 280, 4); + memcpy((char *)(entry.ipconf.subnet_mask), pos + 284, 4); - // add to gprs db - vgsm_gprs_database_add(&entry); + // add to gprs db + vgsm_gprs_database_add(&entry); - pos += 255 + 10 + 23; + pos += 255 + 10 + 23; } - } static void do_gprs(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) { - int action = packet->action; TRACE(MSGL_VGSM_CALL, "%x\n", action); switch (action) { - case GSM_GPRS_IP_CONFIGURATION: - // process VGSM specific job - preprocess_do_gprs(packet); - server_tx_gprs_IPConfigurationNotify(packet); - break; + case GSM_GPRS_IP_CONFIGURATION: + // process VGSM specific job + preprocess_do_gprs(packet); + server_tx_gprs_IPConfigurationNotify(packet); + break; } } @@ -489,19 +288,14 @@ static void do_display(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) { TRACE(MSGL_VGSM_INFO, "\n"); - //GSM_Error error; - int action = packet->action; - //int length = packet->length; - //int client_id = ci->klass; - //char * p = (char *)(packet->data); TRACE(MSGL_VGSM_CALL, "do_display %x\n", action); switch (action) { - case GSM_DISPLAY_INDICATOR_NOTI : - do_display_indicator(packet); - break; + case GSM_DISPLAY_INDICATOR_NOTI : + do_display_indicator(packet); + break; } } @@ -513,10 +307,6 @@ static void do_power_battery_status(LXT_MESSAGE * packet) assert(packet->length >= 1); level = p[0]; server_tx_battery_status_noti(level); - - /* there seems to be two different messages that notify similar information - send both? */ - if (0) - server_tx_display_icon_info_noti(0x02, 0, level, 0, 0); /* only notify the battery level */ } @@ -527,18 +317,16 @@ static void do_power(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) int action = packet->action; TRACE(MSGL_VGSM_INFO, "do_power %x\n", action); - - switch (action) { - case GSM_POWER_MODEM_ON_REQ: - oem_rx_power_up_exec(); - break; - case GSM_POWER_BATTERY_STATUS_NOTI: - do_power_battery_status(packet); - break; - default: - break; + case GSM_POWER_MODEM_ON_REQ: + oem_rx_power_up_exec(); + break; + case GSM_POWER_BATTERY_STATUS_NOTI: + do_power_battery_status(packet); + break; + default: + break; } } @@ -549,20 +337,20 @@ static void do_network(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) switch (action) { - case GSM_NETWORK_REG_NOTI: - server_tx_net_reg_noti(packet); - break; - - case GSM_NETWORK_PLMN_LIST: - server_tx_net_plmn_list_noti(packet); - break; - - case GSM_NETWORK_CURRENT_PLMN_NOTI: - server_tx_net_current_plmn_noti(packet); - break; - case GSM_NETWORK_CURRENT_NITZ_INFO: - server_tx_net_current_nitz_noti(packet); - break; + case GSM_NETWORK_REG_NOTI: + server_tx_net_reg_noti(packet); + break; + + case GSM_NETWORK_PLMN_LIST: + server_tx_net_plmn_list_noti(packet); + break; + + case GSM_NETWORK_CURRENT_PLMN_NOTI: + server_tx_net_current_plmn_noti(packet); + break; + case GSM_NETWORK_CURRENT_NITZ_INFO: + server_tx_net_current_nitz_noti(packet); + break; } } @@ -586,6 +374,11 @@ static void do_sim(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) STATE current; + int *list = NULL; + char table[10] = {0}; + _SIMD_t *simd_t = NULL; + + get_current_state_machine( ¤t ); TRACE(MSGL_VGSM_INFO, "do_sim %x\n", action); TRACE(MSGL_VGSM_INFO, "current_state=[%x]\n\n", STATE_TYPE(current) ); @@ -593,319 +386,275 @@ static void do_sim(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) switch (action) { - /************************************************************************************/ - /* */ - /* security part */ - /* */ - /************************************************************************************/ - case GSM_SIM_INIT_REQ: - server_sim_db_init(); - break; - - // 090602 - case GSM_SIM_REINIT_REQ: - for(i=0;i<7;i++) - { - db_sim_info_add(i,NULL); - db_sim_data_add(i,NULL); - } - - break; - - case GSM_SIM_STATUS_SET: - { - status = p[0]; - - log_msg(MSGL_VGSM_ERR,"status=[%x]\n",status); - - switch(status) - { - case GSM_SEC_STATUS_PIN_READY: - server_sec_set_sec_status(GSM_SIM_READY); - server_sec_reset_remain_cnt(GSM_SIM_READY); - server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_UNLOCK); - //server_tx_sim_sec_disable_facility(); - break; - - case GSM_SEC_STATUS_PIN_REQ: - server_sec_set_sec_status(GSM_SIM_PIN_REQ_STATE); - server_sec_reset_remain_cnt(GSM_SIM_PIN_REQ_STATE); - server_sec_reset_remain_cnt(GSM_SIM_PUK_REQ); - server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_PUK_REQ: - server_sec_set_sec_status(GSM_SIM_PUK_REQ); - server_sec_set_cnt_zero(GSM_SIM_PIN_REQ_STATE); - server_sec_reset_remain_cnt(GSM_SIM_PUK_REQ); - server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_PIN2_REQ: - server_sec_set_sec2_status(GSM_SIM_PIN2_REQ); - server_sec_reset_remain_cnt(GSM_SIM_PIN2_REQ); - server_sec_reset_remain_cnt(GSM_SIM_PUK2_REQ); - //server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_PUK2_REQ: - server_sec_set_sec2_status(GSM_SIM_PUK2_REQ); - server_sec_set_cnt_zero(GSM_SIM_PIN2_REQ); - server_sec_reset_remain_cnt(GSM_SIM_PUK2_REQ); - //server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_PERM_BLOCKED: - server_sec_set_sec_status(GSM_SIM_FRIZEN); - server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_NO_SIM: - server_sec_set_sec_status(GSM_SIM_NO_SIM); - server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); - break; - - case GSM_SEC_STATUS_PIN2_READY: - server_sec_set_sec2_status(GSM_SIM_PIN2_OK); - server_sec_reset_remain_cnt(GSM_SIM_PIN2_OK); - break; - - default : - log_msg(MSGL_VGSM_ERR,"ERROR -Not handled status =[%d] in sim status set \n", status); - break; - } - } - break; - - case GSM_SIM_CHANGE_PASS_SET : - { - type = p[0]; - password = malloc(length-1); - if(!password) - return; - memcpy(password,&p[1],length-1); - - switch(type) - { - case GSM_SEC_LOCK_TYPE_SC: - server_sec_change_password(password,GSM_SIM_PIN_REQ_STATE,length-1); - break; - - case GSM_SEC_LOCK_TYPE_SC2: - server_sec_change_password(password,GSM_SIM_PIN2_REQ,length-1); - break; -#if 1 // 090215 - case GSM_SEC_LOCL_TYPE_PUK: - server_sec_change_password(password,GSM_SIM_PUKSET_REQ,length-1); - break; - case GSM_SEC_LOCL_TYPE_PUK2: - server_sec_change_password(password,GSM_SIM_PUK2SET_REQ,length-1); - break; -#endif - - default : - log_msg(MSGL_VGSM_ERR,"ERROR -Not handled type =[%d] in change pw \n", type); - break; - } - } - break; - - case GSM_SIM_FACILITY_SET: - { - type = p[0]; - flag = p[1]; - - log_msg(MSGL_VGSM_ERR,"GSM_SIM_FACILITY_SET - type, flag = [%d],[%d]\n", type, flag); - - if(type == GSM_SEC_LOCK_TYPE_SC) - { - server_sec_set_facility(GSM_SIM_FACILITY_PIN,flag); - } - else if( type == GSM_SEC_LOCK_TYPE_FD) - { - server_sec_set_facility(GSM_SIM_FACILITY_FDN,flag); - } - else - { - log_msg(MSGL_VGSM_ERR,"ERROR - Not handled type =[%d] in facility set \n", type); - } - } - break; - - case GSM_SIM_GET_SIM_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_SIM_DB_REQ\n"); - db_sim_sec_restore(VGSM_SIMTypeget); - } - break; - - case GSM_SIMINFO_REQ: - { - int *list; - char table[10]; - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMINFO_REQ\n"); - list = (int*)packet->data; - log_msg(MSGL_VGSM_ERR,"list : %d\n",*list); - - switch(*list) - { - case 0: - strcpy(table, "Tusim_li"); - break; - case 1: - strcpy(table, "Tecc"); - break; - case 2: - strcpy(table, "Tsst"); - break; - case 3: - strcpy(table, "Test"); - break; - case 4: - strcpy(table, "Tcphs"); - break; - case 5: - strcpy(table, "Tspn"); - break; - case 6: - strcpy(table, "Timsi"); - break; - } - db_sim_info_restore(table); - } - break; - - case GSM_SIMDATA_REQ: - { - int *list; - char table[10]; - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMDATA_REQ\n"); - list = (int*)packet->data; - log_msg(MSGL_VGSM_ERR,"list : %d\n",*list); - - switch(*list) - { - case 0: - strcpy(table, "Ticcid"); - break; - case 1: - strcpy(table, "Tusim_li"); - break; - case 2: - strcpy(table, "Tecc"); - break; - case 3: - strcpy(table, "Tsst"); - break; - case 4: - strcpy(table, "Test"); - break; - case 5: - strcpy(table, "Tspn"); - break; - case 6: - strcpy(table, "Timsi"); - break; - } - db_sim_data_restore(table); - } - break; - - case GSM_SIMSAVE_REQ: - { - _SIMD_t *simd_t; - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMDATA_REQ\n"); - - simd_t = (_SIMD_t*)packet->data; - - log_msg(MSGL_VGSM_ERR,"1. type1 : %d, type2 : %d, size : %d\n",simd_t->type1, simd_t->type2, simd_t->size); - log_msg(MSGL_VGSM_ERR,"2. data : %x, %x, %x\n",simd_t->tmp[0], simd_t->tmp[1], simd_t->tmp[2]); - - if(simd_t->type1 == 0) - db_sim_info_add(simd_t->type2, simd_t); - else if(simd_t->type1 == 1) - db_sim_data_add(simd_t->type2, simd_t); - else - log_msg(MSGL_VGSM_ERR,"ERROR, type1 : %d, type2 : %d\n", simd_t->type1, simd_t->type2); - } - break; - - - /************************************************************************************/ - /* */ - /* Phonebook part */ - /* */ - /************************************************************************************/ - - case GSM_SIM_MAKE_PB_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_MAKE_PB_DB_REQ\n"); - db_sim_pb_create(); - } - break; - - case GSM_SIM_ADD_PB_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_ADD_PB_DB_REQ\n"); - - pb = (PB *)(packet->data); - db_sim_pb_set_mgr(pb->db_st_type,1); - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_ADD_PB_DB_REQ : %d , %s ,%s, %s\n",pb->db_st_type,pb->name,pb->number,pb->address); - - db_sim_pb_add(pb); - db_sim_pb_restore(pb); - - } - break; - - case GSM_SIM_GET_PB_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_PB_DB_REQ\n"); - - pb = (PB *)(packet->data); - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_PB_DB_REQ : %d , %s \n",pb->db_st_type,pb->name); - - db_sim_pb_get(pb); - db_sim_pb_restore(pb); - } - break; - - case GSM_SIM_DELETE_PB_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_DELETE_PB_DB_REQ\n"); - - pb = (PB *)(packet->data); - db_sim_pb_set_mgr(pb->db_st_type,1); - - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_DELETE_PB_DB_REQ : %d , %s \n",pb->db_st_type,pb->name); - - db_sim_pb_remove(pb); - db_sim_pb_restore(pb); - } - break; - - case GSM_SIM_GET_ALL_PB_DB_REQ: - { - log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_ALL_PB_DB_REQ\n"); - - pb = (PB *)(packet->data); - //db_sim_pb_set_mgr(pb->db_st_type,1); - - db_sim_pb_restore(pb); - } - break; - - default: - log_msg(MSGL_VGSM_ERR,"ERROR - Not handled action =[%x] \n", action); - break; + /****************************************************************************/ + /* */ + /* security part */ + /* */ + /****************************************************************************/ + case GSM_SIM_INIT_REQ: + server_sim_db_init(); + break; + + // 090602 + case GSM_SIM_REINIT_REQ: + for(i=0;i<7;i++) { + db_sim_info_add(i,NULL); + db_sim_data_add(i,NULL); + } + + break; + + case GSM_SIM_STATUS_SET: + status = p[0]; + + log_msg(MSGL_VGSM_ERR,"status=[%x]\n",status); + + switch(status) + { + case GSM_SEC_STATUS_PIN_READY: + server_sec_set_sec_status(GSM_SIM_READY); + server_sec_reset_remain_cnt(GSM_SIM_READY); + server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_UNLOCK); + break; + + case GSM_SEC_STATUS_PIN_REQ: + server_sec_set_sec_status(GSM_SIM_PIN_REQ_STATE); + server_sec_reset_remain_cnt(GSM_SIM_PIN_REQ_STATE); + server_sec_reset_remain_cnt(GSM_SIM_PUK_REQ); + server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); + break; + + case GSM_SEC_STATUS_PUK_REQ: + server_sec_set_sec_status(GSM_SIM_PUK_REQ); + server_sec_set_cnt_zero(GSM_SIM_PIN_REQ_STATE); + server_sec_reset_remain_cnt(GSM_SIM_PUK_REQ); + server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); + break; + + case GSM_SEC_STATUS_PIN2_REQ: + server_sec_set_sec2_status(GSM_SIM_PIN2_REQ); + server_sec_reset_remain_cnt(GSM_SIM_PIN2_REQ); + server_sec_reset_remain_cnt(GSM_SIM_PUK2_REQ); + break; + + case GSM_SEC_STATUS_PUK2_REQ: + server_sec_set_sec2_status(GSM_SIM_PUK2_REQ); + server_sec_set_cnt_zero(GSM_SIM_PIN2_REQ); + server_sec_reset_remain_cnt(GSM_SIM_PUK2_REQ); + break; + + case GSM_SEC_STATUS_PERM_BLOCKED: + server_sec_set_sec_status(GSM_SIM_FRIZEN); + server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); + break; + + case GSM_SEC_STATUS_NO_SIM: + server_sec_set_sec_status(GSM_SIM_NO_SIM); + server_sec_set_facility(GSM_SIM_FACILITY_PIN, GSM_SEC_LOCK_MODE_LOCK); + break; + + case GSM_SEC_STATUS_PIN2_READY: + server_sec_set_sec2_status(GSM_SIM_PIN2_OK); + server_sec_reset_remain_cnt(GSM_SIM_PIN2_OK); + break; + + default : + log_msg(MSGL_VGSM_ERR,"ERROR -Not handled status =[%d] in sim status set \n", status); + break; + } + break; + + case GSM_SIM_CHANGE_PASS_SET : + type = p[0]; + password = malloc(length-1); + if(!password) { + return; + } + memcpy(password,&p[1],length-1); + + switch(type) + { + case GSM_SEC_LOCK_TYPE_SC: + server_sec_change_password(password,GSM_SIM_PIN_REQ_STATE,length-1); + break; + + case GSM_SEC_LOCK_TYPE_SC2: + server_sec_change_password(password,GSM_SIM_PIN2_REQ,length-1); + break; + case GSM_SEC_LOCL_TYPE_PUK: + server_sec_change_password(password,GSM_SIM_PUKSET_REQ,length-1); + break; + case GSM_SEC_LOCL_TYPE_PUK2: + server_sec_change_password(password,GSM_SIM_PUK2SET_REQ,length-1); + break; + default : + log_msg(MSGL_VGSM_ERR,"ERROR -Not handled type =[%d] in change pw \n", type); + break; + } + break; + + case GSM_SIM_FACILITY_SET: + type = p[0]; + flag = p[1]; + + log_msg(MSGL_VGSM_ERR,"GSM_SIM_FACILITY_SET - type, flag = [%d],[%d]\n", type, flag); + + if(type == GSM_SEC_LOCK_TYPE_SC) { + server_sec_set_facility(GSM_SIM_FACILITY_PIN,flag); + } else if( type == GSM_SEC_LOCK_TYPE_FD) { + server_sec_set_facility(GSM_SIM_FACILITY_FDN,flag); + } else { + log_msg(MSGL_VGSM_ERR,"ERROR - Not handled type =[%d] in facility set \n", type); + } + break; + + case GSM_SIM_GET_SIM_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_SIM_DB_REQ\n"); + db_sim_sec_restore(VGSM_SIMTypeget); + break; + + case GSM_SIMINFO_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMINFO_REQ\n"); + list = (int*)packet->data; + log_msg(MSGL_VGSM_ERR,"list : %d\n",*list); + + switch(*list) + { + case 0: + strcpy(table, "Tusim_li"); + break; + case 1: + strcpy(table, "Tecc"); + break; + case 2: + strcpy(table, "Tsst"); + break; + case 3: + strcpy(table, "Test"); + break; + case 4: + strcpy(table, "Tcphs"); + break; + case 5: + strcpy(table, "Tspn"); + break; + case 6: + strcpy(table, "Timsi"); + break; + } + db_sim_info_restore(table); + break; + + case GSM_SIMDATA_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMDATA_REQ\n"); + list = (int*)packet->data; + log_msg(MSGL_VGSM_ERR,"list : %d\n",*list); + + switch(*list) + { + case 0: + strcpy(table, "Ticcid"); + break; + case 1: + strcpy(table, "Tusim_li"); + break; + case 2: + strcpy(table, "Tecc"); + break; + case 3: + strcpy(table, "Tsst"); + break; + case 4: + strcpy(table, "Test"); + break; + case 5: + strcpy(table, "Tspn"); + break; + case 6: + strcpy(table, "Timsi"); + break; + } + db_sim_data_restore(table); + break; + + case GSM_SIMSAVE_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIMDATA_REQ\n"); + + simd_t = (_SIMD_t*)packet->data; + + log_msg(MSGL_VGSM_ERR,"1. type1 : %d, type2 : %d, size : %d\n",simd_t->type1, simd_t->type2, simd_t->size); + log_msg(MSGL_VGSM_ERR,"2. data : %x, %x, %x\n",simd_t->tmp[0], simd_t->tmp[1], simd_t->tmp[2]); + + if(simd_t->type1 == 0) + db_sim_info_add(simd_t->type2, simd_t); + else if(simd_t->type1 == 1) + db_sim_data_add(simd_t->type2, simd_t); + else + log_msg(MSGL_VGSM_ERR,"ERROR, type1 : %d, type2 : %d\n", simd_t->type1, simd_t->type2); + break; + + + /*************************************************************************/ + /* */ + /* Phonebook part */ + /* */ + /*************************************************************************/ + + case GSM_SIM_MAKE_PB_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_MAKE_PB_DB_REQ\n"); + db_sim_pb_create(); + break; + + case GSM_SIM_ADD_PB_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_ADD_PB_DB_REQ\n"); + + pb = (PB *)(packet->data); + db_sim_pb_set_mgr(pb->db_st_type,1); + + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_ADD_PB_DB_REQ : %d , %s ,%s, %s\n",pb->db_st_type,pb->name,pb->number,pb->address); + + db_sim_pb_add(pb); + db_sim_pb_restore(pb); + + break; + + case GSM_SIM_GET_PB_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_PB_DB_REQ\n"); + + pb = (PB *)(packet->data); + + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_PB_DB_REQ : %d , %s \n",pb->db_st_type,pb->name); + + db_sim_pb_get(pb); + db_sim_pb_restore(pb); + break; + + case GSM_SIM_DELETE_PB_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_DELETE_PB_DB_REQ\n"); + + pb = (PB *)(packet->data); + db_sim_pb_set_mgr(pb->db_st_type,1); + + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_DELETE_PB_DB_REQ : %d , %s \n",pb->db_st_type,pb->name); + + db_sim_pb_remove(pb); + db_sim_pb_restore(pb); + break; + + case GSM_SIM_GET_ALL_PB_DB_REQ: + log_msg(MSGL_VGSM_ERR,"action ->GSM_SIM_GET_ALL_PB_DB_REQ\n"); + + pb = (PB *)(packet->data); + + db_sim_pb_restore(pb); + break; + + default: + log_msg(MSGL_VGSM_ERR,"ERROR - Not handled action =[%x] \n", action); + break; } if(password) - free(password); + free(password); } @@ -916,132 +665,104 @@ static void do_sups(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) switch (action) { - case GSM_SUPS_CONFERENCE: - server_tx_ss_state( SS_STATE_CONFERENCE ); - break; - case GSM_SUPS_HOLD: - server_tx_ss_state( SS_STATE_HOLD ); - break; - case GSM_SUPS_UNHOLD: - server_tx_ss_state( SS_STATE_UNHOLD ); - break; - - case GSM_SUPS_SET_CW_REQ : - server_tx_ss_cw_set_req( packet); - break; - - case GSM_SUPS_SET_CCFC_REQ: - server_tx_ss_ccfc_set_req(packet); - break; - - case GSM_SUPS_SET_CB_REQ: - server_tx_ss_cb_set_req(packet); - break; -#if 1 - case GSM_SUPS_AOC_GET: - server_tx_ss_aoc_get_req(packet); - break; - case GSM_SUPS_AOC_SET: - server_tx_ss_aoc_set_req(packet); - break; -#endif - // 090330 090406 ////////////////////////////////////////////// - case GSM_SUPS_CW_SET: - server_tx_ss_cw_set_req(packet); - break; - - /* - case GSM_SUPS_CW_GET: - server_tx_ss_cw_get_req(packet); - break; - */ - - case GSM_SUPS_CF_SET: - server_tx_ss_cf_set_req(packet); - break; - - /* - case GSM_SUPS_CF_GET: - server_tx_ss_cf_get_req(packet); - break; - */ - - case GSM_SUPS_CB_SET: - server_tx_ss_cb_set_req(packet); - break; - - /* - case GSM_SUPS_CB_GET: - server_tx_ss_cb_get_req(packet); - break; - */ - - //090406////////////////////////////////////////////////////////// - - case GSM_SUPS_USSD_SET : - server_tx_ss_ussd_set_req(packet); - break; - - case GSM_SUPS_USSD_GET : - server_tx_ss_ussd_get_req(packet); - break; - - default : - TRACE(MSGL_VGSM_INFO, "do_sups no handle = %x\n", action); + case GSM_SUPS_CONFERENCE: + server_tx_ss_state( SS_STATE_CONFERENCE ); + break; + case GSM_SUPS_HOLD: + server_tx_ss_state( SS_STATE_HOLD ); + break; + case GSM_SUPS_UNHOLD: + server_tx_ss_state( SS_STATE_UNHOLD ); + break; + + case GSM_SUPS_SET_CW_REQ : + server_tx_ss_cw_set_req( packet); + break; + + case GSM_SUPS_SET_CCFC_REQ: + server_tx_ss_ccfc_set_req(packet); + break; + + case GSM_SUPS_SET_CB_REQ: + server_tx_ss_cb_set_req(packet); + break; + case GSM_SUPS_AOC_GET: + server_tx_ss_aoc_get_req(packet); + break; + case GSM_SUPS_AOC_SET: + server_tx_ss_aoc_set_req(packet); + break; + // 090330 090406 ////////////////////////////////////////////// + case GSM_SUPS_CW_SET: + server_tx_ss_cw_set_req(packet); + break; + case GSM_SUPS_CF_SET: + server_tx_ss_cf_set_req(packet); + break; + case GSM_SUPS_CB_SET: + server_tx_ss_cb_set_req(packet); + break; + //090406////////////////////////////////////////////////////////// + case GSM_SUPS_USSD_SET : + server_tx_ss_ussd_set_req(packet); + break; + case GSM_SUPS_USSD_GET : + server_tx_ss_ussd_get_req(packet); + break; + default : + TRACE(MSGL_VGSM_INFO, "do_sups no handle = %x\n", action); } } -static void do_emulator(PhoneServer * ps, - TClientInfo * ci, LXT_MESSAGE * packet) +static void do_emulator(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) { int action = packet->action; TRACE(MSGL_VGSM_INFO, "do_emulator %x\n", action); switch (action) { - case GSM_EMULATOR_HDLC_REQ: - ATTxEmulator_HDLC_Req(packet); - break; - case GSM_EMULATOR_HDLC_MODE: - ATTxEmulator_HDLC_Mode(packet); - break; - case GSM_EMULATOR_HDLC_CLEAR: - ATTxEmulator_HDLC_Clear(); - break; - case GSM_EMULATOR_SET_CALL_GENERAL_RESPONSE_ERROR: - ATTxEmulator_Set_General_Response_Error(packet); - break; - case GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR: - ATTxEmulator_Set_SS_General_Response_Error(packet); - break; - case GSM_EMULATOR_SET_CALL_STATUS_ERROR: - ATTxEmulator_Set_Call_Status_Error(packet); - break; - case GSM_EMULATOR_SET_SCA: - ATTxEmulator_Set_SCA(packet); - break; - // ss error cause set - case GSM_EMULATOR_SET_SS_HOLD_RESPONSE_ERROR: - case GSM_EMULATOR_SET_SS_RETRIEVE_RESPONSE_ERROR: - case GSM_EMULATOR_SET_SS_JOIN_RESPONSE_ERROR: - case GSM_EMULATOR_SET_SS_SPLIT_RESPONSE_ERROR: - case GSM_EMULATOR_SET_SS_TRANSFER_RESPONSE_ERROR: - ATTxEmulator_Set_SS_Response_Error(packet, action); - break; + case GSM_EMULATOR_HDLC_REQ: + ATTxEmulator_HDLC_Req(packet); + break; + case GSM_EMULATOR_HDLC_MODE: + ATTxEmulator_HDLC_Mode(packet); + break; + case GSM_EMULATOR_HDLC_CLEAR: + ATTxEmulator_HDLC_Clear(); + break; + case GSM_EMULATOR_SET_CALL_GENERAL_RESPONSE_ERROR: + ATTxEmulator_Set_General_Response_Error(packet); + break; + case GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR: + ATTxEmulator_Set_SS_General_Response_Error(packet); + break; + case GSM_EMULATOR_SET_CALL_STATUS_ERROR: + ATTxEmulator_Set_Call_Status_Error(packet); + break; + case GSM_EMULATOR_SET_SCA: + ATTxEmulator_Set_SCA(packet); + break; + // ss error cause set + case GSM_EMULATOR_SET_SS_HOLD_RESPONSE_ERROR: + case GSM_EMULATOR_SET_SS_RETRIEVE_RESPONSE_ERROR: + case GSM_EMULATOR_SET_SS_JOIN_RESPONSE_ERROR: + case GSM_EMULATOR_SET_SS_SPLIT_RESPONSE_ERROR: + case GSM_EMULATOR_SET_SS_TRANSFER_RESPONSE_ERROR: + ATTxEmulator_Set_SS_Response_Error(packet, action); + break; } } -static void do_client(PhoneServer * ps, - TClientInfo * ci, LXT_MESSAGE * packet) +static void do_client(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) { int action = packet->action; TRACE(MSGL_VGSM_INFO, "do_client %x\n", action); switch (action) { - case GSM_CLIENT_RELEASE_NOTI: - server_client_release_noti(); - break; + case GSM_CLIENT_RELEASE_NOTI: + server_client_release_noti(); + break; } } @@ -1055,112 +776,26 @@ static void do_sms(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) TRACE(MSGL_VGSM_INFO, "do_sms %x\n", action); switch (action) { - case GSM_SMS_SEND_MSG_REQ: - server_tx_sms_notiIncomingMsg(packet); - break; - case GSM_SMS_SEND_ACK_REQ: - p = (unsigned char *)packet->data; - if((int)p[0] == MMS_SEND_OK || (int)p[0] == MMS_SEND_FAIL){ - sprintf(vconf_cmd, "vconftool set -t int memory/telephony/mms_sent_status %d -i -f", ((int)p[0] - MMS_MODIFIER)); - TRACE(MSGL_VGSM_INFO, "system : %s\n", vconf_cmd); - system(vconf_cmd); - } else { - smsSentStatus = (int)p[0]; - } - - server_tx_sms_ReceiveAckMsg(packet); - break; - case GSM_SMS_INCOMING_CB_MSG_REQ: - server_tx_sms_NotiIncomingCBMsg(packet); - break; -#if 0 - case GSM_SMS_SEND_MSG_REQ: - TxSMS_ExecSendMsg(packet); - break; - case GSM_SMS_READ_MSG_REQ: - TxSMS_GetReadMsg(packet); - break; - case GSM_SMS_SAVE_MSG_REQ: - TxSMS_ExecSaveMsg(packet); // by luxmea - break; - case GSM_SMS_DEL_MSG_REQ: - TxSMS_ExecDeleteMsg(packet); - break; - case GSM_SMS_SEND_ACK_REQ: - TxSMS_SetSendAck(packet); - break; - case GSM_SMS_GET_SEL_MEM_REQ: - TxSMS_GetSelectMem(packet); - break; - case GSM_SMS_SET_SEL_MEM_REQ: - TxSMS_SetSelectMem(packet); - break; - case GSM_SMS_STORED_MSG_CNT_REQ: - TxSMS_GetStoredMsgCount(packet); - break; - case GSM_SMS_GET_MSG_CONFIG_REQ: - TxSMS_GetMsgConfig(packet); - break; - case GSM_SMS_SET_MSG_CONFIG_REQ: - TxSMS_SetMsgConfig(packet); - break; - case GSM_SMS_GET_SVC_OPTION_REQ: - TxSMS_GetSvcOption(packet); - break; - case GSM_SMS_SET_SVC_OPTION_REQ: - TxSMS_SetSvcOption(packet); - break; - case GSM_SMS_MEM_FULL_REQ: - TxSMS_SetMemFull(packet); - break; - case GSM_SMS_GET_CB_CONFIG_REQ: - TxSMS_GetCBConfig(packet); - break; - case GSM_SMS_SET_CB_CONFIG_REQ: - TxSMS_SetCBConfig(packet); - break; - case GSM_SMS_SET_MSG_STATUS_REQ: - TxSMS_SetMsgStatus(packet); - break; - case GSM_SMS_SET_BLK_LIST_REQ: - TxSMS_SetBlkList(packet); - break; - default: - TxSMS_DefaultSms(0, 0); - break; -#endif /* 0 */ + case GSM_SMS_SEND_MSG_REQ: + server_tx_sms_notiIncomingMsg(packet); + break; + case GSM_SMS_SEND_ACK_REQ: + p = (unsigned char *)packet->data; + if((int)p[0] == MMS_SEND_OK || (int)p[0] == MMS_SEND_FAIL){ + sprintf(vconf_cmd, "vconftool set -t int memory/telephony/mms_sent_status %d -i -f", ((int)p[0] - MMS_MODIFIER)); + TRACE(MSGL_VGSM_INFO, "system : %s\n", vconf_cmd); + system(vconf_cmd); + } else { + smsSentStatus = (int)p[0]; + } + + server_tx_sms_ReceiveAckMsg(packet); + break; + case GSM_SMS_INCOMING_CB_MSG_REQ: + server_tx_sms_NotiIncomingCBMsg(packet); + break; } - -#if 0 - char AT_Result[MAX_RESULT_LENGTH] = {0, }; - - memcpy(buffer, p, length); - - error = SMSFunc->SendMessage(&GlobalS, buffer, AT_Result); - - if (error == ERR_TIMEOUT) - TRACE(MSGL_VGSM_INFO, "MS TIMEOUT Error\n"); - else - { - FuncResponse->ResponseSMS(klass, AT_Result); - } -#endif -} - -#if 0 -static int IsFligthMode() -{ -#ifdef __arm__ - int fd; - fd = open("/setting/flightmode.conf\n", O_RDONLY); - - if (fd != -1) - return 1; - -#endif - return 0; } -#endif /* 0 */ static void do_internal(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) { @@ -1168,138 +803,62 @@ static void do_internal(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet int clientfd = ci->fd; int action = packet->action; int length = packet->length; + int clientid; TRACE(MSGL_VGSM_INFO, "do_internal %x\n", action); char * p = (char *)(packet->data); + LXT_MESSAGE tmgs; + Server * server = &ps->ServerSocket; switch (action) { - case LXT_PDA_INTERNAL_ID_REQUEST : - { - int clientid; - - clientid = (int)packed_S32((unsigned char *)p); - if(clientid == 0) - TRACE(MSGL_VGSM_INFO, "ERROR!! Invalid value of clientid.\n"); - ci->klass = clientid; - TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_ID_REQUEST [0x%x]: %s\n", clientid, clientName[clientid]); - - // nsclass : when user change language setting. - /* - if (LXT_ID_CLIENT_INDICATOR == clientid) { - if (!IsFligthMode()) { - if (LXT_STATE_OFF == FuncPhoneServer->GetInternalState(&GlobalPS)) { - GSM_PhonePowerOn(0); - } - } - } - */ - /******************/ - } - break; - - case LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST : - { - Server * server = &ps->ServerSocket; - TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST \n"); - if (server != NULL) - { - server->Functions->CastMissedMessage(ps, klass, clientfd); - } - } - break; - - case LXT_PDA_INTERNAL_STATE_REQUEST : - { - TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST ..WARNING: it's not implemented\n"); - // nsclass : when user change language setting. phone power off sound - /* - if (LXT_ID_CLIENT_INDICATOR == klass) { - if (!IsFligthMode()) - return; - } - FuncPhoneServer->CastCurrentInternalStatus(&GlobalPS, klass); - */ - /******************/ - break; - } - - case LXT_PDA_INTERNAL_LAUNCH_SAT_APP_REQUEST: - { - LXT_MESSAGE packet; - TAPIMessageInit(&packet); - TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_LAUNCH_SAT_APP_REQUEST\n"); - packet.group = LXT_GRP_INTERNAL; - packet.action = LXT_PDA_INTERNAL_LAUNCH_SAT_APP_RESPONSE; - FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_CARD_MANAGER, &packet); - } - break; - case LXT_PDA_INTERNAL_SETUP_SAT_APP_REQUEST: - { - LXT_MESSAGE packet; - TAPIMessageInit(&packet); - TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_SETUP_SAT_APP_REQUEST\n"); - packet.group = LXT_GRP_INTERNAL; - packet.action = LXT_PDA_INTERNAL_SETUP_SAT_APP_RESPONSE; - packet.length = length; - packet.data = (void *)p; - FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_CARD_MANAGER, &packet); - } - break; - - case LXT_PDA_INTERNAL_PHONE_BATTERY_REQUEST: - { - TRACE(MSGL_VGSM_INFO, "Request phone battery\n"); - log_msg(MSGL_VGSM_INFO,"WARNING: it's not implemented \n"); - } - break; - default : - break; - } -} - -#if 0 -void do_power(PhoneServer* ps, TClientInfo * ci, LXT_MESSAGE * packet) -{ - GSM_Error error; - - int action = packet->action; - int length = packet->length; - - char * p = (char *)(packet->data); - - switch (action) - { - case LXT_PDA_POWER_ON_REQUEST : - /* - * Interanl state\B4\C2 \BD\C7\C1\A6 dpram event\BF\A1\BC\AD active\B8\A6 È®\C0\CE\C7\D1 \C8Ä¿\A1 ó\B8\AE - */ - Device->PowerOnDevice(&GlobalS, 0); - break; - - case LXT_PDA_POWER_OFF_REQUEST : - /* - * - */ - // FuncPhoneServer->BroadcastInternalStatus(&GlobalPS, LXT_STATE_OFF); - // error = MiscFunc->PowerOff(&GlobalS); - // Device->PowerOffDevice(&GlobalS); - - /* Phone doesn't seem to respond correctly to the Power-Off request. - After Power-Off request, we got Phone-Active signals repeatedly. civily, 2005.09.26 [ - TxPWR_ExecPhonePowerOff(); - */ // civily, 2005.09.26 ] - TxPWR_ExecPhonePowerOff(); - FuncPhoneServer->BroadcastInternalStatus(&GlobalPS, LXT_STATE_OFF); - break; - - default : - TRACE(MSGL_VGSM_INFO, "nexpected request cmd from clients 0x%02x\n", action); - break; + case LXT_PDA_INTERNAL_ID_REQUEST : + + clientid = (int)packed_S32((unsigned char *)p); + if(clientid == 0) { + TRACE(MSGL_VGSM_INFO, "ERROR!! Invalid value of clientid.\n"); + } + ci->klass = clientid; + TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_ID_REQUEST [0x%x]: %s\n", clientid, clientName[clientid]); + break; + + case LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST : + TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST \n"); + if (server != NULL) { + server->Functions->CastMissedMessage(ps, klass, clientfd); + } + break; + + case LXT_PDA_INTERNAL_STATE_REQUEST : + TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_MISSED_MESSAGE_REQUEST ..WARNING: it's not implemented\n"); + break; + + case LXT_PDA_INTERNAL_LAUNCH_SAT_APP_REQUEST: + TAPIMessageInit(&tmgs); + TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_LAUNCH_SAT_APP_REQUEST\n"); + tmgs.group = LXT_GRP_INTERNAL; + tmgs.action = LXT_PDA_INTERNAL_LAUNCH_SAT_APP_RESPONSE; + FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_CARD_MANAGER, &tmgs); + break; + case LXT_PDA_INTERNAL_SETUP_SAT_APP_REQUEST: + TAPIMessageInit(&tmgs); + TRACE(MSGL_VGSM_INFO, "LXT_PDA_INTERNAL_SETUP_SAT_APP_REQUEST\n"); + tmgs.group = LXT_GRP_INTERNAL; + tmgs.action = LXT_PDA_INTERNAL_SETUP_SAT_APP_RESPONSE; + tmgs.length = length; + tmgs.data = (void *)p; + FuncServer->Cast(&GlobalPS, LXT_ID_CLIENT_CARD_MANAGER, &tmgs); + break; + + case LXT_PDA_INTERNAL_PHONE_BATTERY_REQUEST: + TRACE(MSGL_VGSM_INFO, "Request phone battery\n"); + log_msg(MSGL_VGSM_INFO,"WARNING: it's not implemented \n"); + break; + default : + break; } } -#endif /* 0 */ static void do_call(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) { @@ -1312,145 +871,53 @@ static void do_call(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) switch (action) { - case GSM_CALL_MAKE_REQ : - log_msg(MSGL_VGSM_INFO,"GSM_CALL_MAKE_REQ\n"); - server_tx_call_incoming_noti(packet); - break; - - case GSM_CALL_HANGUP_REQ : - log_msg(MSGL_VGSM_INFO,"GSM_CALL_HANGUP_REQ\n"); - server_tx_call_release_exec(packet); - break; - - case GSM_CALL_ANSWER_REQ : - log_msg(MSGL_VGSM_INFO,"GSM_CALL_ANSWER_REQ\n"); - { - int active = get_active_call_count(); - int hold = get_hold_call_count(); - - if(active >=1 && hold >= 1) - { - log_msg(MSGL_VGSM_INFO,"======== 1 active + 1held call ========\n"); - return ; - } - else if(active>=1) - { - log_msg(MSGL_VGSM_INFO,"======== 1 active call ========\n"); - swap_call(); - server_tx_call_list_noti(); - } - else - { - log_msg(MSGL_VGSM_INFO,"======== no established call! ========\n"); - server_tx_call_answer_exec(); - } - } - break; - case GSM_CALL_ALERT_IND: - log_msg(MSGL_VGSM_INFO,"GSM_CALL_ALERT_IND\n"); - server_tx_call_alert_ind(packet->data, packet->length); - break; - - // 090312 - case GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR: - log_msg(MSGL_VGSM_INFO,"GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR\n"); - ATTxEmulator_Set_General_Response_Error(packet); - error = get_general_response_error(); - log_msg(MSGL_VGSM_INFO,"======== Disconnect! error set %x ========\n", error); - break; - - default: - assert(0); + case GSM_CALL_MAKE_REQ : + log_msg(MSGL_VGSM_INFO,"GSM_CALL_MAKE_REQ\n"); + server_tx_call_incoming_noti(packet); + break; + + case GSM_CALL_HANGUP_REQ : + log_msg(MSGL_VGSM_INFO,"GSM_CALL_HANGUP_REQ\n"); + server_tx_call_release_exec(packet); + break; + + case GSM_CALL_ANSWER_REQ : + log_msg(MSGL_VGSM_INFO,"GSM_CALL_ANSWER_REQ\n"); + { + int active = get_active_call_count(); + int hold = get_hold_call_count(); + + if(active >=1 && hold >= 1) { + log_msg(MSGL_VGSM_INFO,"======== 1 active + 1held call ========\n"); + return ; + } else if(active>=1) { + log_msg(MSGL_VGSM_INFO,"======== 1 active call ========\n"); + swap_call(); + server_tx_call_list_noti(); + } else { + log_msg(MSGL_VGSM_INFO,"======== no established call! ========\n"); + server_tx_call_answer_exec(); + } + } + break; + case GSM_CALL_ALERT_IND: + log_msg(MSGL_VGSM_INFO,"GSM_CALL_ALERT_IND\n"); + server_tx_call_alert_ind(packet->data, packet->length); + break; + + // 090312 + case GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR: + log_msg(MSGL_VGSM_INFO,"GSM_EMULATOR_SET_SS_GENERAL_RESPONSE_ERROR\n"); + ATTxEmulator_Set_General_Response_Error(packet); + error = get_general_response_error(); + log_msg(MSGL_VGSM_INFO,"======== Disconnect! error set %x ========\n", error); + break; + + default: + assert(0); } } -#if 0 -void do_sound(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) -{ - TRACE(MSGL_VGSM_INFO, "\n" ); - - GSM_Error error; - - int klass = ci->klass; - int action = packet->action; - int length = packet->length; - - char * ptr = (char *)(packet->data); - - switch (action) - { - case GSM_SND_AUDIO_PATH_CTRL_REQ: - { - GSM_SoundAudioPathType type; - type = *ptr; - TxSND_SetAudioPathCtrl(type); - } - break; - - case GSM_SND_SET_SPKR_VOLUME_CTRL_REQ: - { - TxSND_SetVolumeCtrl(ptr[0], ptr[1]); - } - break; - - case GSM_SND_NOTI_TONE_REQ: - { - GSM_SndNotiToneSet tone; - - tone.mode = ptr[0]; - tone.volume = ptr[0]; - tone.count = ptr[0]; - tone.tone_type = ptr[0]; - - TxSND_SetNotiTone(&tone); - } - break; - - case GSM_SND_GET_GAIN_CTRL_REQ: - TxSND_GetGainCtrl(ptr); - break; - - case GSM_SND_SET_GAIN_CTRL_REQ: - TxSND_ExecGainCtrl(ptr); - break; - - case GSM_SND_SET_MIC_MUTE_CTRL_REQ: - { - GSM_SoundMuteStatusType mute; - - mute = *ptr; - TxSND_SetMICMuteCtrl(mute); - } - break; - - default: - break; - } -} - -void do_svcmode(PhoneServer * ps, TClientInfo * ci, LXT_MESSAGE * packet) -{ - TRACE(MSGL_VGSM_INFO, "\n" ); - - char *ptr = (char *) packet->data; - - switch (packet->action) - { - case GSM_SVCMODE_ENTER_REQ: - TxSVCMode_SetEnterServiceMode(ptr); - break; - - case GSM_SVCMODE_END_REQ: - TxSVCMode_SetEndServiceMode(ptr[0]); - break; - - case GSM_SVCMODE_PROCESS_KEY_REQ: - TxSVCMode_SetProcessKeyCode(ptr[0]); - break; - } -} -#endif /* 0 */ - static int client_callback(PhoneServer * ps, int fd, EloopCondition cond, void * data) { log_msg(MSGL_VGSM_INFO," client_callback fd=%d \n",fd); @@ -1461,34 +928,23 @@ static int client_callback(PhoneServer * ps, int fd, EloopCondition cond, void * int group; int action; int length; - //int klass = ci->klass; int clientfd = ci->fd; int rssi = 5; - //unsigned char * p = 0; - TAPIMessageInit(&packet); - rc = ReadPacketBytes4(clientfd, &packet); - - if (rc <= 0) - { - Server * server = &ps->ServerSocket; - if (server != NULL) - { - TRACE(MSGL_VGSM_INFO, "Client was disconnected\n"); - server->Functions->RemoveClient(ps, ci); - } - return -1; + msg_info _msg; + memset(&_msg, 0x00, sizeof(struct _msg_info)); + rc = ReadBytes(clientfd, &_msg, sizeof(struct _msg_info)); + if(rc <= 0) { + TRACE(MSGL_VGSM_ERR, "read err.\n"); + return -1; } - - if (packet.length > 0) - { - packet.data = (unsigned char *) PacketDataMalloc(packet.length + 1); - rc = ReadBytes(clientfd, packet.data, packet.length); - //p = (unsigned char *)packet.data; + memcpy(&packet, _msg.buf + 10, 4); + if (packet.length > 0) { + packet.data = (unsigned char *) PacketDataMalloc(packet.length + 1); + memcpy(packet.data, _msg.buf + 10 + 4, packet.length); } - group = packet.group; action = packet.action; length = packet.length; @@ -1496,222 +952,74 @@ static int client_callback(PhoneServer * ps, int fd, EloopCondition cond, void * TRACE(MSGL_VGSM_INFO, "in client_callback, group : %x\n", group); if(vconf_get_int(VCONFKEY_TELEPHONY_RSSI, &rssi)) { - TRACE(MSGL_WARN, "vconf_get_int(%s) fail\n", VCONFKEY_TELEPHONY_RSSI); + TRACE(MSGL_WARN, "vconf_get_int(%s) fail\n", VCONFKEY_TELEPHONY_RSSI); } switch (group) { - case GSM_CALL: - change_state_machine( GSM_CALL_CMD ); - if( is_flight_mode() ){ - TRACE(MSGL_VGSM_INFO, "Flight mode on \n"); - callback_callist(); - } else if(rssi == 0) { - TRACE(MSGL_VGSM_INFO, "RSSI is zero \n"); - callback_callist(); - } else { - TRACE(MSGL_VGSM_INFO, "Call ok \n"); - do_call(ps, ci, &packet); - } - break; - case GSM_NETWORK: - do_network(ps, ci, &packet); - break; - case GSM_SUPS: - do_sups(ps, ci, &packet); - break; - case GSM_SMS: - if( is_flight_mode() ){ - TRACE(MSGL_VGSM_INFO, "Flight mode on \n"); - sms_response_for_eventinjector(); - } else if(rssi == 0) { - TRACE(MSGL_VGSM_INFO, "RSSI is zero \n"); - sms_response_for_eventinjector(); - } else { - TRACE(MSGL_VGSM_INFO, "SMS ok \n"); - do_sms(ps, ci, &packet); - } - break; - case GSM_DISPLAY: - do_display(ps, ci, &packet); - break; - case GSM_SIM: - do_sim(ps, ci, &packet); - break; - case GSM_DATA : - do_data(ps, ci, &packet); - break; - case GSM_SAT: - do_sat(ps, ci, &packet); - break; - case GSM_EMULATOR : - do_emulator(ps, ci, &packet); - break; - case GSM_GPRS : - do_gprs(ps, ci, &packet); - break; - case GSM_POWER : - do_power(ps, ci, &packet); - break; - case GSM_CLIENT: - do_client(ps, ci, &packet); - break; - case LXT_GRP_INTERNAL : - do_internal(ps, ci, &packet); - break; - //090326 - case RESTORE_EI_DATA : - do_restore_ei(ps, ci, &packet); - - -#if 0 - case LXT_GRP_POWER : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - do_power(ps, ci, &packet); - break; - - case GSM_CALL : -#ifdef __arm__ - if (GlobalS.Phone.Data.PhonePower == false) - break; -#endif - do_call(ps, ci, &packet); - break; - - case GSM_MISC : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - if (action == GSM_MISC_RAMDUMP_REQ) - do_misc(ps, ci, &packet); - else - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_misc(ps, ci, &packet); - break; - - case GSM_SMS : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - // if (GlobalS.Phone.Data.PhonePower == false) - // break; - do_sms(ps, ci, &packet); - break; - - case GSM_SUPS : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_sups(ps, ci, &packet); - break; - - case GSM_SIM : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_sim(ps, ci, &packet); - break; - - case GSM_NETWORK : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_network(ps, ci, &packet); - break; - - case GSM_DATA : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_data(ps, ci, &packet); - break; - - case GSM_SOUND: - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_sound(ps, ci, &packet); - break; - - case GSM_EXT : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_ext(ps, ci, &packet); - break; - - case GSM_SERVICEMODE: - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_svcmode(ps, ci, &packet); - break; - - case GSM_EMULATOR : - /* todo : nsclass - if (GlobalS.Phone.Data.RamDump == true) - { - FuncResponse->ResponseRamDump(ci->klass); - break; - } - */ - - if (GlobalS.Phone.Data.PhonePower == false) - break; - do_emulator(ps, ci, &packet); -#endif /* 0 */ - default : - break; + case GSM_CALL: + change_state_machine( GSM_CALL_CMD ); + if( is_flight_mode() ){ + TRACE(MSGL_VGSM_INFO, "Flight mode on \n"); + callback_callist(); + } else if(rssi == 0) { + TRACE(MSGL_VGSM_INFO, "RSSI is zero \n"); + callback_callist(); + } else { + TRACE(MSGL_VGSM_INFO, "Call ok \n"); + do_call(ps, ci, &packet); + } + break; + case GSM_NETWORK: + do_network(ps, ci, &packet); + break; + case GSM_SUPS: + do_sups(ps, ci, &packet); + break; + case GSM_SMS: + if( is_flight_mode() ){ + TRACE(MSGL_VGSM_INFO, "Flight mode on \n"); + sms_response_for_eventinjector(); + } else if(rssi == 0) { + TRACE(MSGL_VGSM_INFO, "RSSI is zero \n"); + sms_response_for_eventinjector(); + } else { + TRACE(MSGL_VGSM_INFO, "SMS ok \n"); + do_sms(ps, ci, &packet); + } + break; + case GSM_DISPLAY: + do_display(ps, ci, &packet); + break; + case GSM_SIM: + do_sim(ps, ci, &packet); + break; + case GSM_DATA : + do_data(ps, ci, &packet); + break; + case GSM_SAT: + do_sat(ps, ci, &packet); + break; + case GSM_EMULATOR : + do_emulator(ps, ci, &packet); + break; + case GSM_GPRS : + do_gprs(ps, ci, &packet); + break; + case GSM_POWER : + do_power(ps, ci, &packet); + break; + case GSM_CLIENT: + do_client(ps, ci, &packet); + break; + case LXT_GRP_INTERNAL : + do_internal(ps, ci, &packet); + break; + //090326 + case RESTORE_EI_DATA : + do_restore_ei(ps, ci, &packet); + default : + break; } TAPIMessageFree(&packet); return 1; diff --git a/vmodem/server/server.c b/vmodem/server/server.c index 270d21f..9359bee 100644 --- a/vmodem/server/server.c +++ b/vmodem/server/server.c @@ -36,29 +36,71 @@ #include "phoneserver.h" #include "eloop.h" -//#include "data_conn_mgr.h" #include "misc.h" -#include "state.h" //define ENTER() +#include "state.h" #include "logmsg.h" -#define MAX_LISTEN_COUNT 32 -//#define DEF_DOMAIN_SOCKET_NAME "/tmp/.phone_socket" -#define DEF_DOMAIN_SOCKET_NAME "/tmp/.vgsm_socket" +#define MAX_LISTEN_COUNT 32 int vgsm_server_port=0; +#define DEVICE_NODE_PATH "/dev/vmodem0" +static int g_q_fd = -1; -extern GSM_StateMachine GlobalS; +typedef struct _msg_info { + char buf[1024]; + + uint32_t route; + uint32_t use; + uint16_t count; + uint16_t index; + + unsigned int cclisn; +} msg_info; + +int q_vmodem_device_init() +{ + TRACE(MSGL_VGSM_INFO, "\n"); + + int q_fd = -1; + int q_opts = -1; + int val = 1; + + q_fd = open(DEVICE_NODE_PATH, O_RDWR); + if(q_fd <= 0) { + TRACE(MSGL_VGSM_ERR, "open %s is failed\n", DEVICE_NODE_PATH); + return -1; + } + + q_opts = fcntl(q_fd, F_GETFL); + if(q_opts < 0) { + TRACE(MSGL_VGSM_ERR, "fcntl(get) %s is failed\n", DEVICE_NODE_PATH); + close(q_fd); + return -1; + } else { + q_opts = q_opts | O_NONBLOCK; + if (fcntl(q_fd, F_SETFL, q_opts) < 0) { + TRACE(MSGL_VGSM_ERR, "fcntl(set) %s is failed\n", DEVICE_NODE_PATH); + close(q_fd); + return -1; + } + } + g_q_fd = q_fd; + ioctl(g_q_fd, HN_DPRAM_PHONE_GETSTATUS, &val); + TRACE(MSGL_VGSM_INFO, "vmodem device is opened\n"); + return 0; +} + +extern GSM_StateMachine GlobalS; static void server_save_message(PhoneServer * ps, LXT_ID_CLIENT klass, LXT_MESSAGE * packet) { int ii; Server * server = &ps->ServerSocket; - if (server->mmsg.current >= MAX_MISSED_MESSAGE) - { - TRACE(MSGL_WARN, "Warning!!! overrun max missed call\n"); - server->mmsg.current = 0; + if (server->mmsg.current >= MAX_MISSED_MESSAGE) { + TRACE(MSGL_WARN, "Warning!!! overrun max missed call\n"); + server->mmsg.current = 0; } // save currunt @@ -66,12 +108,6 @@ static void server_save_message(PhoneServer * ps, LXT_ID_CLIENT klass, LXT_MESSA TRACE(MSGL_VGSM_INFO, "Add current missed cast index: %d (client id: 0x%x)\n", ii, klass); TRACE(MSGL_VGSM_INFO, "packet->group: 0x%x packet->action: 0x%x\n", packet->group, packet->action); -#ifdef _DEBUG_ - if (server->mmsg.mmsg_info[ii].klass != LXT_STATE_RELEASED) { - TRACE(MSGL_VGSM_ERR, "CRITICAL!!! overwrite data that not yet sent message to client\n"); - TRACE(MSGL_VGSM_ERR, "group:0x%x, action: 0x%x\n", server->mmsg.mmsg_info[ii].group, server->mmsg.mmsg_info[ii].action); - } -#endif // set id server->mmsg.mmsg_info[ii].klass = klass; @@ -83,35 +119,52 @@ static void server_save_message(PhoneServer * ps, LXT_ID_CLIENT klass, LXT_MESSA server->mmsg.mmsg_info[ii].mmsg.group = packet->group; server->mmsg.mmsg_info[ii].mmsg.action = packet->action; - if (packet->length > 0) - { - server->mmsg.mmsg_info[ii].mmsg.data = - (unsigned char *)PacketDataMalloc(packet->length); - memcpy(server->mmsg.mmsg_info[ii].mmsg.data, packet->data, packet->length); + if (packet->length > 0) { + server->mmsg.mmsg_info[ii].mmsg.data = + (unsigned char *)PacketDataMalloc(packet->length); + memcpy(server->mmsg.mmsg_info[ii].mmsg.data, packet->data, packet->length); } server->mmsg.current ++; } -static int server_send_to_client(int handle, LXT_MESSAGE * packet) +static int server_send_to_client(int handle, LXT_MESSAGE * packet, int clientid) { + TRACE(MSGL_VGSM_INFO, "\n"); + int datasize; int rc = -1; + int realhandle = (clientid == LXT_ID_CLIENT_EVENT_INJECTOR ? g_q_fd : handle); - TRACE(MSGL_VGSM_INFO, "server_send_to_client : fd = %d, total size = 4+%d ... \n", handle, packet->length); - // save size (length of packet is only datasize) datasize = packet->length; - rc = WriteBytes(handle, packet, 4); - if( rc != 4 ) - TRACE(MSGL_VGSM_ERR, "server_send_to_client1 : write error : rc = %d\n", rc); + const int tmplen = 4 + datasize; + msg_info _msg; + char* tmp_buffer = (char*) malloc(tmplen); + char t_name[10]; + memset(t_name, 0, 10); + strcpy(t_name, "telephony"); + + if(tmp_buffer) { + memcpy(tmp_buffer, packet, 4); - // FIXME : Broken PIPE error - if (datasize > 0) - { - rc = WriteBytes(handle, packet->data, datasize); - if (rc != datasize ) - TRACE(MSGL_VGSM_ERR, "server_send_to_client2 : write error : rc = %d\n", rc); + if(datasize > 4) { + memcpy(tmp_buffer + 4, packet->data, datasize); + } + + memset(_msg.buf, 0, 1024); + memcpy(_msg.buf, t_name, 10); + memcpy(_msg.buf + 10, tmp_buffer, tmplen); + + _msg.route = 1; + _msg.use = tmplen; + _msg.count = 1; + _msg.index = 0; + _msg.cclisn = 0; + + rc = WriteBytes(realhandle, (void*) &_msg, sizeof(_msg)); + + free(tmp_buffer); } return rc; } @@ -121,28 +174,17 @@ static TClientInfo * server_get_client(PhoneServer * ps, int clientid) Server * server = &ps->ServerSocket; TClientInfo * ci = server->current_ci; - if (ci) - TRACE(MSGL_VGSM_INFO, "server get client is not null\n"); - - while (ci) - { - //if (ci->klass == clientid) - if (ci->klass == LXT_ID_CLIENT_EVENT_INJECTOR || ci->klass == clientid) - return ci; - ci = ci->next; + if (ci) { + TRACE(MSGL_VGSM_INFO, "server get client is not null\n"); } - return NULL; -} -#if 0 -static void get_domain_socket_name(char * result) -{ - strcpy(result, DEF_DOMAIN_SOCKET_NAME); - strcat(result, (const char*)"-"); - strcat(result, getenv("USER")); - return; + while (ci) { + if (ci->klass == LXT_ID_CLIENT_EVENT_INJECTOR || ci->klass == clientid) + return ci; + ci = ci->next; + } + return NULL; } -#endif static void server_initialize(PhoneServer * ps) { @@ -156,14 +198,13 @@ static void server_initialize(PhoneServer * ps) server->current_ci = NULL; // This is needed for save the message which arrive before the client connecting. - for (ii = 0; ii < MAX_MISSED_MESSAGE; ii ++) - { - server->mmsg.mmsg_info[ii].klass = LXT_ID_CLIENT_RESERVED; - TAPIMessageInit( &(server->mmsg.mmsg_info[ii].mmsg) ); + for (ii = 0; ii < MAX_MISSED_MESSAGE; ii ++) { + server->mmsg.mmsg_info[ii].klass = LXT_ID_CLIENT_RESERVED; + TAPIMessageInit( &(server->mmsg.mmsg_info[ii].mmsg) ); } } -static int server_open(PhoneServer * ps) +static int server_open(PhoneServer * ps) { Server * server = &ps->ServerSocket; @@ -174,17 +215,13 @@ static int server_open(PhoneServer * ps) TRACE(MSGL_VGSM_INFO, "\n"); - //090501 - //get_domain_socket_name(socket_name); - server->fd = socket(AF_UNIX, SOCK_STREAM, 0); log_msg(MSGL_VGSM_INFO, "fd =%d \n", server->fd); - if (server->fd < 0) - { - TRACE(MSGL_VGSM_ERR, "socket() failed\n"); - return -1; + if (server->fd < 0) { + TRACE(MSGL_VGSM_ERR, "socket() failed\n"); + return -1; } unlink(socket_name); @@ -196,22 +233,21 @@ static int server_open(PhoneServer * ps) rc = bind(server->fd, (struct sockaddr *)&serverAddr, len); - if (rc != 0) - { - TRACE(MSGL_VGSM_ERR, "bind() failed\n"); - close(server->fd); - return -1; + if (rc != 0) { + TRACE(MSGL_VGSM_ERR, "bind() failed\n"); + close(server->fd); + return -1; } rc = listen(server->fd, MAX_LISTEN_COUNT); - if (rc != 0) - { - TRACE(MSGL_VGSM_ERR, "listen() failed\n"); - close(server->fd); - return -1; + if (rc != 0) { + TRACE(MSGL_VGSM_ERR, "listen() failed\n"); + close(server->fd); + return -1; } + q_vmodem_device_init(); return 0; } @@ -229,73 +265,34 @@ static int server_callback(PhoneServer * ps, int fd, EloopCondition cond, void * TRACE(MSGL_VGSM_INFO, "Client fd %d server fd %d\n", client_fd, server->fd); - if (client_fd >= 0) - { - server->ci = malloc(sizeof (TClientInfo)); - server->ci->Functions = NULL; - server->ci->Functions = &ClientHandle; - server->ci->fd = client_fd; - server->ci->klass = -1; - server->ci->next = server->current_ci; - server->current_ci = server->ci; - TAPIMessageInit(&(server->ci->request)); - TAPIMessageInit(&(server->ci->notification)); - int tag = eloop_add_input(ps, server->ci->fd, ELOOP_READ, - server->ci->Functions->CallBack, server->ci); - server->ci->tag = tag; - TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", tag); - } - else - { - perror("accept 2"); + if (client_fd >= 0) { + server->ci = malloc(sizeof (TClientInfo)); + server->ci->Functions = NULL; + server->ci->Functions = &ClientHandle; + server->ci->fd = client_fd; + server->ci->klass = -1; + server->ci->next = server->current_ci; + server->current_ci = server->ci; + TAPIMessageInit(&(server->ci->request)); + TAPIMessageInit(&(server->ci->notification)); + int tag = eloop_add_input(ps, server->ci->fd, ELOOP_READ, + server->ci->Functions->CallBack, server->ci); + server->ci->tag = tag; + TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", tag); + } else { + perror("accept 2"); } return 1; } - - static int server_inet_open(PhoneServer * ps) { Server * server = &ps->ServerSocket; - struct sockaddr_in server_addr; - int val; - - memset(&server_addr, 0, sizeof server_addr); - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(3578); - server_addr.sin_addr.s_addr = INADDR_ANY; - - TRACE(MSGL_VGSM_INFO, "listening to port %d\n", server_addr.sin_port); - - if((server->inet_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) - { - perror("socket() failed"); - return -1; - } - - val = 1; - setsockopt(server->inet_fd, SOL_SOCKET, SO_REUSEADDR - , (const char *)&val, sizeof(val)); - - if(bind(server->inet_fd, (struct sockaddr *)&server_addr, sizeof server_addr) == -1) - { - perror("bind() failed"); - close(server->inet_fd); - return -1; - } - - if(listen(server->inet_fd, MAX_LISTEN_COUNT) == -1) - { - perror("listen() failed"); - close(server->inet_fd); - return -1; - } + server->inet_fd = g_q_fd; return 0; } - -#if 1 static int server_inet_callback(PhoneServer * ps, int fd, EloopCondition cond, void * data) { Server * server = &ps->ServerSocket; @@ -304,120 +301,50 @@ static int server_inet_callback(PhoneServer * ps, int fd, EloopCondition cond, v int len = sizeof(addr); memset(&addr, 0, len); - int client_fd = accept(server->inet_fd, (struct sockaddr *)&addr, (socklen_t *)&len); - - TRACE(MSGL_VGSM_INFO, "\n\n\ninet socket accept!!!\n\n\n"); - TRACE(MSGL_VGSM_INFO, "Client fd %d server fd %d\n", - client_fd, server->inet_fd); - /* - if (client_fd > 0) - { - DPRAM * dpram = &GlobalPS.Dpram; - - // ++ 2008-08-05 - // ++ Data.DPRAM is union. So, DPRAM is not clear whether it is fake or DPRAM. - // ++ It should be sure what is. - // - GSM_Device_DPRAMData *d = &GlobalS.Device.Data.DPRAM; - - d->Power = true; - d->hPhone = client_fd; - - dpram->fd=client_fd; - - int iotag; - iotag = eloop_add_input(ps, dpram->fd, ELOOP_READ, - dpram->Functions->CallBack, 0); // dpram_callback - TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", iotag); - } - else - { - perror("accept 3"); + int client_fd = g_q_fd; + + TRACE(MSGL_VGSM_INFO, "\ninet socket accept!!!\n"); + TRACE(MSGL_VGSM_INFO, "Client fd %d server fd %d\n", client_fd, server->inet_fd); + + if (client_fd >= 0) { + server->ci = malloc(sizeof (TClientInfo)); + server->ci->Functions = NULL; + server->ci->Functions = &ClientHandle; + server->ci->fd = g_q_fd; + server->ci->klass = -1; + server->ci->next = server->current_ci; + server->current_ci = server->ci; + TAPIMessageInit(&(server->ci->request)); + TAPIMessageInit(&(server->ci->notification)); + int tag = eloop_add_input(ps, server->ci->fd, ELOOP_READ, + server->ci->Functions->CallBack, server->ci); + server->ci->tag = tag; + TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", tag); + } else { + perror("accept 2"); } return 1; - */ - - if (client_fd >= 0) - { - server->ci = malloc(sizeof (TClientInfo)); - server->ci->Functions = NULL; - server->ci->Functions = &ClientHandle; - server->ci->fd = client_fd; - server->ci->klass = -1; - server->ci->next = server->current_ci; - server->current_ci = server->ci; - TAPIMessageInit(&(server->ci->request)); - TAPIMessageInit(&(server->ci->notification)); - int tag = eloop_add_input(ps, server->ci->fd, ELOOP_READ, - server->ci->Functions->CallBack, server->ci); - server->ci->tag = tag; - TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", tag); - } - else - { - perror("accept 2"); - } - return 1; - -} -#else - -static int server_inet_callback(PhoneServer * ps, int fd, EloopCondition cond, void * data) -{ - log_msg(MSGL_VGSM_INFO, "fd = %d \n",fd); - Server * server = &ps->ServerSocket; - - struct sockaddr_in addr; - int len = sizeof(addr); - memset(&addr, 0, len); - - int client_fd = accept(server->fd, (struct sockaddr *)&addr, (socklen_t *)&len); - - TRACE(MSGL_VGSM_INFO, "Client fd %d server fd %d\n", client_fd, server->fd); - if (client_fd > 0) - { - server->ci = g_new(TClientInfo, 1); - server->ci->Functions = NULL; - server->ci->Functions = &ClientHandle; - server->ci->fd = client_fd; - server->ci->klass = -1; - server->ci->next = server->current_ci; - server->current_ci = server->ci; - TAPIMessageInit(&(server->ci->request)); - TAPIMessageInit(&(server->ci->notification)); - int tag = eloop_add_input(ps, server->ci->fd, ELOOP_READ, - server->ci->Functions->CallBack, server->ci); - server->ci->tag = tag; - TRACE(MSGL_VGSM_INFO, "Server inet callback is registerd at [%d]\n", tag); - } - else - { - perror("accept 2"); - } - return 1; } -#endif - const char *str_main_cmd[] = { "GSM_COMMON", // 0x00 - "GSM_CALL",// 0x01 - "GSM_NETWORK",// 0x02 - "GSM_SUPS",// 0x03 - "GSM_SMS",// 0x04 - "GSM_MISC", // 0x05 - "GSM_DISPLAY", // 0x06 - "GSM_SIM", // 0x07 - "GSM_DATA", // 0x08 - "GSM_SAT", // 0x09 - "GSM_SOUND", // 0x0A - "GSM_EXT",// 0x0B - "GSM_SERVICEMODE",// 0x0C - "GSM_EMULATOR ",// 0x0D - "GSM_GPRS", // 0x0E - "GSM_POWER",// 0x0F - "GSM_CLIENT" // 0x10 + "GSM_CALL",// 0x01 + "GSM_NETWORK",// 0x02 + "GSM_SUPS",// 0x03 + "GSM_SMS",// 0x04 + "GSM_MISC", // 0x05 + "GSM_DISPLAY", // 0x06 + "GSM_SIM", // 0x07 + "GSM_DATA", // 0x08 + "GSM_SAT", // 0x09 + "GSM_SOUND", // 0x0A + "GSM_EXT",// 0x0B + "GSM_SERVICEMODE",// 0x0C + "GSM_EMULATOR ",// 0x0D + "GSM_GPRS", // 0x0E + "GSM_POWER",// 0x0F + "GSM_CLIENT" // 0x10 }; static void server_cast(PhoneServer * ps, int clientid, LXT_MESSAGE * packet) @@ -427,27 +354,25 @@ static void server_cast(PhoneServer * ps, int clientid, LXT_MESSAGE * packet) TRACE(MSGL_VGSM_INFO, "clientid(%d) \n", clientid); - if (server == NULL) - TRACE(MSGL_VGSM_INFO, "server cast server is null\n"); + if (server == NULL) { + TRACE(MSGL_VGSM_INFO, "server cast server is null\n"); + } TClientInfo *ci = 0; int clientfd = -1; ci = server_get_client(ps, clientid); - if (ci) - clientfd = ci->fd; - else - TRACE(MSGL_VGSM_INFO, "server cast client is null\n"); - - if (clientfd > 0) - { - TRACE(MSGL_VGSM_INFO, "CAST MESSAGE TO [0x%x], MAIN[%s], SUB[0x%x] : ci fd [%d]\n", ci->klass, str_main_cmd[packet->group], packet->action, clientfd); - - server_send_to_client(clientfd, packet); + if (ci) { + clientfd = ci->fd; + } else { + TRACE(MSGL_VGSM_INFO, "server cast client is null\n"); } - else - { - server_save_message(ps, (LXT_ID_CLIENT)clientid, packet); + + if (clientfd > 0) { + TRACE(MSGL_VGSM_INFO, "CAST MESSAGE TO [0x%x], MAIN[%s], SUB[0x%x] : ci fd [%d]\n", ci->klass, str_main_cmd[packet->group], packet->action, clientfd); + server_send_to_client(clientfd, packet, clientid); + } else { + server_save_message(ps, (LXT_ID_CLIENT)clientid, packet); } } @@ -461,54 +386,59 @@ static void server_broadcast(PhoneServer * ps, LXT_MESSAGE * packet) TClientInfo * ci = server->current_ci; int clientfd = -1; - if (ci) - TRACE(MSGL_VGSM_INFO, "server get client is not null\n"); - - while (ci) - { - if (ci->fd > 0) - { - if (ci->klass == 0x10) - { - ci = ci->next; - continue; - } - - WriteBytes(ci->fd, packet, 4); - if (packet->length > 0) - WriteBytes(ci->fd, packet->data, packet->length); - } - - ci = ci->next; + if (ci) { + TRACE(MSGL_VGSM_INFO, "server get client is not null\n"); + } + + while (ci) { + if (ci->fd > 0) { + if (ci->klass == 0x10) { + ci = ci->next; + continue; + } + + WriteBytes(ci->fd, packet, 4); + if (packet->length > 0) { + WriteBytes(ci->fd, packet->data, packet->length); + } + } + + ci = ci->next; } // nsclass : Especially, cast internal message to phone indicator, because, phone applet broadcast // phone state to other client.(save missed message) // 1. LXT_ID_CLIENT_INDICATOR ci = server_get_client(ps, LXT_ID_CLIENT_INDICATOR); - if (ci) - clientfd = ci->fd; + if (ci) { + clientfd = ci->fd; + } - if (clientfd < 0) - server_save_message(ps, LXT_ID_CLIENT_INDICATOR, packet); + if (clientfd < 0) { + server_save_message(ps, LXT_ID_CLIENT_INDICATOR, packet); + } // 2. LXT_ID_CLIENT_DATASERVICE clientfd = -1; ci = server_get_client(ps, LXT_ID_CLIENT_DATASERVICE); - if (ci) - clientfd = ci->fd; + if (ci) { + clientfd = ci->fd; + } - if (clientfd < 0) - server_save_message(ps, LXT_ID_CLIENT_DATASERVICE, packet); + if (clientfd < 0) { + server_save_message(ps, LXT_ID_CLIENT_DATASERVICE, packet); + } // 3. LXT_ID_CLIENT_CARD_MANAGER clientfd = -1; ci = server_get_client(ps, LXT_ID_CLIENT_CARD_MANAGER); - if (ci) - clientfd = ci->fd; + if (ci) { + clientfd = ci->fd; + } - if (clientfd < 0) - server_save_message(ps, LXT_ID_CLIENT_CARD_MANAGER, packet); + if (clientfd < 0) { + server_save_message(ps, LXT_ID_CLIENT_CARD_MANAGER, packet); + } return; } @@ -516,11 +446,6 @@ static void server_broadcast(PhoneServer * ps, LXT_MESSAGE * packet) static void clear_client_related_data(int client_id) { TRACE(MSGL_VGSM_INFO, "\n"); - - // 1. Multiple PDP related - //GetDataConnectMgr()->m_pFunc->ClearClient((unsigned char)client_id); - - // 2. RequestResponse related } static void server_remove_client(PhoneServer * ps, TClientInfo *me) @@ -530,62 +455,50 @@ static void server_remove_client(PhoneServer * ps, TClientInfo *me) TRACE(MSGL_VGSM_INFO, "\n"); - while (curr) - { - if (curr == me) - { - if (prev) - { - prev->next = curr->next; - } - else - { - server->current_ci = curr->next; - } - TAPIMessageFree( &(curr->notification) ); - TAPIMessageFree( &(curr->request) ); - close(curr->fd); - - clear_client_related_data(curr->klass); - - PacketDataFree(curr); - return; - } - prev = curr; - curr = curr->next; + while (curr) { + if (curr == me) { + if (prev) { + prev->next = curr->next; + } else { + server->current_ci = curr->next; + } + TAPIMessageFree( &(curr->notification) ); + TAPIMessageFree( &(curr->request) ); + close(curr->fd); + + clear_client_related_data(curr->klass); + + PacketDataFree(curr); + return; + } + prev = curr; + curr = curr->next; } } -//void server_cast_missed_message(PhoneServer * ps, LXT_ID_CLIENT klass, static void server_cast_missed_message(PhoneServer * ps, int klass, int clientfd) { Server * server = &ps->ServerSocket; - //TClientInfo *curr = server->current_ci, *prev = 0; int ii = 0; - //int jj; int rc; TRACE(MSGL_VGSM_INFO, "\n"); - for (ii = 0; ii < MAX_MISSED_MESSAGE; ii ++) - { - if (server->mmsg.mmsg_info[ii].klass == klass) - { - rc = WriteBytes( clientfd, &(server->mmsg.mmsg_info[ii].mmsg), 4); - if (server->mmsg.mmsg_info[ii].mmsg.length > 0) - { - // tx data to client - rc = WriteBytes( clientfd, - server->mmsg.mmsg_info[ii].mmsg.data, - server->mmsg.mmsg_info[ii].mmsg.length); - } - - server->mmsg.mmsg_info[ii].klass = LXT_ID_CLIENT_RESERVED; - TRACE(MSGL_VGSM_INFO, "removed missed cast index: %d by client(0x%x)\n", ii, klass); - - // clear message - TAPIMessageFree(&(server->mmsg.mmsg_info[ii].mmsg)); - } + for (ii = 0; ii < MAX_MISSED_MESSAGE; ii ++) { + if (server->mmsg.mmsg_info[ii].klass == klass) { + rc = WriteBytes(clientfd, &(server->mmsg.mmsg_info[ii].mmsg), 4); + if (server->mmsg.mmsg_info[ii].mmsg.length > 0) { + // tx data to client + rc = WriteBytes(clientfd, server->mmsg.mmsg_info[ii].mmsg.data, + server->mmsg.mmsg_info[ii].mmsg.length); + } + + server->mmsg.mmsg_info[ii].klass = LXT_ID_CLIENT_RESERVED; + TRACE(MSGL_VGSM_INFO, "removed missed cast index: %d by client(0x%x)\n", ii, klass); + + // clear message + TAPIMessageFree(&(server->mmsg.mmsg_info[ii].mmsg)); + } } } -- 2.7.4