ENDIF (ARCH_EMUL)
SET(SRCS
- src/server.c
- src/plugin.c
- src/hal.c
- src/at.c
- src/communicator.c
- src/storage.c
- src/queue.c
- src/user_request.c
- src/util.c
- src/core_object.c
- src/co_modem.c
- src/co_network.c
- src/co_ps.c
- src/co_context.c
- src/co_sim.c
- src/co_sat.c
- src/co_sap.c
- src/co_call.c
- src/co_ss.c
- src/co_sms.c
- src/co_phonebook.c
- src/co_gps.c
- src/co_custom.c
- src/mux.c
+ src/server.c
+ src/manager.c
+ src/plugin.c
+ src/hal.c
+ src/at.c
+ src/communicator.c
+ src/storage.c
+ src/queue.c
+ src/user_request.c
+ src/util.c
+ src/core_object.c
+ src/co_modem.c
+ src/co_sim.c
+ src/co_network.c
+ src/co_call.c
+ src/co_sms.c
+ src/co_ss.c
+ src/co_phonebook.c
+ src/co_ps.c
+ src/co_context.c
+ src/co_sat.c
+ src/co_sap.c
+ src/co_gps.c
+ src/co_custom.c
+ src/mux.c
)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tcore.pc DESTINATION ${LIBDIR}/pkgconfig)
INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME libtcore)
-ADD_SUBDIRECTORY(unit-test)
+#ADD_SUBDIRECTORY(unit-test)
#include <queue.h>
enum tcore_at_command_type {
- TCORE_AT_NO_RESULT, /* no intermediate response expected */
- TCORE_AT_NUMERIC, /* a single intermediate response starting with a 0-9 */
- TCORE_AT_SINGLELINE, /* a single intermediate response starting with a prefix */
- TCORE_AT_MULTILINE, /* multiple line intermediate response starting with a prefix */
- TCORE_AT_PDU
+ TCORE_AT_NO_RESULT, /* no intermediate response expected */
+ TCORE_AT_NUMERIC, /* a single intermediate response starting with a 0-9 */
+ TCORE_AT_SINGLELINE, /* a single intermediate response starting with a prefix */
+ TCORE_AT_MULTILINE, /* multiple line intermediate response starting with a prefix */
+ TCORE_AT_PDU
};
-enum ATCMEError{
- AT_ERROR_MOBILE_FAILRURE =0,
- AT_ERROR_NOT_CONNECTED_TO_PHONE =1,
- AT_ERROR_LINK_RESERVED =2,
- AT_ERROR_OPER_NOT_ALLOWED =3,
- AT_ERROR_OPER_NOT_SUPPORTED =4,
- AT_ERROR_PH_SIM_PIN_REQUIRED =5,
- AT_ERROR_PH_FSIM_PIN_REQUIRED =6,
- AT_ERROR_PH_FSIM_PUK_REQUIRED =7,
-
- AT_ERROR_SIM_NOT_INSERTED =10,
- AT_ERROR_SIM_PIN_REQUIRED =11,
- AT_ERROR_SIM_PUK_REQUIRED =12,
- AT_ERROR_SIM_FAILURE =13,
- AT_ERROR_SIM_BUSY =14,
- AT_ERROR_SIM_WRONG =15,
- AT_ERROR_INCORRECT_PWD =16,
- AT_ERROR_SIM_PIN2_REQUIRED =17,
- AT_ERROR_SIM_PUK2_REQUIRED =18,
-
- AT_ERROR_MEMORY_FULL =20,
- AT_ERROR_INVALID_INDEX =21,
- AT_ERROR_NOT_FOUND =22,
- AT_ERROR_MEMORY_FAILURE =23,
- AT_ERROR_TEXT_TOO_LONG =24,
- AT_ERROR_INVALID_CHAR_IN_STR =25,
- AT_ERROR_DIAL_TOO_LONG =26,
- AT_ERROR_INVALID_CHAR_IN_DIAL =27,
-
- AT_ERROR_NO_NETWORK_SVC =30,
- AT_ERROR_NETWORK_TIMEOUT =31,
- AT_ERROR_EMERGENCY_CALL_ONLY =32,
-
- AT_ERROR_NET_PERSONAL_PIN_REQ =40,
- AT_ERROR_NET_PERSONAL_PUN_REQ =41,
- AT_ERROR_NET_SUB_PERSONAL_PIN_REQ =42,
- AT_ERROR_NET_SUB_PERSONAL_PUK_REQ =43,
- AT_ERROR_PROVIDER_PERSONAL_PIN_REQ =44,
- AT_ERROR_PROVIDER_PERSONAL_PUK_REQ =45,
- AT_ERROR_CORP_PERSONAL_PIN_REQ =46,
- AT_ERROR_CORP_PERSONAL_PUK_REQ =47,
- AT_ERROR_HIDDEN_KEY_REQUIRED =48,
- AT_ERROR_EAP_METHOD_NOT_SUPPORTED =49,
- AT_ERROR_INCORRECT_PARAM =50,
-
- AT_ERROR_UNKNOWN =100
+enum ATCMEError {
+ AT_ERROR_MOBILE_FAILRURE = 0,
+ AT_ERROR_NOT_CONNECTED_TO_PHONE = 1,
+ AT_ERROR_LINK_RESERVED = 2,
+ AT_ERROR_OPER_NOT_ALLOWED = 3,
+ AT_ERROR_OPER_NOT_SUPPORTED = 4,
+ AT_ERROR_PH_SIM_PIN_REQUIRED = 5,
+ AT_ERROR_PH_FSIM_PIN_REQUIRED = 6,
+ AT_ERROR_PH_FSIM_PUK_REQUIRED = 7,
+
+ AT_ERROR_SIM_NOT_INSERTED = 10,
+ AT_ERROR_SIM_PIN_REQUIRED = 11,
+ AT_ERROR_SIM_PUK_REQUIRED = 12,
+ AT_ERROR_SIM_FAILURE = 13,
+ AT_ERROR_SIM_BUSY = 14,
+ AT_ERROR_SIM_WRONG = 15,
+ AT_ERROR_INCORRECT_PWD = 16,
+ AT_ERROR_SIM_PIN2_REQUIRED = 17,
+ AT_ERROR_SIM_PUK2_REQUIRED = 18,
+
+ AT_ERROR_MEMORY_FULL = 20,
+ AT_ERROR_INVALID_INDEX = 21,
+ AT_ERROR_NOT_FOUND = 22,
+ AT_ERROR_MEMORY_FAILURE = 23,
+ AT_ERROR_TEXT_TOO_LONG = 24,
+ AT_ERROR_INVALID_CHAR_IN_STR = 25,
+ AT_ERROR_DIAL_TOO_LONG = 26,
+ AT_ERROR_INVALID_CHAR_IN_DIAL = 27,
+
+ AT_ERROR_NO_NETWORK_SVC = 30,
+ AT_ERROR_NETWORK_TIMEOUT = 31,
+ AT_ERROR_EMERGENCY_CALL_ONLY = 32,
+
+ AT_ERROR_NET_PERSONAL_PIN_REQ = 40,
+ AT_ERROR_NET_PERSONAL_PUN_REQ = 41,
+ AT_ERROR_NET_SUB_PERSONAL_PIN_REQ = 42,
+ AT_ERROR_NET_SUB_PERSONAL_PUK_REQ = 43,
+ AT_ERROR_PROVIDER_PERSONAL_PIN_REQ = 44,
+ AT_ERROR_PROVIDER_PERSONAL_PUK_REQ = 45,
+ AT_ERROR_CORP_PERSONAL_PIN_REQ = 46,
+ AT_ERROR_CORP_PERSONAL_PUK_REQ = 47,
+ AT_ERROR_HIDDEN_KEY_REQUIRED = 48,
+ AT_ERROR_EAP_METHOD_NOT_SUPPORTED = 49,
+ AT_ERROR_INCORRECT_PARAM = 50,
+
+ AT_ERROR_UNKNOWN = 100
};
GSList *lines; /* any intermediate responses */
};
-typedef gboolean (*TcoreATNotificationCallback)(TcoreAT *at, const GSList *lines,
- void *user_data);
+typedef gboolean (* TcoreATNotificationCallback)(TcoreAT *at,
+ const GSList *lines, void *user_data);
typedef struct tcore_at_response TcoreATResponse;
typedef struct tcore_at_request TcoreATRequest;
-TcoreAT* tcore_at_new(TcoreHal *hal);
-void tcore_at_free(TcoreAT *at);
+TcoreAT *tcore_at_new(TcoreHal *hal);
+void tcore_at_free(TcoreAT *at);
-TReturn tcore_at_buf_write(TcoreAT *at, unsigned int data_len,
- const char *data);
+TReturn tcore_at_buf_write(TcoreAT *at,
+ unsigned int data_len, const char *data);
-TReturn tcore_at_set_request(TcoreAT *at, TcoreATRequest *req, gboolean send);
-TcoreATRequest* tcore_at_get_request(TcoreAT *at);
-TcoreATResponse* tcore_at_get_response(TcoreAT *at);
+TReturn tcore_at_set_request(TcoreAT *at, TcoreATRequest *req, gboolean send);
+TcoreATRequest *tcore_at_get_request(TcoreAT *at);
+TcoreATResponse *tcore_at_get_response(TcoreAT *at);
void tcore_at_process_binary_data(TcoreAT *at, char *position, int data_len);
+
+/* RFS Hook callback function proto-type */
+typedef gboolean (*RfsHookCb)(const gchar *data);
gboolean tcore_at_add_hook(TcoreHal *hal, void *hook_func);
-TReturn tcore_at_add_notification(TcoreAT *at, const char *prefix,
- gboolean pdu, TcoreATNotificationCallback callback,
- void *user_data);
-TReturn tcore_at_remove_notification(TcoreAT *at, const char *prefix,
- TcoreATNotificationCallback callback);
-TReturn tcore_at_remove_notification_full(TcoreAT *at,
- const char *prefix,
- TcoreATNotificationCallback callback, void *user_data);
-
-TcoreATRequest* tcore_at_request_new(const char *cmd, const char *prefix,
- enum tcore_at_command_type type);
-void tcore_at_request_free(TcoreATRequest *req);
-void tcore_at_response_free(TcoreATResponse* rsp);
-
-gboolean tcore_at_process(TcoreAT *at, unsigned int data_len,
- const char *data);
-
-TcorePending* tcore_at_pending_new(CoreObject *co, const char *cmd,
- const char *prefix, enum tcore_at_command_type type,
- TcorePendingResponseCallback func, void *user_data);
-
-GSList* tcore_at_tok_new(const char *line);
-void tcore_at_tok_free(GSList *tokens);
-char* tcore_at_tok_extract(const char *src);
-char* tcore_at_tok_nth(GSList *tokens, unsigned int token_index);
+TReturn tcore_at_add_notification(TcoreAT *at, const char *prefix,
+ gboolean pdu, TcoreATNotificationCallback callback, void *user_data);
+TReturn tcore_at_remove_notification(TcoreAT *at, const char *prefix,
+ TcoreATNotificationCallback callback);
+TReturn tcore_at_remove_notification_full(TcoreAT *at, const char *prefix,
+ TcoreATNotificationCallback callback, void *user_data);
+
+TcoreATRequest *tcore_at_request_new(const char *cmd, const char *prefix,
+ enum tcore_at_command_type type);
+void tcore_at_request_free(TcoreATRequest *req);
+void tcore_at_response_free(TcoreATResponse* rsp);
+
+gboolean tcore_at_process(TcoreAT *at,
+ unsigned int data_len, const char *data);
+
+TcorePending *tcore_at_pending_new(CoreObject *co, const char *cmd,
+ const char *prefix, enum tcore_at_command_type type,
+ TcorePendingResponseCallback func, void *user_data);
+
+GSList *tcore_at_tok_new(const char *line);
+void tcore_at_tok_free(GSList *tokens);
+char *tcore_at_tok_extract(const char *src);
+char *tcore_at_tok_nth(GSList *tokens, unsigned int token_index);
void tcore_free_pending_timeout_at_request(TcoreAT *at);
TReturn tcore_prepare_and_send_at_request(CoreObject *co,
- const char *at_cmd,
- const char *at_cmd_prefix,
- enum tcore_at_command_type at_cmd_type,
- UserRequest *ur,
- TcorePendingResponseCallback resp_cb,
- void *resp_cb_data,
- TcorePendingSendCallback send_cb,
- void *send_cb_data,
- unsigned int timeout,
- TcorePendingTimeoutCallback timeout_cb,
- void *timeout_cb_data);
+ const char *at_cmd, const char *at_cmd_prefix, enum tcore_at_command_type at_cmd_type,
+ UserRequest *ur,
+ TcorePendingResponseCallback resp_cb, void *resp_cb_data,
+ TcorePendingSendCallback send_cb, void *send_cb_data,
+ unsigned int timeout, TcorePendingTimeoutCallback timeout_cb, void *timeout_cb_data);
__END_DECLS
-#endif
+#endif /* __TCORE_AT_H__ */
#define MAX_CALL_NUMBER_LEN 83
#define MAX_CALL_NAME_LEN 83
+#define MAX_HANDLE 0xFF
+#define MIN_HANDLE 0x01
+#define INVALID_HANDLE 0x0
+
enum tcore_call_type {
TCORE_CALL_TYPE_VOICE,
TCORE_CALL_TYPE_VIDEO,
TCORE_CALL_STATUS_ALERT,
TCORE_CALL_STATUS_INCOMING,
TCORE_CALL_STATUS_WAITING,
+
+ TCORE_CALL_STATUS_SETUP_PENDING, /*call core object created but no operation invoked - when invoked, status transition to TCORE_CALL_STATUS_SETUP*/
+ TCORE_CALL_STATUS_SETUP, /*call core object created & call_handle assigned, but call_id not assigned by CP*/
+
+ TCORE_CALL_STATUS_MAX
};
enum tcore_call_no_cli_cause {
TCORE_CALL_END_ALL_HELD,
};
+enum tcore_call_silent_redial_reason{
+ TCORE_CALL_SILENT_REDIAL_REASON_NULL,
+ TCORE_CALL_SILENT_REDIAL_REASONL_MULTIRAT_EMERGENCY,
+};
+
typedef struct call_object CallObject;
struct tcore_call_operations {
TReturn (*swap)(CoreObject *o, UserRequest *ur);
TReturn (*join)(CoreObject *o, UserRequest *ur);
TReturn (*split)(CoreObject *o, UserRequest *ur);
- TReturn (*deflect)(CoreObject* o, UserRequest *ur);
- TReturn (*transfer)(CoreObject* o, UserRequest *ur);
+ TReturn (*deflect)(CoreObject *o, UserRequest *ur);
+ TReturn (*transfer)(CoreObject *o, UserRequest *ur);
TReturn (*start_cont_dtmf)(CoreObject *o, UserRequest *ur);
TReturn (*stop_cont_dtmf)(CoreObject *o, UserRequest *ur);
TReturn (*send_burst_dtmf)(CoreObject *o, UserRequest *ur);
TReturn (*get_preferred_voice_subscription)(CoreObject *o, UserRequest *ur);
TReturn (*set_privacy_mode)(CoreObject *o, UserRequest *ur);
TReturn (*get_privacy_mode)(CoreObject *o, UserRequest *ur);
+ TReturn (*modify)(CoreObject *o, UserRequest *ur); /* IMS specific */
+ TReturn (*confirm_modify)(CoreObject *o, UserRequest *ur); /* IMS specific */
};
struct tcore_call_information_operations {
- void (*mo_call_col)(CoreObject *o, char* number);
+ void (*mo_call_col)(CoreObject *o, char *number);
void (*mo_call_waiting)(CoreObject *o);
void (*mo_call_cug)(CoreObject *o, int cug_index);
void (*mo_call_forwarded)(CoreObject *o);
void (*mo_call_cfc)(CoreObject *o);
void (*mt_call_cli)(CoreObject *o, enum tcore_call_cli_mode mode, char *number);
void (*mt_call_cna)(CoreObject *o, enum tcore_call_cna_mode mode, char *name, int dcs);
- void (*mt_call_forwarded_call)(CoreObject *o, char* number);
- void (*mt_call_cug_call)(CoreObject *o, int cug_index, char* number);
- void (*mt_call_deflected_call)(CoreObject *o, char* number);
- void (*mt_call_transfered)(CoreObject *o, char* number);
- void (*call_held)(CoreObject *o, char* number);
- void (*call_active)(CoreObject *o, char* number);
- void (*call_joined)(CoreObject *o, char* number);
- void (*call_released_on_hold)(CoreObject *o, char* number);
- void (*call_transfer_alert)(CoreObject *o, char* number);
- void (*call_transfered)(CoreObject *o, char* number);
- void (*call_cf_check_message)(CoreObject *o, char* number);
+ void (*mt_call_forwarded_call)(CoreObject *o, char *number);
+ void (*mt_call_cug_call)(CoreObject *o, int cug_index, char *number);
+ void (*mt_call_deflected_call)(CoreObject *o, char *number);
+ void (*mt_call_transfered)(CoreObject *o, char *number);
+ void (*call_held)(CoreObject *o, char *number);
+ void (*call_active)(CoreObject *o, char *number);
+ void (*call_joined)(CoreObject *o, char *number);
+ void (*call_released_on_hold)(CoreObject *o, char *number);
+ void (*call_transfer_alert)(CoreObject *o, char *number);
+ void (*call_transfered)(CoreObject *o, char *number);
+ void (*call_cf_check_message)(CoreObject *o, char *number);
};
typedef void(*ConfirmCallback)(TcorePending *p, int data_len, const void *data, void *user_data);
struct tcore_call_control_operations {
- TReturn (*answer_hold_and_accept)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*answer_replace)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*answer_reject)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*end_specific)( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
- TReturn (*end_all_active)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*end_all_held)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*active)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*hold)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*swap)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*join)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*split)( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
- TReturn (*transfer)( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
- TReturn (*deflect)( CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data );
+ TReturn (*answer_hold_and_accept)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*answer_replace)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*answer_reject)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*end_specific)(CoreObject *o, UserRequest *ur, const int id, ConfirmCallback cb, void *user_data);
+ TReturn (*end_all_active)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*end_all_held)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*active)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*hold)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*swap)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*join)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*split)(CoreObject *o, UserRequest *ur, const int id, ConfirmCallback cb, void *user_data);
+ TReturn (*transfer)(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+ TReturn (*deflect)(CoreObject *o, UserRequest *ur, const char *number, ConfirmCallback cb, void *user_data);
};
-// Call Core API
-CoreObject* tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal);
-void tcore_call_free( CoreObject *o);
+/* Call Core API */
+CoreObject *tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal);
+void tcore_call_free(CoreObject *o);
-void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops);
+void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops, enum tcore_ops_type ops_type);
-// Call Object API
-CallObject* tcore_call_object_new( CoreObject *o, int id );
-gboolean tcore_call_object_free( CoreObject *o, CallObject *co );
+/* Call Object APIs */
+CallObject *tcore_call_object_new(CoreObject *o);
+gboolean tcore_call_object_free(CoreObject *o, CallObject *co);
-int tcore_call_object_total_length( CoreObject *o );
-CallObject* tcore_call_object_current_on_mt_processing( CoreObject *o );
-CallObject* tcore_call_object_current_on_mo_processing( CoreObject *o );
-CallObject* tcore_call_object_find_by_id( CoreObject *o, int id );
-CallObject* tcore_call_object_find_by_number( CoreObject *o, char *num );
-GSList* tcore_call_object_find_by_status( CoreObject *o, enum tcore_call_status cs );
+int tcore_call_object_total_length(CoreObject *o);
+CallObject *tcore_call_object_current_on_mt_processing(CoreObject *o);
+CallObject *tcore_call_object_current_on_mo_processing(CoreObject *o);
+CallObject *tcore_call_object_find_by_id(CoreObject *o, int id);
+CallObject *tcore_call_object_find_by_handle(CoreObject *o, int handle);
+CallObject *tcore_call_object_find_by_number(CoreObject *o, char *num);
+GSList *tcore_call_object_find_by_status(CoreObject *o, enum tcore_call_status cs);
-int tcore_call_object_get_id( CallObject *co );
+gboolean tcore_call_object_set_id(CallObject *co , int call_id);
+int tcore_call_object_get_id(CallObject *co);
+int tcore_call_object_get_handle(CallObject *co);
-gboolean tcore_call_object_set_type( CallObject *co, enum tcore_call_type ct );
-enum tcore_call_type tcore_call_object_get_type( CallObject *co );
+gboolean tcore_call_object_set_type(CallObject *co, enum tcore_call_type ct);
+enum tcore_call_type tcore_call_object_get_type(CallObject *co);
-gboolean tcore_call_object_set_direction( CallObject *co, enum tcore_call_direction cd );
-enum tcore_call_direction tcore_call_object_get_direction( CallObject *co );
+gboolean tcore_call_object_set_direction(CallObject *co, enum tcore_call_direction cd);
+enum tcore_call_direction tcore_call_object_get_direction(CallObject *co);
-gboolean tcore_call_object_set_status( CallObject *co, enum tcore_call_status cs );
-enum tcore_call_status tcore_call_object_get_status( CallObject *co );
+gboolean tcore_call_object_set_status(CallObject *co, enum tcore_call_status cs);
+enum tcore_call_status tcore_call_object_get_status(CallObject *co);
-gboolean tcore_call_object_set_cli_info(struct call_object *co,
- enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
- char *num, int num_len);
-enum tcore_call_cli_mode tcore_call_object_get_cli_mode( CallObject *co );
-enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(struct call_object *co);
-int tcore_call_object_get_number( CallObject *co, char *num );
+gboolean tcore_call_object_set_cli_info(CallObject *co,
+ enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
+ char *num, int num_len);
+enum tcore_call_cli_mode tcore_call_object_get_cli_mode(CallObject *co);
+enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(CallObject *co);
+int tcore_call_object_get_number(CallObject *co, char *num);
-gboolean tcore_call_object_set_cna_info( CallObject *co, enum tcore_call_cna_mode mode, char *name, int dcs );
-enum tcore_call_cna_mode tcore_call_object_get_cna_mode( CallObject *co );
-int tcore_call_object_get_name( CallObject *co, char *name );
+gboolean tcore_call_object_set_cna_info(CallObject *co, enum tcore_call_cna_mode mode, char *name, int dcs);
+enum tcore_call_cna_mode tcore_call_object_get_cna_mode(CallObject *co);
+int tcore_call_object_get_name(CallObject *co, char *name);
-gboolean tcore_call_object_set_multiparty_state ( CallObject *co, gboolean is );
-gboolean tcore_call_object_get_multiparty_state ( CallObject *co );
+gboolean tcore_call_object_set_multiparty_state (CallObject *co, gboolean is);
+gboolean tcore_call_object_get_multiparty_state (CallObject *co);
-gboolean tcore_call_object_set_active_line( CallObject *co, unsigned int line );
-int tcore_call_object_get_active_line( CallObject *co );
+gboolean tcore_call_object_set_active_line(CallObject *co, unsigned int line);
+int tcore_call_object_get_active_line(CallObject *co);
gboolean tcore_call_object_set_is_volte_call(CallObject *co, gboolean flag);
gboolean tcore_call_object_get_is_volte_call(CallObject *co);
gboolean tcore_call_object_set_session_id(CallObject *co, int session_id);
int tcore_call_object_get_conf_call_session_id(CallObject *co);
gboolean tcore_call_object_set_early_media(CallObject *co, gboolean flag);
gboolean tcore_call_object_get_early_media(CallObject *co);
-struct call_object *tcore_call_object_find_by_session_id(CoreObject *o, int session_id);
+CallObject *tcore_call_object_find_by_session_id(CoreObject *o, int session_id);
gboolean tcore_call_object_check_cs_call_existence(CoreObject *o);
GSList *tcore_call_object_get_all_session_ids(CoreObject *o);
-// Call Control API
-gboolean tcore_call_control_new( CoreObject *o, struct tcore_call_control_operations *ops );
-void tcore_call_control_free( CoreObject *o );
-
-TReturn tcore_call_control_answer_hold_and_accept( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_answer_replace( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_answer_reject( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-
-TReturn tcore_call_control_end_specific( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_end_all_active( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_end_all_held( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-
-TReturn tcore_call_control_active( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_hold( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_swap( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_join( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_split( CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_transfer( CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data );
-TReturn tcore_call_control_deflect( CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data );
-
-void tcore_call_control_set_operations( CoreObject* o, struct tcore_call_control_operations *ops );
-
-
-void tcore_call_information_mo_col( CoreObject *o, char* number );
-void tcore_call_information_mo_waiting( CoreObject *o );
-void tcore_call_information_mo_cug( CoreObject *o, int cug_index );
-void tcore_call_information_mo_forwarded( CoreObject *o );
-void tcore_call_information_mo_barred_incoming( CoreObject *o );
-void tcore_call_information_mo_barred_outgoing( CoreObject *o );
-void tcore_call_information_mo_deflected( CoreObject *o );
-void tcore_call_information_mo_clir_suppression_reject( CoreObject *o );
-void tcore_call_information_mo_cfu( CoreObject *o );
-void tcore_call_information_mo_cfc( CoreObject *o );
-
-void tcore_call_information_mt_cli( CoreObject *o, enum tcore_call_cli_mode mode, char* number );
-void tcore_call_information_mt_cna( CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs );
-void tcore_call_information_mt_forwarded_call( CoreObject *o, char* number );
-void tcore_call_information_mt_cug_call( CoreObject *o, int cug_index, char* number );
-void tcore_call_information_mt_deflected_call( CoreObject *o, char* number );
-void tcore_call_information_mt_transfered( CoreObject *o, char* number );
-
-void tcore_call_information_held( CoreObject *o, char* number );
-void tcore_call_information_active( CoreObject *o, char* number );
-void tcore_call_information_joined( CoreObject *o, char* number );
-void tcore_call_information_released_on_hold( CoreObject *o, char* number );
-void tcore_call_information_transfer_alert( CoreObject *o, char* number );
-void tcore_call_information_transfered( CoreObject *o, char* number );
-void tcore_call_information_cf_check_ss_message( CoreObject *o, char* number );
-
-void tcore_call_information_set_operations( CoreObject *o, struct tcore_call_information_operations *ops );
+gboolean tcore_call_object_set_is_release_pending(CallObject *co, gboolean flag);
+gboolean tcore_call_object_get_is_release_pending(CallObject *co);
+
+
+gboolean tcore_call_object_set_silent_redial_reason(CallObject *co, enum tcore_call_silent_redial_reason reason);
+enum tcore_call_silent_redial_reason tcore_call_object_get_silent_redial_reason(CallObject *co);
+
+/* Call Control APIs */
+gboolean tcore_call_control_new(CoreObject *o, struct tcore_call_control_operations *ops);
+void tcore_call_control_free(CoreObject *o);
+
+TReturn tcore_call_control_answer_hold_and_accept(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_answer_replace(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_answer_reject(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+
+TReturn tcore_call_control_end_specific(CoreObject *o, UserRequest *ur, const int id, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_end_all_active(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_end_all_held(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+
+TReturn tcore_call_control_active(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_hold(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_swap(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_join(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_split(CoreObject *o, UserRequest *ur, const int id, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_transfer(CoreObject *o, UserRequest *ur, ConfirmCallback cb, void *user_data);
+TReturn tcore_call_control_deflect(CoreObject *o, UserRequest *ur, const char *number, ConfirmCallback cb, void *user_data);
+
+void tcore_call_control_set_operations(CoreObject *o, struct tcore_call_control_operations *ops);
+
+
+void tcore_call_information_mo_col(CoreObject *o, char *number);
+void tcore_call_information_mo_waiting(CoreObject *o);
+void tcore_call_information_mo_cug(CoreObject *o, int cug_index);
+void tcore_call_information_mo_forwarded(CoreObject *o);
+void tcore_call_information_mo_barred_incoming(CoreObject *o);
+void tcore_call_information_mo_barred_outgoing(CoreObject *o);
+void tcore_call_information_mo_deflected(CoreObject *o);
+void tcore_call_information_mo_clir_suppression_reject(CoreObject *o);
+void tcore_call_information_mo_cfu(CoreObject *o);
+void tcore_call_information_mo_cfc(CoreObject *o);
+
+void tcore_call_information_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char *number);
+void tcore_call_information_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char *name, int dcs);
+void tcore_call_information_mt_forwarded_call(CoreObject *o, char *number);
+void tcore_call_information_mt_cug_call(CoreObject *o, int cug_index, char *number);
+void tcore_call_information_mt_deflected_call(CoreObject *o, char *number);
+void tcore_call_information_mt_transfered(CoreObject *o, char *number);
+
+void tcore_call_information_held(CoreObject *o, char *number);
+void tcore_call_information_active(CoreObject *o, char *number);
+void tcore_call_information_joined(CoreObject *o, char *number);
+void tcore_call_information_released_on_hold(CoreObject *o, char *number);
+void tcore_call_information_transfer_alert(CoreObject *o, char *number);
+void tcore_call_information_transfered(CoreObject *o, char *number);
+void tcore_call_information_cf_check_ss_message(CoreObject *o, char *number);
+
+void tcore_call_information_set_operations(CoreObject *o, struct tcore_call_information_operations *ops);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_CALL_H__ */
CONTEXT_TECH_3GPP2
};
-CoreObject* tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal);
-void tcore_context_free(CoreObject *o);
-
-TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state);
-enum co_context_state tcore_context_get_state(CoreObject *o);
-TReturn tcore_context_set_id(CoreObject *o, unsigned char id);
-unsigned char tcore_context_get_id(CoreObject *o);
-TReturn tcore_context_set_role(CoreObject *o, enum co_context_role type);
-enum co_context_role tcore_context_get_role(CoreObject *o);
-
-TReturn tcore_context_set_apn(CoreObject *o, const char *apn);
-char* tcore_context_get_apn(CoreObject *o);
-TReturn tcore_context_set_address(CoreObject *o, const char *addr);
-char* tcore_context_get_address(CoreObject *o);
-TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type);
-enum co_context_type tcore_context_get_type(CoreObject *o);
-TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp);
-enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o);
-TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp);
-enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o);
+CoreObject *tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal);
+void tcore_context_free(CoreObject *o);
+
+TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state);
+enum co_context_state tcore_context_get_state(CoreObject *o);
+TReturn tcore_context_set_id(CoreObject *o, unsigned char id);
+unsigned char tcore_context_get_id(CoreObject *o);
+TReturn tcore_context_set_role(CoreObject *o, enum co_context_role type);
+enum co_context_role tcore_context_get_role(CoreObject *o);
+
+TReturn tcore_context_set_apn(CoreObject *o, const char *apn);
+char *tcore_context_get_apn(CoreObject *o);
+TReturn tcore_context_set_address(CoreObject *o, const char *addr);
+char *tcore_context_get_address(CoreObject *o);
+TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type);
+enum co_context_type tcore_context_get_type(CoreObject *o);
+TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp);
+enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o);
+TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp);
+enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o);
TReturn tcore_context_set_tech_preference(CoreObject *o, enum co_context_tech tech);
enum co_context_tech tcore_context_get_tech_preference(CoreObject *o);
-TReturn tcore_context_set_username(CoreObject *o, const char *username);
-char* tcore_context_get_username(CoreObject *o);
-TReturn tcore_context_set_password(CoreObject *o, const char *password);
-char* tcore_context_get_password(CoreObject *o);
-TReturn tcore_context_set_dns1(CoreObject *o, const char *dns);
-TReturn tcore_context_set_ipv6_dns1(CoreObject *o, const char *dns);
-char* tcore_context_get_dns1(CoreObject *o);
-TReturn tcore_context_set_dns2(CoreObject *o, const char *dns);
-TReturn tcore_context_set_ipv6_dns2(CoreObject *o, const char *dns);
-char* tcore_context_get_dns2(CoreObject *o);
-TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth);
-enum co_context_auth tcore_context_get_auth(CoreObject *o);
-TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy);
-char* tcore_context_get_proxy(CoreObject *o);
-TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl);
-char* tcore_context_get_mmsurl(CoreObject *o);
-TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name);
-char* tcore_context_get_profile_name(CoreObject *o);
-TReturn tcore_context_set_default_profile(CoreObject *o, gboolean default_conn);
-gboolean tcore_context_get_default_profile(CoreObject *o);
-
-TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo);
-TReturn tcore_context_reset_devinfo(CoreObject *o);
-void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src);
-
-char* tcore_context_get_ipv4_addr(CoreObject *o);
-char* tcore_context_get_ipv4_dns1(CoreObject *o);
-char* tcore_context_get_ipv4_dns2(CoreObject *o);
-char* tcore_context_get_ipv4_gw(CoreObject *o);
-char* tcore_context_get_ipv4_devname(CoreObject *o);
-
-char* tcore_context_get_ipv6_addr(CoreObject *o);
-char* tcore_context_get_ipv6_dns1(CoreObject *o);
-char* tcore_context_get_ipv6_dns2(CoreObject *o);
-char* tcore_context_get_ipv6_gw(CoreObject *o);
+TReturn tcore_context_set_username(CoreObject *o, const char *username);
+char *tcore_context_get_username(CoreObject *o);
+TReturn tcore_context_set_password(CoreObject *o, const char *password);
+char *tcore_context_get_password(CoreObject *o);
+TReturn tcore_context_set_dns1(CoreObject *o, const char *dns);
+TReturn tcore_context_set_ipv6_dns1(CoreObject *o, const char *dns);
+char *tcore_context_get_dns1(CoreObject *o);
+TReturn tcore_context_set_dns2(CoreObject *o, const char *dns);
+TReturn tcore_context_set_ipv6_dns2(CoreObject *o, const char *dns);
+char *tcore_context_get_dns2(CoreObject *o);
+TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth);
+enum co_context_auth tcore_context_get_auth(CoreObject *o);
+TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy);
+char *tcore_context_get_proxy(CoreObject *o);
+TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl);
+char *tcore_context_get_mmsurl(CoreObject *o);
+TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name);
+char *tcore_context_get_profile_name(CoreObject *o);
+TReturn tcore_context_set_default_profile(CoreObject *o, gboolean default_conn);
+gboolean tcore_context_get_default_profile(CoreObject *o);
+
+TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo);
+TReturn tcore_context_reset_devinfo(CoreObject *o);
+TReturn tcore_context_set_bearer_info(CoreObject *o, struct tnoti_ps_dedicated_bearer_info *bearer_info);
+TReturn tcore_context_get_bearer_info(CoreObject *o, struct dedicated_bearer_info *bearer_info);
+TReturn tcore_context_reset_bearer_info(CoreObject *o);
+void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src);
+
+char *tcore_context_get_ipv4_addr(CoreObject *o);
+char *tcore_context_get_ipv4_dns1(CoreObject *o);
+char *tcore_context_get_ipv4_dns2(CoreObject *o);
+char *tcore_context_get_ipv4_gw(CoreObject *o);
+char *tcore_context_get_ipv4_devname(CoreObject *o);
+
+char *tcore_context_get_ipv6_addr(CoreObject *o);
+char *tcore_context_get_ipv6_dns1(CoreObject *o);
+char *tcore_context_get_ipv6_dns2(CoreObject *o);
+char *tcore_context_get_ipv6_gw(CoreObject *o);
pcscf_addr *tcore_context_get_pcscf_ipv4_addr(CoreObject *o);
pcscf_addr *tcore_context_get_pcscf_ipv6_addr(CoreObject *o);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_CONTEXT_H__ */
TReturn (*set_smart_assistant_info)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_gps_new(TcorePlugin *p, const char *name, struct tcore_gps_operations *ops, TcoreHal *hal);
-void tcore_gps_free(CoreObject *o);
-void tcore_gps_set_ops(CoreObject *o, struct tcore_gps_operations *ops);
+CoreObject *tcore_gps_new(TcorePlugin *p, const char *name, struct tcore_gps_operations *ops, TcoreHal *hal);
+void tcore_gps_free(CoreObject *o);
+void tcore_gps_set_ops(CoreObject *o, struct tcore_gps_operations *ops, enum tcore_ops_type ops_type);
__END_DECLS
TReturn (*get_sn)(CoreObject *o, UserRequest *ur);
TReturn (*dun_pin_ctrl)(CoreObject *o, UserRequest *ur);
TReturn (*get_flight_mode)(CoreObject *o, UserRequest *ur);
+ TReturn (*get_device_info)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_modem_new(TcorePlugin *p, const char *name, struct tcore_modem_operations *ops, TcoreHal *hal);
-void tcore_modem_free(CoreObject *o);
+CoreObject *tcore_modem_new(TcorePlugin *p, const char *name, struct tcore_modem_operations *ops, TcoreHal *hal);
+void tcore_modem_free(CoreObject *o);
-void tcore_modem_set_ops(CoreObject *o, struct tcore_modem_operations *ops);
+void tcore_modem_set_ops(CoreObject *o, struct tcore_modem_operations *ops, enum tcore_ops_type ops_type);
-TReturn tcore_modem_set_flight_mode_state(CoreObject *o, gboolean flag);
-gboolean tcore_modem_get_flight_mode_state(CoreObject *o);
-TReturn tcore_modem_set_powered(CoreObject *o, gboolean pwr);
-gboolean tcore_modem_get_powered(CoreObject *o);
+TReturn tcore_modem_set_flight_mode_state(CoreObject *o, gboolean flag);
+gboolean tcore_modem_get_flight_mode_state(CoreObject *o);
+TReturn tcore_modem_set_powered(CoreObject *o, gboolean pwr);
+gboolean tcore_modem_get_powered(CoreObject *o);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_MODEM_H__ */
*/
#define PROP_MODEM_READ_ESN_FOR_ACTIVATION "esn_for_activation"
-
+#define NETWORK_MCC_MNC_OPER_LIST_GSMA_DB "/opt/dbspace/.mcc_mnc_oper_list.db"
enum tcore_network_service_domain_type {
TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT,
struct tcore_network_operator_info {
enum tcore_network_operator_info_type type;
- char mcc[4];
- char mnc[4];
- char name[41];
- char country[4];
+ char mcc[NETWORK_MAX_MCC_LEN+1];
+ char mnc[NETWORK_MAX_MNC_LEN+1];
+ char name[NETWORK_MAX_NETWORK_NAME_LEN+1];
+ char country[NETWORK_MAX_COUNTRY_CODE_LEN+1];
};
struct tcore_network_operations {
TReturn (*set_roaming_preference)(CoreObject *o, UserRequest *ur); /* 3GPP2 spcefic */
TReturn (*get_roaming_preference)(CoreObject *o, UserRequest *ur); /* 3GPP2 spcefic */
TReturn (*get_subscription_info)(CoreObject *o, UserRequest *ur); /* 3GPP2 spcefic */
+ TReturn (*search_ecc_rat)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_network_new(TcorePlugin *plugin, const char *name,
- struct tcore_network_operations *ops, TcoreHal *hal);
-void tcore_network_free(CoreObject *co);
-
-void tcore_network_set_ops(CoreObject *co, struct tcore_network_operations *ops);
-
-TReturn tcore_network_set_plmn(CoreObject *co, const char *plmn);
-char* tcore_network_get_plmn(CoreObject *co);
-
-TReturn tcore_network_set_network_name(CoreObject *co,
- enum tcore_network_name_type type, const char *network_name);
-char* tcore_network_get_network_name(CoreObject *co,
- enum tcore_network_name_type type);
-
-TReturn tcore_network_set_network_name_priority(CoreObject *co,
- enum tcore_network_name_priority priority);
-TReturn tcore_network_get_network_name_priority(CoreObject *co,
- enum tcore_network_name_priority *priority);
-
-TReturn tcore_network_set_roaming_state(CoreObject *co, gboolean state);
-gboolean tcore_network_get_roaming_state(CoreObject *co);
-
-TReturn tcore_network_set_restricted_state(CoreObject *co, int state);
-int tcore_network_get_restricted_state(CoreObject *co);
-
-TReturn tcore_network_set_service_status(CoreObject *co,
- enum tcore_network_service_domain_type type,
- enum telephony_network_service_domain_status status);
-TReturn tcore_network_get_service_status(CoreObject *co,
- enum tcore_network_service_domain_type type,
- enum telephony_network_service_domain_status *result);
-
-TReturn tcore_network_set_access_technology(CoreObject *co,
- enum telephony_network_access_technology act);
-TReturn tcore_network_get_access_technology(CoreObject *co,
- enum telephony_network_access_technology *result);
-
-TReturn tcore_network_set_lac(CoreObject *co, unsigned int lac);
-TReturn tcore_network_get_lac(CoreObject *co, unsigned int *result);
-
-TReturn tcore_network_set_rac(CoreObject *co, unsigned int rac);
-TReturn tcore_network_get_rac(CoreObject *co, unsigned int *result);
-
-TReturn tcore_network_set_cell_id(CoreObject *co, unsigned int cell_id);
-TReturn tcore_network_get_cell_id(CoreObject *co, unsigned int *result);
-
-TReturn tcore_network_set_gsm_dtm_support(CoreObject *co, gboolean state);
-gboolean tcore_network_get_gsm_dtm_support(CoreObject *co);
-
-TReturn tcore_network_set_service_type(CoreObject *co,
- enum telephony_network_service_type service_type);
-TReturn tcore_network_get_service_type(CoreObject *co,
- enum telephony_network_service_type *result);
-
-TReturn tcore_network_operator_info_add(CoreObject *co,
- const struct tcore_network_operator_info *noi);
-
-struct tcore_network_operator_info*
- tcore_network_operator_info_find(CoreObject *co,
- const char *mcc, const char *mnc);
+CoreObject *tcore_network_new(TcorePlugin *plugin, const char *name,
+ struct tcore_network_operations *ops, TcoreHal *hal);
+void tcore_network_free(CoreObject *co);
+
+void tcore_network_set_ops(CoreObject *o,
+ struct tcore_network_operations *ops, enum tcore_ops_type ops_type);
+
+TReturn tcore_network_set_plmn(CoreObject *co, const char *plmn);
+char *tcore_network_get_plmn(CoreObject *co);
+
+TReturn tcore_network_set_network_name(CoreObject *co,
+ enum tcore_network_name_type type, const char *network_name);
+char *tcore_network_get_network_name(CoreObject *co,
+ enum tcore_network_name_type type);
+
+TReturn tcore_network_set_network_name_priority(CoreObject *co,
+ enum tcore_network_name_priority priority);
+TReturn tcore_network_get_network_name_priority(CoreObject *co,
+ enum tcore_network_name_priority *priority);
+
+TReturn tcore_network_set_roaming_state(CoreObject *co, gboolean state);
+gboolean tcore_network_get_roaming_state(CoreObject *co);
+
+TReturn tcore_network_set_restricted_state(CoreObject *co, int state);
+int tcore_network_get_restricted_state(CoreObject *co);
+
+TReturn tcore_network_set_service_status(CoreObject *co,
+ enum tcore_network_service_domain_type type,
+ enum telephony_network_service_domain_status status);
+TReturn tcore_network_get_service_status(CoreObject *co,
+ enum tcore_network_service_domain_type type,
+ enum telephony_network_service_domain_status *result);
+
+TReturn tcore_network_set_access_technology(CoreObject *co,
+ enum telephony_network_access_technology act);
+TReturn tcore_network_get_access_technology(CoreObject *co,
+ enum telephony_network_access_technology *result);
+
+TReturn tcore_network_set_lac(CoreObject *co, unsigned int lac);
+TReturn tcore_network_get_lac(CoreObject *co, unsigned int *result);
+
+TReturn tcore_network_set_rac(CoreObject *co, unsigned int rac);
+TReturn tcore_network_get_rac(CoreObject *co, unsigned int *result);
+
+TReturn tcore_network_set_cell_id(CoreObject *co, unsigned int cell_id);
+TReturn tcore_network_get_cell_id(CoreObject *co, unsigned int *result);
+
+TReturn tcore_network_set_gsm_dtm_support(CoreObject *co, gboolean state);
+gboolean tcore_network_get_gsm_dtm_support(CoreObject *co);
+
+TReturn tcore_network_set_service_type(CoreObject *co,
+ enum telephony_network_service_type service_type);
+TReturn tcore_network_get_service_type(CoreObject *co,
+ enum telephony_network_service_type *result);
+TReturn tcore_network_set_ims_reg_info(CoreObject *co,
+ struct tel_network_ims_registration_info ims_reg_info);
+TReturn tcore_network_get_ims_reg_info(CoreObject *co,
+ struct tel_network_ims_registration_info *ims_reg_info);
+TReturn tcore_network_set_ims_voice_status(CoreObject *co, gboolean status);
+TReturn tcore_network_get_ims_voice_status(CoreObject *co, gboolean *status);
+TReturn tcore_network_set_ecc_rat_search_status(CoreObject *co,
+ enum telephony_network_ecc_rat_search_status status);
+TReturn tcore_network_get_ecc_rat_search_status(CoreObject *co,
+ enum telephony_network_ecc_rat_search_status *status);
+TReturn tcore_network_set_ecc_rat(CoreObject *co,
+ enum telephony_network_access_technology ecc_rat);
+TReturn tcore_network_get_ecc_rat(CoreObject *co,
+ enum telephony_network_access_technology *ecc_rat);
+TReturn tcore_network_operator_info_add(CoreObject *co,
+ const struct tcore_network_operator_info *noi);
+
+struct tcore_network_operator_info *tcore_network_operator_info_find(CoreObject *co,
+ const char *mcc, const char *mnc);
+void tcore_network_update_mcc_mnc_oper_list(CoreObject *co,
+ const char *plmn, const char *name, enum tcore_network_operator_info_type type);
+gboolean tcore_network_load_mcc_mnc_oper_list_from_db(TcorePlugin *p,
+ CoreObject *co, const char *mcc, const char *mnc, const char *db_path);
+void tcore_network_update_mcc_mnc_oper_list_db(TcorePlugin *p, const char *mcc, const char *mnc, const char *oper_name);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_NETWORK_H__ */
TReturn (*delete_record)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_phonebook_new(TcorePlugin *p, const char *name, struct tcore_phonebook_operations *ops, TcoreHal *hal);
-void tcore_phonebook_free(CoreObject *n);
+CoreObject *tcore_phonebook_new(TcorePlugin *p, const char *name, struct tcore_phonebook_operations *ops, TcoreHal *hal);
+void tcore_phonebook_free(CoreObject *n);
-void tcore_phonebook_set_ops(CoreObject *o, struct tcore_phonebook_operations *ops);
+void tcore_phonebook_set_ops(CoreObject *o, struct tcore_phonebook_operations *ops, enum tcore_ops_type ops_type);
-gboolean tcore_phonebook_get_status(CoreObject *o);
-gboolean tcore_phonebook_set_status(CoreObject *o, gboolean b_init);
+gboolean tcore_phonebook_get_status(CoreObject *o);
+gboolean tcore_phonebook_set_status(CoreObject *o, gboolean b_init);
struct tel_phonebook_support_list* tcore_phonebook_get_support_list(CoreObject *o);
-gboolean tcore_phonebook_set_support_list(CoreObject *o, struct tel_phonebook_support_list *list);
+gboolean tcore_phonebook_set_support_list(CoreObject *o, struct tel_phonebook_support_list *list);
struct tel_phonebook_field_support_list* tcore_phonebook_get_field_support_list(CoreObject *o);
-gboolean tcore_phonebook_set_field_support_list(CoreObject *o, struct tel_phonebook_field_support_list *list);
+gboolean tcore_phonebook_set_field_support_list(CoreObject *o, struct tel_phonebook_field_support_list *list);
enum tel_phonebook_type tcore_phonebook_get_selected_type(CoreObject *o);
gboolean tcore_phonebook_set_selected_type(CoreObject *o, enum tel_phonebook_type t);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_PHONEBOOK_H__ */
TReturn (*send_dormant_request)(CoreObject *co_ps, void *user_data);
};
-CoreObject* tcore_ps_new(TcorePlugin *p, const char *name, struct tcore_ps_operations *ops, TcoreHal *hal);
-void tcore_ps_free(CoreObject *o);
+CoreObject *tcore_ps_new(TcorePlugin *p, const char *name, struct tcore_ps_operations *ops, TcoreHal *hal);
+void tcore_ps_free(CoreObject *o);
-void tcore_ps_set_ops(CoreObject *o, struct tcore_ps_operations *ops);
+void tcore_ps_set_ops(CoreObject *o, struct tcore_ps_operations *ops, enum tcore_ops_type ops_type);
-TReturn tcore_ps_add_context(CoreObject *o, CoreObject *ctx_o);
-TReturn tcore_ps_remove_context(CoreObject *o, CoreObject *ctx_o);
-CoreObject* tcore_ps_ref_context_by_role(CoreObject *o, enum co_context_role role);
-GSList* tcore_ps_ref_context_by_id(CoreObject *o, unsigned int id);
-gboolean tcore_ps_any_context_activating_activated(CoreObject *o, int * state);
+TReturn tcore_ps_add_context(CoreObject *o, CoreObject *ctx_o);
+TReturn tcore_ps_remove_context(CoreObject *o, CoreObject *ctx_o);
+CoreObject *tcore_ps_ref_context_by_role(CoreObject *o, enum co_context_role role);
+GSList *tcore_ps_ref_context_by_id(CoreObject *o, unsigned int id);
+gboolean tcore_ps_any_context_activating_activated(CoreObject *o, int *state);
-TReturn tcore_ps_set_online(CoreObject *o, gboolean state);
-TReturn tcore_ps_set_num_of_pdn(CoreObject *o, gint numbers);
+TReturn tcore_ps_set_online(CoreObject *o, gboolean state);
+TReturn tcore_ps_set_num_of_pdn(CoreObject *o, gint numbers);
unsigned int tcore_ps_get_num_of_pdn(CoreObject *o);
unsigned int tcore_ps_set_cid_active(CoreObject *o, unsigned int cid, unsigned int enable);
unsigned int tcore_ps_get_cid_active(CoreObject *o, unsigned int cid);
-GSList* tcore_ps_get_active_cids(CoreObject *o);
+GSList *tcore_ps_get_active_cids(CoreObject *o);
unsigned int tcore_ps_set_cid_connected(CoreObject *o, unsigned int cid, unsigned int connected);
unsigned int tcore_ps_get_cid_connected(CoreObject *o, unsigned int cid);
-GSList* tcore_ps_get_connected_cids(CoreObject *o);
+GSList *tcore_ps_get_connected_cids(CoreObject *o);
unsigned int tcore_ps_is_active_apn(CoreObject *o, const char* apn);
-TReturn tcore_ps_assign_context_id(CoreObject *o, CoreObject *context, unsigned char cid);
-TReturn tcore_ps_clear_context_id(CoreObject *o, CoreObject *context);
+TReturn tcore_ps_assign_context_id(CoreObject *o, CoreObject *context, unsigned char cid);
+TReturn tcore_ps_clear_context_id(CoreObject *o, CoreObject *context);
TReturn tcore_ps_send_dormant_request(CoreObject *o, void *user_data);
-TReturn tcore_ps_define_context(CoreObject *o, CoreObject *context, void *user_data);
-TReturn tcore_ps_activate_context(CoreObject *o, CoreObject *context, void *user_data);
-TReturn tcore_ps_deactivate_context(CoreObject *o, CoreObject *context, void *user_data);
-TReturn tcore_ps_deactivate_contexts(CoreObject *o);
-TReturn tcore_ps_deactivate_cid(CoreObject *o, unsigned int cid);
+TReturn tcore_ps_define_context(CoreObject *o, CoreObject *context, void *user_data);
+TReturn tcore_ps_activate_context(CoreObject *o, CoreObject *context, void *user_data);
+TReturn tcore_ps_deactivate_context(CoreObject *o, CoreObject *context, void *user_data);
+TReturn tcore_ps_deactivate_contexts(CoreObject *o);
+TReturn tcore_ps_deactivate_cid(CoreObject *o, unsigned int cid);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_PS_H__ */
TReturn (*get_cardreader_status)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_sap_new(TcorePlugin *p, const char *name, struct tcore_sap_operations *ops, TcoreHal *hal);
-void tcore_sap_free(CoreObject *o);
-void tcore_sap_set_ops(CoreObject *o, struct tcore_sap_operations *ops);
+CoreObject *tcore_sap_new(TcorePlugin *p, const char *name, struct tcore_sap_operations *ops, TcoreHal *hal);
+void tcore_sap_free(CoreObject *o);
+void tcore_sap_set_ops(CoreObject *o, struct tcore_sap_operations *ops, enum tcore_ops_type ops_type);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_SAP_H__ */
TReturn (*user_confirmation)(CoreObject *o, UserRequest *ur);
};
-int tcore_sat_decode_proactive_command(unsigned char* tlv_origin, unsigned int tlv_length, struct tcore_sat_proactive_command* decoded_tlv);
-int tcore_sat_decode_call_control_result(unsigned char* tlv_origin, unsigned int tlv_length, struct tnoti_sat_call_control_result_ind* call_ctrl_result_tlv);
+int tcore_sat_decode_proactive_command(unsigned char *tlv_origin, unsigned int tlv_length, struct tcore_sat_proactive_command *decoded_tlv);
+int tcore_sat_decode_call_control_result(unsigned char *tlv_origin, unsigned int tlv_length, struct tnoti_sat_call_control_result_ind *call_ctrl_result_tlv);
int tcore_sat_encode_envelop_cmd(const struct treq_sat_envelop_cmd_data *src_envelop, char *dst_envelop);
int tcore_sat_encode_terminal_response(const struct treq_sat_terminal_rsp_data *src_tr, char *dst_tr);
-CoreObject* tcore_sat_new(TcorePlugin *p, const char *name, struct tcore_sat_operations *ops, TcoreHal *hal);
-void tcore_sat_free(CoreObject *n);
+CoreObject *tcore_sat_new(TcorePlugin *p, const char *name, struct tcore_sat_operations *ops, TcoreHal *hal);
+void tcore_sat_free(CoreObject *n);
-void tcore_sat_set_ops(CoreObject *o, struct tcore_sat_operations *ops);
+void tcore_sat_set_ops(CoreObject *o, struct tcore_sat_operations *ops, enum tcore_ops_type ops_type);
-#endif
+#endif /* __TCORE_CO_SAT_H__ */
TReturn (*set_powerstate)(CoreObject *o, UserRequest *ur);
};
-CoreObject* tcore_sim_new(TcorePlugin *p, const char *name, struct tcore_sim_operations *ops, TcoreHal *hal);
-void tcore_sim_free(CoreObject *n);
+enum tcore_sim_file_type_e {
+ SIM_FTYPE_DEDICATED = 0x00, /**< Dedicated */
+ SIM_FTYPE_TRANSPARENT = 0x01, /**< Transparent -binary type*/
+ SIM_FTYPE_LINEAR_FIXED = 0x02, /**< Linear fixed - record type*/
+ SIM_FTYPE_CYCLIC = 0x04, /**< Cyclic - record type*/
+ SIM_FTYPE_INVALID_TYPE = 0xFF /**< Invalid type */
+};
+
+struct tcore_sim_ef_info {
+ enum tcore_sim_file_type_e file_type;
+ unsigned short file_id;
+ unsigned int file_size;
+ int record_length;
+ int number_of_records;
+};
+
+CoreObject *tcore_sim_new(TcorePlugin *p, const char *name, struct tcore_sim_operations *ops, TcoreHal *hal);
+void tcore_sim_free(CoreObject *n);
-void tcore_sim_set_ops(CoreObject *o, struct tcore_sim_operations *ops);
+void tcore_sim_set_ops(CoreObject *o, struct tcore_sim_operations *ops, enum tcore_ops_type ops_type);
-enum tel_sim_type tcore_sim_get_type(CoreObject *o);
-gboolean tcore_sim_set_type(CoreObject *o, enum tel_sim_type type);
+enum tel_sim_type tcore_sim_get_type(CoreObject *o);
+gboolean tcore_sim_set_type(CoreObject *o, enum tel_sim_type type);
-struct tel_sim_imsi* tcore_sim_get_imsi(CoreObject *o);
-gboolean tcore_sim_set_imsi(CoreObject *o, const struct tel_sim_imsi *imsi);
+struct tel_sim_imsi *tcore_sim_get_imsi(CoreObject *o);
+gboolean tcore_sim_set_imsi(CoreObject *o, const struct tel_sim_imsi *imsi);
-enum tel_sim_status tcore_sim_get_status(CoreObject *o);
-gboolean tcore_sim_set_status(CoreObject *o, enum tel_sim_status status);
+enum tel_sim_status tcore_sim_get_status(CoreObject *o);
+gboolean tcore_sim_set_status(CoreObject *o, enum tel_sim_status status);
-gboolean tcore_sim_get_identification(CoreObject *o);
-gboolean tcore_sim_set_identification(CoreObject *o, gboolean b_changed);
+gboolean tcore_sim_get_identification(CoreObject *o);
+gboolean tcore_sim_set_identification(CoreObject *o, gboolean b_changed);
-struct tel_sim_service_table* tcore_sim_get_service_table(CoreObject *o);
-gboolean tcore_sim_set_service_table(CoreObject *o, const struct tel_sim_service_table *svct);
-enum tcore_return tcore_sim_delete_service_table(CoreObject *o);
+struct tel_sim_service_table *tcore_sim_get_service_table(CoreObject *o);
+gboolean tcore_sim_set_service_table(CoreObject *o, const struct tel_sim_service_table *svct);
+enum tcore_return tcore_sim_delete_service_table(CoreObject *o);
-struct tel_sim_cphs_csp* tcore_sim_get_csp(CoreObject *o);
-gboolean tcore_sim_set_csp(CoreObject *o, const struct tel_sim_cphs_csp *csp);
-gboolean tcore_sim_delete_csp(CoreObject *o);
+struct tel_sim_cphs_csp *tcore_sim_get_csp(CoreObject *o);
+gboolean tcore_sim_set_csp(CoreObject *o, const struct tel_sim_cphs_csp *csp);
+gboolean tcore_sim_delete_csp(CoreObject *o);
-struct tel_sim_ecc_list* tcore_sim_get_ecc_list(CoreObject *o);
-gboolean tcore_sim_set_ecc_list(CoreObject *o, const struct tel_sim_ecc_list *ecc_list);
-enum tcore_return tcore_sim_delete_ecc_list(CoreObject *o);
+struct tel_sim_ecc_list *tcore_sim_get_ecc_list(CoreObject *o);
+gboolean tcore_sim_set_ecc_list(CoreObject *o, const struct tel_sim_ecc_list *ecc_list);
+enum tcore_return tcore_sim_delete_ecc_list(CoreObject *o);
-struct tel_sim_msisdn_list* tcore_sim_get_msisdn_list(CoreObject *o);
-gboolean tcore_sim_set_msisdn_list(CoreObject *o, const struct tel_sim_msisdn_list *msisdn_list);
-enum tcore_return tcore_sim_delete_msisdn_list(CoreObject *o);
+struct tel_sim_msisdn_list *tcore_sim_get_msisdn_list(CoreObject *o);
+gboolean tcore_sim_set_msisdn_list(CoreObject *o, const struct tel_sim_msisdn_list *msisdn_list);
+enum tcore_return tcore_sim_delete_msisdn_list(CoreObject *o);
-struct tel_sim_spn* tcore_sim_get_spn(CoreObject *o);
-gboolean tcore_sim_set_spn(CoreObject *o, const struct tel_sim_spn *spn);
-enum tcore_return tcore_sim_delete_spn(CoreObject *o);
+struct tel_sim_spn *tcore_sim_get_spn(CoreObject *o);
+gboolean tcore_sim_set_spn(CoreObject *o, const struct tel_sim_spn *spn);
+enum tcore_return tcore_sim_delete_spn(CoreObject *o);
-struct tel_sim_cphs_netname* tcore_sim_get_cphs_netname(CoreObject *o);
-gboolean tcore_sim_set_cphs_netname(CoreObject *o, const struct tel_sim_cphs_netname *cphs_netname);
-enum tcore_return tcore_sim_delete_cphs_netname(CoreObject *o);
+struct tel_sim_cphs_netname *tcore_sim_get_cphs_netname(CoreObject *o);
+gboolean tcore_sim_set_cphs_netname(CoreObject *o, const struct tel_sim_cphs_netname *cphs_netname);
+enum tcore_return tcore_sim_delete_cphs_netname(CoreObject *o);
-struct tel_sim_iccid* tcore_sim_get_iccid(CoreObject *o);
-gboolean tcore_sim_set_iccid(CoreObject *o, const struct tel_sim_iccid *iccid);
-enum tcore_return tcore_sim_delete_iccid(CoreObject *o);
+struct tel_sim_iccid *tcore_sim_get_iccid(CoreObject *o);
+gboolean tcore_sim_set_iccid(CoreObject *o, const struct tel_sim_iccid *iccid);
+enum tcore_return tcore_sim_delete_iccid(CoreObject *o);
-gboolean tcore_sim_get_cphs_status(CoreObject *o);
-gboolean tcore_sim_set_cphs_status(CoreObject *o, gboolean b_support);
+gboolean tcore_sim_get_cphs_status(CoreObject *o);
+gboolean tcore_sim_set_cphs_status(CoreObject *o, gboolean b_support);
unsigned char tcore_sim_get_app_list(CoreObject *o);
gboolean tcore_sim_set_app_list(CoreObject *o, unsigned char app_list);
struct tel_sim_ist *tcore_sim_get_isim_service_table(CoreObject *o);
gboolean tcore_sim_set_isim_service_table(CoreObject *o, struct tel_sim_ist *ist);
enum tcore_return tcore_sim_delete_isim_service_table(CoreObject *o);
-gboolean tcore_sim_link_userdata(CoreObject *o, void *userdata);
-void* tcore_sim_ref_userdata(CoreObject *o);
-
-gboolean tcore_sim_decode_iccid(struct tel_sim_iccid *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_lp(struct tel_sim_language *p_out, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_lp(int *out_length, struct tel_sim_language *p_in);
-gboolean tcore_sim_decode_li(enum tel_sim_file_id file_id, struct tel_sim_language *p_out, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_li(int *out_length, struct tel_sim_language *p_in);
-gboolean tcore_sim_decode_imsi(struct tel_sim_imsi *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_cdma_imsi(struct tel_sim_imsi *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_sst(struct tel_sim_sst *p_sst, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_cdma_st(struct tel_sim_cst *p_cdma_st, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_csim_st(struct tel_sim_cst *p_csim_st, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_spn(struct tel_sim_spn *p_spn, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_cdma_spn(struct tel_sim_spn *p_spn, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_spdi(struct tel_sim_spdi *p_spdi, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_msisdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_mdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_xdn(struct tel_sim_dialing_number *p_xdn, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_xdn(int in_length, struct tel_sim_dialing_number *p_xdn);
-gboolean tcore_sim_decode_ecc(struct tel_sim_ecc_list *p_ecc, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_ust(struct tel_sim_ust *p_ust, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_ist(struct tel_sim_ist *p_ist, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_est(struct tel_sim_est *p_est, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_uecc(struct tel_sim_ecc *p_ecc, unsigned char* p_in, int in_length);
-gboolean tcore_sim_decode_gid( struct tel_sim_gid *p_gid, unsigned char* p_in, int in_length);
-gboolean tcore_sim_decode_mbi(struct tel_sim_mbi *p_mbi, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_mbi(const struct tel_sim_mbi *p_mbi, int in_length);
-gboolean tcore_sim_decode_mwis(struct tel_sim_mw *pMwis, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_mwis(int *out_length, const struct tel_sim_mw *pMwis, int in_length);
-gboolean tcore_sim_decode_vmwf(struct tel_sim_cphs_mw *p_vmwf, unsigned char* p_in, unsigned long in_length);
-char* tcore_sim_encode_vmwf(int *out_length, const struct tel_sim_cphs_mw *p_vmwf, int in_length);
-gboolean tcore_sim_decode_cfis(struct tel_sim_cfis *cfis, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_cfis(int *out_length, const struct tel_sim_cfis *p_cfis);
-gboolean tcore_sim_decode_cff(struct tel_sim_cphs_cf *cfis, unsigned char *p_in, int in_length);
-char* tcore_sim_encode_cff(const struct tel_sim_cphs_cf *cff, int in_length);
-gboolean tcore_sim_decode_csp(struct tel_sim_cphs_csp *p_csp, unsigned char *p_in, int in_length);
-gboolean tcore_sim_encode_csp(unsigned char *p_out, int out_length, struct tel_sim_cphs_csp *p_csp);
-gboolean tcore_sim_decode_dynamic_flag(struct tel_sim_cphs_dflag *p_df, unsigned char *p_in, int in_length);
-gboolean tcore_sim_encode_dynamic_flag(char *p_out, int out_length, struct tel_sim_cphs_dflag *p_df);
-gboolean tcore_sim_decode_dynamic2_flag(struct tel_sim_cphs_dflag2 *p_d2f, unsigned char *p_in, int in_length);
-gboolean tcore_sim_encode_dynamic2_flag(char *p_out, int out_length, struct tel_sim_cphs_dflag2 *p_d2f);
-gboolean tcore_sim_decode_cphs_info(struct tel_sim_cphs_info *pCphsInfo, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_short_ons(unsigned char *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_ons(unsigned char *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_information_number(struct tel_sim_cphs_info_number *p_info, unsigned char* p_in, int in_length);
-gboolean tcore_sim_decode_opl(struct tel_sim_opl *p_opl, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_pnn(struct tel_sim_pnn *p_pnn, unsigned char* p_in, int in_length);
-gboolean tcore_sim_decode_oplmnwact(struct tel_sim_oplmnwact_list *p_list, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_ext(struct tel_sim_ext *p_ext, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_img(struct tel_sim_img *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_check_plmn_having_3digits_mnc(char* plmn);
-gboolean tcore_sim_decode_isim_impi(struct tel_sim_impi *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_isim_domain(struct tel_sim_domain *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_isim_impu(struct tel_sim_impu *p_out, unsigned char *p_in, int in_length);
-gboolean tcore_sim_decode_isim_pcscf(struct tel_sim_pcscf *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_link_userdata(CoreObject *o, void *userdata);
+void *tcore_sim_ref_userdata(CoreObject *o);
+
+gboolean tcore_sim_decode_iccid(struct tel_sim_iccid *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_lp(struct tel_sim_language *p_out, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_lp(int *out_length, struct tel_sim_language *p_in);
+gboolean tcore_sim_decode_li(enum tel_sim_file_id file_id, struct tel_sim_language *p_out, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_li(int *out_length, struct tel_sim_language *p_in);
+gboolean tcore_sim_decode_imsi(struct tel_sim_imsi *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_cdma_imsi(struct tel_sim_imsi *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_sst(struct tel_sim_sst *p_sst, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_cdma_st(struct tel_sim_cst *p_cdma_st, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_csim_st(struct tel_sim_cst *p_csim_st, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_spn(struct tel_sim_spn *p_spn, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_cdma_spn(struct tel_sim_spn *p_spn, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_spdi(struct tel_sim_spdi *p_spdi, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_msisdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_mdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_xdn(struct tel_sim_dialing_number *p_xdn, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_xdn(int in_length, struct tel_sim_dialing_number *p_xdn);
+gboolean tcore_sim_decode_ecc(struct tel_sim_ecc_list *p_ecc, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_ust(struct tel_sim_ust *p_ust, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_ist(struct tel_sim_ist *p_ist, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_est(struct tel_sim_est *p_est, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_uecc(struct tel_sim_ecc *p_ecc, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_gid( struct tel_sim_gid *p_gid, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_mbi(struct tel_sim_mbi *p_mbi, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_mbi(const struct tel_sim_mbi *p_mbi, int in_length);
+gboolean tcore_sim_decode_mwis(struct tel_sim_mw *pMwis, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_mwis(int *out_length, const struct tel_sim_mw *pMwis, int in_length);
+gboolean tcore_sim_decode_vmwf(struct tel_sim_cphs_mw *p_vmwf, unsigned char *p_in, unsigned long in_length);
+char *tcore_sim_encode_vmwf(int *out_length, const struct tel_sim_cphs_mw *p_vmwf, int in_length);
+gboolean tcore_sim_decode_cfis(struct tel_sim_cfis *cfis, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_cfis(int *out_length, const struct tel_sim_cfis *p_cfis);
+gboolean tcore_sim_decode_cff(struct tel_sim_cphs_cf *cfis, unsigned char *p_in, int in_length);
+char *tcore_sim_encode_cff(const struct tel_sim_cphs_cf *cff, int in_length);
+gboolean tcore_sim_decode_csp(struct tel_sim_cphs_csp *p_csp, unsigned char *p_in, int in_length);
+gboolean tcore_sim_encode_csp(unsigned char *p_out, int out_length, struct tel_sim_cphs_csp *p_csp);
+gboolean tcore_sim_decode_dynamic_flag(struct tel_sim_cphs_dflag *p_df, unsigned char *p_in, int in_length);
+gboolean tcore_sim_encode_dynamic_flag(char *p_out, int out_length, struct tel_sim_cphs_dflag *p_df);
+gboolean tcore_sim_decode_dynamic2_flag(struct tel_sim_cphs_dflag2 *p_d2f, unsigned char *p_in, int in_length);
+gboolean tcore_sim_encode_dynamic2_flag(char *p_out, int out_length, struct tel_sim_cphs_dflag2 *p_d2f);
+gboolean tcore_sim_decode_cphs_info(struct tel_sim_cphs_info *pCphsInfo, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_short_ons(unsigned char *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_ons(unsigned char *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_information_number(struct tel_sim_cphs_info_number *p_info, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_opl(struct tel_sim_opl *p_opl, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_pnn(struct tel_sim_pnn *p_pnn, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_oplmnwact(struct tel_sim_oplmnwact_list *p_list, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_ext(struct tel_sim_ext *p_ext, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_img(struct tel_sim_img *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_check_plmn_having_3digits_mnc(char *plmn);
+gboolean tcore_sim_decode_isim_impi(struct tel_sim_impi *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_isim_domain(struct tel_sim_domain *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_isim_impu(struct tel_sim_impu *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_isim_pcscf(struct tel_sim_pcscf *p_out, unsigned char *p_in, int in_length);
+gboolean tcore_sim_decode_ef_info(struct tcore_sim_ef_info *p_ef_info, CoreObject *o, char *p_in, int in_length);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_SIM_H__ */
__BEGIN_DECLS
-#define nDefaultSMSPWithoutAlphaId 28
+#define nDefaultSMSPWithoutAlphaId 28
#define SMSPValidDestAddr 0x01
#define SMSPValidSvcAddr 0x02
#define SMSPValidPID 0x04
#define SMSPValidDCS 0x08
-#define SMSPValidVP 0x10
+#define SMSPValidVP 0x10
#define nDestAddrOffset 1
#define nSCAAddrOffset 13
-#define nPIDOffset 25
-#define nDCSOffset 26
+#define nPIDOffset 25
+#define nDCSOffset 26
#define nVPOffset 27
struct property_sms_info {
- int g_trans_id;
- int SMSPRecordLen;
+ int g_trans_id;
+ int SMSPRecordLen;
};
struct tcore_sms_operations {
* @remark
* @Refer
*/
-int _tcore_util_sms_encode_smsParameters(const struct telephony_sms_Params *incoming, unsigned char *data, int SMSPRecordLen);
-int tcore_util_sms_decode_smsParameters(uint8_t *incoming, uint32_t length, struct telephony_sms_Params *params);
-
+int _tcore_util_sms_encode_smsParameters(const struct telephony_sms_Params *incoming,
+ unsigned char *data, int SMSPRecordLen);
+int tcore_util_sms_decode_smsParameters(uint8_t *incoming, uint32_t length,
+ struct telephony_sms_Params *params);
void tcore_util_sms_semioctet_to_octect(int* nScLength);
enum telephony_sms_ready_status tcore_sms_get_ready_status(CoreObject *o);
gboolean tcore_sms_set_ready_status(CoreObject *o, enum telephony_sms_ready_status status);
-CoreObject* tcore_sms_new(TcorePlugin *p, const char *name, struct tcore_sms_operations *ops, TcoreHal *hal);
+CoreObject *tcore_sms_new(TcorePlugin *p, const char *name, struct tcore_sms_operations *ops, TcoreHal *hal);
void tcore_sms_free(CoreObject * n);
-void tcore_sms_set_ops(CoreObject *o, struct tcore_sms_operations *ops);
+void tcore_sms_set_ops(CoreObject *o, struct tcore_sms_operations *ops, enum tcore_ops_type ops_type);
__END_DECLS
-#endif
-
+#endif /* __TCORE_CO_SMS_H__ */
enum tcore_ss_status {
TCORE_SS_STATUS_REG = 0x01, /* 0x01 : Registration */
- TCORE_SS_STATUS_DEREG, /* 0x02 : De-registration( erase ) */
+ TCORE_SS_STATUS_DEREG, /* 0x02 : De-registration(erase) */
TCORE_SS_STATUS_ACTIVATE, /* 0x03 : Activation */
TCORE_SS_STATUS_DEACTIVATE, /* 0x04 : De-activation */
TCORE_SS_STATUS_MAX
TCORE_SS_AOC_TYPE_MAX = 0x10
};
+enum tcore_ss_routing_policy {
+ TCORE_SS_ROUTING_POLICY_CS_ALWAYS,
+ TCORE_SS_ROUTING_POLICY_IMS_ALWAYS,
+ TCORE_SS_ROUTING_POLICY_IMS_CS
+};
+
+enum tcore_ussd_routing_policy {
+ TCORE_SS_USSD_ROUTING_POLICY_CS_ALWAYS,
+ TCORE_SS_USSD_ROUTING_POLICY_IMS_ALWAYS,
+ TCORE_SS_USSD_ROUTING_POLICY_IMS_CS
+};
+
typedef struct ussd_session UssdSession;
struct tcore_ss_operations {
};
-CoreObject* tcore_ss_new(TcorePlugin *p, const char *name, struct tcore_ss_operations *ops, TcoreHal *hal);
-void tcore_ss_free(CoreObject *o);
+CoreObject *tcore_ss_new(TcorePlugin *p, const char *name, struct tcore_ss_operations *ops, TcoreHal *hal);
+void tcore_ss_free(CoreObject *o);
+
+void tcore_ss_set_ops(CoreObject *o, struct tcore_ss_operations *ops, enum tcore_ops_type ops_type);
+
+struct ussd_session *tcore_ss_ussd_create_session(CoreObject *o, enum tcore_ss_ussd_type type, void *data, int data_len);
+void tcore_ss_ussd_destroy_session(struct ussd_session *ussd_s);
+struct ussd_session *tcore_ss_ussd_get_session(CoreObject *o);
+enum tcore_ss_ussd_type tcore_ss_ussd_get_session_type(struct ussd_session *ussd_s);
+void tcore_ss_ussd_set_session_type(struct ussd_session *ussd_s, enum tcore_ss_ussd_type type);
+int tcore_ss_ussd_get_session_data(struct ussd_session *ussd_s, void **data);
+void tcore_ss_ussd_set_session_data(struct ussd_session *ussd_s, void *data, int data_len);
-void tcore_ss_set_ops(CoreObject *o, struct tcore_ss_operations *ops);
+void tcore_ss_set_ussd_routing(CoreObject *o, enum tcore_ussd_routing_policy ussd_routing_policy);
+enum tcore_ussd_routing_policy tcore_ss_get_ussd_routing(CoreObject *o);
-struct ussd_session* tcore_ss_ussd_create_session( CoreObject *o, enum tcore_ss_ussd_type type, void *data, int data_len );
-void tcore_ss_ussd_destroy_session( struct ussd_session *ussd_s );
-struct ussd_session* tcore_ss_ussd_get_session( CoreObject *o );
-enum tcore_ss_ussd_type tcore_ss_ussd_get_session_type( struct ussd_session* ussd_s );
-void tcore_ss_ussd_set_session_type( struct ussd_session* ussd_s, enum tcore_ss_ussd_type type );
-int tcore_ss_ussd_get_session_data( struct ussd_session* ussd_s, void** data );
-void tcore_ss_ussd_set_session_data( struct ussd_session* ussd_s, void* data, int data_len );
+void tcore_ss_set_ss_routing(CoreObject *o, enum tcore_ss_routing_policy ss_routing_policy);
+enum tcore_ss_routing_policy tcore_ss_get_ss_routing(CoreObject *o);
__END_DECLS
-#endif
+#endif /* __TCORE_CO_SS_H__ */
struct tcore_communitor_operations {
TReturn (*send_response)(Communicator *comm, UserRequest *ur,
- enum tcore_response_command command,
- unsigned int data_len, const void *data);
+ enum tcore_response_command command,
+ unsigned int data_len, const void *data);
TReturn (*send_notification)(Communicator *comm, CoreObject *source,
- enum tcore_notification_command command,
- unsigned int data_len, const void *data);
+ enum tcore_notification_command command,
+ unsigned int data_len, const void *data);
};
-Communicator* tcore_communicator_new(TcorePlugin *plugin, const char *name,
- struct tcore_communitor_operations *ops);
-void tcore_communicator_free();
+Communicator *tcore_communicator_new(TcorePlugin *plugin,
+ const char *name, struct tcore_communitor_operations *ops);
+void tcore_communicator_free();
-TcorePlugin* tcore_communicator_ref_plugin(Communicator *comm);
-const char* tcore_communicator_ref_name(Communicator *comm);
+TcorePlugin *tcore_communicator_ref_plugin(Communicator *comm);
+const char *tcore_communicator_ref_name(Communicator *comm);
-TReturn tcore_communicator_link_user_data(Communicator *comm, void *data);
-void* tcore_communicator_ref_user_data(Communicator *comm);
+TReturn tcore_communicator_link_user_data(Communicator *comm, void *data);
+void *tcore_communicator_ref_user_data(Communicator *comm);
-TReturn tcore_communicator_send_response(Communicator *comm,
- UserRequest *ur, enum tcore_response_command command,
- unsigned int data_len, const void *data);
+TReturn tcore_communicator_send_response(Communicator *comm,
+ UserRequest *ur, enum tcore_response_command command,
+ unsigned int data_len, const void *data);
-TReturn tcore_communicator_send_notification(Communicator *comm,
- CoreObject *source, enum tcore_notification_command command,
- unsigned int data_len, const void *data);
+TReturn tcore_communicator_send_notification(Communicator *comm,
+ CoreObject *source, enum tcore_notification_command command,
+ unsigned int data_len, const void *data);
-TReturn tcore_communicator_dispatch_request(Communicator *comm, UserRequest *ur);
+TReturn tcore_communicator_dispatch_request(Communicator *comm, UserRequest *ur);
__END_DECLS
-#endif
+#endif /* __TCORE_COMMUNICATOR_H__ */
__BEGIN_DECLS
-#define CORE_OBJECT_TYPE_DEFAULT 0xB0000000
-#define CORE_OBJECT_TYPE_MODEM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_MODEM)
-#define CORE_OBJECT_TYPE_CALL (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CALL)
-#define CORE_OBJECT_TYPE_SS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SS)
-#define CORE_OBJECT_TYPE_NETWORK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_NETWORK)
-#define CORE_OBJECT_TYPE_PS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PS)
-#define CORE_OBJECT_TYPE_PS_CONTEXT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PDP)
-#define CORE_OBJECT_TYPE_SIM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SIM)
-#define CORE_OBJECT_TYPE_SAT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAT)
-#define CORE_OBJECT_TYPE_SAP (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAP)
-#define CORE_OBJECT_TYPE_SMS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SMS)
-#define CORE_OBJECT_TYPE_PHONEBOOK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PHONEBOOK)
-#define CORE_OBJECT_TYPE_SOUND (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SOUND)
-#define CORE_OBJECT_TYPE_CUSTOM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CUSTOM)
-#define CORE_OBJECT_TYPE_GPS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_GPS)
+#define CORE_OBJECT_TYPE_DEFAULT 0xB0000000
+#define CORE_OBJECT_TYPE_MODEM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_MODEM)
+#define CORE_OBJECT_TYPE_CALL (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CALL)
+#define CORE_OBJECT_TYPE_SS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SS)
+#define CORE_OBJECT_TYPE_NETWORK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_NETWORK)
+#define CORE_OBJECT_TYPE_PS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PS)
+#define CORE_OBJECT_TYPE_PS_CONTEXT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PDP)
+#define CORE_OBJECT_TYPE_SIM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SIM)
+#define CORE_OBJECT_TYPE_SAT (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAT)
+#define CORE_OBJECT_TYPE_SAP (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SAP)
+#define CORE_OBJECT_TYPE_SMS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SMS)
+#define CORE_OBJECT_TYPE_PHONEBOOK (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_PHONEBOOK)
+#define CORE_OBJECT_TYPE_SOUND (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_SOUND)
+#define CORE_OBJECT_TYPE_CUSTOM (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_CUSTOM)
+#define CORE_OBJECT_TYPE_GPS (CORE_OBJECT_TYPE_DEFAULT | TCORE_TYPE_GPS)
#define CORE_OBJECT_CHECK(o,t) \
if (!o) { warn("core_object is NULL"); return; } \
#define CORE_OBJECT_CHECK_RETURN(o,t,r) \
if (!o) { warn("core_object is NULL"); return r; } \
if (tcore_object_get_type(o) != t) { warn("type(0x%x != 0x%x) mismatch", tcore_object_get_type(o), t); return r; }
+
+enum tcore_ops_type {
+ TCORE_OPS_TYPE_CP = 0,
+ TCORE_OPS_TYPE_IMS,
+ TCORE_OPS_TYPE_MAX
+};
+
+#define CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type) \
+do { \
+ switch (ops_type) { \
+ case TCORE_OPS_TYPE_CP: \
+ case TCORE_OPS_TYPE_IMS: \
+ break; \
+ case TCORE_OPS_TYPE_MAX: \
+ default: \
+ err("Invalid/Unsupported ops_type:[%d]", ops_type); \
+ return; \
+ } \
+} while (FALSE)
+
+#define CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type,ret_val) \
+do { \
+ switch (ops_type) { \
+ case TCORE_OPS_TYPE_CP: \
+ case TCORE_OPS_TYPE_IMS: \
+ break; \
+ case TCORE_OPS_TYPE_MAX: \
+ default: \
+ err("Invalid/Unsupported ops_type:[%d]", ops_type); \
+ return ret_val; \
+ } \
+} while (FALSE)
+
typedef struct tcore_object_mapping_tbl object_mapping_table_t;
#define CORE_OBJECT_EVENT_PROPERTY_CHANGED "core_object_property_changed"
#define CORE_OBJECT_KEY_FIND(keys, k) g_slist_find_custom((keys), (k), (GCompareFunc)g_strcmp0)
typedef void (*CoreObjectFreeHook)(CoreObject *co);
-typedef void (*CoreObjectCloneHook)(CoreObject *src, CoreObject *dest);
typedef gboolean (*CoreObjectCallback)(CoreObject *co, const void *event_info, void *user_data);
typedef gboolean (*tcore_object_callback)(CoreObject *co,
const void *event_info, void *user_data);
-typedef TReturn (*CoreObjectDispatcher)(CoreObject *co, UserRequest *ur);
+typedef TReturn (*CoreObjectDispatcher)(CoreObject *co, UserRequest *ur, enum tcore_ops_type ops_type);
typedef gboolean (*tcore_object_init)(TcorePlugin *plugin, CoreObject *co);
typedef void (*tcore_object_deinit)(TcorePlugin *plugin, CoreObject *co);
};
-CoreObject* tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
-void tcore_object_free(CoreObject *co);
-
-TReturn tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
-TReturn tcore_object_set_clone_hook(CoreObject *co, CoreObjectCloneHook clone_hook);
+CoreObject *tcore_object_new(TcorePlugin *plugin, const char *name, TcoreHal *hal);
+void tcore_object_free(CoreObject *co);
-CoreObject* tcore_object_clone(CoreObject *src, TcorePlugin *new_parent);
+TReturn tcore_object_set_free_hook(CoreObject *co, CoreObjectFreeHook free_hook);
-TReturn tcore_object_set_name(CoreObject *co, const char *name);
-const char* tcore_object_ref_name(CoreObject *co);
+TReturn tcore_object_set_name(CoreObject *co, const char *name);
+const char *tcore_object_ref_name(CoreObject *co);
-CoreObject *tcore_object_clone_template_object(TcorePlugin *p,
- unsigned int co_type);
+TReturn tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
+TcorePlugin *tcore_object_ref_plugin(CoreObject *co);
+TReturn tcore_object_link_object(CoreObject *co, void *object);
+void *tcore_object_ref_object(CoreObject *co);
-TReturn tcore_object_set_plugin(CoreObject *co, TcorePlugin *plugin);
-TcorePlugin* tcore_object_ref_plugin(CoreObject *co);
+TReturn tcore_object_set_type(CoreObject *co, unsigned int type);
+unsigned int tcore_object_get_type(CoreObject *co);
-TReturn tcore_object_link_object(CoreObject *co, void *object);
-void* tcore_object_ref_object(CoreObject *co);
+TReturn tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
+TcoreHal* tcore_object_get_hal(CoreObject *co);
-TReturn tcore_object_set_type(CoreObject *co, unsigned int type);
-unsigned int tcore_object_get_type(CoreObject *co);
+TReturn tcore_object_link_user_data(CoreObject *co, void *user_data);
+void *tcore_object_ref_user_data(CoreObject *co);
-TReturn tcore_object_set_hal(CoreObject *co, TcoreHal *hal);
-TcoreHal* tcore_object_get_hal(CoreObject *co);
+TReturn tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
+TReturn tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
+TReturn tcore_object_dispatch_request_with_type(CoreObject *co, UserRequest *ur, enum tcore_ops_type ops_type);
-TReturn tcore_object_link_user_data(CoreObject *co, void *user_data);
-void* tcore_object_ref_user_data(CoreObject *co);
-
-TReturn tcore_object_set_dispatcher(CoreObject *co, CoreObjectDispatcher func);
-TReturn tcore_object_dispatch_request(CoreObject *co, UserRequest *ur);
-
-TReturn tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
-TReturn tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
+TReturn tcore_object_add_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
+TReturn tcore_object_del_callback(CoreObject *co, const char *event, CoreObjectCallback callback);
TReturn tcore_object_override_callback(CoreObject *co, const char *event, CoreObjectCallback callback, void *user_data);
-TReturn tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
+TReturn tcore_object_emit_callback(CoreObject *co, const char *event, const void *event_info);
-#define tcore_object_set_property(co, ...) tcore_object_set_property_full(co, __VA_ARGS__, NULL, NULL)
-TReturn tcore_object_set_property_full(CoreObject *co, const char *first_property, ...);
-const char* tcore_object_ref_property(CoreObject *co, const char *key);
-GHashTable* tcore_object_ref_property_hash(CoreObject *co);
+#define tcore_object_set_property(co, ...) tcore_object_set_property_full(co, __VA_ARGS__, NULL, NULL)
+TReturn tcore_object_set_property_full(CoreObject *co, const char *first_property, ...);
+const char *tcore_object_ref_property(CoreObject *co, const char *key);
+GHashTable* tcore_object_ref_property_hash(CoreObject *co);
void *tcore_object_add_mapping_tbl_entry(void *mapping_tbl,
- unsigned int object_type, TcoreHal *hal);
+ unsigned int object_type, TcoreHal *hal);
void tcore_object_remove_mapping_tbl(void *mapping_tbl);
void *tcore_object_remove_mapping_tbl_entry(void *mapping_tbl, TcoreHal *hal);
void tcore_object_remove_mapping_tbl_entry_by_type(void *mapping_tbl,
- unsigned int co_type);
+ unsigned int co_type);
void tcore_object_print_mapping_tbl(void *mapping_tbl);
TReturn tcore_object_init_objects(TcorePlugin *plugin,
- struct object_initializer *initializer_list);
+ struct object_initializer *initializer_list);
void tcore_object_deinit_objects(TcorePlugin *plugin,
- struct object_deinitializer *deinitializer_list);
-
-
+ struct object_deinitializer *deinitializer_list);
__END_DECLS
-#endif
+#endif /* __TCORE_CORE_OBJECT_H__ */
TReturn (*power)(TcoreHal *hal, gboolean flag);
TReturn (*send)(TcoreHal *hal, unsigned int data_len, void *data);
TReturn (*setup_netif)(CoreObject *co,
- TcoreHalSetupNetifCallback func,
- void *user_data, unsigned int cid,
- gboolean enable);
+ TcoreHalSetupNetifCallback func, void *user_data,
+ unsigned int cid, gboolean enable);
};
-TcoreHal* tcore_hal_new(TcorePlugin *plugin, const char *name,
- struct tcore_hal_operations *hops,
- enum tcore_hal_mode mode);
-void tcore_hal_free(TcoreHal *hal);
+TcoreHal *tcore_hal_new(TcorePlugin *plugin, const char *name,
+ struct tcore_hal_operations *hops, enum tcore_hal_mode mode);
+void tcore_hal_free(TcoreHal *hal);
-TReturn tcore_hal_set_name(TcoreHal *hal, const char *name);
-char* tcore_hal_get_name(TcoreHal *hal);
+TReturn tcore_hal_set_name(TcoreHal *hal, const char *name);
+char *tcore_hal_get_name(TcoreHal *hal);
-TcoreAT* tcore_hal_get_at(TcoreHal *hal);
+TcoreAT *tcore_hal_get_at(TcoreHal *hal);
enum tcore_hal_mode tcore_hal_get_mode(TcoreHal *hal);
-TReturn tcore_hal_set_mode(TcoreHal *hal, enum tcore_hal_mode mode);
+TReturn tcore_hal_set_mode(TcoreHal *hal, enum tcore_hal_mode mode);
-TReturn tcore_hal_set_power(TcoreHal *hal, gboolean flag);
+TReturn tcore_hal_set_power(TcoreHal *hal, gboolean flag);
-TReturn tcore_hal_link_user_data(TcoreHal *hal, void *user_data);
-void* tcore_hal_ref_user_data(TcoreHal *hal);
+TReturn tcore_hal_link_user_data(TcoreHal *hal, void *user_data);
+void *tcore_hal_ref_user_data(TcoreHal *hal);
-TReturn tcore_hal_send_data(TcoreHal *hal, unsigned int data_len, void *data);
-TReturn tcore_hal_send_request(TcoreHal *hal, TcorePending *pending);
-TReturn tcore_hal_send_force(TcoreHal *hal);
+TReturn tcore_hal_send_data(TcoreHal *hal, unsigned int data_len, void *data);
+TReturn tcore_hal_send_request(TcoreHal *hal, TcorePending *pending);
+TReturn tcore_hal_send_force(TcoreHal *hal);
-TReturn tcore_hal_free_timeout_pending_request(TcoreHal *hal, TcorePending *p,
- unsigned int data_len, const void *data);
-TReturn tcore_hal_dispatch_response_data(TcoreHal *hal, int id,
- unsigned int data_len, const void *data);
+TReturn tcore_hal_free_timeout_pending_request(TcoreHal *hal, TcorePending *p,
+ unsigned int data_len, const void *data);
+TReturn tcore_hal_dispatch_response_data(TcoreHal *hal, int id,
+ unsigned int data_len, const void *data);
-TReturn tcore_hal_add_recv_callback(TcoreHal *hal,
- TcoreHalReceiveCallback func, void *user_data);
-TReturn tcore_hal_remove_recv_callback(TcoreHal *hal,
- TcoreHalReceiveCallback func);
-TReturn tcore_hal_emit_recv_callback(TcoreHal *hal,
- unsigned int data_len, const void *data);
+TReturn tcore_hal_add_recv_callback(TcoreHal *hal,
+ TcoreHalReceiveCallback func, void *user_data);
+TReturn tcore_hal_remove_recv_callback(TcoreHal *hal,
+ TcoreHalReceiveCallback func);
+TReturn tcore_hal_emit_recv_callback(TcoreHal *hal,
+ unsigned int data_len, const void *data);
-TReturn tcore_hal_add_send_hook(TcoreHal *hal, TcoreHalSendHook func,
- void *user_data);
-TReturn tcore_hal_remove_send_hook(TcoreHal *hal, TcoreHalSendHook func);
+TReturn tcore_hal_add_send_hook(TcoreHal *hal,
+ TcoreHalSendHook func, void *user_data);
+TReturn tcore_hal_remove_send_hook(TcoreHal *hal, TcoreHalSendHook func);
-TReturn tcore_hal_set_power_state(TcoreHal *hal, gboolean flag);
-gboolean tcore_hal_get_power_state(TcoreHal *hal);
+TReturn tcore_hal_set_power_state(TcoreHal *hal, gboolean flag);
+gboolean tcore_hal_get_power_state(TcoreHal *hal);
-TcoreQueue* tcore_hal_ref_queue(TcoreHal *hal);
-TcorePlugin* tcore_hal_ref_plugin(TcoreHal *hal);
+TcoreQueue *tcore_hal_ref_queue(TcoreHal *hal);
+TcorePlugin *tcore_hal_ref_plugin(TcoreHal *hal);
TReturn tcore_hal_setup_netif(TcoreHal *hal, CoreObject *co,
- TcoreHalSetupNetifCallback func,
- void *user_data, unsigned int cid,
- gboolean enable);
+ TcoreHalSetupNetifCallback func, void *user_data,
+ unsigned int cid, gboolean enable);
__END_DECLS
-#endif
+#endif /* __TCORE_HAL_H__ */
--- /dev/null
+/*
+ * libtcore
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TCORE_TYPES_H__
+#define __TCORE_TYPES_H__
+
+#define tcore_check_null_ret_err(name, value, err) do { \
+ if ( !value ) { \
+ dbg("[error] %s : NULL", name ); \
+ return err; \
+ } \
+} while (FALSE)
+
+#define tcore_check_null_ret(name, value) do { \
+ if ( !value ) { \
+ dbg("[error] %s : NULL", name ); \
+ return; \
+ } \
+} while (FALSE)
+
+#endif /* __TCORE_TYPES_H__ */
#define TCORE_LOG_TAG "UNKNOWN"
#endif
-#define info(fmt,args...) { if(tcore_debug) RLOG(LOG_INFO, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define msg(fmt,args...) { if(tcore_debug) RLOG(LOG_DEBUG, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define dbg(fmt,args...) { if(tcore_debug) RLOG(LOG_DEBUG, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define warn(fmt,args...) { RLOG(LOG_WARN, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define err(fmt,args...) { RLOG(LOG_ERROR, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define fatal(fmt,args...) { RLOG(LOG_FATAL, TCORE_LOG_TAG, fmt "\n", ##args); }
+#define info(fmt,args...) do { if(tcore_debug) RLOG(LOG_INFO, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define msg(fmt,args...) do { if(tcore_debug) RLOG(LOG_DEBUG, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define dbg(fmt,args...) do { if(tcore_debug) RLOG(LOG_DEBUG, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define warn(fmt,args...) do { RLOG(LOG_WARN, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define err(fmt,args...) do { RLOG(LOG_ERROR, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define fatal(fmt,args...) do { RLOG(LOG_FATAL, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
#elif defined(FEATURE_TLOG_DEBUG)
*/
void tcore_log(enum tcore_log_type type, enum tcore_log_priority priority, const char *tag, const char *fmt, ...);
-#define info(fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define msg(fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, TCORE_LOG_TAG, fmt "\n", ##args); }
-#define dbg(fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_DEBUG, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define warn(fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_WARN, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define err(fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_ERROR, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define fatal(fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_FATAL, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
+#define info(fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define msg(fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, TCORE_LOG_TAG, fmt "\n", ##args); } while (0)
+#define dbg(fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_DEBUG, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define warn(fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_WARN, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define err(fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_ERROR, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define fatal(fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_FATAL, TCORE_LOG_TAG, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
-#define info_ex(tag,fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define msg_ex(tag,fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, tag, fmt "\n", ##args); }
-#define dbg_ex(tag,fmt,args...) { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_DEBUG, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define warn_ex(tag,fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_WARN, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define err_ex(tag,fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_ERROR, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
-#define fatal_ex(tag,fmt,args...) { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_FATAL, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); }
+#define info_ex(tag,fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define msg_ex(tag,fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_INFO, tag, fmt "\n", ##args); } while (0)
+#define dbg_ex(tag,fmt,args...) do { if(tcore_debug) tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_DEBUG, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define warn_ex(tag,fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_WARN, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define err_ex(tag,fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_ERROR, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
+#define fatal_ex(tag,fmt,args...) do { tcore_log(TCORE_LOG_TYPE_RADIO, TCORE_LOG_FATAL, tag, "<%s:%d> " fmt "\n", __func__, __LINE__, ##args); } while (0)
-#define TIME_CHECK(fmt,args...) { tcore_log(TCORE_LOG_TYPE_TIME_CHECK, TCORE_LOG_INFO, "TIME_CHECK", fmt "\n", ##args); }
+#define TIME_CHECK(fmt,args...) do { tcore_log(TCORE_LOG_TYPE_TIME_CHECK, TCORE_LOG_INFO, "TIME_CHECK", fmt "\n", ##args); } while (0)
#else
#define TCORE_LOG_FUNC fprintf
#endif
-#define info(fmt,args...) { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, fmt "\n", ##args); fflush(TCORE_LOG_FILE);}
-#define msg(fmt,args...) { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, fmt "\n", ##args); fflush(TCORE_LOG_FILE);}
-#define dbg(fmt,args...) { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTGRAY "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);}
-#define warn(fmt,args...) TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_YELLOW "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);
-#define err(fmt,args...) TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTRED "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);
-#define fatal(fmt,args...) TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTRED "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);
+#define info(fmt,args...) do { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, fmt "\n", ##args); fflush(TCORE_LOG_FILE);} while (0)
+#define msg(fmt,args...) do { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, fmt "\n", ##args); fflush(TCORE_LOG_FILE);} while (0)
+#define dbg(fmt,args...) do { if(tcore_debug) TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTGRAY "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);} while (0)
+#define warn(fmt,args...) do {TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_YELLOW "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);} while (0)
+#define err(fmt,args...) do {TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTRED "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);} while (0)
+#define fatal(fmt,args...) do {TCORE_LOG_FUNC(TCORE_LOG_FILE, ANSI_COLOR_LIGHTRED "<%s:%s> " ANSI_COLOR_NORMAL fmt "\n", __FILE__, __FUNCTION__, ##args); fflush(TCORE_LOG_FILE);} while (0)
#endif
--- /dev/null
+/*
+ * libtcore
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MANAGER_H__
+#define __MANAGER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tcore_manager_return (*ManagerRequestDispatcher)(Manager *manager, UserRequest *ur);
+typedef enum tcore_manager_return (*ManagerNotificationHandler)(Manager *manager, CoreObject *source,
+ enum tcore_notification_command command,
+ unsigned int data_len, void *data);
+
+
+/* APIs */
+Manager *tcore_manager_new(TcorePlugin *manager_plugin);
+void tcore_manager_free(TcorePlugin *manager_plugin, Manager *manager);
+
+TReturn tcore_manager_set_request_dispatcher(Manager *manager,
+ ManagerRequestDispatcher request_dispatcher);
+TReturn tcore_manager_set_notification_handler(Manager *manager,
+ ManagerNotificationHandler notification_handler);
+
+enum tcore_manager_return tcore_manager_dispatch_request(Manager *manager, UserRequest *ur);
+enum tcore_manager_return tcore_manager_send_notification(Manager *manager, CoreObject *source,
+ enum tcore_notification_command command,
+ unsigned int data_len, void *data);
+
+TcorePlugin *tcore_manager_get_plugin(Manager *manager);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MANAGER_H__ */
typedef struct cmux_obj tcore_cmux_object;
/* CMUX setup complete callback prototype */
-typedef void (*cmux_setup_complete_cb_func) (gpointer user_data);
+typedef void (*cmux_setup_complete_cb_func)(gpointer user_data);
/* CMUX setup callback prototype */
-typedef void (*cmux_setup_cb_func) (int channel_id, TcoreHal *hal,
- gpointer user_data);
+typedef void (*cmux_setup_cb_func)(int channel_id, TcoreHal *hal,
+ gpointer user_data);
/* CMUX Channel close callback prototype */
-typedef void (*cmux_channel_close_cb_func) (TcoreHal *hal, gpointer user_data);
+typedef void (*cmux_channel_close_cb_func)(TcoreHal *hal, gpointer user_data);
/* CMUX initialization - Internal and Kernel */
TReturn tcore_cmux_init(TcoreHal *phy_hal, unsigned int frame_size,
- TcorePendingResponseCallback resp_cb, void *resp_cb_data);
+ TcorePendingResponseCallback resp_cb, void *resp_cb_data);
/* Setup Internal CMUX */
TReturn tcore_cmux_setup_internal_mux(tcore_cmux_mode mode,
};
-TcorePlugin* tcore_plugin_new(Server *server,
- const struct tcore_plugin_define_desc *desc,
- const char *filename, void *handle);
-void tcore_plugin_free(TcorePlugin *plugin);
+TcorePlugin *tcore_plugin_new(Server *server,
+ const struct tcore_plugin_define_desc *desc,
+ const char *filename, void *handle);
+void tcore_plugin_free(TcorePlugin *plugin);
-const struct tcore_plugin_define_desc*
- tcore_plugin_get_description(TcorePlugin *plugin);
+const struct tcore_plugin_define_desc * tcore_plugin_get_description(TcorePlugin *plugin);
-char* tcore_plugin_get_filename(TcorePlugin *plugin);
-const char* tcore_plugin_ref_plugin_name(TcorePlugin *plugin);
-Server* tcore_plugin_ref_server(TcorePlugin *plugin);
+char *tcore_plugin_get_filename(TcorePlugin *plugin);
+const char *tcore_plugin_ref_plugin_name(TcorePlugin *plugin);
+Server *tcore_plugin_ref_server(TcorePlugin *plugin);
-TReturn tcore_plugin_link_user_data(TcorePlugin *plugin, void *user_data);
-void* tcore_plugin_ref_user_data(TcorePlugin *plugin);
+TReturn tcore_plugin_link_user_data(TcorePlugin *plugin, void *user_data);
+void *tcore_plugin_ref_user_data(TcorePlugin *plugin);
-TReturn tcore_plugin_add_core_object(TcorePlugin *plugin, CoreObject *co);
-TReturn tcore_plugin_remove_core_object(TcorePlugin *plugin, CoreObject *co);
+TReturn tcore_plugin_add_core_object(TcorePlugin *plugin, CoreObject *co);
+TReturn tcore_plugin_remove_core_object(TcorePlugin *plugin, CoreObject *co);
CoreObject *tcore_plugin_ref_core_object(TcorePlugin *plugin, unsigned int type);
-GSList* tcore_plugin_get_core_objects(TcorePlugin *plugin);
-GSList* tcore_plugin_get_core_objects_bytype(TcorePlugin *plugin,
- unsigned int type);
+GSList *tcore_plugin_get_core_objects(TcorePlugin *plugin);
+GSList *tcore_plugin_get_core_objects_bytype(TcorePlugin *plugin, unsigned int type);
-TReturn tcore_plugin_core_object_event_emit(TcorePlugin *plugin,
- const char *event, const void *event_info);
+TReturn tcore_plugin_core_object_event_emit(TcorePlugin *plugin,
+ const char *event, const void *event_info);
-TReturn tcore_plugin_link_property(TcorePlugin *plugin, const char *key,
- void *data);
-void* tcore_plugin_ref_property(TcorePlugin *plugin, const char *key);
+TReturn tcore_plugin_link_property(TcorePlugin *plugin, const char *key, void *data);
+void *tcore_plugin_ref_property(TcorePlugin *plugin, const char *key);
__END_DECLS
-#endif
+#endif /* __TCORE_PLUGIN_H__ */
__BEGIN_DECLS
typedef enum tcore_hook_return (*TcoreServerRequestHook)(Server *s,
- UserRequest *ur, void *user_data);
+ UserRequest *ur, void *user_data);
typedef enum tcore_hook_return (*TcoreServerNotificationHook)(Server *s,
- CoreObject *source, enum tcore_notification_command command,
- unsigned int data_len, void *data, void *user_data);
-
-Server* tcore_server_new();
-void tcore_server_free(Server *s);
-
-TReturn tcore_server_run(Server *s);
-TReturn tcore_server_exit(Server *s);
-
-TReturn tcore_server_add_plugin(Server *s, TcorePlugin *plugin);
-GSList* tcore_server_ref_plugins(Server *s);
-TcorePlugin* tcore_server_find_plugin(Server *s, const char *name);
-
-TReturn tcore_server_add_communicator(Server *s, Communicator *comm);
-TReturn tcore_server_remove_communicator(Server *s, Communicator *comm);
-GSList* tcore_server_ref_communicators(Server *s);
-Communicator* tcore_server_find_communicator(Server *s, const char *name);
-
-TReturn tcore_server_add_storage(Server *s, Storage *strg);
-GSList* tcore_server_ref_storages(Server *s);
-Storage* tcore_server_find_storage(Server *s, const char *name);
-
-TReturn tcore_server_add_hal(Server *s, TcoreHal *hal);
-TReturn tcore_server_remove_hal(Server *s, TcoreHal *hal);
-GSList* tcore_server_ref_hals(Server *s);
-TcoreHal* tcore_server_find_hal(Server *s, const char *name);
-
-CoreObject *tcore_server_find_template_object(Server *s, unsigned int type);
-
-TReturn tcore_server_link_udev(Server *s, TcoreUdev *udev);
-TcoreUdev* tcore_server_ref_udev(Server *s);
-
-TReturn tcore_server_dispatch_request(Server *s, UserRequest *ur);
-TReturn tcore_server_send_notification(Server *s, CoreObject *source,
- enum tcore_notification_command command,
- unsigned int data_len, void *data);
-
-TReturn tcore_server_add_request_hook(Server *s,
- enum tcore_request_command command,
- TcoreServerRequestHook func, void *user_data);
-TReturn tcore_server_remove_request_hook(Server *s,
- TcoreServerRequestHook func);
-TReturn tcore_server_add_notification_hook(Server *s,
- enum tcore_notification_command command,
- TcoreServerNotificationHook func, void *user_data);
-TReturn tcore_server_remove_notification_hook(Server *s,
- TcoreServerNotificationHook func);
+ CoreObject *source, enum tcore_notification_command command,
+ unsigned int data_len, void *data, void *user_data);
+
+Server *tcore_server_new();
+void tcore_server_free(Server *s);
+
+TReturn tcore_server_run(Server *s);
+TReturn tcore_server_exit(Server *s);
+
+TReturn tcore_server_set_manager(Server *s, Manager *manager);
+Manager *tcore_server_ref_manager(Server *s);
+
+TReturn tcore_server_add_plugin(Server *s, TcorePlugin *plugin);
+GSList *tcore_server_ref_plugins(Server *s);
+TcorePlugin *tcore_server_find_plugin(Server *s, const char *name);
+
+TReturn tcore_server_add_communicator(Server *s, Communicator *comm);
+TReturn tcore_server_remove_communicator(Server *s, Communicator *comm);
+GSList *tcore_server_ref_communicators(Server *s);
+Communicator *tcore_server_find_communicator(Server *s, const char *name);
+
+TReturn tcore_server_add_storage(Server *s, Storage *strg);
+GSList *tcore_server_ref_storages(Server *s);
+Storage *tcore_server_find_storage(Server *s, const char *name);
+
+TReturn tcore_server_add_hal(Server *s, TcoreHal *hal);
+TReturn tcore_server_remove_hal(Server *s, TcoreHal *hal);
+GSList *tcore_server_ref_hals(Server *s);
+TcoreHal *tcore_server_find_hal(Server *s, const char *name);
+
+TReturn tcore_server_dispatch_request(Server *s, UserRequest *ur);
+TReturn tcore_server_send_notification(Server *s,
+ CoreObject *source, enum tcore_notification_command command,
+ unsigned int data_len, void *data);
+
+TReturn tcore_server_add_request_hook(Server *s,
+ enum tcore_request_command command,
+ TcoreServerRequestHook func, void *user_data);
+TReturn tcore_server_remove_request_hook(Server *s,
+ TcoreServerRequestHook func);
+TReturn tcore_server_add_notification_hook(Server *s,
+ enum tcore_notification_command command,
+ TcoreServerNotificationHook func, void *user_data);
+TReturn tcore_server_remove_notification_hook(Server *s,
+ TcoreServerNotificationHook func);
TcoreModem *tcore_server_register_modem(Server *s, TcorePlugin *modem_iface_plugin);
void tcore_server_unregister_modem(Server *s, TcoreModem *modem);
gboolean tcore_server_update_modem_plugin(TcorePlugin *modem_iface_plugin,
- TcorePlugin *modem_plugin);
+ TcorePlugin *modem_plugin);
GSList *tcore_server_get_cp_name_list(Server *s);
const char *tcore_server_get_cp_name_by_plugin(TcorePlugin *modem_plugin);
gboolean tcore_server_add_cp_mapping_tbl_entry(TcoreModem *modem,
- unsigned int co_type, TcoreHal *hal);
+ unsigned int co_type, TcoreHal *hal);
void tcore_server_remove_cp_mapping_tbl(TcoreModem *modem);
void tcore_server_remove_cp_mapping_tbl_entry(TcoreModem *modem,
- TcoreHal *hal);
+ TcoreHal *hal);
void *tcore_server_get_cp_mapping_tbl(TcorePlugin *modem_plugin);
void tcore_server_print_modems(Server *s);
TReturn tcore_server_load_modem_plugin(Server *s,
- TcoreModem *modem,
- const char *name)
-;
+ TcoreModem *modem, const char *name);
void tcore_server_unload_modem_plugin(Server *s, TcoreModem *modem);
+
GSList *tcore_server_get_modem_plugin_list(Server *s);
gint tcore_server_get_modems_count(Server *s);
+
__END_DECLS
-#endif
+#endif /* __TCORE_SERVER_H__ */
STORAGE_KEY_TELEPHONY_LAC,
STORAGE_KEY_TELEPHONY_CELLID,
STORAGE_KEY_TELEPHONY_SVCTYPE,
- STORAGE_KEY_TELEPHONY_SVC_CS,//5
+ STORAGE_KEY_TELEPHONY_SVC_CS, /* 5 */
STORAGE_KEY_TELEPHONY_SVC_PS,
STORAGE_KEY_TELEPHONY_SVC_ROAM,
STORAGE_KEY_TELEPHONY_CALL_STATE,
STORAGE_KEY_TELEPHONY_CALL_FORWARD_STATE,
STORAGE_KEY_TELEPHONY_TAPI_STATE,
- STORAGE_KEY_TELEPHONY_SPN_DISP_CONDITION,//15
+ STORAGE_KEY_TELEPHONY_SPN_DISP_CONDITION, /* 15 */
STORAGE_KEY_TELEPHONY_RSSI,
STORAGE_KEY_TELEPHONY_LOW_BATTERY,
STORAGE_KEY_TELEPHONY_SIM_SLOT,
STORAGE_KEY_TELEPHONY_SIM_SLOT2,
STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT,
- STORAGE_KEY_PM_STATE,//20
+ STORAGE_KEY_PM_STATE, /* 20 */
STORAGE_KEY_PACKET_INDICATOR_STATE,
STORAGE_KEY_PACKET_SERVICE_STATE,
STORAGE_KEY_CELLULAR_PKT_TOTAL_RCV2,
STORAGE_KEY_CELLULAR_PKT_TOTAL_SNT,
STORAGE_KEY_CELLULAR_PKT_TOTAL_SNT2,
- STORAGE_KEY_CELLULAR_PKT_LAST_RCV,//30
+ STORAGE_KEY_CELLULAR_PKT_LAST_RCV, /* 30 */
STORAGE_KEY_CELLULAR_PKT_LAST_RCV2,
STORAGE_KEY_CELLULAR_PKT_LAST_SNT,
STORAGE_KEY_POWER_SAVING_MODE,
STORAGE_KEY_WECONN_ALL_CONNECTED,
STORAGE_KEY_SAP_CONNECTION_TYPE,
- STORAGE_KEY_IDLE_SCREEN_LAUNCHED,
+ STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_PROFILE_ID, /* For prepaid sim APN support */
STORAGE_KEY_TELEPHONY_BOOL = STORAGE_KEY_BOOL,
STORAGE_KEY_3G_ENABLE,
STORAGE_KEY_TELEPHONY_READY,
STORAGE_KEY_SETAPPL_STATE_DATA_ROAMING_BOOL,
- STORAGE_KEY_SETAPPL_STATE_DATA_ROAMING_APP_STATUS,
STORAGE_KEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
STORAGE_KEY_SETAPPL_NETWORK_RESTRICT_MODE,
STORAGE_KEY_SETAPPL_MOBILE_DATA_POPUP_DONE_BOOL,
STORAGE_KEY_MSG_SERVER_READY_BOOL,
STORAGE_KEY_FLIGHT_MODE_BOOL,
STORAGE_KEY_TESTMODE_FAST_DORMANCY_BOOL,
+ STORAGE_KEY_PDP_LAST_CONNECTED_CONTEXT_BOOL, /* For prepaid sim APN support */
STORAGE_KEY_TELEPHONY_STRING = STORAGE_KEY_STRING,
STORAGE_KEY_TELEPHONY_NWNAME,
STORAGE_KEY_LANGUAGE_SET,
STORAGE_KEY_TESTMODE_FAST_DORMANCY,
STORAGE_KEY_TESTMODE_FAST_DORMANCY2,
- STORAGE_KEY_IDLE_SCREEN_LAUNCHED_BOOL
+ STORAGE_KEY_IDLE_SCREEN_LAUNCHED_BOOL,
+ STORAGE_KEY_TELEPHONY_LAST_CONNECTED_CONTEXT_PLMN /* For prepaid sim APN support */
};
enum storage_value {
STORAGE_VALUE_STATE_9 = 9,
};
-typedef void (*TcoreStorageKeyCallback) (enum tcore_storage_key key,
- void *value, void *user_data);
-typedef void (*TcoreStorageDispatchCallback) (Storage *strg,
- enum tcore_storage_key key, void *value);
+typedef void (*TcoreStorageKeyCallback)(enum tcore_storage_key key,
+ void *value, void *user_data);
+typedef void (*TcoreStorageDispatchCallback)(Storage *strg,
+ enum tcore_storage_key key, void *value);
struct storage_operations {
- void* (*create_handle)(Storage *strg, const char *path);
+ void *(*create_handle)(Storage *strg, const char *path);
gboolean (*remove_handle)(Storage *strg, void *handle);
gboolean (*set_int)(Storage *strg, enum tcore_storage_key key, int value);
gboolean (*set_string)(Storage *strg, enum tcore_storage_key key, const char *value);
gboolean (*set_bool)(Storage *strg, enum tcore_storage_key key, gboolean value);
int (*get_int)(Storage *strg, enum tcore_storage_key key);
- char* (*get_string)(Storage *strg, enum tcore_storage_key key);
+ char *(*get_string)(Storage *strg, enum tcore_storage_key key);
gboolean (*get_bool)(Storage *strg, enum tcore_storage_key key);
gboolean (*set_key_callback)(Storage *strg, enum tcore_storage_key key,
- TcoreStorageDispatchCallback cb);
+ TcoreStorageDispatchCallback cb);
gboolean (*remove_key_callback)(Storage *strg, enum tcore_storage_key key);
gboolean (*update_query_database)(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
+ const char *query, GHashTable *in_param);
gboolean (*read_query_database)(Storage *strg, void *handle,
- const char *query, GHashTable *in_param,
- GHashTable *out_param, int out_param_cnt);
+ const char *query, GHashTable *in_param,
+ GHashTable *out_param, int out_param_cnt);
gboolean (*insert_query_database)(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
+ const char *query, GHashTable *in_param);
gboolean (*remove_query_database)(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
+ const char *query, GHashTable *in_param);
};
-Storage* tcore_storage_new(TcorePlugin *plugin, const char *name,
+Storage *tcore_storage_new(TcorePlugin *plugin, const char *name,
struct storage_operations *ops);
-void tcore_storage_free(Storage *strg);
-const char* tcore_storage_ref_name(Storage *strg);
-
-void* tcore_storage_create_handle(Storage *strg, const char *path);
-gboolean tcore_storage_remove_handle(Storage *strg, void *handle);
-
-//storage vconf
-gboolean tcore_storage_set_int(Storage *strg, enum tcore_storage_key key,
- int value);
-int tcore_storage_get_int(Storage *strg, enum tcore_storage_key key);
-
-gboolean tcore_storage_set_string(Storage *strg, enum tcore_storage_key key,
- const char *value);
-char* tcore_storage_get_string(Storage *strg, enum tcore_storage_key key);
-
-gboolean tcore_storage_set_bool(Storage *strg, enum tcore_storage_key key,
- gboolean value);
-gboolean tcore_storage_get_bool(Storage *strg, enum tcore_storage_key key);
-
-gboolean tcore_storage_set_key_callback(Storage *strg,
- enum tcore_storage_key key, TcoreStorageKeyCallback cb,
- void *user_data);
-gboolean tcore_storage_remove_key_callback(Storage *strg,
- enum tcore_storage_key key, TcoreStorageKeyCallback cb);
-
-//storage database
-gboolean tcore_storage_update_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
-gboolean tcore_storage_read_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param, GHashTable *out_param,
- int out_param_cnt);
-gboolean tcore_storage_insert_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
-gboolean tcore_storage_remove_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param);
+void tcore_storage_free(Storage *strg);
+const char *tcore_storage_ref_name(Storage *strg);
+
+void *tcore_storage_create_handle(Storage *strg, const char *path);
+gboolean tcore_storage_remove_handle(Storage *strg, void *handle);
+
+/* Storage - vconf */
+gboolean tcore_storage_set_int(Storage *strg, enum tcore_storage_key key,
+ int value);
+int tcore_storage_get_int(Storage *strg, enum tcore_storage_key key);
+
+gboolean tcore_storage_set_string(Storage *strg, enum tcore_storage_key key,
+ const char *value);
+char *tcore_storage_get_string(Storage *strg, enum tcore_storage_key key);
+
+gboolean tcore_storage_set_bool(Storage *strg, enum tcore_storage_key key,
+ gboolean value);
+gboolean tcore_storage_get_bool(Storage *strg, enum tcore_storage_key key);
+
+gboolean tcore_storage_set_key_callback(Storage *strg,
+ enum tcore_storage_key key, TcoreStorageKeyCallback cb, void *user_data);
+gboolean tcore_storage_remove_key_callback(Storage *strg,
+ enum tcore_storage_key key, TcoreStorageKeyCallback cb);
+
+/* Storage - database */
+gboolean tcore_storage_update_query_database(Storage *strg, void *handle,
+ const char *query, GHashTable *in_param);
+gboolean tcore_storage_read_query_database(Storage *strg, void *handle,
+ const char *query, GHashTable *in_param,
+ GHashTable *out_param, int out_param_cnt);
+gboolean tcore_storage_insert_query_database(Storage *strg, void *handle,
+ const char *query, GHashTable *in_param);
+gboolean tcore_storage_remove_query_database(Storage *strg, void *handle,
+ const char *query, GHashTable *in_param);
__END_DECLS
-#endif
+#endif /* __TCORE_STORAGE_H__ */
#include <type/gps.h>
#include <util.h>
-typedef struct tcore_object_type CoreObject;
-typedef struct tcore_hal_type TcoreHal;
+typedef struct tcore_server_type Server;
+typedef struct tcore_manager_type Manager;
+typedef struct tcore_communicator_type Communicator;
typedef struct tcore_plugin_type TcorePlugin;
typedef struct tcore_modem_type TcoreModem;
+typedef struct tcore_object_type CoreObject;
+typedef struct tcore_storage_type Storage;
+
+typedef struct tcore_hal_type TcoreHal;
+
typedef struct tcore_queue_type TcoreQueue;
typedef struct tcore_pending_type TcorePending;
-typedef struct tcore_communicator_type Communicator;
typedef struct tcore_user_request_type UserRequest;
-typedef struct tcore_server_type Server;
-typedef struct tcore_storage_type Storage;
typedef struct tcore_at_type TcoreAT;
-typedef struct tcore_udev_type TcoreUdev;
enum tcore_hook_return {
TCORE_HOOK_RETURN_STOP_PROPAGATION = 0,
- TCORE_HOOK_RETURN_STOP_PROPAGATION_FAIL,
TCORE_HOOK_RETURN_CONTINUE
};
-#endif
+enum tcore_manager_return {
+ TCORE_MANAGER_RETURN_FAILURE = 0,
+ TCORE_MANAGER_RETURN_STOP,
+ TCORE_MANAGER_RETURN_CONTINUE, /* default continue */
+ TCORE_MANAGER_RETURN_CONTINUE_IMS
+};
+
+#endif /* __TCORE_H__ */
CALL_CONFIRM_TYPE_REJECT,
};
+enum telephony_call_fallback_type{
+ CALL_FALLBACK_TO_IMS,
+ CALL_FALLBACK_TO_CS
+};
+
/**********
Struct
**********/
};
struct telephony_call_rec_info {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_rec_type type;
union {
char name[ MAX_ALPHA_INFO_LEN ];
enum telephony_call_type type;
enum telephony_call_emergency_category ecc;
char number[ MAX_CALL_DIAL_NUM_LEN ];
+ int handle; /*used only for silent redial & setup pending call*/
};
struct treq_call_answer {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_answer_type type;
};
struct treq_call_end {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_end_type type;
};
};
struct treq_call_active {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_hold {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_swap {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_join {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_split {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_transfer {
- unsigned int id;
+ unsigned int handle;
};
struct treq_call_deflect {
- unsigned int id;
+ unsigned int handle;
char number[MAX_CALL_NUMBER_LEN];
};
struct treq_call_get_preferred_voice_subscription {
};
+/* IMS specific */
struct treq_call_modify {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_type call_type;
};
+/* IMS specific */
struct treq_call_confirm_modify {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_confirm_type confirm_type;
};
};
struct tresp_call_answer {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_end {
enum telephony_call_end_type type;
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_hold {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_active {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_swap {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_join {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_split {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_deflect {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
struct tresp_call_transfer {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_error err;
};
enum telephony_call_voice_privacy_mode privacy_mode;
};
+/* IMS specific */
struct tresp_call_modify {
enum telephony_call_error err;
};
+/* IMS specific */
struct tresp_call_confirm_modify {
enum telephony_call_error err;
};
struct tnoti_call_status_idle {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
enum telephony_call_end_cause cause;
};
struct tnoti_call_status_active {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
};
struct tnoti_call_status_held {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
};
struct tnoti_call_status_dialing {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
};
struct tnoti_call_status_alert {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
};
struct tnoti_call_status_incoming {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
struct telephony_call_cli_info cli;
struct telephony_call_cna_info cna;
gboolean forward;
struct tnoti_call_status_waiting {
enum telephony_call_type type;
- unsigned int id;
+ unsigned int handle;
};
struct tnoti_call_sound_path {
struct telephony_call_rec_info rec_info;
};
+/* IMS specific */
struct tnoti_call_modify_request {
- unsigned int id;
+ unsigned int handle;
enum telephony_call_type call_type;
};
+
+struct tnoti_call_fallback{
+ unsigned int handle;
+ enum telephony_call_fallback_type fallback_to;
+};
+
__END_DECLS
#endif
#define MODEM_DEVICE_MEID_LEN_MAX 17
#define MODEM_DEVICE_IMEI_LEN_MAX 17
#define MODEM_DEVICE_IMEISV_LEN_MAX 17
+#define DONGLE_VENDOR_LEN_MAX 32
+#define DONGLE_DEVICE_LEN_MAX 32
enum modem_state {
MODEM_STATE_UNKNOWN = -1,
char imei[MODEM_DEVICE_IMEI_LEN_MAX];
};
+struct tresp_modem_get_device_info {
+ TReturn result;
+ char vendor_name[DONGLE_VENDOR_LEN_MAX];
+ char device_name[DONGLE_DEVICE_LEN_MAX];
+};
+
struct tresp_modem_get_version {
TReturn result;
char software[33];
__BEGIN_DECLS
+#define NETWORK_MAX_MCC_LEN 3
+#define NETWORK_MAX_MNC_LEN 3
+#define NETWORK_MAX_PLMN_LEN 6
+
+#define NETWORK_MAX_COUNTRY_CODE_LEN 3
+#define NETWORK_MAX_NETWORK_NAME_LEN 40
+#define NETWORK_MAX_SHORT_NAME_LEN 16
+#define NETWORK_MAX_FULL_NAME_LEN 32
+
#define NETWORK_GERAN_NEIGHBORING_CELL_LIST_MAX 6 /**< max count of GERAN neighboring cell list */
#define NETWORK_UMTS_NEIGHBORING_CELL_LIST_MAX 24 /**< max count of UMTS neighboring cell list */
-#define NETWORK_CDMA_SUBSCRIPTION_MCC_MAX 4
-#define NETWORK_CDMA_SUBSCRIPTION_MNC_MAX 4
#define NETWORK_CDMA_SUBSCRIPTION_MIN_MAX 11
#define NETWORK_CDMA_SUBSCRIPTION_MDN_MAX 16
NETWORK_IMS_VOICE_SUPPORT
};
+/* IMS specific */
+enum telephony_network_ims_reg_feature_type {
+ NETWORK_IMS_REG_FEATURE_TYPE_VOLTE = 0x01, /**< VoLTE Feature type */
+ NETWORK_IMS_REG_FEATURE_TYPE_SMS = 0x02, /**< SMSoverIP Feature type */
+ NETWORK_IMS_REG_FEATURE_TYPE_RCS = 0x04, /**< RCS Feature type */
+ NETWORK_IMS_REG_FEATURE_TYPE_VT = 0x08, /**< VT Feature type */
+};
+
+/* IMS specific */
+enum telephony_network_ims_reg_network_type {
+ NETWORK_IMS_REG_NETWORK_TYPE_INTERNET = 1, /**< VoLTE Feature type */
+ NETWORK_IMS_REG_NETWORK_TYPE_WIFI, /**< SMSoverIP Feature type */
+ NETWORK_IMS_REG_NETWORK_TYPE_IMS, /**< RCS Feature type */
+ NETWORK_IMS_REG_NETWORK_TYPE_EMERGENCY /**< VT Feature type */
+};
+
+/* IMS specific */
+enum telephony_network_ims_reg_ecmp_mode {
+ NETWORK_IMS_REG_ECMP_MODE_NOT_SUPPORT = -1, /**< Not supported */
+ NETWORK_IMS_REG_ECMP_MODE_CS_PREFERRED = 0, /**< CS preferred */
+ NETWORK_IMS_REG_ECMP_MODE_PS_PREFERRED = 1, /**< PS preferred */
+};
+
+enum telephony_network_ecc_rat_search_status {
+ NETWORK_ECC_RAT_SEARCH_STATUS_IDLE,
+ NETWORK_ECC_RAT_SEARCH_STATUS_WAITING,
+ NETWORK_ECC_RAT_SEARCH_STATUS_READY,
+};
+
struct tel_network_geran_cell_info {
int cell_id; /* Cell ID (-1 indicates cell ID information not present)*/
int lac; /* Location area code (this field is ignored when cell_id not present)*/
struct tel_network_umts_cell_info umts_list[NETWORK_UMTS_NEIGHBORING_CELL_LIST_MAX];
};
+/* IMS specific */
+struct tel_network_ims_registration_info {
+ gboolean is_registered; /**< IMS registration status */
+ unsigned int feature_mask; /**< Registration info of each service (see telephony_network_ims_reg_feature_type enum) */
+ enum telephony_network_ims_reg_network_type network_type; /**< Network type (NETWORK_TYPE_INTERNET, NETWORK_TYPE_IMS, etc) */
+ enum telephony_network_ims_reg_ecmp_mode ecmp_mode; /**< Enumeration for emergency call mode preference */
+};
struct treq_network_search { /* no data */
};
struct treq_network_set_plmn_selection_mode {
enum telephony_network_select_mode mode;
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
};
struct treq_network_get_plmn_selection_mode { /* no data */
};
struct treq_network_set_preferred_plmn {
enum telephony_network_preferred_plmn_operation operation;
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
int ef_index;
};
int list_count;
struct {
enum telephony_network_plmn_status status;
- char name[41];
- char plmn[7];
+ char name[NETWORK_MAX_NETWORK_NAME_LEN+1];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
unsigned int lac;
unsigned int rac;
int list_count;
struct {
int ef_index;
- char name[41];
- char plmn[7];
+ char name[NETWORK_MAX_NETWORK_NAME_LEN+1];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
unsigned int lac;
} list[150];
struct tresp_network_get_serving_network {
TReturn result;
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
struct {
unsigned int lac;
struct tresp_network_get_subscription_info {
TReturn result;
- char mcc[NETWORK_CDMA_SUBSCRIPTION_MCC_MAX];
- char mnc[NETWORK_CDMA_SUBSCRIPTION_MNC_MAX];
+ char mcc[NETWORK_MAX_MCC_LEN + 1];
+ char mnc[NETWORK_MAX_MCC_LEN + 1];
char min[NETWORK_CDMA_SUBSCRIPTION_MIN_MAX];
char mdn[NETWORK_CDMA_SUBSCRIPTION_MDN_MAX];
};
enum telephony_network_default_subs default_subs; /* 'default' Subscription */
};
+struct tresp_network_search_ecc_rat {
+ TReturn result;
+};
+
struct tnoti_network_registration_status {
enum telephony_network_service_domain_status cs_domain_status;
enum telephony_network_service_domain_status ps_domain_status;
};
struct tnoti_network_change {
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_access_technology act;
struct {
unsigned int lac;
int gmtoff;
int dstoff;
unsigned int isdst;
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
enum telephony_network_mm_info_type mm_type;
};
struct tnoti_network_identity {
- char short_name[17];
- char full_name[33];
- char plmn[7];
+ char short_name[NETWORK_MAX_SHORT_NAME_LEN+1];
+ char full_name[NETWORK_MAX_FULL_NAME_LEN+1];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
};
struct tnoti_network_neighboring_cell_info {
enum telephony_network_default_subs default_subs; /* 'default' Subscription */
};
-/* 3GPP2 spcefic */
+/* 3GPP2 specific */
struct tnoti_network_emergency_callback_mode {
enum telephony_network_emergency_callback_mode mode;
};
+/* IMS specific */
struct tnoti_network_ims_voice_status {
enum telephony_network_ims_voice_status status;
};
+struct tnoti_network_ecc_rat {
+ enum telephony_network_access_technology ecc_rat;
+};
+
+struct tnoti_network_ims_registration_info {
+ gboolean is_registered; /**< IMS registration status */
+ unsigned int feature_mask; /**< Registration info of each service (see telephony_network_ims_reg_feature_type enum) */
+ enum telephony_network_ims_reg_network_type network_type; /**< Network type (NETWORK_TYPE_INTERNET, NETWORK_TYPE_IMS, etc) */
+ enum telephony_network_ims_reg_ecmp_mode ecmp_mode; /**< Enumeration for emergency call mode preference */
+};
+
__END_DECLS
TNOTI_CALL_INFO_EXTRA_INFORMATION,
TNOTI_CALL_INFO_PRIVACY_MODE,
TNOTI_CALL_INFO_REC,
+ TNOTI_CALL_INFO_FALLBACK, /*notification of call fallback to other bearer - CSFB(IMS to CS) or Reverse-CSFB(CS to IMS)*/
TNOTI_CALL_OTASP_STATUS,
TNOTI_CALL_OTAPA_STATUS,
TNOTI_CALL_SIGNAL_INFO,
TNOTI_MODEM_DUN_EXTERNAL_CALL,
TNOTI_MODEM_ADDED,
TNOTI_MODEM_BOOTUP,
+ TNOTI_MODEM_DONGLE_STATUS,
+ TNOTI_MODEM_DONGLE_LOGIN,
TNOTI_SIM = TCORE_NOTIFICATION | TCORE_TYPE_SIM,
TNOTI_SIM_STATUS,
TNOTI_NETWORK_DEFAULT_SUBSCRIPTION,
TNOTI_NETWORK_EMERGENCY_CALLBACK_MODE,
TNOTI_NETWORK_IMS_VOICE_SUPPORT_STATUS,
+ TNOTI_NETWORK_ECC_RAT,
+ TNOTI_NETWORK_IMS_REGISTRATION_STATUS,
TNOTI_PS = TCORE_NOTIFICATION | TCORE_TYPE_PS,
TNOTI_PS_CALL_STATUS,
TNOTI_PHONEBOOK = TCORE_NOTIFICATION | TCORE_TYPE_PHONEBOOK,
TNOTI_PHONEBOOK_STATUS,
+ TNOTI_PHONEBOOK_CONTACT_CHANGE,
TNOTI_GPS = TCORE_NOTIFICATION | TCORE_TYPE_GPS,
TNOTI_GPS_ASSIST_DATA,
PB_TEXT_HEX, /**< HEX Encoding */
};
+enum tel_phonebook_op {
+ PB_CONTACT_UPDATE, /**< New contact added or updated */
+ PB_CONTACT_DELETE, /**< Existing contact deleted */
+ PB_CONTACT_MAX, /**< MAX value */
+};
+
struct tel_phonebook_support_list {
gboolean b_fdn; /**< Fixed Dialing Number */
gboolean b_adn; /**< SIM - ADN(2G phonebook, Under DF phonebook */
struct tel_phonebook_support_list support_list;
};
+struct tnoti_phonebook_contact_change {
+ enum tel_phonebook_type phonebook_type;
+ unsigned short index;
+ enum tel_phonebook_op operation;
+};
__END_DECLS
TELEPHONY_PS_RESTRICTED_SERVICE
};
-struct dedicated_bearer_info {
- char profile_id;
+struct qos_parameter {
+ char profile_type;
char qci;
- char gbr_dl;
- char gbr_ul;
- char max_br_dl;
- char max_br_ul;
+ unsigned int gbr_dl;
+ unsigned int gbr_ul;
+ unsigned int max_br_dl;
+ unsigned int max_br_ul;
+};
+
+struct dedicated_bearer_info {
+ int secondary_context_id;
+ unsigned char num_dedicated_bearer;
+ struct qos_parameter qos[MAX_NUM_DEDICATED_BEARER];
};
struct treq_ps_pdp_activate {
struct tnoti_ps_call_status {
int context_id;
int state;
- int result;
+ int result; /* specified in 3GPP TS 24.008 10.5.6.6. */
};
struct tnoti_ps_pdp_ipconfiguration {
unsigned short field_flag;
char devname[16];
+ unsigned long mtu;
unsigned char ip_address[IPV4_ADDR_LEN];
unsigned char primary_dns[IPV4_ADDR_LEN];
};
struct tnoti_ps_dedicated_bearer_info {
- unsigned char num_dedicated_bearer;
- struct dedicated_bearer_info dedicated_bearer [MAX_NUM_DEDICATED_BEARER];
+ int primary_context_id;
+ struct dedicated_bearer_info dedicated_bearer;
};
__END_DECLS
TREQ_MODEM_GET_VERSION,
TREQ_MODEM_GET_SN,
TREQ_MODEM_SET_DUN_PIN_CONTROL,
+ TREQ_MODEM_GET_DEVICE_INFO,
TREQ_CALL = TCORE_REQUEST | TCORE_TYPE_CALL,
TREQ_CALL_DIAL,
TREQ_NETWORK_SET_ROAMING_PREFERENCE,
TREQ_NETWORK_GET_ROAMING_PREFERENCE,
TREQ_NETWORK_GET_SUBSCRIPTION_INFO,
+ TREQ_NETWORK_SEARCH_ECC_RAT,
TREQ_PS = TCORE_REQUEST | TCORE_TYPE_PS,
TREQ_PS_SET_PDP_ACTIVATE,
TRESP_MODEM_GET_VERSION,
TRESP_MODEM_GET_SN,
TRESP_MODEM_SET_DUN_PIN_CONTROL,
+ TRESP_MODEM_GET_DEVICE_INFO,
TRESP_CALL = TCORE_RESPONSE | TCORE_TYPE_CALL,
TRESP_CALL_DIAL,
TRESP_NETWORK_SET_ROAMING_PREFERENCE,
TRESP_NETWORK_GET_ROAMING_PREFERENCE,
TRESP_NETWORK_GET_SUBSCRIPTION_INFO,
+ TRESP_NETWORK_SEARCH_ECC_RAT,
TRESP_PS = TCORE_RESPONSE | TCORE_TYPE_PS,
TRESP_PS_SET_PDP_ACTIVATE,
enum tcore_response_command command,
unsigned int data_len, const void *data, void *user_data);
-UserRequest* tcore_user_request_new(Communicator *comm, const char *modem_name);
-void tcore_user_request_free(UserRequest *ur);
+UserRequest *tcore_user_request_new(Communicator *comm, const char *modem_name);
+void tcore_user_request_free(UserRequest *ur);
-UserRequest* tcore_user_request_ref(UserRequest *ur);
-void tcore_user_request_unref(UserRequest *ur);
+UserRequest *tcore_user_request_ref(UserRequest *ur);
+void tcore_user_request_unref(UserRequest *ur);
-TReturn tcore_user_request_set_free_hook(UserRequest *ur,
+TReturn tcore_user_request_set_free_hook(UserRequest *ur,
UserRequestFreeHook free_hook);
-TReturn tcore_user_request_set_response_hook(UserRequest *ur,
+TReturn tcore_user_request_set_response_hook(UserRequest *ur,
UserRequestResponseHook resp_hook, void *user_data);
-Communicator* tcore_user_request_ref_communicator(UserRequest *ur);
-char* tcore_user_request_get_modem_name(UserRequest *ur);
+Communicator *tcore_user_request_ref_communicator(UserRequest *ur);
+char *tcore_user_request_get_modem_name(UserRequest *ur);
TReturn tcore_user_request_set_user_info(UserRequest *ur, void *user_info);
void *tcore_user_request_ref_user_info(UserRequest *ur);
-TReturn tcore_user_request_send_response(UserRequest *ur,
- enum tcore_response_command command,
- unsigned int data_len, const void *data);
+TReturn tcore_user_request_send_response(UserRequest *ur,
+ enum tcore_response_command command,
+ unsigned int data_len, const void *data);
-TReturn tcore_user_request_set_command(UserRequest *ur,
- enum tcore_request_command command);
+TReturn tcore_user_request_set_command(UserRequest *ur,
+ enum tcore_request_command command);
-enum tcore_request_command
- tcore_user_request_get_command(UserRequest *ur);
+enum tcore_request_command tcore_user_request_get_command(UserRequest *ur);
-TReturn tcore_user_request_set_data(UserRequest *ur,
- unsigned int data_len, const void *data);
-const void* tcore_user_request_ref_data(UserRequest *ur,
- unsigned int *data_len);
+TReturn tcore_user_request_set_data(UserRequest *ur,
+ unsigned int data_len, const void *data);
+const void *tcore_user_request_ref_data(UserRequest *ur,
+ unsigned int *data_len);
-TReturn tcore_user_request_set_metainfo(UserRequest *ur,
- unsigned int metainfo_len, const void *metainfo);
-const void* tcore_user_request_ref_metainfo(UserRequest *ur,
- unsigned int *metainfo_len);
+TReturn tcore_user_request_set_metainfo(UserRequest *ur,
+ unsigned int metainfo_len, const void *metainfo);
+const void *tcore_user_request_ref_metainfo(UserRequest *ur,
+ unsigned int *metainfo_len);
__END_DECLS
-#endif
+#endif /* __TCORE_USER_REQUEST_H__ */
__BEGIN_DECLS
-#define CONVERT_HEXCHAR_TO_INT(h, i) if ((h) >= '0' && (h) <= '9') (i) = (h) - '0'; \
- else if ((h) >= 'A' && (h) <= 'F') (i) = (h) - 'A' + 10; \
- else if ((h) >= 'a' && (h) <= 'f') (i) = (h) - 'a' + 10; \
- else (i) = 0;
+#define CONVERT_HEXCHAR_TO_INT(h, i) do { \
+ if ((h) >= '0' && (h) <= '9') \
+ (i) = (h) - '0'; \
+ else if ((h) >= 'A' && (h) <= 'F') \
+ (i) = (h) - 'A' + 10; \
+ else if ((h) >= 'a' && (h) <= 'f') \
+ (i) = (h) - 'a' + 10; \
+ else \
+ (i) = 0; \
+} while (0)
enum tcore_util_marshal_data_type {
TCORE_UTIL_MARSHAL_DATA_CHAR_TYPE = G_TYPE_CHAR,
TCORE_DCS_TYPE_UNSPECIFIED = 0x0F,
};
-TReturn tcore_util_netif_up(const char *name);
-TReturn tcore_util_netif_down(const char *name);
-TReturn tcore_util_netif_set(const char *name, const char *ipaddr,
- const char *gateway, const char *netmask);
-TReturn tcore_util_reset_ipv4_socket(const char *name, const char *ipaddr);
+TReturn tcore_util_netif_up(const char *name);
+TReturn tcore_util_netif_down(const char *name);
+TReturn tcore_util_netif_set(const char *name,
+ const char *ipaddr, const char *gateway, const char *netmask);
+TReturn tcore_util_netif_set_arp(const char *name, gboolean disable);
+TReturn tcore_util_reset_ipv4_socket(const char *name, const char *ipaddr);
TReturn tcore_util_netif_set_mtu(const char *name, unsigned int mtu);
-char* tcore_util_get_string_by_ip4type(union tcore_ip4_type ip);
-char* tcore_util_get_string_by_ip6type(unsigned char ipv6_addr_type[IPV6_ADDR_LEN]);
+char *tcore_util_get_string_by_ip4type(union tcore_ip4_type ip);
+char *tcore_util_get_string_by_ip6type(unsigned char ipv6_addr_type[IPV6_ADDR_LEN]);
-GHashTable* tcore_util_marshal_create();
-void tcore_util_marshal_destory(GHashTable *ht);
+GHashTable *tcore_util_marshal_create();
+void tcore_util_marshal_destory(GHashTable *ht);
-GHashTable* tcore_util_marshal_deserialize_string(const gchar *serialized_string);
-gchar* tcore_util_marshal_serialize(GHashTable *ht);
+GHashTable *tcore_util_marshal_deserialize_string(const gchar *serialized_string);
+gchar *tcore_util_marshal_serialize(GHashTable *ht);
-gboolean tcore_util_marshal_add_data(GHashTable *ht, const gchar *key,
- const void *data, enum tcore_util_marshal_data_type type);
-gboolean tcore_util_marshal_get_data(GHashTable *ht, const gchar *key,
- void **data, enum tcore_util_marshal_data_type type);
+gboolean tcore_util_marshal_add_data(GHashTable *ht, const gchar *key,
+ const void *data, enum tcore_util_marshal_data_type type);
+gboolean tcore_util_marshal_get_data(GHashTable *ht, const gchar *key,
+ void **data, enum tcore_util_marshal_data_type type);
-gint tcore_util_marshal_get_int(GHashTable *ht, const gchar *key);
-gchar* tcore_util_marshal_get_string(GHashTable *ht, const gchar *key);
-GHashTable* tcore_util_marshal_get_object(GHashTable *ht, const gchar *key);
+gint tcore_util_marshal_get_int(GHashTable *ht, const gchar *key);
+gchar *tcore_util_marshal_get_string(GHashTable *ht, const gchar *key);
+GHashTable *tcore_util_marshal_get_object(GHashTable *ht, const gchar *key);
-enum tcore_dcs_type
- tcore_util_get_cbs_coding_scheme(unsigned char encode);
+enum tcore_dcs_type tcore_util_get_cbs_coding_scheme(unsigned char encode);
-unsigned char* tcore_util_decode_hex(const char *src, int len);
-void tcore_util_hex_dump(const char *pad, int size, const void *data);
+unsigned char *tcore_util_decode_hex(const char *src, int len);
+void tcore_util_hex_dump(const char *pad, int size, const void *data);
-unsigned char* tcore_util_unpack_gsm7bit(const unsigned char *src, unsigned int src_len);
-unsigned char* tcore_util_pack_gsm7bit(const unsigned char *src, unsigned int src_len);
-char* tcore_util_convert_bcd_str_2_ascii_str(const char* src, int src_len);
-char* tcore_util_convert_bcd2ascii(const char *src, int src_len, int max_len);
-char* tcore_util_convert_digit2ascii(const char* src, int src_len);
-gboolean tcore_util_convert_utf8_to_gsm(unsigned char *dest, int *dest_len, unsigned char* src, int src_len);
-gboolean tcore_util_convert_utf8_to_ucs2(char **dest, int *dest_len, unsigned char *src, int src_len);
-gboolean tcore_util_convert_string_to_utf8(unsigned char *dest, unsigned short *dest_len,
- enum alphabet_format dcs, const unsigned char *src, unsigned short src_len);
-gboolean tcore_util_convert_ascii_to_utf8(unsigned char **dest, int *dest_len, unsigned char *src, int src_len);
-int tcore_util_convert_ucs2_to_utf8(char *out, unsigned short *out_len, char *in, unsigned short in_len);
+unsigned char *tcore_util_unpack_gsm7bit(const unsigned char *src, unsigned int src_len);
+unsigned char *tcore_util_pack_gsm7bit(const unsigned char *src, unsigned int src_len);
+char *tcore_util_convert_bcd_str_2_ascii_str(const char* src, int src_len);
+char *tcore_util_convert_bcd2ascii(const char *src, int src_len, int max_len);
+char *tcore_util_convert_digit2ascii(const char* src, int src_len);
+gboolean tcore_util_convert_utf8_to_gsm(unsigned char *dest, int *dest_len, unsigned char* src, int src_len);
+gboolean tcore_util_convert_utf8_to_ucs2(char **dest, int *dest_len, unsigned char *src, int src_len);
+gboolean tcore_util_convert_string_to_utf8(unsigned char *dest, unsigned short *dest_len,
+ enum alphabet_format dcs, const unsigned char *src, unsigned short src_len);
+gboolean tcore_util_convert_ascii_to_utf8(unsigned char **dest, int *dest_len, unsigned char *src, int src_len);
+int tcore_util_convert_ucs2_to_utf8(char *out, unsigned short *out_len, char *in, unsigned short in_len);
+char *tcore_util_convert_hexstring_to_bytes(char *s);
-void tcore_util_swap_byte_order(unsigned char* dest, const unsigned char* src, int src_len);
+void tcore_util_swap_byte_order(unsigned char* dest, const unsigned char* src, int src_len);
-char* tcore_util_get_version(void);
-void tcore_util_set_log(gboolean enable);
+char *tcore_util_get_version(void);
+void tcore_util_set_log(gboolean enable);
+gboolean tcore_util_is_country_NA(char *plmn);
__END_DECLS
-#endif
+#endif /* __TCORE_UTIL_H__ */
%define major 0
%define minor 2
-%define patchlevel 63
+%define patchlevel 89
Name: libtcore
Version: %{major}.%{minor}.%{patchlevel}
Release: 1
-License: Apache
+License: Apache-2.0
Summary: Telephony-core library
Group: System/Libraries
Source0: libtcore-%{version}.tar.gz
%files
%manifest libtcore.manifest
-%defattr(-,root,root,-)
+%defattr(644,system,system,-)
#%doc COPYING
%{_libdir}/libtcore*
#%{_bindir}/*
%{_datadir}/license/libtcore
%files devel
-%defattr(-,root,root,-)
+%defattr(644,system,system,-)
%{_includedir}/*
%{_libdir}/pkgconfig/tcore.pc
#include "at.h"
#include "core_object.h"
-#define NUM_ELEMS(x) (sizeof(x)/sizeof(x[0]))
-#define MODE_HEX 0
-#define MODE_BIN 1
+#define NUM_ELEMS(x) (sizeof(x)/sizeof(x[0]))
+#define MODE_HEX 0
+#define MODE_BIN 1
-#define CR '\r'
-#define LF '\n'
+#define CR '\r'
+#define LF '\n'
-#define MAX_AT_RESPONSE 255 // for testing
-//#define MAX_AT_RESPONSE 8191
-
-typedef gboolean (*rfs_hook_cb) (const gchar *data);
+/* Response buffer would grow on requirement */
+#define MAX_AT_RESPONSE 255
struct tcore_at_type {
TcoreHal *hal;
struct _notification *pdu_noti;
GSList *pdu_lines;
- rfs_hook_cb rfs_hook;
+ RfsHookCb rfs_hook;
gboolean data_mode;
};
* See 27.007 annex B
*/
static const char *list_final_responses_success[] = {
- "OK",
+ "OK",
"CONNECT",
};
* See 27.007 annex B
*/
static const char *list_final_responses_error[] = {
- "ERROR",
- "+CMS ERROR:",
- "+CME ERROR:",
- "NO ANSWER",
- "NO DIALTONE",
- "NO CARRIER",
+ "ERROR",
+ "+CMS ERROR:",
+ "+CME ERROR:",
+ "NO ANSWER",
+ "NO DIALTONE",
+ "NO CARRIER",
+ "COMMAND NOT SUPPORT", /* For Huawei Cellular dongle */
};
-static int _check_final_response(const char *line)
+/**
+ * 'typedef' to define final response received
+ */
+typedef enum {
+ TCORE_AT_FINAL_RESPONSE_UNKNOWN = 0,
+ TCORE_AT_FINAL_RESPONSE_SUCCESS,
+ TCORE_AT_FINAL_RESPONSE_FAILURE,
+} tcore_at_final_response;
+
+static tcore_at_final_response _check_final_response(const char *line)
{
unsigned int i;
- for (i = 0; i < NUM_ELEMS(list_final_responses_success); i++) {
- if (g_str_has_prefix(line, list_final_responses_success[i])) {
- return 1;
- }
- }
+ for (i = 0; i < NUM_ELEMS(list_final_responses_success); i++)
+ if (g_str_has_prefix(line, list_final_responses_success[i]))
+ return TCORE_AT_FINAL_RESPONSE_SUCCESS;
- for (i = 0; i < NUM_ELEMS(list_final_responses_error); i++) {
- if (g_str_has_prefix(line, list_final_responses_error[i])) {
- return 2;
- }
- }
+ for (i = 0; i < NUM_ELEMS(list_final_responses_error); i++)
+ if (g_str_has_prefix(line, list_final_responses_error[i]))
+ return TCORE_AT_FINAL_RESPONSE_FAILURE;
- return 0;
+ return TCORE_AT_FINAL_RESPONSE_UNKNOWN;
}
return *cur == '\0' ? NULL : cur;
}
-static struct tcore_at_response* _response_new()
+static struct tcore_at_response *_response_new()
{
struct tcore_at_response *resp;
- resp = calloc(1, sizeof(struct tcore_at_response));
+ resp = g_try_malloc0(sizeof(struct tcore_at_response));
if (!resp)
return NULL;
if (!resp)
return;
- if (resp->lines) {
+ if (resp->lines)
g_slist_free_full(resp->lines, g_free);
- }
if (resp->final_response)
- free(resp->final_response);
+ g_free(resp->final_response);
- free(resp);
+ g_free(resp);
}
dbg("current lines = %d", g_slist_length(resp->lines));
- resp->lines = g_slist_append(resp->lines, strdup(line));
+ resp->lines = g_slist_append(resp->lines, g_strdup(line));
}
static void _emit_pending_response(TcoreAT *at)
return;
p = tcore_queue_pop(tcore_hal_ref_queue(at->hal));
- if (!p) {
- dbg("no pending");
- }
+ if (!p)
+ info("NO pending request!");
tcore_pending_emit_response_callback(p, sizeof(TcoreATResponse), at->resp);
tcore_user_request_unref(tcore_pending_ref_user_request(p));
if (!at || !line)
return;
- dbg("at->pdu_status %d line 0x%x at->data_mode %d", at->pdu_status, line, at->data_mode);
+ dbg("pdu_status: [%s] data_mode: [%s]",
+ (at->pdu_status ? "TRUE" : "FALSE"),
+ (at->data_mode == MODE_BIN ? "Binary" : "Hex"));
if (at->pdu_status == FALSE) {
g_hash_table_iter_init(&iter, at->unsolicited_table);
at->pdu_status = TRUE;
at->pdu_noti = noti;
at->pdu_lines = g_slist_append(NULL, g_strdup(line));
+
dbg("PDU mode");
return;
}
if (at->data_mode == MODE_BIN) {
at->pdu_lines = g_slist_append(at->pdu_lines, (gpointer)line);
data = at->pdu_lines;
- } else {
+ } else
data = g_slist_append(NULL, g_strdup(line));
- }
- }
- else {
+ } else {
noti = at->pdu_noti;
at->pdu_status = FALSE;
at->pdu_noti = NULL;
if (at->data_mode == MODE_BIN) {
dbg("Binary mode");
+
at->pdu_lines = g_slist_append(at->pdu_lines, (gpointer)line);
dbg("at->pdu_lines: 0x%x", at->pdu_lines);
- } else {
+ } else
at->pdu_lines = g_slist_append(at->pdu_lines, g_strdup(line));
- }
data = at->pdu_lines;
}
p = p->next;
}
- dbg(" Free the list");
- if (at->data_mode != MODE_BIN) {
+ if (at->data_mode != MODE_BIN)
g_slist_free_full(data, g_free);
- }
+
at->pdu_lines = NULL;
- if (g_slist_length(noti->callbacks) == 0) {
+ if (g_slist_length(noti->callbacks) == 0)
g_hash_table_remove(at->unsolicited_table, key);
- }
- dbg("exit");
}
static void _free_noti_list(void *data)
g_slist_free_full(noti->callbacks, g_free);
}
-#if 0
-static void _msgat(const char *prefix, const char *str)
-{
- unsigned int i;
- char buf[8192] = {0,};
- char *pos;
-
- if (!str) {
- msg("str is NULL");
- return;
- }
-
- if (strlen(str) > 4096) {
- msg("%s[%s]", prefix, str);
- return;
- }
-
- pos = buf;
- for (i = 0; i < strlen(str); i++) {
- if (str[i] == '\r') {
- strncpy(pos, "<CR>", 4);
- pos += 4;
- }
- else if (str[i] == '\n') {
- strncpy(pos, "<LF>", 4);
- pos += 4;
- }
- else {
- *pos = str[i];
- pos++;
- }
-
- }
-
- msg("%s[%s]", prefix, buf);
-}
-#endif
-
TcoreAT *tcore_at_new(TcoreHal *hal)
{
TcoreAT *at;
- at = calloc(1, sizeof(struct tcore_at_type));
+ at = g_try_malloc0(sizeof(struct tcore_at_type));
if (!at)
return NULL;
at->hal = hal;
at->buf_size = MAX_AT_RESPONSE;
- at->buf = calloc(1, at->buf_size + 1);
+ at->buf = g_try_malloc0(at->buf_size + 1);
+ if (at->buf == NULL) {
+ g_free(at);
+ return NULL;
+ }
+
at->buf_read_pos = at->buf;
at->buf_write_pos = at->buf;
at->data_mode = MODE_HEX;
at->unsolicited_table = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, _free_noti_list );
+ g_free, _free_noti_list);
return at;
}
return;
if (at->buf)
- free(at->buf);
+ g_free(at->buf);
if (at->unsolicited_table)
g_hash_table_destroy(at->unsolicited_table);
- free(at);
+ g_free(at);
}
TReturn tcore_at_remove_notification_full(TcoreAT *at, const char *prefix,
return TCORE_RETURN_SUCCESS;
p = noti->callbacks;
- for(; p; p = p->next) {
+ for (; p; p = p->next) {
item = p->data;
if (!item)
continue;
char next;
if (!at || !req) {
- dbg("Invalid data");
+ err("Invalid data");
return TCORE_RETURN_EINVAL;
}
if (!req->cmd) {
- dbg("Invalid cmd");
+ err("Invalid cmd");
return TCORE_RETURN_EINVAL;
}
#endif
end = strchr(at->req->cmd, CR);
- next = *(end + 1);
- if (next == '\0') {
- return tcore_hal_send_data(at->hal, strlen(req->cmd), req->cmd);
- }
+ if (end) {
+ next = *(end + 1);
+ if (next == '\0')
+ return tcore_hal_send_data(at->hal, strlen(req->cmd), req->cmd);
- at->req->next_send_pos = end + 1;
- dbg("backup data = [%c] next data = [%s]", next, at->req->next_send_pos);
+ at->req->next_send_pos = end + 1;
+ dbg("backup data = [%c] next data = [%s]", next, at->req->next_send_pos);
- *(end+1) = '\0';
- ret = tcore_hal_send_data(at->hal, strlen(req->cmd), req->cmd);
- *(end+1) = next;
+ *(end+1) = '\0';
+ ret = tcore_hal_send_data(at->hal, strlen(req->cmd), req->cmd);
+ *(end+1) = next;
- return ret;
+ return ret;
+ }
+
+ return TCORE_RETURN_EINVAL;
}
TcoreATRequest *tcore_at_get_request(TcoreAT *at)
if (write_pos + data_len >= at->buf_size) {
/* shift left (trim completed data) */
- dbg("shift left buffer (request data_len = %d)", data_len);
- dbg("before read_pos=buf+%d, write_pos=buf+%d", read_pos, write_pos);
memmove(at->buf, at->buf_read_pos, at->buf_size - read_pos);
at->buf_read_pos = at->buf;
at->buf_write_pos = at->buf + write_pos - read_pos;
- dbg("after read_pos=buf+%d, write_pos=buf+%d",
- at->buf_read_pos - at->buf,
- at->buf_write_pos - at->buf);
+
+ dbg("Shift [Left] - Requested len: %d bytes - " \
+ "before (read_pos: %d write_pos: %d) " \
+ "after (read_pos: %d write_pos: %d)",
+ data_len, read_pos, write_pos,
+ (at->buf_read_pos - at->buf),
+ (at->buf_write_pos - at->buf));
+
memset(at->buf_write_pos, 0, at->buf_size - (at->buf_write_pos - at->buf));
}
at->buf_write_pos = at->buf + write_pos;
memset(at->buf_write_pos, 0, at->buf_size - (at->buf_write_pos - at->buf));
- dbg("resize buffer to %d", at->buf_size);
+ dbg("Resize buffer to '%d' bytes", at->buf_size);
}
+ /*
+ * Copy Data to write buffer and adjust write buffer pointer
+ */
memcpy(at->buf_write_pos, data, data_len);
-
at->buf_write_pos += data_len;
+
return TCORE_RETURN_SUCCESS;
}
-TcoreATRequest* tcore_at_request_new(const char *cmd, const char *prefix, enum tcore_at_command_type type)
+TcoreATRequest *tcore_at_request_new(const char *cmd,
+ const char *prefix, enum tcore_at_command_type type)
{
TcoreATRequest *req;
if (strlen(cmd) < 1)
return NULL;
- req = calloc(1, sizeof(struct tcore_at_request));
+ req = g_try_malloc0(sizeof(struct tcore_at_request));
if (!req)
return NULL;
req->cmd = g_strdup_printf("%s%c", cmd, 26);
if (prefix)
- req->prefix = strdup(prefix);
+ req->prefix = g_strdup(prefix);
req->type = type;
return;
if (req->cmd)
- free(req->cmd);
+ g_free(req->cmd);
if (req->prefix)
- free(req->prefix);
+ g_free(req->prefix);
- free(req);
+ g_free(req);
}
-void tcore_at_response_free(TcoreATResponse *rsp){
+void tcore_at_response_free(TcoreATResponse *rsp)
+{
_response_free(rsp);
}
static int __sum_4_bytes(const char *posn)
{
int sum = 0;
+
sum = sum | (*(posn+3)) << 24;
sum = sum | (*(posn+2)) << 16;
sum = sum | (*(posn+1)) << 8;
- sum = sum | *posn ;
+ sum = sum | *posn;
+
return sum;
}
-/* Function to process binary data received as part of XDRV Indication */
-void tcore_at_process_binary_data(TcoreAT *at, char *position, int data_len)
+/*
+ * Function to process binary data received as part of XDRV Indication
+ */
+void tcore_at_process_binary_data(TcoreAT *at,
+ char *position, int data_len)
{
#define NVM_PAYLOAD_LENGTH_0 52
m_length_1 = __sum_4_bytes(&position[NVM_PAYLOAD_LENGTH_1]);
data_len_final = data_len_final + data_len;
- dbg("m_length_0 = %d , m_length_1 = %d, data_len_final = %d actual_buffer_size: %d", m_length_0, m_length_1, data_len_final, actual_buffer_size);
+ dbg("m_length_0 = %d , m_length_1 = %d, " \
+ "data_len_final = %d actual_buffer_size: %d",
+ m_length_0, m_length_1, data_len_final, actual_buffer_size);
if (actual_buffer_size == 0) {
actual_buffer_size = data_len + m_length_0 + m_length_1;
dbg("Actual buffer size is %d", actual_buffer_size);
{
char *pos;
char *next_pos;
- int ret;
+ gboolean is_resp_processed = FALSE;
if (!at || !data)
return FALSE;
tcore_at_buf_write(at, data_len, data);
pos = at->buf_read_pos;
- dbg("On entry at->buf_read_pos: 0x%x", at->buf_read_pos);
while (1) {
next_pos = _find_next_EOL(pos);
if (!next_pos) {
- dbg("Data could be in Binary mode !!");
if (at->rfs_hook) {
- if (TRUE == at->rfs_hook(pos)){
+ dbg("RFS hook set - Not Binary data!");
+ if (TRUE == at->rfs_hook(pos)) {
at->data_mode = MODE_BIN;
tcore_at_process_binary_data(at, pos, data_len);
}
- dbg("Not Binary data");
- }else
- dbg("Rfs hook is not set !!");
+
+ }
+
break;
}
if (pos != next_pos)
*next_pos = '\0';
- //dbg("complete line found.");
- dbg("line = [%s]", pos);
+ dbg("Received 'AT' data: [%s]", pos);
- // check request
+ /* Validate Request */
if (!at->req) {
+ err("at->req is NULL");
_emit_unsolicited_message(at, pos);
- }
- else {
+ } else {
+ tcore_at_final_response ret;
if (g_strcmp0(pos, "> ") == 0) {
if (at->req->next_send_pos) {
- dbg("send next: [%s]", at->req->next_send_pos);
- tcore_hal_send_data(at->hal, strlen(at->req->next_send_pos), at->req->next_send_pos);
- pos += 3; /* Including NULL character */
+ dbg("Send next: [%s]", at->req->next_send_pos);
+ tcore_hal_send_data(at->hal,
+ strlen(at->req->next_send_pos), at->req->next_send_pos);
+
+ /* Including NULL character */
+ pos += 3;
at->buf_read_pos = pos;
+
break;
}
}
if (!at->resp) {
at->resp = _response_new();
+ if (!at->resp) {
+ err("Failed to create response!");
+ return FALSE;
+ }
}
ret = _check_final_response(pos);
- if (ret) {
- if (ret == 1)
+ if (ret != TCORE_AT_FINAL_RESPONSE_UNKNOWN) {
+ /*
+ * Valid Response
+ *
+ * Success OR Failure
+ */
+ if (ret == TCORE_AT_FINAL_RESPONSE_SUCCESS) {
at->resp->success = TRUE;
- else {
+ } else {
gchar *str_escape = NULL;
gchar str_secure[12] = {'\0'};
at->resp->success = FALSE;
}
- at->resp->final_response = strdup(pos);
+ at->resp->final_response = g_strdup(pos);
_emit_pending_response(at);
- at->buf_read_pos = next_pos + 1;
- return TRUE;
- }
- else {
- switch (at->req->type) {
- case TCORE_AT_NO_RESULT:
- _emit_unsolicited_message(at, pos);
- break;
- case TCORE_AT_NUMERIC:
- if (at->resp->lines == NULL && isdigit(pos[0])) {
- _response_add(at->resp, pos);
- }
- else {
- _emit_unsolicited_message(at, pos);
- }
+ is_resp_processed = TRUE;
+ } else {
+ /*
+ * Specific Response type OR Possible notification
+ */
+ switch (at->req->type) {
+ case TCORE_AT_NO_RESULT:
+ _emit_unsolicited_message(at, pos);
+ break;
- break;
-
- case TCORE_AT_SINGLELINE:
- if (at->resp->lines == NULL) {
- if (at->req->prefix) {
- if (g_str_has_prefix(pos, at->req->prefix)) {
- _response_add(at->resp, pos);
- }
- else {
- _emit_unsolicited_message(at, pos);
- }
- }
- else {
- _response_add(at->resp, pos);
- }
- }
- else {
- _emit_unsolicited_message(at, pos);
- }
- break;
+ case TCORE_AT_NUMERIC:
+ if (at->resp->lines == NULL && isdigit(pos[0]))
+ _response_add(at->resp, pos);
+ else
+ _emit_unsolicited_message(at, pos);
+ break;
- case TCORE_AT_MULTILINE:
+ case TCORE_AT_SINGLELINE:
+ if (at->resp->lines == NULL) {
if (at->req->prefix) {
- if (g_str_has_prefix(pos, at->req->prefix)) {
+ if (g_str_has_prefix(pos, at->req->prefix))
_response_add(at->resp, pos);
- }
- else {
+ else
_emit_unsolicited_message(at, pos);
- }
- }
- else {
+ } else {
_response_add(at->resp, pos);
}
- break;
+ } else {
+ _emit_unsolicited_message(at, pos);
+ }
+ break;
- case TCORE_AT_PDU:
- if (at->req->prefix) {
- if (g_str_has_prefix(pos, at->req->prefix)) {
- _response_add(at->resp, pos);
- }
- else {
- if (at->resp->lines != NULL) {
- _response_add(at->resp, pos);
- }
- else {
- _emit_unsolicited_message(at, pos);
- }
- }
- }
- else {
+ case TCORE_AT_MULTILINE:
+ if (at->req->prefix) {
+ if (g_str_has_prefix(pos, at->req->prefix))
_response_add(at->resp, pos);
+ else
+ _emit_unsolicited_message(at, pos);
+ } else {
+ _response_add(at->resp, pos);
+ }
+ break;
+
+ case TCORE_AT_PDU:
+ if (at->req->prefix) {
+ if (g_str_has_prefix(pos, at->req->prefix)) {
+ _response_add(at->resp, pos);
+ } else {
+ if (at->resp->lines != NULL)
+ _response_add(at->resp, pos);
+ else
+ _emit_unsolicited_message(at, pos);
}
- break;
+ } else {
+ _response_add(at->resp, pos);
+ }
+ break;
- default:
- dbg("unknown");
- _emit_unsolicited_message(at, pos);
- break;
+ default:
+ warn("Unknown Request type: %d", (at->req->type));
+ _emit_unsolicited_message(at, pos);
+ break;
}
}
}
- //
+ /* Progress 'Read' buffer */
pos = next_pos + 1;
at->buf_read_pos = pos;
}
- return FALSE;
+ if (is_resp_processed == FALSE)
+ return FALSE;
+
+ return TRUE;
}
-TcorePending *tcore_at_pending_new(CoreObject *co, const char *cmd, const char *prefix, enum tcore_at_command_type type, TcorePendingResponseCallback func, void *user_data)
+TcorePending *tcore_at_pending_new(CoreObject *co, const char *cmd,
+ const char *prefix, enum tcore_at_command_type type,
+ TcorePendingResponseCallback func, void *user_data)
{
TcorePending *p;
TcoreATRequest *req;
pos = (char *)line;
if (line[strlen(line)-1] == ')')
mark_end = (char *)line + strlen(line) - 1;
- }
- else {
+ } else {
/* normal at message */
pos = strchr(line, ':');
if (!pos) {
pos++;
/* skip whitespace */
- while (*pos != '\0' && isspace(*pos)) {
+ while (*pos != '\0' && isspace(*pos))
pos++;
- }
begin = pos;
do {
switch (type) {
case TYPE_NONE:
- if (*pos == '"') {
+ if (*pos == '"')
type = TYPE_STR;
- }
- else if (*pos == ',') {
+ else if (*pos == ',')
tokens = g_slist_append(tokens, strdup(""));
- }
else if (*pos == ' ') {
- // skip
- }
- else if (*pos == '(') {
+ /*
+ * Skip, no processing for blank space
+ */
+ } else if (*pos == '(')
type = TYPE_PAREN;
- }
- else {
+ else
type = TYPE_RAW;
- }
+
begin = pos;
- break;
+ break;
case TYPE_STR:
if (*pos == '"') {
type = TYPE_STR_FIN;
- buf = calloc(1, (pos - begin) + 2);
+ buf = g_try_malloc0((pos - begin) + 2);
+ if (!buf) {
+ g_slist_free_full(tokens, g_free);
+ return NULL;
+ }
+
memcpy(buf, begin, pos - begin + 1);
tokens = g_slist_append(tokens, buf);
}
- break;
+ break;
case TYPE_PAREN:
if (*pos == ')') {
type = TYPE_PAREN_FIN;
- buf = calloc(1, (pos - begin) + 2);
+ buf = g_try_malloc0((pos - begin) + 2);
+ if (!buf) {
+ g_slist_free_full(tokens, g_free);
+ return NULL;
+ }
memcpy(buf, begin, pos - begin + 1);
tokens = g_slist_append(tokens, buf);
}
- break;
+ break;
case TYPE_RAW:
if (*pos == ',' || *pos == '\0') {
type = TYPE_NONE;
- buf = calloc(1, (pos - begin) + 1);
+ buf = g_try_malloc0((pos - begin) + 1);
+ if (!buf) {
+ g_slist_free_full(tokens, g_free);
+ return NULL;
+ }
+
memcpy(buf, begin, pos - begin);
tokens = g_slist_append(tokens, buf);
}
- break;
+ break;
case TYPE_STR_FIN:
case TYPE_PAREN_FIN:
- if (*pos == ',') {
+ if (*pos == ',')
type = TYPE_NONE;
- }
- break;
+ break;
+
default:
err("invalid string type");
- break;
+ break;
}
if (*pos == '\0' || pos == mark_end)
} while (1);
if (type == TYPE_RAW) {
- buf = calloc(1, (pos - begin) + 1);
+ buf = g_try_malloc0((pos - begin) + 1);
+ if (!buf) {
+ g_slist_free_full(tokens, g_free);
+ return NULL;
+ }
+
memcpy(buf, begin, pos - begin);
tokens = g_slist_append(tokens, buf);
}
last = (char *)src + strlen(src) - 1;
switch (*src) {
- case '(':
- if (*last == ')') {
- dest = g_strdup(src + 1);
- dest[strlen(dest) - 1] = '\0';
- }
- break;
+ case '(':
+ if (*last == ')') {
+ dest = g_strdup(src + 1);
+ dest[strlen(dest) - 1] = '\0';
+ }
+ break;
- case '"':
- if (*last == '"') {
- dest = g_strdup(src + 1);
- dest[strlen(dest) - 1] = '\0';
- }
- break;
+ case '"':
+ if (*last == '"') {
+ dest = g_strdup(src + 1);
+ dest[strlen(dest) - 1] = '\0';
+ }
+ break;
- default:
- return g_strdup(src);
- break;
+ default:
+ return g_strdup(src);
}
return dest;
if (at != NULL) {
dbg("Setting the rfs hook callback function");
- at->rfs_hook = (rfs_hook_cb) hook_func;
+ at->rfs_hook = (RfsHookCb)hook_func;
return TRUE;
}
+
dbg("AT is NULL !!!");
return FALSE;
}
return;
tcore_at_request_free(at->req);
- tcore_at_response_free(at->resp);
at->req = NULL;
+
+ tcore_at_response_free(at->resp);
at->resp = NULL;
}
TReturn tcore_prepare_and_send_at_request(CoreObject *co,
- const char *at_cmd,
- const char *at_cmd_prefix,
- enum tcore_at_command_type at_cmd_type,
- UserRequest *ur,
- TcorePendingResponseCallback resp_cb,
- void *resp_cb_data,
- TcorePendingSendCallback send_cb,
- void *send_cb_data,
- unsigned int timeout,
- TcorePendingTimeoutCallback timeout_cb,
- void *timeout_cb_data)
+ const char *at_cmd, const char *at_cmd_prefix,
+ enum tcore_at_command_type at_cmd_type,
+ UserRequest *ur,
+ TcorePendingResponseCallback resp_cb, void *resp_cb_data,
+ TcorePendingSendCallback send_cb, void *send_cb_data,
+ unsigned int timeout, TcorePendingTimeoutCallback timeout_cb, void *timeout_cb_data)
{
TcorePending *pending = NULL;
TcoreATRequest *req = NULL;
hal = tcore_object_get_hal(co);
if (!hal) {
- dbg("HAL is NULL");
+ err("HAL is NULL");
return ret;
}
dbg("hal: [0x%x]", hal);
/* Create Pending Request */
pending = tcore_pending_new(co, 0);
if (!pending) {
- dbg("Pending is NULL");
+ err("Pending is NULL");
return ret;
}
/* Create AT-Command Request */
req = tcore_at_request_new(at_cmd, at_cmd_prefix, at_cmd_type);
if (req == NULL) {
- dbg("Request is NULL");
+ err("Request is NULL");
+
tcore_pending_free(pending);
return ret;
}
+
dbg("AT Command: [%s], Prefix(if any): [%s], AT-Command length: [%d]",
- req->cmd, req->prefix, strlen(req->cmd));
+ req->cmd, req->prefix, strlen(req->cmd));
tcore_pending_set_request_data(pending, 0, req);
tcore_pending_set_response_callback(pending, resp_cb, resp_cb_data);
tcore_pending_link_user_request(pending, ur);
ret = tcore_hal_send_request(hal, pending);
- dbg("ret: [0x%x]", ret);
+ if (ret != TCORE_RETURN_SUCCESS) {
+ err("Failed to send AT-Request!");
+
+ tcore_at_request_free(req);
+ tcore_pending_free(pending);
+ }
+
return ret;
}
-
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#define MAX_CALL_OBJECTS 6
-#define _check_null( name, value, err ) { \
- if ( !value ) { \
- dbg("[error] %s : NULL", name ); \
- return err; \
- } \
-}
-
struct call_cli_info {
enum tcore_call_cli_mode mode;
enum tcore_call_no_cli_cause no_cli_cause;
struct call_object {
enum tcore_call_type type;
+
+ unsigned int handle;
unsigned int id;
+
enum tcore_call_direction direction;
enum tcore_call_status status;
gboolean mpty;
struct call_cna_info cna;
unsigned int cug_id;
unsigned int active_line;
- struct call_time { // second
- long start;
- long end;
+ struct call_time {
+ long start; /* In seconds */
+ long end; /* In seconds */
} time;
+
gboolean is_volte_call;
- int session_id; // VoLTE only
- int conf_call_session_id; // Conference call session-id (VoLTE only)
- gboolean early_media; // VoLTE only
+ int session_id; /* VoLTE only */
+ int conf_call_session_id; /* Conference call session-id (VoLTE only) */
+ gboolean early_media; /* VoLTE only */
+
+ gboolean is_release_pending;
+ enum tcore_call_silent_redial_reason redial_reason;
};
struct private_object_data {
- GSList* cobjs;
- struct tcore_call_operations *ops;
+ GSList *cobjs;
+ struct tcore_call_operations *ops[TCORE_OPS_TYPE_MAX];
struct tcore_call_control_operations *cops;
struct tcore_call_information_operations *iops;
};
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static unsigned int __assign_handle(CoreObject *o)
+{
+ unsigned int handle_candidate = MIN_HANDLE;
+ CallObject *co = NULL;
+
+ /* Find unused 'handle' - starting from 1 */
+ while (handle_candidate < MAX_HANDLE) {
+ co = tcore_call_object_find_by_handle(o, handle_candidate);
+ if (NULL == co) {
+ /* Unused handle found */
+ return handle_candidate;
+ } else {
+ /* 'handle' already used, try next value */
+ handle_candidate++;
+ co = NULL;
+ }
+ }
+
+ err("available handle not found, serious");
+ return INVALID_HANDLE;
+}
+
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
- po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->ops", po->ops, TCORE_RETURN_FAILURE);
- _check_null( "ur", ur, TCORE_RETURN_FAILURE);
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_call_operations *ops = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_CALL, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
+
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_CALL_DIAL:
- _check_null( "po->ops->dial", po->ops->dial, TCORE_RETURN_FAILURE);
- return po->ops->dial(o, ur);
+ case TREQ_CALL_DIAL:
+ tcore_check_null_ret_err("ops->dial",
+ ops->dial, TCORE_RETURN_ENOSYS);
+
+ return ops->dial(o, ur);
+
+ case TREQ_CALL_ANSWER:
+ tcore_check_null_ret_err("ops->answer",
+ ops->answer, TCORE_RETURN_ENOSYS);
+
+ return ops->answer(o, ur);
+
+ case TREQ_CALL_END:
+ tcore_check_null_ret_err("ops->end",
+ ops->end, TCORE_RETURN_ENOSYS);
+
+ return ops->end(o, ur);
+
+ case TREQ_CALL_HOLD:
+ tcore_check_null_ret_err("ops->hold",
+ ops->hold, TCORE_RETURN_ENOSYS);
+
+ return ops->hold(o, ur);
+
+ case TREQ_CALL_ACTIVE:
+ tcore_check_null_ret_err("ops->active",
+ ops->active, TCORE_RETURN_ENOSYS);
+
+ return ops->active(o, ur);
+
+ case TREQ_CALL_SWAP:
+ tcore_check_null_ret_err("ops->swap",
+ ops->swap, TCORE_RETURN_ENOSYS);
+
+ return ops->swap(o, ur);
+
+ case TREQ_CALL_JOIN:
+ tcore_check_null_ret_err("ops->join",
+ ops->join, TCORE_RETURN_ENOSYS);
+
+ return ops->join(o, ur);
+
+ case TREQ_CALL_SPLIT:
+ tcore_check_null_ret_err("ops->split",
+ ops->split, TCORE_RETURN_ENOSYS);
+
+ return ops->split(o, ur);
+
+ case TREQ_CALL_DEFLECT:
+ tcore_check_null_ret_err("ops->deflect",
+ ops->deflect, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_ANSWER:
- _check_null( "po->ops->answer", po->ops->answer, TCORE_RETURN_FAILURE);
- return po->ops->answer(o, ur);
+ return ops->deflect(o, ur);
- case TREQ_CALL_END:
- _check_null( "po->ops->end", po->ops->end, TCORE_RETURN_FAILURE);
- return po->ops->end(o, ur);
+ case TREQ_CALL_TRANSFER:
+ tcore_check_null_ret_err("ops->transfer",
+ ops->transfer, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_HOLD:
- _check_null( "po->ops->hold", po->ops->hold, TCORE_RETURN_FAILURE);
- return po->ops->hold(o, ur);
+ return ops->transfer(o, ur);
- case TREQ_CALL_ACTIVE:
- _check_null( "po->ops->active", po->ops->active, TCORE_RETURN_FAILURE);
- return po->ops->active(o, ur);
+ case TREQ_CALL_START_CONT_DTMF:
+ tcore_check_null_ret_err("ops->start_cont_dtmf",
+ ops->start_cont_dtmf, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SWAP:
- _check_null( "po->ops->swap", po->ops->swap, TCORE_RETURN_FAILURE);
- return po->ops->swap(o, ur);
+ return ops->start_cont_dtmf(o, ur);
- case TREQ_CALL_JOIN:
- _check_null( "po->ops->join", po->ops->join, TCORE_RETURN_FAILURE);
- return po->ops->join(o, ur);
+ case TREQ_CALL_STOP_CONT_DTMF:
+ tcore_check_null_ret_err("ops->stop_cont_dtmf",
+ ops->stop_cont_dtmf, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SPLIT:
- _check_null( "po->ops->split", po->ops->split, TCORE_RETURN_FAILURE);
- return po->ops->split(o, ur);
+ return ops->stop_cont_dtmf(o, ur);
- case TREQ_CALL_DEFLECT:
- _check_null( "po->ops->deflect", po->ops->deflect, TCORE_RETURN_FAILURE);
- return po->ops->deflect(o, ur);
+ case TREQ_CALL_SEND_BURST_DTMF:
+ tcore_check_null_ret_err("ops->send_burst_dtmf",
+ ops->send_burst_dtmf, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_TRANSFER:
- _check_null( "po->ops->transfer", po->ops->transfer, TCORE_RETURN_FAILURE);
- return po->ops->transfer(o, ur);
+ return ops->send_burst_dtmf(o, ur);
- case TREQ_CALL_START_CONT_DTMF:
- _check_null( "po->ops->start_cont_dtmf", po->ops->start_cont_dtmf, TCORE_RETURN_FAILURE);
- return po->ops->start_cont_dtmf(o, ur);
+ case TREQ_CALL_GET_PRIVACY_MODE:
+ tcore_check_null_ret_err("ops->get_privacy_mode",
+ ops->get_privacy_mode, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_STOP_CONT_DTMF:
- _check_null( "po->ops->stop_cont_dtmf", po->ops->stop_cont_dtmf, TCORE_RETURN_FAILURE);
- return po->ops->stop_cont_dtmf(o, ur);
+ return ops->get_privacy_mode(o, ur);
- case TREQ_CALL_SEND_BURST_DTMF:
- _check_null( "po->ops->send_burst_dtmf", po->ops->send_burst_dtmf, TCORE_RETURN_FAILURE);
- return po->ops->send_burst_dtmf(o, ur);
+ case TREQ_CALL_SET_PRIVACY_MODE:
+ tcore_check_null_ret_err("ops->set_privacy_mode",
+ ops->set_privacy_mode, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_GET_PRIVACY_MODE:
- _check_null( "po->ops->get_privacy_mode", po->ops->get_privacy_mode, TCORE_RETURN_FAILURE);
- return po->ops->get_privacy_mode(o, ur);
+ return ops->set_privacy_mode(o, ur);
- case TREQ_CALL_SET_PRIVACY_MODE:
- _check_null( "po->ops->set_privacy_mode", po->ops->set_privacy_mode, TCORE_RETURN_FAILURE);
- return po->ops->set_privacy_mode(o, ur);
+ case TREQ_CALL_SET_SOUND_PATH:
+ tcore_check_null_ret_err("ops->set_sound_path",
+ ops->set_sound_path, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SET_SOUND_PATH:
- _check_null( "po->ops->set_sound_path", po->ops->set_sound_path, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_path(o, ur);
+ return ops->set_sound_path(o, ur);
- case TREQ_CALL_GET_SOUND_VOLUME_LEVEL:
- _check_null( "po->ops->get_sound_volume_level", po->ops->get_sound_volume_level, TCORE_RETURN_FAILURE);
- return po->ops->get_sound_volume_level(o, ur);
+ case TREQ_CALL_GET_SOUND_VOLUME_LEVEL:
+ tcore_check_null_ret_err("ops->get_sound_volume_level",
+ ops->get_sound_volume_level, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SET_SOUND_VOLUME_LEVEL:
- _check_null( "po->ops->set_sound_volume_level", po->ops->set_sound_volume_level, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_volume_level(o, ur);
+ return ops->get_sound_volume_level(o, ur);
- case TREQ_CALL_SET_SOUND_MUTE_STATUS:
- _check_null( "po->ops->set_sound_mute_status", po->ops->set_sound_mute_status, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_mute_status(o, ur);
+ case TREQ_CALL_SET_SOUND_VOLUME_LEVEL:
+ tcore_check_null_ret_err("ops->set_sound_volume_level",
+ ops->set_sound_volume_level, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_GET_SOUND_MUTE_STATUS:
- _check_null( "po->ops->get_sound_mute_status", po->ops->get_sound_mute_status, TCORE_RETURN_FAILURE);
- return po->ops->get_sound_mute_status(o, ur);
+ return ops->set_sound_volume_level(o, ur);
- case TREQ_CALL_SET_SOUND_RECORDING:
- _check_null( "po->ops->set_sound_recording", po->ops->set_sound_recording, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_recording(o, ur);
+ case TREQ_CALL_SET_SOUND_MUTE_STATUS:
+ tcore_check_null_ret_err("ops->set_sound_mute_status",
+ ops->set_sound_mute_status, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SET_SOUND_EQUALIZATION:
- _check_null( "po->ops->set_sound_equalization", po->ops->set_sound_equalization, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_equalization(o, ur);
+ return ops->set_sound_mute_status(o, ur);
- case TREQ_CALL_SET_SOUND_NOISE_REDUCTION:
- _check_null( "po->ops->set_sound_noise_reduction", po->ops->set_sound_noise_reduction, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_noise_reduction(o, ur);
+ case TREQ_CALL_GET_SOUND_MUTE_STATUS:
+ tcore_check_null_ret_err("ops->get_sound_mute_status",
+ ops->get_sound_mute_status, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_SET_SOUND_CLOCK_STATUS:
- _check_null( "po->ops->set_sound_clock_status", po->ops->set_sound_clock_status, TCORE_RETURN_FAILURE);
- return po->ops->set_sound_clock_status(o, ur);
+ return ops->get_sound_mute_status(o, ur);
- case TREQ_CALL_SET_PREFERRED_VOICE_SUBSCRIPTION:
- _check_null( "po->ops->set_preferred_voice_subscription", po->ops->set_preferred_voice_subscription, TCORE_RETURN_FAILURE);
- return po->ops->set_preferred_voice_subscription(o, ur);
+ case TREQ_CALL_SET_SOUND_RECORDING:
+ tcore_check_null_ret_err("ops->set_sound_recording",
+ ops->set_sound_recording, TCORE_RETURN_ENOSYS);
- case TREQ_CALL_GET_PREFERRED_VOICE_SUBSCRIPTION:
- _check_null( "po->ops->get_preferred_voice_subscription", po->ops->get_preferred_voice_subscription, TCORE_RETURN_FAILURE);
- return po->ops->get_preferred_voice_subscription(o, ur);
+ return ops->set_sound_recording(o, ur);
- default:
- break;
+ case TREQ_CALL_SET_SOUND_EQUALIZATION:
+ tcore_check_null_ret_err("ops->set_sound_equalization",
+ ops->set_sound_equalization, TCORE_RETURN_ENOSYS);
+
+ return ops->set_sound_equalization(o, ur);
+
+ case TREQ_CALL_SET_SOUND_NOISE_REDUCTION:
+ tcore_check_null_ret_err("ops->set_sound_noise_reduction",
+ ops->set_sound_noise_reduction, TCORE_RETURN_ENOSYS);
+
+ return ops->set_sound_noise_reduction(o, ur);
+
+ case TREQ_CALL_SET_SOUND_CLOCK_STATUS:
+ tcore_check_null_ret_err("ops->set_sound_clock_status",
+ ops->set_sound_clock_status, TCORE_RETURN_ENOSYS);
+
+ return ops->set_sound_clock_status(o, ur);
+
+ case TREQ_CALL_SET_PREFERRED_VOICE_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->set_preferred_voice_subscription",
+ ops->set_preferred_voice_subscription, TCORE_RETURN_ENOSYS);
+
+ return ops->set_preferred_voice_subscription(o, ur);
+
+ case TREQ_CALL_GET_PREFERRED_VOICE_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->get_preferred_voice_subscription",
+ ops->get_preferred_voice_subscription, TCORE_RETURN_ENOSYS);
+
+ return ops->get_preferred_voice_subscription(o, ur);
+
+ case TREQ_CALL_MODIFY:
+ tcore_check_null_ret_err("ops->modify",
+ ops->modify, TCORE_RETURN_ENOSYS);
+
+ return ops->modify(o, ur);
+
+ case TREQ_CALL_CONFIRM_MODIFY:
+ tcore_check_null_ret_err("ops->confirm_modify",
+ ops->confirm_modify, TCORE_RETURN_ENOSYS);
+
+ return ops->confirm_modify(o, ur);
+
+ default:
+ break;
}
return TCORE_RETURN_SUCCESS;
tcore_object_link_object(o, NULL);
}
-typedef gboolean(*func)(struct call_object* co, void *data);
-static struct call_object *_find_object(GSList *objs, void* data, func compare)
+typedef gboolean(*func)(CallObject *co, void *data);
+static CallObject *_find_object(GSList *objs, void *data, func compare)
{
- struct call_object *co = 0;
- GSList *l = 0;
+ CallObject *co = NULL;
+ GSList *l = NULL;
- _check_null( "objs", objs, 0);
- _check_null( "compare", compare, 0);
+ tcore_check_null_ret_err("objs", objs, NULL);
+ tcore_check_null_ret_err("compare", compare, NULL);
l = objs;
while (l) {
- co = (struct call_object*) l->data;
+ co = (CallObject *) l->data;
if (compare(co, data))
return co;
- l = g_slist_next( l );
+ l = g_slist_next(l);
}
return NULL;
}
-static GSList* _find_object_all(GSList *objs, void* data, func compare)
+static GSList *_find_object_all(GSList *objs, void *data, func compare)
{
- struct call_object *co = 0;
- GSList *l = 0;
- GSList *ret = 0;
+ CallObject *co = NULL;
+ GSList *l = NULL;
+ GSList *ret = NULL;
- _check_null( "objs", objs, 0);
- _check_null( "compare", compare, 0);
+ tcore_check_null_ret_err("objs", objs, NULL);
+ tcore_check_null_ret_err("compare", compare, NULL);
l = objs;
while (l) {
- co = (struct call_object*) l->data;
+ co = (CallObject *) l->data;
if (compare(co, data))
ret = g_slist_append(ret, co);
- l = g_slist_next( l );
+ l = g_slist_next(l);
}
return ret;
}
-static gboolean _compare_by_id(struct call_object* co, void *data)
+static gboolean _compare_by_id(CallObject *co, void *data)
{
- unsigned int *id = (unsigned int*) data;
+ unsigned int *id = (unsigned int *) data;
- _check_null( "co", co, FALSE);
- _check_null( "data", data, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("data", data, FALSE);
if (co->id == *id)
return TRUE;
return FALSE;
}
-static gboolean _compare_by_session_id(struct call_object *co, void *data)
+static gboolean _compare_by_handle(CallObject *co, void *data)
+{
+ unsigned int *handle = (unsigned int *) data;
+
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("data", data, FALSE);
+
+ if (co->handle == *handle)
+ return TRUE;
+
+ return FALSE;
+}
+
+
+static gboolean _compare_by_session_id(CallObject *co, void *data)
{
int *session_id = data;
- _check_null("co", co, FALSE);
- _check_null("data", data, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("data", data, FALSE);
if (co->session_id == *session_id)
return TRUE;
return FALSE;
}
-static gboolean _compare_by_status(struct call_object* co, void *data)
+static gboolean _compare_by_status(CallObject *co, void *data)
{
- enum tcore_call_status *ct = (enum tcore_call_status*) data;
+ enum tcore_call_status *ct = (enum tcore_call_status *) data;
- _check_null( "co", co, FALSE);
- _check_null( "data", data, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("data", data, FALSE);
if (co->status == *ct)
return TRUE;
return FALSE;
}
-static gboolean _compare_by_number(struct call_object* co, void *data)
+static gboolean _compare_by_number(CallObject *co, void *data)
{
- char *number = (char*) data;
+ char *number = (char *) data;
- _check_null( "co", co, FALSE);
- _check_null( "data", data, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("data", data, FALSE);
if (!strcmp(co->cli.number, number))
return TRUE;
static enum tcore_call_cli_mode _check_cli_mode_by_number(char *num)
{
- _check_null( "num", num, TCORE_CALL_CLI_MODE_DEFAULT);
+ tcore_check_null_ret_err("num", num, TCORE_CALL_CLI_MODE_DEFAULT);
if (!strncmp(num, "*31#", 4))
return TCORE_CALL_CLI_MODE_PRESENT;
}
-// Call Object API
-
-struct call_object *tcore_call_object_new(CoreObject *o, int id)
+/* Call Object APIs */
+CallObject *tcore_call_object_new(CoreObject *o)
{
- struct private_object_data *po = 0;
- struct call_object *co = 0;
+ struct private_object_data *po = NULL;
+ CallObject *co = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
-
- co = g_new0( struct call_object, 1 );
+ tcore_check_null_ret_err("po", po, NULL);
- if (id > 0) {
- if (!_find_object(po->cobjs, (void*) &id, (void*) _compare_by_id))
- co->id = id;
- else {
- dbg("[ error ] call object exist already. [ %d ]", id);
- g_free(co);
- return NULL;
- }
- }
- else {
- int i = 0;
+ co = g_try_malloc0(sizeof(struct call_object));
+ if (co == NULL)
+ return NULL;
- for (i = 1; i <= MAX_CALL_OBJECTS; i++) { /* 6 is MAX call count */
- if (!_find_object(po->cobjs, (void*) &i, (void*) _compare_by_id)) {
- co->id = i;
- break;
- }
- }
+ co->handle = __assign_handle(o);
- /* Free the allocated Core Object if ID is not allocated */
- if (i > MAX_CALL_OBJECTS) {
- err("[ error ] failed to assign call id");
- g_free(co);
- return NULL;
- }
+ if (INVALID_HANDLE == co->handle) {
+ err("valid handle not available. call object creation failed");
+ g_free(co);
+ return NULL;
}
+ co->id = -1;
po->cobjs = g_slist_append(po->cobjs, co);
- dbg("new call object id : [%d]", co->id);
+ dbg("new call object handle : [%d]", co->handle);
return co;
}
-gboolean tcore_call_object_free(CoreObject *o, struct call_object *co)
+gboolean tcore_call_object_free(CoreObject *o, CallObject *co)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, FALSE);
- _check_null( "po->cobjs", po->cobjs, FALSE);
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("po", po, FALSE);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
po->cobjs = g_slist_remove(po->cobjs, co);
g_free(co);
return TRUE;
}
-int tcore_call_object_total_length( CoreObject *o )
+int tcore_call_object_total_length(CoreObject *o)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, FALSE);
- _check_null( "po->cobjs", po->cobjs, FALSE);
+ tcore_check_null_ret_err("po", po, 0);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, 0);
return (int)g_slist_length(po->cobjs);
}
-struct call_object *tcore_call_object_current_on_mt_processing(CoreObject *o)
+CallObject *tcore_call_object_current_on_mt_processing(CoreObject *o)
{
struct private_object_data *po = NULL;
- struct call_object *call_obj = NULL;
- GSList *l = 0;
+ CallObject *call_obj = NULL;
+ GSList *l = NULL;
- enum tcore_call_status cs = CALL_STATUS_INCOMING;
+ enum tcore_call_status cs = TCORE_CALL_STATUS_INCOMING;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
- l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
+ l = _find_object_all(po->cobjs, (void *)&cs, (void *)_compare_by_status);
if (!l) {
- cs = CALL_STATUS_WAITING;
- l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
+ cs = TCORE_CALL_STATUS_WAITING;
+ l = _find_object_all(po->cobjs, (void *)&cs, (void *)_compare_by_status);
if (!l)
return 0;
}
- call_obj = (struct call_object*) l ->data;
+ call_obj = (CallObject *)(l->data);
g_slist_free(l);
+
return call_obj;
}
-struct call_object *tcore_call_object_current_on_mo_processing(CoreObject *o)
+CallObject *tcore_call_object_current_on_mo_processing(CoreObject *o)
{
struct private_object_data *po = NULL;
- struct call_object *call_obj = NULL;
- GSList *l = 0;
+ CallObject *call_obj = NULL;
+ GSList *l = NULL;
- enum tcore_call_status cs = CALL_STATUS_DIALING;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
- l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
+ l = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_DIALING);
if (!l) {
- cs = CALL_STATUS_ALERT;
- l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
- if (!l)
- return 0;
+ l = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_ALERT);
+ if (!l) {
+ l = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_SETUP);
+ if (!l) {
+ l = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_SETUP_PENDING);
+ if (!l)
+ return NULL;
+ }
+ }
}
- call_obj = (struct call_object*) l ->data;
+ call_obj = (CallObject *)(l->data);
g_slist_free(l);
+
return call_obj;
}
-struct call_object *tcore_call_object_find_by_id(CoreObject *o, int id)
+CallObject *tcore_call_object_find_by_id(CoreObject *o, int id)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
+
+ return _find_object(po->cobjs, (void *) &id, (void *) _compare_by_id);
+}
+
+CallObject *tcore_call_object_find_by_handle(CoreObject *o, int handle)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
+
+ return _find_object(po->cobjs, (void *) &handle, (void *) _compare_by_handle);
- return _find_object(po->cobjs, (void*) &id, (void*) _compare_by_id);
}
-struct call_object *tcore_call_object_find_by_number(CoreObject *o, char *num)
+
+CallObject *tcore_call_object_find_by_number(CoreObject *o, char *num)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
- _check_null( "num", num, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
+ tcore_check_null_ret_err("num", num, NULL);
- return _find_object(po->cobjs, (void*) num, (void*) _compare_by_number);
+ return _find_object(po->cobjs, (void *) num, (void *) _compare_by_number);
}
-GSList* tcore_call_object_find_by_status(CoreObject *o, enum tcore_call_status cs)
+GSList *tcore_call_object_find_by_status(CoreObject *o, enum tcore_call_status cs)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
- return _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
+ return _find_object_all(po->cobjs, (void *) &cs, (void *) _compare_by_status);
}
-int tcore_call_object_get_id(struct call_object *co)
+int tcore_call_object_get_id(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->id;
}
-gboolean tcore_call_object_set_type(struct call_object *co, enum tcore_call_type ct)
+gboolean tcore_call_object_set_id(CallObject *co , int call_id)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+ co->id = call_id;
+
+ return TRUE;
+}
+
+int tcore_call_object_get_handle(CallObject *co)
+{
+ tcore_check_null_ret_err("co", co, -1);
+
+ return co->handle;
+}
+
+
+gboolean tcore_call_object_set_type(CallObject *co, enum tcore_call_type ct)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->type = ct;
return TRUE;
}
-enum tcore_call_type tcore_call_object_get_type(struct call_object *co)
+enum tcore_call_type tcore_call_object_get_type(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->type;
}
-gboolean tcore_call_object_set_direction(struct call_object *co, enum tcore_call_direction cd)
+gboolean tcore_call_object_set_direction(CallObject *co, enum tcore_call_direction cd)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->direction = cd;
return TRUE;
}
-enum tcore_call_direction tcore_call_object_get_direction(struct call_object *co)
+enum tcore_call_direction tcore_call_object_get_direction(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->direction;
}
-gboolean tcore_call_object_set_status(struct call_object *co, enum tcore_call_status cs)
+gboolean tcore_call_object_set_status(CallObject *co, enum tcore_call_status cs)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->status = cs;
return TRUE;
}
-enum tcore_call_status tcore_call_object_get_status(struct call_object *co)
+enum tcore_call_status tcore_call_object_get_status(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->status;
}
-gboolean tcore_call_object_set_cli_info(struct call_object *co,
- enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
- char *num, int num_len)
+gboolean tcore_call_object_set_cli_info(CallObject *co,
+ enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
+ char *num, int num_len)
{
- char *pos = 0;
+ char *pos = NULL;
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
dbg("num : %s", num);
dbg("mode : 0x%x", mode);
co->cli.no_cli_cause = TCORE_CALL_NO_CLI_CAUSE_NONE;
co->cli.number_len = num_len ;
- co->cli.number [0] = '\0';
+ co->cli.number[0] = '\0';
return TRUE;
}
if (co->cli.mode != TCORE_CALL_CLI_MODE_DEFAULT)
pos = (num + 4);
- }
- else {
+ } else {
co->cli.mode = mode;
if (mode == TCORE_CALL_CLI_MODE_RESTRICT)
co->cli.no_cli_cause = cause;
return TRUE;
}
-int tcore_call_object_get_number(struct call_object *co, char *num)
+int tcore_call_object_get_number(CallObject *co, char *num)
{
- _check_null( "co", co, -1);
- _check_null( "num", num, -1);
+ tcore_check_null_ret_err("co", co, 0);
+ tcore_check_null_ret_err("num", num, 0);
strncpy(num, co->cli.number, MAX_CALL_NUMBER_LEN);
return co->cli.number_len;
}
-enum tcore_call_cli_mode tcore_call_object_get_cli_mode(struct call_object *co)
+enum tcore_call_cli_mode tcore_call_object_get_cli_mode(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
+
return co->cli.mode;
}
-enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(struct call_object *co)
+enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
+
return co->cli.no_cli_cause;
}
-gboolean tcore_call_object_set_cna_info(struct call_object *co, enum tcore_call_cna_mode mode, char *name, int dcs)
+gboolean tcore_call_object_set_cna_info(CallObject *co, enum tcore_call_cna_mode mode, char *name, int dcs)
{
int len;
- _check_null( "co", co, FALSE);
- _check_null( "name", name, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
+ tcore_check_null_ret_err("name", name, FALSE);
len = strlen(name);
if (len >= MAX_CALL_NAME_LEN)
return TRUE;
}
-int tcore_call_object_get_name(struct call_object *co, char *name)
+int tcore_call_object_get_name(CallObject *co, char *name)
{
- _check_null( "co", co, -1);
- _check_null( "name", name, -1);
+ tcore_check_null_ret_err("co", co, 0);
+ tcore_check_null_ret_err("name", name, 0);
strncpy(name, co->cna.name, MAX_CALL_NAME_LEN);
return co->cna.name_len;
}
-enum tcore_call_cna_mode tcore_call_object_get_cna_mode(struct call_object *co)
+enum tcore_call_cna_mode tcore_call_object_get_cna_mode(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->cna.mode;
}
-gboolean tcore_call_object_set_multiparty_state(struct call_object *co, gboolean is)
+gboolean tcore_call_object_set_multiparty_state(CallObject *co, gboolean is)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->mpty = is;
+
return TRUE;
}
-gboolean tcore_call_object_get_multiparty_state(struct call_object *co)
+gboolean tcore_call_object_get_multiparty_state(CallObject *co)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
return co->mpty;
}
-gboolean tcore_call_object_set_active_line(struct call_object *co, unsigned int line)
+gboolean tcore_call_object_set_active_line(CallObject *co, unsigned int line)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->active_line = line;
+
return TRUE;
}
-int tcore_call_object_get_active_line(struct call_object *co)
+int tcore_call_object_get_active_line(CallObject *co)
{
- _check_null( "co", co, -1);
+ tcore_check_null_ret_err("co", co, -1);
return co->active_line;
}
-gboolean tcore_call_object_set_is_volte_call(struct call_object *co, gboolean flag)
+gboolean tcore_call_object_set_is_volte_call(CallObject *co, gboolean flag)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->is_volte_call = flag;
+
return TRUE;
}
-gboolean tcore_call_object_get_is_volte_call(struct call_object *co)
+gboolean tcore_call_object_get_is_volte_call(CallObject *co)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
return co->is_volte_call;
}
-gboolean tcore_call_object_set_session_id(struct call_object *co, int session_id)
+gboolean tcore_call_object_set_session_id(CallObject *co, int session_id)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->session_id = session_id;
+
return TRUE;
}
-int tcore_call_object_get_session_id(struct call_object *co)
+int tcore_call_object_get_session_id(CallObject *co)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
return co->session_id;
}
-gboolean tcore_call_object_set_conf_call_session_id(struct call_object *co, int session_id)
+gboolean tcore_call_object_set_conf_call_session_id(CallObject *co, int session_id)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->conf_call_session_id = session_id;
+
return TRUE;
}
-gboolean tcore_call_object_get_conf_call_session_id(struct call_object *co)
+gboolean tcore_call_object_get_conf_call_session_id(CallObject *co)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
return co->conf_call_session_id;
}
-gboolean tcore_call_object_set_early_media(struct call_object *co, gboolean flag)
+gboolean tcore_call_object_set_early_media(CallObject *co, gboolean flag)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
co->early_media = flag;
+
return TRUE;
}
-gboolean tcore_call_object_get_early_media(struct call_object *co)
+gboolean tcore_call_object_get_early_media(CallObject *co)
{
- _check_null( "co", co, FALSE);
+ tcore_check_null_ret_err("co", co, FALSE);
return co->early_media;
}
-struct call_object *tcore_call_object_find_by_session_id(CoreObject *o, int session_id)
+CallObject *tcore_call_object_find_by_session_id(CoreObject *o, int session_id)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, 0);
- _check_null( "po->cobjs", po->cobjs, 0);
+ tcore_check_null_ret_err("po", po, NULL);
+ tcore_check_null_ret_err("po->cobjs", po->cobjs, NULL);
return _find_object(po->cobjs, &session_id, _compare_by_session_id);
}
gboolean tcore_call_object_check_cs_call_existence(CoreObject *o)
{
struct private_object_data *po = NULL;
- struct call_object *call_obj = NULL;
+ CallObject *call_obj = NULL;
GSList *call_list = NULL;
po = tcore_object_ref_object(o);
- _check_null("po", po, FALSE);
+ tcore_check_null_ret_err("po", po, FALSE);
call_list = po->cobjs;
while (call_list) {
call_obj = call_list->data;
if (call_obj->is_volte_call == FALSE)
return TRUE;
+
call_list = g_slist_next(call_list);
}
+
return FALSE;
}
GSList *tcore_call_object_get_all_session_ids(CoreObject *o)
{
struct private_object_data *po = NULL;
- struct call_object *call_obj = NULL;
+ CallObject *call_obj = NULL;
GSList *call_list = NULL;
GSList *session_ids = NULL;
po = tcore_object_ref_object(o);
- _check_null("po", po, FALSE);
+ tcore_check_null_ret_err("po", po, NULL);
call_list = po->cobjs;
while (call_list) {
return session_ids;
}
-TReturn tcore_call_control_answer_hold_and_accept(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+gboolean tcore_call_object_set_is_release_pending(CallObject *co, gboolean flag)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+
+ co->is_release_pending = flag;
+
+ return TRUE;
+
+}
+
+gboolean tcore_call_object_get_is_release_pending(CallObject *co)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+
+ return co->is_release_pending;
+}
+
+gboolean tcore_call_object_set_silent_redial_reason(CallObject *co, enum tcore_call_silent_redial_reason reason)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+
+ co->redial_reason = reason;
+
+ return TRUE;
+
+}
+enum tcore_call_silent_redial_reason tcore_call_object_get_silent_redial_reason(CallObject *co)
+{
+ tcore_check_null_ret_err("co", co, -1);
+
+ return co->redial_reason;
+}
+
+TReturn tcore_call_control_answer_hold_and_accept(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->answer_hold_and_accept", po->cops->answer_hold_and_accept, TCORE_RETURN_ENOSYS);
return po->cops->answer_hold_and_accept(o, ur, cb, user_data);
}
-TReturn tcore_call_control_answer_replace(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_answer_replace(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->answer_replace", po->cops->answer_replace, TCORE_RETURN_ENOSYS);
return po->cops->answer_replace(o, ur, cb, user_data);
}
-TReturn tcore_call_control_answer_reject(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_answer_reject(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->answer_reject", po->cops->answer_reject, TCORE_RETURN_ENOSYS);
return po->cops->answer_reject(o, ur, cb, user_data);
}
-TReturn tcore_call_control_end_specific(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb,
- void* user_data)
+TReturn tcore_call_control_end_specific(CoreObject *o, UserRequest* ur, const int id, ConfirmCallback cb,
+ void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->end_specific", po->cops->end_specific, TCORE_RETURN_ENOSYS);
return po->cops->end_specific(o, ur, id, cb, user_data);
}
-TReturn tcore_call_control_end_all_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_end_all_active(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->end_all_active", po->cops->end_all_active, TCORE_RETURN_ENOSYS);
return po->cops->end_all_active(o, ur, cb, user_data);
}
-TReturn tcore_call_control_end_all_held(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_end_all_held(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->end_all_held", po->cops->end_all_held, TCORE_RETURN_ENOSYS);
return po->cops->end_all_held(o, ur, cb, user_data);
}
-TReturn tcore_call_control_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_active(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->active", po->cops->active, TCORE_RETURN_ENOSYS);
return po->cops->active(o, ur, cb, user_data);
}
-TReturn tcore_call_control_hold(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_hold(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->hold", po->cops->hold, TCORE_RETURN_ENOSYS);
return po->cops->hold(o, ur, cb, user_data);
}
-TReturn tcore_call_control_swap(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_swap(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->swap", po->cops->swap, TCORE_RETURN_ENOSYS);
return po->cops->swap(o, ur, cb, user_data);
}
-TReturn tcore_call_control_join(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_join(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->join", po->cops->join, TCORE_RETURN_ENOSYS);
return po->cops->join(o, ur, cb, user_data);
}
-TReturn tcore_call_control_split(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_split(CoreObject *o, UserRequest* ur, const int id, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->split", po->cops->split, TCORE_RETURN_ENOSYS);
return po->cops->split(o, ur, id, cb, user_data);
}
-TReturn tcore_call_control_transfer(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
+TReturn tcore_call_control_transfer(CoreObject *o, UserRequest* ur, ConfirmCallback cb, void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->transfer", po->cops->transfer, TCORE_RETURN_ENOSYS);
return po->cops->transfer(o, ur, cb, user_data);
}
-TReturn tcore_call_control_deflect(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb,
- void* user_data)
+TReturn tcore_call_control_deflect(CoreObject *o, UserRequest* ur, const char *number, ConfirmCallback cb,
+ void *user_data)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops", po->cops, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po->cops->deflect", po->cops->deflect, TCORE_RETURN_ENOSYS);
return po->cops->deflect(o, ur, number, cb, user_data);
}
-void tcore_call_control_set_operations(CoreObject *o, struct tcore_call_control_operations *ops)
+void tcore_call_control_set_operations(CoreObject *o, struct tcore_call_control_operations *cops)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
po = tcore_object_ref_object(o);
- if (!po)
+ if (!po) {
+ err("po is NULL");
return;
+ }
- po->cops = ops;
+ po->cops = cops;
}
-void tcore_call_information_mo_col(CoreObject *o, char* number)
+void tcore_call_information_mo_col(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, );
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_col", po->iops->mo_call_col);
po->iops->mo_call_col(o, number);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po, );
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_waiting", po->iops->mo_call_waiting);
po->iops->mo_call_waiting(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po, );
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_cug", po->iops->mo_call_cug);
po->iops->mo_call_cug(o, cug_index);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_forwarded", po->iops->mo_call_forwarded);
po->iops->mo_call_forwarded(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_barred_incoming", po->iops->mo_call_barred_incoming);
po->iops->mo_call_barred_incoming(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_barred_outgoing", po->iops->mo_call_barred_outgoing);
po->iops->mo_call_barred_outgoing(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_deflected", po->iops->mo_call_deflected);
po->iops->mo_call_deflected(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_clir_suppression_reject", po->iops->mo_call_clir_suppression_reject);
po->iops->mo_call_clir_suppression_reject(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_cfu", po->iops->mo_call_cfu);
po->iops->mo_call_cfu(o);
}
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mo_call_cfc", po->iops->mo_call_cfc);
po->iops->mo_call_cfc(o);
}
-void tcore_call_information_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char* number)
+void tcore_call_information_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po, );
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_cli", po->iops->mt_call_cli);
po->iops->mt_call_cli(o, mode, number);
}
-void tcore_call_information_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs)
+void tcore_call_information_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char *name, int dcs)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_cna", po->iops->mt_call_cna);
po->iops->mt_call_cna(o, mode, name, dcs);
}
-void tcore_call_information_mt_forwarded_call(CoreObject *o, char* number)
+void tcore_call_information_mt_forwarded_call(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_forwarded_call", po->iops->mt_call_forwarded_call);
po->iops->mt_call_forwarded_call(o, number);
}
-void tcore_call_information_mt_cug_call(CoreObject *o, int cug_index, char* number)
+void tcore_call_information_mt_cug_call(CoreObject *o, int cug_index, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_cug_call", po->iops->mt_call_cug_call);
po->iops->mt_call_cug_call(o, cug_index, number);
}
-void tcore_call_information_mt_deflected_call(CoreObject *o, char* number)
+void tcore_call_information_mt_deflected_call(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_deflected_call", po->iops->mt_call_deflected_call);
po->iops->mt_call_deflected_call(o, number);
}
-void tcore_call_information_mt_transfered(CoreObject *o, char* number)
+void tcore_call_information_mt_transfered(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->mt_call_transfered", po->iops->mt_call_transfered);
po->iops->mt_call_transfered(o, number);
}
-void tcore_call_information_held(CoreObject *o, char* number)
+void tcore_call_information_held(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_held", po->iops->call_held);
po->iops->call_held(o, number);
}
-void tcore_call_information_active(CoreObject *o, char* number)
+void tcore_call_information_active(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_active", po->iops->call_active);
po->iops->call_active(o, number);
}
-void tcore_call_information_joined(CoreObject *o, char* number)
+void tcore_call_information_joined(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_joined", po->iops->call_joined);
po->iops->call_joined(o, number);
}
-void tcore_call_information_released_on_hold(CoreObject *o, char* number)
+void tcore_call_information_released_on_hold(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_released_on_hold", po->iops->call_released_on_hold);
po->iops->call_released_on_hold(o, number);
}
-void tcore_call_information_transfer_alert(CoreObject *o, char* number)
+void tcore_call_information_transfer_alert(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_transfer_alert", po->iops->call_transfer_alert);
po->iops->call_transfer_alert(o, number);
}
-void tcore_call_information_transfered(CoreObject *o, char* number)
+void tcore_call_information_transfered(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_transfered", po->iops->call_transfered);
po->iops->call_transfered(o, number);
}
-void tcore_call_information_cf_check_ss_message(CoreObject *o, char* number)
+void tcore_call_information_cf_check_ss_message(CoreObject *o, char *number)
{
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- _check_null( "po", po,);
- _check_null( "po->iops", po->iops,);
+ tcore_check_null_ret("po", po);
+ tcore_check_null_ret("po->iops", po->iops);
+ tcore_check_null_ret("po->iops->call_cf_check_message", po->iops->call_cf_check_message);
po->iops->call_cf_check_message(o, number);
}
-void tcore_call_information_set_operations(CoreObject *o, struct tcore_call_information_operations *ops)
+void tcore_call_information_set_operations(CoreObject *o, struct tcore_call_information_operations *iops)
{
struct private_object_data *po = NULL;
if (!po)
return;
- po->iops = ops;
+ po->iops = iops;
}
CoreObject *tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal)
if (!o)
return NULL;
- po = g_try_new0(struct private_object_data, 1);
+ po = g_try_malloc0(sizeof(struct private_object_data));
if (po == NULL) {
tcore_object_free(o);
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_CALL);
tcore_object_link_object(o, po);
tcore_object_free(o);
}
-void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops)
+void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ /* set ops according to ops_type */
+ po->ops[ops_type] = ops;
}
union tcore_ip4_type dns_primary_v4;
union tcore_ip4_type dns_secondary_v4;
- /*IPv6 will be supported*/
- char* ip_v6;
- char* gateway_v6;
- char* dns_primary_v6;
- char* dns_secondary_v6;
+ /* IPv6 will be supported */
+ char *ip_v6;
+ char *gateway_v6;
+ char *dns_primary_v6;
+ char *dns_secondary_v6;
pcscf_addr *pcscf_ipv4;
pcscf_addr *pcscf_ipv6;
char devname[16];
/* Dedicated bearer information */
- unsigned char dedicated_bearer_cnt;
- struct dedicated_bearer_info dedicated_bearer[MAX_NUM_DEDICATED_BEARER];
+ struct dedicated_bearer_info dedicated_bearer;
};
static void _free_hook(CoreObject *o)
po->apn = NULL;
}
- if (apn) {
+ if (apn)
po->apn = g_strdup(apn);
- }
return TCORE_RETURN_SUCCESS;
}
po->addr = NULL;
}
- if (addr) {
+ if (addr)
po->addr = g_strdup(addr);
- }
return TCORE_RETURN_SUCCESS;
}
po->username = NULL;
}
- if (username) {
+ if (username)
po->username = g_strdup(username);
- }
return TCORE_RETURN_SUCCESS;
}
po->password = NULL;
}
- if (password) {
+ if (password)
po->password = g_strdup(password);
- }
return TCORE_RETURN_SUCCESS;
}
po->dns1 = NULL;
}
- if (dns) {
+ if (dns)
po->dns1 = g_strdup(dns);
- }
return TCORE_RETURN_SUCCESS;
}
po->dns_primary_v6 = NULL;
}
- if (dns) {
+ if (dns)
po->dns_primary_v6 = g_strdup(dns);
- }
return TCORE_RETURN_SUCCESS;
}
po->dns2 = NULL;
}
- if (dns) {
+ if (dns)
po->dns2 = g_strdup(dns);
- }
return TCORE_RETURN_SUCCESS;
}
po->dns_secondary_v6 = NULL;
}
- if (dns) {
+ if (dns)
po->dns_secondary_v6 = g_strdup(dns);
- }
return TCORE_RETURN_SUCCESS;
}
po->apn = NULL;
}
- if (proxy) {
+ if (proxy)
po->proxy = g_strdup(proxy);
- }
return TCORE_RETURN_SUCCESS;
}
po->mmsurl = NULL;
}
- if (mmsurl) {
+ if (mmsurl)
po->mmsurl = g_strdup(mmsurl);
- }
return TCORE_RETURN_SUCCESS;
}
po->profile_name = NULL;
}
- if (profile_name) {
+ if (profile_name)
po->profile_name = g_strdup(profile_name);
- }
return TCORE_RETURN_SUCCESS;
}
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
po = tcore_object_ref_object(o);
- if (!po)
- return TCORE_RETURN_EINVAL;
- if (!devinfo)
+
+ if (!po || !devinfo)
return TCORE_RETURN_EINVAL;
/* Free context resource if it was already allocated */
memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
- po->pcscf_ipv4 = g_malloc0(sizeof(pcscf_addr));
- po->pcscf_ipv4->count = devinfo->pcscf_ipv4_count;
- if (po->pcscf_ipv4->count > 0) {
- unsigned int i;
- po->pcscf_ipv4->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
- for (i = 0; i < po->pcscf_ipv4->count; i++) {
- po->pcscf_ipv4->addr[i] = g_strdup(devinfo->pcscf_ipv4[i]);
+ po->pcscf_ipv4 = g_try_malloc0(sizeof(pcscf_addr));
+ if (po->pcscf_ipv4) {
+ po->pcscf_ipv4->count = devinfo->pcscf_ipv4_count;
+ if (po->pcscf_ipv4->count > 0) {
+ unsigned int i;
+ po->pcscf_ipv4->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
+ if ((po->pcscf_ipv4->addr) && (devinfo->pcscf_ipv4))
+ for (i = 0; i < po->pcscf_ipv4->count; i++)
+ po->pcscf_ipv4->addr[i] = g_strdup(devinfo->pcscf_ipv4[i]);
}
}
- po->pcscf_ipv6 = g_malloc0(sizeof(pcscf_addr));
- po->pcscf_ipv6->count = devinfo->pcscf_ipv6_count;
- if (po->pcscf_ipv6->count > 0) {
- unsigned int i;
- po->pcscf_ipv6->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
- for (i = 0; i < po->pcscf_ipv6->count; i++) {
- po->pcscf_ipv6->addr[i] = g_strdup(devinfo->pcscf_ipv6[i]);
+ po->pcscf_ipv6 = g_try_malloc0(sizeof(pcscf_addr));
+ if (po->pcscf_ipv6) {
+ po->pcscf_ipv6->count = devinfo->pcscf_ipv6_count;
+ if (po->pcscf_ipv6->count > 0) {
+ unsigned int i;
+ po->pcscf_ipv6->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
+ if ((po->pcscf_ipv6->addr) && (devinfo->pcscf_ipv6))
+ for (i = 0; i < po->pcscf_ipv6->count; i++)
+ po->pcscf_ipv6->addr[i] = g_strdup(devinfo->pcscf_ipv6[i]);
}
}
if (!po)
return TCORE_RETURN_EINVAL;
- if(po->ip_v6) g_free(po->ip_v6);
- po->ip_v6 = NULL;
+ if (po->ip_v6) {
+ g_free(po->ip_v6);
+ po->ip_v6 = NULL;
+ }
- if(po->dns_primary_v6) g_free(po->dns_primary_v6);
- po->dns_primary_v6 = NULL;
+ if (po->dns_primary_v6) {
+ g_free(po->dns_primary_v6);
+ po->dns_primary_v6 = NULL;
+ }
- if(po->dns_secondary_v6) g_free(po->dns_secondary_v6);
- po->dns_secondary_v6 = NULL;
+ if (po->dns_secondary_v6) {
+ g_free(po->dns_secondary_v6);
+ po->dns_secondary_v6 = NULL;
+ }
- if(po->gateway_v6) g_free(po->gateway_v6);
- po->gateway_v6 = NULL;
+ if (po->gateway_v6) {
+ g_free(po->gateway_v6);
+ po->gateway_v6 = NULL;
+ }
if (po->pcscf_ipv4) {
for (i = 0; i < po->pcscf_ipv4->count; i++)
return TCORE_RETURN_SUCCESS;
}
+TReturn tcore_context_set_bearer_info(CoreObject *o, struct tnoti_ps_dedicated_bearer_info *bearer_info)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (!bearer_info)
+ return TCORE_RETURN_EINVAL;
+
+ if (bearer_info->dedicated_bearer.num_dedicated_bearer > 0)
+ memcpy(&(po->dedicated_bearer), &(bearer_info->dedicated_bearer), sizeof(struct dedicated_bearer_info));
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_get_bearer_info(CoreObject *o, struct dedicated_bearer_info *bearer_info)
+{
+ struct private_object_data *po = NULL;
+ guchar count = 0;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (!bearer_info)
+ return TCORE_RETURN_EINVAL;
+
+ count = po->dedicated_bearer.num_dedicated_bearer;
+ if (count > MAX_NUM_DEDICATED_BEARER)
+ return TCORE_RETURN_EINVAL;
+
+ if (count > 0) {
+ bearer_info->num_dedicated_bearer = count;
+ bearer_info->secondary_context_id = po->dedicated_bearer.secondary_context_id;
+ memcpy(bearer_info->qos, po->dedicated_bearer.qos, count*sizeof(struct qos_parameter));
+ }
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_reset_bearer_info(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dedicated_bearer.num_dedicated_bearer > 0)
+ memset(&(po->dedicated_bearer), 0, sizeof(struct dedicated_bearer_info));
+
+ return TCORE_RETURN_SUCCESS;
+}
+
void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
{
struct private_object_data *d_po = NULL;
memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
}
-char* tcore_context_get_ipv4_addr(CoreObject *o)
+char *tcore_context_get_ipv4_addr(CoreObject *o)
{
struct private_object_data *po = NULL;
return tcore_util_get_string_by_ip4type(po->ip_v4);
}
-char* tcore_context_get_ipv4_dns1(CoreObject *o)
+char *tcore_context_get_ipv4_dns1(CoreObject *o)
{
struct private_object_data *po = NULL;
return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
}
-char* tcore_context_get_ipv4_dns2(CoreObject *o)
+char *tcore_context_get_ipv4_dns2(CoreObject *o)
{
struct private_object_data *po = NULL;
return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
}
-char* tcore_context_get_ipv4_gw(CoreObject *o)
+char *tcore_context_get_ipv4_gw(CoreObject *o)
{
struct private_object_data *po = NULL;
return tcore_util_get_string_by_ip4type(po->gateway_v4);
}
-char* tcore_context_get_ipv4_devname(CoreObject *o)
+char *tcore_context_get_ipv4_devname(CoreObject *o)
{
struct private_object_data *po = NULL;
return g_strdup(po->devname);
}
-char* tcore_context_get_ipv6_addr(CoreObject *o)
+char *tcore_context_get_ipv6_addr(CoreObject *o)
{
struct private_object_data *po = NULL;
return g_strdup(po->ip_v6);
}
-char* tcore_context_get_ipv6_dns1(CoreObject *o)
+char *tcore_context_get_ipv6_dns1(CoreObject *o)
{
struct private_object_data *po = NULL;
return g_strdup(po->dns_primary_v6);
}
-char* tcore_context_get_ipv6_dns2(CoreObject *o)
+char *tcore_context_get_ipv6_dns2(CoreObject *o)
{
struct private_object_data *po = NULL;
return g_strdup(po->dns_secondary_v6);
}
-char* tcore_context_get_ipv6_gw(CoreObject *o)
+char *tcore_context_get_ipv6_gw(CoreObject *o)
{
struct private_object_data *po = NULL;
if (!po->pcscf_ipv4)
return NULL;
- pcscf_tmp = g_malloc0(sizeof(pcscf_addr));
+ pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
+ if (!pcscf_tmp)
+ return NULL;
+
pcscf_tmp->count = po->pcscf_ipv4->count;
if (pcscf_tmp->count > 0) {
unsigned int i;
- pcscf_tmp->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
- for (i = 0; i < po->pcscf_ipv4->count; i++) {
- pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv4->addr[i]);
+ pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
+ if (!pcscf_tmp->addr) {
+ g_free(pcscf_tmp);
+ return NULL;
}
+
+ for (i = 0; i < po->pcscf_ipv4->count; i++)
+ pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv4->addr[i]);
}
return pcscf_tmp;
if (!po->pcscf_ipv6)
return NULL;
- pcscf_tmp = g_malloc0(sizeof(pcscf_addr));
+ pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
+ if (!pcscf_tmp)
+ return NULL;
+
pcscf_tmp->count = po->pcscf_ipv6->count;
if (pcscf_tmp->count > 0) {
unsigned int i;
- pcscf_tmp->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
- for (i = 0; i < po->pcscf_ipv6->count; i++) {
- pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv6->addr[i]);
+ pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
+ if (!pcscf_tmp->addr) {
+ g_free(pcscf_tmp);
+ return NULL;
}
+
+ for (i = 0; i < po->pcscf_ipv6->count; i++)
+ pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv6->addr[i]);
}
return pcscf_tmp;
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "user_request.h"
#include "co_gps.h"
struct private_object_data {
- struct tcore_gps_operations *ops;
+ struct tcore_gps_operations *ops[TCORE_OPS_TYPE_MAX];
};
static void _free_hook(CoreObject *o)
po = tcore_object_ref_object(o);
if (po) {
- free(po);
+ g_free(po);
tcore_object_link_object(o, NULL);
}
}
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_gps_operations *ops = NULL;
- if (!o || !ur)
- return TCORE_RETURN_EINVAL;
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_GPS, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_GPS_CONFIRM_MEASURE_POS:
- dbg("TREQ_GPS_CONFIRM_MEASURE_POS");
- if (!po->ops->confirm_measure_pos)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_GPS_CONFIRM_MEASURE_POS:
+ dbg("TREQ_GPS_CONFIRM_MEASURE_POS");
+ tcore_check_null_ret_err("ops->confirm_measure_pos",
+ ops->confirm_measure_pos, TCORE_RETURN_ENOSYS);
- return po->ops->confirm_measure_pos(o, ur);
+ return ops->confirm_measure_pos(o, ur);
- case TREQ_GPS_SET_FREQUENCY_AIDING:
- dbg("TREQ_GPS_SET_FREQUENCY_AIDING");
- if (!po->ops->set_frequency_aiding)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_GPS_SET_FREQUENCY_AIDING:
+ dbg("TREQ_GPS_SET_FREQUENCY_AIDING");
+ tcore_check_null_ret_err("ops->set_frequency_aiding",
+ ops->set_frequency_aiding, TCORE_RETURN_ENOSYS);
- return po->ops->set_frequency_aiding(o, ur);
+ return ops->set_frequency_aiding(o, ur);
- case TREQ_ENABLE_SMART_ASSISTANT:
- dbg("TREQ_ENABLE_SMART_ASSISTANT");
- if (!po->ops->enable_smart_assistant)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_ENABLE_SMART_ASSISTANT:
+ dbg("TREQ_ENABLE_SMART_ASSISTANT");
+ tcore_check_null_ret_err("ops->enable_smart_assistant",
+ ops->enable_smart_assistant, TCORE_RETURN_ENOSYS);
- return po->ops->enable_smart_assistant(o, ur);
+ return ops->enable_smart_assistant(o, ur);
- case TREQ_DISABLE_SMART_ASSISTANT:
- dbg("TREQ_DISABLE_SMART_ASSISTANT");
- if (!po->ops->disable_smart_assistant)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_DISABLE_SMART_ASSISTANT:
+ dbg("TREQ_DISABLE_SMART_ASSISTANT");
+ tcore_check_null_ret_err("ops->disable_smart_assistant",
+ ops->disable_smart_assistant, TCORE_RETURN_ENOSYS);
- return po->ops->disable_smart_assistant(o, ur);
+ return ops->disable_smart_assistant(o, ur);
- case TREQ_SYNC_SMART_ASSISTANT_AREA_LIST:
- dbg("TREQ_SYNC_SMART_ASSISTANT_AREA_LIST");
- if (!po->ops->sync_smart_assistant_area_list)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SYNC_SMART_ASSISTANT_AREA_LIST:
+ dbg("TREQ_SYNC_SMART_ASSISTANT_AREA_LIST");
+ tcore_check_null_ret_err("ops->sync_smart_assistant_area_list",
+ ops->sync_smart_assistant_area_list, TCORE_RETURN_ENOSYS);
- return po->ops->sync_smart_assistant_area_list(o, ur);
+ return ops->sync_smart_assistant_area_list(o, ur);
- case TREQ_DEL_SMART_ASSISTANT_AREA_LIST:
- dbg("TREQ_DEL_SMART_ASSISTANT_AREA_LIST");
- if (!po->ops->del_smart_assistant_area_list)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_DEL_SMART_ASSISTANT_AREA_LIST:
+ dbg("TREQ_DEL_SMART_ASSISTANT_AREA_LIST");
+ tcore_check_null_ret_err("ops->del_smart_assistant_area_list",
+ ops->del_smart_assistant_area_list, TCORE_RETURN_ENOSYS);
- return po->ops->del_smart_assistant_area_list(o, ur);
+ return ops->del_smart_assistant_area_list(o, ur);
- case TREQ_ADD_SMART_ASSISTANT_AREA:
- dbg("TREQ_ADD_SMART_ASSISTANT_AREA");
- if (!po->ops->add_smart_assistant_area)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_ADD_SMART_ASSISTANT_AREA:
+ dbg("TREQ_ADD_SMART_ASSISTANT_AREA");
+ tcore_check_null_ret_err("ops->add_smart_assistant_area",
+ ops->add_smart_assistant_area, TCORE_RETURN_ENOSYS);
- return po->ops->add_smart_assistant_area(o, ur);
+ return ops->add_smart_assistant_area(o, ur);
- case TREQ_MODIFY_SMART_ASSISTANT_AREA:
- dbg("TREQ_MODIFY_SMART_ASSISTANT_AREA");
- if (!po->ops->modify_smart_assistant_area)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODIFY_SMART_ASSISTANT_AREA:
+ dbg("TREQ_MODIFY_SMART_ASSISTANT_AREA");
+ tcore_check_null_ret_err("ops->modify_smart_assistant_area",
+ ops->modify_smart_assistant_area, TCORE_RETURN_ENOSYS);
- return po->ops->modify_smart_assistant_area(o, ur);
+ return ops->modify_smart_assistant_area(o, ur);
- case TREQ_SET_SMART_ASSISTANT_INFO:
- dbg("TREQ_SET_SMART_ASSISTANT_INFO");
- if (!po->ops->set_smart_assistant_info)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SET_SMART_ASSISTANT_INFO:
+ dbg("TREQ_SET_SMART_ASSISTANT_INFO");
+ tcore_check_null_ret_err("ops->set_smart_assistant_info",
+ ops->set_smart_assistant_info, TCORE_RETURN_ENOSYS);
- return po->ops->set_smart_assistant_info(o, ur);
+ return ops->set_smart_assistant_info(o, ur);
- default:
- dbg("not supported cmd");
- break;
+ default:
+ dbg("not supported cmd");
+ break;
}
+
return TCORE_RETURN_SUCCESS;
}
if (!o)
return NULL;
- po = calloc(1, sizeof(struct private_object_data));
+ po = g_try_malloc0(sizeof(struct private_object_data));
if (!po) {
tcore_object_free(o);
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_GPS);
tcore_object_link_object(o, po);
tcore_object_free(o);
}
-void tcore_gps_set_ops(CoreObject *o, struct tcore_gps_operations *ops)
+void tcore_gps_set_ops(CoreObject *o,
+ struct tcore_gps_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_GPS);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ /* set ops according to ops_type */
+ po->ops[ops_type] = ops;
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "user_request.h"
#include "co_modem.h"
#include "hal.h"
struct private_object_data {
- struct tcore_modem_operations *ops;
+ struct tcore_modem_operations *ops[TCORE_OPS_TYPE_MAX];
gboolean flight_mode;
gboolean powered;
}
}
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_modem_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_MODEM_POWER_ON:
- if (!po->ops->power_on)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_POWER_ON:
+ tcore_check_null_ret_err("ops->power_on",
+ ops->power_on, TCORE_RETURN_ENOSYS);
- return po->ops->power_on(o, ur);
- break;
+ return ops->power_on(o, ur);
- case TREQ_MODEM_POWER_OFF:
- if (!po->ops->power_off)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_POWER_OFF:
+ tcore_check_null_ret_err("ops->power_off",
+ ops->power_off, TCORE_RETURN_ENOSYS);
- return po->ops->power_off(o, ur);
- break;
+ return ops->power_off(o, ur);
- case TREQ_MODEM_POWER_RESET:
- if (!po->ops->power_reset)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_POWER_RESET:
+ tcore_check_null_ret_err("ops->power_reset",
+ ops->power_reset, TCORE_RETURN_ENOSYS);
- return po->ops->power_reset(o, ur);
- break;
+ return ops->power_reset(o, ur);
- case TREQ_MODEM_POWER_LOW:
- if (!po->ops->power_low)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_POWER_LOW:
+ tcore_check_null_ret_err("ops->power_low",
+ ops->power_low, TCORE_RETURN_ENOSYS);
- return po->ops->power_low(o, ur);
- break;
+ return ops->power_low(o, ur);
- case TREQ_MODEM_SET_FLIGHTMODE:
- if (!po->ops->set_flight_mode)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_SET_FLIGHTMODE:
+ tcore_check_null_ret_err("ops->set_flight_mode",
+ ops->set_flight_mode, TCORE_RETURN_ENOSYS);
- return po->ops->set_flight_mode(o, ur);
- break;
+ return ops->set_flight_mode(o, ur);
- case TREQ_MODEM_GET_IMEI:
- if (!po->ops->get_imei)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_GET_IMEI:
+ tcore_check_null_ret_err("ops->get_imei",
+ ops->get_imei, TCORE_RETURN_ENOSYS);
- return po->ops->get_imei(o, ur);
- break;
+ return ops->get_imei(o, ur);
- case TREQ_MODEM_GET_VERSION:
- if (!po->ops->get_version)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_GET_VERSION:
+ tcore_check_null_ret_err("ops->get_version",
+ ops->get_version, TCORE_RETURN_ENOSYS);
- return po->ops->get_version(o, ur);
- break;
+ return ops->get_version(o, ur);
- case TREQ_MODEM_GET_SN:
- if (!po->ops->get_sn)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_GET_SN:
+ tcore_check_null_ret_err("ops->get_sn",
+ ops->get_sn, TCORE_RETURN_ENOSYS);
- return po->ops->get_sn(o, ur);
- break;
+ return ops->get_sn(o, ur);
- case TREQ_MODEM_SET_DUN_PIN_CONTROL:
- if (!po->ops->dun_pin_ctrl)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_SET_DUN_PIN_CONTROL:
+ tcore_check_null_ret_err("ops->dun_pin_ctrl",
+ ops->dun_pin_ctrl, TCORE_RETURN_ENOSYS);
- return po->ops->dun_pin_ctrl(o, ur);
- break;
+ return ops->dun_pin_ctrl(o, ur);
- case TREQ_MODEM_GET_FLIGHTMODE:
- if (!po->ops->get_flight_mode)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_MODEM_GET_FLIGHTMODE:
+ tcore_check_null_ret_err("ops->get_flight_mode",
+ ops->get_flight_mode, TCORE_RETURN_ENOSYS);
- return po->ops->get_flight_mode(o, ur);
- break;
+ return ops->get_flight_mode(o, ur);
- default:
- return TCORE_RETURN_EINVAL;
+ case TREQ_MODEM_GET_DEVICE_INFO:
+ tcore_check_null_ret_err("ops->get_device_info",
+ ops->get_device_info, TCORE_RETURN_ENOSYS);
+
+ return ops->get_device_info(o, ur);
+
+ default:
+ return TCORE_RETURN_EINVAL;
}
return TCORE_RETURN_SUCCESS;
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_MODEM);
tcore_object_link_object(o, po);
tcore_object_free(o);
}
-void tcore_modem_set_ops(CoreObject *o, struct tcore_modem_operations *ops)
+void tcore_modem_set_ops(CoreObject *o, struct tcore_modem_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_MODEM);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
TReturn tcore_modem_set_flight_mode_state(CoreObject *o, gboolean flag)
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
+#include "server.h"
#include "user_request.h"
#include "co_network.h"
+#include "storage.h"
struct private_object_data {
- struct tcore_network_operations *ops;
+ struct tcore_network_operations *ops[TCORE_OPS_TYPE_MAX];
enum telephony_network_service_type service_type;
enum telephony_network_access_technology act;
unsigned int lac;
unsigned int rac;
unsigned int cell_id;
- gboolean gsm_dtm_support; // DTM (Dual Transfer Mode)
+ gboolean gsm_dtm_support; /* DTM (Dual Transfer Mode) */
char *network_name_short;
char *network_name_full;
char *network_name_spn;
enum tcore_network_name_priority network_name_priority;
GHashTable *operator_info_hash;
+ struct tel_network_ims_registration_info ims_reg_info; /* IMS specific */
+ gboolean ims_voice_status;
+ enum telephony_network_ecc_rat_search_status rat_search_status;
+ enum telephony_network_access_technology ecc_rat;
};
-static TReturn _dispatcher(CoreObject *co, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *co, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(co);
+ struct tcore_network_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_NETWORK_SEARCH:
- if (!po->ops->search)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_NETWORK_SEARCH:
+ tcore_check_null_ret_err("ops->search",
+ ops->search, TCORE_RETURN_ENOSYS);
+
+ return ops->search(co, ur);
- return po->ops->search(co, ur);
+ case TREQ_NETWORK_SET_PLMN_SELECTION_MODE:
+ tcore_check_null_ret_err("ops->set_plmn_selection_mode",
+ ops->set_plmn_selection_mode, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_PLMN_SELECTION_MODE:
- if (!po->ops->set_plmn_selection_mode)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_plmn_selection_mode(co, ur);
- return po->ops->set_plmn_selection_mode(co, ur);
+ case TREQ_NETWORK_GET_PLMN_SELECTION_MODE:
+ tcore_check_null_ret_err("ops->get_plmn_selection_mode",
+ ops->get_plmn_selection_mode, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_PLMN_SELECTION_MODE:
- if (!po->ops->get_plmn_selection_mode)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_plmn_selection_mode(co, ur);
- return po->ops->get_plmn_selection_mode(co, ur);
+ case TREQ_NETWORK_SET_SERVICE_DOMAIN:
+ tcore_check_null_ret_err("ops->set_service_domain",
+ ops->set_service_domain, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_SERVICE_DOMAIN:
- if (!po->ops->set_service_domain)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_service_domain(co, ur);
- return po->ops->set_service_domain(co, ur);
+ case TREQ_NETWORK_GET_SERVICE_DOMAIN:
+ tcore_check_null_ret_err("ops->get_service_domain",
+ ops->get_service_domain, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_SERVICE_DOMAIN:
- if (!po->ops->get_service_domain)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_service_domain(co, ur);
- return po->ops->get_service_domain(co, ur);
+ case TREQ_NETWORK_SET_BAND:
+ tcore_check_null_ret_err("ops->set_band",
+ ops->set_band, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_BAND:
- if (!po->ops->set_band)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_band(co, ur);
- return po->ops->set_band(co, ur);
+ case TREQ_NETWORK_GET_BAND:
+ tcore_check_null_ret_err("ops->get_band",
+ ops->get_band, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_BAND:
- if (!po->ops->get_band)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_band(co, ur);
- return po->ops->get_band(co, ur);
+ case TREQ_NETWORK_SET_PREFERRED_PLMN:
+ tcore_check_null_ret_err("ops->set_preferred_plmn",
+ ops->set_preferred_plmn, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_PREFERRED_PLMN:
- if (!po->ops->set_preferred_plmn)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_preferred_plmn(co, ur);
- return po->ops->set_preferred_plmn(co, ur);
+ case TREQ_NETWORK_GET_PREFERRED_PLMN:
+ tcore_check_null_ret_err("ops->get_preferred_plmn",
+ ops->get_preferred_plmn, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_PREFERRED_PLMN:
- if (!po->ops->get_preferred_plmn)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_preferred_plmn(co, ur);
- return po->ops->get_preferred_plmn(co, ur);
+ case TREQ_NETWORK_SET_ORDER:
+ tcore_check_null_ret_err("ops->set_order",
+ ops->set_order, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_ORDER:
- if (!po->ops->set_order)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_order(co, ur);
- return po->ops->set_order(co, ur);
+ case TREQ_NETWORK_GET_ORDER:
+ tcore_check_null_ret_err("ops->get_order",
+ ops->get_order, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_ORDER:
- if (!po->ops->get_order)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_order(co, ur);
- return po->ops->get_order(co, ur);
+ case TREQ_NETWORK_SET_POWER_ON_ATTACH:
+ tcore_check_null_ret_err("ops->set_power_on_attach",
+ ops->set_power_on_attach, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_POWER_ON_ATTACH:
- if (!po->ops->set_power_on_attach)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_power_on_attach(co, ur);
- return po->ops->set_power_on_attach(co, ur);
+ case TREQ_NETWORK_GET_POWER_ON_ATTACH:
+ tcore_check_null_ret_err("ops->get_power_on_attach",
+ ops->get_power_on_attach, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_POWER_ON_ATTACH:
- if (!po->ops->get_power_on_attach)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_power_on_attach(co, ur);
- return po->ops->get_power_on_attach(co, ur);
+ case TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH:
+ tcore_check_null_ret_err("ops->set_cancel_manual_search",
+ ops->set_cancel_manual_search, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH:
- if (!po->ops->set_cancel_manual_search)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_cancel_manual_search(co, ur);
- return po->ops->set_cancel_manual_search(co, ur);
+ case TREQ_NETWORK_GET_SERVING_NETWORK:
+ tcore_check_null_ret_err("ops->get_serving_network",
+ ops->get_serving_network, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_SERVING_NETWORK:
- if (!po->ops->get_serving_network)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_serving_network(co, ur);
- return po->ops->get_serving_network(co, ur);
+ case TREQ_NETWORK_SET_MODE:
+ tcore_check_null_ret_err("ops->set_mode",
+ ops->set_mode, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_MODE:
- if (!po->ops->set_mode)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_mode(co, ur);
- return po->ops->set_mode(co, ur);
+ case TREQ_NETWORK_GET_MODE:
+ tcore_check_null_ret_err("ops->get_mode",
+ ops->get_mode, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_MODE:
- if (!po->ops->get_mode)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_mode(co, ur);
- return po->ops->get_mode(co, ur);
+ case TREQ_NETWORK_SET_NEIGHBORING_CELL_INFO:
+ tcore_check_null_ret_err("ops->set_neighboring_cell_info",
+ ops->set_neighboring_cell_info, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_NEIGHBORING_CELL_INFO:
- if (!po->ops->set_neighboring_cell_info)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_neighboring_cell_info(co, ur);
- return po->ops->set_neighboring_cell_info(co, ur);
+ case TREQ_NETWORK_GET_NEIGHBORING_CELL_INFO:
+ tcore_check_null_ret_err("ops->get_neighboring_cell_info",
+ ops->get_neighboring_cell_info, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_NEIGHBORING_CELL_INFO:
- if (!po->ops->get_neighboring_cell_info)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_neighboring_cell_info(co, ur);
- return po->ops->get_neighboring_cell_info(co, ur);
+ case TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->set_default_data_subscription",
+ ops->set_default_data_subscription, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION:
- if (!po->ops->set_default_data_subscription)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_default_data_subscription(co, ur);
- return po->ops->set_default_data_subscription(co, ur);
+ case TREQ_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->get_default_data_subscription",
+ ops->get_default_data_subscription, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION:
- if (!po->ops->get_default_data_subscription)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_default_data_subscription(co, ur);
- return po->ops->get_default_data_subscription(co, ur);
+ case TREQ_NETWORK_SET_DEFAULT_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->set_default_subscription",
+ ops->set_default_subscription, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_DEFAULT_SUBSCRIPTION:
- if (!po->ops->set_default_subscription)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_default_subscription(co, ur);
- return po->ops->set_default_subscription(co, ur);
+ case TREQ_NETWORK_GET_DEFAULT_SUBSCRIPTION:
+ tcore_check_null_ret_err("ops->get_default_subscription",
+ ops->get_default_subscription, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_DEFAULT_SUBSCRIPTION:
- if (!po->ops->get_default_subscription)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_default_subscription(co, ur);
- return po->ops->get_default_subscription(co, ur);
+ case TREQ_NETWORK_SET_EMERGENCY_CALLBACK_MODE:
+ tcore_check_null_ret_err("ops->set_emergency_callback_mode",
+ ops->set_emergency_callback_mode, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_EMERGENCY_CALLBACK_MODE:
- if (!po->ops->set_emergency_callback_mode)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_emergency_callback_mode(co, ur);
- return po->ops->set_emergency_callback_mode(co, ur);
+ case TREQ_NETWORK_SET_ROAMING_PREFERENCE:
+ tcore_check_null_ret_err("ops->set_roaming_preference",
+ ops->set_roaming_preference, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_SET_ROAMING_PREFERENCE:
- if (!po->ops->set_roaming_preference)
- return TCORE_RETURN_ENOSYS;
+ return ops->set_roaming_preference(co, ur);
- return po->ops->set_roaming_preference(co, ur);
+ case TREQ_NETWORK_GET_ROAMING_PREFERENCE:
+ tcore_check_null_ret_err("ops->get_roaming_preference",
+ ops->get_roaming_preference, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_ROAMING_PREFERENCE:
- if (!po->ops->get_roaming_preference)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_roaming_preference(co, ur);
- return po->ops->get_roaming_preference(co, ur);
+ case TREQ_NETWORK_GET_SUBSCRIPTION_INFO:
+ tcore_check_null_ret_err("ops->get_subscription_info",
+ ops->get_subscription_info, TCORE_RETURN_ENOSYS);
- case TREQ_NETWORK_GET_SUBSCRIPTION_INFO:
- if (!po->ops->get_subscription_info)
- return TCORE_RETURN_ENOSYS;
+ return ops->get_subscription_info(co, ur);
- return po->ops->get_subscription_info(co, ur);
+ case TREQ_NETWORK_SEARCH_ECC_RAT:
+ tcore_check_null_ret_err("ops->search_ecc_rat",
+ ops->search_ecc_rat, TCORE_RETURN_ENOSYS);
- default:
- break;
+ return ops->search_ecc_rat(co, ur);
+
+ default:
+ break;
}
return TCORE_RETURN_SUCCESS;
po = tcore_object_ref_object(co);
if (po) {
- free(po);
+ g_free(po);
tcore_object_link_object(co, NULL);
}
}
if (!o)
return NULL;
- po = calloc(1, sizeof(struct private_object_data));
+ po = g_try_malloc0(sizeof(struct private_object_data));
if (!po) {
tcore_object_free(o);
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
+
po->operator_info_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
tcore_object_set_type(o, CORE_OBJECT_TYPE_NETWORK);
if (po->network_name_short)
free(po->network_name_short);
+
if (po->network_name_full)
free(po->network_name_full);
+
if (po->network_name_spn)
free(po->network_name_spn);
+
if (po->plmn)
free(po->plmn);
tcore_object_free(co);
}
-void tcore_network_set_ops(CoreObject *o, struct tcore_network_operations *ops)
+void tcore_network_set_ops(CoreObject *o,
+ struct tcore_network_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_NETWORK);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
-char* tcore_network_get_plmn(CoreObject *co)
+char *tcore_network_get_plmn(CoreObject *co)
{
struct private_object_data *po = NULL;
}
-char* tcore_network_get_network_name(CoreObject *co,
+char *tcore_network_get_network_name(CoreObject *co,
enum tcore_network_name_type type)
{
struct private_object_data *po = NULL;
return TCORE_RETURN_EINVAL;
switch (type) {
- case TCORE_NETWORK_NAME_TYPE_SHORT:
- if (po->network_name_short) {
- free (po->network_name_short);
- po->network_name_short = NULL;
- }
+ case TCORE_NETWORK_NAME_TYPE_SHORT:
+ if (po->network_name_short) {
+ free(po->network_name_short);
+ po->network_name_short = NULL;
+ }
- if (network_name)
- po->network_name_short = g_strdup (network_name);
+ if (network_name)
+ po->network_name_short = g_strdup(network_name);
- break;
+ break;
- case TCORE_NETWORK_NAME_TYPE_FULL:
- if (po->network_name_full) {
- free (po->network_name_full);
- po->network_name_full = NULL;
- }
+ case TCORE_NETWORK_NAME_TYPE_FULL:
+ if (po->network_name_full) {
+ free(po->network_name_full);
+ po->network_name_full = NULL;
+ }
- if (network_name)
- po->network_name_full = g_strdup (network_name);
+ if (network_name)
+ po->network_name_full = g_strdup(network_name);
- break;
+ break;
- case TCORE_NETWORK_NAME_TYPE_SPN:
- if (po->network_name_spn) {
- free (po->network_name_spn);
- po->network_name_spn = NULL;
- }
+ case TCORE_NETWORK_NAME_TYPE_SPN:
+ if (po->network_name_spn) {
+ free(po->network_name_spn);
+ po->network_name_spn = NULL;
+ }
- if (network_name)
- po->network_name_spn = g_strdup (network_name);
+ if (network_name)
+ po->network_name_spn = g_strdup(network_name);
- break;
+ break;
- default:
- return TCORE_RETURN_EINVAL;
+ default:
+ return TCORE_RETURN_EINVAL;
}
return TCORE_RETURN_SUCCESS;
}
TReturn tcore_network_get_network_name_priority(CoreObject *co,
- enum tcore_network_name_priority *priority)
+ enum tcore_network_name_priority *priority)
{
struct private_object_data *po = NULL;
return TCORE_RETURN_EINVAL;
switch (type) {
- case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT:
- *result = po->cs_domain_status;
- break;
-
- case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET:
- *result = po->ps_domain_status;
- break;
- default:
- err("invalid network type");
- break;
+ case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT:
+ *result = po->cs_domain_status;
+ break;
+
+ case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET:
+ *result = po->ps_domain_status;
+ break;
+
+ default:
+ err("invalid network type");
+ break;
}
return TCORE_RETURN_SUCCESS;
return TCORE_RETURN_EINVAL;
switch (type) {
- case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT:
- po->cs_domain_status = status;
- dbg("cs.status = 0x%x", status);
- break;
-
- case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET:
- po->ps_domain_status = status;
- dbg("ps.status = 0x%x", status);
- break;
- default:
- err("invalid network type");
- break;
-
+ case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT:
+ po->cs_domain_status = status;
+ dbg("cs.status = 0x%x", status);
+ break;
+
+ case TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET:
+ po->ps_domain_status = status;
+ dbg("ps.status = 0x%x", status);
+ break;
+
+ default:
+ err("invalid network type");
+ break;
}
return TCORE_RETURN_SUCCESS;
}
TReturn tcore_network_set_access_technology(CoreObject *co,
- enum telephony_network_access_technology act)
+ enum telephony_network_access_technology act)
{
struct private_object_data *po = NULL;
}
TReturn tcore_network_get_access_technology(CoreObject *co,
- enum telephony_network_access_technology *result)
+ enum telephony_network_access_technology *result)
{
struct private_object_data *po = NULL;
return TCORE_RETURN_SUCCESS;
}
+TReturn tcore_network_set_ims_reg_info(CoreObject *co,
+ struct tel_network_ims_registration_info ims_reg_info)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ po->ims_reg_info.is_registered = ims_reg_info.is_registered;
+ po->ims_reg_info.feature_mask = ims_reg_info.feature_mask;
+ po->ims_reg_info.network_type = ims_reg_info.network_type;
+ po->ims_reg_info.ecmp_mode = ims_reg_info.ecmp_mode;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_get_ims_reg_info(CoreObject *co,
+ struct tel_network_ims_registration_info *ims_reg_info)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ if (!ims_reg_info)
+ return TCORE_RETURN_EINVAL;
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ ims_reg_info->is_registered = po->ims_reg_info.is_registered;
+ ims_reg_info->feature_mask = po->ims_reg_info.feature_mask;
+ ims_reg_info->network_type = po->ims_reg_info.network_type;
+ ims_reg_info->ecmp_mode = po->ims_reg_info.ecmp_mode;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_set_ims_voice_status(CoreObject *co, gboolean status)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ po->ims_voice_status = status;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_get_ims_voice_status(CoreObject *co, gboolean *status)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ if (!status)
+ return TCORE_RETURN_EINVAL;
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ *status = po->ims_voice_status;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_set_ecc_rat_search_status(CoreObject *co,
+ enum telephony_network_ecc_rat_search_status status)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ po->rat_search_status = status;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_get_ecc_rat_search_status(CoreObject *co,
+ enum telephony_network_ecc_rat_search_status *status)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ if (!status)
+ return TCORE_RETURN_EINVAL;
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ *status = po->rat_search_status;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_set_ecc_rat(CoreObject *co,
+ enum telephony_network_access_technology ecc_rat)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ po->ecc_rat = ecc_rat;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_network_get_ecc_rat(CoreObject *co,
+ enum telephony_network_access_technology *ecc_rat)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, TCORE_RETURN_EINVAL);
+
+ if (!ecc_rat)
+ return TCORE_RETURN_EINVAL;
+
+ po = tcore_object_ref_object(co);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ *ecc_rat = po->ecc_rat;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
TReturn tcore_network_operator_info_add(CoreObject *co,
const struct tcore_network_operator_info *noi)
{
if (!po)
return TCORE_RETURN_EINVAL;
- g_strlcpy(plmn, noi->mcc, 4);
- g_strlcpy(plmn+3, noi->mnc, 3);
+ g_strlcpy(plmn, noi->mcc, NETWORK_MAX_MCC_LEN + 1);
+ g_strlcpy(plmn + NETWORK_MAX_MCC_LEN, noi->mnc, NETWORK_MAX_MNC_LEN + 1);
- if (g_hash_table_lookup(po->operator_info_hash, plmn)) {
- //dbg("Remove existed (key:%s)", plmn);
+ if (g_hash_table_lookup(po->operator_info_hash, plmn))
g_hash_table_remove(po->operator_info_hash, plmn);
- }
- //dbg("Adding mcc[%s] mnc[%s] name[%s] type[%d] in operator info table", noi->mcc, noi->mnc, noi->name, noi->type);
- g_hash_table_insert(po->operator_info_hash, g_strdup(plmn), g_memdup(noi, sizeof(struct tcore_network_operator_info)));
+ g_hash_table_insert(po->operator_info_hash,
+ g_strdup(plmn),
+ g_memdup(noi, sizeof(struct tcore_network_operator_info)));
return TCORE_RETURN_SUCCESS;
}
{
struct private_object_data *po = NULL;
struct tcore_network_operator_info *data;
- char plmn[7];
+ char plmn[NETWORK_MAX_PLMN_LEN+1];
int mcc_index, mnc_index;
CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_NETWORK, NULL);
if (!po)
return NULL;
- g_strlcpy(plmn, mcc, 4);
- g_strlcpy(plmn+3, mnc, 3);
+ g_strlcpy(plmn, mcc, NETWORK_MAX_MCC_LEN + 1);
+ g_strlcpy(plmn + NETWORK_MAX_MCC_LEN, mnc, NETWORK_MAX_MNC_LEN + 1);
data = g_hash_table_lookup(po->operator_info_hash, plmn);
return data;
}
+
+void tcore_network_update_mcc_mnc_oper_list(CoreObject *co,
+ const char *plmn, const char *name, enum tcore_network_operator_info_type type)
+{
+ char mcc[NETWORK_MAX_MCC_LEN+1] = { 0, };
+ const char *mnc;
+ struct tcore_network_operator_info *noi = NULL;
+
+ CORE_OBJECT_CHECK(co, CORE_OBJECT_TYPE_NETWORK);
+
+ if (!plmn) {
+ err("plmn is NULL");
+ return;
+ }
+
+ if (strlen(plmn) < NETWORK_MAX_MCC_LEN+1) {
+ err("strlen of plmn is %d", strlen(plmn));
+ return;
+ }
+
+ memcpy(mcc, plmn, NETWORK_MAX_MCC_LEN);
+ mnc = plmn + NETWORK_MAX_MCC_LEN;
+
+ if (atoi(mcc) == 0) {
+ err("atoi(mcc) is Zero. mcc[%s]", mcc);
+ return;
+ }
+
+ noi = g_try_malloc0(sizeof(struct tcore_network_operator_info));
+ if (noi == NULL) {
+ err("Memory alloc failed");
+ return;
+ }
+
+ g_snprintf(noi->mcc, NETWORK_MAX_MCC_LEN+1, "%s", mcc);
+ g_snprintf(noi->mnc, NETWORK_MAX_MNC_LEN+1, "%s", mnc);
+ g_snprintf(noi->name, NETWORK_MAX_NETWORK_NAME_LEN+1, "%s", name);
+ noi->type = type;
+
+ info("[NETINFO] Update mcc[%s] mnc[%s] name[%s] type[%d] oper_list", noi->mcc, noi->mnc, noi->name, noi->type);
+ tcore_network_operator_info_add(co, noi);
+
+ g_free(noi);
+}
+
+/* Loads operator info from database */
+gboolean tcore_network_load_mcc_mnc_oper_list_from_db(TcorePlugin *p,
+ CoreObject *co, const char *mcc, const char *mnc, const char *db_path)
+{
+ Server *s;
+ Storage *strg;
+ void *handle;
+ char query[256] = {0, };
+ char mcc_str[NETWORK_MAX_MCC_LEN+1] = { 0, };
+ GHashTableIter iter;
+ gpointer key, value;
+ GHashTable *result = NULL, *row = NULL;
+ struct tcore_network_operator_info *noi = NULL;
+ int count = 0;
+
+ s = tcore_plugin_ref_server(p);
+ strg = tcore_server_find_storage(s, "database");
+
+ handle = tcore_storage_create_handle(strg, db_path);
+ if (!handle) {
+ err("fail to create database handle");
+ return FALSE;
+ }
+
+ g_snprintf(query, 255,
+ "select country, mcc, mnc, oper from mcc_mnc_oper_list where mcc='%s' and mnc='%s'",
+ mcc, mnc);
+ dbg("query = [%s]", query);
+
+ result = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
+ (GDestroyNotify) g_hash_table_destroy);
+ if (!result) {
+ err("fail to create new hash table");
+ tcore_storage_remove_handle(strg, handle);
+ return FALSE;
+ }
+
+ if (tcore_storage_read_query_database(strg, handle, query, NULL, result, 4) == FALSE) {
+ tcore_storage_remove_handle(strg, handle);
+ g_hash_table_destroy(result);
+ return FALSE;
+ }
+
+ g_hash_table_iter_init(&iter, result);
+ noi = g_try_malloc0(sizeof(struct tcore_network_operator_info));
+ if (noi == NULL) {
+ err("Memory alloc failed");
+ tcore_storage_remove_handle(strg, handle);
+ g_hash_table_destroy(result);
+ return FALSE;
+ }
+
+ while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+ row = value;
+
+ memset(noi, 0x0, sizeof(struct tcore_network_operator_info));
+ memset(mcc_str, 0, sizeof(mcc_str));
+
+ g_snprintf(mcc_str, NETWORK_MAX_MCC_LEN+1, "%s", (char *)g_hash_table_lookup(row, "1"));
+ if (strlen(mcc_str) == 1)
+ g_snprintf(noi->mcc, NETWORK_MAX_MCC_LEN+1, "00%s", mcc_str);
+ else if (strlen(mcc_str) == 2)
+ g_snprintf(noi->mcc, NETWORK_MAX_MCC_LEN+1, "0%s", mcc_str);
+ else
+ g_snprintf(noi->mcc, NETWORK_MAX_MCC_LEN+1, "%s", mcc_str);
+ g_snprintf(noi->mnc, NETWORK_MAX_MNC_LEN+1, "%s", (char *)g_hash_table_lookup(row, "2"));
+ g_snprintf(noi->name, NETWORK_MAX_NETWORK_NAME_LEN+1, "%s", (char *)g_hash_table_lookup(row, "3"));
+ g_snprintf(noi->country, NETWORK_MAX_COUNTRY_CODE_LEN+1, "%s", (char *)g_hash_table_lookup(row, "0"));
+ if (g_strcmp0(NETWORK_MCC_MNC_OPER_LIST_GSMA_DB, db_path) == 0)
+ noi->type = TCORE_NETWORK_OPERATOR_INFO_TYPE_TS25_DB;
+ else
+ noi->type = TCORE_NETWORK_OPERATOR_INFO_TYPE_DELTA_DB;
+ info("[NETINFO] load name from DB : mcc[%s] mnc[%s] name[%s] type:[%d]", noi->mcc, noi->mnc, noi->name, noi->type);
+ tcore_network_operator_info_add(co, noi);
+ count++;
+ }
+ g_free(noi);
+
+ g_hash_table_destroy(result);
+
+ tcore_storage_remove_handle(strg, handle);
+
+ if (count == 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Updates Operator info in the database */
+void tcore_network_update_mcc_mnc_oper_list_db(TcorePlugin *p, const char *mcc, const char *mnc, const char *oper_name)
+{
+ Server *s;
+ Storage *strg;
+ void *handle;
+ char query[256] = {0, };
+ struct tcore_network_operator_info *noi = NULL;
+ GHashTable *result, *row = NULL;
+ GHashTableIter iter;
+ gpointer key, value;
+ gboolean field_exist = FALSE;
+
+ if (G_UNLIKELY(!mcc || !mnc || !oper_name || !p)) {
+ err("Input Parameter Addresses : mcc[%p] mnc[%p] oper_name[%p] plugin[%p]", mcc, mnc, oper_name, p);
+ return;
+ }
+
+ if (G_UNLIKELY(strlen(oper_name) == 0)) {
+ err("strlen of oper_name is Zero");
+ return;
+ }
+
+ dbg("mcc[%s] mnc[%s] oper_name[%s]", mcc, mnc, oper_name);
+
+ /* 1. Get DB handle */
+ s = tcore_plugin_ref_server(p);
+ strg = tcore_server_find_storage(s, "database");
+
+ handle = tcore_storage_create_handle(strg, NETWORK_MCC_MNC_OPER_LIST_GSMA_DB);
+ if (!handle) {
+ err("fail to create database handle");
+ return;
+ }
+
+ /* 2. Check duplicated network operator name in DB */
+ g_snprintf(query, 255,
+ "select country, mcc, mnc, oper from mcc_mnc_oper_list where mcc='%s' and mnc='%s'",
+ mcc, mnc);
+ dbg("query = [%s]", query);
+
+ result = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
+ (GDestroyNotify) g_hash_table_destroy);
+ if (!result) {
+ err("fail to create new hash table");
+ tcore_storage_remove_handle(strg, handle);
+ return;
+ }
+
+ tcore_storage_read_query_database(strg, handle, query, NULL, result, 4);
+
+ g_hash_table_iter_init(&iter, result);
+ noi = g_try_malloc0(sizeof(struct tcore_network_operator_info));
+ if (noi == NULL) {
+ err("Memory alloc failed");
+ tcore_storage_remove_handle(strg, handle);
+ g_hash_table_destroy(result);
+ return;
+ }
+ while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+ row = value;
+
+ memset(noi, 0x0, sizeof(struct tcore_network_operator_info));
+
+ g_snprintf(noi->mcc, NETWORK_MAX_MCC_LEN+1, "%s", (char *)g_hash_table_lookup(row, "1"));
+ g_snprintf(noi->mnc, NETWORK_MAX_MNC_LEN+1, "%s", (char *)g_hash_table_lookup(row, "2"));
+ g_snprintf(noi->name, NETWORK_MAX_NETWORK_NAME_LEN+1, "%s", (char *)g_hash_table_lookup(row, "3"));
+ g_snprintf(noi->country, NETWORK_MAX_COUNTRY_CODE_LEN+1, "%s", (char *)g_hash_table_lookup(row, "0"));
+
+ info("This field (mcc[%s] mnc[%s] name[%s]) will be updated ", noi->mcc, noi->mnc, noi->name);
+ field_exist = TRUE;
+ }
+ g_free(noi);
+ g_hash_table_destroy(result);
+
+ /* 3. Update Network Operator name DB */
+ result = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
+ if (!result) {
+ err("fail to create new hash table");
+ tcore_storage_remove_handle(strg, handle);
+ return;
+ }
+
+ if (field_exist) {
+ /* Update DB */
+ snprintf(query, 255, "update mcc_mnc_oper_list set oper = ? where mcc = ? and mnc = ?");
+ dbg("query[%s]", query);
+
+ g_hash_table_insert(result, (gpointer)"1", g_strdup(oper_name));
+ g_hash_table_insert(result, (gpointer)"2", g_strdup(mcc));
+ g_hash_table_insert(result, (gpointer)"3", g_strdup(mnc));
+
+ if (tcore_storage_update_query_database(strg, handle, query, result) == FALSE)
+ err("update query failed");
+ } else {
+ /* Insert DB */
+ snprintf(query, 255, "insert into mcc_mnc_oper_list (country, mcc, mnc, oper) values (?, ?, ?, ?)");
+ dbg("query[%s]", query);
+
+ g_hash_table_insert(result, (gpointer)"1", g_strdup("__"));
+ g_hash_table_insert(result, (gpointer)"2", g_strdup(mcc));
+ g_hash_table_insert(result, (gpointer)"3", g_strdup(mnc));
+ g_hash_table_insert(result, (gpointer)"4", g_strdup(oper_name));
+
+ if (tcore_storage_insert_query_database(strg, handle, query, result) == FALSE)
+ err("insert query failed");
+ }
+
+ g_hash_table_destroy(result);
+ tcore_storage_remove_handle(strg, handle);
+}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#include "co_phonebook.h"
struct private_object_data {
- struct tcore_phonebook_operations *ops;
+ struct tcore_phonebook_operations *ops[TCORE_OPS_TYPE_MAX];
+
gboolean b_init;
struct tel_phonebook_support_list support_list;
struct tel_phonebook_field_support_list field_support_list;
enum tel_phonebook_type selected;
};
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_phonebook_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_PHONEBOOK_GETCOUNT:
- if (!po->ops->get_count)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_GETCOUNT:
+ tcore_check_null_ret_err("ops->get_count",
+ ops->get_count, TCORE_RETURN_ENOSYS);
- return po->ops->get_count(o, ur);
- break;
+ return ops->get_count(o, ur);
- case TREQ_PHONEBOOK_GETMETAINFO:
- if (!po->ops->get_info)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_GETMETAINFO:
+ tcore_check_null_ret_err("ops->get_info",
+ ops->get_info, TCORE_RETURN_ENOSYS);
- return po->ops->get_info(o, ur);
- break;
+ return ops->get_info(o, ur);
- case TREQ_PHONEBOOK_GETUSIMINFO:
- if (!po->ops->get_usim_info)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_GETUSIMINFO:
+ tcore_check_null_ret_err("ops->get_usim_info",
+ ops->get_usim_info, TCORE_RETURN_ENOSYS);
- return po->ops->get_usim_info(o, ur);
- break;
+ return ops->get_usim_info(o, ur);
- case TREQ_PHONEBOOK_READRECORD:
- if (!po->ops->read_record)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_READRECORD:
+ tcore_check_null_ret_err("ops->read_record",
+ ops->read_record, TCORE_RETURN_ENOSYS);
- return po->ops->read_record(o, ur);
- break;
+ return ops->read_record(o, ur);
- case TREQ_PHONEBOOK_UPDATERECORD:
- if (!po->ops->update_record)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_UPDATERECORD:
+ tcore_check_null_ret_err("ops->update_record",
+ ops->update_record, TCORE_RETURN_ENOSYS);
- return po->ops->update_record(o, ur);
- break;
+ return ops->update_record(o, ur);
- case TREQ_PHONEBOOK_DELETERECORD:
- if (!po->ops->delete_record)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_PHONEBOOK_DELETERECORD:
+ tcore_check_null_ret_err("ops->delete_record",
+ ops->delete_record, TCORE_RETURN_ENOSYS);
- return po->ops->delete_record(o, ur);
- break;
+ return ops->delete_record(o, ur);
- default:
- break;
+ default:
+ break;
}
return TCORE_RETURN_SUCCESS;
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
po = tcore_object_ref_object(o);
+
return po->b_init;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
po = tcore_object_ref_object(o);
+
po->b_init = b_init;
+
return TRUE;
}
-struct tel_phonebook_support_list* tcore_phonebook_get_support_list(CoreObject *o)
+struct tel_phonebook_support_list *tcore_phonebook_get_support_list(CoreObject *o)
{
- struct tel_phonebook_support_list *tmp;
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, NULL);
po = tcore_object_ref_object(o);
- tmp = calloc(1, sizeof(struct tel_phonebook_support_list));
- memcpy(tmp, &po->support_list, sizeof(struct tel_phonebook_support_list));
- return tmp;
+
+ if (po == NULL)
+ return NULL;
+
+ return g_memdup(&po->support_list, sizeof(struct tel_phonebook_support_list));
}
gboolean tcore_phonebook_set_support_list(CoreObject *o, struct tel_phonebook_support_list *list)
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
po = tcore_object_ref_object(o);
+
memcpy(&po->support_list, list, sizeof(struct tel_phonebook_support_list));
+
return TRUE;
}
-struct tel_phonebook_field_support_list* tcore_phonebook_get_field_support_list(CoreObject *o)
+struct tel_phonebook_field_support_list *tcore_phonebook_get_field_support_list(CoreObject *o)
{
- struct tel_phonebook_field_support_list *tmp;
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, NULL);
po = tcore_object_ref_object(o);
- tmp = calloc(1, sizeof(struct tel_phonebook_field_support_list));
- memcpy(tmp, &po->field_support_list, sizeof(struct tel_phonebook_field_support_list));
- return tmp;
+
+ if (po == NULL)
+ return NULL;
+
+ return g_memdup(&po->field_support_list, sizeof(struct tel_phonebook_field_support_list));
}
gboolean tcore_phonebook_set_field_support_list(CoreObject *o, struct tel_phonebook_field_support_list *list)
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
po = tcore_object_ref_object(o);
+
memcpy(&po->field_support_list, list, sizeof(struct tel_phonebook_field_support_list));
+
return TRUE;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, PB_TYPE_UNKNOWNN);
po = tcore_object_ref_object(o);
+
return po->selected;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PHONEBOOK, FALSE);
po = tcore_object_ref_object(o);
+
po->selected = t;
+
return TRUE;
}
CoreObject *tcore_phonebook_new(TcorePlugin *p, const char *name,
- struct tcore_phonebook_operations *ops, TcoreHal *hal)
+ struct tcore_phonebook_operations *ops, TcoreHal *hal)
{
CoreObject *o = NULL;
struct private_object_data *po = NULL;
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
+
po->selected = PB_TYPE_UNKNOWNN;
tcore_object_set_type(o, CORE_OBJECT_TYPE_PHONEBOOK);
tcore_object_free(o);
}
-void tcore_phonebook_set_ops(CoreObject *o, struct tcore_phonebook_operations *ops)
+void tcore_phonebook_set_ops(CoreObject *o, struct tcore_phonebook_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PHONEBOOK);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "user_request.h"
#include "co_ps.h"
#include "co_network.h"
-struct p_callid_type{
+struct p_callid_type {
unsigned int cid;
gboolean active;
gboolean connected;
};
struct private_object_data {
- struct tcore_ps_operations *ops;
+ struct tcore_ps_operations *ops[TCORE_OPS_TYPE_MAX];
gboolean online;
gint num_of_pdn;
/* 1 ~ UMTS_PS_MAX_CID */
struct p_callid_type cid[PS_MAX_CID + 1];
- //CoreObject *cid[PS_MAX_CID + 1];
GSList *context_list;
};
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_ps_operations *ops = NULL;
- if (!o || !ur)
- return TCORE_RETURN_EINVAL;
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_MODEM, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- default:
- break;
+ default:
+ break;
}
return TCORE_RETURN_SUCCESS;
po->context_list = NULL;
}
- free(po);
+ g_free(po);
tcore_object_link_object(o, NULL);
}
tcore_context_cp_service_info(ps_context, s_context);
g_free(t_apn);
g_free(s_apn);
+
return TRUE;
}
- g_free (s_apn);
+ g_free(s_apn);
contexts = contexts->next;
}
return FALSE;
}
-static void _deactivate_context (gpointer context, gpointer user_data)
+static void _deactivate_context(gpointer context, gpointer user_data)
{
if (!context || !user_data)
return;
}
CoreObject *tcore_ps_new(TcorePlugin *p, const char *name,
- struct tcore_ps_operations *ops, TcoreHal *hal)
+ struct tcore_ps_operations *ops, TcoreHal *hal)
{
CoreObject *o = NULL;
struct private_object_data *po = NULL;
if (!o)
return NULL;
- po = calloc(1, sizeof(struct private_object_data));
+ po = g_try_malloc0(sizeof(struct private_object_data));
if (!po) {
tcore_object_free(o);
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_PS);
tcore_object_link_object(o, po);
tcore_object_free(o);
}
-void tcore_ps_set_ops(CoreObject *o, struct tcore_ps_operations *ops)
+void tcore_ps_set_ops(CoreObject *o,
+ struct tcore_ps_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
TReturn tcore_ps_add_context(CoreObject *o, CoreObject *ctx_o)
return TCORE_RETURN_EINVAL;
po->online = state;
- dbg("ps status = %d", po->online);
+ dbg("PS Status: [%s]", (po->online ? "ONLINE" : "OFFLINE"));
return TCORE_RETURN_SUCCESS;
}
if (!po)
return TCORE_RETURN_EINVAL;
- if(numbers <= 0 || numbers > PS_MAX_CID) {
+ if (numbers <= 0 || numbers > PS_MAX_CID)
po->num_of_pdn = PS_MAX_CID;
- } else {
+ else
po->num_of_pdn = numbers;
- }
+
dbg("ps num of pdn = %d, numbers = %d", po->num_of_pdn, numbers);
return TCORE_RETURN_SUCCESS;
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS, 0);
- if(cid == 0){
+ if (cid == 0)
return 0;
- }
+
po = tcore_object_ref_object(o);
for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].cid == cid){
+ if (po->cid[idx_cid].cid == cid) {
po->cid[idx_cid].active = enable;
return 1;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS, 0);
- if(cid == 0){
+ if (cid == 0)
return 0;
- }
po = tcore_object_ref_object(o);
- for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].cid == cid){
+ for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++)
+ if (po->cid[idx_cid].cid == cid)
return po->cid[idx_cid].active;
- }
- }
return 0;
}
-GSList* tcore_ps_get_active_cids(CoreObject *o)
+GSList *tcore_ps_get_active_cids(CoreObject *o)
{
int idx_cid = 0;
GSList *active_list = NULL;
po = tcore_object_ref_object(o);
- for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].active){
+ for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++)
+ if (po->cid[idx_cid].active)
active_list = g_slist_append(active_list, &po->cid[idx_cid].cid);
- }
- }
return active_list;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS, 0);
- if(cid == 0){
+ if (cid == 0)
return 0;
- }
po = tcore_object_ref_object(o);
for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].cid == cid){
+ if (po->cid[idx_cid].cid == cid) {
po->cid[idx_cid].connected = connected;
return 1;
}
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS, 0);
- if(cid == 0){
+ if (cid == 0)
return 0;
- }
po = tcore_object_ref_object(o);
- for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].cid == cid){
+ for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++)
+ if (po->cid[idx_cid].cid == cid)
return po->cid[idx_cid].connected;
- }
- }
return 0;
}
-GSList* tcore_ps_get_connected_cids(CoreObject *o)
+GSList *tcore_ps_get_connected_cids(CoreObject *o)
{
int idx_cid = 0;
GSList *active_list = NULL;
po = tcore_object_ref_object(o);
- for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
- if (po->cid[idx_cid].connected){
+ for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++)
+ if (po->cid[idx_cid].connected)
active_list = g_slist_append(active_list, &po->cid[idx_cid].cid);
- }
- }
return active_list;
}
-unsigned int tcore_ps_is_active_apn(CoreObject *o, const char* apn)
+unsigned int tcore_ps_is_active_apn(CoreObject *o, const char *apn)
{
int idx_cid = 0;
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
- for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++){
+ for (idx_cid = 1; idx_cid <= po->num_of_pdn; idx_cid++) {
if (po->cid[idx_cid].cid == 0)
continue;
- if (g_strcmp0((const char*)po->cid[idx_cid].apn, apn) == 0 && po->cid[idx_cid].active) {
+ if (g_strcmp0((const char *)po->cid[idx_cid].apn, apn) == 0 && po->cid[idx_cid].active)
return 1;
- }
}
return 0;
context_state = tcore_context_get_state(pdp_o);
- if(CONTEXT_STATE_ACTIVATED == context_state) {
+ if (CONTEXT_STATE_ACTIVATED == context_state) {
*state = CONTEXT_STATE_ACTIVATED;
return TRUE;
- }
- else if (CONTEXT_STATE_ACTIVATING == context_state){
+ } else if (CONTEXT_STATE_ACTIVATING == context_state) {
*state = CONTEXT_STATE_ACTIVATING;
ret = TRUE;
continue;
- }
- else if (CONTEXT_STATE_DEACTIVATING == context_state){
+ } else if (CONTEXT_STATE_DEACTIVATING == context_state) {
*state = CONTEXT_STATE_DEACTIVATING;
ret = TRUE;
continue;
}
}
}
+
return ret;
}
po->cid[idx].cid = idx;
po->cid[idx].contexts = g_slist_append(po->cid[idx].contexts, context);
po->cid[idx].apn = tcore_context_get_apn(context);
+
dbg("assign contexts(%p) in cid(%d), apn(%s)", context, idx, po->cid[idx].apn);
+
return tcore_context_set_id(context, idx);
- }
- else {
+ } else
dbg("cid[%d] is not null", idx);
- }
}
dbg("can't find empty cid");
- }
- else {
+ } else {
/* Manual assign */
if (po->cid[cid].cid == cid) {
po->cid[cid].contexts = g_slist_append(po->cid[cid].contexts, context);
return tcore_context_set_id(context, cid);
- }
- else {
+ } else
dbg("cid[%d] is not null", cid);
- }
}
return TCORE_RETURN_PS_CID_ERROR;
return TCORE_RETURN_PS_NETWORK_NOT_READY;
}
- return po->ops->send_dormant_request(o, user_data);
+ /* By 'default' considering Modem/CP opearations */
+ return po->ops[TCORE_OPS_TYPE_CP]->send_dormant_request(o, user_data);
}
TReturn tcore_ps_clear_context_id(CoreObject *o, CoreObject *context)
return TCORE_RETURN_EINVAL;
i = tcore_context_get_id(context);
- if (i == 0) {
+ if (i == 0)
return TCORE_RETURN_PS_CID_ERROR;
- }
if (i > po->num_of_pdn)
return TCORE_RETURN_PS_CID_ERROR;
po->cid[i].contexts = g_slist_remove(po->cid[i].contexts, context);
cnt = g_slist_length(po->cid[i].contexts);
- if (cnt <= 0){
+ if (cnt <= 0) {
po->cid[i].cid = 0;
po->cid[i].active = FALSE;
po->cid[i].connected = FALSE;
co_nw = tcore_plugin_ref_core_object(tcore_object_ref_plugin(o), CORE_OBJECT_TYPE_NETWORK);
tcore_network_get_access_technology(co_nw, &act);
- if( act >= NETWORK_ACT_IS95A && act <= NETWORK_ACT_EHRPD ){
- tcore_context_set_tech_preference(ps_context,CONTEXT_TECH_3GPP2);
- } else if ((act >= NETWORK_ACT_GSM && act <= NETWORK_ACT_GSM_UTRAN) || act == NETWORK_ACT_LTE){
- tcore_context_set_tech_preference(ps_context,CONTEXT_TECH_3GPP);
- } else {
- tcore_context_set_tech_preference(ps_context,CONTEXT_TECH_INVALID);
- err("Invalid tech preference");
- return TCORE_RETURN_FAILURE;
+ if (act >= NETWORK_ACT_IS95A && act <= NETWORK_ACT_EHRPD)
+ tcore_context_set_tech_preference(ps_context, CONTEXT_TECH_3GPP2);
+ else {
+ tcore_context_set_tech_preference(ps_context, CONTEXT_TECH_3GPP);
+ dbg("3GPP preference by default");
}
rv = _ps_is_duplicated_apn(o, ps_context);
return TCORE_RETURN_SUCCESS;
}
- if (tcore_context_get_id(ps_context) == 0) {
+ if (tcore_context_get_id(ps_context) == 0)
if (tcore_ps_assign_context_id(o, ps_context, 0) != TCORE_RETURN_SUCCESS)
return TCORE_RETURN_PS_CID_ERROR;
- }
dbg("contexts(%p), cid = %d", ps_context, tcore_context_get_id(ps_context));
- return po->ops->define_context(o, ps_context, user_data);
+ /* By 'default' considering Modem/CP opearations */
+ return po->ops[TCORE_OPS_TYPE_CP]->define_context(o, ps_context, user_data);
}
TReturn tcore_ps_activate_context(CoreObject *o, CoreObject *ps_context, void *user_data)
if (!po)
return TCORE_RETURN_EINVAL;
- if (!po->online) {
+ if (!po->online) {
dbg("ps network is not online !");
return TCORE_RETURN_PS_NETWORK_NOT_READY;
}
return TCORE_RETURN_EINVAL;
rv = _ps_is_active_context(o, ps_context);
- if (!rv)
- {
+ if (!rv) {
dbg("it is not defined context");
return TCORE_RETURN_EINVAL;
}
context_state = tcore_context_get_state(ps_context);
- if (context_state == CONTEXT_STATE_ACTIVATED){
+ if (context_state == CONTEXT_STATE_ACTIVATED) {
dbg("Context state : CONTEXT_STATE_ACTIVATED");
return TCORE_RETURN_SUCCESS;
- }
- else if (context_state == CONTEXT_STATE_ACTIVATING){
+ } else if (context_state == CONTEXT_STATE_ACTIVATING) {
dbg("Context state : CONTEXT_STATE_ACTIVATING");
return TCORE_RETURN_SUCCESS;
- }
- else if (context_state == CONTEXT_STATE_DEACTIVATING){
+ } else if (context_state == CONTEXT_STATE_DEACTIVATING) {
dbg("Context state : CONTEXT_STATE_DEACTIVATING");
return TCORE_RETURN_PS_DEACTIVATING;
}
dbg("cid = %d", tcore_context_get_id(ps_context));
tcore_context_set_state(ps_context, CONTEXT_STATE_ACTIVATING);
- rv = po->ops->activate_context(o, ps_context, user_data);
- if(rv != TCORE_RETURN_SUCCESS)
+
+ /* By 'default' considering Modem/CP opearations */
+ rv = po->ops[TCORE_OPS_TYPE_CP]->activate_context(o, ps_context, user_data);
+ if (rv != TCORE_RETURN_SUCCESS)
tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);
return rv;
}
context_state = tcore_context_get_state(ps_context);
- if (context_state == CONTEXT_STATE_DEACTIVATED){
+ if (context_state == CONTEXT_STATE_DEACTIVATED) {
dbg("Context State : CONTEXT_STATE_DEACTIVATED");
return TCORE_RETURN_SUCCESS;
- }
- else if (context_state == CONTEXT_STATE_DEACTIVATING){
+ } else if (context_state == CONTEXT_STATE_DEACTIVATING) {
dbg("Context State : CONTEXT_STATE_DEACTIVATING");
return TCORE_RETURN_SUCCESS;
- }
- else if (context_state == CONTEXT_STATE_ACTIVATING){
+ } else if (context_state == CONTEXT_STATE_ACTIVATING) {
dbg("Context State :CONTEXT_STATE_ACTIVATING");
return TCORE_RETURN_PS_ACTIVATING;
}
+
tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATING);
- rv = po->ops->deactivate_context(o, ps_context, user_data);
- if(rv != TCORE_RETURN_SUCCESS)
+ /* By 'default' considering Modem/CP opearations */
+ rv = po->ops[TCORE_OPS_TYPE_CP]->deactivate_context(o, ps_context, user_data);
+ if (rv != TCORE_RETURN_SUCCESS)
tcore_context_set_state(ps_context, CONTEXT_STATE_ACTIVATED);
return rv;
for (temp_index = 1; temp_index <= po->num_of_pdn; temp_index++) {
if (po->cid[temp_index].cid != 0) {
contexts = po->cid[temp_index].contexts;
- if(!contexts)
+ if (!contexts)
continue;
- g_slist_foreach (contexts, _deactivate_context, o);
+ g_slist_foreach(contexts, _deactivate_context, o);
}
}
for (temp_index = 1; temp_index <= po->num_of_pdn; temp_index++) {
if (po->cid[temp_index].cid != 0 && po->cid[temp_index].cid == cid) {
contexts = po->cid[temp_index].contexts;
- if(!contexts)
+ if (!contexts)
continue;
- g_slist_foreach (contexts, _deactivate_context, o);
+ g_slist_foreach(contexts, _deactivate_context, o);
}
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#include "co_sap.h"
struct private_object_data {
- struct tcore_sap_operations *ops;
+ struct tcore_sap_operations *ops[TCORE_OPS_TYPE_MAX];
};
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_sap_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_SAP, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_SAP_REQ_CONNECT:
- po = tcore_object_ref_object(o);
- if (!po->ops->connect)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_REQ_CONNECT:
+ tcore_check_null_ret_err("ops->connect",
+ ops->connect, TCORE_RETURN_ENOSYS);
- return po->ops->connect(o, ur);
- break;
+ return ops->connect(o, ur);
- case TREQ_SAP_REQ_DISCONNECT:
- if (!po->ops->disconnect)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_REQ_DISCONNECT:
+ tcore_check_null_ret_err("ops->disconnect",
+ ops->disconnect, TCORE_RETURN_ENOSYS);
- return po->ops->disconnect(o, ur);
- break;
+ return ops->disconnect(o, ur);
- case TREQ_SAP_REQ_STATUS:
- if (!po->ops->req_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_REQ_STATUS:
+ tcore_check_null_ret_err("ops->req_status",
+ ops->req_status, TCORE_RETURN_ENOSYS);
- return po->ops->req_status(o, ur);
- break;
+ return ops->req_status(o, ur);
- case TREQ_SAP_REQ_ATR:
- if (!po->ops->get_atr)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_REQ_ATR:
+ tcore_check_null_ret_err("ops->get_atr",
+ ops->get_atr, TCORE_RETURN_ENOSYS);
- return po->ops->get_atr(o, ur);
- break;
+ return ops->get_atr(o, ur);
- case TREQ_SAP_TRANSFER_APDU:
- if (!po->ops->transfer_apdu)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_TRANSFER_APDU:
+ tcore_check_null_ret_err("ops->transfer_apdu",
+ ops->transfer_apdu, TCORE_RETURN_ENOSYS);
- return po->ops->transfer_apdu(o, ur);
- break;
+ return ops->transfer_apdu(o, ur);
- case TREQ_SAP_SET_PROTOCOL:
- if (!po->ops->set_transport_protocol)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_SET_PROTOCOL:
+ tcore_check_null_ret_err("ops->set_transport_protocol",
+ ops->set_transport_protocol, TCORE_RETURN_ENOSYS);
- return po->ops->set_transport_protocol(o, ur);
- break;
+ return ops->set_transport_protocol(o, ur);
- case TREQ_SAP_SET_POWER:
- if (!po->ops->set_power)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_SET_POWER:
+ tcore_check_null_ret_err("ops->set_power",
+ ops->set_power, TCORE_RETURN_ENOSYS);
- return po->ops->set_power(o, ur);
- break;
+ return ops->set_power(o, ur);
- case TREQ_SAP_REQ_CARDREADERSTATUS:
- if (!po->ops->get_cardreader_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAP_REQ_CARDREADERSTATUS:
+ tcore_check_null_ret_err("ops->get_cardreader_status",
+ ops->get_cardreader_status, TCORE_RETURN_ENOSYS);
- return po->ops->get_cardreader_status(o, ur);
- break;
+ return ops->get_cardreader_status(o, ur);
- default:
- break;
+ default:
+ break;
}
- return TCORE_RETURN_SUCCESS;
-}
-
-static void _clone_hook(CoreObject *src, CoreObject *dest)
-{
- struct private_object_data *src_po = NULL;
- struct private_object_data *dest_po = NULL;
- if (!src || !dest)
- return;
-
- dest_po = calloc(1, sizeof(struct private_object_data));
- if (!dest_po) {
- tcore_object_link_object(dest, NULL);
- return;
- }
-
- src_po = tcore_object_ref_object(src);
- dest_po->ops = src_po->ops;
-
- tcore_object_link_object(dest, dest_po);
+ return TCORE_RETURN_SUCCESS;
}
static void _free_hook(CoreObject *o)
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_SAP);
tcore_object_link_object(o, po);
tcore_object_set_free_hook(o, _free_hook);
- tcore_object_set_clone_hook(o, _clone_hook);
tcore_object_set_dispatcher(o, _dispatcher);
return o;
tcore_object_free(o);
}
-void tcore_sap_set_ops(CoreObject *o, struct tcore_sap_operations *ops)
+void tcore_sap_set_ops(CoreObject *o, struct tcore_sap_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_SAP);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
-}
\ No newline at end of file
+ po->ops[ops_type] = ops;
+}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#include "util.h"
#include "co_sat.h"
-#define SATK_PROACTIVE_CMD_TAG 0xD0 /*Proactive Command Tag*/
-#define SATK_MENU_SELECTION_TAG 0xD3 /*Menu Selection Tag*/
-#define SATK_EVENT_DOWNLOAD_TAG 0xD6 /*Event Download Tag*/
-
-/*Tag Values (without Comprehension bit)*/
-#define SATK_COMMAND_DETAILS_TAG 0x01 /* COMMAND DETAILS TAG */
-#define SATK_DEVICE_IDENTITY_TAG 0x02 /* DEVICE IDENTITY TAG */
-#define SATK_RESULT_TAG 0x03 /* RESULT TAG */
-#define SATK_DURATION_TAG 0x04 /* DURATION TAG */
-#define SATK_ALPHA_IDENTIFIER_TAG 0x05 /* ALPHA IDENTIFIER TAG */
-#define SATK_ADDRESS_TAG 0x06 /* ADDRESS TAG */
+#define SATK_PROACTIVE_CMD_TAG 0xD0 /* Proactive Command Tag */
+#define SATK_MENU_SELECTION_TAG 0xD3 /* Menu Selection Tag */
+#define SATK_EVENT_DOWNLOAD_TAG 0xD6 /* Event Download Tag */
+
+/*
+ * Tag Values (without Comprehension bit)
+ */
+#define SATK_COMMAND_DETAILS_TAG 0x01 /* COMMAND DETAILS TAG */
+#define SATK_DEVICE_IDENTITY_TAG 0x02 /* DEVICE IDENTITY TAG */
+#define SATK_RESULT_TAG 0x03 /* RESULT TAG */
+#define SATK_DURATION_TAG 0x04 /* DURATION TAG */
+#define SATK_ALPHA_IDENTIFIER_TAG 0x05 /* ALPHA IDENTIFIER TAG */
+#define SATK_ADDRESS_TAG 0x06 /* ADDRESS TAG */
#define SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG 0x07 /* CAPABILITY CONFIGURATION PARAMETERS TAG */
-#define SATK_SUB_ADDRESS_TAG 0x08 /* SUB ADDRESS TAG */
-#define SATK_SS_STRING_TAG 0x09 /* SS STRING TAG */
-#define SATK_USSD_STRING_TAG 0x0A /* USSD STRING TAG */
-#define SATK_SMS_TPDU_TAG 0x0B /* SMS TPDU TAG */
-#define SATK_CELL_BROADCAST_PAGE_TAG 0x0C /* CELL BROADCAST PAGE TAG */
-#define SATK_TEXT_STRING_TAG 0x0D /* TEXT STRING TAG */
-#define SATK_TONE_TAG 0x0E /* TONE TAG */
-#define SATK_ITEM_TAG 0x0F /* ITEM TAG */
-#define SATK_ITEM_IDENTIFIER_TAG 0x10 /* ITEM IDENTIFIER TAG */
-#define SATK_RESPONSE_LENGTH_TAG 0x11 /* RESPONSE LENGTH TAG */
-#define SATK_FILE_LIST_TAG 0x12 /* FILE LIST TAG */
-#define SATK_LOCATION_INFORMATION_TAG 0x13 /* LOCATION INFORMATION TAG */
-#define SATK_IMEI_TAG 0x14 /* IMEI TAG */
-#define SATK_HELP_REQUEST_TAG 0x15 /* HELP REQUEST TAG */
+#define SATK_SUB_ADDRESS_TAG 0x08 /* SUB ADDRESS TAG */
+#define SATK_SS_STRING_TAG 0x09 /* SS STRING TAG */
+#define SATK_USSD_STRING_TAG 0x0A /* USSD STRING TAG */
+#define SATK_SMS_TPDU_TAG 0x0B /* SMS TPDU TAG */
+#define SATK_CELL_BROADCAST_PAGE_TAG 0x0C /* CELL BROADCAST PAGE TAG */
+#define SATK_TEXT_STRING_TAG 0x0D /* TEXT STRING TAG */
+#define SATK_TONE_TAG 0x0E /* TONE TAG */
+#define SATK_ITEM_TAG 0x0F /* ITEM TAG */
+#define SATK_ITEM_IDENTIFIER_TAG 0x10 /* ITEM IDENTIFIER TAG */
+#define SATK_RESPONSE_LENGTH_TAG 0x11 /* RESPONSE LENGTH TAG */
+#define SATK_FILE_LIST_TAG 0x12 /* FILE LIST TAG */
+#define SATK_LOCATION_INFORMATION_TAG 0x13 /* LOCATION INFORMATION TAG */
+#define SATK_IMEI_TAG 0x14 /* IMEI TAG */
+#define SATK_HELP_REQUEST_TAG 0x15 /* HELP REQUEST TAG */
#define SATK_NETWORK_MEASUREMENT_RESULTS_TAG 0x16 /* NETWORK MEASUREMENT RESULTS TAG */
-#define SATK_DEFAULT_TEXT_TAG 0x17 /* DEFAULT TEXT TAG */
+#define SATK_DEFAULT_TEXT_TAG 0x17 /* DEFAULT TEXT TAG */
#define SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG 0x18 /* ITEMS NEXT ACTION INDICATOR TAG */
-#define SATK_EVENT_LIST_TAG 0x19 /* EVENT LIST TAG */
-#define SATK_CAUSE_TAG 0x1A /* CAUSE TAG */
-#define SATK_LOCATION_STATUS_TAG 0x1B /* LOCATION STATUS TAG */
-#define SATK_BCCH_CHANNEL_LIST_TAG 0x1D /* BCCH CHANNEL LIST TAG */
-#define SATK_ICON_IDENTIFIER_TAG 0x1E /* ICON IDENTIFIER TAG */
-#define SATK_ITEM_ICON_IDENTIFIER_LIST_TAG 0x1F /* ITEM ICON IDENTIFIER LIST TAG */
-#define SATK_DATE_TIME_AND_TIME_ZONE_TAG 0x26 /* DATE TIME AND TIME ZONE TAG */
+#define SATK_EVENT_LIST_TAG 0x19 /* EVENT LIST TAG */
+#define SATK_CAUSE_TAG 0x1A /* CAUSE TAG */
+#define SATK_LOCATION_STATUS_TAG 0x1B /* LOCATION STATUS TAG */
+#define SATK_BCCH_CHANNEL_LIST_TAG 0x1D /* BCCH CHANNEL LIST TAG */
+#define SATK_ICON_IDENTIFIER_TAG 0x1E /* ICON IDENTIFIER TAG */
+#define SATK_ITEM_ICON_IDENTIFIER_LIST_TAG 0x1F /* ITEM ICON IDENTIFIER LIST TAG */
+#define SATK_DATE_TIME_AND_TIME_ZONE_TAG 0x26 /* DATE TIME AND TIME ZONE TAG */
#define SATK_CALL_CONTROL_REQUESTED_ACTION_TAG 0x27 /* CALL CONTROL REQUESTED ACTION TAG */
-#define SATK_AT_COMMAND_TAG 0x28 /* AT COMMAND TAG */
-#define SATK_AT_RESPONSE_TAG 0x29 /* AT RESPONSE TAG */
-#define SATK_BC_REPEAT_INDICATOR_TAG 0x2A /* BC REPEAT INDICATOR TAG */
-#define SATK_IMMEDIATE_RESPONSE_TAG 0x2B /* IMMEDIATE RESPONSE TAG */
-#define SATK_DTMF_STRING_TAG 0x2C /* DTMF STRING TAG */
-#define SATK_LANGUAGE_TAG 0x2D /* LANGUAGE TAG */
-#define SATK_BROWSER_IDENTITY_TAG 0x30 /* BROWSER IDENTITY TAG */
-#define SATK_URL_TAG 0x31 /* URL TAG */
-#define SATK_BEARER_TAG 0x32 /* BEARER TAG */
-#define SATK_PROVISIONING_REF_FILE_TAG 0x33 /* PROVISIONING REFERENCE FILE TAG */
-#define SATK_BROWSER_TERMINATION_CAUSE_TAG 0x34 /* BROWSER TERMINATION CAUSE TAG */
-#define SATK_BEARER_DISCRIPTION_TAG 0x35 /* BEARER DISCRIPTION TAG */
-#define SATK_CHANNEL_DATA_TAG 0x36 /* CHANNEL DATA TAG */
-#define SATK_CHANNEL_DATA_LEN_TAG 0x37 /* CHANNEL DATA LEN TAG */
-#define SATK_CHANNEL_STATUS_TAG 0x38 /* CHANNEL STATUS TAG */
-#define SATK_BUFFER_SIZE_TAG 0x39 /* BUFFER SIZE TAG */
-#define SATK_CARD_READER_IDENTIFIER_TAG 0x3A /* CARD READER IDENTIFIER TAG */
+#define SATK_AT_COMMAND_TAG 0x28 /* AT COMMAND TAG */
+#define SATK_AT_RESPONSE_TAG 0x29 /* AT RESPONSE TAG */
+#define SATK_BC_REPEAT_INDICATOR_TAG 0x2A /* BC REPEAT INDICATOR TAG */
+#define SATK_IMMEDIATE_RESPONSE_TAG 0x2B /* IMMEDIATE RESPONSE TAG */
+#define SATK_DTMF_STRING_TAG 0x2C /* DTMF STRING TAG */
+#define SATK_LANGUAGE_TAG 0x2D /* LANGUAGE TAG */
+#define SATK_BROWSER_IDENTITY_TAG 0x30 /* BROWSER IDENTITY TAG */
+#define SATK_URL_TAG 0x31 /* URL TAG */
+#define SATK_BEARER_TAG 0x32 /* BEARER TAG */
+#define SATK_PROVISIONING_REF_FILE_TAG 0x33 /* PROVISIONING REFERENCE FILE TAG */
+#define SATK_BROWSER_TERMINATION_CAUSE_TAG 0x34 /* BROWSER TERMINATION CAUSE TAG */
+#define SATK_BEARER_DISCRIPTION_TAG 0x35 /* BEARER DISCRIPTION TAG */
+#define SATK_CHANNEL_DATA_TAG 0x36 /* CHANNEL DATA TAG */
+#define SATK_CHANNEL_DATA_LEN_TAG 0x37 /* CHANNEL DATA LEN TAG */
+#define SATK_CHANNEL_STATUS_TAG 0x38 /* CHANNEL STATUS TAG */
+#define SATK_BUFFER_SIZE_TAG 0x39 /* BUFFER SIZE TAG */
+#define SATK_CARD_READER_IDENTIFIER_TAG 0x3A /* CARD READER IDENTIFIER TAG */
#define SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG 0x3C /* USIM ME INTERFACE TRANSPORT LEVEL */
-#define SATK_OTHER_ADDRESS_TAG 0x3E /* OTHER ADDRESS */
-#define SATK_NETWORK_ACCESS_TAG 0x47 /* NETWORK ACCESS NAME TAG */
-#define SATK_CDMA_SMS_TPDU_TAG 0x48 /* CDMA SMS TPDU TAG */
-#define SATK_REMOTE_ENTITY_ADDRESS_TAG 0x49 /* REMOTE ENTITY ADDRESS TAG */
-#define SATK_TEXT_ATTRIBUTE_TAG 0x50 /* TEXT ATTRIBUTE TAG */
-#define SATK_TEXT_ATTRIBUTE_LIST_TAG 0x51 /* TEXT ATTRIBUTE LIST TAG */
+#define SATK_OTHER_ADDRESS_TAG 0x3E /* OTHER ADDRESS */
+#define SATK_NETWORK_ACCESS_TAG 0x47 /* NETWORK ACCESS NAME TAG */
+#define SATK_CDMA_SMS_TPDU_TAG 0x48 /* CDMA SMS TPDU TAG */
+#define SATK_REMOTE_ENTITY_ADDRESS_TAG 0x49 /* REMOTE ENTITY ADDRESS TAG */
+#define SATK_TEXT_ATTRIBUTE_TAG 0x50 /* TEXT ATTRIBUTE TAG */
+#define SATK_TEXT_ATTRIBUTE_LIST_TAG 0x51 /* TEXT ATTRIBUTE LIST TAG */
/* general data object lengths */
-#define SATK_DCS_LENGTH 0x01
-#define SATK_COMMAND_DETAILS_LENGTH 0x03 /* COMMAND DETAILS LENGTH */
-#define SATK_DEVICE_IDENTITY_LENGTH 0x02 /* DEVICE IDENTITY LENGTH */
-#define SATK_ICON_IDENTITY_LENGTH 0x02 /* ICON IDENTITY LENGTH */
-#define SATK_DURATION_LENGTH 0x02 /* DURATION LENGTH */
-#define SATK_ITEM_IDENTIFIER_LENGTH 0x01 /* ITEM IDENTIFIER LENGTH */
-#define SATK_LOCATION_INFORMATION_LENGTH 0x07 /* LOCATION INFORMATION LENGTH */
-#define SATK_HELP_REQUEST_LENGTH 0x00 /* HELP REQUEST LENGTH */
-#define SATK_LOCATION_STATUS_LENGTH 0x01 /* LOCATION STATUS LENGTH */
-#define SATK_DATE_TIME_AND_TIME_ZONE_LENGTH 0x07 /* DATE TIME AND TIME ZONE LENGTH */
-#define SATK_LANGUAGE_LENGTH 0x02 /* LANGUAGE LENGTH */
-#define SATK_BC_REPEAT_IND_LENGTH 0x01 /* BC REPEAT INDICATION LENGTH */
-#define SATK_RESPONSE_LENGTH_LENGTH 0x02 /* RESPONSE LENGTH LENGTH */
-#define SATK_TONE_LENGTH 0x01 /* TONE LENGTH */
-#define SATK_BROWSER_ID_LENGTH 0x01 /* BROWSER ID LENGTH */
-#define SATK_BROWSER_TERMINATION_CAUSE_LENGTH 0x01 /* BROWSER TERMINATION CAUSE LENGTH */
-#define SATK_BUFFER_SIZE_LENGTH 0x02 /* BUFFER SIZE LENGTH */
+#define SATK_DCS_LENGTH 0x01
+#define SATK_COMMAND_DETAILS_LENGTH 0x03 /* COMMAND DETAILS LENGTH */
+#define SATK_DEVICE_IDENTITY_LENGTH 0x02 /* DEVICE IDENTITY LENGTH */
+#define SATK_ICON_IDENTITY_LENGTH 0x02 /* ICON IDENTITY LENGTH */
+#define SATK_DURATION_LENGTH 0x02 /* DURATION LENGTH */
+#define SATK_ITEM_IDENTIFIER_LENGTH 0x01 /* ITEM IDENTIFIER LENGTH */
+#define SATK_LOCATION_INFORMATION_LENGTH 0x07 /* LOCATION INFORMATION LENGTH */
+#define SATK_HELP_REQUEST_LENGTH 0x00 /* HELP REQUEST LENGTH */
+#define SATK_LOCATION_STATUS_LENGTH 0x01 /* LOCATION STATUS LENGTH */
+#define SATK_DATE_TIME_AND_TIME_ZONE_LENGTH 0x07 /* DATE TIME AND TIME ZONE LENGTH */
+#define SATK_LANGUAGE_LENGTH 0x02 /* LANGUAGE LENGTH */
+#define SATK_BC_REPEAT_IND_LENGTH 0x01 /* BC REPEAT INDICATION LENGTH */
+#define SATK_RESPONSE_LENGTH_LENGTH 0x02 /* RESPONSE LENGTH LENGTH */
+#define SATK_TONE_LENGTH 0x01 /* TONE LENGTH */
+#define SATK_BROWSER_ID_LENGTH 0x01 /* BROWSER ID LENGTH */
+#define SATK_BROWSER_TERMINATION_CAUSE_LENGTH 0x01 /* BROWSER TERMINATION CAUSE LENGTH */
+#define SATK_BUFFER_SIZE_LENGTH 0x02 /* BUFFER SIZE LENGTH */
#define SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH 0x03 /* UICC TERMINAL TRANSPORT INTERFACE LEVEL LENGTH */
#define SATK_CHANNEL_DATA_LENGTH_VALUE_LENGTH 0x01 /* CHANNEL DATA LENGTH VALUE LENGTH */
-#define SATK_CHANNEL_STATUS_LENGTH 0x02 /* CHANNEL STATUS LENGTH */
+#define SATK_CHANNEL_STATUS_LENGTH 0x02 /* CHANNEL STATUS LENGTH */
struct private_object_data {
- struct tcore_sat_operations *ops;
+ struct tcore_sat_operations *ops[TCORE_OPS_TYPE_MAX];
};
gboolean b_comprehensive = FALSE;
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_sat_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_SAT, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_SAT_REQ_ENVELOPE:
- if (!po->ops->envelope)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAT_REQ_ENVELOPE:
+ tcore_check_null_ret_err("ops->envelope",
+ ops->envelope, TCORE_RETURN_ENOSYS);
- return po->ops->envelope(o, ur);
- break;
+ return ops->envelope(o, ur);
- case TREQ_SAT_REQ_TERMINALRESPONSE:
- if (!po->ops->terminal_response)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAT_REQ_TERMINALRESPONSE:
+ tcore_check_null_ret_err("ops->terminal_response",
+ ops->terminal_response, TCORE_RETURN_ENOSYS);
- return po->ops->terminal_response(o, ur);
- break;
+ return ops->terminal_response(o, ur);
- case TREQ_SAT_REQ_USERCONFIRMATION:
- if (!po->ops->user_confirmation)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SAT_REQ_USERCONFIRMATION:
+ tcore_check_null_ret_err("ops->user_confirmation",
+ ops->user_confirmation, TCORE_RETURN_ENOSYS);
- return po->ops->user_confirmation(o, ur);
- break;
+ return ops->user_confirmation(o, ur);
- default:
- break;
+ default:
+ break;
}
return TCORE_RETURN_SUCCESS;
}
-static void _clone_hook(CoreObject *src, CoreObject *dest)
-{
- struct private_object_data *src_po = NULL;
- struct private_object_data *dest_po = NULL;
-
- if (!src || !dest)
- return;
-
- dest_po = calloc(1, sizeof(struct private_object_data));
- if (!dest_po) {
- tcore_object_link_object(dest, NULL);
- return;
- }
-
- src_po = tcore_object_ref_object(src);
- dest_po->ops = src_po->ops;
-
- tcore_object_link_object(dest, dest_po);
-}
-
static void _free_hook(CoreObject *o)
{
struct private_object_data *po = NULL;
static gboolean _check_file_for_refresh(enum tel_sim_file_id file_id)
{
int i;
- enum tel_sim_file_id ef_under_mf[3] = { SIM_EF_DIR, SIM_EF_ELP, SIM_EF_ICCID };
+ enum tel_sim_file_id ef_under_mf[3] = {SIM_EF_DIR, SIM_EF_ELP, SIM_EF_ICCID};
enum tel_sim_file_id ef_under_df[29] = {
- SIM_EF_IMSI, SIM_EF_SST,
- SIM_EF_EST, SIM_EF_OPLMN_ACT,
+ SIM_EF_IMSI, SIM_EF_SST,
+ SIM_EF_EST, SIM_EF_OPLMN_ACT,
SIM_EF_GID1, SIM_EF_GID2,
SIM_EF_LP, SIM_EF_ECC,
- SIM_EF_SPN, SIM_EF_SPDI,
- SIM_EF_PNN, SIM_EF_OPL,
- SIM_EF_MBDN, SIM_EF_MSISDN,
+ SIM_EF_SPN, SIM_EF_SPDI,
+ SIM_EF_PNN, SIM_EF_OPL,
+ SIM_EF_MBDN, SIM_EF_MSISDN,
SIM_EF_USIM_MBI, SIM_EF_USIM_MWIS,
- SIM_EF_USIM_CFIS, SIM_EF_CPHS_VOICE_MSG_WAITING,
+ SIM_EF_USIM_CFIS, SIM_EF_CPHS_VOICE_MSG_WAITING,
SIM_EF_CPHS_SERVICE_STRING_TABLE, SIM_EF_CPHS_CALL_FORWARD_FLAGS,
- SIM_EF_CPHS_OPERATOR_NAME_STRING, SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE,
- SIM_EF_CPHS_CPHS_INFO, SIM_EF_CPHS_MAILBOX_NUMBERS,
+ SIM_EF_CPHS_OPERATOR_NAME_STRING, SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE,
+ SIM_EF_CPHS_CPHS_INFO, SIM_EF_CPHS_MAILBOX_NUMBERS,
SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING, SIM_EF_CPHS_INFORMATION_NUMBERS,
SIM_EF_CPHS_DYNAMICFLAGS, SIM_EF_CPHS_DYNAMIC2FLAG,
- SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2 };
+ SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2};
dbg("[SAT] SAT PARSER - FILE ID=0x%04x", (unsigned int)file_id);
- if( (file_id & 0x2F00) == 0x2F00 )
- {
- dbg("[SAT] SAT PARSER - MF, EF=0x%04x",file_id);
- for(i=0;i<3;i++){
- if(file_id == ef_under_mf[i]){
+ if ((file_id & 0x2F00) == 0x2F00) {
+ dbg("[SAT] SAT PARSER - MF, EF=0x%04x", file_id);
+ for (i = 0; i < 3; i++) {
+ if (file_id == ef_under_mf[i]) {
dbg("[SAT] SAT PARSER - MATCH!");
return TRUE;
}
}
- }
- else if( (file_id & 0x6F00) == 0x6F00)
- {
- dbg("[SAT] SAT PARSER - ADF_USIM EF=0x%04x",file_id);
- for(i=0;i<29;i++){
- if(file_id == ef_under_df[i]){
+ } else if ((file_id & 0x6F00) == 0x6F00) {
+ dbg("[SAT] SAT PARSER - ADF_USIM EF=0x%04x", file_id);
+ for (i = 0; i < 29; i++) {
+ if (file_id == ef_under_df[i]) {
dbg("[SAT] SAT PARSER - MATCH!");
return TRUE;
}
}
}
+
return FALSE;
}
static int _get_length_filed_size(unsigned char firstLenByte)
{
- if (firstLenByte <= 0x7F) return 1;
- else if (firstLenByte == 0x81) return 2;
- else return 0; //return zero, as the length field can only be 1 or 2.
+ if (firstLenByte <= 0x7F)
+ return 1;
+ else if (firstLenByte == 0x81)
+ return 2;
+ else
+ return 0; /* return zero, as the length field can only be 1 or 2. */
}
-static void _get_string_data(unsigned char* src, int len,
- struct tel_sat_text_string_object *text_obj)
+static void _get_string_data(unsigned char *src, int len,
+ struct tel_sat_text_string_object *text_obj)
{
if (!src || !text_obj) return;
switch (text_obj->dcs.a_format) {
- case ALPHABET_FORMAT_SMS_DEFAULT: {
- char* unpacked_str;
+ case ALPHABET_FORMAT_SMS_DEFAULT: {
+ char *unpacked_str;
- text_obj->string_length = 0;
- unpacked_str = (char *)tcore_util_unpack_gsm7bit(src, (unsigned int)len);
- if (!unpacked_str) return;
+ text_obj->string_length = 0;
+ unpacked_str = (char *)tcore_util_unpack_gsm7bit(src, (unsigned int)len);
+ if (!unpacked_str)
+ return;
- text_obj->dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
- text_obj->string_length = strlen(unpacked_str);
+ text_obj->dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
+ text_obj->string_length = strlen(unpacked_str);
- if (text_obj->string_length >= SAT_TEXT_STRING_LEN_MAX) {
- text_obj->string_length = SAT_TEXT_STRING_LEN_MAX;
- memcpy(text_obj->string, unpacked_str, SAT_TEXT_STRING_LEN_MAX);
- text_obj->string[SAT_TEXT_STRING_LEN_MAX] = 0x00;
- }
- else {
- memcpy(text_obj->string, unpacked_str, text_obj->string_length);
- text_obj->string[text_obj->string_length] = 0x00;
- }
+ if (text_obj->string_length >= SAT_TEXT_STRING_LEN_MAX) {
+ text_obj->string_length = SAT_TEXT_STRING_LEN_MAX;
+ memcpy(text_obj->string, unpacked_str, SAT_TEXT_STRING_LEN_MAX);
+ text_obj->string[SAT_TEXT_STRING_LEN_MAX] = 0x00;
+ } else {
+ memcpy(text_obj->string, unpacked_str, text_obj->string_length);
+ text_obj->string[text_obj->string_length] = 0x00;
+ }
- g_free(unpacked_str);
- }break;
- case ALPHABET_FORMAT_UCS2:
- case ALPHABET_FORMAT_8BIT_DATA: {
- text_obj->string_length = len;
- if (text_obj->string_length >= SAT_TEXT_STRING_LEN_MAX) {
- text_obj->string_length = SAT_TEXT_STRING_LEN_MAX;
- memcpy(text_obj->string, src, SAT_TEXT_STRING_LEN_MAX);
- text_obj->string[SAT_TEXT_STRING_LEN_MAX] = 0x00;
- }
- else {
- memcpy(text_obj->string, src, text_obj->string_length);
- text_obj->string[text_obj->string_length+1] = 0x00;
- }
- }break;
- default: {
- dbg("[SAT] SAT PARSER - Unknown alphabet format(%d)", text_obj->dcs.a_format);
- }break;
+ g_free(unpacked_str);
}
+ break;
- return;
+ case ALPHABET_FORMAT_UCS2:
+ case ALPHABET_FORMAT_8BIT_DATA: {
+ text_obj->string_length = len;
+ if (text_obj->string_length >= SAT_TEXT_STRING_LEN_MAX) {
+ text_obj->string_length = SAT_TEXT_STRING_LEN_MAX;
+ memcpy(text_obj->string, src, SAT_TEXT_STRING_LEN_MAX);
+ text_obj->string[SAT_TEXT_STRING_LEN_MAX] = 0x00;
+ } else {
+ memcpy(text_obj->string, src, text_obj->string_length);
+ text_obj->string[text_obj->string_length + 1] = 0x00;
+ }
+ }
+ break;
+
+ default: {
+ dbg("[SAT] SAT PARSER - Unknown alphabet format(%d)", text_obj->dcs.a_format);
+ }
+ break;
+ }
}
-static void _sat_decode_dcs(unsigned char dcs, struct data_coding_scheme* dsc_obj)
+static void _sat_decode_dcs(unsigned char dcs, struct data_coding_scheme *dsc_obj)
{
dbg("[SAT] SAT PARSER - dcs=[0x%x]", dcs);
dsc_obj->raw_dcs = dcs;
- //bit 5 of DCS byte will tell us if the text is compressed or not.
+ /* bit 5 of DCS byte will tell us if the text is compressed or not. */
if (dcs & 0x20)
dsc_obj->is_compressed_format = TRUE;
else
dsc_obj->is_compressed_format = FALSE;
- //bit 4 when set, indicates that bits 0 & 1 have message class meaning.
+ /* bit 4 when set, indicates that bits 0 & 1 have message class meaning. */
dsc_obj->m_class = MSG_CLASS_NONE;
if (dcs & 0x10) {
switch (dcs & 0x03) {
- case 0x00:
- dsc_obj->m_class = MSG_CLASS_0;
- break;
- case 0x01:
- dsc_obj->m_class = MSG_CLASS_1;
- break;
- case 0x02:
- dsc_obj->m_class = MSG_CLASS_2;
- break;
- case 0x03:
- dsc_obj->m_class = MSG_CLASS_3;
- break;
- default:
- err("invalid dcs type");
- break;
+ case 0x00:
+ dsc_obj->m_class = MSG_CLASS_0;
+ break;
+
+ case 0x01:
+ dsc_obj->m_class = MSG_CLASS_1;
+ break;
+
+ case 0x02:
+ dsc_obj->m_class = MSG_CLASS_2;
+ break;
+
+ case 0x03:
+ dsc_obj->m_class = MSG_CLASS_3;
+ break;
+
+ default:
+ err("invalid dcs type");
+ break;
}
}
- /*bits 2 & 3 indicate the character set being used*/
+ /* bits 2 & 3 indicate the character set being used */
switch (dcs & 0x0C) {
- case 0x00:
- case 0x0C:
- dsc_obj->a_format = ALPHABET_FORMAT_SMS_DEFAULT;
- break;
+ case 0x00:
+ case 0x0C:
+ dsc_obj->a_format = ALPHABET_FORMAT_SMS_DEFAULT;
+ break;
- case 0x04:
- dsc_obj->a_format = ALPHABET_FORMAT_8BIT_DATA;
- break;
+ case 0x04:
+ dsc_obj->a_format = ALPHABET_FORMAT_8BIT_DATA;
+ break;
- case 0X08:
- dsc_obj->a_format = ALPHABET_FORMAT_UCS2;
- break;
+ case 0X08:
+ dsc_obj->a_format = ALPHABET_FORMAT_UCS2;
+ break;
- default:
- dsc_obj->a_format = ALPHABET_FORMAT_RESERVED;
- break;
+ default:
+ dsc_obj->a_format = ALPHABET_FORMAT_RESERVED;
+ break;
}
dbg("[SAT] SAT PARSER - is_compressed_format(%d), msgClass(0x%x), alpha_format(0x%x)",
- dsc_obj->is_compressed_format, dsc_obj->m_class, dsc_obj->a_format);
-
- return;
+ dsc_obj->is_compressed_format, dsc_obj->m_class, dsc_obj->a_format);
}
static void _sat_decode_ton_npi(unsigned char ton_npi, enum type_of_number *ton, enum numbering_plan_identifier *npi)
int ton_value = 0;
int npi_value = 0;
- if(!ton || !npi)
+ if (!ton || !npi)
return;
ton_value = (ton_npi & 0x70) >> 4;
*ton = ton_value;
- if(*ton > TON_NETWORK_SPECIFIC)
+ if (*ton > TON_NETWORK_SPECIFIC)
*ton = TON_RESERVED_FOR_EXT;
npi_value = (ton_npi & 0x0F);
- switch(npi_value){
- case NPI_ISDN_TEL:
- case NPI_DATA_NUMBERING_PLAN:
- case NPI_TELEX:
- case NPI_PRIVATE:
- case NPI_RESERVED_FOR_EXT:
- *npi = npi_value;
- break;
- default:
- *npi = NPI_UNKNOWN;
- break;
+ switch (npi_value) {
+ case NPI_ISDN_TEL:
+ case NPI_DATA_NUMBERING_PLAN:
+ case NPI_TELEX:
+ case NPI_PRIVATE:
+ case NPI_RESERVED_FOR_EXT:
+ *npi = npi_value;
+ break;
+
+ default:
+ *npi = NPI_UNKNOWN;
+ break;
}
dbg("[SAT] SAT PATSER - ton(0x%x) npi(0x%x)", *ton, *npi);
- return;
}
static enum tel_sim_language_type _sat_decode_language(unsigned char byte1, unsigned char byte2)
{
- if((byte1 == 'e')&&(byte2 == 'n')){
+ if ((byte1 == 'e') && (byte2 == 'n'))
return SIM_LANG_ENGLISH;
- } else if((byte1 == 'd')&&(byte2 == 'e')){
+ else if ((byte1 == 'd') && (byte2 == 'e'))
return SIM_LANG_GERMAN;
- } else if((byte1 == 'i')&&(byte2 == 't')){
+ else if ((byte1 == 'i') && (byte2 == 't'))
return SIM_LANG_ITALIAN;
- } else if((byte1 == 'f')&&(byte2 == 'r')){
+ else if ((byte1 == 'f') && (byte2 == 'r'))
return SIM_LANG_FRENCH;
- } else if((byte1 == 'e')&&(byte2 == 's')){
+ else if ((byte1 == 'e') && (byte2 == 's'))
return SIM_LANG_SPANISH;
- } else if((byte1 == 'n')&&(byte2 == 'l')){
+ else if ((byte1 == 'n') && (byte2 == 'l'))
return SIM_LANG_DUTCH;
- } else if((byte1 == 's')&&(byte2 == 'v')){
+ else if ((byte1 == 's') && (byte2 == 'v'))
return SIM_LANG_SWEDISH;
- } else if((byte1 == 'd')&&(byte2 == 'a')){
+ else if ((byte1 == 'd') && (byte2 == 'a'))
return SIM_LANG_DANISH;
- } else if((byte1 == 'p')&&(byte2 == 't')){
+ else if ((byte1 == 'p') && (byte2 == 't'))
return SIM_LANG_PORTUGUESE;
- } else if((byte1 == 'f')&&(byte2 == 'i')){
+ else if ((byte1 == 'f') && (byte2 == 'i'))
return SIM_LANG_FINNISH;
- } else if((byte1 == 'n')&&(byte2 == 'o')){
+ else if ((byte1 == 'n') && (byte2 == 'o'))
return SIM_LANG_NORWEGIAN;
- } else if((byte1 == 'e')&&(byte2 == 'l')){
+ else if ((byte1 == 'e') && (byte2 == 'l'))
return SIM_LANG_GREEK;
- } else if((byte1 == 't')&&(byte2 == 'r')){
+ else if ((byte1 == 't') && (byte2 == 'r'))
return SIM_LANG_TURKISH;
- } else if((byte1 == 'h')&&(byte2 == 'u')){
+ else if ((byte1 == 'h') && (byte2 == 'u'))
return SIM_LANG_HUNGARIAN;
- } else if((byte1 == 'p')&&(byte2 == 'i')){
+ else if ((byte1 == 'p') && (byte2 == 'i'))
return SIM_LANG_POLISH;
- } else {
+ else {
dbg("[SAT] SAT PARSER - unknown language, default to english.");
return SIM_LANG_ENGLISH;
}
/*
* Decode TLV data object
*/
-static enum tcore_sat_result _sat_decode_address_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_address* address_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_address_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_address *address_obj, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index, len_of_len = 0;
int address_len = 0;
gboolean comprehensive_req = FALSE;
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
if ((src_data[temp_index] & 0x7F) != SATK_ADDRESS_TAG) {
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //comprehensive required
- if((src_data[temp_index++] & 0x80))
+ /* comprehensive required */
+ if ((src_data[temp_index++] & 0x80))
comprehensive_req = TRUE;
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- address_len = src_data[temp_index + len_of_len - 1];
+ address_len = src_data[temp_index + len_of_len - 1];
- //check the address length
+ /* check the address length */
temp_index += len_of_len;
- if ((temp_index + address_len) > tlv_len) {
+ if ((temp_index + address_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
address_obj->dialing_number_len = 0;
- if(address_len > 1){
- char* str_ascii = NULL;
+ if (address_len > 1) {
+ char *str_ascii = NULL;
_sat_decode_ton_npi(src_data[temp_index++], &address_obj->ton, &address_obj->npi);
- str_ascii = tcore_util_convert_bcd2ascii((const char*)&src_data[temp_index], address_len-1, SAT_DIALING_NUMBER_LEN_MAX);
- if(str_ascii){
+ str_ascii = tcore_util_convert_bcd2ascii((const char *)&src_data[temp_index], address_len - 1, SAT_DIALING_NUMBER_LEN_MAX);
+ if (str_ascii) {
memcpy(address_obj->dialing_number, str_ascii, strlen(str_ascii));
address_obj->dialing_number_len = strlen(str_ascii);
g_free(str_ascii);
}
}
- if(address_obj->dialing_number_len == 0){
- if(comprehensive_req){
+ if (address_obj->dialing_number_len == 0) {
+ if (comprehensive_req) {
err("[SAT] SAT PARSER - incorrect address");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
+
dbg("comprehensive partial proactive command");
- //global variable (comprehensive_partial= TRUE)
+ /* global variable (comprehensive_partial= TRUE) */
}
- *consumed_data_len = 1 + len_of_len + address_len;
+ *consumed_data_len = 1 + len_of_len + address_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_subaddress_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_subaddress* sub_address_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_subaddress_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_subaddress *sub_address_obj, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index, len_of_len = 0;
int sub_address_len = 0;
gboolean comprehensive_req = FALSE;
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
if ((src_data[temp_index] & 0x7F) != SATK_SUB_ADDRESS_TAG) {
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //comprehensive required
- if((src_data[temp_index++] & 0x80))
+ /* comprehensive required */
+ if ((src_data[temp_index++] & 0x80))
comprehensive_req = TRUE;
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- sub_address_len = src_data[temp_index + len_of_len - 1];
- //check the address length
+ sub_address_len = src_data[temp_index + len_of_len - 1];
+
+ /* check the address length */
temp_index += len_of_len;
- if ((temp_index + sub_address_len) > tlv_len) {
+ if ((temp_index + sub_address_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //sub address
- if(sub_address_len <= 0){
+ /* sub address */
+ if (sub_address_len <= 0) {
dbg("[SAT] SAT PARSER - no sub address data");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
sub_address_obj->subaddress_len = sub_address_len;
- if( sub_address_obj->subaddress_len > SAT_CCP_DATA_LEN_MAX){
- if(comprehensive_req){
+ if (sub_address_obj->subaddress_len > SAT_CCP_DATA_LEN_MAX) {
+ if (comprehensive_req) {
dbg("[SAT] SAT PARSER - sub address is too big");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
- else{
- //bIsComprehensionPartial = TRUE;
+ } else {
+ /* bIsComprehensionPartial = TRUE; */
sub_address_obj->subaddress_len = 0;
}
- }
- else{
+ } else
memcpy(sub_address_obj->subaddress, &src_data[temp_index], sub_address_obj->subaddress_len);
- }
- *consumed_data_len = 1 + len_of_len + sub_address_len;
+ *consumed_data_len = 1 + len_of_len + sub_address_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_alpha_identifier_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_alpha_identifier* alpha_id_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_alpha_identifier_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_alpha_identifier *alpha_id_obj, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index, len_of_len = 0;
int alpha_len = 0;
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
if ((src_data[temp_index++] & 0x7F) != SATK_ALPHA_IDENTIFIER_TAG) {
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
alpha_id_obj->is_exist = TRUE;
len_of_len = _get_length_filed_size(src_data[temp_index]);
if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- alpha_len = alpha_id_obj->alpha_data_len = src_data[temp_index + len_of_len - 1];
- //alpha identifier
+ alpha_len = alpha_id_obj->alpha_data_len = src_data[temp_index + len_of_len - 1];
+
+ /* alpha identifier */
temp_index += len_of_len;
- if ((temp_index + alpha_len) > tlv_len) {
+ if ((temp_index + alpha_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
_sat_decode_dcs(dcs, &alpha_id_obj->dcs);
}
- *consumed_data_len = 1 + len_of_len + alpha_len;
+ *consumed_data_len = 1 + len_of_len + alpha_len;
dbg("[SAT] SAT PARSER alphaId= %s", alpha_id_obj->alpha_data);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_sub_address_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_subaddress* sub_address_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_sub_address_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_subaddress *sub_address_obj, int *consumed_data_len)
{
int i = 0;
int temp_index, len_of_len = 0;
int sub_address_len = 0;
- unsigned char* src_data;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
if (tlv_str == NULL || consumed_data_len == NULL || sub_address_obj == NULL) {
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
if ((src_data[temp_index] & 0x7F) != SATK_SUB_ADDRESS_TAG) {
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //comprehensive required
- if((src_data[temp_index++] & 0x80))
+ /* comprehensive required */
+ if ((src_data[temp_index++] & 0x80))
comprehension_req = TRUE;
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- sub_address_len = src_data[temp_index + len_of_len - 1];
+ sub_address_len = src_data[temp_index + len_of_len - 1];
- //check the address length
+ /* check the address length */
temp_index += len_of_len;
- if ((temp_index + sub_address_len) > tlv_len) {
+ if ((temp_index + sub_address_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(sub_address_len <= 0){
+ if (sub_address_len <= 0) {
dbg("[SAT] SAT PARSER - no sub address");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
sub_address_obj->subaddress_len = sub_address_len;
- if(sub_address_obj->subaddress_len > SAT_SUB_ADDR_LEN_MAX){
- if(comprehension_req)
+ if (sub_address_obj->subaddress_len > SAT_SUB_ADDR_LEN_MAX) {
+ if (comprehension_req)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
else
sub_address_obj->subaddress_len = 0;
- }
- else{
- memcpy(sub_address_obj->subaddress, &src_data[temp_index],sub_address_obj->subaddress_len);
- }
+ } else
+ memcpy(sub_address_obj->subaddress, &src_data[temp_index], sub_address_obj->subaddress_len);
- dbg("[SAT] SAT PARSER - subAddressLen=%d",sub_address_obj->subaddress_len);
- for(i=0;i<sub_address_obj->subaddress_len;i++)
- dbg("[SAT] SAT PARSER - 0x%02x\t",sub_address_obj->subaddress[i]);
+ dbg("[SAT] SAT PARSER - subAddressLen=%d", sub_address_obj->subaddress_len);
+ for (i = 0; i < sub_address_obj->subaddress_len; i++)
+ dbg("[SAT] SAT PARSER - 0x%02x\t", sub_address_obj->subaddress[i]);
- *consumed_data_len = 1+len_of_len+sub_address_len;
+ *consumed_data_len = 1 + len_of_len + sub_address_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_ccp_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_ccp* ccp_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_ccp_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_ccp *ccp_obj, int *consumed_data_len)
{
int i = 0;
int temp_index, len_of_len = 0;
int ccp_len = 0;
- unsigned char* src_data;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
if (tlv_str == NULL || consumed_data_len == NULL || ccp_obj == NULL) {
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if ((src_data[temp_index] & 0x7F) != SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG) {
+ if ((src_data[temp_index] & 0x7F)
+ != SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG) {
dbg("[SAT] SAT PARSER - CCP TAG missing");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //comprehensive required
- if((src_data[temp_index++] & 0x80))
+ /* comprehensive required */
+ if ((src_data[temp_index++] & 0x80))
comprehension_req = TRUE;
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- ccp_len = src_data[temp_index + len_of_len - 1];
- //check the address length
+ ccp_len = src_data[temp_index + len_of_len - 1];
+
+ /* check the address length */
temp_index += len_of_len;
- if ((temp_index + ccp_len) > tlv_len) {
+ if ((temp_index + ccp_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(ccp_len <= 0){
+ if (ccp_len <= 0) {
dbg("[SAT] SAT PARSER - no ccp data");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
ccp_obj->data_len = ccp_len;
- if(ccp_obj->data_len > SAT_CCP_DATA_LEN_MAX){
- if(comprehension_req)
+ if (ccp_obj->data_len > SAT_CCP_DATA_LEN_MAX) {
+ if (comprehension_req)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
else
ccp_obj->data_len = 0;
- }
- else{
- memcpy(ccp_obj->data, &src_data[temp_index],ccp_obj->data_len);
- }
+ } else
+ memcpy(ccp_obj->data, &src_data[temp_index], ccp_obj->data_len);
- dbg("[SAT] SAT PARSER - ccp len=%d",ccp_obj->data_len);
- for(i=0;i<ccp_obj->data_len;i++)
- dbg("[SAT] SAT PARSER - 0x%02x\t",ccp_obj->data[i]);
+ dbg("[SAT] SAT PARSER - ccp len=%d", ccp_obj->data_len);
+ for (i = 0; i < ccp_obj->data_len; i++)
+ dbg("[SAT] SAT PARSER - 0x%02x\t", ccp_obj->data[i]);
- *consumed_data_len = 1+len_of_len+ccp_len;
+ *consumed_data_len = 1 + len_of_len + ccp_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_device_identities_tlv(unsigned char* tlv_str,
- struct tel_sat_device_identities* dev_id_obj)
+static enum tcore_sat_result _sat_decode_device_identities_tlv(unsigned char *tlv_str,
+ struct tel_sat_device_identities *dev_id_obj)
{
int temp_index = 0, i;
if (tlv_str == NULL || dev_id_obj == NULL) {
- dbg("[SAT] SAT PARSER - tlv_str ==NULL || dev_id_obj == NULL");
+ dbg("[SAT] SAT PARSER - tlv_str == NULL || dev_id_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
if ((tlv_str[temp_index++] & 0x7F) != SATK_DEVICE_IDENTITY_TAG) {
dbg("[SAT] SAT PARSER - device identity tag missing.");
- return TCORE_SAT_REQUIRED_VALUE_MISSING; //send TR
+ return TCORE_SAT_REQUIRED_VALUE_MISSING; /* Send TR */
}
if (tlv_str[temp_index++] != SATK_DEVICE_IDENTITY_LENGTH) {
dbg("[SAT] SAT PARSER - device identity length incorrect.");
- return TCORE_SAT_REQUIRED_VALUE_MISSING; //send TR
+ return TCORE_SAT_REQUIRED_VALUE_MISSING; /* Send TR */
}
for (i = 0; i < 2; i++) {
switch (tlv_str[temp_index]) {
- case DEVICE_ID_KEYPAD:
- case DEVICE_ID_DISPLAY:
- case DEVICE_ID_EARPIECE:
- case DEVICE_ID_SIM:
- case DEVICE_ID_ME:
- case DEVICE_ID_NETWORK:
+ case DEVICE_ID_KEYPAD:
+ case DEVICE_ID_DISPLAY:
+ case DEVICE_ID_EARPIECE:
+ case DEVICE_ID_SIM:
+ case DEVICE_ID_ME:
+ case DEVICE_ID_NETWORK:
+ if (i == 0) dev_id_obj->src = tlv_str[temp_index];
+ if (i == 1) dev_id_obj->dest = tlv_str[temp_index];
+ break;
+
+ default:
+ if (tlv_str[temp_index] >= 0x21 && tlv_str[temp_index] <= 0x27) {
+ dbg("BIP channel id(0x%x)", tlv_str[temp_index]);
if (i == 0) dev_id_obj->src = tlv_str[temp_index];
if (i == 1) dev_id_obj->dest = tlv_str[temp_index];
- break;
- default:{
- if(tlv_str[temp_index] >= 0x21 && tlv_str[temp_index] <= 0x27){
- dbg("BIP channel id(0x%x)", tlv_str[temp_index])
- if (i == 0) dev_id_obj->src = tlv_str[temp_index];
- if (i == 1) dev_id_obj->dest = tlv_str[temp_index];
- }
- else{
- dbg("unmatched device id");
- return TCORE_SAT_REQUIRED_VALUE_MISSING;
- }
- }break;
+ } else {
+ dbg("unmatched device id");
+ return TCORE_SAT_REQUIRED_VALUE_MISSING;
+ }
+ break;
}
+
temp_index++;
}
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_duration_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_duration *duration_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_duration_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_duration *duration_obj, int *consumed_data_len)
{
int temp_index = 0;
- unsigned char* src_data = NULL;
+ unsigned char *src_data = NULL;
if (!tlv_str || !duration_obj || !consumed_data_len) {
err("[SAT] SAT PARSER data is null");
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len < curr_offset + 3) {
+ if (tlv_len < curr_offset + 3) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
if ((src_data[temp_index++] & 0x7F) != SATK_DURATION_TAG) {
err("[SAT] SAT PARSER - duration tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
if (src_data[temp_index++] != SATK_DURATION_LENGTH) {
err("[SAT] SAT PARSER - incorrect length value.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //time unit
+ /* time unit */
switch (src_data[temp_index]) {
- case TIME_UNIT_MINUTES:
- case TIME_UNIT_SECONDS:
- case TIME_UNIT_TENTHS_OF_SECONDS:
- duration_obj->time_unit = src_data[temp_index];
- break;
- default:
- duration_obj->time_unit = TIME_UNIT_RESERVED;
- break;
+ case TIME_UNIT_MINUTES:
+ case TIME_UNIT_SECONDS:
+ case TIME_UNIT_TENTHS_OF_SECONDS:
+ duration_obj->time_unit = src_data[temp_index];
+ break;
+
+ default:
+ duration_obj->time_unit = TIME_UNIT_RESERVED;
+ break;
}
- //interval
+ /* interval */
temp_index++;
duration_obj->time_interval = src_data[temp_index];
*consumed_data_len = 4;
- dbg("[SAT] SAT PARSER - timeUnit=%d, interval=%d", duration_obj->time_unit, duration_obj->time_interval);
+ dbg("[SAT] SAT PARSER - timeUnit=%d, interval=%d",
+ duration_obj->time_unit, duration_obj->time_interval);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_item_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_item_info* item_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_item_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_item_info *item_obj, int *consumed_data_len)
{
- int temp_index, len_of_len=0, i=0;
- int item_len =0;
+ int temp_index, len_of_len = 0, i = 0;
+ int item_len = 0;
unsigned char dcs;
- unsigned char* src_data = NULL;
+ unsigned char *src_data = NULL;
- if(tlv_str == NULL || consumed_data_len == NULL || item_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || item_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || item_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_ITEM_TAG){
- dbg("[SAT] SAT PARSER - tag not found.=%d",src_data[temp_index-1]);
+ if ((src_data[temp_index++] & 0x7F) != SATK_ITEM_TAG) {
+ dbg("[SAT] SAT PARSER - tag not found.=%d", src_data[temp_index-1]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- item_len = src_data[temp_index+len_of_len-1];
- temp_index+=len_of_len; //temp_index pointing to item.
- if((temp_index+item_len) > tlv_len){
+ item_len = src_data[temp_index + len_of_len-1];
+
+ temp_index += len_of_len; /* temp_index pointing to item. */
+ if ((temp_index + item_len) > tlv_len) {
dbg("[SAT] SAT PARSER - incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- memset(item_obj->text, 0x00,(SAT_ITEM_TEXT_LEN_MAX+1));
- if(item_len <= 0){
+ memset(item_obj->text, 0x00, (SAT_ITEM_TEXT_LEN_MAX + 1));
+ if (item_len <= 0) {
dbg("[SAT] SAT PARSER - menu_text is NULL, remove the menu");
- *consumed_data_len = 1+len_of_len+item_len;
+ *consumed_data_len = 1 + len_of_len + item_len;
return TCORE_SAT_SUCCESS;
}
- //item
+ /* item */
item_obj->item_id = src_data[temp_index++];
- // fix for orange SIM issue
- // H0100078487 Strange Character display on SIM SAT
- // The string length was less than its real length
- // So garbage characters was displayed. To fix it, we would recalculate the real length.
- for(i=0; i<item_len-1;i++){
- dbg("[SAT] %d: %c", i, src_data[temp_index+i]);
- if(src_data[temp_index+i] == 0xFF) break;
+
+ /*
+ * fix for orange SIM issue
+ * H0100078487 Strange Character display on SIM SAT
+ * The string length was less than its real length
+ * So garbage characters was displayed. To fix it, we would recalculate the real length.
+ */
+ for (i = 0; i < item_len-1; i++) {
+ dbg("[SAT] %d: %c", i, src_data[temp_index + i]);
+ if (src_data[temp_index + i] == 0xFF) break;
}
+
item_obj->text_len = i;
- if(item_obj->text_len <= 0){
+ if (item_obj->text_len <= 0) {
dbg("[SAT] SAT PARSER - text len = 0");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(item_obj->text_len >= SAT_ITEM_TEXT_LEN_MAX)
+ if (item_obj->text_len >= SAT_ITEM_TEXT_LEN_MAX)
item_obj->text_len = SAT_ITEM_TEXT_LEN_MAX-1;
memcpy(item_obj->text, &src_data[temp_index], item_obj->text_len);
dbg("[SAT] SAT PARSER - item_text=%s", item_obj->text);
- *consumed_data_len = 1+len_of_len+item_len;
+ *consumed_data_len = 1 + len_of_len + item_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_response_length_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_response_length *response_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_response_length_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_response_length *response_obj, int *consumed_data_len)
{
int temp_index = 0;
- unsigned char* src_data = NULL;
+ unsigned char *src_data = NULL;
if (!tlv_str || !response_obj || !consumed_data_len) {
err("[SAT] SAT PARSER data is null");
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= curr_offset + 1) {
+ if (tlv_len <= curr_offset + 1) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
if ((src_data[temp_index++] & 0x7F) != SATK_RESPONSE_LENGTH_TAG) {
err("[SAT] SAT PARSER - response length tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
if (src_data[temp_index++] != SATK_RESPONSE_LENGTH_LENGTH) {
err("[SAT] SAT PARSER - incorrect length value.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
response_obj->min = src_data[temp_index++];
dbg("[SAT] SAT PARSER min length(%d), max length(%d)", response_obj->min, response_obj->max);
*consumed_data_len = 4;
- if(response_obj->min > response_obj->max){
+ if (response_obj->min > response_obj->max) {
err("[SAT] SAT PARSER - : min length is larger than max length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_sms_tpdu_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_sms_tpdu *sms_tpdu_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_sms_tpdu_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_sms_tpdu *sms_tpdu_obj, int *consumed_data_len)
{
int temp_index = 0, len_of_len = 0;
int tpdu_len = 0;
- unsigned char* src_data = NULL;
+ unsigned char *src_data = NULL;
if (!tlv_str || !sms_tpdu_obj || !consumed_data_len) {
err("[SAT] SAT PARSER data is null");
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= curr_offset + 1) {
+ if (tlv_len <= curr_offset + 1) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- tpdu_len = src_data[temp_index+len_of_len-1];
+ tpdu_len = src_data[temp_index + len_of_len-1];
temp_index += len_of_len;
- if(tpdu_len <= 0)
+ if (tpdu_len <= 0)
return TCORE_SAT_REQUIRED_VALUE_MISSING;
- //data len
+ /* data len */
sms_tpdu_obj->data_len = tpdu_len;
- if(sms_tpdu_obj->data_len > SAT_SMS_TPDU_SMS_DATA_LEN_MAX){
+ if (sms_tpdu_obj->data_len > SAT_SMS_TPDU_SMS_DATA_LEN_MAX)
sms_tpdu_obj->data_len = SAT_SMS_TPDU_SMS_DATA_LEN_MAX;
- }
- //data
+ /* data */
memcpy(sms_tpdu_obj->data, &src_data[temp_index], sms_tpdu_obj->data_len);
dbg("[SAT] SAT PARSER tpdu_len (%d)", sms_tpdu_obj->data_len);
- *consumed_data_len = 1+len_of_len+tpdu_len;
+ *consumed_data_len = 1 + len_of_len + tpdu_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_item_identifier_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_item_identifier *item_identifier_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_item_identifier_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_item_identifier *item_identifier_obj, int *consumed_data_len)
{
int temp_index = 0;
- unsigned char* src_data = NULL;
+ unsigned char *src_data = NULL;
if (!tlv_str || !item_identifier_obj || !consumed_data_len) {
err("[SAT] SAT PARSER data is null");
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= curr_offset + 1) {
+ if (tlv_len <= curr_offset + 1) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
if ((src_data[temp_index++] & 0x7F) != SATK_ITEM_IDENTIFIER_TAG) {
err("[SAT] SAT PARSER - Item identifier tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
if (src_data[temp_index++] != SATK_ITEM_IDENTIFIER_LENGTH) {
err("[SAT] SAT PARSER - incorrect length value.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
item_identifier_obj->item_identifier = src_data[temp_index++];
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_ss_string_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_ss_string *ss_str_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_ss_string_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_ss_string *ss_str_obj, int *consumed_data_len)
{
- char* str_ascii = NULL;
- int temp_index, len_of_len=0;
- int ss_len =0;
- unsigned char* src_data;
+ char *str_ascii = NULL;
+ int temp_index, len_of_len = 0;
+ int ss_len = 0;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
if (!tlv_str || !ss_str_obj || !consumed_data_len) {
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= curr_offset + 1) {
+ if (tlv_len <= curr_offset + 1) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
if ((src_data[temp_index] & 0x7F) != SATK_SS_STRING_TAG) {
err("[SAT] SAT PARSER - SS string tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- if(src_data[temp_index++]&0x80)
+ if (src_data[temp_index++] & 0x80)
comprehension_req = TRUE;
dbg("comprehension_req=[%d]", comprehension_req);
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- ss_len = src_data[temp_index+len_of_len-1];
- dbg("[SAT] parser: ss_tlv len=%d",ss_len);
+ ss_len = src_data[temp_index + len_of_len-1];
+ dbg("[SAT] parser: ss_tlv len=%d", ss_len);
temp_index += len_of_len;
ss_str_obj->string_len = 0;
- //ss data
- if(ss_len <= 1)
+ /* ss data */
+ if (ss_len <= 1)
return TCORE_SAT_REQUIRED_VALUE_MISSING;
_sat_decode_ton_npi(src_data[temp_index++], &ss_str_obj->ton, &ss_str_obj->npi);
- str_ascii = tcore_util_convert_bcd2ascii((const char*)&src_data[temp_index], ss_len-1, SAT_SS_STRING_LEN_MAX);
- if(str_ascii){
+ str_ascii = tcore_util_convert_bcd2ascii((const char *)&src_data[temp_index], ss_len-1, SAT_SS_STRING_LEN_MAX);
+ if (str_ascii) {
memcpy(ss_str_obj->ss_string, str_ascii, strlen(str_ascii));
ss_str_obj->string_len = strlen(str_ascii);
g_free(str_ascii);
}
- // 1 is the length of Tag.
- *consumed_data_len = 1 + len_of_len + ss_len;
+ /* 1 is the length of Tag. */
+ *consumed_data_len = 1 + len_of_len + ss_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_text_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_text_string_object *text_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_text_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_text_string_object *text_obj, int *consumed_data_len)
{
- int temp_index, len_of_len=0;
- int text_len =0;
- unsigned char* src_data;
+ int temp_index, len_of_len = 0;
+ int text_len = 0;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
- if (!tlv_str || !consumed_data_len ) {
+ if (!tlv_str || !consumed_data_len) {
err("[SAT] parser: data is null");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)){
+ if (tlv_len <= (curr_offset + 1)) {
err("[SAT] parser: incorrect length");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_TEXT_STRING_TAG && (src_data[temp_index]&0x7F) != SATK_DEFAULT_TEXT_TAG){
- err("[SAT] parser: text string tag missing, tag=0x%x",src_data[temp_index]);
+ if ((src_data[temp_index] & 0x7F) != SATK_TEXT_STRING_TAG
+ && (src_data[temp_index] & 0x7F) != SATK_DEFAULT_TEXT_TAG) {
+ err("[SAT] parser: text string tag missing, tag=0x%x",
+ src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(src_data[temp_index++]&0x80)
+ if (src_data[temp_index++] & 0x80)
comprehension_req = TRUE;
dbg("comprehension_req=[%d]", comprehension_req);
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- text_len = src_data[temp_index+len_of_len-1];
+ text_len = src_data[temp_index + len_of_len-1];
temp_index += len_of_len;
memset(text_obj->string, 0x00, SAT_TEXT_STRING_LEN_MAX);
- //text
- if(text_len <=1){
+ /* text */
+ if (text_len <= 1) {
text_obj->string_length = 0;
- }else{
+ } else {
_sat_decode_dcs(src_data[temp_index++], &text_obj->dcs);
_get_string_data(&src_data[temp_index], text_len-1, text_obj);
}
dbg("[SAT] parser: text_tlv_len=%d, parsed text length=%d", text_len, text_obj->string_length);
- // 1 is the length of Tag.
- *consumed_data_len = 1 + len_of_len + text_len;
+ /* 1 is the length of Tag. */
+ *consumed_data_len = 1 + len_of_len + text_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_tone_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_tone *tone_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_tone_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_tone *tone_obj, int *consumed_data_len)
{
int temp_index;
- unsigned char* src_data;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
- if(tlv_str == NULL || consumed_data_len == NULL || tone_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || tone_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || tone_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_TONE_TAG){
+ if ((src_data[temp_index] & 0x7F) != SATK_TONE_TAG) {
err("[SAT] parser: tone tag missing");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(src_data[temp_index++]&0x80)
+ if (src_data[temp_index++] & 0x80)
comprehension_req = TRUE;
- //length
+ /* length */
if (src_data[temp_index++] != SATK_TONE_LENGTH) {
err("[SAT] SAT PARSER - incorrect length value.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- if((temp_index+SATK_TONE_LENGTH) > tlv_len)
- {
- err("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+SATK_TONE_LENGTH),tlv_len);
+ if ((temp_index + SATK_TONE_LENGTH) > tlv_len) {
+ err("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + SATK_TONE_LENGTH), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tone
- switch(src_data[temp_index])
- {
- // standard supervisory tones
- case DIAL_TONE:
- case CALLED_SUBSCRIBER_BUSY :
- case CONGESTION :
- case RADIO_PATH_ACK:
- case RADIO_PATH_NOT_AVAILABLE_CALL_DROPPED:
- case ERR_SPECIAL_INFO:
- case CALL_WAITING_TONE:
- case RINGING_TONE:
- // ME proprietary tones
- case GENERAL_BEEP:
- case POSITIVE_ACK_TONE:
- case NEGATIVE_ACK_OR_ERROR_TONE:
- case RINGING_TONE_SLCTD_BY_USR_FOR_INCOM_SPEECH_CALL:
- case ALERT_TONE_SELECTED_BY_USER_FOR_INCOMING_SMS:
- case CRITICAL_ALERT:
- //Themed tones
- case HAPPY_TONE:
- case SAD_TONE:
- case URGENT_ACTION_TONE :
- case QUESTION_TONE:
- case MESSAGE_RECEIVED_TONE :
- //Melody tones
- case MELODY_1:
- case MELODY_2:
- case MELODY_3:
- case MELODY_4:
- case MELODY_5:
- case MELODY_6:
- case MELODY_7:
- case MELODY_8:
- dbg("[SAT] SAT PARSER - Tone =0x%x", src_data[temp_index]);
- tone_obj->tone_type = src_data[temp_index];
- break;
-
- case TONE_TYPE_RESERVED:
- default:
- dbg("[SAT] SAT PARSER - Reserved value of Tone =0x%x", src_data[temp_index]);
- if(comprehension_req)
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- break;
+ /* tone */
+ switch (src_data[temp_index]) {
+ /* standard supervisory tones */
+ case DIAL_TONE:
+ case CALLED_SUBSCRIBER_BUSY:
+ case CONGESTION:
+ case RADIO_PATH_ACK:
+ case RADIO_PATH_NOT_AVAILABLE_CALL_DROPPED:
+ case ERR_SPECIAL_INFO:
+ case CALL_WAITING_TONE:
+ case RINGING_TONE:
+ /* ME proprietary tones */
+ case GENERAL_BEEP:
+ case POSITIVE_ACK_TONE:
+ case NEGATIVE_ACK_OR_ERROR_TONE:
+ case RINGING_TONE_SLCTD_BY_USR_FOR_INCOM_SPEECH_CALL:
+ case ALERT_TONE_SELECTED_BY_USER_FOR_INCOMING_SMS:
+ case CRITICAL_ALERT:
+ /* Themed tones */
+ case HAPPY_TONE:
+ case SAD_TONE:
+ case URGENT_ACTION_TONE:
+ case QUESTION_TONE:
+ case MESSAGE_RECEIVED_TONE:
+ /* Melody tones */
+ case MELODY_1:
+ case MELODY_2:
+ case MELODY_3:
+ case MELODY_4:
+ case MELODY_5:
+ case MELODY_6:
+ case MELODY_7:
+ case MELODY_8:
+ dbg("[SAT] SAT PARSER - Tone =0x%x", src_data[temp_index]);
+ tone_obj->tone_type = src_data[temp_index];
+ break;
+
+ case TONE_TYPE_RESERVED: /* Fallthrough */
+ default:
+ dbg("[SAT] SAT PARSER - Reserved value of Tone =0x%x", src_data[temp_index]);
+ if (comprehension_req)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
+ break;
}
*consumed_data_len = 3;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_ussd_string_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_ussd_string *ussd_str_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_ussd_string_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_ussd_string *ussd_str_obj, int *consumed_data_len)
{
- int temp_index, len_of_len=0;
- int ussd_len =0;
- unsigned char* src_data;
+ int temp_index, len_of_len = 0;
+ int ussd_len = 0;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
if (!tlv_str || !ussd_str_obj || !consumed_data_len) {
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= curr_offset + 1) {
+ if (tlv_len <= curr_offset + 1) {
err("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
if ((src_data[temp_index] & 0x7F) != SATK_USSD_STRING_TAG) {
err("[SAT] SAT PARSER - SS string tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- if(src_data[temp_index++]&0x80)
+ if (src_data[temp_index++] & 0x80)
comprehension_req = TRUE;
dbg("comprehension_req=[%d]", comprehension_req);
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- ussd_len = src_data[temp_index+len_of_len-1];
- dbg("[SAT] parser: ussd_tlv len=%d",ussd_len);
+ ussd_len = src_data[temp_index + len_of_len-1];
+ dbg("[SAT] parser: ussd_tlv len=%d", ussd_len);
temp_index += len_of_len;
ussd_str_obj->string_len = 0;
- //ussd data
- if(ussd_len <= 1)
+ /* ussd data */
+ if (ussd_len <= 1)
return TCORE_SAT_REQUIRED_VALUE_MISSING;
_sat_decode_dcs(src_data[temp_index++], &ussd_str_obj->dsc);
ussd_str_obj->string_len = ussd_len - 1;
memcpy(ussd_str_obj->ussd_string, &src_data[temp_index], ussd_str_obj->string_len);
- // 1 is the length of Tag.
- *consumed_data_len = 1 + len_of_len + ussd_len;
+ /* 1 is the length of Tag. */
+ *consumed_data_len = 1 + len_of_len + ussd_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_file_list_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_file_list *file_list_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_file_list_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_file_list *file_list_obj, int *consumed_data_len)
{
- //tmp
+ /* tmp */
int tmp_cnt;
int f_count;
unsigned int ef = 0x0000;
- int temp_index, len_of_len=0;
+ int temp_index, len_of_len = 0;
int file_list_len = 0;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || file_list_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || file_list_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || file_list_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_FILE_LIST_TAG){
- err("[SAT] parser: tag missing, tag=0x%x",src_data[temp_index]);
+ if ((src_data[temp_index] & 0x7F) != SATK_FILE_LIST_TAG) {
+ err("[SAT] parser: tag missing, tag=0x%x", src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- file_list_len = src_data[temp_index+len_of_len-1];
+
+ file_list_len = src_data[temp_index + len_of_len-1];
temp_index += len_of_len;
- if((temp_index+file_list_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+file_list_len),tlv_len);
+ if ((temp_index + file_list_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + file_list_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
file_list_obj->file_count = 0;
memset(file_list_obj->file_id, 0, SAT_FILE_ID_LIST_MAX_COUNT);
- if(!tmp_cnt){
+ if (!tmp_cnt) {
dbg("file cnt = 0");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
f_count = 0;
- do{
+ do {
ef = 0x0000;
- if( src_data[temp_index] != 0x3F || src_data[temp_index+1] != 0x00){
+ if (src_data[temp_index] != 0x3F || src_data[temp_index + 1] != 0x00) {
temp_index++;
- if(temp_index > tlv_len) break;
- else continue;
+ if (temp_index > tlv_len)
+ break;
+ else
+ continue;
}
- temp_index+=2; //MASTER FILE (DIR) 0x3F00
- if(src_data[temp_index] == 0x2F){
- //ELEMENTRY FILE (VALUE)
+ temp_index += 2; /* MASTER FILE (DIR) 0x3F00 */
+
+ if (src_data[temp_index] == 0x2F) {
+ /* ELEMENTRY FILE (VALUE) */
ef = src_data[temp_index] << 8;
temp_index++;
ef = ef | src_data[temp_index];
- if( _check_file_for_refresh((enum tel_sim_file_id)ef) ){//check file registered for refresh?
+ if (_check_file_for_refresh((enum tel_sim_file_id)ef)) {/* check file registered for refresh? */
file_list_obj->file_id[file_list_obj->file_count] = ef;
file_list_obj->file_count++;
}
- }
- else if(src_data[temp_index] == 0x7F && src_data[temp_index+1] == 0xFF){
- //USIM DIRECTORY FILE (DIR) 0x7FFF
- temp_index+=2;
- if(src_data[temp_index] == 0x6F){
+ } else if (src_data[temp_index] == 0x7F && src_data[temp_index + 1] == 0xFF) {
+ /* USIM DIRECTORY FILE (DIR) 0x7FFF */
+ temp_index += 2;
+ if (src_data[temp_index] == 0x6F) {
ef = 0x6A << 8;
temp_index++;
ef = ef | src_data[temp_index];
- if( _check_file_for_refresh((enum tel_sim_file_id)ef) ){//check file registered for refresh?
+ if (_check_file_for_refresh((enum tel_sim_file_id)ef)) {/* check file registered for refresh? */
file_list_obj->file_id[file_list_obj->file_count] = ef;
file_list_obj->file_count++;
}
- }
- else{
+ } else
temp_index++;
- }
- }
- else if(src_data[temp_index] == 0x7F && (src_data[temp_index+1] == 0x10 || src_data[temp_index+1] == 0x20) ){
- //TELECOM DIRECTORY FILE 0x7F10 or GSM DIRECTORY FILE 0x7F20
- temp_index+=2;
- if(src_data[temp_index] == 0x6F){
+ } else if (src_data[temp_index] == 0x7F && (src_data[temp_index + 1] == 0x10
+ || src_data[temp_index + 1] == 0x20)) {
+ /* TELECOM DIRECTORY FILE 0x7F10 or GSM DIRECTORY FILE 0x7F20 */
+ temp_index += 2;
+ if (src_data[temp_index] == 0x6F) {
ef = src_data[temp_index] << 8;
temp_index++;
ef = ef | src_data[temp_index];
- if( _check_file_for_refresh((enum tel_sim_file_id)ef) ){//check file registered for refresh?
+ if (_check_file_for_refresh((enum tel_sim_file_id)ef)) {/* check file registered for refresh? */
file_list_obj->file_id[file_list_obj->file_count] = ef;
file_list_obj->file_count++;
}
- }
- else{
+ } else
temp_index++;
- }
}
f_count++;
temp_index++;
- }while( f_count < tmp_cnt);
+ } while (f_count < tmp_cnt);
dbg("[SAT] SAT PARSER - total file count=%d, PDA file count = %d", tmp_cnt, file_list_obj->file_count);
- *consumed_data_len = 1 + len_of_len + file_list_len;
+ *consumed_data_len = 1 + len_of_len + file_list_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_item_next_action_indicator_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset,
- struct tel_sat_item_next_action_indicatior_list* item_next_act_indi_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_item_next_action_indicator_tlv(unsigned char *tlv_str, int tlv_len, int curr_offset,
+ struct tel_sat_item_next_action_indicatior_list *item_next_act_indi_obj, int *consumed_data_len)
{
int temp_index;
int item_nai_len;
- unsigned char* src_data;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
- if(tlv_str == NULL || consumed_data_len == NULL || item_next_act_indi_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || item_next_act_indi_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || item_next_act_indi_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG){
- dbg("[SAT] SAT PARSER - tag not found.=%d",src_data[temp_index]);
+ if ((src_data[temp_index] & 0x7F) != SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG) {
+ dbg("[SAT] SAT PARSER - tag not found.=%d", src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if((src_data[temp_index++]&0x7F))
+ if ((src_data[temp_index++] & 0x7F))
comprehension_req = TRUE;
- //item cnt
+ /* item cnt */
item_nai_len = item_next_act_indi_obj->cnt = src_data[temp_index++];
- if((temp_index+item_nai_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+item_nai_len),tlv_len);
+ if ((temp_index + item_nai_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + item_nai_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(item_next_act_indi_obj->cnt > SAT_ITEMS_NEXT_ACTION_INDI_LIST_MAX_COUNT) {
- if(comprehension_req == TRUE) {
- dbg("[SAT] SAT PARSER - list count exceeds maximum allowed count=%d",item_next_act_indi_obj->cnt);
+ if (item_next_act_indi_obj->cnt > SAT_ITEMS_NEXT_ACTION_INDI_LIST_MAX_COUNT) {
+ if (comprehension_req == TRUE) {
+ dbg("[SAT] SAT PARSER - list count exceeds maximum allowed count=%d", item_next_act_indi_obj->cnt);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
+
item_next_act_indi_obj->cnt = 0;
}
memset(item_next_act_indi_obj->indicator_list, 0xFF, SAT_ITEMS_NEXT_ACTION_INDI_LIST_MAX_COUNT);
- if(item_next_act_indi_obj->cnt > 0)
+ if (item_next_act_indi_obj->cnt > 0)
memcpy(item_next_act_indi_obj->indicator_list, &src_data[temp_index], item_next_act_indi_obj->cnt);
- *consumed_data_len = 1+1+item_nai_len;
- dbg("[SAT] SAT PARSER - listCount=%d, consumed_data_len = %d",item_next_act_indi_obj->cnt, *consumed_data_len);
+ *consumed_data_len = 1 + 1 + item_nai_len;
+ dbg("[SAT] SAT PARSER - listCount=%d, consumed_data_len = %d", item_next_act_indi_obj->cnt, *consumed_data_len);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_event_list_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_event_list* event_list_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_event_list_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_event_list *event_list_obj, int *consumed_data_len)
{
int i = 0;
- int temp_index, len_of_len=0;
+ int temp_index, len_of_len = 0;
int evt_list_len;
- unsigned char* src_data;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
- if(tlv_str == NULL || consumed_data_len == NULL || event_list_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || event_list_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || event_list_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_EVENT_LIST_TAG){
- dbg("[SAT] SAT PARSER - tag not found.=%d",src_data[temp_index]);
+ if ((src_data[temp_index] & 0x7F) != SATK_EVENT_LIST_TAG) {
+ dbg("[SAT] SAT PARSER - tag not found.=%d", src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if((src_data[temp_index++]&0x80))
+ if ((src_data[temp_index++] & 0x80))
comprehension_req = TRUE;
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- evt_list_len = src_data[temp_index+len_of_len-1];
- dbg("[SAT] parser: evt_list_len=%d",evt_list_len);
+ evt_list_len = src_data[temp_index + len_of_len-1];
+ dbg("[SAT] parser: evt_list_len=%d", evt_list_len);
temp_index += len_of_len;
- if((temp_index+evt_list_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+evt_list_len),tlv_len);
+ if ((temp_index + evt_list_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + evt_list_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(evt_list_len > SAT_EVENT_LIST_MAX){
- dbg("[SAT] SAT PARSER - event list contains more items than it is supposed to have! len=%d", evt_list_len);
- if(comprehension_req)
+ if (evt_list_len > SAT_EVENT_LIST_MAX) {
+ dbg("[SAT] SAT PARSER - event list contains more items than it is supposed to have! len=%d",
+ evt_list_len);
+ if (comprehension_req)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
else
evt_list_len = SAT_EVENT_LIST_MAX;
event_list_obj->event_list_cnt = 0;
memset(event_list_obj->evt_list, 0xFF, SAT_EVENT_LIST_MAX);
- //event list
- for(i = 0; i < evt_list_len; i++){
- dbg("[SAT] SAT PARSER - event[%d]=0x%x", i, src_data[temp_index]);
- switch(src_data[temp_index]){
- /*PDA events*/
- case EVENT_USER_ACTIVITY:
- case EVENT_IDLE_SCREEN_AVAILABLE:
- case EVENT_LANGUAGE_SELECTION:
- case EVENT_BROWSER_TERMINATION:
- case EVENT_DATA_AVAILABLE:
- case EVENT_CHANNEL_STATUS:
- case EVENT_MT_CALL :
- case EVENT_CALL_CONNECTED:
- case EVENT_CALL_DISCONNECTED:
- case EVENT_LOCATION_STATUS:
- case EVENT_ACCESS_TECHNOLOGY_CHANGED:
- event_list_obj->evt_list[i] = src_data[temp_index];
- event_list_obj->event_list_cnt++;
- break;
- case EVENT_UNKNOWN:
- default:
- if(comprehension_req)
- return TCORE_SAT_BEYOND_ME_CAPABILITY;
- break;
+ /* event list */
+ for (i = 0; i < evt_list_len; i++) {
+ dbg("[SAT] SAT PARSER - event[%d]=0x%x",
+ i, src_data[temp_index]);
+ switch (src_data[temp_index]) {
+ /* PDA events */
+ case EVENT_USER_ACTIVITY:
+ case EVENT_IDLE_SCREEN_AVAILABLE:
+ case EVENT_LANGUAGE_SELECTION:
+ case EVENT_BROWSER_TERMINATION:
+ case EVENT_DATA_AVAILABLE:
+ case EVENT_CHANNEL_STATUS:
+ case EVENT_MT_CALL:
+ case EVENT_CALL_CONNECTED:
+ case EVENT_CALL_DISCONNECTED:
+ case EVENT_LOCATION_STATUS:
+ case EVENT_ACCESS_TECHNOLOGY_CHANGED:
+ event_list_obj->evt_list[i] = src_data[temp_index];
+ event_list_obj->event_list_cnt++;
+ break;
+
+ case EVENT_UNKNOWN: /* Fallthrough */
+ default:
+ if (comprehension_req)
+ return TCORE_SAT_BEYOND_ME_CAPABILITY;
+ break;
}
temp_index++;
}
- // 1 is the length of Tag.
- *consumed_data_len = 1 + len_of_len + evt_list_len;
+ /* 1 is the length of Tag. */
+ *consumed_data_len = 1 + len_of_len + evt_list_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_icon_identifier_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_icon_identifier* icon_id_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_icon_identifier_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_icon_identifier *icon_id_obj, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index = 0;
- if(tlv_str == NULL || icon_id_obj == NULL ||consumed_data_len == NULL) {
+ if (tlv_str == NULL || icon_id_obj == NULL || consumed_data_len == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || icon_id_obj == NULL ||consumed_data_len == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {//length of icon id tlv is 4
+ if (tlv_len <= (curr_offset + 1)) {/* length of icon id tlv is 4 */
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_ICON_IDENTIFIER_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_ICON_IDENTIFIER_TAG) {
dbg("[SAT] SAT PARSER - icon identity tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- if(src_data[temp_index++] != SATK_ICON_IDENTITY_LENGTH) {
+ if (src_data[temp_index++] != SATK_ICON_IDENTITY_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length value.");
- return FALSE; //send TR
+ return FALSE; /* Send TR */
}
- if((temp_index+SATK_ICON_IDENTITY_LENGTH) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+SATK_ICON_IDENTITY_LENGTH),tlv_len);
+ if ((temp_index + SATK_ICON_IDENTITY_LENGTH) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + SATK_ICON_IDENTITY_LENGTH), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
+
icon_id_obj->is_exist = TRUE;
- if((src_data[temp_index++]&0x01))
+ if ((src_data[temp_index++] & 0x01))
icon_id_obj->icon_qualifer = ICON_QUALI_NOT_SELF_EXPLANATORY;
else
icon_id_obj->icon_qualifer = ICON_QUALI_SELF_EXPLANATORY;
- if(src_data[temp_index] > 0x00) {
+ if (src_data[temp_index] > 0x00)
icon_id_obj->icon_identifier = src_data[temp_index];
- }
else {
dbg("[SAT] SAT PARSER - incorrect icon identifier");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- dbg("[SAT] SAT PARSER - icon_qual=%d, iconId=%d",icon_id_obj->icon_qualifer, icon_id_obj->icon_identifier);
+ dbg("[SAT] SAT PARSER - icon_qual=%d, iconId=%d", icon_id_obj->icon_qualifer, icon_id_obj->icon_identifier);
*consumed_data_len = 4;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_icon_identifier_list_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_icon_identifier_list* icon_list_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_icon_identifier_list_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_icon_identifier_list *icon_list_obj, int *consumed_data_len)
{
int temp_index, i;
- int len_value =0;
- unsigned char* src_data;
+ int len_value = 0;
+ unsigned char *src_data;
gboolean comprehension_req = FALSE;
- if(tlv_str == NULL || consumed_data_len == NULL || icon_list_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || icon_list_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || icon_list_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)+1) {
+ if (tlv_len <= (curr_offset + 1) + 1) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
+ if ((src_data[temp_index] & 0x7F) != SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
dbg("[SAT] SAT PARSER - icon identity tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
icon_list_obj->is_exist = TRUE;
- if(src_data[temp_index++]&0x80)
+ if (src_data[temp_index++] & 0x80)
comprehension_req = TRUE;
len_value = src_data[temp_index++];
- if(src_data[temp_index++]&0x01)
+ if (src_data[temp_index++] & 0x01)
icon_list_obj->icon_qualifer = ICON_QUALI_NOT_SELF_EXPLANATORY;
else
icon_list_obj->icon_qualifer = ICON_QUALI_SELF_EXPLANATORY;
icon_list_obj->icon_cnt = len_value-1;
- if(icon_list_obj->icon_cnt > SAT_ICON_LIST_MAX_COUNT){
- if(comprehension_req == TRUE) {
- dbg("[SAT] SAT PARSER - list count exceeds maximum allowed count=%d",icon_list_obj->icon_cnt);
+ if (icon_list_obj->icon_cnt > SAT_ICON_LIST_MAX_COUNT) {
+ if (comprehension_req == TRUE) {
+ dbg("[SAT] SAT PARSER - list count exceeds maximum allowed count=%d", icon_list_obj->icon_cnt);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
+
icon_list_obj->icon_cnt = 0;
- }
- else{
+ } else {
- for(i=0;i<icon_list_obj->icon_cnt;i++) {
- if(src_data[temp_index] > 0x00) {
- icon_list_obj->icon_id_list[i]= src_data[temp_index++];
- } else {
+ for (i = 0; i < icon_list_obj->icon_cnt; i++) {
+ if (src_data[temp_index] > 0x00) {
+ icon_list_obj->icon_id_list[i] = src_data[temp_index++];
+ } else {
dbg("[SAT] SAT PARSER - incorrect icon identifier");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
}
}
- *consumed_data_len = 1+1+len_value;
- dbg("[SAT] SAT PARSER - icon_qual=%d, iconCount=%d",icon_list_obj->icon_qualifer, icon_list_obj->icon_cnt);
+ *consumed_data_len = 1 + 1 + len_value;
+ dbg("[SAT] SAT PARSER - icon_qual=%d, iconCount=%d", icon_list_obj->icon_qualifer, icon_list_obj->icon_cnt);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_dtmf_string_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tel_sat_dtmf_string* dtmf_string_obj, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_dtmf_string_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_dtmf_string *dtmf_string_obj, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index, len_of_len = 0;
int dtmf_len = 0;
gboolean comprehension_req = FALSE;
- char* str_ascii = NULL;
+ char *str_ascii = NULL;
if (tlv_str == NULL || consumed_data_len == NULL || dtmf_string_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || dtmf_string_obj == NULL");
src_data = &tlv_str[0];
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //Tag
+ /* Tag */
temp_index = curr_offset;
if ((src_data[temp_index] & 0x7F) != SATK_DTMF_STRING_TAG) {
dbg("[SAT] SAT PARSER - address tag missing");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //comprehensive required
- if((src_data[temp_index++] & 0x80))
+ /* comprehensive required */
+ if ((src_data[temp_index++] & 0x80))
comprehension_req = TRUE;
dbg("comprehension_req=[%d]", comprehension_req);
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- dtmf_len = src_data[temp_index + len_of_len - 1];
- temp_index += len_of_len; //temp_index pointing to TON/NPI
+ dtmf_len = src_data[temp_index + len_of_len - 1];
+ temp_index += len_of_len; /* temp_index pointing to TON/NPI */
- if ((temp_index + dtmf_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+dtmf_len), tlv_len);
+ if ((temp_index + dtmf_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + dtmf_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
dtmf_string_obj->dtmf_length = 0;
- if(dtmf_len > 0){
- str_ascii = tcore_util_convert_bcd2ascii((const char*)&src_data[temp_index], dtmf_len, SAT_DTMF_STRING_LEN_MAX);
- if(str_ascii){
+ if (dtmf_len > 0) {
+ str_ascii = tcore_util_convert_bcd2ascii((const char *)&src_data[temp_index], dtmf_len, SAT_DTMF_STRING_LEN_MAX);
+ if (str_ascii) {
memcpy(dtmf_string_obj->dtmf_string, str_ascii, strlen(str_ascii));
dtmf_string_obj->dtmf_length = strlen(str_ascii);
g_free(str_ascii);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- *consumed_data_len = 1 + len_of_len + dtmf_len;
+ *consumed_data_len = 1 + len_of_len + dtmf_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_language_tlv(unsigned char* tlv_str, int tlv_len,
- int curr_offset, enum tel_sim_language_type* language_obj)
+static enum tcore_sat_result _sat_decode_language_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, enum tel_sim_language_type *language_obj)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index = 0;
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
src_data = &tlv_str[0];
temp_index = curr_offset;
- if((src_data[temp_index++]&0x7F) != SATK_LANGUAGE_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_LANGUAGE_TAG) {
dbg("[SAT] SAT PARSER - Language tag missing.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(src_data[temp_index++] != SATK_LANGUAGE_LENGTH) {
+
+ if (src_data[temp_index++] != SATK_LANGUAGE_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length value.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if((temp_index+SATK_LANGUAGE_LENGTH) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+SATK_LANGUAGE_LENGTH),tlv_len);
+ if ((temp_index + SATK_LANGUAGE_LENGTH) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + SATK_LANGUAGE_LENGTH), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- *language_obj = _sat_decode_language(src_data[temp_index], src_data[temp_index+1]);
- dbg("[SAT] SAT PARSER - <in> %c %c, <out> %d", src_data[temp_index], src_data[temp_index+1], *language_obj);
+
+ *language_obj = _sat_decode_language(src_data[temp_index], src_data[temp_index + 1]);
+ dbg("[SAT] SAT PARSER - <in> %c %c, <out> %d", src_data[temp_index], src_data[temp_index + 1], *language_obj);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_browser_identity_tlv(unsigned char* tlv_str, int tlv_len, int curr_offset,
- enum browser_identity* browser_id, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_browser_identity_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, enum browser_identity *browser_id, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index = 0;
if (tlv_str == NULL || browser_id == NULL || consumed_data_len == NULL) {
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
dbg("[SAT] SAT PARSER - Browser ID tag missing.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
+
if (src_data[temp_index++] != SATK_BROWSER_ID_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length value.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
dbg("[SAT] SAT PARSER - : browser ID value:ox%x", src_data[temp_index]);
switch (src_data[temp_index]) {
- case 0x00:
- *browser_id = BROWSER_ID_DEFAULT;
- break;
- case 0x01:
- *browser_id = BROWSER_ID_WML;
- break;
- case 0x02:
- *browser_id = BROWSER_ID_HTML;
- break;
- case 0x03:
- *browser_id = BROWSER_ID_XHTML;
- break;
- case 0x04:
- *browser_id = BROWSER_ID_CHTML;
- break;
- default:
- *browser_id = BROWSER_ID_RESERVED;
- break;
+ case 0x00:
+ *browser_id = BROWSER_ID_DEFAULT;
+ break;
+
+ case 0x01:
+ *browser_id = BROWSER_ID_WML;
+ break;
+
+ case 0x02:
+ *browser_id = BROWSER_ID_HTML;
+ break;
+
+ case 0x03:
+ *browser_id = BROWSER_ID_XHTML;
+ break;
+
+ case 0x04:
+ *browser_id = BROWSER_ID_CHTML;
+ break;
+
+ default:
+ *browser_id = BROWSER_ID_RESERVED;
+ break;
}
*consumed_data_len = 3;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_url_tlv(unsigned char* tlv_str, int tlv_len, int curr_offset,
- struct tel_sat_url* url, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_url_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_url *url, int *consumed_data_len)
{
- unsigned char* src_data;
- int temp_index= curr_offset;
- int len_of_len=0, url_len=0;
+ unsigned char *src_data;
+ int temp_index = curr_offset;
+ int len_of_len = 0, url_len = 0;
if (tlv_str == NULL || url == NULL || consumed_data_len == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || url == NULL ||consumed_data_len == NULL");
}
src_data = &tlv_str[0];
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if((src_data[temp_index++]&0x7F) != SATK_URL_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_URL_TAG) {
dbg("[SAT] SAT PARSER - Browser URL tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- url_len = src_data[temp_index+len_of_len-1];
+ url_len = src_data[temp_index + len_of_len-1];
url->url_length = url_len;
- temp_index+=len_of_len; //temp_index pointing to url.
+ temp_index += len_of_len; /* temp_index pointing to url. */
dbg("URL length (%d)", url_len);
- if(url_len < 0){
+ if (url_len < 0) {
dbg("[SAT] URL is null");
- *consumed_data_len = 1+len_of_len+url_len;
+ *consumed_data_len = 1 + len_of_len + url_len;
return TCORE_SAT_SUCCESS;
}
- if(url_len > SAT_URL_LEN_MAX){
+ if (url_len > SAT_URL_LEN_MAX) {
dbg("[SAT] URL length is wrong");
- *consumed_data_len = 1+len_of_len+url_len;
+ *consumed_data_len = 1 + len_of_len + url_len;
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
memcpy(url->url, &src_data[temp_index], url_len);
dbg("[SAT] url(%s)", url->url);
- *consumed_data_len = 1+len_of_len+url_len;
+ *consumed_data_len = 1 + len_of_len + url_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_bearer_tlv(unsigned char* tlv_str, int tlv_len, int curr_offset,
- struct tel_sat_bearer_list* satk_bearer, int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_bearer_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_bearer_list *satk_bearer, int *consumed_data_len)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index, len_of_len = 0;
int list_len = 0, list_idx = 0;
return TCORE_SAT_ERROR_FATAL;
}
- if (tlv_len <= (curr_offset + 1)) {
- dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
+ if (tlv_len <= (curr_offset + 1)) {
+ dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d",
+ tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- satk_bearer->count = src_data[temp_index + len_of_len - 1];
+ satk_bearer->count = src_data[temp_index + len_of_len - 1];
list_len = satk_bearer->count;
temp_index += len_of_len;
- if ((temp_index + list_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index + list_len), tlv_len);
+ if ((temp_index + list_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + list_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
for (list_idx = 0; list_idx < list_len; list_idx++) {
switch (src_data[temp_index]) {
- case 0x00:
- satk_bearer->bear[list_idx] = BEARER_LIST_SMS;
- break;
- case 0x01:
- satk_bearer->bear[list_idx] = BEARER_LIST_CSD;
- break;
- case 0x02:
- satk_bearer->bear[list_idx] = BEARER_LIST_USSD;
- break;
- case 0x03:
- satk_bearer->bear[list_idx] = BEARER_LIST_GPRS;
- break;
- default:
- satk_bearer->bear[list_idx] = BEARER_LIST_RESERVED;
- break;
+ case 0x00:
+ satk_bearer->bear[list_idx] = BEARER_LIST_SMS;
+ break;
+
+ case 0x01:
+ satk_bearer->bear[list_idx] = BEARER_LIST_CSD;
+ break;
+
+ case 0x02:
+ satk_bearer->bear[list_idx] = BEARER_LIST_USSD;
+ break;
+
+ case 0x03:
+ satk_bearer->bear[list_idx] = BEARER_LIST_GPRS;
+ break;
+
+ default:
+ satk_bearer->bear[list_idx] = BEARER_LIST_RESERVED;
+ break;
}
+
dbg("[SAT] SAT PARSER - bearer[%d]=0x%x", list_idx, satk_bearer->bear[list_idx]);
temp_index++;
}
- } else {
+ } else
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
- *consumed_data_len = 1 + len_of_len + list_len;
+ *consumed_data_len = 1 + len_of_len + list_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_provisioning_file_ref_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_provisioning_file_ref* prf, int* data_len_consumed)
+static enum tcore_sat_result _sat_decode_provisioning_file_ref_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_provisioning_file_ref *prf, int *data_len_consumed)
{
- unsigned char* src_data;
+ unsigned char *src_data;
int temp_index = curr_offset;
int len_of_len = 0, prf_len = 0;
}
src_data = &tlv_str[0];
- if (tlv_len <= (curr_offset + 1)) {
- dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d",tlv_len);
+ if (tlv_len <= (curr_offset + 1)) {
+ dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
if ((src_data[temp_index++] & 0x7F) != SATK_PROVISIONING_REF_FILE_TAG) {
dbg("[SAT] SAT PARSER - PRF tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- prf_len = src_data[temp_index + len_of_len - 1];
+ prf_len = src_data[temp_index + len_of_len - 1];
prf->file_path_length = prf_len;
- temp_index += len_of_len; //temp_index pointing to prf.
+ temp_index += len_of_len; /* temp_index pointing to prf. */
if (prf_len > 0) {
if (prf_len > SAT_PROVISIONING_FILE_PATH_LEN_MAX)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- *data_len_consumed = 1 + len_of_len + prf_len;
+ *data_len_consumed = 1 + len_of_len + prf_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_bearer_description_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_bearer_description *bearer_desc_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_bearer_description_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_bearer_description *bearer_desc_obj, int *consumed_data_len)
{
- int temp_index, length=0;
- unsigned char* src_data;
+ int temp_index, length = 0;
+ unsigned char *src_data;
- if(tlv_len <= (curr_offset+1)+1) {
+ if (tlv_len <= (curr_offset + 1) + 1) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
temp_index = curr_offset;
src_data = &tlv_str[0];
- while(1){
- if(temp_index >= tlv_len){
+ while (1) {
+ if (temp_index >= tlv_len) {
dbg("bearer desc cannot find. UICC Server mode");
*consumed_data_len = 0;
return TCORE_SAT_SUCCESS;
}
- if( (src_data[temp_index]&0x7F) == SATK_BEARER_DISCRIPTION_TAG ){
+ if ((src_data[temp_index] & 0x7F) == SATK_BEARER_DISCRIPTION_TAG) {
dbg("find bearer description tag temp_index(%d)", temp_index);
temp_index++;
break;
}
+
temp_index++;
}
- //length
+ /* length */
length = src_data[temp_index++];
dbg("bearer description length (%d)", length);
- //bearer parameter
- switch(src_data[temp_index++]){
- case BEARER_CSD:
- bearer_desc_obj->bearer_type = BEARER_CSD;
- bearer_desc_obj->bearer_parameter.cs_bearer_param.data_rate = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.cs_bearer_param.service_type = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.cs_bearer_param.connection_element_type = src_data[temp_index++];
- break;
- case BEARER_GPRS:
- bearer_desc_obj->bearer_type = BEARER_GPRS;
- bearer_desc_obj->bearer_parameter.ps_bearer_param.precedence_class = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.ps_bearer_param.delay_class = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.ps_bearer_param.reliability_class = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.ps_bearer_param.peak_throughput_class = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.ps_bearer_param.mean_throughput_class = src_data[temp_index++];
- bearer_desc_obj->bearer_parameter.ps_bearer_param.pdp_type = BIP_GPRS_PDP_TYPE_RESERVED;
- if(src_data[temp_index] == BIP_GPRS_PDP_TYPE_IP)
- bearer_desc_obj->bearer_parameter.ps_bearer_param.pdp_type = BIP_GPRS_PDP_TYPE_IP;
- break;
- case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
- bearer_desc_obj->bearer_type = BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER;
- break;
- case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
- bearer_desc_obj->bearer_type = BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER;
- break;
- default:
- bearer_desc_obj->bearer_type = BEARER_RESERVED;
- dbg("bearer type not supported");
- return TCORE_SAT_BEYOND_ME_CAPABILITY;
+ /* bearer parameter */
+ switch (src_data[temp_index++]) {
+ case BEARER_CSD:
+ bearer_desc_obj->bearer_type = BEARER_CSD;
+ bearer_desc_obj->bearer_parameter.cs_bearer_param.data_rate = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.cs_bearer_param.service_type = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.cs_bearer_param.connection_element_type = src_data[temp_index++];
+ break;
+
+ case BEARER_GPRS:
+ bearer_desc_obj->bearer_type = BEARER_GPRS;
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.precedence_class = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.delay_class = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.reliability_class = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.peak_throughput_class = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.mean_throughput_class = src_data[temp_index++];
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.pdp_type = BIP_GPRS_PDP_TYPE_RESERVED;
+ if (src_data[temp_index] == BIP_GPRS_PDP_TYPE_IP)
+ bearer_desc_obj->bearer_parameter.ps_bearer_param.pdp_type = BIP_GPRS_PDP_TYPE_IP;
+ break;
+
+ case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
+ bearer_desc_obj->bearer_type = BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER;
+ break;
+
+ case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
+ bearer_desc_obj->bearer_type = BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER;
+ break;
+
+ default:
+ bearer_desc_obj->bearer_type = BEARER_RESERVED;
+ dbg("bearer type not supported");
+ return TCORE_SAT_BEYOND_ME_CAPABILITY;
}
- *consumed_data_len = 1+1+length;
+ *consumed_data_len = 1 + 1 + length;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_channel_data_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_channel_data *channel_data_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_channel_data_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_channel_data *channel_data_obj, int *consumed_data_len)
{
int temp_index = 0;
int len_of_len = 0, channel_data_len = 0;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || channel_data_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || channel_data_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || channel_data_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_CHANNEL_DATA_TAG){
- dbg("[SAT] SAT PARSER - tag not found.=%d",src_data[temp_index]);
+ if ((src_data[temp_index++] & 0x7F) != SATK_CHANNEL_DATA_TAG) {
+ dbg("[SAT] SAT PARSER - tag not found.=%d", src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- channel_data_len = src_data[temp_index+len_of_len-1];
- dbg("[SAT] parser: channel_data_len=%d",channel_data_len);
+ channel_data_len = src_data[temp_index + len_of_len-1];
+ dbg("[SAT] parser: channel_data_len=%d", channel_data_len);
temp_index += len_of_len;
- if((temp_index+channel_data_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+channel_data_len),tlv_len);
+ if ((temp_index + channel_data_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index + channel_data_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //data
+ /* data */
channel_data_obj->data_string_len = channel_data_len;
memcpy(channel_data_obj->data_string, &src_data[temp_index], channel_data_len);
- *consumed_data_len = 1+len_of_len+channel_data_len;
+ *consumed_data_len = 1 + len_of_len + channel_data_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_channel_data_length_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_channel_data_len *data_len_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_channel_data_length_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_channel_data_len *data_len_obj, int *consumed_data_len)
{
int temp_index;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || data_len_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || data_len_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || data_len_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_CHANNEL_DATA_LEN_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_CHANNEL_DATA_LEN_TAG) {
dbg("[SAT] SAT PARSER - channel data tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
- if(src_data[temp_index++] != SATK_CHANNEL_DATA_LENGTH_VALUE_LENGTH) {
+ /* length */
+ if (src_data[temp_index++] != SATK_CHANNEL_DATA_LENGTH_VALUE_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //data
+ /* data */
data_len_obj->data_len = src_data[temp_index];
*consumed_data_len = 3;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_buffer_size_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_buffer_size *buffer_size_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_buffer_size_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_buffer_size *buffer_size_obj, int *consumed_data_len)
{
int temp_index;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || buffer_size_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || buffer_size_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || buffer_size_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)+SATK_BUFFER_SIZE_LENGTH) {
+ if (tlv_len <= (curr_offset + 1) + SATK_BUFFER_SIZE_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_BUFFER_SIZE_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_BUFFER_SIZE_TAG) {
dbg("[SAT] SAT PARSER - buffer size tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
- if(src_data[temp_index++] != SATK_BUFFER_SIZE_LENGTH) {
+ /* length */
+ if (src_data[temp_index++] != SATK_BUFFER_SIZE_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
buffer_size_obj->size[0] = src_data[temp_index++];
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_other_address_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_other_address *other_address_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_other_address_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_other_address *other_address_obj, int *consumed_data_len)
{
- gchar* address = NULL;
+ gchar *address = NULL;
int temp_index, address_len;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || other_address_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || other_address_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || other_address_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_OTHER_ADDRESS_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_OTHER_ADDRESS_TAG) {
dbg("[SAT] SAT PARSER - other address tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
+ /* length */
address_len = src_data[temp_index++];
- if((temp_index+address_len) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+address_len),tlv_len);
+ if ((temp_index + address_len) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index + address_len), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(address_len-1 > SAT_OTHER_ADDR_LEN_MAX){
+ if (address_len-1 > SAT_OTHER_ADDR_LEN_MAX) {
dbg("[SAT] SAT PARSER - address is longer than capability");
return TCORE_SAT_BEYOND_ME_CAPABILITY;
}
- //other address type
- switch(src_data[temp_index++]){
- case ADDR_TYPE_IPv4:{
+ /* other address type */
+ switch (src_data[temp_index++]) {
+ case ADDR_TYPE_IPv4: {
other_address_obj->address_type = ADDR_TYPE_IPv4;
- address = g_strdup_printf("%d.%d.%d.%d", src_data[temp_index], src_data[temp_index+1], src_data[temp_index+2], src_data[temp_index+3]);
- }break;
- case ADDR_TYPE_IPv6:{
+ address = g_strdup_printf("%d.%d.%d.%d", src_data[temp_index], src_data[temp_index + 1], src_data[temp_index + 2], src_data[temp_index + 3]);
+ }
+ break;
+
+ case ADDR_TYPE_IPv6: {
other_address_obj->address_type = ADDR_TYPE_IPv6;
address = g_strdup_printf("%x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x:",
- src_data[temp_index], src_data[temp_index+1], src_data[temp_index+2], src_data[temp_index+3],
- src_data[temp_index+4], src_data[temp_index+5], src_data[temp_index+6], src_data[temp_index+7],
- src_data[temp_index+8], src_data[temp_index+9], src_data[temp_index+10], src_data[temp_index+11],
- src_data[temp_index+12], src_data[temp_index+13], src_data[temp_index+14], src_data[temp_index+15]);
- }break;
- default:{
+ src_data[temp_index], src_data[temp_index + 1], src_data[temp_index + 2], src_data[temp_index + 3],
+ src_data[temp_index + 4], src_data[temp_index + 5], src_data[temp_index + 6], src_data[temp_index + 7],
+ src_data[temp_index + 8], src_data[temp_index + 9], src_data[temp_index + 10], src_data[temp_index + 11],
+ src_data[temp_index + 12], src_data[temp_index + 13], src_data[temp_index + 14], src_data[temp_index + 15]);
+ }
+ break;
+
+ default: {
other_address_obj->address_type = ADDR_RESERVED;
address = g_strdup("");
- }break;
- }//end of switch
+ }
+ break;
+ } /* end of switch */
- //address
+ /* address */
if (address) {
memcpy(other_address_obj->address, address, strlen(address));
other_address_obj->address_len = strlen(address);
dbg("destination address(%s)", other_address_obj->address);
}
- *consumed_data_len = 2+address_len;
+ *consumed_data_len = 2 + address_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_uicc_terminal_interface_tlv(unsigned char* tlv_str,
+static enum tcore_sat_result _sat_decode_uicc_terminal_interface_tlv(unsigned char *tlv_str,
int tlv_len, int curr_offset, struct tel_sat_uicc_terminal_interface_transport_level *level_obj,
- int* consumed_data_len)
+ int *consumed_data_len)
{
int temp_index;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || level_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || level_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || level_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)+SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH) {
+ if (tlv_len <= (curr_offset + 1) + SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
dbg("[SAT] SAT PARSER - UICC/TERMINAL Interface transport level tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
- if(src_data[temp_index++] != SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH) {
+ /* length */
+ if (src_data[temp_index++] != SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH) {
dbg("[SAT] SAT PARSER - incorrect length");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
level_obj->protocol_type = src_data[temp_index++];
level_obj->port_number = src_data[temp_index++] << 8;
level_obj->port_number |= src_data[temp_index];
- *consumed_data_len = 2+SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH;
+ *consumed_data_len = 2 + SATK_UICC_ME_TRANS_INTERFACE_LEVEL_LENGTH;
dbg("[SAT] SAT PARSER - protocol type(%d) , port number(%d)", level_obj->protocol_type, level_obj->port_number);
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_remote_entity_address_tlv(unsigned char* tlv_str,
+static enum tcore_sat_result _sat_decode_remote_entity_address_tlv(unsigned char *tlv_str,
int tlv_len, int curr_offset, struct tel_sat_remote_entity_address *remote_address_obj,
- int* consumed_data_len)
+ int *consumed_data_len)
{
int temp_index = 0;
int len_of_len = 0, remote_data_len = 0;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || remote_address_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || remote_address_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || remote_address_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index]&0x7F) != SATK_REMOTE_ENTITY_ADDRESS_TAG){
- dbg("[SAT] SAT PARSER - tag not found.=%d",src_data[temp_index]);
+ if ((src_data[temp_index] & 0x7F) != SATK_REMOTE_ENTITY_ADDRESS_TAG) {
+ dbg("[SAT] SAT PARSER - tag not found.=%d", src_data[temp_index]);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //length
+ /* length */
len_of_len = _get_length_filed_size(src_data[temp_index]);
- if(!len_of_len){
+ if (!len_of_len) {
err("[SAT] parser: invalid length.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- remote_data_len = src_data[temp_index+len_of_len-1];
- dbg("[SAT] parser: remote_data_len=%d",remote_data_len);
+ remote_data_len = src_data[temp_index + len_of_len-1];
+ dbg("[SAT] parser: remote_data_len=%d", remote_data_len);
temp_index += len_of_len;
- //data
- switch(src_data[temp_index++]){
- case REMOTE_ENTITY_ADDR_CODING_TYPE_IEEE802_48BIT:
- remote_address_obj->coding_type = REMOTE_ENTITY_ADDR_CODING_TYPE_IEEE802_48BIT;
- break;
- case REMOTE_ENTITY_ADDR_CODING_TYPE_IRDA_32BIT:
- remote_address_obj->coding_type = REMOTE_ENTITY_ADDR_CODING_TYPE_IRDA_32BIT;
- break;
- default:
- remote_address_obj->coding_type =REMOTE_ENTITY_ADDR_CODING_TYPE_RESERVED;
- break;
+ /* data */
+ switch (src_data[temp_index++]) {
+ case REMOTE_ENTITY_ADDR_CODING_TYPE_IEEE802_48BIT:
+ remote_address_obj->coding_type = REMOTE_ENTITY_ADDR_CODING_TYPE_IEEE802_48BIT;
+ break;
+
+ case REMOTE_ENTITY_ADDR_CODING_TYPE_IRDA_32BIT:
+ remote_address_obj->coding_type = REMOTE_ENTITY_ADDR_CODING_TYPE_IRDA_32BIT;
+ break;
+
+ default:
+ remote_address_obj->coding_type = REMOTE_ENTITY_ADDR_CODING_TYPE_RESERVED;
+ break;
}
remote_address_obj->length = remote_data_len - 1;
memcpy(remote_address_obj->remote_entity_address, &src_data[temp_index], remote_address_obj->length);
- *consumed_data_len = 1+len_of_len+remote_data_len;
+ *consumed_data_len = 1 + len_of_len + remote_data_len;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_network_access_name_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_network_access_name *access_name_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_network_access_name_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_network_access_name *access_name_obj, int *consumed_data_len)
{
int temp_index, idx, name_idx, name_length;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || access_name_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || access_name_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || access_name_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_NETWORK_ACCESS_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_NETWORK_ACCESS_TAG) {
dbg("[SAT] SAT PARSER - network access name tag missing.");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
+ /* length */
name_length = src_data[temp_index++];
- if((temp_index+name_length) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+name_length),tlv_len);
+ if ((temp_index + name_length) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d",
+ (temp_index + name_length), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
access_name_obj->length = name_length;
- if(access_name_obj->length > SAT_NET_ACC_NAM_LEN_MAX){
+ if (access_name_obj->length > SAT_NET_ACC_NAM_LEN_MAX) {
dbg("[SAT] SAT PARSER - network access name is longer than capability");
return TCORE_SAT_BEYOND_ME_CAPABILITY;
}
name_idx = 0;
- for(idx = 0; idx < access_name_obj->length; idx++){
- dbg("data (%c) Bool(%d)",src_data[temp_index], g_ascii_isalpha(src_data[temp_index]) );
+ for (idx = 0; idx < access_name_obj->length; idx++) {
+ dbg("data (%c) Bool(%d)", src_data[temp_index], g_ascii_isalpha(src_data[temp_index]));
- if( g_ascii_isalpha(src_data[temp_index]) ){
+ if (g_ascii_isalpha(src_data[temp_index])) {
access_name_obj->network_access_name[name_idx] = src_data[temp_index];
name_idx++;
- }
- else{
-
- if(src_data[temp_index] == 0x02){//02 convert to "."
+ } else {
+ if (src_data[temp_index] == 0x02) {/* 02 convert to "." */
access_name_obj->network_access_name[name_idx] = '.';
name_idx++;
}
}
+
temp_index++;
}
- //network access name
+ /* network access name */
dbg("network access name(%s)", access_name_obj->network_access_name);
- *consumed_data_len = 2+name_length;
+ *consumed_data_len = 2 + name_length;
return TCORE_SAT_SUCCESS;
}
-static enum tcore_sat_result _sat_decode_text_attribute_tlv(unsigned char* tlv_str,
- int tlv_len, int curr_offset, struct tel_sat_text_attribute *text_attribute_obj,
- int* consumed_data_len)
+static enum tcore_sat_result _sat_decode_text_attribute_tlv(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tel_sat_text_attribute *text_attribute_obj, int *consumed_data_len)
{
int temp_index, length;
- unsigned char* src_data;
+ unsigned char *src_data;
- if(tlv_str == NULL || consumed_data_len == NULL || text_attribute_obj == NULL) {
+ if (tlv_str == NULL || consumed_data_len == NULL || text_attribute_obj == NULL) {
dbg("[SAT] SAT PARSER - tlv_str == NULL || consumed_data_len == NULL || text_attribute_obj == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- if(tlv_len <= (curr_offset+1)) {
+ if (tlv_len <= (curr_offset + 1)) {
dbg("[SAT] SAT PARSER - incorrect length original_command_len=%d", tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //tag
+ /* tag */
temp_index = curr_offset;
src_data = &tlv_str[0];
- if((src_data[temp_index++]&0x7F) != SATK_TEXT_ATTRIBUTE_TAG) {
+ if ((src_data[temp_index++] & 0x7F) != SATK_TEXT_ATTRIBUTE_TAG) {
dbg("[SAT] SAT PARSER - text attribute tag is missing");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //send TR
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
- //length
+ /* length */
length = src_data[temp_index++];
- if((temp_index+length) > tlv_len) {
- dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index+length),tlv_len);
+ if ((temp_index + length) > tlv_len) {
+ dbg("[SAT] SAT PARSER - incorrect cmd len, expected len = %d, orig_len=%d", (temp_index + length), tlv_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //attribute data
+ /* attribute data */
text_attribute_obj->b_txt_attr = TRUE;
memcpy(text_attribute_obj->text_formatting, &src_data[temp_index], length);
- *consumed_data_len = 2+length;
+ *consumed_data_len = 2 + length;
return TCORE_SAT_SUCCESS;
}
-//decode proactive cmd
-//6.4.1 DISPLAY TEXT
-static enum tcore_sat_result _sat_decode_display_text(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * decode proactive cmd
+ */
+/*
+ * 6.4.1 DISPLAY TEXT
+ */
+static enum tcore_sat_result _sat_decode_display_text(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
int tlv_length = 0, remain_len = 0, expected_len = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
tlv_length = cmd_data[curr_offset-1];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.display_text.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.display_text.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
+ /* decode command qualifier */
if (cmd_data[temp_index] & 0x01) {
sat_cmd_ind_data->data.display_text.command_detail.cmd_qualifier.display_text.text_priority =
TEXT_PRIORITY_HIGH;
dbg("[SAT] SAT PARSER - msg_prio=TAPI_SAT_MSG_PRIORITY_HIGH.");
- }
- else {
+ } else {
sat_cmd_ind_data->data.display_text.command_detail.cmd_qualifier.display_text.text_priority =
TEXT_PRIORITY_NORMAL;
dbg("[SAT] SAT PARSER - : msg_prio=TAPI_SAT_MSG_PRIORITY_NORMAL.");
sat_cmd_ind_data->data.display_text.command_detail.cmd_qualifier.display_text.text_clear_type =
TEXT_WAIT_FOR_USER_TO_CLEAR_MSG;
dbg("[SAT] SAT PARSER - : msgClear=TAPI_SAT_WAIT_FOR_USER_TO_CLEAR_MSG.");
- }
- else {
+ } else {
sat_cmd_ind_data->data.display_text.command_detail.cmd_qualifier.display_text.text_clear_type =
TEXT_AUTO_CLEAR_MSG_AFTER_A_DELAY;
dbg("[SAT] SAT PARSER - msgClear=TAPI_SAT_AUTO_CLEAR_MSG_AFTER_A_DELAY.");
}
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.display_text.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- temp_index+=4; // device identities consumes 4 bytes.
+ temp_index += 4; /* device identities consumes 4 bytes. */
remain_len = o_length-temp_index;
expected_len = tlv_length-5-4;
- if(remain_len!=expected_len){
+ if (remain_len != expected_len) {
dbg("[SAT] SAT PARSER - : mismatch!! remain_len=%d, expected_len=%d", remain_len, expected_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.display_text.text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.display_text.text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(sat_cmd_ind_data->data.display_text.text.string_length <= 0){
+ if (sat_cmd_ind_data->data.display_text.text.string_length <= 0) {
err("[SAT] SAT PARSER - :string length is 0");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- dbg("[SAT] SAT PARSER text(%s)",sat_cmd_ind_data->data.display_text.text.string);
- dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",o_length , temp_index, data_len_consumed);
+ dbg("[SAT] SAT PARSER text(%s)", sat_cmd_ind_data->data.display_text.text.string);
+ dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",
+ o_length , temp_index, data_len_consumed);
- if(o_length-temp_index < data_len_consumed){
+ if (o_length-temp_index < data_len_consumed) {
dbg("[SAT] SAT PARSER - :wrong text TLV.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- //icon identifier
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.display_text.icon_id, &data_len_consumed);
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* icon identifier */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.display_text.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //immediate response
+ /* immediate response */
sat_cmd_ind_data->data.display_text.immediate_response_requested = FALSE;
- if((cmd_data[temp_index]&0x7F) == SATK_IMMEDIATE_RESPONSE_TAG){
+ if ((cmd_data[temp_index] & 0x7F) == SATK_IMMEDIATE_RESPONSE_TAG) {
data_len_consumed = 2;
dbg("[SAT] SAT PARSER - :immediate response required.");
sat_cmd_ind_data->data.display_text.immediate_response_requested = TRUE;
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //time duration - optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.display_text.duration, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* time duration - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.display_text.duration,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.display_text.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.display_text.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- if(o_length > temp_index){
+ if (o_length > temp_index) {
dbg("[SAT] SAT PARSER - : wrong text TLV, remaining data is found!!");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.2 GET INKEY
-static enum tcore_sat_result _sat_decode_get_inkey(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.2 GET INKEY
+ */
+static enum tcore_sat_result _sat_decode_get_inkey(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
int tlv_length = 0, remain_len = 0, expected_len = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
tlv_length = cmd_data[curr_offset-1];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
+ /* decode command qualifier */
if (cmd_data[temp_index] & 0x01) {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.alphabet_set = TRUE;
dbg("[SAT] SAT PARSER - Alphabet set");
}
- if(cmd_data[temp_index]&0x02){
+ if (cmd_data[temp_index] & 0x02) {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.alphabet_type = INPUT_ALPHABET_TYPE_UCS2;
dbg("[SAT] SAT PARSER - INPUT_ALPHABET_TYPE_UCS2");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.alphabet_type = INPUT_ALPHABET_TYPE_SMS_DEFAULT;
dbg("[SAT] SAT PARSER - INPUT_ALPHABET_TYPE_SMS_DEFAULT");
}
- if(cmd_data[temp_index]&0x04){
+ if (cmd_data[temp_index] & 0x04) {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.inkey_type = INKEY_TYPE_YES_NO_REQUESTED;
dbg("[SAT] SAT PARSER - INKEY_TYPE_YES_NO_REQUESTED");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.inkey_type = INKEY_TYPE_CHARACTER_SET_ENABLED;
dbg("[SAT] SAT PARSER - INKEY_TYPE_YES_NO_REQUESTED");
}
- if(cmd_data[temp_index]&0x08){
+ if (cmd_data[temp_index] & 0x08) {
sat_cmd_ind_data->data.get_inkey.command_detail.cmd_qualifier.get_inkey.immediate_rsp_required = TRUE;
dbg("[SAT] SAT PARSER - immediate response requested");
}
dbg("[SAT] SAT PARSER - Help info");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.get_inkey.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //text
- temp_index+=4;
+ /* text */
+ temp_index += 4;
remain_len = o_length-temp_index;
expected_len = tlv_length-5-4;
- if(remain_len!=expected_len){
+ if (remain_len != expected_len) {
dbg("[SAT] SAT PARSER - : mismatch!! remain_len=%d, expected_len=%d", remain_len, expected_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_inkey.text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_inkey.text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(sat_cmd_ind_data->data.get_inkey.text.string_length <= 0){
+ if (sat_cmd_ind_data->data.get_inkey.text.string_length <= 0) {
err("[SAT] SAT PARSER - :string length is 0");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- dbg("[SAT] SAT PARSER text(%s)",sat_cmd_ind_data->data.get_inkey.text.string);
- dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",o_length , temp_index, data_len_consumed);
+ dbg("[SAT] SAT PARSER text(%s)", sat_cmd_ind_data->data.get_inkey.text.string);
+ dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",
+ o_length , temp_index, data_len_consumed);
- if(o_length-temp_index < data_len_consumed){
+ if (o_length-temp_index < data_len_consumed) {
dbg("[SAT] SAT PARSER - :wrong text TLV.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- //icon identifier - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_inkey.icon_id, &data_len_consumed);
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* icon identifier - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_inkey.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //time duration - optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_inkey.duration, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* time duration - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_inkey.duration,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_inkey.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_inkey.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- if(o_length > temp_index){
+ if (o_length > temp_index) {
dbg("[SAT] SAT PARSER - : wrong text TLV, remaining data is found!!");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.3 GET INPUT
-static enum tcore_sat_result _sat_decode_get_input(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.3 GET INPUT
+ */
+static enum tcore_sat_result _sat_decode_get_input(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
int tlv_length = 0, remain_len = 0, expected_len = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
tlv_length = cmd_data[curr_offset-1];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.get_input.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.get_input.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
+ /* decode command qualifier */
if (cmd_data[temp_index] & 0x01) {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.alphabet_set = TRUE;
dbg("[SAT] SAT PARSER - Alphabet set");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.alphabet_set = FALSE;
dbg("[SAT] SAT PARSER - Numeric info");
}
- if(cmd_data[temp_index]&0x02){
+ if (cmd_data[temp_index] & 0x02) {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.alphabet_type = INPUT_ALPHABET_TYPE_UCS2;
dbg("[SAT] SAT PARSER - INPUT_ALPHABET_TYPE_UCS2");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.alphabet_type = INPUT_ALPHABET_TYPE_SMS_DEFAULT;
dbg("[SAT] SAT PARSER - INPUT_ALPHABET_TYPE_SMS_DEFAULT");
}
- if(cmd_data[temp_index]&0x04){
+ if (cmd_data[temp_index] & 0x04) {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.me_echo_user_input = FALSE;
dbg("[SAT] SAT PARSER - user input not be revealed");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.me_echo_user_input = TRUE;
dbg("[SAT] SAT PARSER - Me echo user input");
}
- if(cmd_data[temp_index]&0x08){
+ if (cmd_data[temp_index] & 0x08) {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.user_input_unpacked_format = FALSE;
dbg("[SAT] SAT PARSER - packing required");
- }
- else{
+ } else {
sat_cmd_ind_data->data.get_input.command_detail.cmd_qualifier.get_input.user_input_unpacked_format = TRUE;
dbg("[SAT] SAT PARSER - unpacked format");
}
dbg("[SAT] SAT PARSER - Help info");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.get_input.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //text - mandatory
- temp_index+=4;
+ /* text - mandatory */
+ temp_index += 4;
remain_len = o_length-temp_index;
- expected_len = tlv_length-5-4;
- if(remain_len!=expected_len){
+ expected_len = tlv_length - 5 - 4;
+ if (remain_len != expected_len) {
dbg("[SAT] SAT PARSER - : mismatch!! remain_len=%d, expected_len=%d", remain_len, expected_len);
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_input.text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_input.text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(sat_cmd_ind_data->data.get_input.text.string_length <= 0){
+ if (sat_cmd_ind_data->data.get_input.text.string_length <= 0)
err("[SAT] SAT PARSER - :string length is 0");
- }
- dbg("[SAT] SAT PARSER text(%s)",sat_cmd_ind_data->data.get_input.text.string);
- dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",o_length , temp_index, data_len_consumed);
- if(o_length-temp_index < data_len_consumed){
+ dbg("[SAT] SAT PARSER text(%s)", sat_cmd_ind_data->data.get_input.text.string);
+ dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",
+ o_length , temp_index, data_len_consumed);
+
+ if (o_length-temp_index < data_len_consumed) {
dbg("[SAT] SAT PARSER - :wrong text TLV.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- //response length - mandatory
- rv = _sat_decode_response_length_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_input.rsp_len, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+
+ /* response length - mandatory */
+ rv = _sat_decode_response_length_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_input.rsp_len,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- //default text - optional
- if((o_cmd_data[temp_index]&0x7F) == SATK_DEFAULT_TEXT_TAG){
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_input.default_text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+
+ /* default text - optional */
+ if ((o_cmd_data[temp_index] & 0x7F) == SATK_DEFAULT_TEXT_TAG) {
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_input.default_text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(sat_cmd_ind_data->data.get_input.default_text.string_length <= 0){
+ if (sat_cmd_ind_data->data.get_input.default_text.string_length <= 0)
err("[SAT] SAT PARSER - :string length is 0");
- }
- dbg("[SAT] SAT PARSER default text(%s)",sat_cmd_ind_data->data.get_input.default_text.string);
- if(o_length-temp_index == data_len_consumed){
+
+ dbg("[SAT] SAT PARSER default text(%s)", sat_cmd_ind_data->data.get_input.default_text.string);
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
- //icon identifier
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_input.icon_id, &data_len_consumed);
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+ }
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* icon identifier */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_input.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.get_input.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.get_input.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(o_length-temp_index == data_len_consumed){
+ if (o_length-temp_index == data_len_consumed) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- if(o_length > temp_index){
+ if (o_length > temp_index) {
dbg("[SAT] SAT PARSER - : wrong text TLV, remaining data is found!!");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.4 MORE TIME
-static enum tcore_sat_result _sat_decode_more_time(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.4 MORE TIME
+ */
+static enum tcore_sat_result _sat_decode_more_time(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_type = cmd_data[temp_index++];
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.setup_event_list.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- temp_index+=4;
+ temp_index += 4;
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.5 PLAY TONE
-static enum tcore_sat_result _sat_decode_play_tone(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.5 PLAY TONE
+ */
+static enum tcore_sat_result _sat_decode_play_tone(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.play_tone.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.play_tone.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
+ /* decode command qualifier */
if (cmd_data[temp_index] & 0x01)
sat_cmd_ind_data->data.play_tone.command_detail.cmd_qualifier.play_tone.vibration_alert = VIBRATE_ALERT_REQUIRED;
else
sat_cmd_ind_data->data.play_tone.command_detail.cmd_qualifier.play_tone.vibration_alert = VIBRATE_ALERT_OPTIONAL;
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.play_tone.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha id - optional
- temp_index+=4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.play_tone.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha id - optional */
+ temp_index += 4;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.play_tone.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
dbg("[SAT] SAT PARSER - default value is set - tone type, duration");
sat_cmd_ind_data->data.play_tone.tone.tone_type = GENERAL_BEEP;
sat_cmd_ind_data->data.play_tone.duration.time_unit = TIME_UNIT_SECONDS;
sat_cmd_ind_data->data.play_tone.duration.time_interval = 2;
+
return TCORE_SAT_SUCCESS;
}
}
- //tone - optional
- if((cmd_data[temp_index]&0x7F) == SATK_TONE_TAG){
- rv = _sat_decode_tone_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.play_tone.tone, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* tone - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TONE_TAG) {
+ rv = _sat_decode_tone_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.play_tone.tone,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- }
- else{
+
+ temp_index += data_len_consumed;
+ } else
sat_cmd_ind_data->data.play_tone.tone.tone_type = GENERAL_BEEP;
- }
- //time duration - optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.play_tone.duration, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* time duration - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.play_tone.duration,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- }
- else{
+ } else {
dbg("[SAT] SAT PARSER - Duration TLV not present, ME should use a default value.");
sat_cmd_ind_data->data.play_tone.duration.time_unit = TIME_UNIT_SECONDS;
sat_cmd_ind_data->data.play_tone.duration.time_interval = 2;
}
- //icon identifier
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.play_tone.icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.play_tone.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.play_tone.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.play_tone.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
-//ToDo: frames
+ /*
+ * TODO:
+ * frames
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.7 REFRESH
-static enum tcore_sat_result _sat_decode_refresh(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.7 REFRESH
+ */
+static enum tcore_sat_result _sat_decode_refresh(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.refresh.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.refresh.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
- switch(cmd_data[temp_index]){
- case SIM_REFRESH_CMD_INIT_AND_FULL_FCN:
- case SIM_REFRESH_CMD_FCN:
- case SIM_REFRESH_CMD_INIT_AND_FCN:
- case SIM_REFRESH_CMD_INIT :
- case SIM_REFRESH_CMD_RESET:
- sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh = cmd_data[temp_index];
- dbg("[SAT] SAT PARSER - : refresh mode=[0x%02x]:0-init&FFCN, 1-FCN, 2-init&FCN, 3-init, 4-reset", cmd_data[temp_index]);
- break;
-
- case SIM_REFRESH_CMD_3G_APPLICATION_RESET:
- case SIM_REFRESH_CMD_3G_SESSION_RESET:
- case SIM_REFRESH_CMD_RESERVED:
- default:
- dbg("[SAT] SAT PARSER - : refresh mode=0x%02x Not Supported", cmd_data[temp_index]);
- return TCORE_SAT_BEYOND_ME_CAPABILITY;
- break;
+ /* decode command qualifier */
+ switch (cmd_data[temp_index]) {
+ case SIM_REFRESH_CMD_INIT_AND_FULL_FCN:
+ case SIM_REFRESH_CMD_FCN:
+ case SIM_REFRESH_CMD_INIT_AND_FCN:
+ case SIM_REFRESH_CMD_INIT:
+ case SIM_REFRESH_CMD_RESET:
+ sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh = cmd_data[temp_index];
+ dbg("[SAT] SAT PARSER - : refresh mode=[0x%02x]:0-init&FFCN, 1-FCN, 2-init&FCN, 3-init, 4-reset",
+ cmd_data[temp_index]);
+ break;
+
+ case SIM_REFRESH_CMD_3G_APPLICATION_RESET:
+ case SIM_REFRESH_CMD_3G_SESSION_RESET:
+ case SIM_REFRESH_CMD_RESERVED:
+ default:
+ dbg("[SAT] SAT PARSER - : refresh mode=0x%02x Not Supported", cmd_data[temp_index]);
+ return TCORE_SAT_BEYOND_ME_CAPABILITY;
}
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.refresh.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //check file list
- temp_index+=4;
- if( (sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh == SIM_REFRESH_CMD_FCN)
- || (sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh == SIM_REFRESH_CMD_INIT_AND_FCN) ){
-
- rv = _sat_decode_file_list_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.refresh.file_list, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ /* check file list */
+ temp_index += 4;
+ if ((sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh == SIM_REFRESH_CMD_FCN)
+ || (sat_cmd_ind_data->data.refresh.command_detail.cmd_qualifier.refresh.refresh == SIM_REFRESH_CMD_INIT_AND_FCN)) {
+ rv = _sat_decode_file_list_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.refresh.file_list,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- else
+ } else
sat_cmd_ind_data->data.refresh.file_list.file_count = 0;
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.8 SETUP MENU
-static enum tcore_sat_result _sat_decode_setup_menu(unsigned char* tlv_str, int tlv_len,
- int curr_offset, struct tcore_sat_proactive_command *pactive_cmd_ind_obj)
+/*
+ * 6.4.8 SETUP MENU
+ */
+static enum tcore_sat_result _sat_decode_setup_menu(unsigned char *tlv_str, int tlv_len,
+ int curr_offset, struct tcore_sat_proactive_command *pactive_cmd_ind_obj)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* src_data;
+ unsigned char *src_data;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- //access command detail
- temp_index = curr_offset+2; //move the temp_index to command detail info +2(tag and length)
+ /* access command detail */
+ temp_index = curr_offset + 2; /* move the temp_index to command detail info + 2(tag and length) */
src_data = &tlv_str[0];
-// In this time, the point of temp_index is COMMAND NUMBER
-// [1] insert command detail information into each proactive command data structure.
+ /* In this time, the point of temp_index is COMMAND NUMBER */
+ /* [1] insert command detail information into each proactive command data structure. */
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_num = src_data[temp_index++];
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_type = src_data[temp_index++];
-// [2] decode COMMAND QUALIFIER
-/*
--bit 1: 0 = no selection preference;
- 1 = selection using soft key preferred.
--bits 2 to 7: = RFU.
--bit 8: 0 = no help information available;
- 1 = help information available.
-*/
-
-//[2-1] selection preference
+ /* [2] decode COMMAND QUALIFIER */
+ /*
+ * -bit 1: 0 = no selection preference;
+ * 1 = selection using soft key preferred.
+ * -bits 2 to 7: = RFU.
+ * -bit 8: 0 = no help information available;
+ * 1 = help information available.
+ */
+
+ /* [2-1] selection preference */
if (src_data[temp_index] & 0x01) {
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_qualifier.setup_menu.select_preference =
SELECTION_PREFERENCE_USING_SOFT_KEY;
dbg("[SAT] SAT PARSER - sel_pref=SAT_SELECTION_PREFERENCE_USING_SOFT_KEY.");
- }
- else {
+ } else {
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_qualifier.setup_menu.select_preference =
SELECTION_PREFERENCE_NONE_REQUESTED;
dbg("[SAT] SAT PARSER - : sel_pref=SAT_SELECTION_PREFERENCE_NONE_REQUESTED.");
}
-//[2-2] help available
+ /* [2-2] help available */
if (src_data[temp_index] & 0x80) {
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_qualifier.setup_menu.help_info =
TRUE;
- ;dbg("[SAT] SAT PARSER - : is help Available=TRUE.");
- }
- else {
+ dbg("[SAT] SAT PARSER - : is help Available=TRUE.");
+ } else {
pactive_cmd_ind_obj->data.setup_menu.command_detail.cmd_qualifier.setup_menu.help_info =
FALSE;
dbg("[SAT] SAT PARSER - is help Available=FALSE.");
}
-// In this time, the point of temp_index is DEVICE IDENTITIES.
-//[3] decode DEVICE IDENTITIES TLV
+ /* In this time, the point of temp_index is DEVICE IDENTITIES. */
+ /* [3] decode DEVICE IDENTITIES TLV */
temp_index++;
memcpy(dev_id, &src_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &pactive_cmd_ind_obj->data.setup_menu.device_id);
if (rv != TCORE_SAT_SUCCESS) {
- //send TR in SatkProcessProactiveCmdInd()
+ /* send TR in SatkProcessProactiveCmdInd() */
return rv;
}
-
-// In this time, the point of temp_index is ALPHA IDENTIFIER. 11 or 12.
-//[4] decode ALPHA IDENTIFIER TLV
- temp_index+=4;
- dbg("[SAT] SAT PARSER - :temp_index=%d",temp_index);
+ /* In this time, the point of temp_index is ALPHA IDENTIFIER. 11 or 12. */
+ /* [4] decode ALPHA IDENTIFIER TLV */
+ temp_index += 4;
+ dbg("[SAT] SAT PARSER - :temp_index=%d", temp_index);
rv = _sat_decode_alpha_identifier_tlv(src_data, tlv_len, temp_index,
- &pactive_cmd_ind_obj->data.setup_menu.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ &pactive_cmd_ind_obj->data.setup_menu.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
-// In this time, the point of temp_index is ITEM TLV
-//[5] decode ITEM LIST (at least one is mandatory)
- temp_index+= data_len_consumed;
+ /* In this time, the point of temp_index is ITEM TLV */
+ /* [5] decode ITEM LIST (at least one is mandatory) */
+ temp_index += data_len_consumed;
pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt = 0;
- do{
- data_len_consumed=0;
- if((src_data[temp_index]&0x7F) == SATK_ITEM_TAG) {
+ do {
+ data_len_consumed = 0;
+ if ((src_data[temp_index] & 0x7F) == SATK_ITEM_TAG) {
rv = _sat_decode_item_tlv(src_data, tlv_len, temp_index,
- &pactive_cmd_ind_obj->data.setup_menu.menu_item[pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt],
- &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS)
+ &pactive_cmd_ind_obj->data.setup_menu.menu_item[pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt],
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(!pactive_cmd_ind_obj->data.setup_menu.menu_item[0].text_len)
+ if (!pactive_cmd_ind_obj->data.setup_menu.menu_item[0].text_len)
break;
- }
- else {
- if(pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt == 0) {
+ } else {
+ if (pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt == 0) {
dbg("menu item is not exist.");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //else
- break; //???
+ /* else */
+ break; /* ??? */
}
pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt++;
temp_index += data_len_consumed;
- if(temp_index >= tlv_len)
+ if (temp_index >= tlv_len)
break;
- }while(pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt < SAT_MENU_ITEM_COUNT_MAX);
+ } while (pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt < SAT_MENU_ITEM_COUNT_MAX);
- dbg("[SAT] SAT PARSER - :setup menu item_count=%d",pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt);
- if(temp_index >= tlv_len){
+ dbg("[SAT] SAT PARSER - :setup menu item_count=%d", pactive_cmd_ind_obj->data.setup_menu.menu_item_cnt);
+ if (temp_index >= tlv_len) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
- //send TR in SatkProcessProactiveCmdInd()
+ /* send TR in SatkProcessProactiveCmdInd() */
return TCORE_SAT_SUCCESS;
}
-//[6] (optional TLV) decode ITEMS NEXT ACTION INDICATOR TLV
- if((src_data[temp_index]&0x7F) == SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG) {
+ /* [6] (optional TLV) decode ITEMS NEXT ACTION INDICATOR TLV */
+ if ((src_data[temp_index] & 0x7F) == SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG) {
data_len_consumed = 0;
rv = _sat_decode_item_next_action_indicator_tlv(tlv_str, tlv_len, temp_index,
- &pactive_cmd_ind_obj->data.setup_menu.next_act_ind_list, &data_len_consumed);
- if(rv!=TCORE_SAT_SUCCESS) return rv;
+ &pactive_cmd_ind_obj->data.setup_menu.next_act_ind_list,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- if(temp_index+data_len_consumed >= tlv_len) {
+ if (temp_index + data_len_consumed >= tlv_len) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- //send the data to Noti manager.
+ /* send the data to Noti manager. */
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
- else {
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+ } else {
dbg("[SAT] SAT PARSER - ITEMS NEXT ACTION INDICATOR TLV Not present");
}
-//[7] (optional TLV) decode ICON IDENTIFIER TLV
- if((src_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG) {
+ /* [7] (optional TLV) decode ICON IDENTIFIER TLV */
+ if ((src_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(tlv_str, tlv_len, temp_index,
- &pactive_cmd_ind_obj->data.setup_menu.icon_id, &data_len_consumed);
- if(rv !=TCORE_SAT_SUCCESS) return rv;
+ &pactive_cmd_ind_obj->data.setup_menu.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- if(temp_index+data_len_consumed >= tlv_len) {
+ if (temp_index + data_len_consumed >= tlv_len) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- //send the data to Noti manager.
+ /* send the data to Noti manager. */
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
- else{
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+ } else {
dbg("[SAT] SAT PARSER - ICON IDENTIFIER TLV Not present");
}
-//[8] (optional TLV) decode ICON IDENTIFIER LIST TLV
- if((src_data[temp_index]&0x7F) == SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
+ /* [8] (optional TLV) decode ICON IDENTIFIER LIST TLV */
+ if ((src_data[temp_index] & 0x7F) == SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_list_tlv(tlv_str, tlv_len, temp_index,
- &pactive_cmd_ind_obj->data.setup_menu.icon_list, &data_len_consumed);
- if(rv !=TCORE_SAT_SUCCESS) return rv; //SEND TR
+ &pactive_cmd_ind_obj->data.setup_menu.icon_list,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index+data_len_consumed >= tlv_len){
+ if (temp_index + data_len_consumed >= tlv_len) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- //send the data to Noti manager.
+ /* send the data to Noti manager. */
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
- else {
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
+
+ } else {
dbg("[SAT] SAT PARSER - ICON IDENTIFIER LIST TLV not present");
}
- //text attribute - optional
- if((src_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(tlv_str, tlv_len, temp_index, &pactive_cmd_ind_obj->data.setup_menu.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((src_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(tlv_str, tlv_len, temp_index,
+ &pactive_cmd_ind_obj->data.setup_menu.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index+data_len_consumed >= tlv_len){
+ if (temp_index + data_len_consumed >= tlv_len) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute list - optional
- if((src_data[temp_index]&0x7F) == SATK_TEXT_ATTRIBUTE_LIST_TAG){
+ /* text attribute list - optional */
+ if ((src_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_LIST_TAG) {
int attr_item_temp_index = 0, item_cnt = 0;
int txt_attr_list_len = 0;
txt_attr_list = &pactive_cmd_ind_obj->data.setup_menu.text_attribute_list;
- //length
+ /* length */
temp_index++;
txt_attr_list_len = src_data[temp_index];
- if(txt_attr_list_len == 0){
+ if (txt_attr_list_len == 0) {
dbg("[SAT] - Text Attribute List is nothing");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //item cnt - each text attribute length is 4byte
+ /* item cnt - each text attribute length is 4byte */
item_cnt = txt_attr_list_len/4;
txt_attr_list->list_cnt = item_cnt;
dbg("[SAT] - text attribute item cnt(%d)", item_cnt);
- //get attribute data
+ /* get attribute data */
temp_index++;
- for(attr_item_temp_index = 0; attr_item_temp_index < item_cnt; attr_item_temp_index++){
+ for (attr_item_temp_index = 0; attr_item_temp_index < item_cnt; attr_item_temp_index++) {
memcpy(txt_attr_list->text_attribute_list[attr_item_temp_index].text_formatting, &src_data[temp_index], 4);
temp_index += 4;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.9 SELECT ITEM
-static enum tcore_sat_result _sat_decode_select_item(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.9 SELECT ITEM
+ */
+static enum tcore_sat_result _sat_decode_select_item(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.select_item.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.select_item.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
+ /* decode command qualifier */
if (cmd_data[temp_index] & 0x01) {
if (cmd_data[temp_index] & 0x02) {
sat_cmd_ind_data->data.select_item.command_detail.cmd_qualifier.select_item.presentation_type = PRESENTATION_TYPE_NAVIGATION_OPTION;
dbg("[SAT] SAT PARSER - PRESENTATION_TYPE_NAVIGATION_OPTION");
- }
- else{
+ } else {
sat_cmd_ind_data->data.select_item.command_detail.cmd_qualifier.select_item.presentation_type = PRESENTATION_TYPE_DATA_VALUE;
dbg("[SAT] SAT PARSER - PRESENTATION_TYPE_DATA_VALUE");
}
- }
- else {
+ } else {
sat_cmd_ind_data->data.select_item.command_detail.cmd_qualifier.select_item.presentation_type = PRESENTATION_TYPE_NOT_SPECIFIED;
dbg("[SAT] SAT PARSER - PRESENTATION_TYPE_NOT_SPECIFIED");
}
if (cmd_data[temp_index] & 0x04) {
sat_cmd_ind_data->data.select_item.command_detail.cmd_qualifier.select_item.select_preference = SELECTION_PREFERENCE_USING_SOFT_KEY;
dbg("[SAT] SAT PARSER - SELECTION_PREFERENCE_USING_SOFT_KEY");
- }
- else {
+ } else {
sat_cmd_ind_data->data.select_item.command_detail.cmd_qualifier.select_item.select_preference = SELECTION_PREFERENCE_NONE_REQUESTED;
dbg("[SAT] SAT PARSER - SELECTION_PREFERENCE_NONE_REQUESTED");
}
dbg("[SAT] SAT PARSER - Help info");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.select_item.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier
- temp_index+=4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.select_item.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha identifier */
+ temp_index += 4;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.select_item.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //item objects
+ /* item objects */
sat_cmd_ind_data->data.select_item.menu_item_cnt = 0;
- do{
- data_len_consumed=0;
+ do {
+ data_len_consumed = 0;
- if((cmd_data[temp_index]&0x7F) == SATK_ITEM_TAG) {
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ITEM_TAG) {
rv = _sat_decode_item_tlv(o_cmd_data, o_length, temp_index,
&sat_cmd_ind_data->data.select_item.menu_item[sat_cmd_ind_data->data.select_item.menu_item_cnt],
&data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- else {
- if(sat_cmd_ind_data->data.select_item.menu_item_cnt == 0) {
+ } else {
+ if (sat_cmd_ind_data->data.select_item.menu_item_cnt == 0) {
dbg("menu item is not exist.");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //else
- break; //???
+ /* else */
+ break; /* ??? */
}
+
sat_cmd_ind_data->data.select_item.menu_item_cnt++;
temp_index += data_len_consumed;
- if(temp_index >= o_length)
+ if (temp_index >= o_length)
break;
- }while(sat_cmd_ind_data->data.select_item.menu_item_cnt < SAT_MENU_ITEM_COUNT_MAX);
+ } while (sat_cmd_ind_data->data.select_item.menu_item_cnt < SAT_MENU_ITEM_COUNT_MAX);
- dbg("[SAT] SAT PARSER - select menu item_count=%d",sat_cmd_ind_data->data.select_item.menu_item_cnt);
- if(temp_index >= o_length){
+ dbg("[SAT] SAT PARSER - select menu item_count=%d", sat_cmd_ind_data->data.select_item.menu_item_cnt);
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- //item next action indicator
- if((cmd_data[temp_index]&0x7F) == SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG) {
+ /* item next action indicator */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ITEMS_NEXT_ACTION_INDICATOR_TAG) {
data_len_consumed = 0;
rv = _sat_decode_item_next_action_indicator_tlv(o_cmd_data, o_length, temp_index,
&sat_cmd_ind_data->data.select_item.item_next_act_ind_list, &data_len_consumed);
- if(rv!=TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(temp_index+data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed;
+ temp_index += data_len_consumed;
}
- //item identifier
- if((cmd_data[temp_index]&0x7F) == SATK_ITEM_IDENTIFIER_TAG) {
+ /* item identifier */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ITEM_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_item_identifier_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.select_item.item_identifier, &data_len_consumed);
- if(rv !=TCORE_SAT_SUCCESS)
+ &sat_cmd_ind_data->data.select_item.item_identifier,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(temp_index+data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //icon identifier
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.select_item.icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ &sat_cmd_ind_data->data.select_item.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- if((cmd_data[temp_index]&0x7F) == SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ITEM_ICON_IDENTIFIER_LIST_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_list_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.select_item.icon_list, &data_len_consumed);
- if(rv !=TCORE_SAT_SUCCESS)
- return rv; //SEND TR
+ &sat_cmd_ind_data->data.select_item.icon_list,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_ATTRIBUTE_TAG){
- rv =_sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.select_item.text_attribute, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text attribute - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_TAG) {
+ rv = _sat_decode_text_attribute_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.select_item.text_attribute,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //text attribute list - optional
- if((cmd_data[temp_index]&0x7F) == SATK_TEXT_ATTRIBUTE_LIST_TAG){
+ /* text attribute list - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_ATTRIBUTE_LIST_TAG) {
int attr_item_temp_index = 0, item_cnt = 0;
int txt_attr_list_len = 0;
txt_attr_list = &sat_cmd_ind_data->data.select_item.text_attribute_list;
- //length
+ /* length */
temp_index++;
txt_attr_list_len = cmd_data[temp_index];
- if(txt_attr_list_len == 0){
+ if (txt_attr_list_len == 0) {
dbg("[SAT] - Text Attribute List is nothing");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //item cnt - each text attribute length is 4byte
+ /* item cnt - each text attribute length is 4byte */
item_cnt = txt_attr_list_len/4;
txt_attr_list->list_cnt = item_cnt;
dbg("[SAT] - text attribute item cnt(%d)", item_cnt);
- //get attribute data
+ /* get attribute data */
temp_index++;
- for(attr_item_temp_index = 0; attr_item_temp_index < item_cnt; attr_item_temp_index++){
+ for (attr_item_temp_index = 0; attr_item_temp_index < item_cnt; attr_item_temp_index++) {
memcpy(txt_attr_list->text_attribute_list[attr_item_temp_index].text_formatting, &cmd_data[temp_index], 4);
temp_index += 4;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.10 SEND SMS
-static enum tcore_sat_result _sat_decode_send_sms(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.10 SEND SMS
+ */
+static enum tcore_sat_result _sat_decode_send_sms(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.send_sms.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.send_sms.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
- if (cmd_data[temp_index] & 0x01) {
+ /* decode command qualifier */
+ if (cmd_data[temp_index] & 0x01)
sat_cmd_ind_data->data.send_sms.command_detail.cmd_qualifier.send_sms.packing_by_me_required = TRUE;
- }
else {
sat_cmd_ind_data->data.send_sms.command_detail.cmd_qualifier.send_sms.packing_by_me_required = FALSE;
dbg("[SAT] SAT PARSER - packing by me required is false");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.send_sms.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier
- temp_index+=4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
+ /* alpha identifier */
+ temp_index += 4;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_sms.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_sms.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //address
- if((cmd_data[temp_index]&0x7F) == SATK_ADDRESS_TAG){
+ /* address */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ADDRESS_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_sms.address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_sms.address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //SMS-TPDU
+ /* SMS-TPDU */
data_len_consumed = 0;
- rv = _sat_decode_sms_tpdu_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_sms.sms_tpdu, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_sms_tpdu_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_sms.sms_tpdu,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- //icon identifier
- temp_index+=data_len_consumed;
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier */
+ temp_index += data_len_consumed;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.send_sms.icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ &sat_cmd_ind_data->data.send_sms.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.11 SEND SS
-static enum tcore_sat_result _sat_decode_send_ss(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.11 SEND SS
+ */
+static enum tcore_sat_result _sat_decode_send_ss(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL || sat_cmd_ind_data == NULL){
+ if (o_cmd_data == NULL || sat_cmd_ind_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.send_ss.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.send_ss.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.send_ss.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ss.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ss.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //ss string
- rv = _sat_decode_ss_string_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ss.ss_string, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ /* ss string */
+ rv = _sat_decode_ss_string_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ss.ss_string,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //icon identifier- optional
- temp_index+=data_len_consumed;
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier - optional */
+ temp_index += data_len_consumed;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ss.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
-
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ss.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.12 SEND USSD
-static enum tcore_sat_result _sat_decode_send_ussd(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.12 SEND USSD
+ */
+static enum tcore_sat_result _sat_decode_send_ussd(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL || sat_cmd_ind_data == NULL){
+ if (o_cmd_data == NULL || sat_cmd_ind_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.send_ussd.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.send_ussd.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.send_ussd.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ussd.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ussd.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //ussd string
- rv = _sat_decode_ussd_string_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ussd.ussd_string, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ /* ussd string */
+ rv = _sat_decode_ussd_string_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ussd.ussd_string,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //icon identifier- optional
- temp_index+=data_len_consumed;
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier- optional */
+ temp_index += data_len_consumed;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_ussd.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
-
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_ussd.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
}
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.13 SETUP CALL
-static enum tcore_sat_result _sat_decode_setup_call(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.13 SETUP CALL
+ */
+static enum tcore_sat_result _sat_decode_setup_call(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL || sat_cmd_ind_data == NULL){
+ if (o_cmd_data == NULL || sat_cmd_ind_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.setup_call.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.setup_call.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
- switch(cmd_data[temp_index]){
- case SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY:
- case SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY_WITH_REDIAL:
- case SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD:
- case SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD_WITH_REDIAL:
- case SETUP_CALL_DISCONN_ALL_OTHER_CALLS:
- case SETUP_CALL_DISCONN_ALL_OTHER_CALLS_WITH_REDIAL:
- sat_cmd_ind_data->data.setup_call.command_detail.cmd_qualifier.setup_call.setup_call = cmd_data[temp_index];
- dbg("[SAT] SAT PARSER - setup_call.cmd_qualifier= 0x%02x", sat_cmd_ind_data->data.setup_call.command_detail.cmd_qualifier.setup_call.setup_call);
- break;
- case SETUP_CALL_RESERVED:
- default:
- dbg("[SAT] SAT PARSER - setup_call.cmd_qualifier= 0x%02x", cmd_data[temp_index]);
- return TCORE_SAT_BEYOND_ME_CAPABILITY;
- break;
+ /* decode command qualifier */
+ switch (cmd_data[temp_index]) {
+ case SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY:
+ case SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY_WITH_REDIAL:
+ case SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD:
+ case SETUP_CALL_PUT_ALL_OTHER_CALLS_ON_HOLD_WITH_REDIAL:
+ case SETUP_CALL_DISCONN_ALL_OTHER_CALLS:
+ case SETUP_CALL_DISCONN_ALL_OTHER_CALLS_WITH_REDIAL:
+ sat_cmd_ind_data->data.setup_call.command_detail.cmd_qualifier.setup_call.setup_call = cmd_data[temp_index];
+ dbg("[SAT] SAT PARSER - setup_call.cmd_qualifier= 0x%02x",
+ sat_cmd_ind_data->data.setup_call.command_detail.cmd_qualifier.setup_call.setup_call);
+ break;
+
+ case SETUP_CALL_RESERVED: /* Fallthrough */
+ default:
+ dbg("[SAT] SAT PARSER - setup_call.cmd_qualifier= 0x%02x", cmd_data[temp_index]);
+ return TCORE_SAT_BEYOND_ME_CAPABILITY;
}
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.setup_call.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier (user confirmation) - optional
- temp_index+=4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.user_confirm_alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha identifier (user confirmation) - optional */
+ temp_index += 4;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.user_confirm_alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //address
- rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* address */
+ rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- //capability configuration parameter - optional
- if((cmd_data[temp_index]&0x7F)==SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG){
- rv =_sat_decode_ccp_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.ccp, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* capability configuration parameter - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG) {
+ rv = _sat_decode_ccp_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.ccp,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //sub address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_SUB_ADDRESS_TAG){
- rv =_sat_decode_sub_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.subaddress, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* sub address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_SUB_ADDRESS_TAG) {
+ rv = _sat_decode_sub_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.subaddress,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //time duration - optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.duration, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* time duration - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.duration,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //icon identifier (user confirmation) - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier (user confirmation) - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.user_confirm_icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.user_confirm_icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //alpha identifier (call setup) - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.call_setup_alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha identifier (call setup) - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.call_setup_alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //icon identifier (call setup) - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier (call setup) - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_call.call_setup_icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_call.call_setup_icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
}
- //ToDo: Text Attribute (user_confirmation , call_setup)
+ /*
+ * TODO -
+ * Text Attribute (user_confirmation , call_setup)
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.15 PROVIDE LOCAL INFO
-static enum tcore_sat_result _sat_decode_provide_local_info(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.15 PROVIDE LOCAL INFO
+ */
+static enum tcore_sat_result _sat_decode_provide_local_info(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
- switch(cmd_data[temp_index]){
- case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:
- case LOCAL_INFO_LANGUAGE:
- sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_qualifier.provide_local_info.provide_local_info = cmd_data[temp_index];
- break;
- //TODO - Other cases
- default:
- sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_qualifier.provide_local_info.provide_local_info = LOCAL_INFO_RESERVED;
- break;
+ /* decode command qualifier */
+ switch (cmd_data[temp_index]) {
+ case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:
+ case LOCAL_INFO_LANGUAGE:
+ sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_qualifier.provide_local_info.provide_local_info = cmd_data[temp_index];
+ break;
+
+ /*
+ * TODO -
+ * Other cases
+ */
+ default:
+ sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_qualifier.provide_local_info.provide_local_info = LOCAL_INFO_RESERVED;
+ break;
}
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.setup_event_list.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //TODO - UTRAN Measurement Qualifier
+ /*
+ * TODO -
+ * UTRAN Measurement Qualifier
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.16 SETUP EVENT LIST
-static enum tcore_sat_result _sat_decode_setup_event_list(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.16 SETUP EVENT LIST
+ */
+static enum tcore_sat_result _sat_decode_setup_event_list(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.setup_event_list.command_detail.cmd_type = cmd_data[temp_index++];
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.setup_event_list.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //event list
- temp_index+=4;
+ /* event list */
+ temp_index += 4;
rv = _sat_decode_event_list_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.setup_event_list.event_list, &data_len_consumed);
+ &sat_cmd_ind_data->data.setup_event_list.event_list,
+ &data_len_consumed);
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.22 SETUP IDLE MODE TEXT
-static enum tcore_sat_result _sat_decode_setup_idle_mode_text(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.22 SETUP IDLE MODE TEXT
+ */
+static enum tcore_sat_result _sat_decode_setup_idle_mode_text(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.setup_idle_mode_text.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.setup_idle_mode_text.command_detail.cmd_type = cmd_data[temp_index++];
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.setup_idle_mode_text.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //text string
- temp_index+=4;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_idle_mode_text.text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ /* text string */
+ temp_index += 4;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_idle_mode_text.text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if(sat_cmd_ind_data->data.setup_idle_mode_text.text.string_length < 0){
+ if (sat_cmd_ind_data->data.setup_idle_mode_text.text.string_length < 0) {
err("[SAT] SAT PARSER - :string length is less than 0");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- dbg("[SAT] SAT PARSER text(%s)",sat_cmd_ind_data->data.setup_idle_mode_text.text.string);
- dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",o_length , temp_index, data_len_consumed);
+ dbg("[SAT] SAT PARSER text(%s)", sat_cmd_ind_data->data.setup_idle_mode_text.text.string);
+ dbg("[SAT] SAT PARSER o_len(%d) temp_index(%d) data_len_consumed(%d)",
+ o_length , temp_index, data_len_consumed);
- if(temp_index+data_len_consumed > o_length){
+ if (temp_index + data_len_consumed > o_length) {
err("[SAT] SAT PARSER - Wrong String TLV");
return TCORE_SAT_BEYOND_ME_CAPABILITY;
- }
- else if(temp_index+data_len_consumed == o_length){
+ } else if (temp_index + data_len_consumed == o_length) {
dbg("[SAT] SAT PARSER - :no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- //icon identifier
- temp_index+=data_len_consumed;
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon identifier */
+ temp_index += data_len_consumed;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.setup_idle_mode_text.icon_id, &data_len_consumed);
-
- if(rv != TCORE_SAT_SUCCESS){
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; //SEND TR
- }
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.setup_idle_mode_text.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD; /* Send TR */
- if(temp_index+data_len_consumed >= o_length){
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute
+ /*
+ * TODO:
+ * Text Attribute
+ */
+
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.24 SEND DTMF
-static enum tcore_sat_result _sat_decode_send_dtmf(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.24 SEND DTMF
+ */
+static enum tcore_sat_result _sat_decode_send_dtmf(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.send_dtmf.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.send_dtmf.command_detail.cmd_type = cmd_data[temp_index++];
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.send_dtmf.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
- temp_index+=4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_dtmf.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha identifier - optional */
+ temp_index += 4;
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.send_dtmf.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- // DTMF string - mandatory
+ /* DTMF string - mandatory */
if ((cmd_data[temp_index] & 0x7F) == SATK_DTMF_STRING_TAG) {
rv = _sat_decode_dtmf_string_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.send_dtmf.dtmf_string, &data_len_consumed);
- if (rv != TCORE_SAT_SUCCESS) {
+ &sat_cmd_ind_data->data.send_dtmf.dtmf_string,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
+
temp_index += data_len_consumed;
} else {
dbg("[SAT] SAT PARSER - DTMF tlv is missed.");
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //icon identifier - optional
+ /* icon identifier - optional */
if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.send_dtmf.icon_id, &data_len_consumed);
-
- if (rv != TCORE_SAT_SUCCESS) {
+ &sat_cmd_ind_data->data.send_dtmf.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index += data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute, Frame Identifier
+ /*
+ * TODO:
+ * Text Attribute, Frame Identifier
+ */
+
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.25 LANGUAGE NOTIFICATION
-static enum tcore_sat_result _sat_decode_language_notification(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.25 LANGUAGE NOTIFICATION
+ */
+static enum tcore_sat_result _sat_decode_language_notification(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.language_notification.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.language_notification.command_detail.cmd_type = cmd_data[temp_index++];
- /* ******decode command qualifier****** */
- if(cmd_data[temp_index]&0x01)
+ /* decode command qualifier */
+ if (cmd_data[temp_index] & 0x01)
sat_cmd_ind_data->data.language_notification.command_detail.cmd_qualifier.language_notification.specific_language = TRUE;
else
sat_cmd_ind_data->data.language_notification.command_detail.cmd_qualifier.language_notification.specific_language = FALSE;
- //device identifier
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.language_notification.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //language - conditional
- temp_index+=4;
+ /* language - conditional */
+ temp_index += 4;
if (sat_cmd_ind_data->data.language_notification.command_detail.cmd_qualifier.language_notification.specific_language == TRUE) {
- if((cmd_data[temp_index]&0x7F) == SATK_LANGUAGE_TAG) {
- rv = _sat_decode_language_tlv(cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.language_notification.language);
- if(rv != TCORE_SAT_SUCCESS)
+ if ((cmd_data[temp_index] & 0x7F) == SATK_LANGUAGE_TAG) {
+ rv = _sat_decode_language_tlv(cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.language_notification.language);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- } else {
+ } else {
dbg("[SAT] SAT PARSER - Language TLV is required but missing.");
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
return TCORE_SAT_SUCCESS;
}
-//6.4.26 LAUNCH BROWSER
-static enum tcore_sat_result _sat_decode_launch_browser(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.26 LAUNCH BROWSER
+ */
+static enum tcore_sat_result _sat_decode_launch_browser(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
- //command detail
+ /* command detail */
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.launch_browser.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.launch_browser.command_detail.cmd_type = cmd_data[temp_index++];
- // decode command qualifier
+ /* decode command qualifier */
switch (cmd_data[temp_index]) {
- case 0x00:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_IF_NOT_ALREADY_LAUNCHED;
- break;
- case 0x01:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_NOT_USED;
- break;
- case 0x02:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_USE_EXISTING_BROWSER;
- break;
- case 0x03:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_CLOSE_AND_LAUNCH_NEW_BROWSER;
- break;
- case 0x04:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_NOT_USED2;
- break;
- default:
- sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
- LAUNCH_BROWSER_RESERVED;
- break;
- }
-
- //device identifier
+ case 0x00:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_IF_NOT_ALREADY_LAUNCHED;
+ break;
+
+ case 0x01:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_NOT_USED;
+ break;
+
+ case 0x02:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_USE_EXISTING_BROWSER;
+ break;
+
+ case 0x03:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_CLOSE_AND_LAUNCH_NEW_BROWSER;
+ break;
+
+ case 0x04:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_NOT_USED2;
+ break;
+
+ default:
+ sat_cmd_ind_data->data.launch_browser.command_detail.cmd_qualifier.launch_browser.launch_browser =
+ LAUNCH_BROWSER_RESERVED;
+ break;
+ }
+
+ /* device identifier */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.language_notification.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
temp_index += 4;
- //Browser Identity TLV - Optional
+ /* Browser Identity TLV - Optional */
if ((cmd_data[temp_index] & 0x7F) == SATK_BROWSER_IDENTITY_TAG) {
- rv = _sat_decode_browser_identity_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.launch_browser.browser_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_browser_identity_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.browser_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
+
temp_index += data_len_consumed;
} else {
dbg("[SAT] SAT PARSER - Browser ID NOT present");
}
- //URL TLV - Mandatory
+ /* URL TLV - Mandatory */
if ((cmd_data[temp_index] & 0x7F) == SATK_URL_TAG) {
- rv = _sat_decode_url_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.launch_browser.url, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_url_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.url,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - No more TLVs to decode, decoding done.");
return TCORE_SAT_SUCCESS;
} else {
return TCORE_SAT_REQUIRED_VALUE_MISSING;
}
- //bearer - optional
+ /* bearer - optional */
if ((cmd_data[temp_index] & 0x7F) == SATK_BEARER_TAG) {
- rv = _sat_decode_bearer_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.launch_browser.bearer, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_bearer_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.bearer,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - No more TLVs to decode, decoding done.");
return TCORE_SAT_SUCCESS;
- } else {
+ } else
temp_index += data_len_consumed;
- }
} else {
dbg("[SAT] SAT PARSER - Bearer TLV Not present.");
}
- //Provisioning reference file - optional
+ /* Provisioning reference file - optional */
sat_cmd_ind_data->data.launch_browser.file_ref_count = 0;
while ((cmd_data[temp_index] & 0x7F) == SATK_PROVISIONING_REF_FILE_TAG) {
if (sat_cmd_ind_data->data.launch_browser.file_ref_count >= SAT_PROVISIONING_REF_MAX_COUNT) {
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- rv = _sat_decode_provisioning_file_ref_tlv(
- o_cmd_data,
- o_length,
- temp_index,
- &sat_cmd_ind_data->data.launch_browser.file_list[sat_cmd_ind_data->data.launch_browser.file_ref_count],
- &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ rv = _sat_decode_provisioning_file_ref_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.file_list[sat_cmd_ind_data->data.launch_browser.file_ref_count],
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- } else {
+ else
sat_cmd_ind_data->data.launch_browser.file_ref_count++;
- }
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - No more TLVs to decode, decoding done.");
return TCORE_SAT_SUCCESS;
- } else {
+ } else
temp_index += data_len_consumed;
- }
}
- //text string(gateway/proxy identity) - optional
+ /* text string(gateway/proxy identity) - optional */
if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.launch_browser.gateway_proxy_text, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.gateway_proxy_text,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - No more TLVs to decode, decoding done.");
return TCORE_SAT_SUCCESS;
- } else {
+ } else
temp_index += data_len_consumed;
- }
}
- //alpha identifier - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.launch_browser.user_confirm_alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ /* alpha identifier - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.launch_browser.user_confirm_alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- if (temp_index + data_len_consumed >= o_length) {
+
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - No more TLVs to decode, decoding done.");
return TCORE_SAT_SUCCESS;
}
- temp_index+=data_len_consumed;
+ temp_index += data_len_consumed;
} else {
dbg("[SAT] SAT PARSER - No Alpha ID TLV.");
}
- //icon identifier - optional
+ /* icon identifier - optional */
if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
- &sat_cmd_ind_data->data.launch_browser.user_confirm_icon_id, &data_len_consumed);
-
- if (rv != TCORE_SAT_SUCCESS) {
+ &sat_cmd_ind_data->data.launch_browser.user_confirm_icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
- if (temp_index + data_len_consumed >= o_length) {
+ if (temp_index + data_len_consumed >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
- temp_index += data_len_consumed; //temp_index pointing to the Tag of next TLV
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute, Frame Identifier
+ /*
+ * TODO:
+ * Text Attribute, Frame Identifier
+ */
+
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.27 OPEN CHANNEL
-static enum tcore_sat_result _sat_decode_open_channel(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.27 OPEN CHANNEL
+ */
+static enum tcore_sat_result _sat_decode_open_channel(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
gboolean b_1st_duration = FALSE;
- int bearer_desc_len =0, data_len_consumed=0;
+ int bearer_desc_len = 0, data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.open_channel.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.open_channel.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
+ /* command detail */
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.immediate_link = FALSE;
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.automatic_reconnection = FALSE;
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.background_mode = FALSE;
- if(cmd_data[temp_index]&0x01){
+ if (cmd_data[temp_index] & 0x01) {
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.immediate_link = TRUE;
dbg("[SAT] SAT PARSER - Immediate Link Establishment");
}
- if(cmd_data[temp_index]&0x02){
+ if (cmd_data[temp_index] & 0x02) {
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.automatic_reconnection = TRUE;
dbg("[SAT] SAT PARSER - Auto Reconnection");
}
- if(cmd_data[temp_index]&0x04){
+ if (cmd_data[temp_index] & 0x04) {
sat_cmd_ind_data->data.open_channel.command_detail.cmd_qualifier.open_channel.background_mode = TRUE;
dbg("[SAT] SAT PARSER - Background mode");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
- rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.open_channel.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ memcpy(dev_id, &cmd_data[temp_index], 4);
+ rv = _sat_decode_device_identities_tlv(dev_id,
+ &sat_cmd_ind_data->data.open_channel.device_id);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
- rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
+ rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.alpha_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //icon id - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon id - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
- rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.icon_id,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //bearer description
- rv =_sat_decode_bearer_description_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_desc, &data_len_consumed);
+ /* bearer description */
+ rv = _sat_decode_bearer_description_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_desc,
+ &data_len_consumed);
bearer_desc_len = data_len_consumed;
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //TODO UICC SERVER MODE
- switch(sat_cmd_ind_data->data.open_channel.bearer_desc.bearer_type){
- case BEARER_CSD:
+ /*
+ * TODO -
+ * UICC SERVER MODE
+ */
+
+ switch (sat_cmd_ind_data->data.open_channel.bearer_desc.bearer_type) {
+ case BEARER_CSD:
+ /* address */
+ rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- //address
- rv = _sat_decode_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ temp_index += data_len_consumed;
+
+ /* sub address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_SUB_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_subaddress_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.subaddress,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
-
- //sub address - optional
- if((cmd_data[temp_index]&0x7F) == SATK_SUB_ADDRESS_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_subaddress_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.subaddress, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
- return rv;
- }
- temp_index+=data_len_consumed;
- }
- //time duration 1- optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.duration1, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
- b_1st_duration = TRUE;
- }
+ temp_index += data_len_consumed;
+ }
- //time duration 2- optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
+ /* time duration 1- optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.duration1,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(!b_1st_duration){
- dbg("duration 1 does not present!");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
+ temp_index += data_len_consumed;
+ b_1st_duration = TRUE;
+ }
- data_len_consumed = 0;
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.duration2, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
+ /* time duration 2- optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+
+ if (!b_1st_duration) {
+ dbg("duration 1 does not present!");
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //bearer description - already did it
- temp_index+=bearer_desc_len;
+ data_len_consumed = 0;
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.duration2,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- //buffer size
- rv =_sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.buffer_size, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ temp_index += data_len_consumed;
+ }
+
+ /* bearer description - already did it */
+ temp_index += bearer_desc_len;
+
+ /* buffer size */
+ rv = _sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.buffer_size,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
+ }
+
+ /* other address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.other_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
+ }
- //other address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.other_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text string - user login - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.text_user_login,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //text string - user login - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.text_user_login, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
- }
+ /* text string - user password - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.text_user_pwd,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- //text string - user password - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.cs_bearer.text_user_pwd, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //UICC/TERMINAL interface transport level - optional
- if((cmd_data[temp_index]&0x7F)==SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.interface_transport_level, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ /* UICC/TERMINAL interface transport level - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.interface_transport_level,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //destination address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.data_destination_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* destination address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.data_destination_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
+ break;
- break;
- case BEARER_GPRS:
- //bearer description - already did it
- temp_index+=bearer_desc_len;
-
- //buffer size
- rv =_sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.buffer_size, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ case BEARER_GPRS:
+ /* bearer description - already did it */
+ temp_index += bearer_desc_len;
+
+ /* buffer size */
+ rv = _sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.buffer_size,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
+ }
+
+ /* Network Access Name - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_NETWORK_ACCESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_network_access_name_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.network_access_name,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
+ }
- //Network Access Name - optional
- if((cmd_data[temp_index]&0x7F)==SATK_NETWORK_ACCESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_network_access_name_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.network_access_name, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* other address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.other_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //other address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.other_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text string - user login - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.text_user_login,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //text string - user login - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.text_user_login, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
- }
+ /* text string - user password - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.text_user_pwd,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- //text string - user password - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.ps_bearer.text_user_pwd, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //UICC/TERMINAL interface transport level - optional
- if((cmd_data[temp_index]&0x7F)==SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.interface_transport_level, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ /* UICC/TERMINAL interface transport level - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.interface_transport_level,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- dbg("the value (0x%x) after interface transport level", cmd_data[temp_index]&0x7F);
+ dbg("the value (0x%x) after interface transport level", cmd_data[temp_index] & 0x7F);
- //destination address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.data_destination_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* destination address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.data_destination_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
+ break;
- break;
- case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
- //bearer description - already did it
- temp_index+=bearer_desc_len;
-
- //buffer size
- rv =_sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.buffer_size, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
+ /* bearer description - already did it */
+ temp_index += bearer_desc_len;
+
+ /* buffer size */
+ rv = _sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.buffer_size,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
+ }
+
+ /* other address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.other_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
+ }
- //other address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.other_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* text string - user login - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.text_user_login,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //text string - user login - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.text_user_login, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
- }
+ /* text string - user password - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.text_user_pwd,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- //text string - user password - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.default_bearer.text_user_pwd, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //UICC/TERMINAL interface transport level - optional
- if((cmd_data[temp_index]&0x7F)==SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.interface_transport_level, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ /* UICC/TERMINAL interface transport level - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.interface_transport_level,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
+
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //destination address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.data_destination_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* destination address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.data_destination_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
+ break;
- break;
- case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
-
- //time duration 1- optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.duration1, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
- b_1st_duration = TRUE;
+ case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
+ /* time duration 1- optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.duration1,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed;
+ b_1st_duration = TRUE;
+ }
+
+ /* time duration 2- optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_DURATION_TAG) {
+ if (!b_1st_duration) {
+ dbg("duration 1 does not present!");
+ return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
}
- //time duration 2- optional
- if((cmd_data[temp_index]&0x7F)==SATK_DURATION_TAG){
+ data_len_consumed = 0;
+ rv = _sat_decode_duration_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.duration2,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(!b_1st_duration){
- dbg("duration 1 does not present!");
- return TCORE_SAT_COMMAND_NOT_UNDERSTOOD;
- }
+ temp_index += data_len_consumed;
+ }
- data_len_consumed = 0;
- rv =_sat_decode_duration_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.duration2, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
- }
+ /* bearer description - already did it */
+ temp_index += bearer_desc_len;
- //bearer description - already did it
- temp_index+=bearer_desc_len;
+ /* buffer size */
+ rv = _sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.buffer_size,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- //buffer size
- rv =_sat_decode_buffer_size_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.buffer_size, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
+ }
+
+ /* text string - user password - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_TEXT_STRING_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.text_user_pwd,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
dbg("[SAT] SAT PARSER - no more TLVs to decode.");
return TCORE_SAT_SUCCESS;
}
+ }
- //text string - user password - optional
- if((cmd_data[temp_index]&0x7F)==SATK_TEXT_STRING_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_text_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.text_user_pwd, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
- }
+ /* UICC/TERMINAL interface transport level - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.interface_transport_level,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv;
- //UICC/TERMINAL interface transport level - optional
- if((cmd_data[temp_index]&0x7F)==SATK_USIM_ME_INTERFACE_TRANSPORT_LEVEL_TAG){
- data_len_consumed = 0;
- rv = _sat_decode_uicc_terminal_interface_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.interface_transport_level, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS)
- return rv;
-
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //destination address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_OTHER_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.data_destination_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* destination address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_OTHER_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_other_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.data_destination_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
- //remote entity address - optional
- if((cmd_data[temp_index]&0x7F)==SATK_REMOTE_ENTITY_ADDRESS_TAG){
- data_len_consumed = 0;
- rv =_sat_decode_remote_entity_address_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.remote_entity_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
+ /* remote entity address - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_REMOTE_ENTITY_ADDRESS_TAG) {
+ data_len_consumed = 0;
+ rv = _sat_decode_remote_entity_address_tlv(o_cmd_data, o_length, temp_index,
+ &sat_cmd_ind_data->data.open_channel.bearer_detail.local_bearer.remote_entity_address,
+ &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- temp_index+=data_len_consumed;
- if(temp_index >= o_length){
- dbg("[SAT] SAT PARSER - no more TLVs to decode.");
- return TCORE_SAT_SUCCESS;
- }
+ temp_index += data_len_consumed;
+ if (temp_index >= o_length) {
+ dbg("[SAT] SAT PARSER - no more TLVs to decode.");
+ return TCORE_SAT_SUCCESS;
}
+ }
+ break;
- break;
- default:
- break;
- }//end of switch
+ default:
+ break;
+ } /* end of switch */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.28 CLOSE CHANNEL
-static enum tcore_sat_result _sat_decode_close_channel(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.28 CLOSE CHANNEL
+ */
+static enum tcore_sat_result _sat_decode_close_channel(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.close_channel.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.close_channel.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.close_channel.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.close_channel.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //icon id - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon id - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.close_channel.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute and frames
+ /*
+ * TODO:
+ * Text Attribute and frames
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.29 RECEIVE DATA
-static enum tcore_sat_result _sat_decode_receive_data(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.29 RECEIVE DATA
+ */
+static enum tcore_sat_result _sat_decode_receive_data(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.receive_data.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.receive_data.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.receive_data.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.receive_data.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //icon id - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon id - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.receive_data.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- //channel data length
- rv =_sat_decode_channel_data_length_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.receive_data.channel_data_len, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute and frames
+ /* channel data length */
+ rv = _sat_decode_channel_data_length_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.receive_data.channel_data_len, &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ /*
+ * TODO:
+ * Text Attribute and frames
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.30 SEND DATA
-static enum tcore_sat_result _sat_decode_send_data(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.30 SEND DATA
+ */
+static enum tcore_sat_result _sat_decode_send_data(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
- int data_len_consumed=0;
+ int data_len_consumed = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.send_data.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.send_data.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
+ /* command detail */
sat_cmd_ind_data->data.send_data.command_detail.cmd_qualifier.send_data.send_data_immediately = FALSE;
- if(cmd_data[temp_index]&0x01){
+ if (cmd_data[temp_index] & 0x01) {
sat_cmd_ind_data->data.send_data.command_detail.cmd_qualifier.send_data.send_data_immediately = TRUE;
dbg("[SAT] SAT PARSER - Send data immediately");
}
- //device identities
+ /* device identities */
temp_index++;
- memcpy(dev_id,&cmd_data[temp_index],4);
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.send_data.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- //alpha identifier - optional
+ /* alpha identifier - optional */
temp_index += 4;
- if((cmd_data[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
rv = _sat_decode_alpha_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_data.alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
+
+ temp_index += data_len_consumed;
}
- //icon id - optional
- if((cmd_data[temp_index]&0x7F) == SATK_ICON_IDENTIFIER_TAG){
+ /* icon id - optional */
+ if ((cmd_data[temp_index] & 0x7F) == SATK_ICON_IDENTIFIER_TAG) {
data_len_consumed = 0;
rv = _sat_decode_icon_identifier_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_data.icon_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed; //temp_index pointing to the Tag of next TLV
- }
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- //channel data
- rv =_sat_decode_channel_data_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_data.channel_data, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
+ temp_index += data_len_consumed; /* temp_index pointing to the Tag of next TLV */
}
- //ToDo: Text Attribute and frames
+ /* channel data */
+ rv = _sat_decode_channel_data_tlv(o_cmd_data, o_length, temp_index, &sat_cmd_ind_data->data.send_data.channel_data, &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ /*
+ * TODO:
+ * Text Attribute and frames
+ */
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.31 GET CHANNEL STATUS
-static enum tcore_sat_result _sat_decode_get_channel_status(unsigned char* o_cmd_data, int o_length,
- int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
+/*
+ * 6.4.31 GET CHANNEL STATUS
+ */
+static enum tcore_sat_result _sat_decode_get_channel_status(unsigned char *o_cmd_data, int o_length,
+ int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.get_channel_status.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.get_channel_status.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.get_channel_status.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-//6.4.XX Unsupported Command
-static enum tcore_sat_result _sat_decode_unsupported_command(unsigned char* o_cmd_data, int o_length,
+/*
+ * 6.4.XX Unsupported Command
+ */
+static enum tcore_sat_result _sat_decode_unsupported_command(unsigned char *o_cmd_data, int o_length,
int curr_offset, struct tcore_sat_proactive_command *sat_cmd_ind_data)
{
int temp_index = 0;
unsigned char dev_id[4];
- unsigned char* cmd_data = NULL;
+ unsigned char *cmd_data = NULL;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(o_cmd_data == NULL){
+ if (o_cmd_data == NULL) {
dbg("[SAT] SAT PARSER - o_cmd_data == NULL");
return TCORE_SAT_ERROR_FATAL;
}
cmd_data = &o_cmd_data[0];
- temp_index = curr_offset+2;
+ temp_index = curr_offset + 2;
sat_cmd_ind_data->data.unsupport_cmd.command_detail.cmd_num = cmd_data[temp_index++];
sat_cmd_ind_data->data.unsupport_cmd.command_detail.cmd_type = cmd_data[temp_index++];
- /** command detail **/
- temp_index++; //RFU
+ /* command detail */
+ temp_index++; /* RFU */
- //device identities
- memcpy(dev_id,&cmd_data[temp_index],4);
+ /* device identities */
+ memcpy(dev_id, &cmd_data[temp_index], 4);
rv = _sat_decode_device_identities_tlv(dev_id, &sat_cmd_ind_data->data.unsupport_cmd.device_id);
- if(rv != TCORE_SAT_SUCCESS)
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
dbg("[SAT] SAT PARSER - :decoding done!.");
return TCORE_SAT_SUCCESS;
}
-int tcore_sat_decode_proactive_command(unsigned char* tlv_origin, unsigned int tlv_length,
- struct tcore_sat_proactive_command* decoded_tlv)
+int tcore_sat_decode_proactive_command(unsigned char *tlv_origin, unsigned int tlv_length,
+ struct tcore_sat_proactive_command *decoded_tlv)
{
unsigned int temp_index = 0;
int length_field_len = 0;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(tlv_origin == NULL || tlv_length <=2) {
+ if (tlv_origin == NULL || tlv_length <= 2) {
dbg("[SAT] SAT PARSER - pointer pData passed is NULL or invalid length.");
return TCORE_SAT_ERROR_FATAL;
}
- //tag
- if(tlv_origin[temp_index++]!= SATK_PROACTIVE_CMD_TAG) {
+ /* tag */
+ if (tlv_origin[temp_index++] != SATK_PROACTIVE_CMD_TAG) {
dbg("[SAT] SAT PARSER - Did not find Proactive command tag.tag=%d", tlv_origin[temp_index-1]);
return TCORE_SAT_ERROR_FATAL;
}
- //length
+ /* length */
length_field_len = _get_length_filed_size(tlv_origin[temp_index]);
- if(length_field_len == 0) {
+ if (length_field_len == 0) {
dbg("[SAT] SAT PARSER - Invalid length.");
return TCORE_SAT_ERROR_FATAL;
}
- //length
+
+ /* length */
dbg("[SAT] SAT PARSER - tlv_length=%d", tlv_length);
- temp_index+=length_field_len;
+ temp_index += length_field_len;
- //check command validation
- if(tlv_length < temp_index+5+4)//command detail(5) and device identities(4)
+ /* check command validation */
+ if (tlv_length < temp_index + 5 + 4)/* command detail(5) and device identities(4) */
return TCORE_SAT_ERROR_FATAL;
- //check comprehensive value
- if((tlv_origin[temp_index] | 0x7F) != 0x7F){
+ /* check comprehensive value */
+ if ((tlv_origin[temp_index] | 0x7F) != 0x7F) {
dbg("comprehensive value 0x%x", tlv_origin[temp_index] | 0x7F);
b_comprehensive = TRUE;
}
- if( (tlv_origin[temp_index] & 0x7F) != SATK_COMMAND_DETAILS_TAG){
+ if ((tlv_origin[temp_index] & 0x7F) != SATK_COMMAND_DETAILS_TAG) {
err("[SAT] no command detail info");
return TCORE_SAT_ERROR_FATAL;
}
- if( tlv_origin[temp_index+1] != SATK_COMMAND_DETAILS_LENGTH){
+ if (tlv_origin[temp_index + 1] != SATK_COMMAND_DETAILS_LENGTH) {
err("[SAT] invalid command detail length");
return TCORE_SAT_ERROR_FATAL;
}
- decoded_tlv->cmd_num= tlv_origin[temp_index+2];
- decoded_tlv->cmd_type = tlv_origin[temp_index+3];
-
- switch(decoded_tlv->cmd_type) {
- case SAT_PROATV_CMD_DISPLAY_TEXT: //6.4.1
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_DISPLAY_TEXT");
- rv = _sat_decode_display_text(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_GET_INKEY: //6.4.2
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_INKEY");
- rv = _sat_decode_get_inkey(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_GET_INPUT: //6.4.3
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_INPUT");
- rv = _sat_decode_get_input(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_MORE_TIME: //6.4.4
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_MORE_TIME");
- rv = _sat_decode_more_time(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_PLAY_TONE: //6.4.5
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_PLAY TONE");
- rv = _sat_decode_play_tone(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- //case POLL INTERVAL //6.4.6 processing by cp
- case SAT_PROATV_CMD_REFRESH: //6.4.7
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_REFRESH");
- rv = _sat_decode_refresh(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SETUP_MENU: //6.4.8
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SETUP_MENU");
- rv = _sat_decode_setup_menu(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SELECT_ITEM: //6.4.9
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SELECT_ITEM");
- rv = _sat_decode_select_item(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SEND_SMS: //6.4.10
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_SMS");
- rv = _sat_decode_send_sms(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SEND_SS: //6.4.11
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_SS");
- rv = _sat_decode_send_ss(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SEND_USSD: //6.4.12
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_USSD");
- rv = _sat_decode_send_ussd(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SETUP_CALL: //6.4.13
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SETUP_CALL");
- rv = _sat_decode_setup_call(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO: //6.4.15
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_PROVIDE_LOCAL_INFO");
- rv = _sat_decode_provide_local_info(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SETUP_EVENT_LIST: //6.4.16
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SETUP_EVENT_LIST");
- rv = _sat_decode_setup_event_list(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT: //6.4.22
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT");
- rv = _sat_decode_setup_idle_mode_text(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SEND_DTMF: //6.4.24
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SEND_DTMF");
- rv = _sat_decode_send_dtmf(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION: //6.4.25
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_LANGUAGE_NOTIFICATION");
- rv = _sat_decode_language_notification(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_LAUNCH_BROWSER: //6.4.26
- dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_LAUNCH_BROWSER");
- rv = _sat_decode_launch_browser(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_OPEN_CHANNEL://6.4.27
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_OPEN_CHANNEL");
- rv = _sat_decode_open_channel(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_CLOSE_CHANNEL://6.4.28
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_CLOSE_CHANNEL");
- rv = _sat_decode_close_channel(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_RECEIVE_DATA://6.4.29
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_RECEIVE_DATA");
- rv = _sat_decode_receive_data(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_SEND_DATA://6.4.30
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_DATA");
- rv = _sat_decode_send_data(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- case SAT_PROATV_CMD_GET_CHANNEL_STATUS://6.4.31
- dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_CHANNEL_STATUS");
- rv = _sat_decode_get_channel_status(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
- default:
- dbg("[SAT] SAT PARSER - ME cannot perform this command =0x[%02x]", decoded_tlv->cmd_type);
- rv = _sat_decode_unsupported_command(tlv_origin, tlv_length, temp_index, decoded_tlv);
- break;
+ decoded_tlv->cmd_num = tlv_origin[temp_index + 2];
+ decoded_tlv->cmd_type = tlv_origin[temp_index + 3];
+
+ switch (decoded_tlv->cmd_type) {
+ case SAT_PROATV_CMD_DISPLAY_TEXT: /* 6.4.1 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_DISPLAY_TEXT");
+ rv = _sat_decode_display_text(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_GET_INKEY: /* 6.4.2 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_INKEY");
+ rv = _sat_decode_get_inkey(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_GET_INPUT: /* 6.4.3 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_INPUT");
+ rv = _sat_decode_get_input(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_MORE_TIME: /* 6.4.4 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_MORE_TIME");
+ rv = _sat_decode_more_time(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_PLAY_TONE: /* 6.4.5 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_PLAY TONE");
+ rv = _sat_decode_play_tone(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ /* case POLL INTERVAL //6.4.6 processing by cp */
+ case SAT_PROATV_CMD_REFRESH: /* 6.4.7 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_REFRESH");
+ rv = _sat_decode_refresh(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_MENU: /* 6.4.8 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SETUP_MENU");
+ rv = _sat_decode_setup_menu(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SELECT_ITEM: /* 6.4.9 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SELECT_ITEM");
+ rv = _sat_decode_select_item(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SEND_SMS: /* 6.4.10 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_SMS");
+ rv = _sat_decode_send_sms(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SEND_SS: /* 6.4.11 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_SS");
+ rv = _sat_decode_send_ss(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SEND_USSD: /* 6.4.12 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_USSD");
+ rv = _sat_decode_send_ussd(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_CALL: /* 6.4.13 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SETUP_CALL");
+ rv = _sat_decode_setup_call(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO: /* 6.4.15 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_PROVIDE_LOCAL_INFO");
+ rv = _sat_decode_provide_local_info(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_EVENT_LIST: /* 6.4.16 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SETUP_EVENT_LIST");
+ rv = _sat_decode_setup_event_list(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT: /* 6.4.22 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT");
+ rv = _sat_decode_setup_idle_mode_text(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SEND_DTMF: /* 6.4.24 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_SEND_DTMF");
+ rv = _sat_decode_send_dtmf(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION: /* 6.4.25 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_LANGUAGE_NOTIFICATION");
+ rv = _sat_decode_language_notification(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_LAUNCH_BROWSER: /* 6.4.26 */
+ dbg("[SAT] SAT PARSER - SAT_PROATV_CMD_LAUNCH_BROWSER");
+ rv = _sat_decode_launch_browser(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_OPEN_CHANNEL:/* 6.4.27 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_OPEN_CHANNEL");
+ rv = _sat_decode_open_channel(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_CLOSE_CHANNEL:/* 6.4.28 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_CLOSE_CHANNEL");
+ rv = _sat_decode_close_channel(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_RECEIVE_DATA:/* 6.4.29 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_RECEIVE_DATA");
+ rv = _sat_decode_receive_data(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_SEND_DATA:/* 6.4.30 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_SEND_DATA");
+ rv = _sat_decode_send_data(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ case SAT_PROATV_CMD_GET_CHANNEL_STATUS:/* 6.4.31 */
+ dbg("[SAT] SAT PARSER - SAT_CMD_TYPE_GET_CHANNEL_STATUS");
+ rv = _sat_decode_get_channel_status(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
+
+ default:
+ dbg("[SAT] SAT PARSER - ME cannot perform this command =0x[%02x]", decoded_tlv->cmd_type);
+ rv = _sat_decode_unsupported_command(tlv_origin, tlv_length, temp_index, decoded_tlv);
+ break;
}
dbg("[SAT] SAT PARSER - each command parsing done.");
return rv;
}
-int tcore_sat_decode_call_control_result(unsigned char* tlv_origin, unsigned int tlv_length, struct tnoti_sat_call_control_result_ind* call_ctrl_result_tlv)
+int tcore_sat_decode_call_control_result(unsigned char *tlv_origin, unsigned int tlv_length, struct tnoti_sat_call_control_result_ind *call_ctrl_result_tlv)
{
unsigned int temp_index = 0;
int length = 0, data_len = 0, data_len_consumed = 0;
enum tcore_sat_result rv = TCORE_SAT_SUCCESS;
- if(tlv_origin == NULL || tlv_length <=2) {
+ if (tlv_origin == NULL || tlv_length <= 2) {
dbg("[SAT] SAT PARSER - pointer pData passed is NULL or invalid length.");
return TCORE_SAT_ERROR_FATAL;
}
- //call conrol result
+ /* call conrol result */
call_ctrl_result_tlv->cc_result = tlv_origin[temp_index++];
length = _get_length_filed_size(tlv_origin[temp_index]);
- if(length == 0){
+ if (length == 0) {
dbg("[SAT] fail to get the call control result length");
return TCORE_SAT_ERROR_FATAL;
}
- temp_index = temp_index+length-1;
+
+ temp_index = temp_index + length-1;
data_len = tlv_origin[temp_index];
- dbg("[SAT] call control result (%d), data len(%d)",call_ctrl_result_tlv->cc_result, data_len);
- if(data_len == 0){
+ dbg("[SAT] call control result (%d), data len(%d)", call_ctrl_result_tlv->cc_result, data_len);
+ if (data_len == 0) {
dbg("no more call control result - decoding done");
return rv;
}
temp_index++;
- //address - optional (voice call)
- if((tlv_origin[temp_index]&0x7F) == SATK_ADDRESS_TAG){
+ /* address - optional (voice call) */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_ADDRESS_TAG) {
rv = _sat_decode_address_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= tlv_length){
+ temp_index += data_len_consumed;
+
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //ss string - optional (ss)
- if((tlv_origin[temp_index]&0x7F) == SATK_SS_STRING_TAG){
+ /* ss string - optional (ss) */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_SS_STRING_TAG) {
rv = _sat_decode_ss_string_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->ss_string, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= tlv_length){
+ temp_index += data_len_consumed;
+
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //ccp1 - optional
- if((tlv_origin[temp_index]&0x7F)==SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG){
- rv =_sat_decode_ccp_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->ccp1, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
+ /* ccp1 - optional */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG) {
+ rv = _sat_decode_ccp_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->ccp1, &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
+
+ temp_index += data_len_consumed;
- if(temp_index >= tlv_length){
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //sub address
- if((tlv_origin[temp_index]&0x7F) == SATK_SUB_ADDRESS_TAG){
+ /* sub address */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_SUB_ADDRESS_TAG) {
rv = _sat_decode_sub_address_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->sub_address, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= tlv_length){
+ temp_index += data_len_consumed;
+
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //alpha id
- if((tlv_origin[temp_index]&0x7F) == SATK_ALPHA_IDENTIFIER_TAG){
+ /* alpha id */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_ALPHA_IDENTIFIER_TAG) {
rv = _sat_decode_alpha_identifier_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->alpha_id, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS) {
+ if (rv != TCORE_SAT_SUCCESS)
return rv;
- }
- temp_index+=data_len_consumed;
- if(temp_index >= tlv_length){
+ temp_index += data_len_consumed;
+
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //bc repeated indicator
- if((tlv_origin[temp_index]&0x7F) == SATK_BC_REPEAT_INDICATOR_TAG){
+ /* bc repeated indicator */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_BC_REPEAT_INDICATOR_TAG) {
int tag = 0;
int bc_repeat_ind_len = 0;
call_ctrl_result_tlv->bc_repeat_type.bc_indi_repeat_type = tlv_origin[temp_index++];
dbg("bc repeated indication tag(%x) len(%x) type(%x)", tag, bc_repeat_ind_len, call_ctrl_result_tlv->bc_repeat_type.bc_indi_repeat_type);
- if(temp_index >= tlv_length){
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
}
- //ccp2
- if((tlv_origin[temp_index]&0x7F)==SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG){
- rv =_sat_decode_ccp_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->ccp2, &data_len_consumed);
- if(rv != TCORE_SAT_SUCCESS){
- return rv; //SEND TR
- }
- temp_index+=data_len_consumed;
+ /* ccp2 */
+ if ((tlv_origin[temp_index] & 0x7F) == SATK_CAPABILITY_CONFIGURATION_PARAMETERS_TAG) {
+ rv = _sat_decode_ccp_tlv(tlv_origin, tlv_length, temp_index, &call_ctrl_result_tlv->ccp2, &data_len_consumed);
+ if (rv != TCORE_SAT_SUCCESS)
+ return rv; /* Send TR */
- if(temp_index >= tlv_length){
+ temp_index += data_len_consumed;
+
+ if (temp_index >= tlv_length) {
dbg("[SAT] call control decoding done");
return TCORE_SAT_SUCCESS;
}
return rv;
}
-static unsigned char _sat_encode_dcs_tlv(const struct data_coding_scheme* src)
+static unsigned char _sat_encode_dcs_tlv(const struct data_coding_scheme *src)
{
unsigned char rv = 0x00;
- if(src == NULL)
+ if (src == NULL)
return 0;
- if(src->is_compressed_format)
+ if (src->is_compressed_format)
rv |= 0x20;
- //msg class
- switch(src->m_class){
- case MSG_CLASS_0:
- case MSG_CLASS_1:
- case MSG_CLASS_2:
- case MSG_CLASS_3:
- rv |= 0x10;
- rv |= src->m_class;
- break;
+ /* msg class */
+ switch (src->m_class) {
+ case MSG_CLASS_0:
+ case MSG_CLASS_1:
+ case MSG_CLASS_2:
+ case MSG_CLASS_3:
+ rv |= 0x10;
+ rv |= src->m_class;
+ break;
- case MSG_CLASS_RESERVED:
- case MSG_CLASS_NONE:
- default:
- rv &= 0xEF;
- break;
+ case MSG_CLASS_RESERVED:
+ case MSG_CLASS_NONE:
+ default:
+ rv &= 0xEF;
+ break;
}
- //alphabet format
- switch(src->a_format)
- {
- case ALPHABET_FORMAT_SMS_DEFAULT:
- rv &= 0xF3;
- break;
+ /* alphabet format */
+ switch (src->a_format) {
+ case ALPHABET_FORMAT_SMS_DEFAULT:
+ rv &= 0xF3;
+ break;
- case ALPHABET_FORMAT_8BIT_DATA:
- rv |= 0x04;
- break;
+ case ALPHABET_FORMAT_8BIT_DATA:
+ rv |= 0x04;
+ break;
- case ALPHABET_FORMAT_UCS2:
- rv |= 0x08;
- break;
+ case ALPHABET_FORMAT_UCS2:
+ rv |= 0x08;
+ break;
- default:
- rv |= 0x0C;
- break;
+ default:
+ rv |= 0x0C;
+ break;
}
return rv;
}
-static int _sat_encode_command_detail_tlv(const struct tel_sat_cmd_detail_info* src, char *dst, int current_temp_index)
+static int _sat_encode_command_detail_tlv(const struct tel_sat_cmd_detail_info *src, char *dst, int current_temp_index)
{
dst[current_temp_index++] = (b_comprehensive ? (SATK_COMMAND_DETAILS_TAG | 0x80) : SATK_COMMAND_DETAILS_TAG);
dst[current_temp_index++] = SATK_COMMAND_DETAILS_LENGTH;
dst[current_temp_index++] = src->cmd_type;
dst[current_temp_index] = 0x00;
- switch(src->cmd_type){
- case SAT_PROATV_CMD_DISPLAY_TEXT:{
- //command detail text priority
- if (src->cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
- dst[current_temp_index] += 0x01;
-
- //command detail text clear type
- if (src->cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG)
- dst[current_temp_index] += 0x80;
- }break;
- case SAT_PROATV_CMD_GET_INKEY:{
- //command detail alphabet set
- if(src->cmd_qualifier.get_inkey.alphabet_set)
- dst[current_temp_index] += 0x01;
-
- //command detail alphabet type
- if(src->cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2)
- dst[current_temp_index] += 0x02;
-
- //command detail get inkey type
- if(src->cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED)
- dst[current_temp_index] += 0x04;
-
-
- //command detail immediate response required
- if(src->cmd_qualifier.get_inkey.immediate_rsp_required)
- dst[current_temp_index] += 0x08;
-
- //command detail help available
- if (src->cmd_qualifier.get_inkey.help_info)
- dst[current_temp_index] += 0x80;
- }break;
- case SAT_PROATV_CMD_GET_INPUT:{
- //command detail alphabet set
- if(src->cmd_qualifier.get_input.alphabet_set)
- dst[current_temp_index] += 0x01;
-
- //command detail alphabet type
- if(src->cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2)
- dst[current_temp_index] += 0x02;
-
- //command detail echo user input
- if(!src->cmd_qualifier.get_input.me_echo_user_input)
- dst[current_temp_index] += 0x04;
-
- //command detail user input unpacked format
- if(!src->cmd_qualifier.get_input.user_input_unpacked_format)
- dst[current_temp_index] += 0x08;
-
- //command detail help available
- if (src->cmd_qualifier.get_input.help_info)
- dst[current_temp_index] += 0x80;
- }break;
- case SAT_PROATV_CMD_MORE_TIME:{
- dbg("more time : 1bit RFU")
- }break;
- case SAT_PROATV_CMD_PLAY_TONE:{
- //command detail vibration alert
- if(src->cmd_qualifier.play_tone.vibration_alert == VIBRATE_ALERT_REQUIRED)
- dst[current_temp_index] += 0x01;
- }break;
- case SAT_PROATV_CMD_REFRESH:{
- //command detail refresh command
- dst[current_temp_index] += src->cmd_qualifier.refresh.refresh;
- }break;
- case SAT_PROATV_CMD_SETUP_MENU:{
- //command detail preferences
- if (src->cmd_qualifier.setup_menu.select_preference == SELECTION_PREFERENCE_USING_SOFT_KEY)
- dst[current_temp_index] += 0x01;
-
- //command detail help available
- if (src->cmd_qualifier.setup_menu.help_info)
- dst[current_temp_index] += 0x80;
- }break;
- case SAT_PROATV_CMD_SELECT_ITEM:{
- //command detail presentation
- if(src->cmd_qualifier.select_item.presentation_type != PRESENTATION_TYPE_NOT_SPECIFIED){
- dst[current_temp_index] += 0x01;
- if(src->cmd_qualifier.select_item.presentation_type == PRESENTATION_TYPE_NAVIGATION_OPTION){
- dst[current_temp_index] += PRESENTATION_TYPE_NAVIGATION_OPTION;
- }
- }
-
- //command detail selection preference
- if(src->cmd_qualifier.select_item.select_preference == SELECTION_PREFERENCE_USING_SOFT_KEY)
- dst[current_temp_index] += 0x04;
-
- //command detail help available
- if (src->cmd_qualifier.select_item.help_info)
- dst[current_temp_index] += 0x80;
- }break;
- case SAT_PROATV_CMD_SEND_SMS:{
- //command detail sms packing by me required
- if(src->cmd_qualifier.send_sms.packing_by_me_required)
- dst[current_temp_index] += 0x01;
- }break;
- case SAT_PROATV_CMD_SETUP_CALL:{
- //command detail setup call command;
- dst[current_temp_index] += src->cmd_qualifier.setup_call.setup_call;
- }break;
- case SAT_PROATV_CMD_SETUP_EVENT_LIST:{
- dbg("setup evnet list : 1bit RFU")
- }break;
- case SAT_PROATV_CMD_OPEN_CHANNEL:{
- if(src->cmd_qualifier.open_channel.immediate_link)
- dst[current_temp_index] += 0x01;
- if(src->cmd_qualifier.open_channel.automatic_reconnection)
- dst[current_temp_index] += 0x02;
- if(src->cmd_qualifier.open_channel.background_mode)
- dst[current_temp_index] += 0x04;
- }break;
- case SAT_PROATV_CMD_SEND_DATA:{
- if(src->cmd_qualifier.send_data.send_data_immediately)
- dst[current_temp_index] += 0x01;
- }break;
- case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:{
- dst[current_temp_index] += src->cmd_qualifier.provide_local_info.provide_local_info;
- }break;
- case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:{
- if(src->cmd_qualifier.language_notification.specific_language)
- dst[current_temp_index] += 0x01;
- }break;
- case SAT_PROATV_CMD_LAUNCH_BROWSER:{
- dst[current_temp_index] += src->cmd_qualifier.launch_browser.launch_browser;
- }break;
- default:
- err("no matched cmd type(%d)", src->cmd_type);
- break;
+ switch (src->cmd_type) {
+ case SAT_PROATV_CMD_DISPLAY_TEXT:
+ /* command detail text priority */
+ if (src->cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
+ dst[current_temp_index] += 0x01;
+
+ /* command detail text clear type */
+ if (src->cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG)
+ dst[current_temp_index] += 0x80;
+ break;
+
+ case SAT_PROATV_CMD_GET_INKEY:
+ /* command detail alphabet set */
+ if (src->cmd_qualifier.get_inkey.alphabet_set)
+ dst[current_temp_index] += 0x01;
+
+ /* command detail alphabet type */
+ if (src->cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2)
+ dst[current_temp_index] += 0x02;
+
+ /* command detail get inkey type */
+ if (src->cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED)
+ dst[current_temp_index] += 0x04;
+
+
+ /* command detail immediate response required */
+ if (src->cmd_qualifier.get_inkey.immediate_rsp_required)
+ dst[current_temp_index] += 0x08;
+
+ /* command detail help available */
+ if (src->cmd_qualifier.get_inkey.help_info)
+ dst[current_temp_index] += 0x80;
+ break;
+
+ case SAT_PROATV_CMD_GET_INPUT:
+ /* command detail alphabet set */
+ if (src->cmd_qualifier.get_input.alphabet_set)
+ dst[current_temp_index] += 0x01;
+
+ /* command detail alphabet type */
+ if (src->cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2)
+ dst[current_temp_index] += 0x02;
+
+ /* command detail echo user input */
+ if (!src->cmd_qualifier.get_input.me_echo_user_input)
+ dst[current_temp_index] += 0x04;
+
+ /* command detail user input unpacked format */
+ if (!src->cmd_qualifier.get_input.user_input_unpacked_format)
+ dst[current_temp_index] += 0x08;
+
+ /* command detail help available */
+ if (src->cmd_qualifier.get_input.help_info)
+ dst[current_temp_index] += 0x80;
+ break;
+
+ case SAT_PROATV_CMD_MORE_TIME:
+ dbg("more time : 1bit RFU");
+ break;
+
+ case SAT_PROATV_CMD_PLAY_TONE:
+ /* command detail vibration alert */
+ if (src->cmd_qualifier.play_tone.vibration_alert == VIBRATE_ALERT_REQUIRED)
+ dst[current_temp_index] += 0x01;
+ break;
+
+ case SAT_PROATV_CMD_REFRESH:
+ /* command detail refresh command */
+ dst[current_temp_index] += src->cmd_qualifier.refresh.refresh;
+ break;
+
+ case SAT_PROATV_CMD_SETUP_MENU:
+ /* command detail preferences */
+ if (src->cmd_qualifier.setup_menu.select_preference == SELECTION_PREFERENCE_USING_SOFT_KEY)
+ dst[current_temp_index] += 0x01;
+
+ /* command detail help available */
+ if (src->cmd_qualifier.setup_menu.help_info)
+ dst[current_temp_index] += 0x80;
+ break;
+
+ case SAT_PROATV_CMD_SELECT_ITEM:
+ /* command detail presentation */
+ if (src->cmd_qualifier.select_item.presentation_type != PRESENTATION_TYPE_NOT_SPECIFIED) {
+ dst[current_temp_index] += 0x01;
+ if (src->cmd_qualifier.select_item.presentation_type == PRESENTATION_TYPE_NAVIGATION_OPTION)
+ dst[current_temp_index] += PRESENTATION_TYPE_NAVIGATION_OPTION;
+ }
+
+ /* command detail selection preference */
+ if (src->cmd_qualifier.select_item.select_preference == SELECTION_PREFERENCE_USING_SOFT_KEY)
+ dst[current_temp_index] += 0x04;
+
+ /* command detail help available */
+ if (src->cmd_qualifier.select_item.help_info)
+ dst[current_temp_index] += 0x80;
+ break;
+
+ case SAT_PROATV_CMD_SEND_SMS:
+ /* command detail sms packing by me required */
+ if (src->cmd_qualifier.send_sms.packing_by_me_required)
+ dst[current_temp_index] += 0x01;
+ break;
+
+ case SAT_PROATV_CMD_SETUP_CALL:
+ /* command detail setup call command */
+ dst[current_temp_index] += src->cmd_qualifier.setup_call.setup_call;
+ break;
+
+ case SAT_PROATV_CMD_SETUP_EVENT_LIST:
+ dbg("setup evnet list : 1bit RFU");
+ break;
+
+ case SAT_PROATV_CMD_OPEN_CHANNEL:
+ if (src->cmd_qualifier.open_channel.immediate_link)
+ dst[current_temp_index] += 0x01;
+
+ if (src->cmd_qualifier.open_channel.automatic_reconnection)
+ dst[current_temp_index] += 0x02;
+
+ if (src->cmd_qualifier.open_channel.background_mode)
+ dst[current_temp_index] += 0x04;
+ break;
+
+ case SAT_PROATV_CMD_SEND_DATA:
+ if (src->cmd_qualifier.send_data.send_data_immediately)
+ dst[current_temp_index] += 0x01;
+ break;
+
+ case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
+ dst[current_temp_index] += src->cmd_qualifier.provide_local_info.provide_local_info;
+ break;
+
+ case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:
+ if (src->cmd_qualifier.language_notification.specific_language)
+ dst[current_temp_index] += 0x01;
+ break;
+
+ case SAT_PROATV_CMD_LAUNCH_BROWSER:
+ dst[current_temp_index] += src->cmd_qualifier.launch_browser.launch_browser;
+ break;
+
+ default:
+ err("no matched cmd type(%d)", src->cmd_type);
+ break;
}
return 5;
}
-static int _sat_encode_device_identities_tlv(const struct tel_sat_device_identities* src, char *dst, int current_temp_index)
+static int _sat_encode_device_identities_tlv(const struct tel_sat_device_identities *src, char *dst, int current_temp_index)
{
dst[current_temp_index++] = SATK_DEVICE_IDENTITY_TAG;
dst[current_temp_index++] = SATK_DEVICE_IDENTITY_LENGTH;
dst[current_temp_index++] = src->src;
dst[current_temp_index++] = src->dest;
- //device identities total len 4
+ /* device identities total len 4 */
return 4;
}
-static int _sat_encode_item_identifier_tlv(const struct tel_sat_item_identifier* src, char *dst, int current_temp_index)
+static int _sat_encode_item_identifier_tlv(const struct tel_sat_item_identifier *src, char *dst, int current_temp_index)
{
- dst[current_temp_index++] =SATK_ITEM_IDENTIFIER_TAG;
- dst[current_temp_index++] =SATK_ITEM_IDENTIFIER_LENGTH;
+ dst[current_temp_index++] = SATK_ITEM_IDENTIFIER_TAG;
+ dst[current_temp_index++] = SATK_ITEM_IDENTIFIER_LENGTH;
dst[current_temp_index++] = src->item_identifier;
- //item identifier total len 3
+ /* item identifier total len 3 */
return 3;
}
-/*static int _sat_encode_duration_tlv(const struct tel_sat_duration* src, char *dst, int current_temp_index)
+#if 0
+static int _sat_encode_duration_tlv(const struct tel_sat_duration *src, char *dst, int current_temp_index)
{
- dst[current_temp_index++] =SATK_DURATION_TAG;
- dst[current_temp_index++] =SATK_DURATION_LENGTH;
+ dst[current_temp_index++] = SATK_DURATION_TAG;
+ dst[current_temp_index++] = SATK_DURATION_LENGTH;
dst[current_temp_index++] = src->time_unit;
dst[current_temp_index++] = src->time_interval;
- //duration total len 4
+ /*duration total len 4 */
return 4;
-}*/
+}
+#endif
-static int _sat_encode_text_tlv(const struct tel_sat_text_string_object* src, char *dst, int current_temp_index, gboolean raw_dcs)
+static int _sat_encode_text_tlv(const struct tel_sat_text_string_object *src, char *dst, int current_temp_index, gboolean raw_dcs)
{
int total_len = 0;
int length_temp_index = 0;
- //tag
- dst[current_temp_index++] =SATK_TEXT_STRING_TAG;
+ /* tag */
+ dst[current_temp_index++] = SATK_TEXT_STRING_TAG;
- //length
- if(src->string_length <= 0x7F){
- dst[current_temp_index++] =SATK_DCS_LENGTH+src->string_length;
+ /* length */
+ if (src->string_length <= 0x7F) {
+ dst[current_temp_index++] = SATK_DCS_LENGTH + src->string_length;
length_temp_index = 1;
- }
- else{
+ } else {
dst[current_temp_index++] = 0x81;
- dst[current_temp_index++] =SATK_DCS_LENGTH+src->string_length;
+ dst[current_temp_index++] = SATK_DCS_LENGTH + src->string_length;
length_temp_index = 2;
}
- //dcs
- if(raw_dcs)
+ /* dcs */
+ if (raw_dcs)
dst[current_temp_index++] = src->dcs.raw_dcs;
else
- dst[current_temp_index++] =_sat_encode_dcs_tlv(&(src->dcs));
+ dst[current_temp_index++] = _sat_encode_dcs_tlv(&(src->dcs));
- //value
- if(src->string_length > 0){
+ /* value */
+ if (src->string_length > 0)
memcpy(&(dst[current_temp_index]), src->string, src->string_length);
- }
- //tag+temp_index+dcs+data
- total_len = 1+length_temp_index+1+src->string_length;
+ /* tag + temp_index + dcs + data */
+ total_len = 1 + length_temp_index + 1 + src->string_length;
return total_len;
}
static int _sat_encode_eventlist_tlv(const enum event_list src, char *dst, int current_temp_index)
{
- dst[current_temp_index++] =SATK_EVENT_LIST_TAG;
- dst[current_temp_index++] =0x01;
- dst[current_temp_index++] =src;
+ dst[current_temp_index++] = SATK_EVENT_LIST_TAG;
+ dst[current_temp_index++] = 0x01;
+ dst[current_temp_index++] = src;
return 3;
-}
-
-static int _sat_encode_date_time_and_timezone_tlv(const struct tel_sat_date_time_and_timezone *src, char *dst, int current_temp_index)
-{
- dst[current_temp_index++] = SATK_DATE_TIME_AND_TIME_ZONE_TAG;
- dst[current_temp_index++] = SATK_DATE_TIME_AND_TIME_ZONE_LENGTH;
- dst[current_temp_index++] = src->year;
- dst[current_temp_index++] = src->month;
- dst[current_temp_index++] = src->day;
- dst[current_temp_index++] = src->hour;
- dst[current_temp_index++] = src->minute;
- dst[current_temp_index++] = src->second;
- dst[current_temp_index++] = src->timeZone;
-
- return 1+1+SATK_DATE_TIME_AND_TIME_ZONE_LENGTH; //tag length+len field length+value length;
-}
-
-static int _sat_encode_language_tlv(const enum tel_sim_language_type src, char *dst, int current_temp_index)
-{
- dst[current_temp_index++] =SATK_LANGUAGE_TAG;
- dst[current_temp_index++] =SATK_LANGUAGE_LENGTH;
-
- dbg("language (%d)", src);
-
- switch(src){
-
- case SIM_LANG_GERMAN :
- dst[current_temp_index++] = 'd';
- dst[current_temp_index++] = 'e';
- break;
-
- case SIM_LANG_ENGLISH :
- dst[current_temp_index++] = 'e';
- dst[current_temp_index++] = 'n';
- break;
-
- case SIM_LANG_ITALIAN :
- dst[current_temp_index++] = 'i';
- dst[current_temp_index++] = 't';
- break;
-
- case SIM_LANG_FRENCH :
- dst[current_temp_index++] = 'f';
- dst[current_temp_index++] = 'r';
- break;
-
- case SIM_LANG_SPANISH :
- dst[current_temp_index++] = 'e';
- dst[current_temp_index++] = 's';
- break;
-
- case SIM_LANG_DUTCH :
- dst[current_temp_index++] = 'n';
- dst[current_temp_index++] = 'l';
- break;
-
- case SIM_LANG_SWEDISH :
- dst[current_temp_index++] = 's';
- dst[current_temp_index++] = 'v';
- break;
-
- case SIM_LANG_DANISH :
- dst[current_temp_index++] = 'd';
- dst[current_temp_index++] = 'a';
- break;
-
- case SIM_LANG_PORTUGUESE :
- dst[current_temp_index++] = 'p';
- dst[current_temp_index++] = 't';
- break;
-
- case SIM_LANG_FINNISH :
- dst[current_temp_index++] = 'f';
- dst[current_temp_index++] = 'i';
- break;
-
- case SIM_LANG_NORWEGIAN :
- dst[current_temp_index++] = 'n';
- dst[current_temp_index++] = 'b';
- break;
-
- case SIM_LANG_GREEK :
- dst[current_temp_index++] = 'e';
- dst[current_temp_index++] = 'l';
- break;
-
- case SIM_LANG_TURKISH :
- dst[current_temp_index++] = 't';
- dst[current_temp_index++] = 'k';
- break;
-
- case SIM_LANG_HUNGARIAN :
- dst[current_temp_index++] = 'h';
- dst[current_temp_index++] = 'u';
- break;
-
- case SIM_LANG_POLISH :
- dst[current_temp_index++] = 'p';
- dst[current_temp_index++] = 'l';
- break;
+}
- case SIM_LANG_KOREAN :
- dst[current_temp_index++] = 'k';
- dst[current_temp_index++] = 'o';
- break;
+static int _sat_encode_date_time_and_timezone_tlv(const struct tel_sat_date_time_and_timezone *src, char *dst, int current_temp_index)
+{
+ dst[current_temp_index++] = SATK_DATE_TIME_AND_TIME_ZONE_TAG;
+ dst[current_temp_index++] = SATK_DATE_TIME_AND_TIME_ZONE_LENGTH;
+ dst[current_temp_index++] = src->year;
+ dst[current_temp_index++] = src->month;
+ dst[current_temp_index++] = src->day;
+ dst[current_temp_index++] = src->hour;
+ dst[current_temp_index++] = src->minute;
+ dst[current_temp_index++] = src->second;
+ dst[current_temp_index++] = src->timeZone;
- case SIM_LANG_CHINESE :
- dst[current_temp_index++] = 'z';
- dst[current_temp_index++] = 'h';
- break;
+ return 1 + 1 + SATK_DATE_TIME_AND_TIME_ZONE_LENGTH; /* tag length + len field length + value length; */
+}
- case SIM_LANG_RUSSIAN :
- dst[current_temp_index++] = 'r';
- dst[current_temp_index++] = 'u';
- break;
+static int _sat_encode_language_tlv(const enum tel_sim_language_type src, char *dst, int current_temp_index)
+{
+ dst[current_temp_index++] = SATK_LANGUAGE_TAG;
+ dst[current_temp_index++] = SATK_LANGUAGE_LENGTH;
- case SIM_LANG_JAPANESE:
- dst[current_temp_index++] = 'j';
- dst[current_temp_index++] = 'a';
- break;
+ dbg("language (%d)", src);
- default:{
- dst[current_temp_index++] = 'e';
- dst[current_temp_index++] = 'n';
- dbg("[SAT] SAT PARSER - Unknown Language: 0x%x",src);
- break;
- }
+ switch (src) {
+ case SIM_LANG_GERMAN:
+ dst[current_temp_index++] = 'd';
+ dst[current_temp_index++] = 'e';
+ break;
+
+ case SIM_LANG_ENGLISH:
+ dst[current_temp_index++] = 'e';
+ dst[current_temp_index++] = 'n';
+ break;
+
+ case SIM_LANG_ITALIAN:
+ dst[current_temp_index++] = 'i';
+ dst[current_temp_index++] = 't';
+ break;
+
+ case SIM_LANG_FRENCH:
+ dst[current_temp_index++] = 'f';
+ dst[current_temp_index++] = 'r';
+ break;
+
+ case SIM_LANG_SPANISH:
+ dst[current_temp_index++] = 'e';
+ dst[current_temp_index++] = 's';
+ break;
+
+ case SIM_LANG_DUTCH:
+ dst[current_temp_index++] = 'n';
+ dst[current_temp_index++] = 'l';
+ break;
+
+ case SIM_LANG_SWEDISH:
+ dst[current_temp_index++] = 's';
+ dst[current_temp_index++] = 'v';
+ break;
+
+ case SIM_LANG_DANISH:
+ dst[current_temp_index++] = 'd';
+ dst[current_temp_index++] = 'a';
+ break;
+
+ case SIM_LANG_PORTUGUESE:
+ dst[current_temp_index++] = 'p';
+ dst[current_temp_index++] = 't';
+ break;
+
+ case SIM_LANG_FINNISH:
+ dst[current_temp_index++] = 'f';
+ dst[current_temp_index++] = 'i';
+ break;
+
+ case SIM_LANG_NORWEGIAN:
+ dst[current_temp_index++] = 'n';
+ dst[current_temp_index++] = 'b';
+ break;
+
+ case SIM_LANG_GREEK:
+ dst[current_temp_index++] = 'e';
+ dst[current_temp_index++] = 'l';
+ break;
+
+ case SIM_LANG_TURKISH:
+ dst[current_temp_index++] = 't';
+ dst[current_temp_index++] = 'k';
+ break;
+
+ case SIM_LANG_HUNGARIAN:
+ dst[current_temp_index++] = 'h';
+ dst[current_temp_index++] = 'u';
+ break;
+
+ case SIM_LANG_POLISH:
+ dst[current_temp_index++] = 'p';
+ dst[current_temp_index++] = 'l';
+ break;
+
+ case SIM_LANG_KOREAN:
+ dst[current_temp_index++] = 'k';
+ dst[current_temp_index++] = 'o';
+ break;
+
+ case SIM_LANG_CHINESE:
+ dst[current_temp_index++] = 'z';
+ dst[current_temp_index++] = 'h';
+ break;
+
+ case SIM_LANG_RUSSIAN:
+ dst[current_temp_index++] = 'r';
+ dst[current_temp_index++] = 'u';
+ break;
+
+ case SIM_LANG_JAPANESE:
+ dst[current_temp_index++] = 'j';
+ dst[current_temp_index++] = 'a';
+ break;
+
+ default:
+ dst[current_temp_index++] = 'e';
+ dst[current_temp_index++] = 'n';
+ dbg("[SAT] SAT PARSER - Unknown Language: 0x%x", src);
+ break;
}
+
return 4;
}
static int _sat_encode_browser_termination_tlv(const enum browser_termination_cause src, char *dst, int current_temp_index)
{
- dst[current_temp_index++] =SATK_BROWSER_TERMINATION_CAUSE_TAG;
- dst[current_temp_index++] =SATK_BROWSER_TERMINATION_CAUSE_LENGTH;
- dst[current_temp_index++] =src;
+ dst[current_temp_index++] = SATK_BROWSER_TERMINATION_CAUSE_TAG;
+ dst[current_temp_index++] = SATK_BROWSER_TERMINATION_CAUSE_LENGTH;
+ dst[current_temp_index++] = src;
return 3;
}
+
#if 0
-static int _sat_encode_bearer_desc_tlv(const struct tel_sat_bearer_description* src, char *dst, int current_temp_index)
+static int _sat_encode_bearer_desc_tlv(const struct tel_sat_bearer_description *src, char *dst, int current_temp_index)
{
int total_len = 0;
int length_temp_index = 0;
- dst[current_temp_index++] =SATK_BEARER_DISCRIPTION_TAG;
+ dst[current_temp_index++] = SATK_BEARER_DISCRIPTION_TAG;
- //length temp_index
+ /* length temp_index */
length_temp_index = current_temp_index++;
- //bearer type
+ /* bearer type */
dst[current_temp_index++] = src->bearer_type;
- switch(src->bearer_type){
- case BEARER_CSD:{
- dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.data_rate;
- dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.service_type;
- dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.connection_element_type;
- }break;
- case BEARER_GPRS:{
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.precedence_class;
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.delay_class;
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.reliability_class;
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.peak_throughput_class;
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.mean_throughput_class;
- dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.pdp_type;
- }break;
- case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
- case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
- default:
- break;
+ switch (src->bearer_type) {
+ case BEARER_CSD: {
+ dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.data_rate;
+ dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.service_type;
+ dst[current_temp_index++] = src->bearer_parameter.cs_bearer_param.connection_element_type;
+ }
+ break;
+
+ case BEARER_GPRS: {
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.precedence_class;
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.delay_class;
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.reliability_class;
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.peak_throughput_class;
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.mean_throughput_class;
+ dst[current_temp_index++] = src->bearer_parameter.ps_bearer_param.pdp_type;
+ }
+ break;
+
+ case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:
+ case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:
+ default:
+ break;
}
dst[length_temp_index] = (current_temp_index-1) - length_temp_index;
- total_len = (current_temp_index-1) - length_temp_index + 2; //tag and length
+ total_len = (current_temp_index-1) - length_temp_index + 2; /* tag and length */
return total_len;
}
-static int _sat_encode_buffer_size_tlv(const struct tel_sat_buffer_size* src, char *dst, int current_temp_index)
+static int _sat_encode_buffer_size_tlv(const struct tel_sat_buffer_size *src, char *dst, int current_temp_index)
{
dst[current_temp_index++] = SATK_BUFFER_SIZE_TAG;
dst[current_temp_index++] = SATK_BUFFER_SIZE_LENGTH;
return 4;
}
#endif
-static int _sat_encode_channel_data_tlv(const struct tel_sat_channel_data* src, char *dst, int current_temp_index)
+
+static int _sat_encode_channel_data_tlv(const struct tel_sat_channel_data *src, char *dst, int current_temp_index)
{
int total_len = 0;
int length_temp_index = 0;
dst[current_temp_index++] = SATK_CHANNEL_DATA_TAG;
- if(src->data_string_len <= 0x7F){
+ if (src->data_string_len <= 0x7F) {
dst[current_temp_index++] = src->data_string_len;
length_temp_index = 1;
- }
- else{
+ } else {
dst[current_temp_index++] = 0x81;
dst[current_temp_index++] = src->data_string_len;
length_temp_index = 2;
memcpy(&(dst[current_temp_index]), src->data_string, src->data_string_len);
- total_len = 1+length_temp_index+src->data_string_len;
+ total_len = 1 + length_temp_index + src->data_string_len;
return total_len;
}
-static int _sat_encode_channel_data_length_tlv(const struct tel_sat_channel_data_len* src, char *dst, int current_temp_index)
+static int _sat_encode_channel_data_length_tlv(const struct tel_sat_channel_data_len *src, char *dst, int current_temp_index)
{
dst[current_temp_index++] = SATK_CHANNEL_DATA_LEN_TAG;
dst[current_temp_index++] = SATK_CHANNEL_DATA_LENGTH_VALUE_LENGTH;
return 3;
}
-static int _sat_encode_channel_status_tlv(const struct tel_sat_channel_status* src, char *dst, int current_temp_index)
+static int _sat_encode_channel_status_tlv(const struct tel_sat_channel_status *src, char *dst, int current_temp_index)
{
dst[current_temp_index++] = SATK_CHANNEL_STATUS_TAG;
dst[current_temp_index++] = SATK_CHANNEL_STATUS_LENGTH;
- if(src->status == link_or_packet_service_activated) //(bit 8)
+ if (src->status == link_or_packet_service_activated) /* (bit 8) */
dst[current_temp_index] += 0x80;
- dst[current_temp_index++] += src->channel_id; //(bit 1~3)
+ dst[current_temp_index++] += src->channel_id; /* (bit 1~3) */
dst[current_temp_index++] = src->status_info;
return 4;
dbg("event type(%d)", evt_dl->event);
- //event list
+ /* event list */
encoded_len = _sat_encode_eventlist_tlv(evt_dl->event, dst_envelop, temp_index);
temp_index += encoded_len;
- //device id - len 4
- encoded_len =_sat_encode_device_identities_tlv(&(evt_dl->device_identitie), dst_envelop, temp_index);
+ /* device id - len 4 */
+ encoded_len = _sat_encode_device_identities_tlv(&(evt_dl->device_identitie), dst_envelop, temp_index);
temp_index += encoded_len;
- switch(evt_dl->event){
- case EVENT_LANGUAGE_SELECTION:
- encoded_len = _sat_encode_language_tlv(evt_dl->language, dst_envelop, temp_index);
- temp_index += encoded_len;
- break;
- case EVENT_BROWSER_TERMINATION:
- encoded_len = _sat_encode_browser_termination_tlv(evt_dl->browser_termination, dst_envelop, temp_index);
- temp_index += encoded_len;
- break;
- case EVENT_DATA_AVAILABLE:
- encoded_len = _sat_encode_channel_status_tlv(&(evt_dl->channel_status), dst_envelop, temp_index);
- temp_index += encoded_len;
+ switch (evt_dl->event) {
+ case EVENT_LANGUAGE_SELECTION:
+ encoded_len = _sat_encode_language_tlv(evt_dl->language, dst_envelop, temp_index);
+ temp_index += encoded_len;
+ break;
- encoded_len = _sat_encode_channel_data_length_tlv(&(evt_dl->channel_data_len), dst_envelop, temp_index);
- temp_index += encoded_len;
- break;
- case EVENT_CHANNEL_STATUS:
- encoded_len = _sat_encode_channel_status_tlv(&(evt_dl->channel_status), dst_envelop, temp_index);
- temp_index += encoded_len;
- break;
- default:
- break;
+ case EVENT_BROWSER_TERMINATION:
+ encoded_len = _sat_encode_browser_termination_tlv(evt_dl->browser_termination, dst_envelop, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ case EVENT_DATA_AVAILABLE:
+ encoded_len = _sat_encode_channel_status_tlv(&(evt_dl->channel_status), dst_envelop, temp_index);
+ temp_index += encoded_len;
+
+ encoded_len = _sat_encode_channel_data_length_tlv(&(evt_dl->channel_data_len), dst_envelop, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ case EVENT_CHANNEL_STATUS:
+ encoded_len = _sat_encode_channel_status_tlv(&(evt_dl->channel_status), dst_envelop, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ default:
+ break;
}
dst_envelop[0] = SATK_EVENT_DOWNLOAD_TAG;
dbg("download envelop cmd len(%d)", temp_index);
- if(temp_index-2 > 0x7F){
+ if (temp_index-2 > 0x7F) {
int idx = 0;
- for(idx = temp_index; idx > 0; idx--){
- dst_envelop[idx] = dst_envelop[idx+1];
- }
+ for (idx = temp_index; idx > 0; idx--)
+ dst_envelop[idx] = dst_envelop[idx + 1];
dst_envelop[1] = 0x81;
temp_index += 1;
dbg("download envelop added cmd len(%d)", temp_index);
int tcore_sat_encode_envelop_cmd(const struct treq_sat_envelop_cmd_data *src_envelop, char *dst_envelop)
{
- int temp_index = 0, encoded_len= 0;
+ int temp_index = 0, encoded_len = 0;
- if(!dst_envelop)
+ if (!dst_envelop)
return 0;
- if(src_envelop->sub_cmd == ENVELOP_MENU_SELECTION){
- temp_index = 2; //set the cursor to device identity
+ if (src_envelop->sub_cmd
+ == ENVELOP_MENU_SELECTION) {
+ temp_index = 2; /* set the cursor to device identity */
dbg("item id(%d)", src_envelop->envelop_data.menu_select.item_identifier.item_identifier);
- encoded_len =_sat_encode_device_identities_tlv(&(src_envelop->envelop_data.menu_select.device_identitie), dst_envelop, temp_index);
+ encoded_len = _sat_encode_device_identities_tlv(&(src_envelop->envelop_data.menu_select.device_identitie), dst_envelop, temp_index);
temp_index += encoded_len;
- //item identifier
+ /* item identifier */
encoded_len = _sat_encode_item_identifier_tlv(&(src_envelop->envelop_data.menu_select.item_identifier), dst_envelop, temp_index);
temp_index += encoded_len;
- if(src_envelop->envelop_data.menu_select.help_request){
- encoded_len = 2;//help request
+ if (src_envelop->envelop_data.menu_select.help_request) {
+ encoded_len = 2;/* help request */
dst_envelop[temp_index++] = SATK_HELP_REQUEST_TAG;
dst_envelop[temp_index++] = SATK_HELP_REQUEST_LENGTH;
}
dbg("menu selection cmd len(%d)", temp_index);
- //main cmd
+ /* main cmd */
dst_envelop[0] = SATK_MENU_SELECTION_TAG;
dst_envelop[1] = temp_index-2;
- }
- else if(src_envelop->sub_cmd == ENVELOP_EVENT_DOWNLOAD){
- temp_index = _sat_encode_download_event(&(src_envelop->envelop_data.event_download),dst_envelop);
- }
+ } else if (src_envelop->sub_cmd
+ == ENVELOP_EVENT_DOWNLOAD)
+ temp_index = _sat_encode_download_event(&(src_envelop->envelop_data.event_download), dst_envelop);
return temp_index;
}
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
+ /* set result info */
dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BACKWARD_MOVE_BY_USER:
- case RESULT_NO_RESPONSE_FROM_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BACKWARD_MOVE_BY_USER:
+ case RESULT_NO_RESPONSE_FROM_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, FALSE);
- temp_index += encoded_len;
- break;
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BACKWARD_MOVE_BY_USER:
- case RESULT_HELP_INFO_REQUIRED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- case RESULT_NO_RESPONSE_FROM_USER:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, FALSE);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BACKWARD_MOVE_BY_USER:
+ case RESULT_HELP_INFO_REQUIRED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ case RESULT_NO_RESPONSE_FROM_USER:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, FALSE);
- temp_index += encoded_len;
- break;
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BACKWARD_MOVE_BY_USER:
- case RESULT_NO_RESPONSE_FROM_USER:
- case RESULT_HELP_INFO_REQUIRED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index =0;
- break;
+ encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, FALSE);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BACKWARD_MOVE_BY_USER:
+ case RESULT_NO_RESPONSE_FROM_USER:
+ case RESULT_HELP_INFO_REQUIRED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_SUCCESS_BUT_TONE_NOT_PLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_SUCCESS_BUT_TONE_NOT_PLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_REFRESH_PERFORMED_WITH_ADDITIONAL_EFS_READ:
- case RESULT_REFRESH_PRFRMD_BUT_INDICATED_USIM_NOT_ACTIVE:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_REFRESH_PERFORMED_WITH_ADDITIONAL_EFS_READ:
+ case RESULT_REFRESH_PRFRMD_BUT_INDICATED_USIM_NOT_ACTIVE:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_HELP_INFO_REQUIRED_BY_USER:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_item_identifier_tlv(&(src_tr->item_identifier), dst_tr, temp_index);
- temp_index += encoded_len;
- break;
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BACKWARD_MOVE_BY_USER:
- case RESULT_NO_RESPONSE_FROM_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_HELP_INFO_REQUIRED_BY_USER:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ encoded_len = _sat_encode_item_identifier_tlv(&(src_tr->item_identifier), dst_tr, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BACKWARD_MOVE_BY_USER:
+ case RESULT_NO_RESPONSE_FROM_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_SMS_RP_ERROR:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->cc_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_SMS_RP_ERROR:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->cc_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
- case RESULT_USSD_OR_SS_TRANSACTION_TERMINATED_BY_USER:
- dst_tr[temp_index++] = 1+src_tr->text.string_length;
- dst_tr[temp_index++] = src_tr->result_type;
-
- memcpy(&(dst_tr[temp_index]), src_tr->text.string, src_tr->text.string_length);
- encoded_len = src_tr->text.string_length;
- temp_index += encoded_len;
- break;
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->cc_problem_type;
- break;
- case RESULT_SS_RETURN_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->ss_problem;
- break;
- case RESULT_BEYOND_ME_CAPABILITIES:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
+ case RESULT_USSD_OR_SS_TRANSACTION_TERMINATED_BY_USER:
+ dst_tr[temp_index++] = 1 + src_tr->text.string_length;
+ dst_tr[temp_index++] = src_tr->result_type;
+
+ memcpy(&(dst_tr[temp_index]), src_tr->text.string, src_tr->text.string_length);
+ encoded_len = src_tr->text.string_length;
+ temp_index += encoded_len;
+ break;
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->cc_problem_type;
+ break;
+
+ case RESULT_SS_RETURN_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->ss_problem;
+ break;
+
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
- case RESULT_USSD_OR_SS_TRANSACTION_TERMINATED_BY_USER:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
-
- encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, TRUE);
- temp_index += encoded_len;
- break;
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_BEYOND_ME_CAPABILITIES:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->cc_problem_type;
- break;
- case RESULT_USSD_RETURN_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->ussd_problem;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
+ case RESULT_USSD_OR_SS_TRANSACTION_TERMINATED_BY_USER:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+
+ encoded_len = _sat_encode_text_tlv(&(src_tr->text), dst_tr, temp_index, TRUE);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->cc_problem_type;
+ break;
+
+ case RESULT_USSD_RETURN_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->ussd_problem;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- case RESULT_SS_RETURN_ERROR:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ:
- case RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->network_problem_type;
- break;
- case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->cc_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_SUCCESS_BUT_MODIFIED_BY_CALL_CONTROL_BY_SIM:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ case RESULT_SS_RETURN_ERROR:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ:
+ case RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->network_problem_type;
+ break;
+
+ case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->cc_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_LIMITED_SERVICE:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- switch(src_tr->command_detail.cmd_qualifier.provide_local_info.provide_local_info){
- case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:
- encoded_len = _sat_encode_date_time_and_timezone_tlv(&(src_tr->other.date_time_and_timezone), dst_tr, temp_index);
- break;
- case LOCAL_INFO_LANGUAGE:
- encoded_len = _sat_encode_language_tlv(src_tr->other.language, dst_tr, temp_index);
- break;
- default:
- dbg("local info type[%d] is not handled", src_tr->command_detail.cmd_qualifier.provide_local_info.provide_local_info);
- break;
- }
- temp_index += encoded_len;
- break;
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_LIMITED_SERVICE:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ switch (src_tr->command_detail.cmd_qualifier.provide_local_info.provide_local_info) {
+ case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:
+ encoded_len = _sat_encode_date_time_and_timezone_tlv(&(src_tr->other.date_time_and_timezone), dst_tr, temp_index);
+ break;
+
+ case LOCAL_INFO_LANGUAGE:
+ encoded_len = _sat_encode_language_tlv(src_tr->other.language, dst_tr, temp_index);
+ break;
+
default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ dbg("local info type[%d] is not handled", src_tr->command_detail.cmd_qualifier.provide_local_info.provide_local_info);
+ break;
+ }
+
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
-
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BACKWARD_MOVE_BY_USER:
- case RESULT_NO_RESPONSE_FROM_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->browser_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BACKWARD_MOVE_BY_USER:
+ case RESULT_NO_RESPONSE_FROM_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->browser_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_SUCCESS_WITH_MODIFICATION:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
-
- //set channel status
- encoded_len = _sat_encode_channel_status_tlv(&(src_tr->channel_status), dst_tr, temp_index);
- temp_index += encoded_len;
- break;
- case RESULT_REFRESH_PRFRMD_BUT_INDICATED_USIM_NOT_ACTIVE:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_INTERACTION_WITH_CC_BY_SIM_IN_TMP_PRBLM:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- case RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->bip_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- return 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_SUCCESS_WITH_MODIFICATION:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+
+ /* set channel status */
+ encoded_len = _sat_encode_channel_status_tlv(&(src_tr->channel_status), dst_tr, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_REFRESH_PRFRMD_BUT_INDICATED_USIM_NOT_ACTIVE:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_INTERACTION_WITH_CC_BY_SIM_IN_TMP_PRBLM:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ case RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->bip_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ return 0;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->bip_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->bip_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_channel_data_length_tlv(&(src_tr->channel_data_len), dst_tr, temp_index);
- temp_index += encoded_len;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ encoded_len = _sat_encode_channel_data_length_tlv(&(src_tr->channel_data_len), dst_tr, temp_index);
+ temp_index += encoded_len;
+ break;
- case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->bip_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->bip_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_channel_data_tlv(&(src_tr->channel_data), dst_tr, temp_index);
- temp_index += encoded_len;
- encoded_len = _sat_encode_channel_data_length_tlv(&(src_tr->channel_data_len), dst_tr, temp_index);
- temp_index += encoded_len;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_FRAMES_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ encoded_len = _sat_encode_channel_data_tlv(&(src_tr->channel_data), dst_tr, temp_index);
+ temp_index += encoded_len;
+ encoded_len = _sat_encode_channel_data_length_tlv(&(src_tr->channel_data_len), dst_tr, temp_index);
+ temp_index += encoded_len;
+ break;
- case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->bip_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_FRAMES_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->bip_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
- switch(src_tr->result_type){
- case RESULT_SUCCESS:
- case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
- case RESULT_SUCCESS_WITH_MISSING_INFO:
- case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- encoded_len = _sat_encode_channel_status_tlv(&(src_tr->channel_status), dst_tr, temp_index);
- temp_index += encoded_len;
- break;
- case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
- case RESULT_BEYOND_ME_CAPABILITIES:
- case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
- case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
- case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
- dst_tr[temp_index++] = 1;
- dst_tr[temp_index++] = src_tr->result_type;
- break;
- case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
- case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->me_problem_type;
- break;
- case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
- dst_tr[temp_index++] = 2;
- dst_tr[temp_index++] = src_tr->result_type;
- dst_tr[temp_index++] = src_tr->bip_problem_type;
- break;
- default:
- dbg("invalid response value[0x%x] in current TR",src_tr->result_type);
- temp_index = 0;
- break;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
+ switch (src_tr->result_type) {
+ case RESULT_SUCCESS:
+ case RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION:
+ case RESULT_SUCCESS_WITH_MISSING_INFO:
+ case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ encoded_len = _sat_encode_channel_status_tlv(&(src_tr->channel_status), dst_tr, temp_index);
+ temp_index += encoded_len;
+ break;
+
+ case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
+ case RESULT_BEYOND_ME_CAPABILITIES:
+ case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
+ case RESULT_COMMAND_NUMBER_NOT_KNOWN_BY_ME:
+ case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+ dst_tr[temp_index++] = 1;
+ dst_tr[temp_index++] = src_tr->result_type;
+ break;
+
+ case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+ case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->me_problem_type;
+ break;
+
+ case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
+ dst_tr[temp_index++] = 2;
+ dst_tr[temp_index++] = src_tr->result_type;
+ dst_tr[temp_index++] = src_tr->bip_problem_type;
+ break;
+
+ default:
+ dbg("invalid response value[0x%x] in current TR", src_tr->result_type);
+ temp_index = 0;
+ break;
}
return temp_index;
{
int temp_index = 0, encoded_len = 0;
- //set command detail info
+ /* set command detail info */
encoded_len = _sat_encode_command_detail_tlv(&(src_tr->command_detail), dst_tr, temp_index);
temp_index += encoded_len;
- //set device identities info
+ /* set device identities info */
encoded_len = _sat_encode_device_identities_tlv(&(src_tr->device_id), dst_tr, temp_index);
temp_index += encoded_len;
- //set result info
- dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);;
+ /* set result info */
+ dst_tr[temp_index++] = (b_comprehensive ? (SATK_RESULT_TAG | 0x80) : SATK_RESULT_TAG);
dst_tr[temp_index++] = 1;
dst_tr[temp_index++] = src_tr->result_type;
return temp_index;
}
-int tcore_sat_encode_terminal_response(const struct treq_sat_terminal_rsp_data *src_tr, char *dst_tr){
+int tcore_sat_encode_terminal_response(const struct treq_sat_terminal_rsp_data *src_tr, char *dst_tr)
+{
int tr_len = 0;
- if(!dst_tr)
+ if (!dst_tr)
return 0;
- switch(src_tr->cmd_type){
- case SAT_PROATV_CMD_DISPLAY_TEXT:{
- tr_len = _sat_encode_display_text(&(src_tr->terminal_rsp_data.display_text), dst_tr);
- }break;
- case SAT_PROATV_CMD_GET_INKEY:{
- tr_len = _sat_encode_get_inkey(&(src_tr->terminal_rsp_data.get_inkey), dst_tr);
- }break;
- case SAT_PROATV_CMD_GET_INPUT:{
- tr_len = _sat_encode_get_input(&(src_tr->terminal_rsp_data.get_input), dst_tr);
- }break;
- case SAT_PROATV_CMD_MORE_TIME:{
- tr_len = _sat_encode_more_time(&(src_tr->terminal_rsp_data.more_time), dst_tr);
- }break;
- case SAT_PROATV_CMD_PLAY_TONE:{
- tr_len = _sat_encode_play_tone(&(src_tr->terminal_rsp_data.play_tone), dst_tr);
- }break;
- case SAT_PROATV_CMD_REFRESH:{
- tr_len = _sat_encode_refresh(&(src_tr->terminal_rsp_data.refresh), dst_tr);
- }break;
- case SAT_PROATV_CMD_SETUP_MENU:{
- tr_len = _sat_encode_setup_menu(&(src_tr->terminal_rsp_data.setup_menu), dst_tr);
- }break;
- case SAT_PROATV_CMD_SELECT_ITEM:{
- tr_len = _sat_encode_select_item(&(src_tr->terminal_rsp_data.select_item), dst_tr);
- }break;
- case SAT_PROATV_CMD_SEND_SMS:{
- tr_len = _sat_encode_send_sms(&(src_tr->terminal_rsp_data.send_sms), dst_tr);
- }break;
- case SAT_PROATV_CMD_SEND_SS:{
- tr_len = _sat_encode_send_ss(&(src_tr->terminal_rsp_data.send_ss), dst_tr);
- }break;
- case SAT_PROATV_CMD_SEND_USSD:{
- tr_len = _sat_encode_send_ussd(&(src_tr->terminal_rsp_data.send_ussd), dst_tr);
- }break;
- case SAT_PROATV_CMD_SETUP_CALL:{
- tr_len = _sat_encode_setup_call(&(src_tr->terminal_rsp_data.setup_call), dst_tr);
- }break;
- case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:{
- tr_len = _sat_encode_provide_local_info(&(src_tr->terminal_rsp_data.provide_local_info), dst_tr);
- }break;
- case SAT_PROATV_CMD_SETUP_EVENT_LIST:{
- tr_len = _sat_encode_setup_event_list(&(src_tr->terminal_rsp_data.setup_event_list), dst_tr);
- }break;
- case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:{
- tr_len = _sat_encode_setup_idle_mode_text(&(src_tr->terminal_rsp_data.setup_idle_mode_text), dst_tr);
- }break;
- case SAT_PROATV_CMD_SEND_DTMF:{
- tr_len = _sat_encode_send_dtmf(&(src_tr->terminal_rsp_data.send_dtmf), dst_tr);
- }break;
- case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:{
- tr_len = _sat_encode_language_notification(&(src_tr->terminal_rsp_data.language_notification), dst_tr);
- }break;
- case SAT_PROATV_CMD_LAUNCH_BROWSER:{
- tr_len = _sat_encode_launch_browser(&(src_tr->terminal_rsp_data.launch_browser), dst_tr);
- }break;
- case SAT_PROATV_CMD_OPEN_CHANNEL:{
- tr_len = _sat_encode_open_channel(&(src_tr->terminal_rsp_data.open_channel), dst_tr);
- }break;
- case SAT_PROATV_CMD_CLOSE_CHANNEL:{
- tr_len = _sat_encode_close_channel(&(src_tr->terminal_rsp_data.close_channel), dst_tr);
- }break;
- case SAT_PROATV_CMD_SEND_DATA:{
- tr_len = _sat_encode_send_data(&(src_tr->terminal_rsp_data.send_data), dst_tr);
- }break;
- case SAT_PROATV_CMD_RECEIVE_DATA:{
- tr_len = _sat_encode_receive_data(&(src_tr->terminal_rsp_data.receive_data), dst_tr);
- }break;
- case SAT_PROATV_CMD_GET_CHANNEL_STATUS:{
- tr_len = _sat_encode_get_channel_status(&(src_tr->terminal_rsp_data.get_channel_status), dst_tr);
- }break;
- default:{
- tr_len = _sat_encode_unsupport_command(&(src_tr->terminal_rsp_data.unsupport_cmd), dst_tr);
- }break;
+ switch (src_tr->cmd_type) {
+ case SAT_PROATV_CMD_DISPLAY_TEXT:
+ tr_len = _sat_encode_display_text(&(src_tr->terminal_rsp_data.display_text), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_GET_INKEY:
+ tr_len = _sat_encode_get_inkey(&(src_tr->terminal_rsp_data.get_inkey), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_GET_INPUT:
+ tr_len = _sat_encode_get_input(&(src_tr->terminal_rsp_data.get_input), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_MORE_TIME:
+ tr_len = _sat_encode_more_time(&(src_tr->terminal_rsp_data.more_time), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_PLAY_TONE:
+ tr_len = _sat_encode_play_tone(&(src_tr->terminal_rsp_data.play_tone), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_REFRESH:
+ tr_len = _sat_encode_refresh(&(src_tr->terminal_rsp_data.refresh), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_MENU:
+ tr_len = _sat_encode_setup_menu(&(src_tr->terminal_rsp_data.setup_menu), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SELECT_ITEM:
+ tr_len = _sat_encode_select_item(&(src_tr->terminal_rsp_data.select_item), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SEND_SMS:
+ tr_len = _sat_encode_send_sms(&(src_tr->terminal_rsp_data.send_sms), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SEND_SS:
+ tr_len = _sat_encode_send_ss(&(src_tr->terminal_rsp_data.send_ss), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SEND_USSD:
+ tr_len = _sat_encode_send_ussd(&(src_tr->terminal_rsp_data.send_ussd), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_CALL:
+ tr_len = _sat_encode_setup_call(&(src_tr->terminal_rsp_data.setup_call), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
+ tr_len = _sat_encode_provide_local_info(&(src_tr->terminal_rsp_data.provide_local_info), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_EVENT_LIST:
+ tr_len = _sat_encode_setup_event_list(&(src_tr->terminal_rsp_data.setup_event_list), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
+ tr_len = _sat_encode_setup_idle_mode_text(&(src_tr->terminal_rsp_data.setup_idle_mode_text), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SEND_DTMF:
+ tr_len = _sat_encode_send_dtmf(&(src_tr->terminal_rsp_data.send_dtmf), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:
+ tr_len = _sat_encode_language_notification(&(src_tr->terminal_rsp_data.language_notification), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_LAUNCH_BROWSER:
+ tr_len = _sat_encode_launch_browser(&(src_tr->terminal_rsp_data.launch_browser), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_OPEN_CHANNEL:
+ tr_len = _sat_encode_open_channel(&(src_tr->terminal_rsp_data.open_channel), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_CLOSE_CHANNEL:
+ tr_len = _sat_encode_close_channel(&(src_tr->terminal_rsp_data.close_channel), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_SEND_DATA:
+ tr_len = _sat_encode_send_data(&(src_tr->terminal_rsp_data.send_data), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_RECEIVE_DATA:
+ tr_len = _sat_encode_receive_data(&(src_tr->terminal_rsp_data.receive_data), dst_tr);
+ break;
+
+ case SAT_PROATV_CMD_GET_CHANNEL_STATUS:
+ tr_len = _sat_encode_get_channel_status(&(src_tr->terminal_rsp_data.get_channel_status), dst_tr);
+ break;
+
+ default:
+ tr_len = _sat_encode_unsupport_command(&(src_tr->terminal_rsp_data.unsupport_cmd), dst_tr);
+ break;
}
return tr_len;
}
CoreObject *tcore_sat_new(TcorePlugin *p, const char *name,
- struct tcore_sat_operations *ops, TcoreHal *hal)
+ struct tcore_sat_operations *ops, TcoreHal *hal)
{
CoreObject *o = NULL;
struct private_object_data *po = NULL;
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_SAT);
tcore_object_link_object(o, po);
- tcore_object_set_clone_hook(o, _clone_hook);
tcore_object_set_free_hook(o, _free_hook);
tcore_object_set_dispatcher(o, _dispatcher);
tcore_object_free(o);
}
-void tcore_sat_set_ops(CoreObject *o, struct tcore_sat_operations *ops)
+void tcore_sat_set_ops(CoreObject *o, struct tcore_sat_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_SAT);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#include "core_object.h"
#include "co_sim.h"
+#define SIM_FILE_TYPE_TAG 0x07
+#define SIM_FCP_TEMPLATE_TAG 0x62
+#define SIM_FILE_DESCRIPTOR_TAG 0x82
+#define SIM_FILE_IDENTIFIER_TAG 0x83
+#define SIM_PROPRIETARY_INFORMATION_TAG 0xA5
+#define SIM_LIFE_CYCLE_STATUS_TAG 0x8A
+#define SIM_FILE_SIZE_TAG 0x80
+#define SIM_TOTAL_FILE_SIZE_TAG 0x81
+#define SIM_SHORT_FILE_IDENTIFIER_TAG 0x88
+
+/* USIM file types */
+#define SIM_FTYPE_TRANSPARENT 0x1
+#define SIM_FTYPE_LINEAR_FIXED 0x2
+#define SIM_FTYPE_CYCLIC 0x6
+
+/* GSM file types */
+#define SIM_FTYPE_RFU 0x0
+#define SIM_FTYPE_MF 0x1
+#define SIM_FTYPE_DF 0x2
+#define SIM_FTYPE_EF 0x4
+
struct private_object_data {
- struct tcore_sim_operations *ops;
+ struct tcore_sim_operations *ops[TCORE_OPS_TYPE_MAX];
unsigned char app_list;
enum tel_sim_type type; /**< Provides the SIM card type*/
* http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/index.html
*
*/
-static const char* mcc_having_3digits_mnc[] = {
- "302", // Canada
- "310", "311", "312", "313", "314", "315", "316", // United States of America
- //"334", // Mexico (uses 3-digits MNC only partially.)
- "338", // Jamaica
- "342", // Barbados
- "344", // Antigua and Barbuda
- "346", // Cayman Islands
- "348", // British Virgin Islands
- "365", // Anguilla
- "708", // Honduras (Republic of)
- //"722", // Argentine Republic (uses 3-digits MNC only partially.)
- "732", // Colombia (Republic of)
+static const char *mcc_having_3digits_mnc[] = {
+ "302", /* Canada */
+ "310", "311", "312", "313", "314", "315", "316", /* United States of America */
+ /* "334",*/ /* Mexico (uses 3-digits MNC only partially.) */
+ "338", /* Jamaica */
+ "342", /* Barbados */
+ "344", /* Antigua and Barbuda */
+ "346", /* Cayman Islands */
+ "348", /* British Virgin Islands */
+ "365", /* Anguilla */
+ "708", /* Honduras (Republic of) */
+ /* "722", */ /* Argentine Republic (uses 3-digits MNC only partially.) */
+ "732", /* Colombia (Republic of) */
};
-static const char* plmn_having_3digits_mnc[] = {
+static const char *plmn_having_3digits_mnc[] = {
/* Mexico */
- "334020", // Telcel
- "334050", // Iusacell/Unefon
+ "334020", /* Telcel */
+ "334050", /* Iusacell/Unefon */
/* India */
"405025", "405026", "405027", "405028", "405029", "405030", "405031", "405032",
"405033", "405034", "405035", "405036", "405037", "405038", "405039", "405040",
/* Malaysia */
"502142", "502143", "502145", "502146", "502147", "502148",
/* Argentina */
- "722070", // Movistar AR
- "722310", // Claro AR
- "722341", // Personal AR
+ "722070", /* Movistar AR */
+ "722310", /* Claro AR */
+ "722341", /* Personal AR */
};
-gboolean tcore_sim_check_plmn_having_3digits_mnc(char* plmn)
+gboolean tcore_sim_check_plmn_having_3digits_mnc(char *plmn)
{
int num = 0;
int i = 0;
}
num = G_N_ELEMENTS(plmn_having_3digits_mnc);
- for (i = 0; i < num; i++) {
- if (strcmp((const char *)plmn, plmn_having_3digits_mnc[i]) == 0) {
+ for (i = 0; i < num; i++)
+ if (strcmp((const char *)plmn, plmn_having_3digits_mnc[i]) == 0)
return TRUE;
- }
- }
return FALSE;
}
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_sim_operations *ops = NULL;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_SIM, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops)
- return TCORE_RETURN_ENOSYS;
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_SIM_VERIFY_PINS:
- if (!po->ops->verify_pins)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_VERIFY_PINS:
+ tcore_check_null_ret_err("ops->verify_pins",
+ ops->verify_pins, TCORE_RETURN_ENOSYS);
- return po->ops->verify_pins(o, ur);
- break;
+ return ops->verify_pins(o, ur);
- case TREQ_SIM_VERIFY_PUKS:
- if (!po->ops->verify_puks)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_VERIFY_PUKS:
+ tcore_check_null_ret_err("ops->verify_puks",
+ ops->verify_puks, TCORE_RETURN_ENOSYS);
- return po->ops->verify_puks(o, ur);
- break;
+ return ops->verify_puks(o, ur);
- case TREQ_SIM_CHANGE_PINS:
- if (!po->ops->change_pins)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_CHANGE_PINS:
+ tcore_check_null_ret_err("ops->change_pins",
+ ops->change_pins, TCORE_RETURN_ENOSYS);
- return po->ops->change_pins(o, ur);
- break;
+ return ops->change_pins(o, ur);
- case TREQ_SIM_GET_FACILITY_STATUS:
- if (!po->ops->get_facility_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_GET_FACILITY_STATUS:
+ tcore_check_null_ret_err("ops->get_facility_status",
+ ops->get_facility_status, TCORE_RETURN_ENOSYS);
- return po->ops->get_facility_status(o, ur);
- break;
+ return ops->get_facility_status(o, ur);
- case TREQ_SIM_DISABLE_FACILITY:
- if (!po->ops->disable_facility)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_DISABLE_FACILITY:
+ tcore_check_null_ret_err("ops->disable_facility",
+ ops->disable_facility, TCORE_RETURN_ENOSYS);
- return po->ops->disable_facility(o, ur);
- break;
+ return ops->disable_facility(o, ur);
- case TREQ_SIM_ENABLE_FACILITY:
- if (!po->ops->enable_facility)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_ENABLE_FACILITY:
+ tcore_check_null_ret_err("ops->enable_facility",
+ ops->enable_facility, TCORE_RETURN_ENOSYS);
- return po->ops->enable_facility(o, ur);
- break;
+ return ops->enable_facility(o, ur);
- case TREQ_SIM_GET_LOCK_INFO:
- if (!po->ops->get_lock_info)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_GET_LOCK_INFO:
+ tcore_check_null_ret_err("ops->get_lock_info",
+ ops->get_lock_info, TCORE_RETURN_ENOSYS);
- return po->ops->get_lock_info(o, ur);
- break;
+ return ops->get_lock_info(o, ur);
- case TREQ_SIM_TRANSMIT_APDU:
- if (!po->ops->transmit_apdu)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_TRANSMIT_APDU:
+ tcore_check_null_ret_err("ops->transmit_apdu",
+ ops->transmit_apdu, TCORE_RETURN_ENOSYS);
- return po->ops->transmit_apdu(o, ur);
- break;
+ return ops->transmit_apdu(o, ur);
- case TREQ_SIM_GET_ATR:
- if (!po->ops->get_atr)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SIM_GET_ATR:
+ tcore_check_null_ret_err("ops->get_atr",
+ ops->get_atr, TCORE_RETURN_ENOSYS);
- return po->ops->get_atr(o, ur);
- break;
+ return ops->get_atr(o, ur);
- case TREQ_SIM_SET_LANGUAGE:
- case TREQ_SIM_SET_CALLFORWARDING:
- case TREQ_SIM_SET_MESSAGEWAITING:
- case TREQ_SIM_SET_MAILBOX:
+ case TREQ_SIM_SET_LANGUAGE:
+ case TREQ_SIM_SET_CALLFORWARDING:
+ case TREQ_SIM_SET_MESSAGEWAITING:
+ case TREQ_SIM_SET_MAILBOX:
#if defined TIZEN_GLOBALCONFIG_ENABLE_CSP
- case TREQ_SIM_SET_CPHS_CSP_INFO:
+ case TREQ_SIM_SET_CPHS_CSP_INFO:
#endif
- if (!po->ops->update_file)
- return TCORE_RETURN_ENOSYS;
-
- return po->ops->update_file(o, ur);
- break;
-
- case TREQ_SIM_GET_ECC:
- case TREQ_SIM_GET_LANGUAGE:
- case TREQ_SIM_GET_ICCID:
- case TREQ_SIM_GET_MAILBOX:
- case TREQ_SIM_GET_CALLFORWARDING:
- case TREQ_SIM_GET_MESSAGEWAITING:
- case TREQ_SIM_GET_CPHS_INFO:
- case TREQ_SIM_GET_SERVICE_TABLE:
- case TREQ_SIM_GET_MSISDN:
- case TREQ_SIM_GET_SPN:
- case TREQ_SIM_GET_SPDI:
- case TREQ_SIM_GET_OPL:
- case TREQ_SIM_GET_PNN:
- case TREQ_SIM_GET_CPHS_NETNAME:
- case TREQ_SIM_GET_OPLMNWACT:
- case TREQ_SIM_GET_ICON:
- case TREQ_SIM_GET_IMPI:
- case TREQ_SIM_GET_IMPU:
- case TREQ_SIM_GET_GID:
- case TREQ_SIM_GET_DOMAIN:
- case TREQ_SIM_GET_PCSCF:
- case TREQ_SIM_GET_ISIM_SERVICE_TABLE:
- if (!po->ops->read_file)
- return TCORE_RETURN_ENOSYS;
-
- return po->ops->read_file(o, ur);
- break;
-
- case TREQ_SIM_REQ_AUTHENTICATION:
- if (!po->ops->req_authentication)
- return TCORE_RETURN_ENOSYS;
-
- return po->ops->req_authentication(o, ur);
- break;
-
- case TREQ_SIM_SET_POWERSTATE:
- if (!po->ops->set_powerstate)
- return TCORE_RETURN_ENOSYS;
-
- return po->ops->set_powerstate(o, ur);
- break;
-
- default:
- warn("unhandled request command[%d]", command);
- break;
+ tcore_check_null_ret_err("ops->update_file",
+ ops->update_file, TCORE_RETURN_ENOSYS);
+
+ return ops->update_file(o, ur);
+
+ case TREQ_SIM_GET_ECC:
+ case TREQ_SIM_GET_LANGUAGE:
+ case TREQ_SIM_GET_ICCID:
+ case TREQ_SIM_GET_MAILBOX:
+ case TREQ_SIM_GET_CALLFORWARDING:
+ case TREQ_SIM_GET_MESSAGEWAITING:
+ case TREQ_SIM_GET_CPHS_INFO:
+ case TREQ_SIM_GET_SERVICE_TABLE:
+ case TREQ_SIM_GET_MSISDN:
+ case TREQ_SIM_GET_SPN:
+ case TREQ_SIM_GET_SPDI:
+ case TREQ_SIM_GET_OPL:
+ case TREQ_SIM_GET_PNN:
+ case TREQ_SIM_GET_CPHS_NETNAME:
+ case TREQ_SIM_GET_OPLMNWACT:
+ case TREQ_SIM_GET_ICON:
+ case TREQ_SIM_GET_IMPI:
+ case TREQ_SIM_GET_IMPU:
+ case TREQ_SIM_GET_GID:
+ case TREQ_SIM_GET_DOMAIN:
+ case TREQ_SIM_GET_PCSCF:
+ case TREQ_SIM_GET_ISIM_SERVICE_TABLE:
+ tcore_check_null_ret_err("ops->read_file",
+ ops->read_file, TCORE_RETURN_ENOSYS);
+
+ return ops->read_file(o, ur);
+
+ case TREQ_SIM_REQ_AUTHENTICATION:
+ tcore_check_null_ret_err("ops->req_authentication",
+ ops->req_authentication, TCORE_RETURN_ENOSYS);
+
+ return ops->req_authentication(o, ur);
+
+ case TREQ_SIM_SET_POWERSTATE:
+ tcore_check_null_ret_err("ops->set_powerstate",
+ ops->set_powerstate, TCORE_RETURN_ENOSYS);
+
+ return ops->set_powerstate(o, ur);
+
+ default:
+ warn("unhandled request command[%d]", command);
+ break;
}
return TCORE_RETURN_SUCCESS;
}
-static void _clone_hook(CoreObject *src, CoreObject *dest)
-{
- struct private_object_data *src_po = NULL;
- struct private_object_data *dest_po = NULL;
-
- if (!src || !dest)
- return;
-
- dest_po = calloc(1, sizeof(struct private_object_data));
- if (!dest_po) {
- tcore_object_link_object(dest, NULL);
- return;
- }
-
- src_po = tcore_object_ref_object(src);
- dest_po->ops = src_po->ops;
-
- tcore_object_link_object(dest, dest_po);
-}
-
static void _free_hook(CoreObject *o)
{
struct private_object_data *po = NULL;
if (po) {
if (po->svct)
free(po->svct);
+
if (po->ecc_list)
free(po->ecc_list);
+
if (po->msisdn_list)
free(po->msisdn_list);
+
if (po->spn)
free(po->spn);
+
if (po->cphs_netname)
free(po->cphs_netname);
+
if (po->iccid)
free(po->iccid);
+
if (po->csp)
free(po->csp);
+
if (po->ist)
free(po->ist);
+
free(po);
tcore_object_link_object(o, NULL);
}
}
-static void _reverse(char* p_in, int length)
+static void _reverse(char *p_in, int length)
{
int i, j = length - 1;
+
for (i = 0; i < j; i++) {
int t = p_in[i];
p_in[i] = p_in[j];
}
}
-static char* _acitoa(int n, char* str, int b)
+static char *_acitoa(int n, char *str, int b)
{
int i = 0;
* @remark
* @Refer
*/
-static void _digit_to_bcd(char* bcdCode, char* digits, int digitLen)
+static void _digit_to_bcd(char *bcdCode, char *digits, int digitLen)
{
int i, j, digit;
unsigned char higher, lower;
- // 0123456789 -> 1032547698
+ /* 0123456789 -> 1032547698 */
for (i = 0, j = 0; i < digitLen; i = i + 2, j++) {
if (digits[i] == '*')
digit = 0x0A;
else
digit = (int) digits[i + 1];
higher = digit & 0x0F;
- } else {
+ } else
higher = 0xFF;
- }
+
bcdCode[j] = (higher << 4) | lower;
}
}
* @remark
* @Refer
*/
-static unsigned long _bcd_to_digit(char* digit, char* bcdCode, int bcdLen)
+static unsigned long _bcd_to_digit(char *digit, char *bcdCode, int bcdLen)
{
int i, h, l;
char c[2];
unsigned char higher, lower;
unsigned long digitLen = 0;
- // 0123456789 <- 1032547698
- memset((void*) digit, 0, bcdLen * 2);
+ /* 0123456789 <- 1032547698 */
+ memset((void *)digit, 0, bcdLen * 2);
for (i = 0; i < bcdLen; i++) {
- higher = (bcdCode[i] >> 4) & 0x0F; // get high nibble
+ higher = (bcdCode[i] >> 4) & 0x0F; /* get high nibble */
if (higher == 0x0A)
- higher = '*'; // =0x2A
+ higher = '*'; /* =0x2A */
else if (higher == 0x0B)
- higher = '#'; // =0x23
+ higher = '#'; /* =0x23 */
else if (higher == 0x0C)
- higher = 'P'; // =0x70, DTMF Control digit
+ higher = 'P'; /* =0x70, DTMF Control digit */
else if (higher == 0x0D)
higher = '?';
else if (higher == 0x0F)
higher = (char) toupper(*c);
}
- lower = bcdCode[i] & 0x0F; // get low nibble
+ lower = bcdCode[i] & 0x0F; /* get low nibble */
if (lower == 0x0A)
lower = '*';
else if (lower == 0x0B)
lower = '#';
else if (lower == 0x0C)
- lower = 'P'; //DTMF Control digit
+ lower = 'P'; /* DTMF Control digit */
else if (lower == 0x0D)
lower = '?';
else if (lower == 0x0F)
_acitoa(l, c, 16);
lower = (char) toupper(*c);
}
+
digit[i * 2] = lower;
digit[i * 2 + 1] = higher;
}
- digitLen = (unsigned long) strlen(digit);
+ digitLen = (unsigned long)strlen(digit);
return digitLen;
}
* @remark
* @Refer
*/
-static unsigned long _get_string(unsigned char* palpha_id, unsigned char* pRecord, unsigned long alphaIDMaxLen)
+static unsigned long _get_string(unsigned char *palpha_id, unsigned char *pRecord, unsigned long alphaIDMaxLen)
{
unsigned long i, alphaIDLen = 0;
- unsigned char *pAlphaID = (unsigned char*) palpha_id;
+ unsigned char *pAlphaID = (unsigned char *) palpha_id;
- memset((void*) pAlphaID, 0, alphaIDMaxLen);
+ memset((void *)pAlphaID, 0, alphaIDMaxLen);
if (pRecord[0] == 0xFF)
return alphaIDLen;
pAlphaID[i] = pRecord[i];
alphaIDLen++;
}
+
return alphaIDLen;
}
* @remark
* @Refer
*/
-static void _set_string(unsigned char* pRecord, unsigned char* palpha_id, unsigned long alphaIDMaxLen)
+static void _set_string(unsigned char *pRecord, unsigned char *palpha_id, unsigned long alphaIDMaxLen)
{
unsigned long i;
- unsigned char* pAlphaID = (unsigned char*) palpha_id;
+ unsigned char *pAlphaID = (unsigned char *) palpha_id;
- memset((void*) pRecord, 0xFF, alphaIDMaxLen);
+ memset((void *) pRecord, 0xFF, alphaIDMaxLen);
for (i = 0; i < alphaIDMaxLen; i++)
pRecord[i] = pAlphaID[i];
}
-static gboolean _is_empty(unsigned char* p_in, int in_length)
+static gboolean _is_empty(unsigned char *p_in, int in_length)
{
int i;
for (i = 0; i < in_length; i++) {
if (p_in[i] != 0xFF)
return FALSE;
}
+
dbg("current index has empty data");
- return TRUE; // this is empty record.
+ return TRUE; /* this is empty record */
}
/**
* @remark
* @Refer
*/
-static int _get_valid_bcd_byte(unsigned char* pBcdData, int bcdMaxLen)
+static int _get_valid_bcd_byte(unsigned char *pBcdData, int bcdMaxLen)
{
int i, bcd_length = 0;
bcd_length++;
}
+
return bcd_length;
}
* @param[in] in_string_len Contains the input string length
* @remark
*/
-static int _unpack_7bit28bit(unsigned char* pInString, unsigned int inStringLen, unsigned char * pOutString)
+static int _unpack_7bit28bit(unsigned char *pInString, unsigned int inStringLen, unsigned char *pOutString)
{
int i = 0;
unsigned int pos = 0;
unsigned short shift = 0;
int outlen = 0;
- outlen = (short int) ((inStringLen * 8) / 7);
+ outlen = (short int)((inStringLen * 8) / 7);
for (i = 0; pos < inStringLen; i++, pos++) {
pOutString[i] = (pInString[pos] << shift) & 0x7F;
if (pos != 0) {
- /* except the first byte, a character contains some bits from the previous byte.*/
+ /* except the first byte, a character contains some bits from the previous byte. */
pOutString[i] |= pInString[pos - 1] >> (8 - shift);
}
}
}
- /*If a character is '\r'(13), change it to space(32) */
+ /* If a character is '\r'(13), change it to space(32) */
for (i = 0; i < outlen; i++)
if (pOutString[i] == 13) pOutString[i] = 32;
pOutString[outlen] = '\0';
- dbg( "unpack is done with outlen[%d] and array index[%d], out string[%s]", outlen, i, pOutString);
- return (unsigned int) (i);
+ dbg("unpack is done with outlen[%d] and array index[%d], out string[%s]", outlen, i, pOutString);
+ return (unsigned int)(i);
}
-static int _ucs2_to_utf8(int in_length, unsigned char *in_data, int *out_length, unsigned char *out_data)
+static int _ucs2_to_utf8(int in_length, unsigned char *in_data, int *out_length, unsigned char *out_data)
{
int i, j;
- i = j = 0;
+
if (in_length == 0 || in_data == NULL || out_data == NULL) {
- dbg( "Unicode Decode Failed as text length is 0");
+ dbg("Unicode Decode Failed as text length is 0");
return FALSE;
}
if (0 != (in_length % 2)) {
- dbg( " ##### Unicode decoding failed due to invalid text length [%d]", in_length);
+ dbg(" ##### Unicode decoding failed due to invalid text length [%d]",
+ in_length);
return FALSE;
}
- for (i = 0; i < in_length; i++) {
+ for (i = 0, j = 0; i < in_length; i++) {
out_data[i] = in_data[j];
j = j + 2;
}
+
*out_length = (in_length / 2);
out_data[i] = '\0';
return TRUE;
}
static int _decode_cdma_imsi_util(char *imsi, unsigned short *mcc, unsigned char *mnc,
- unsigned long *min1, unsigned short *min2)
+ unsigned long *min1, unsigned short *min2)
{
unsigned short country_code = *mcc;
unsigned char nw_code = *mnc;
unsigned short second_three = 0;
unsigned char thousands = 0;
unsigned short last_three = 0;
- unsigned char min_to_digit[] = {'1','2','3','4','5','6','7','8','9','0'};
- unsigned char bcd_to_num[] = {0xFF,'1','2','3','4','5','6','7','8','9','0',0xFF,0xFF,0xFF,0xFF,0xFF};
+ unsigned char min_to_digit[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
+ unsigned char bcd_to_num[] = {0xFF, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
int p_digit = 0;
int digit = 0;
/* Convert Country code of IMSI */
- if(country_code <= 999) {
+ if (country_code <= 999) {
digit = min_to_digit[country_code/100];
imsi[p_digit++] = digit;
country_code %= 100;
}
/* Convert Network code of IMSI */
- if(nw_code <= 99) {
+ if (nw_code <= 99) {
digit = min_to_digit[nw_code / 10];
imsi[p_digit++] = digit;
}
/* Convert Last Seven digits of IMSI */
- second_three = (imsi_min1 & 0x00FFC000) >> 14;
- thousands = (imsi_min1 & 0x00003C00) >> 10;
- last_three = (imsi_min1 & 0x000003FF) >> 0;
+ second_three = (imsi_min1 & 0x00FFC000) >> 14;
+ thousands = (imsi_min1 & 0x00003C00) >> 10;
+ last_three = (imsi_min1 & 0x000003FF) >> 0;
- thousands = bcd_to_num[thousands];
- if ((thousands != 0xFF) && (second_three <= 999) && (last_three <= 999)) {
+ thousands = bcd_to_num[thousands];
+ if ((thousands != 0xFF) && (second_three <= 999) && (last_three <= 999)) {
digit = min_to_digit[second_three / 100];
imsi[p_digit++] = digit;
digit = min_to_digit[last_three % 10];
imsi[p_digit++] = digit;
- } else {
+ } else {
err("Invalid IMSI_MIN1 code");
return -1;
}
+
return p_digit;
}
* @param[in] in encoded input string (must be 3 bytes)
* @remark
*/
-static void _decode_plmn(const unsigned char* in, unsigned char* out)
+static void _decode_plmn(const unsigned char *in, unsigned char *out)
{
- unsigned char temp[6 + 1] = {0,};
+ unsigned char temp[6 + 1] = {0, };
int i;
unsigned char higher, lower;
for (i = 0; i < 3; i++) {
- higher = (in[i] >> 4) & 0x0F; // get high nibble
+ higher = (in[i] >> 4) & 0x0F; /* get high nibble */
if (higher < 0x0A) {
- // if it is a number
+ /* if it is a number */
temp[i*2] = higher + 0x30;
} else if (higher == 0x0D) {
- // 0x0D (BCD digit) is regarded as wild character by TS 24.008
+ /* 0x0D (BCD digit) is regarded as wild character by TS 24.008 */
temp[i*2] = 'D';
- } else {
+ } else
temp[i*2] = 0x00;
- }
- lower = in[i] & 0x0F; // get low nibble
+ lower = in[i] & 0x0F; /* get low nibble */
if (lower < 0x0A) {
- // if it is a number
+ /* if it is a number */
temp[i*2 + 1] = lower + 0x30;
} else if (lower == 0x0D) {
- // 0x0D (BCD digit) is regarded as wild character by TS 24.008
+ /* 0x0D (BCD digit) is regarded as wild character by TS 24.008 */
temp[i*2 + 1] = 'D';
- } else {
+ } else
temp[i*2 + 1] = 0x00;
- }
}
- // according to PLMN digits order by TS 24.008
- // MCC
+ /* according to PLMN digits order by TS 24.008 */
+ /* MCC */
out[0] = temp[1];
out[1] = temp[0];
out[2] = temp[3];
- // MNC
+ /* MNC */
out[3] = temp[5];
out[4] = temp[4];
out[5] = temp[2];
* for NA operators (MCC 310 ~ 316),
* if 6th digit of MNC is 'F' then should be regarded as '0'.
*/
- if (out[5] == 0x00 &&
- strncmp((const char*)out, "31", 2) == 0 &&
- ('0' <= out[2] && out[2] <= '6')){
+ if (out[5] == 0x00
+ && strncmp((const char *)out, "31", 2) == 0
+ && ('0' <= out[2] && out[2] <= '6')) {
out[5] = '0';
}
}
+static inline unsigned short int _swap_bytes16(unsigned short int x)
+{
+ return ((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8);
+}
+
/**
- * According to ETSI 102.221 ( 3GPP specification refers it ), EF-ICCID is coded by BCD, left justified and padded with 'F'.
+ * According to ETSI 102.221 (3GPP specification refers it), EF-ICCID is coded by BCD, left justified and padded with 'F'.
* This EF is mandatory and byte length is fixed with 10 bytes. So actual maximum length of ICCID is 20 digits.
*/
gboolean tcore_sim_decode_iccid(struct tel_sim_iccid *p_out, unsigned char *p_in, int in_length)
if (in_length == 0 || in_length > 10)
return FALSE;
- memset((void*) p_out->iccid, 0, SIM_ICCID_LEN_MAX+1);
+ memset((void *)p_out->iccid, 0, SIM_ICCID_LEN_MAX+1);
bcd_byte = _get_valid_bcd_byte(p_in, in_length);
- char_length = _bcd_to_digit(p_out->iccid, (char*) p_in, bcd_byte);
- dbg( "bcd byte:[%d] string length:[%d]", bcd_byte, char_length);
+ char_length = _bcd_to_digit(p_out->iccid, (char *) p_in, bcd_byte);
+ dbg("bcd byte:[%d] string length:[%d]", bcd_byte, char_length);
*(p_out->iccid+char_length) = '\0';
{
int i = 0;
- memset((void*) p_out, 0xFF, sizeof(struct tel_sim_language));
+ memset((void *) p_out, 0xFF, sizeof(struct tel_sim_language));
p_out->language_count = 0;
if (in_length == 0)
return FALSE;
+
/*
- * Description of problem: language decoding was not correctly done if we used 7layers's test SIM
+ * Description of problem: language decoding was not correctly done if we
+ * used 7layers's test SIM
+ *
* Patch Description : The tested SIM at 7layers has 3 language codes like [ff][ff][01].
- In this case we could not decode 3rd language code.
- So, the below 2 lines checking the UNSPECIFIED language are commented.
+ * In this case we could not decode 3rd language code.
+ * So, the below 2 lines checking the UNSPECIFIED language are commented.
*/
if (in_length > SIM_LANG_CNT_MAX)
continue;
p_out->language[p_out->language_count] = (enum tel_sim_language_type) p_in[i];
- dbg( "p_out->language[%d]=[%d] ", i, p_out->language[p_out->language_count]);
+ dbg("p_out->language[%d]=[%d] ", i, p_out->language[p_out->language_count]);
p_out->language_count++;
}
- dbg( "in_length %d, lang_cnt %d ", in_length, p_out->language_count);
+
+ dbg("in_length %d, lang_cnt %d ", in_length, p_out->language_count);
return TRUE;
}
/**
* This function is used to encode EFLP (2G)
*/
-char* tcore_sim_encode_lp( int *out_length, struct tel_sim_language *p_in)
+char *tcore_sim_encode_lp(int *out_length, struct tel_sim_language *p_in)
{
- int i = 0;
- char *tmp_out = NULL;
+ int i = 0;
+ char *tmp_out = NULL;
+
+ if (out_length == NULL || p_in == NULL) {
+ dbg("out_length or p_in is null");
+ return NULL;
+ }
- if ( out_length == NULL || p_in == NULL ){
- dbg("out_length or p_in is null");
- return NULL;
- }
+ tmp_out = (char *)malloc(p_in->language_count);
+ if (!tmp_out)
+ return NULL;
- tmp_out = (char*)malloc(p_in->language_count);
- memset((void*) tmp_out, 0xff, p_in->language_count);
+ memset((void *) tmp_out, 0xff, p_in->language_count);
- for (i = 0; i < p_in->language_count; i++)
- tmp_out[i] = p_in->language[i];
+ for (i = 0; i < p_in->language_count; i++)
+ tmp_out[i] = p_in->language[i];
- *out_length = i;
- return tmp_out;
+ *out_length = i;
+ return tmp_out;
}
/**
unsigned short defaultLi;
unsigned char tempLi[3] = { 0, 0, 0 };
- memset((void*) p_out, 0xFF, sizeof(struct tel_sim_language));
+ memset((void *)p_out, 0xFF, sizeof(struct tel_sim_language));
p_out->language_count = 0;
if (in_length == 0)
return FALSE;
/*
- * Description of problem: language decoding was not correctly done if we used 7layers's test SIM
+ * Description of problem: language decoding was not correctly done if we
+ * used 7layers's test SIM
+ *
* Patch Description : TS31.102 If the EFLI has the value 'FFFF' in its highest priority position,
- then the preferred language selection shall be the language preference in the EFPL
+ * then the preferred language selection shall be the language preference in the EFPL
*/
if (/*TODO g_sim.CardType == SIM_TYPE_USIM && */(file_id == SIM_EF_USIM_LI || file_id == SIM_EF_LP)) {
defaultLi = p_in[0];
defaultLi = ((defaultLi << 8) & 0xFF00) + p_in[1];
- if (defaultLi == 0xFFFF) // 1st language is default.
+ if (defaultLi == 0xFFFF) /* 1st language is default. */
return FALSE;
}
for (i = 0; i < in_length; i++) {
tempLi[0] = p_in[i++];
tempLi[1] = p_in[i];
-/*
- Description of problem: language decoding was not correctly done if we used 7layers's test SIM
- Patch Description : The tested SIM at specific test lab has 3 language codes like [ff][ff][ff][ff][64][65].
- In this case we could not decode 3rd language code.
- So, the below 2 lines checking the UNSPECIFIED language are commented.
-*/
- if (tempLi[0] == 0xFF || tempLi[1] == 0xFF) //this is always 2 bytes
+
+ /*
+ * Description of problem: language decoding was not correctly
+ * done if we used 7layers's test SIM
+ *
+ * Patch Description : The tested SIM at specific test lab has
+ * 3 language codes like [ff][ff][ff][ff][64][65].
+ * In this case we could not decode 3rd language code.
+ * So, the below 2 lines checking the UNSPECIFIED language are commented.
+ */
+ if (tempLi[0] == 0xFF || tempLi[1] == 0xFF) /* this is always 2 bytes */
continue;
p_out->language[p_out->language_count] = SIM_LANG_UNSPECIFIED;
if (tempLi[0] == 'e') {
switch (tempLi[1]) {
- case 'n':
- p_out->language[p_out->language_count] = SIM_LANG_ENGLISH;
- break;
- case 's':
- p_out->language[p_out->language_count] = SIM_LANG_SPANISH;
- break;
- case 'l':
- p_out->language[p_out->language_count] = SIM_LANG_GREEK;
- break;
- default:
- warn("invalid language");
- break;
+ case 'n':
+ p_out->language[p_out->language_count] = SIM_LANG_ENGLISH;
+ break;
+
+ case 's':
+ p_out->language[p_out->language_count] = SIM_LANG_SPANISH;
+ break;
+
+ case 'l':
+ p_out->language[p_out->language_count] = SIM_LANG_GREEK;
+ break;
+
+ default:
+ warn("invalid language");
+ break;
}
} else if (tempLi[0] == 'd') {
switch (tempLi[1]) {
- case 'e':
- p_out->language[p_out->language_count] = SIM_LANG_GERMAN;
- break;
+ case 'e':
+ p_out->language[p_out->language_count] = SIM_LANG_GERMAN;
+ break;
- case 'a':
- p_out->language[p_out->language_count] = SIM_LANG_DANISH;
- break;
- default:
- warn("invalid language");
- break;
+ case 'a':
+ p_out->language[p_out->language_count] = SIM_LANG_DANISH;
+ break;
+
+ default:
+ warn("invalid language");
+ break;
}
- } else if (tempLi[0] == 'i' && tempLi[1] == 't') {
+ } else if (tempLi[0] == 'i' && tempLi[1] == 't')
p_out->language[p_out->language_count] = SIM_LANG_ITALIAN;
- } else if (tempLi[0] == 'f' && tempLi[1] == 'r') {
+ else if (tempLi[0] == 'f' && tempLi[1] == 'r')
p_out->language[p_out->language_count] = SIM_LANG_FRENCH;
- } else if (tempLi[0] == 'n' && tempLi[1] == 'l') {
+ else if (tempLi[0] == 'n' && tempLi[1] == 'l')
p_out->language[p_out->language_count] = SIM_LANG_DUTCH;
- } else if (tempLi[0] == 's' && tempLi[1] == 'v') {
+ else if (tempLi[0] == 's' && tempLi[1] == 'v')
p_out->language[p_out->language_count] = SIM_LANG_SWEDISH;
- } else if (tempLi[0] == 'f' && tempLi[1] == 'i') {
+ else if (tempLi[0] == 'f' && tempLi[1] == 'i')
p_out->language[p_out->language_count] = SIM_LANG_FINNISH;
- } else if (tempLi[0] == 'n' && tempLi[1] == 'o') {
+ else if (tempLi[0] == 'n' && tempLi[1] == 'o')
p_out->language[p_out->language_count] = SIM_LANG_NORWEGIAN;
- } else if (tempLi[0] == 't' && tempLi[1] == 'r') {
+ else if (tempLi[0] == 't' && tempLi[1] == 'r')
p_out->language[p_out->language_count] = SIM_LANG_TURKISH;
- } else if (tempLi[0] == 'h' && tempLi[1] == 'u') {
+ else if (tempLi[0] == 'h' && tempLi[1] == 'u')
p_out->language[p_out->language_count] = SIM_LANG_HUNGARIAN;
- } else if (tempLi[0] == 'p') {
+ else if (tempLi[0] == 'p') {
switch (tempLi[1]) {
- case 'l':
- p_out->language[p_out->language_count] = SIM_LANG_POLISH;
- break;
- case 't':
- p_out->language[p_out->language_count] = SIM_LANG_PORTUGUESE;
- break;
- default:
- warn("invalid language");
- break;
+ case 'l':
+ p_out->language[p_out->language_count] = SIM_LANG_POLISH;
+ break;
+
+ case 't':
+ p_out->language[p_out->language_count] = SIM_LANG_PORTUGUESE;
+ break;
+
+ default:
+ warn("invalid language");
+ break;
}
- } else if (tempLi[0] == 'k' && tempLi[1] == 'o') {
+ } else if (tempLi[0] == 'k' && tempLi[1] == 'o')
p_out->language[p_out->language_count] = SIM_LANG_KOREAN;
- } else if (tempLi[0] == 'z' && tempLi[1] == 'h') {
+ else if (tempLi[0] == 'z' && tempLi[1] == 'h')
p_out->language[p_out->language_count] = SIM_LANG_CHINESE;
- } else if (tempLi[0] == 'r' && tempLi[1] == 'u') {
+ else if (tempLi[0] == 'r' && tempLi[1] == 'u')
p_out->language[p_out->language_count] = SIM_LANG_RUSSIAN;
- } else if (tempLi[0] == 'j' && tempLi[1] == 'a') {
+ else if (tempLi[0] == 'j' && tempLi[1] == 'a')
p_out->language[p_out->language_count] = SIM_LANG_JAPANESE;
- }
- dbg( "count %d & Codes %d ", p_out->language_count, p_out->language[p_out->language_count]);
+ dbg("count %d & Codes %d ", p_out->language_count, p_out->language[p_out->language_count]);
p_out->language_count++;
}
if (p_out->language_count == 0) {
- dbg( "p_out->language_count = %d ", p_out->language_count);
+ dbg("p_out->language_count = %d ", p_out->language_count);
return FALSE;
- }
- else {
+ } else {
return TRUE;
}
}
/**
* This function is used to encode EFLI (3G)
*/
-char* tcore_sim_encode_li( int *out_length, struct tel_sim_language *p_in)
+char *tcore_sim_encode_li(int *out_length, struct tel_sim_language *p_in)
{
int i = 0;
- char *tmp_out = NULL;
- const char *LanguageCode[] = { "de", "en", "it", "fr", "es", "nl", "sv", "da", "pt", "fi", "no", "el",
- "tr", "hu", "pl", "ko", "zh", "ru", "ja" };
+ char *tmp_out = NULL;
+ const char *LanguageCode[] = {
+ "de", "en", "it", "fr",
+ "es", "nl", "sv", "da",
+ "pt", "fi", "no", "el",
+ "tr", "hu", "pl", "ko",
+ "zh", "ru", "ja"};
+
+ if (out_length == NULL || p_in == NULL) {
+ dbg("out_length or p_in is null");
+ return NULL;
+ }
- if ( out_length == NULL || p_in == NULL ){
- dbg("out_length or p_in is null");
- return NULL;
- }
+ tmp_out = (char *)malloc((p_in->language_count) * 2);
+ if (!tmp_out)
+ return NULL;
- tmp_out = (char*)malloc((p_in->language_count) *2);
- memset((void*) tmp_out, 0xff, (p_in->language_count)*2);
+ memset((void *)tmp_out, 0xff, (p_in->language_count) * 2);
for (i = 0; i < p_in->language_count; i++) {
if (p_in->language[i] < SIM_LANG_UNSPECIFIED) {
strncpy((char *) &tmp_out[i * 2], LanguageCode[p_in->language[i]], 2);
- dbg( "sim_encode_li: p_out[%s]:[%x][%x]", tmp_out, tmp_out[i*2], tmp_out[(i*2)+1]);
+ dbg("sim_encode_li: p_out[%s]:[%x][%x]", tmp_out, tmp_out[i*2], tmp_out[(i*2)+1]);
}
}
+
*out_length = i*2;
return tmp_out;
}
return FALSE;
/*
- According to 3GPP specification, the length of raw IMSI data is 9 bytes.
- first byte is length of IMSI
- second byte byte has parity nibble, so second byte has one digit of IMSI. other byte has two digit of IMSI
- */
- if ((in_length == 0) || (in_length == 0xff) || (4 > in_length) || (9 <in_length)) {
- dbg("No valid IMSI present to convert - length:[%x]", in_length);
+ * According to 3GPP specification, the length of raw IMSI data is 9 bytes.
+ * first byte is length of IMSI
+ * second byte byte has parity nibble, so second byte has one digit of IMSI.
+ * other byte has two digit of IMSI
+ */
+ if ((in_length == 0) || (in_length == 0xff) || (4 > in_length) || (9 < in_length)) {
+ dbg("No valid IMSI present to convert - length:[%x]", in_length);
return FALSE;
}
for (i = 1; i < in_length; i++) {
if (i == 1) { /* first byte, ignore lower nibble */
imsi_raw[j++] = ((p_in[i] & 0xF0) >> 4) + '0';
- } else if (i == p_in[0]+1) { /* last byte */
- imsi_raw[j++] = (p_in[i] & 0x0F)+ '0';
- if (p_in[0]%2) /* count the last one if odd digits */
+ } else if (i == p_in[0] + 1) { /* last byte */
+ imsi_raw[j++] = (p_in[i] & 0x0F) + '0';
+ if (p_in[0] % 2) /* count the last one if odd digits */
imsi_raw[j++] = ((p_in[i] & 0xF0) >> 4) + '0';
} else {
imsi_raw[j++] = (p_in[i] & 0x0F) + '0';
plmn = g_strndup(imsi_raw, 6 + 1);
if (plmn) {
plmn[6] = '\0';
- if(tcore_sim_check_plmn_having_3digits_mnc(plmn)) {
+ if (tcore_sim_check_plmn_having_3digits_mnc(plmn))
plmn_digits = 6;
- }
g_free(plmn);
}
gboolean tcore_sim_decode_cdma_imsi(struct tel_sim_imsi *p_out, unsigned char *p_in, int in_length)
{
- char imsi_raw[16]={0,};
+ char imsi_raw[16] = {0, };
int digits = 0;
unsigned short mcc;
unsigned char mnc;
return FALSE;
/*
- According to 3GPP2 specification, the length of raw IMSI data is 10 bytes.
- byte Description
- 1 Class assignment of IMSI_M
- 2-3 IMSI_M_S2 : MSIN2
- 4-6 IMSI_M_S1 : MSIN1
- 7 IMSI_M_11_12 : MNC
- 8 IMSI_M_ADDR_NUM : No of IMSI_M address digits.
- 9-10 MCC_M : MCC
-
- */
+ * According to 3GPP2 specification, the length of raw IMSI data is 10 bytes.
+ * byte Description
+ *-----------------------------------------------------------------
+ * 1 Class assignment of IMSI_M
+ * 2-3 IMSI_M_S2 : MSIN2
+ * 4-6 IMSI_M_S1 : MSIN1
+ * 7 IMSI_M_11_12 : MNC
+ * 8 IMSI_M_ADDR_NUM : No of IMSI_M address digits.
+ * 9-10 MCC_M : MCC
+ */
if ((in_length == 0) || (in_length == 0xff) || (4 > in_length) || (10 < in_length)) {
- dbg("No valid IMSI present to convert - length:[%x]", in_length);
+ dbg("No valid IMSI present to convert - length:[%x]", in_length);
return FALSE;
}
plmn = g_strndup(imsi_raw, 6 + 1);
if (plmn) {
plmn[6] = '\0';
- if(tcore_sim_check_plmn_having_3digits_mnc(plmn)) {
+ if (tcore_sim_check_plmn_having_3digits_mnc(plmn))
plmn_digits = 6;
- }
+
g_free(plmn);
}
gboolean tcore_sim_decode_sst(struct tel_sim_sst *p_sst, unsigned char *p_in, int in_length)
{
unsigned char sstByte, rast, mask = 0;
- char simServiceID = 1; // set "CHV1 disable function"
+ char simServiceID = 1; /* set "CHV1 disable function" */
int i, svc_count;
char *p_index;
- memset((void*)p_sst, 0, sizeof(struct tel_sim_sst));
+ memset((void *)p_sst, 0, sizeof(struct tel_sim_sst));
if (in_length == 0) {
err("invalid length. return FALSE.");
return FALSE;
}
- // get count of SIM service id. one byte has four service status.
+ /* get count of SIM service id. one byte has four service status. */
svc_count = in_length * 4;
- /*3GPP 51.011 SST shows 56 kinds of service types. current tel_sim_sst has also 56 elements*/
+ /*
+ * 3GPP 51.011 SST shows 56 kinds of service types.
+ * current tel_sim_sst has also 56 elements
+ */
if (svc_count > SIM_SST_SERVICE_CNT_MAX) {
warn("out of range[%d]. cut off the tail.", svc_count);
svc_count = SIM_SST_SERVICE_CNT_MAX;
}
- p_index = (char*)p_sst;
+ p_index = (char *)p_sst;
for (i = 0; i < svc_count; i++) {
sstByte = p_in[(simServiceID - 1) / 4];
rast = simServiceID - 4 * (simServiceID / 4);
switch (rast) {
- case 1:
- mask = 0x02;
- break;
- case 2:
- mask = 0x08;
- break;
- case 3:
- mask = 0x20;
- break;
- case 0:
- mask = 0x80;
- break;
- default:
- warn("invalid rast");
- break;
+ case 1:
+ mask = 0x02;
+ break;
+
+ case 2:
+ mask = 0x08;
+ break;
+
+ case 3:
+ mask = 0x20;
+ break;
+
+ case 0:
+ mask = 0x80;
+ break;
+
+ default:
+ warn("invalid rast");
+ break;
}
if (sstByte & mask)
*p_index = 0;
p_index += sizeof(char);
- simServiceID++; // next service id
+ simServiceID++; /* next service id */
}
+
return TRUE;
}
gboolean tcore_sim_decode_cdma_st(struct tel_sim_cst *p_cdma_st, unsigned char *p_in, int in_length)
{
unsigned char sstByte, rast, mask = 0;
- char simServiceID = 1; // set "CHV1 disable function"
+ char simServiceID = 1; /* set "CHV1 disable function" */
int i, svc_count;
char *p_index;
- memset((void*)p_cdma_st, 0, sizeof(struct tel_sim_cst));
+ memset((void *)p_cdma_st, 0, sizeof(struct tel_sim_cst));
if (in_length == 0 || in_length > SIM_CDMA_ST_SERVICE_LEN_MAX)
return FALSE;
- // get count of SIM service id. one byte has four service status.
+ /* get count of SIM service id. one byte has four service status. */
svc_count = in_length * 4;
- /*CDMA_ST service is described to 47(1 byte includes 4 service status) in C.S0023 3.4.18.
- Current tel_sim_cst.serivce.cdma_service has 47 services. so in_length should be under 12 byte. */
+ /*
+ * CDMA_ST service is described to 47(1 byte includes 4 service status) in C.S0023 3.4.18.
+ * Current tel_sim_cst.serivce.cdma_service has 47 services. so in_length should be under 12 byte.
+ */
if (svc_count > SIM_CDMA_ST_SERVICE_CNT_MAX)
svc_count = SIM_CDMA_ST_SERVICE_CNT_MAX;
p_cdma_st->cdma_svc_table = SIM_CDMA_SVC_TABLE;
- p_index = (char*)p_cdma_st->service.cdma_service;
+ p_index = (char *)p_cdma_st->service.cdma_service;
for (i = 0; i < svc_count; i++) {
sstByte = p_in[(simServiceID - 1) / 4];
rast = simServiceID - 4 * (simServiceID / 4);
switch (rast) {
- case 1:
- mask = 0x02;
- break;
- case 2:
- mask = 0x08;
- break;
- case 3:
- mask = 0x20;
- break;
- case 0:
- mask = 0x80;
- break;
- default:
- warn("invalid rast");
- break;
+ case 1:
+ mask = 0x02;
+ break;
+
+ case 2:
+ mask = 0x08;
+ break;
+
+ case 3:
+ mask = 0x20;
+ break;
+
+ case 0:
+ mask = 0x80;
+ break;
+
+ default:
+ warn("invalid rast");
+ break;
}
if (sstByte & mask)
*p_index = 0;
p_index += sizeof(char);
- simServiceID++; // next service id
+ simServiceID++; /* next service id */
}
+
return TRUE;
}
int i, j;
char mask;
char *p_index;
- memset((void*) p_csim_st, 0, sizeof(struct tel_sim_cst));
+ memset((void *) p_csim_st, 0, sizeof(struct tel_sim_cst));
p_csim_st->cdma_svc_table = SIM_CSIM_SVC_TABLE;
- p_index = (char*)p_csim_st->service.csim_service;
+ p_index = (char *)p_csim_st->service.csim_service;
- /*CSIM_ST service is described to 41(1 byte includes 8 service status) in C.S0065 5.2.18.
- Current tel_sim_cst.serivce.csim_service has 41 services. so in_length should be under 6 byte. */
+ /*
+ * CSIM_ST service is described to 41(1 byte includes 8 service status) in C.S0065 5.2.18.
+ * Current tel_sim_cst.serivce.csim_service has 41 services. so in_length should be under 6 byte.
+ */
if (in_length > SIM_CSIM_ST_SERVICE_LEN_MAX)
in_length = SIM_CSIM_ST_SERVICE_LEN_MAX;
for (i = 0; i < in_length; i++) {
- mask = 0x01; // reset mask to check first bit
+ mask = 0x01; /* reset mask to check first bit */
for (j = 0; j < 8; j++) {
- if (p_in[i] & mask) {
+ if (p_in[i] & mask)
*p_index = 1;
- }
+
p_index += sizeof(char);
mask = mask << 1;
}
}
+
return TRUE;
}
p_spn->spn[i - 1] = p_in[i];
}
+
p_spn->spn[i-1] = '\0';
- dbg( "spn:[%s] display condition : [%d]", p_spn->spn, p_spn->display_condition);
+ dbg("spn:[%s] display condition : [%d]", p_spn->spn, p_spn->display_condition);
return TRUE;
}
gboolean tcore_sim_decode_cdma_spn(struct tel_sim_spn *p_spn, unsigned char *p_in, int in_length)
{
- int i=0;
+ int i = 0;
if (in_length == 0)
return FALSE;
p_spn->display_condition = p_in[0] & 0x1;
- /*Note : Character Encoding (1 byte) and Language Indicator (1 byte)
- are ignored, will be added later if required by Application */
-
+ /*
+ * Note : Character Encoding (1 byte) and Language Indicator (1 byte)
+ * are ignored, will be added later if required by Application
+ */
for (i = 3; i < SIM_CDMA_SPN_LEN_MAX + 1; i++) {
if (p_in[i] == 0xFF)
break; /* loop break*/
p_spn->spn[i - 3] = p_in[i];
}
- p_spn->spn[i-3] = '\0';
+ p_spn->spn[i - 3] = '\0';
- dbg( "spn:[%s] display condition : [%d]", p_spn->spn, p_spn->display_condition);
+ dbg("spn:[%s] display condition : [%d]", p_spn->spn, p_spn->display_condition);
return TRUE;
}
if (in_length == 0)
return FALSE;
- if(p_in[0] == 0xff){
+ if (p_in[0] == 0xff) {
dbg("file is exist but there is no valid records");
+
p_spdi->plmn_count = 0;
memset(p_spdi->list, 0x00, sizeof(unsigned char)*7*SIM_SPDI_PLMN_MAX);
+
return TRUE;
}
- //Display info tag('A3')
+ /* Display info tag('A3') */
if (p_in[0] == 0xA3) {
total_data_len = p_in[1];
dbg("total_data_len=[%d]", total_data_len);
- //PLMN list tag('80')
+
+ /* PLMN list tag('80') */
if (p_in[2] == 0x80) {
p_spdi->plmn_count = p_in[3] / 3;
Src_plmn_start_len = 4;
- dbg( "p_spdi->num_of_plmn_entries[%d]", p_spdi->plmn_count);
+ dbg("p_spdi->num_of_plmn_entries[%d]", p_spdi->plmn_count);
for (i = 0; i < p_spdi->plmn_count; i++) {
_decode_plmn(&p_in[Src_plmn_start_len], p_spdi->list[i].plmn);
- dbg( "SPDI PLMN[%d][%s]", i, p_spdi->list[i].plmn);
+ dbg("SPDI PLMN[%d][%s]", i, p_spdi->list[i].plmn);
Src_plmn_start_len = Src_plmn_start_len + 3;
}
+
return TRUE;
}
+
dbg("Current EF-SPDI has invalid data");
return FALSE;
}
+
dbg("Current EF-SPDI has invalid data");
return FALSE;
}
gboolean tcore_sim_decode_msisdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length)
{
- int X = 0; // alpha id max length
+ int X = 0; /* alpha id max length */
int alpha_id_length = 0;
int value_length = 0;
- int bcd_byte = 0; // dialing number max length
+ int bcd_byte = 0; /* dialing number max length */
- memset((void*) p_msisdn, 0, sizeof(struct tel_sim_msisdn));
+ memset((void *) p_msisdn, 0, sizeof(struct tel_sim_msisdn));
if (in_length < 14) {
err("invalid in_length[%d]", in_length);
return FALSE;
}
- X = in_length - 14; // get alpha id max length
+ X = in_length - 14; /* get alpha id max length */
if (X != 0) {
alpha_id_length = X;
dbg("alpha_id_length[%d]", alpha_id_length);
- if(alpha_id_length > SIM_XDN_ALPHA_ID_LEN_MAX)
+ if (alpha_id_length > SIM_XDN_ALPHA_ID_LEN_MAX)
alpha_id_length = SIM_XDN_ALPHA_ID_LEN_MAX;
value_length = _get_string((unsigned char *)p_msisdn->name, p_in, alpha_id_length);
p_msisdn->name[value_length] = '\0';
}
- // get dialing number length
- // p_in[X] is BCD length of dialing number length plus TON/NPI 1 bytes.
- // Convert to digit length and subtract TON/NPI length.
+ /* get dialing number length */
+ /* p_in[X] is BCD length of dialing number length plus TON/NPI 1 bytes. */
+ /* Convert to digit length and subtract TON/NPI length. */
if (p_in[X] != 0xFF) {
- dbg( "Dialing number Length %d, BCD length 0x%x ", (p_in[X] - 1) * 2, p_in[X]);
+ dbg("Dialing number Length %d, BCD length 0x%x ", (p_in[X] - 1) * 2, p_in[X]);
- // get TON and NPI
+ /* get TON and NPI */
p_msisdn->ton = (p_in[X + 1] >> 4) & 0x07;
- // get actual dialing number length
+ /* get actual dialing number length */
bcd_byte = _get_valid_bcd_byte(&p_in[X + 2], SIM_XDN_NUMBER_LEN_MAX / 2);
- dbg( "bcd_byte[%x]", bcd_byte);
+ dbg("bcd_byte[%x]", bcd_byte);
- // get dialing number/SSC string
- value_length = _bcd_to_digit((char*) p_msisdn->num, (char*) &p_in[X + 2], bcd_byte); // actual dialing number length in BCD.
+ /* get dialing number/SSC string */
+ value_length = _bcd_to_digit((char *)p_msisdn->num, (char *) &p_in[X + 2], bcd_byte); /* actual dialing number length in BCD. */
p_msisdn->num[value_length] = '\0';
p_msisdn->next_record = p_in[X+13];
- dbg( "p_msisdn->num[%s]", p_msisdn->num);
+ dbg("p_msisdn->num[%s]", p_msisdn->num);
}
+
return TRUE;
}
gboolean tcore_sim_decode_mdn(struct tel_sim_msisdn *p_msisdn, unsigned char *p_in, int in_length)
{
int value_length = 0;
- int bcd_byte = 0; // dialing number max length
+ int bcd_byte = 0; /* dialing number max length */
- memset((void*) p_msisdn, 0, sizeof(struct tel_sim_msisdn));
+ memset((void *)p_msisdn, 0, sizeof(struct tel_sim_msisdn));
if (in_length == 0)
return FALSE;
- if (_is_empty(p_in, in_length) == TRUE) {
+ if (_is_empty(p_in, in_length) == TRUE)
return FALSE;
- }
- /*Note : Alpha identifier is not present in EF-MDN file.*/
+ /* Note : Alpha identifier is not present in EF-MDN file. */
if (p_in[0] != 0xFF) {
- dbg( "Dialing number Length %d, BCD length 0x%x ", (p_in[0] - 1) * 2, p_in[0]);
+ dbg("Dialing number Length %d, BCD length 0x%x ", (p_in[0] - 1) * 2, p_in[0]);
- // get TON and NPI
+ /* get TON and NPI */
p_msisdn->ton = (p_in[9] >> 4) & 0x07;
- // get actual dialing number length
+ /* get actual dialing number length */
bcd_byte = _get_valid_bcd_byte(&p_in[1], 8);
- dbg( "bcd_byte[%x]", bcd_byte);
+ dbg("bcd_byte[%x]", bcd_byte);
- // get dialing number/SSC string
- value_length = _bcd_to_digit((char*) p_msisdn->num, (char*) &p_in[1], bcd_byte); // actual dialing number length in BCD.
+ /* get dialing number/SSC string */
+ value_length = _bcd_to_digit((char *) p_msisdn->num, (char *) &p_in[1], bcd_byte); /* actual dialing number length in BCD. */
p_msisdn->num[value_length] = '\0';
- /*p_msisdn->next_record = p_in[];*/ //Need to check with next_record field
+
+ /*p_msisdn->next_record = p_in[];*/ /* Need to check with next_record field */
dbg("p_msisdn->num[%s]", p_msisdn->num);
}
+
return TRUE;
}
gboolean tcore_sim_decode_xdn(struct tel_sim_dialing_number *p_xdn, unsigned char *p_in, int in_length)
{
- int X; // alpha id max length
- int bcd_byte; // dialing number max length
+ int X; /* alpha id max length */
+ int bcd_byte; /* dialing number max length */
- memset((void*) p_xdn, 0, sizeof(struct tel_sim_dialing_number));
+ memset((void *)p_xdn, 0, sizeof(struct tel_sim_dialing_number));
if (in_length == 0)
return FALSE;
- if (_is_empty(p_in, in_length) == TRUE) {
- return FALSE; // this is empty record
- }
+ if (_is_empty(p_in, in_length) == TRUE)
+ return FALSE; /* this is empty record */
- X = in_length - 14; // get alpha id max length
+ X = in_length - 14; /* get alpha id max length */
if (X != 0) {
_get_string((unsigned char *)p_xdn->alpha_id, p_in, X);
p_xdn->alpha_id_max_len = X;
}
- // get dialing number length
- // p_in[X] is BCD length of dialing number length plus TON/NPI 1 bytes.
- // Convert to digit length and subtract TON/NPI length.
+ /* get dialing number length */
+ /* p_in[X] is BCD length of dialing number length plus TON/NPI 1 bytes. */
+ /* Convert to digit length and subtract TON/NPI length. */
if (p_in[X] != 0xFF) {
- dbg( "Dialing number Length %d, BCD length 0x%x ", (p_in[X] - 1) * 2, p_in[X]);
+ dbg("Dialing number Length %d, BCD length 0x%x ",
+ (p_in[X] - 1) * 2, p_in[X]);
-/* if (p_xdn->num_max_len > SIM_XDN_NUMBER_LEN_MAX) {
+ /*
+ if (p_xdn->num_max_len > SIM_XDN_NUMBER_LEN_MAX) {
this may be broken record.
p_xdn->b_used = FALSE;
- memset((void*)p_xdn, 0, sizeof(tapi_sim_dialing_number_info_t));
+ memset((void *)p_xdn, 0, sizeof(tapi_sim_dialing_number_info_t));
return FALSE;
ADN record cannot have more than 20 digits. Anyway we can restrict this as per 31.102
p_xdn->num_max_len = 0;
else
p_xdn->num_max_len = SIM_XDN_NUMBER_LEN_MAX;
- }*/
+ }
+ */
- // get TON and NPI
+ /* get TON and NPI */
p_xdn->ton = (p_in[X + 1] >> 4) & 0x07;
p_xdn->npi = p_in[X + 1] & 0x0F;
- // get actual dialing number length
+ /* get actual dialing number length */
bcd_byte = _get_valid_bcd_byte(&p_in[X + 2], SIM_XDN_NUMBER_LEN_MAX / 2);
- dbg( "bcd_byte[%x]", bcd_byte);
+ dbg("bcd_byte[%x]", bcd_byte);
+
+ /* get dialing number/SSC string */
+ _bcd_to_digit((char *) p_xdn->num, (char *) &p_in[X + 2], bcd_byte); /* actual dialing number length in BCD. */
+ dbg("p_xdn->DiallingNum[%s]", p_xdn->num);
- // get dialing number/SSC string
- _bcd_to_digit((char*) p_xdn->num, (char*) &p_in[X + 2], bcd_byte); // actual dialing number length in BCD.
- dbg( "p_xdn->DiallingNum[%s]", p_xdn->num);
- // get Capability/Configuration id
+ /* get Capability/Configuration id */
p_xdn->cc_id = p_in[X + 12];
- // get Extension1 id
+
+ /* get Extension1 id */
p_xdn->ext1_id = p_in[X + 13];
}
return TRUE;
}
-char* tcore_sim_encode_xdn(int in_length, struct tel_sim_dialing_number *p_xdn)
+char *tcore_sim_encode_xdn(int in_length, struct tel_sim_dialing_number *p_xdn)
{
- int alpha_id_space =0, digit_len =0, str_len = 0;
+ int alpha_id_space = 0, digit_len = 0, str_len = 0;
char bcdCode[SIM_XDN_NUMBER_LEN_MAX / 2];
- char * p_out = NULL;
+ char *p_out = NULL;
if (in_length < 14) {
- dbg("in_length[%d] should be greater than or equal to 14.", in_length)
+ dbg("in_length[%d] should be greater than or equal to 14.", in_length);
return NULL;
}
p_out = calloc(1, in_length + 1);
- memset((void*) p_out, 0xFF, in_length);
+ if (!p_out)
+ return NULL;
+
+ memset((void *)p_out, 0xFF, in_length);
- // get alpha id max length
+ /* get alpha id max length */
alpha_id_space = in_length - 14;
- // alpha id is too big
+ /* alpha id is too big */
str_len = strlen(p_xdn->alpha_id);
if (alpha_id_space < str_len) {
dbg("SIM space for alpha_id is [%d] but input alpha_id length is [%d]. so we will use [%d] byte",
}
digit_len = strlen(p_xdn->num);
- // this is digit length
- if ( digit_len > SIM_XDN_NUMBER_LEN_MAX) {
+ /* this is digit length */
+ if (digit_len > SIM_XDN_NUMBER_LEN_MAX) {
dbg("SIM space for number is [%d] but input number length is [%d]. so we will use [%d] byte",
- SIM_XDN_NUMBER_LEN_MAX, digit_len, SIM_XDN_NUMBER_LEN_MAX);
+ SIM_XDN_NUMBER_LEN_MAX, digit_len, SIM_XDN_NUMBER_LEN_MAX);
digit_len = SIM_XDN_NUMBER_LEN_MAX;
}
_set_string((unsigned char *)p_out, (unsigned char *)p_xdn->alpha_id, str_len);
- // set length of BCD number/SSC contents
- // p_xdn->diallingnumLen is maximum digit length. = 20 bytes.
- // convert to BCD length and add 1 byte.
- p_out[alpha_id_space] = ( (digit_len + 1) / 2 ) + 1;
+ /* set length of BCD number/SSC contents */
+ /* p_xdn->diallingnumLen is maximum digit length. = 20 bytes. */
+ /* convert to BCD length and add 1 byte. */
+ p_out[alpha_id_space] = ((digit_len + 1) / 2) + 1;
- // set TON and NPI
+ /* set TON and NPI */
p_out[alpha_id_space + 1] = 0x80;
p_out[alpha_id_space + 1] |= (p_xdn->ton & 0x07) << 4;
p_out[alpha_id_space + 1] |= p_xdn->npi & 0x0F;
- // set dialing number/SSC string
- memset((void*) bcdCode, 0xFF, SIM_XDN_NUMBER_LEN_MAX / 2);
+ /* set dialing number/SSC string */
+ memset((void *) bcdCode, 0xFF, SIM_XDN_NUMBER_LEN_MAX / 2);
- _digit_to_bcd((char*) bcdCode, (char*) p_xdn->num, digit_len);
+ _digit_to_bcd((char *)bcdCode, (char *)p_xdn->num, digit_len);
- memcpy((void*) &p_out[alpha_id_space + 2], bcdCode, SIM_XDN_NUMBER_LEN_MAX / 2);
+ memcpy((void *)&p_out[alpha_id_space + 2], bcdCode, SIM_XDN_NUMBER_LEN_MAX / 2);
- // set Capability/Configuration Identifier
+ /* set Capability/Configuration Identifier */
if (p_xdn->cc_id == 0x00)
p_out[alpha_id_space + 12] = 0xff;
else
- p_out[alpha_id_space + 12] = (unsigned char) p_xdn->cc_id;
- // set extension1 record Identifier
+ p_out[alpha_id_space + 12] = (unsigned char)p_xdn->cc_id;
+
+ /* set extension1 record Identifier */
if (p_xdn->ext1_id == 0x00)
p_out[alpha_id_space + 13] = 0xff;
else
- p_out[alpha_id_space + 13] = (unsigned char) p_xdn->ext1_id;
+ p_out[alpha_id_space + 13] = (unsigned char)p_xdn->ext1_id;
return p_out;
}
gboolean tcore_sim_decode_ecc(struct tel_sim_ecc_list *p_ecc, unsigned char *p_in, int in_length)
{
- int bcd_byte; // dialing number max length
+ int bcd_byte; /* dialing number max length */
int i;
int valid_ecc_length;
- memset((void*)p_ecc, 0x00, sizeof(struct tel_sim_ecc_list));
- if(in_length%3 != 0) {
+ memset((void *)p_ecc, 0x00, sizeof(struct tel_sim_ecc_list));
+
+ if (in_length % 3 != 0) {
dbg("error - invalid data length");
return FALSE;
}
- for(i=0; i < in_length/3; i++){
- //get the BCD length of the ECC
- bcd_byte = _get_valid_bcd_byte((unsigned char*) p_in+(i*3), 3);
- if(bcd_byte != 0) {
+ for (i = 0; i < in_length / 3; i++) {
+ /* get the BCD length of the ECC */
+ bcd_byte = _get_valid_bcd_byte((unsigned char *) p_in+(i*3), 3);
+ if (bcd_byte != 0) {
valid_ecc_length = _bcd_to_digit(p_ecc->ecc[p_ecc->ecc_count].ecc_num, (char *)p_in+(i*3), bcd_byte);
p_ecc->ecc[p_ecc->ecc_count].ecc_num[valid_ecc_length] = '\0';
p_ecc->ecc_count++;
}
}
+
return TRUE;
}
gboolean tcore_sim_decode_ext(struct tel_sim_ext *p_ext, unsigned char *p_in, int in_length)
{
- int bcd_byte; // dialing number max length
+ int bcd_byte; /* dialing number max length */
gboolean res = FALSE;
- memset((void*)p_ext, 0x00, sizeof(struct tel_sim_ext));
- if(*p_in & 0x01) {
+ memset((void *)p_ext, 0x00, sizeof(struct tel_sim_ext));
+
+ if (*p_in & 0x01) {
dbg("Record type - Called Party Subaddress - NOT SUPPORTED");
- } else if(*p_in & 0x02) {
+ } else if (*p_in & 0x02) {
dbg("Record type - Additional data");
bcd_byte = _get_valid_bcd_byte(&p_in[2], SIM_XDN_NUMBER_LEN_MAX / 2);
- p_ext->ext_len = _bcd_to_digit((char*) p_ext->ext, (char*) &p_in[2], bcd_byte); // actual dialing number length in BCD.
+ p_ext->ext_len = _bcd_to_digit((char *) p_ext->ext, (char *) &p_in[2], bcd_byte); /* actual dialing number length in BCD. */
p_ext->next_record = p_in[12];
- dbg( "Dialing number Length[%d]", p_ext->ext_len);
+ dbg("Dialing number Length[%d]", p_ext->ext_len);
res = TRUE;
} else {
dbg("Record type - Invalid");
}
+
return res;
}
int i, j;
char mask;
char *p_index;
- memset((void*) p_ust, 0, sizeof(struct tel_sim_ust));
- p_index = (char*)p_ust;
+
+ memset((void *)p_ust, 0, sizeof(struct tel_sim_ust));
+ p_index = (char *)p_ust;
if (in_length == 0) {
err("invalid length. return FALSE.");
}
for (i = 0; i < in_length; i++) {
- mask = 0x01; // reset mast to check first bit
+ mask = 0x01; /* reset mast to check first bit */
for (j = 0; j < 8; j++) {
- if (p_in[i] & mask) {
+ if (p_in[i] & mask)
*p_index = 1;
- }
+
p_index += sizeof(char);
mask = mask << 1;
}
}
+
return TRUE;
}
int i, j;
char mask;
char *p_index;
+
memset((void *)p_ist, 0, sizeof(struct tel_sim_ist));
p_index = (char *)p_ist;
mask = 0x01; /* reset mast to check first bit */
for (j = 0; j < 8; j++) {
- if (p_in[i] & mask) {
+ if (p_in[i] & mask)
*p_index = 1;
- }
+
p_index += sizeof(char);
mask = mask << 1;
}
}
+
return TRUE;
}
gboolean tcore_sim_decode_est(struct tel_sim_est *p_est, unsigned char *p_in, int in_length)
{
- memset((void*) p_est, 0, sizeof(struct tel_sim_est));
+ memset((void *)p_est, 0, sizeof(struct tel_sim_est));
if (*p_in & 0x01)
p_est->bFdnEnabled = TRUE;
+
if (*p_in & 0x02)
p_est->bBdnEnabled = TRUE;
+
if (*p_in & 0x04)
p_est->bAclEnabled = TRUE;
return TRUE;
}
-gboolean tcore_sim_decode_uecc(struct tel_sim_ecc *p_ecc, unsigned char* p_in, int in_length)
+gboolean tcore_sim_decode_uecc(struct tel_sim_ecc *p_ecc, unsigned char *p_in, int in_length)
{
- int bcd_byte; // dialing number max length
+ int bcd_byte; /* dialing number max length */
unsigned char eccServiceCategory;
if (_is_empty(p_in, in_length) == TRUE) {
return FALSE;
}
- //get the BCD length of the ECC
+ /* get the BCD length of the ECC */
bcd_byte = _get_valid_bcd_byte(&p_in[0], SIM_ECC_BYTE_LEN_MAX);
- //get the ECC codes in digits and the length as well
- _bcd_to_digit((char*) p_ecc->ecc_num, (char*) &p_in[0], bcd_byte);
+ /* get the ECC codes in digits and the length as well */
+ _bcd_to_digit((char *) p_ecc->ecc_num, (char *)&p_in[0], bcd_byte);
- //get the alpha identifier of ECC (
- _get_string((unsigned char*) p_ecc->ecc_string, (unsigned char*) &p_in[3], in_length - 3);
+ /* get the alpha identifier of ECC */
+ _get_string((unsigned char *) p_ecc->ecc_string, (unsigned char *)&p_in[3], in_length - 3);
eccServiceCategory = p_in[in_length - 1];
/*
- Assign the service category
- 3GPP TS24.008 Emergency Service Category Value.
- Bit 8,7,6 are spare, 5~1 bit is used.
- The meaning of the Emergency Category Value is derived from the following settings
- (see 3GPP TS 22.101 clause 10):
- Bit 1 Police 0x01
- Bit 2 Ambulance 0x02
- Bit 3 Fire Brigade 0x04
- Bit 4 Marine Guard 0x08
- Bit 5 Mountain Rescue 0x10
- Bit 6 manually initiated eCall
- Bit 7 automatically initiated eCall
- Bit 8 is spare and set to "0"
+ * Assign the service category
+ * 3GPP TS24.008 Emergency Service Category Value.
+ * Bit 8, 7, 6 are spare, 5~1 bit is used.
+ * The meaning of the Emergency Category Value is derived from the following settings
+ * (see 3GPP TS 22.101 clause 10):
+ * Bit 1 Police 0x01
+ * Bit 2 Ambulance 0x02
+ * Bit 3 Fire Brigade 0x04
+ * Bit 4 Marine Guard 0x08
+ * Bit 5 Mountain Rescue 0x10
+ * Bit 6 manually initiated eCall
+ * Bit 7 automatically initiated eCall
+ * Bit 8 is spare and set to "0"
*/
- if (eccServiceCategory == 0xFF) { // if category vaule is unused (unchecked) then just return 0xff
+ if (eccServiceCategory == 0xFF) /* if category vaule is unused (unchecked) then just return 0xff */
p_ecc->ecc_category = eccServiceCategory;
- } else {
- p_ecc->ecc_category = eccServiceCategory & 0x1F; // Check for the first 5 bits
- }
+ else
+ p_ecc->ecc_category = eccServiceCategory & 0x1F; /* Check for the first 5 bits */
return TRUE;
}
-gboolean tcore_sim_decode_gid( struct tel_sim_gid *p_gid, unsigned char* p_in, int in_length)
+gboolean tcore_sim_decode_gid(struct tel_sim_gid *p_gid, unsigned char *p_in, int in_length)
{
int i;
- memset((void*) p_gid, 0, sizeof(struct tel_sim_gid ));
+ memset((void *) p_gid, 0, sizeof(struct tel_sim_gid));
if (in_length == 0)
return FALSE;
-/*regarding 31.102, EF-GID data byte is not defined. currently 10.*/
+ /* regarding 31.102, EF-GID data byte is not defined. currently 10. */
if (in_length >= SIM_GROUP_IDENTIFIER_LEN_MAX)
in_length = SIM_GROUP_IDENTIFIER_LEN_MAX;
p_gid->szGroupIdentifier[i] = p_in[i];
p_gid->GroupIdentifierLen++;
}
+
return TRUE;
}
if (in_length == 0 || in_length > SIM_MAIL_BOX_IDENTIFIER_LEN_MAX)
return FALSE;
- if ( _is_empty(p_in, in_length) == TRUE) {
- return FALSE; // this is empty record
- }
+ if (_is_empty(p_in, in_length) == TRUE)
+ return FALSE; /* this is empty record */
p_mbi->voice_index = p_in[0];
p_mbi->fax_index = p_in[1];
p_mbi->email_index = p_in[2];
p_mbi->other_index = p_in[3];
- // 5th byte is optional
+ /* 5th byte is optional */
if (in_length == 5)
p_mbi->video_index = p_in[4];
return TRUE;
}
-char* tcore_sim_encode_mbi(const struct tel_sim_mbi *p_mbi, int in_length)
+char *tcore_sim_encode_mbi(const struct tel_sim_mbi *p_mbi, int in_length)
{
char *p_out = NULL;
if (in_length < 4) {
- dbg("in_length[%d] should be greater than or equal to 4.", in_length)
+ dbg("in_length[%d] should be greater than or equal to 4.", in_length);
return NULL;
}
p_out = calloc(1, in_length);
+ if (!p_out)
+ return NULL;
p_out[0] = p_mbi->voice_index;
p_out[1] = p_mbi->fax_index;
if (in_length == 0)
return FALSE;
- dbg( "flag(0)=%x, packetlen=%d ", (unsigned int)p_in[0], in_length);
- dbg( "flag(1)=%x", p_in[1]);
+ dbg("flag(0)=%x, packetlen=%d ", (unsigned int)p_in[0], in_length);
+ dbg("flag(1)=%x", p_in[1]);
- if ((p_in[0] & 0x0F) == 0x0A) {
+ if ((p_in[0] & 0x0F) == 0x0A)
p_cff->b_line1 = TRUE;
- }
- if ((p_in[0] & 0xF0) == 0xA0) {
+
+ if ((p_in[0] & 0xF0) == 0xA0)
p_cff->b_line2 = TRUE;
- }
if (in_length > 1) {
- if ((p_in[1] & 0x0F) == 0x0A) {
+ if ((p_in[1] & 0x0F) == 0x0A)
p_cff->b_fax = TRUE;
- }
- if ((p_in[1] & 0xF0) == 0xA0) {
+
+ if ((p_in[1] & 0xF0) == 0xA0)
p_cff->b_data = TRUE;
- }
}
dbg("Line1 = %d, line2 = %d, Fax = %d, Data = %d ",
return TRUE;
}
-char* tcore_sim_encode_cff(const struct tel_sim_cphs_cf *cff, int in_length)
+char *tcore_sim_encode_cff(const struct tel_sim_cphs_cf *cff, int in_length)
{
int i, j = 0;
char *p_out = NULL;
- unsigned char* pTemp = (unsigned char*) cff;
+ unsigned char *pTemp = (unsigned char *) cff;
unsigned char present = 0x0A;
unsigned char absent = 0x05;
if (in_length < SIM_CPHS_CALL_FORWARDING_LEN_MIN) {
- err("in_length[%d] is smaller than SIM_CPHS_CALL_FORWARDING_LEN_MIN[%d]", in_length, SIM_CPHS_CALL_FORWARDING_LEN_MIN);
+ err("in_length[%d] is smaller than SIM_CPHS_CALL_FORWARDING_LEN_MIN[%d]",
+ in_length, SIM_CPHS_CALL_FORWARDING_LEN_MIN);
return NULL;
}
p_out = calloc(1, SIM_CPHS_CALL_FORWARDING_LEN_MIN+1);
- if (!p_out) {
+ if (!p_out)
return NULL;
- }
for (i = 0; i < SIM_CPHS_CALL_FORWARDING_LEN_MIN; i++) {
present = 0x0A;
absent = 0x05;
for (j = 0; j < 2; j++) {
- if (*pTemp) {
+ if (*pTemp)
p_out[i] = p_out[i] | present;
- } else {
+ else
p_out[i] = p_out[i] | absent;
- }
+
pTemp += sizeof(gboolean);
present = present << 4;
absent = absent << 4;
if (in_length == 0)
return FALSE;
- memset((void*) p_csp, 0, sizeof(struct tel_sim_cphs_csp));
+ memset((void *) p_csp, 0, sizeof(struct tel_sim_cphs_csp));
/* current telephony supports 22 byte cphs-csp data. 18 byte is mandatory, the other is optional. */
for (i = 0, j = 0; i < SIM_CPHS_CSP_LEN_MAX && j < SIM_CPHS_CSP_ENTRY_CNT_MAX; i++, j++) {
mask = 0x80;
switch (p_csp->service_profile_entry[j].customer_service_group) {
- case 0x01:
- for (k = 0; k < 5; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_unconditional = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_busy = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_no_reply = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_not_reachable = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.call_offering.b_call_transfer = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x01:
+ for (k = 0; k < 5; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_unconditional = TRUE;
break;
- case 0x02:
- for (k = 0; k < 5; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_outgoing_calls = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls_except_hplmn = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_incoming_calls_roaming_outside_hplmn = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_incoming_calls_when_roaming = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x40:
+ p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_busy = TRUE;
break;
- case 0x03:
- for (k = 0; k < 5; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.other_supp_services.b_multi_party_service = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.other_supp_services.b_advice_of_charge = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.other_supp_services.b_preferential_closed_user_group = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group_outgoing_access = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x20:
+ p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_no_reply = TRUE;
break;
- case 0x04:
- for (k = 0; k < 4; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.call_complete.b_call_hold = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.call_complete.b_call_waiting = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.call_complete.b_completion_of_call_to_busy_subscriber = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.call_complete.b_user_user_signalling = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x10:
+ p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_not_reachable = TRUE;
break;
- case 0x05:
- for (k = 0; k < 7; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_terminated = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_originated = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_cell_broadcast = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_reply_path = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_delivery_conf = TRUE;
- break;
- case 0x04:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_protocol_identifier = TRUE;
- break;
- case 0x02:
- p_csp->service_profile_entry[j].service.teleservices.b_short_message_validity_period = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x08:
+ p_csp->service_profile_entry[j].service.call_offering.b_call_transfer = TRUE;
break;
- case 0x06:
- for (k = 0; k < 1; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.cphs_teleservices.b_alternative_line_service = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
+ default:
+ break;
}
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x02:
+ for (k = 0; k < 5; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_outgoing_calls = TRUE;
break;
- case 0x07:
- for (k = 0; k < 1; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.cphs_features.b_string_service_table = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x40:
+ p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls = TRUE;
break;
- case 0x08:
- for (k = 0; k < 8; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_present = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_restrict = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_present = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.number_identifiers.b_malicious_call_identifier = TRUE;
- break;
- case 0x02:
- p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_send = TRUE;
- break;
- case 0x01:
- p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_block = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x20:
+ p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls_except_hplmn = TRUE;
break;
- case 0x09:
- for (k = 0; k < 6; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_gprs = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_high_speed_csd = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_group_call = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_broadcast_service = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_subscriber_profile = TRUE;
- break;
- case 0x04:
- p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_band = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x10:
+ p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_incoming_calls_roaming_outside_hplmn = TRUE;
break;
- case 0xC0:
- for (k = 0; k < 8; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_manual_selection = TRUE;
- break;
- case 0x40:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_voice_mail = TRUE;
- break;
- case 0x20:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_and_paging = TRUE;
- break;
- case 0x10:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_with_emial_type = TRUE;
- break;
- case 0x08:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_fax_calls = TRUE;
- break;
- case 0x04:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_data_calls = TRUE;
- break;
- case 0x01:
- p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_change_language = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
- }
+ case 0x08:
+ p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_incoming_calls_when_roaming = TRUE;
break;
- case 0xD5:
- for (k = 0; k < 8; k++) {
- switch (byteSignificance & mask) {
- case 0x80:
- case 0x40:
- case 0x20:
- case 0x10:
- case 0x08:
- case 0x04:
- case 0x02:
- case 0x01:
- p_csp->service_profile_entry[j].service.information_numbers.b_information_numbers = TRUE;
- break;
- default:
- break;
- }
- mask = mask >> 1;
+ default:
+ break;
}
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x03:
+ for (k = 0; k < 5; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.other_supp_services.b_multi_party_service = TRUE;
break;
- default:
+ case 0x40:
+ p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group = TRUE;
break;
- }
- }
- return TRUE;
-}
-gboolean tcore_sim_encode_csp(unsigned char *p_out, int out_length, struct tel_sim_cphs_csp *p_csp)
-{
- unsigned char i, j = 0;
+ case 0x20:
+ p_csp->service_profile_entry[j].service.other_supp_services.b_advice_of_charge = TRUE;
+ break;
- if (out_length == 0)
- return FALSE;
+ case 0x10:
+ p_csp->service_profile_entry[j].service.other_supp_services.b_preferential_closed_user_group = TRUE;
+ break;
- memset((void*) p_out, 0xFF, out_length);
+ case 0x08:
+ p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group_outgoing_access = TRUE;
+ break;
-/* current telephony supports 22 byte cphs-csp data. 18 byte is mandatory, the other is optional.*/
- for (i = 0, j = 0; i < SIM_CPHS_CSP_LEN_MAX && j < SIM_CPHS_CSP_ENTRY_CNT_MAX; i++, j++) {
- p_out[i] = (unsigned char) p_csp->service_profile_entry[j].customer_service_group;
- switch (p_out[i]) {
- case 0x01:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_unconditional) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_busy) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_no_reply) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_not_reachable) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_transfer) << 3);
+ default:
break;
+ }
+ mask = mask >> 1;
+ }
+ break;
- case 0x02:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_outgoing_calls) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls_except_hplmn) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_incoming_calls_roaming_outside_hplmn) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_incoming_calls_when_roaming) << 3);
+ case 0x04:
+ for (k = 0; k < 4; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.call_complete.b_call_hold = TRUE;
break;
- case 0x03:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_multi_party_service) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_advice_of_charge) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_preferential_closed_user_group) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group_outgoing_access) << 3);
+ case 0x40:
+ p_csp->service_profile_entry[j].service.call_complete.b_call_waiting = TRUE;
break;
- case 0x04:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_call_hold) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_call_waiting) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_completion_of_call_to_busy_subscriber) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_user_user_signalling) << 4);
+ case 0x20:
+ p_csp->service_profile_entry[j].service.call_complete.b_completion_of_call_to_busy_subscriber = TRUE;
break;
- case 0x05:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_terminated) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_originated) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_cell_broadcast) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_reply_path) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_delivery_conf) << 3)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_protocol_identifier) << 2)
- + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_validity_period) << 1);
+ case 0x10:
+ p_csp->service_profile_entry[j].service.call_complete.b_user_user_signalling = TRUE;
break;
- case 0x06:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.cphs_teleservices.b_alternative_line_service) << 7);
+ default:
break;
+ }
+ mask = mask >> 1;
+ }
+ break;
- case 0x07:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.cphs_features.b_string_service_table) << 7);
+ case 0x05:
+ for (k = 0; k < 7; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_terminated = TRUE;
break;
- case 0x08:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_present) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_restrict) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_present) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_malicious_call_identifier) << 3)
- + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_send) << 1)
- + ((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_block);
+ case 0x40:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_originated = TRUE;
break;
- case 0x09:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_gprs) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_high_speed_csd) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_group_call) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_broadcast_service) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_subscriber_profile) << 3)
- + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_band) << 2);
+ case 0x20:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_cell_broadcast = TRUE;
break;
- case 0xC0:
- p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_manual_selection) << 7)
- + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_voice_mail) << 6)
- + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_and_paging) << 5)
- + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_with_emial_type) << 4)
- + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_fax_calls) << 3)
- + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_data_calls) << 2)
- + ((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_change_language);
+ case 0x10:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_reply_path = TRUE;
break;
- case 0xD5:
- if (p_csp->service_profile_entry[j].service.information_numbers.b_information_numbers)
- p_out[++i] = 0xFF;
- else
- p_out[++i] = 0x00;
+ case 0x08:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_delivery_conf = TRUE;
break;
- default:
+ case 0x04:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_protocol_identifier = TRUE;
break;
+
+ case 0x02:
+ p_csp->service_profile_entry[j].service.teleservices.b_short_message_validity_period = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x06:
+ for (k = 0; k < 1; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.cphs_teleservices.b_alternative_line_service = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x07:
+ for (k = 0; k < 1; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.cphs_features.b_string_service_table = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x08:
+ for (k = 0; k < 8; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_present = TRUE;
+ break;
+
+ case 0x20:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_restrict = TRUE;
+ break;
+
+ case 0x10:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_present = TRUE;
+ break;
+
+ case 0x08:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_malicious_call_identifier = TRUE;
+ break;
+
+ case 0x02:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_send = TRUE;
+ break;
+
+ case 0x01:
+ p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_block = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0x09:
+ for (k = 0; k < 6; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_gprs = TRUE;
+ break;
+
+ case 0x40:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_high_speed_csd = TRUE;
+ break;
+
+ case 0x20:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_group_call = TRUE;
+ break;
+
+ case 0x10:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_broadcast_service = TRUE;
+ break;
+
+ case 0x08:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_subscriber_profile = TRUE;
+ break;
+
+ case 0x04:
+ p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_band = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0xC0:
+ for (k = 0; k < 8; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_manual_selection = TRUE;
+ break;
+
+ case 0x40:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_voice_mail = TRUE;
+ break;
+
+ case 0x20:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_and_paging = TRUE;
+ break;
+
+ case 0x10:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_with_emial_type = TRUE;
+ break;
+
+ case 0x08:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_fax_calls = TRUE;
+ break;
+
+ case 0x04:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_data_calls = TRUE;
+ break;
+
+ case 0x01:
+ p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_change_language = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ case 0xD5:
+ for (k = 0; k < 8; k++) {
+ switch (byteSignificance & mask) {
+ case 0x80:
+ case 0x40:
+ case 0x20:
+ case 0x10:
+ case 0x08:
+ case 0x04:
+ case 0x02:
+ case 0x01:
+ p_csp->service_profile_entry[j].service.information_numbers.b_information_numbers = TRUE;
+ break;
+
+ default:
+ break;
+ }
+ mask = mask >> 1;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ return TRUE;
+}
+
+gboolean tcore_sim_encode_csp(unsigned char *p_out, int out_length, struct tel_sim_cphs_csp *p_csp)
+{
+ unsigned char i, j = 0;
+
+ if (out_length == 0)
+ return FALSE;
+
+ memset((void *) p_out, 0xFF, out_length);
+
+ /*
+ * current telephony supports 22 byte cphs-csp data.
+ * 18 byte is mandatory, the other is optional.
+ */
+ for (i = 0, j = 0;
+ i < SIM_CPHS_CSP_LEN_MAX && j < SIM_CPHS_CSP_ENTRY_CNT_MAX;
+ i++, j++) {
+ p_out[i] = (unsigned char) p_csp->service_profile_entry[j].customer_service_group;
+ switch (p_out[i]) {
+ case 0x01:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_unconditional) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_busy) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_no_reply) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_forwarding_on_user_not_reachable) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_offering.b_call_transfer) << 3);
+ break;
+
+ case 0x02:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_outgoing_calls) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_outgoing_international_calls_except_hplmn) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_all_incoming_calls_roaming_outside_hplmn) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_restriction.b_barring_of_incoming_calls_when_roaming) << 3);
+ break;
+
+ case 0x03:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_multi_party_service) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_advice_of_charge) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_preferential_closed_user_group) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.other_supp_services.b_closed_user_group_outgoing_access) << 3);
+ break;
+
+ case 0x04:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_call_hold) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_call_waiting) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_completion_of_call_to_busy_subscriber) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.call_complete.b_user_user_signalling) << 4);
+ break;
+
+ case 0x05:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_terminated) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_mobile_originated) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_cell_broadcast) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_reply_path) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_delivery_conf) << 3)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_protocol_identifier) << 2)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.teleservices.b_short_message_validity_period) << 1);
+ break;
+
+ case 0x06:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.cphs_teleservices.b_alternative_line_service) << 7);
+ break;
+
+ case 0x07:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.cphs_features.b_string_service_table) << 7);
+ break;
+
+ case 0x08:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_present) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_restrict) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_connected_line_identification_present) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_malicious_call_identifier) << 3)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_send) << 1)
+ + ((unsigned char) p_csp->service_profile_entry[j].service.number_identifiers.b_calling_line_identification_block);
+ break;
+
+ case 0x09:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_gprs) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_high_speed_csd) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_group_call) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_voice_broadcast_service) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_subscriber_profile) << 3)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.phase_services.b_menu_for_multiple_band) << 2);
+ break;
+
+ case 0xC0:
+ p_out[++i] = (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_manual_selection) << 7)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_voice_mail) << 6)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_and_paging) << 5)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_mo_sms_with_emial_type) << 4)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_fax_calls) << 3)
+ + (((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_data_calls) << 2)
+ + ((unsigned char) p_csp->service_profile_entry[j].service.value_added_services.b_restrict_menu_for_change_language);
+ break;
+
+ case 0xD5:
+ if (p_csp->service_profile_entry[j].service.information_numbers.b_information_numbers)
+ p_out[++i] = 0xFF;
+ else
+ p_out[++i] = 0x00;
+ break;
+
+ default:
+ break;
}
}
+
return TRUE;
}
if (in_length == 0)
return FALSE;
- memset((void*) pMwis, 0, sizeof(struct tel_sim_mw));
+ memset((void *) pMwis, 0, sizeof(struct tel_sim_mw));
- type = p_in[0]; //0x07
+ type = p_in[0]; /* 0x07 */
if (type) {
for (i = 0; i < 5; i++) {
switch (type & mask) {
- case 0x01:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_VOICE;
- break;
- case 0x02:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_FAX;
- break;
- case 0x04:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_EMAIL;
- break;
- case 0x08:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_OTHER;
- break;
- case 0x10:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_VIDEO;
- break;
- default:
- pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_NONE;
- break;
+ case 0x01:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_VOICE;
+ break;
+
+ case 0x02:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_FAX;
+ break;
+
+ case 0x04:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_EMAIL;
+ break;
+
+ case 0x08:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_OTHER;
+ break;
+
+ case 0x10:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_VIDEO;
+ break;
+
+ default:
+ pMwis->indicator_status = pMwis->indicator_status | SIM_MWIS_NONE;
+ break;
}
mask = mask << 1;
}
if (in_length == 6)
pMwis->video_count = p_in[5];
}
+
return TRUE;
}
-char* tcore_sim_encode_mwis( int *out_length, const struct tel_sim_mw *pMwis, int in_length)
+char *tcore_sim_encode_mwis(int *out_length, const struct tel_sim_mw *pMwis, int in_length)
{
char *p_out = NULL;
int i = 0;
int encoded_size = 0;
if (out_length == 0)
- return FALSE;
+ return NULL;
/*
* by 3GPP spec (31.102),
* EF-MWIS record length should be <= 6. (5 or 6)
*/
- if (in_length > 6) {
+ if (in_length > 6)
encoded_size = 6;
- } else {
+ else
encoded_size = in_length;
- }
p_out = calloc(1, encoded_size);
+ if (!p_out)
+ return NULL;
- for(i = 0; i < encoded_size; i++) {
+ for (i = 0; i < encoded_size; i++) {
switch (i) {
case 0:
p_out[0] = (unsigned char) pMwis->indicator_status;
- break;
+ break;
+
case 1:
p_out[1] = pMwis->voice_count;
- break;
+ break;
+
case 2:
p_out[2] = pMwis->fax_count;
- break;
+ break;
+
case 3:
p_out[3] = pMwis->email_count;
- break;
+ break;
+
case 4:
p_out[4] = pMwis->other_count;
- break;
+ break;
+
case 5:
p_out[5] = pMwis->video_count;
- break;
+ break;
+
default:
- break;
+ break;
}
}
return p_out;
}
-gboolean tcore_sim_decode_vmwf(struct tel_sim_cphs_mw *p_vmwf, unsigned char* p_in, unsigned long in_length)
+gboolean tcore_sim_decode_vmwf(struct tel_sim_cphs_mw *p_vmwf, unsigned char *p_in, unsigned long in_length)
{
int i, j = 0;
- unsigned char* pTemp = (unsigned char*) p_vmwf;
+ unsigned char *pTemp = (unsigned char *) p_vmwf;
unsigned char mask = 0x0F;
unsigned char voiceMsgFlg = 0;
- if (in_length == 0){
+ if (in_length == 0) {
dbg("fail - input length is zero");
return FALSE;
}
-/* current telephony supports 2 byte cphs-vmwf data*/
+ /* current telephony supports 2 byte cphs-vmwf data */
for (i = 0; i < SIM_CPHS_VMWF_LEN_MAX; i++) {
voiceMsgFlg = p_in[i];
for (j = 0; j < 2; j++) {
- if ((voiceMsgFlg & mask) == 0x0A) {
- *pTemp = 1; //TRUE
- } else if ((voiceMsgFlg & mask) == 0x05) {
- *pTemp = 0; // FALSE
- }
+ if ((voiceMsgFlg & mask) == 0x0A)
+ *pTemp = 1; /* TRUE */
+ else if ((voiceMsgFlg & mask) == 0x05)
+ *pTemp = 0; /* FALSE */
+
pTemp += sizeof(gboolean);
voiceMsgFlg = voiceMsgFlg >> 4;
}
return TRUE;
}
-char* tcore_sim_encode_vmwf(int *out_length, const struct tel_sim_cphs_mw *p_vmwf, int in_length)
+char *tcore_sim_encode_vmwf(int *out_length, const struct tel_sim_cphs_mw *p_vmwf, int in_length)
{
int i, j = 0;
char *p_out = NULL;
- unsigned char* pTemp = (unsigned char*) p_vmwf;
+ unsigned char *pTemp = (unsigned char *) p_vmwf;
unsigned char present = 0x0A;
unsigned char absent = 0x05;
return NULL;
p_out = calloc(1, in_length);
+ if (!p_out)
+ return NULL;
for (i = 0; i < in_length; i++) {
present = 0x0A;
for (j = 0; j < 2; j++) {
if (*pTemp)
- p_out[i] = p_out[i] | present; //TRUE
+ p_out[i] = p_out[i] | present; /* TRUE */
else
- p_out[i] = p_out[i] | absent; //TRUE
+ p_out[i] = p_out[i] | absent; /* TRUE */
pTemp += sizeof(gboolean);
present = present << 4;
absent = absent << 4;
}
}
+
*out_length = in_length;
return p_out;
}
-gboolean tcore_sim_decode_ons(unsigned char* p_out,unsigned char* p_in, int in_length)
+gboolean tcore_sim_decode_ons(unsigned char *p_out, unsigned char *p_in, int in_length)
{
int length;
- memset((void*) p_out, 0, SIM_CPHS_OPERATOR_NAME_LEN_MAX+1);
+ memset((void *) p_out, 0, SIM_CPHS_OPERATOR_NAME_LEN_MAX+1);
if (in_length == 0)
return FALSE;
- if (_is_empty(p_in, in_length) == TRUE) {
+ if (_is_empty(p_in, in_length) == TRUE)
return FALSE;
- }
- /* current telephony supports 25 byte cphs-operator name string.*/
+ /* current telephony supports 25 byte cphs-operator name string. */
if (in_length >= SIM_CPHS_OPERATOR_NAME_LEN_MAX)
in_length = SIM_CPHS_OPERATOR_NAME_LEN_MAX;
length = _get_string(p_out, p_in, in_length);
p_out[length] = '\0';
- dbg( "Operator Name is (%s) & Length (%d) ", p_out, length);
+ dbg("Operator Name is (%s) & Length (%d) ", p_out, length);
return TRUE;
}
gboolean tcore_sim_decode_cfis(struct tel_sim_cfis *p_cfis, unsigned char *p_in, int in_length)
{
- int bcd_byte; // dialing number max length
+ int bcd_byte; /* dialing number max length */
int digit_len;
int i = 0;
if (in_length == 0)
if (_is_empty(p_in, in_length) == TRUE) {
dbg("empty record. all data is set 0xff");
- return TRUE; // this is empty record
+ return TRUE; /* this is empty record */
}
p_cfis->msp_num = p_in[i++];
p_cfis->cfu_status = p_in[i++];
- // get TON and NPI
+ /* get TON and NPI */
p_cfis->ton = (p_in[++i] >> 4) & 0x07;
p_cfis->npi = p_in[i++] & 0x0F;
- // get actual dialing number length
+ /* get actual dialing number length */
/* current telephony supports 20 byte dialing number format. */
bcd_byte = _get_valid_bcd_byte(&p_in[i], SIM_XDN_NUMBER_LEN_MAX / 2);
- // get dialing number/SSC string
- digit_len = _bcd_to_digit((char*) p_cfis->cfu_num, (char*) &p_in[i], bcd_byte); // actual dialing number length in BCD.
- dbg( "Dialing number Length[%d]", digit_len);
+ /* get dialing number/SSC string */
+ digit_len = _bcd_to_digit((char *) p_cfis->cfu_num, (char *) &p_in[i], bcd_byte); /* actual dialing number length in BCD. */
+ dbg("Dialing number Length[%d]", digit_len);
i = i + SIM_XDN_NUMBER_LEN_MAX / 2;
- // get Capability/Configuration id
+ /* get Capability/Configuration id */
p_cfis->cc2_id = p_in[i++];
- // get Extension1 id
+ /* get Extension1 id */
p_cfis->ext7_id = p_in[i];
- dbg( "MspNumber 0x%x", p_cfis->msp_num);
- dbg( "Status 0x%x", p_cfis->cfu_status);
- dbg( "TypeOfNumber %d", p_cfis->ton);
- dbg( "NumberingPlanIdent %d", p_cfis->npi);
- dbg( "Dialing number[%s]", p_cfis->cfu_num);
+ dbg("MspNumber 0x%x", p_cfis->msp_num);
+ dbg("Status 0x%x", p_cfis->cfu_status);
+ dbg("TypeOfNumber %d", p_cfis->ton);
+ dbg("NumberingPlanIdent %d", p_cfis->npi);
+ dbg("Dialing number[%s]", p_cfis->cfu_num);
return TRUE;
}
{
int i = 1;
- dbg( "Func Entrance");
+ dbg("Func Entrance");
- if ((NULL == p_out) || (NULL == p_in)) {
+ if ((NULL == p_out) || (NULL == p_in))
return FALSE;
- }
if ((in_length == 0) || (in_length == 0xff) || (10 > in_length)) {
- dbg("No valid IMG data present - length:[%x]", in_length);
+ dbg("No valid IMG data present - length:[%x]", in_length);
return FALSE;
}
if (_is_empty(p_in, in_length) == TRUE) {
dbg("empty record. all data is set 0xff");
- return FALSE; // this is empty record
+ return FALSE; /* this is empty record */
}
- /*We are trying to decode only the 1st valid image data property and ignoring other for time being*/
+ /* We are trying to decode only the 1st valid image data property and ignoring other for time being */
p_out->width = p_in[i++];
p_out->height = p_in[i++];
p_out->ics = p_in[i++];
- p_out->iidf_fileid = (*(p_in+4) << 8) | (*(p_in+5) & 0x00ff);/*index is 4 and 5 because the 1st byte is number of actual image instance*/
+ p_out->iidf_fileid = (*(p_in+4) << 8) | (*(p_in+5) & 0x00ff); /*index is 4 and 5 because the 1st byte is number of actual image instance */
p_out->offset = (*(p_in+6) << 8) | (*(p_in+7) & 0x00ff);
p_out->length = (*(p_in+8) << 8) | (*(p_in+9) & 0x00ff);
err("tag[0x%x] should be 0x80. return FALSE.", tag);
return FALSE;
}
+
len = p_in[1];
- if (in_length < len + 2) {
+ if (in_length < len + 2)
err("invalid length. in_length[%d] < TLV_len[%d] + 2", in_length, len);
- }
- p_out->impi = calloc(1, len + 1);
-
- memcpy(p_out->impi, &p_in[2], len);
+ p_out->impi = g_memdup(&p_in[2], len);
return TRUE;
}
err("tag[0x%x] should be 0x80. return FALSE.", tag);
return FALSE;
}
+
len = p_in[1];
- if (in_length < len + 2) {
+ if (in_length < len + 2)
err("invalid length. in_length[%d] < TLV_len[%d] + 2", in_length, len);
- }
-
- p_out->domain = calloc(1, len + 1);
- memcpy(p_out->domain, &p_in[2], len);
+ p_out->domain = g_memdup(&p_in[2], len);
return TRUE;
}
len = p_in[1];
- if (in_length < len + 2) {
+ if (in_length < len + 2)
err("invalid length. in_length[%d] < TLV_len[%d] + 2", in_length, len);
- }
-
- p_out->impu = calloc(1, len + 1);
- memcpy(p_out->impu, &p_in[2], len);
+ p_out->impu = g_memdup(&p_in[2], len);
return TRUE;
}
err("tag[0x%x] should be 0x80. return FALSE.", tag);
return FALSE;
}
- /*P-CSCF Address length */
+
+ /* P-CSCF Address length */
len = p_in[1];
- if (in_length < len + 2) {
+ if (in_length < len + 2)
err("invalid length. in_length[%d] < TLV_len[%d] + 2", in_length, len);
- }
- /*P-CSCF Address type */
+ /* P-CSCF Address type */
if (p_in[2] == 0x00)
p_out->type = SIM_PCSCF_TYPE_FQDN;
else if (p_in[2] == 0x01)
else if (p_in[2] == 0x02)
p_out->type = SIM_PCSCF_TYPE_IPV6;
- /* If P-CSCF Address type is "00" (FQDN), then address shall be encoded to
- * an octet string according to UTF-8 encoding rules.
- * So, no need to convert it to UTF-8.
- */
+ /*
+ * If P-CSCF Address type is "00" (FQDN), then address shall be
+ * encoded to an octet string according to UTF-8 encoding rules.
+ * So, no need to convert it to UTF-8.
+ */
if (p_out->type == SIM_PCSCF_TYPE_FQDN) {
- p_out->pcscf = calloc(1, len);
- memcpy(p_out->pcscf, &p_in[3], len - 1);
+ p_out->pcscf = g_memdup(&p_in[3], len - 1);
} else {
- unsigned char buf[255] = {0,};
+ unsigned char buf[255] = {0, };
unsigned short buf_len;
gboolean ret = FALSE;
ret = tcore_util_convert_string_to_utf8(buf, &buf_len, ALPHABET_FORMAT_SMS_DEFAULT,
(const unsigned char *)&p_in[3], len - 1);
- if (ret) {
- p_out->pcscf = calloc(1, buf_len + 1);
- memcpy(p_out->pcscf, buf, buf_len);
- }
+ if (ret)
+ p_out->pcscf = g_memdup(buf, buf_len);
}
return TRUE;
}
-char* tcore_sim_encode_cfis(int *out_length, const struct tel_sim_cfis *p_cfis)
+char *tcore_sim_encode_cfis(int *out_length, const struct tel_sim_cfis *p_cfis)
{
char *encoded_o = NULL;
char bcd[10];
- encoded_o = calloc(1, 16); // EF-CFIS record length is 16
+ encoded_o = calloc(1, 16); /* EF-CFIS record length is 16 */
+ if (!encoded_o)
+ return NULL;
+
memset(bcd, 0xff, 10);
/*
- Bytes Description M/O Length
- 1 MSP number M 1 byte
- 2 CFU indicator status M 1 byte
- 3 Length of BCD number M 1 byte
- 4 TON and NPI M 1 byte
- 5 to 14 Dialing Number M 10 bytes. unused byte should be set with 'F'
- 15 Capability/Configuration2 Record Identifier M 1 byte
- 16 Extension 7 Record Identifier M 1 byte
- */
+ * Bytes Description M/O Length
+ *----------------------------------------------------------------------------------------
+ * 1 MSP number M 1 byte
+ * 2 CFU indicator status M 1 byte
+ * 3 Length of BCD number M 1 byte
+ * 4 TON and NPI M 1 byte
+ * 5 to 14 Dialing Number M 10 bytes. unused byte should be set with 'F'
+ * 15 Capability/Configuration2 Record Identifier M 1 byte
+ * 16 Extension 7 Record Identifier M 1 byte
+ */
encoded_o[0] = p_cfis->msp_num;
encoded_o[1] = p_cfis->cfu_status;
- encoded_o[2] = (strlen(p_cfis->cfu_num) +1) /2;
+ encoded_o[2] = (strlen(p_cfis->cfu_num) + 1) / 2;
- // set TON and NPI
+ /* set TON and NPI */
encoded_o[3] = 0x80;
encoded_o[3] |= (p_cfis->ton & 0x07) << 4;
encoded_o[3] |= p_cfis->npi & 0x0F;
- _digit_to_bcd(bcd, (char*)&p_cfis->cfu_num, strlen(p_cfis->cfu_num));
+ _digit_to_bcd(bcd, (char *)&p_cfis->cfu_num, strlen(p_cfis->cfu_num));
memcpy(&encoded_o[4], bcd, 10);
encoded_o[14] = p_cfis->cc2_id;
if (in_length == 0)
return FALSE;
- memset((void*) p_df, 0, sizeof(struct tel_sim_cphs_dflag));
+ memset((void *)p_df, 0, sizeof(struct tel_sim_cphs_dflag));
switch (p_in[0] & 0x01) {
- case 0x00:
- p_df->DynamicFlags = SIM_DYNAMIC_FLAGS_LINE2;
- break;
+ case 0x00:
+ p_df->DynamicFlags = SIM_DYNAMIC_FLAGS_LINE2;
+ break;
- case 0x01:
- p_df->DynamicFlags = SIM_DYNAMIC_FLAGS_LINE1;
- break;
- default:
- warn("invalid input");
- break;
+ case 0x01:
+ p_df->DynamicFlags = SIM_DYNAMIC_FLAGS_LINE1;
+ break;
+
+ default:
+ warn("invalid input");
+ break;
}
return TRUE;
if (in_length == 0)
return FALSE;
- memset((void*) p_d2f, 0, sizeof(struct tel_sim_cphs_dflag2));
+ memset((void *) p_d2f, 0, sizeof(struct tel_sim_cphs_dflag2));
switch (p_in[0] & 0x01) {
- case 0x00:
- p_d2f->Dynamic2Flag = SIM_PIN2_ACCESSIBLE_FLAGS_UNLOCKED;
- break;
+ case 0x00:
+ p_d2f->Dynamic2Flag = SIM_PIN2_ACCESSIBLE_FLAGS_UNLOCKED;
+ break;
- case 0x01:
- p_d2f->Dynamic2Flag = SIM_PIN2_ACCESSIBLE_FLAGS_LOCKED;
- break;
- default:
- warn("invalid input");
- break;
+ case 0x01:
+ p_d2f->Dynamic2Flag = SIM_PIN2_ACCESSIBLE_FLAGS_LOCKED;
+ break;
+
+ default:
+ warn("invalid input");
+ break;
}
return TRUE;
if (out_length == 0 || out_length > 1)
return FALSE;
- memset((void*) p_out, 0xFF, out_length);
+ memset((void *)p_out, 0xFF, out_length);
p_out[0] = p_df->DynamicFlags;
+
return TRUE;
}
if (out_length == 0 || out_length > 1)
return FALSE;
- memset((void*) p_out, 0xFF, out_length);
+ memset((void *)p_out, 0xFF, out_length);
p_out[0] = p_d2f->Dynamic2Flag;
+
return TRUE;
}
{
int i, j = 0;
unsigned char mask = 0x03;
- unsigned char* pTemp = (unsigned char*) &pCphsInfo->CphsServiceTable;
+ unsigned char *pTemp = (unsigned char *) &pCphsInfo->CphsServiceTable;
- memset((void*) pCphsInfo, 0, sizeof(struct tel_sim_cphs_info));
+ memset((void *)pCphsInfo, 0, sizeof(struct tel_sim_cphs_info));
if (in_length == 0)
return FALSE;
- /*CPHS info EF has 3 bytes data.*/
+ /* CPHS info EF has 3 bytes data. */
if (in_length >= SIM_CPHS_INFO_LEN_MAX)
in_length = SIM_CPHS_INFO_LEN_MAX;
switch (p_in[0]) {
- case 0x01:
- pCphsInfo->CphsPhase = SIM_CPHS_PHASE1;
- break;
- case 0x02:
- pCphsInfo->CphsPhase = SIM_CPHS_PHASE2;
- break;
- default:
- pCphsInfo->CphsPhase = SIM_CPHS_PHASE_RFU;
- break;
+ case 0x01:
+ pCphsInfo->CphsPhase = SIM_CPHS_PHASE1;
+ break;
+
+ case 0x02:
+ pCphsInfo->CphsPhase = SIM_CPHS_PHASE2;
+ break;
+
+ default:
+ pCphsInfo->CphsPhase = SIM_CPHS_PHASE_RFU;
+ break;
}
- dbg( "Cphs Phase %d \n", pCphsInfo->CphsPhase);
+ dbg("Cphs Phase %d \n", pCphsInfo->CphsPhase);
- for (i = 1; i < in_length; i++) { //CPHS SST is only 2 bytes
- mask = 0x03; // reset mast to check first bit
+ for (i = 1; i < in_length; i++) { /* CPHS SST is only 2 bytes */
+ mask = 0x03; /* reset mast to check first bit */
for (j = 0; j < 4; j++) {
- if (p_in[i] & mask) {
+ if (p_in[i] & mask)
*pTemp = 1;
- }
- dbg( "Byte (%d), service (%d) ", i+1, *pTemp);
+
+ dbg("Byte (%d), service (%d) ", i + 1, *pTemp);
pTemp += sizeof(gboolean);
mask = mask << 2;
}
}
+
return TRUE;
}
memset(p_out, 0x00, SIM_CPHS_OPERATOR_NAME_SHORT_FORM_LEN_MAX+1);
- if (_is_empty(p_in, in_length) == TRUE){
- return FALSE; // this is empty record
- }
+ if (_is_empty(p_in, in_length) == TRUE)
+ return FALSE; /* this is empty record */
- /*CPHS specification shows current EF include 10 bytes */
+ /* CPHS specification shows current EF include 10 bytes */
if (in_length == 0)
return FALSE;
- if(in_length > SIM_CPHS_OPERATOR_NAME_SHORT_FORM_LEN_MAX)
+ if (in_length > SIM_CPHS_OPERATOR_NAME_SHORT_FORM_LEN_MAX)
in_length = SIM_CPHS_OPERATOR_NAME_SHORT_FORM_LEN_MAX;
- length = _get_string( p_out, p_in, in_length );
+ length = _get_string(p_out, p_in, in_length);
p_out[length] = '\0';
- dbg( "Operator short Name is (%s) & length (%d)", p_out, length);
+ dbg("Operator short Name is (%s) & length (%d)", p_out, length);
+
return TRUE;
}
-gboolean tcore_sim_decode_information_number(struct tel_sim_cphs_info_number *p_info, unsigned char* p_in, int in_length)
+gboolean tcore_sim_decode_information_number(struct tel_sim_cphs_info_number *p_info, unsigned char *p_in, int in_length)
{
int i;
if (in_length == 0)
return FALSE;
- for (i = 0; i < in_length; i++) {
- dbg( " \t0x%04X.", p_in[i]);
- }
+ for (i = 0; i < in_length; i++)
+ dbg(" \t0x%04X.", p_in[i]);
- if (_is_empty(p_in, in_length) == TRUE) {
- return FALSE; // this is empty record
- }
+ if (_is_empty(p_in, in_length) == TRUE)
+ return FALSE; /* this is empty record */
p_info->AlphaIdLength = p_in[0];
if (p_in[1] & 0x0F)
- p_info->IndexLevelIndicator = (enum tel_sim_cphs_index_level) (p_in[1] & 0x0F);
+ p_info->IndexLevelIndicator = (enum tel_sim_cphs_index_level)(p_in[1] & 0x0F);
if (p_in[1] & 0x10)
p_info->PremiumServiceIndicator = TRUE;
if (p_in[1] & 0x20)
p_info->PremiumServiceIndicator = TRUE;
- _get_string(p_info->Alpha_id, &p_in[2], p_info->AlphaIdLength);
+ _get_string(p_info->Alpha_id, &p_in[2], p_info->AlphaIdLength);
p_info->DiallingnumLength = p_in[2 + p_info->AlphaIdLength] * 2;
p_info->TypeOfNumber = (p_in[3 + p_info->AlphaIdLength] >> 4) & 0x07;
- p_info->NumberingPlanIdentity = p_in[3 + p_info->AlphaIdLength] & 0x0F;
+ p_info->NumberingPlanIdentity = p_in[3 + p_info->AlphaIdLength] & 0x0F;
- // get dialing number/SSC string
- _bcd_to_digit((char*) p_info->DiallingnumLength, (char*) &p_in[4 + p_info->AlphaIdLength], p_info->DiallingnumLength / 2); // actual dialing number length in BCD.
- // get Extension1 id
+ /* get dialing number/SSC string */
+ _bcd_to_digit((char *)p_info->DiallingnumLength,
+ (char *)&p_in[4 + p_info->AlphaIdLength],
+ p_info->DiallingnumLength / 2); /* actual dialing number length in BCD. */
+
+ /* get Extension1 id */
p_info->Ext1RecordId = p_in[4 + p_info->AlphaIdLength + p_info->DiallingnumLength / 2];
return TRUE;
{
if (_is_empty(p_in, in_length) == TRUE) {
memset(p_opl, 0x00, sizeof(struct tel_sim_opl));
- return FALSE; // this is empty record
+ return FALSE; /* this is empty record */
}
_decode_plmn(p_in, p_opl->plmn);
- dbg( " PLMN Code[%s]", p_opl->plmn);
+ dbg(" PLMN Code[%s]", p_opl->plmn);
p_opl->lac_from = (*(p_in+3) << 8) | (*(p_in+4) & 0x00ff);
- dbg( " Start value of the LAC range[%x]", p_opl->lac_from);
+ dbg(" Start value of the LAC range[%x]", p_opl->lac_from);
p_opl->lac_to = (*(p_in+5) << 8) | (*(p_in+6) & 0x00ff);
- dbg( " End value of the LAC range[%x]", p_opl->lac_to);
+ dbg(" End value of the LAC range[%x]", p_opl->lac_to);
p_opl->rec_identifier = p_in[7];
- dbg( " PNN Record identifier[%x]", p_opl->rec_identifier);
+ dbg(" PNN Record identifier[%x]", p_opl->rec_identifier);
return TRUE;
}
-gboolean tcore_sim_decode_pnn(struct tel_sim_pnn *p_pnn, unsigned char* p_in, int in_length)
+gboolean tcore_sim_decode_pnn(struct tel_sim_pnn *p_pnn, unsigned char *p_in, int in_length)
{
int f_name_len = 0, s_name_len = 0;
int cvt_leng = 0, s_name_base = 0;
if (_is_empty(p_in, in_length) == TRUE) {
memset(p_pnn, 0x00, sizeof(struct tel_sim_pnn));
- return FALSE; // this is empty record
+ return FALSE; /* this is empty record */
}
- /*Full name for network IEI(Information Element Identifier),0x43*/
+ /* Full name for network IEI(Information Element Identifier), 0x43 */
if (p_in[0] == 0x43) {
- dbg( " Full name of network IEI exist");
- //f_name_part includes information byte.
+ dbg(" Full name of network IEI exist");
+ /* f_name_part includes information byte. */
f_name_len = (int)p_in[1] - 1;
- /* 3rd byte information element(according to TS 24.008 for Network Name)
- 8 :ext1
- 7 6 5 : coding scheme
- 4 : Add CI
- 3 2 1 : number of spare bits in last octet
-
- Coding Scheme (octet 3, bits 5-7)
- 0 0 0 Cell Broadcast data coding scheme, GSM default alphabet, language unspecified, defined in 3GPP TS 23.038 [8b]
- 0 0 1 UCS2 (16 bit) [72]
- 0 1 0 to reserved
- 1 1 1 to reserved
+ /*
+ * 3rd byte information element(according to TS 24.008 for Network Name)
+ * 8 :ext1
+ * 7 6 5 : coding scheme
+ * 4 : Add CI
+ * 3 2 1 : number of spare bits in last octet
+ *
+ * Coding Scheme (octet 3, bits 5-7)
+ * 0 0 0 Cell Broadcast data coding scheme, GSM default alphabet, language unspecified, defined in 3GPP TS 23.038 [8b]
+ * 0 0 1 UCS2 (16 bit) [72]
+ * 0 1 0 to reserved
+ * 1 1 1 to reserved
*/
if ((p_in[2] & 0x70) >> 4 == 0) {
- dbg( "DCS:GSM7");
- // In case of GSM7, 35byte packing data will be converted 40 bytes unpacking string.
+ dbg("DCS:GSM7");
+
+ /*
+ * In case of GSM7, 35byte packing data will be
+ * converted 40 bytes unpacking string.
+ */
if (f_name_len > (SIM_NW_FULL_NAME_LEN_MAX * 7) / 8)
f_name_len = (SIM_NW_FULL_NAME_LEN_MAX * 7) / 8;
- _unpack_7bit28bit(p_in + 3, f_name_len, (unsigned char *) (p_pnn->full_name));
+ _unpack_7bit28bit(p_in + 3,
+ f_name_len, (unsigned char *)(p_pnn->full_name));
} else if ((p_in[2] & 0x70) >> 4 == 1) {
- dbg( "DCS:UCS2");
+ dbg("DCS:UCS2");
+
/* current telephony supports 40 bytes network name string */
if (f_name_len > SIM_NW_FULL_NAME_LEN_MAX)
f_name_len = SIM_NW_FULL_NAME_LEN_MAX;
- _ucs2_to_utf8(f_name_len, p_in + 3, (int*) &cvt_leng, (unsigned char *) (p_pnn->full_name));
+ _ucs2_to_utf8(f_name_len, p_in + 3,
+ (int *)&cvt_leng, (unsigned char *)(p_pnn->full_name));
} else {
- dbg( "DCS:unknown");
+ dbg("DCS:unknown");
+
return FALSE;
}
- dbg( " Full name of network contents[%s]", p_pnn->full_name);
- s_name_base = (int)p_in[1] +2;
- dbg( " short name base byte [0x%02x]", s_name_base);
+ dbg(" Full name of network contents[%s]", p_pnn->full_name);
+
+ s_name_base = (int)p_in[1] + 2;
+ dbg(" short name base byte [0x%02x]", s_name_base);
- /*Short Name for network IEI(Information Element Identifier), 0x45*/
+ /* Short Name for network IEI(Information Element Identifier), 0x45 */
if (p_in[s_name_base] == 0x45) {
- dbg( " Short name of network IEI exist");
- //s_name_part includes information byte.
- s_name_len = p_in[s_name_base +1] -1;
+ dbg(" Short name of network IEI exist");
+
+ /* s_name_part includes information byte. */
+ s_name_len = p_in[s_name_base + 1] - 1;
if ((p_in[s_name_base + 2] & 0x70) >> 4 == 0) {
- dbg( "DCS:GSM7");
- // In case of GSM7, 35byte packing data will be converted 40 bytes unpacking string.
+ dbg("DCS:GSM7");
+
+ /*
+ * In case of GSM7, 35byte packing data
+ * will be converted 40 bytes unpacking string.
+ */
if (s_name_len > (SIM_NW_FULL_NAME_LEN_MAX * 7) / 8)
s_name_len = (SIM_NW_FULL_NAME_LEN_MAX * 7) / 8;
- _unpack_7bit28bit(p_in + s_name_base + 3, s_name_len, (unsigned char *) (p_pnn->short_name));
- } else if ((p_in[s_name_base +2] & 0x70) >> 4 == 1) {
- dbg( "DCS:UCS2");
+ _unpack_7bit28bit(p_in + s_name_base + 3,
+ s_name_len, (unsigned char *)(p_pnn->short_name));
+ } else if ((p_in[s_name_base + 2] & 0x70) >> 4 == 1) {
+ dbg("DCS:UCS2");
+
if (s_name_len > SIM_NW_FULL_NAME_LEN_MAX)
s_name_len = SIM_NW_FULL_NAME_LEN_MAX;
- _ucs2_to_utf8(s_name_len, p_in + s_name_base+ 3, (int*) &cvt_leng, (unsigned char *) (p_pnn->short_name));
+ _ucs2_to_utf8(s_name_len, p_in + s_name_base + 3,
+ (int *)&cvt_leng, (unsigned char *)(p_pnn->short_name));
} else {
- dbg( "DCS:unknown");
+ dbg("DCS:unknown");
+
return FALSE;
}
- dbg( " Short name of network contents[%s]", p_pnn->short_name);
+
+ dbg(" Short name of network contents[%s]", p_pnn->short_name);
}
+
return TRUE;
}
+
return FALSE;
}
gboolean tcore_sim_decode_oplmnwact(struct tel_sim_oplmnwact_list *p_list, unsigned char *p_in, int in_length)
{
unsigned long m = 0;
-//unsigned long k, j, m = 0;
-// unsigned char mask = 0x00;
- //current raw data can include invalid OPLMN data(ex: ff ff ff 00 00). so we can`t decide the number of OPLMN records directly.
+ /*
+ * current raw data can include invalid OPLMN data(ex: ff ff ff 00 00).
+ * so we can`t decide the number of OPLMN records directly.
+ */
int rawOplmnWactCount = 0;
int i = 0;
- memset((void*) p_list, 0, sizeof(struct tel_sim_oplmnwact_list));
+ memset((void *)p_list, 0, sizeof(struct tel_sim_oplmnwact_list));
rawOplmnWactCount = in_length / 5;
- dbg( "rawOplmnWactCount[%d]", rawOplmnWactCount);
+ dbg("rawOplmnWactCount[%d]", rawOplmnWactCount);
for (i = 0; i < rawOplmnWactCount; i++) {
-
- //Regarding current IPC data, even if there`s no OPLMN value, IPC data is sending with 'ff ff ff 00 00'. so we should check for validation.
+ /*
+ * Regarding current IPC data, even if there`s no OPLMN value,
+ * IPC data is sending with 'ff ff ff 00 00'. so we should check for validation.
+ */
if (p_in[m] == 0xff) {
p_list->opwa_count = m / 5;
- dbg("OPLMN(MCC+MNC) value is not found at p_in[m]=[%lu].So OPLMN count is [%d]", m, p_list->opwa_count);
+ dbg("OPLMN(MCC+MNC) value is not found at p_in[m]=[%lu].So OPLMN count is [%d]",
+ m, p_list->opwa_count);
return TRUE;
}
_decode_plmn(&p_in[m], p_list->opwa[i].plmn);
- dbg( "[%d] OPLMN PLMN Code[%s]", i, p_list->opwa[i].plmn);
+ dbg("[%d] OPLMN PLMN Code[%s]", i, p_list->opwa[i].plmn);
- if(p_in[m+3] & 0x80)
+ if (p_in[m+3] & 0x80)
p_list->opwa[i].b_umts = 1;
- if(p_in[m+4] & 0x80)
+ if (p_in[m+4] & 0x80)
p_list->opwa[i].b_gsm = 1;
m = m + 5;
}
p_list->opwa_count = rawOplmnWactCount;
- dbg( "OPLMN count is p_list->opwa_count[%d]", p_list->opwa_count);
+ dbg("OPLMN count is p_list->opwa_count[%d]", p_list->opwa_count);
return TRUE;
}
+gboolean tcore_sim_decode_ef_info(struct tcore_sim_ef_info *p_ef_info, CoreObject *o, char *p_in, int in_length)
+{
+ unsigned short arr_file_id = 0;
+ char *record_data = NULL;
+ unsigned char file_type_tag = SIM_FILE_TYPE_TAG;
+ unsigned char *ptr_data;
+ unsigned char file_id_len = 0;
+ gboolean ret = FALSE;
+
+ if (!p_ef_info) {
+ err("output parameter is null");
+ return ret;
+ }
+
+ if (_is_empty((unsigned char *)p_in, in_length) == TRUE) {
+ memset(p_ef_info, 0x00, sizeof(struct tcore_sim_ef_info));
+ return ret; /* Empty record */
+ }
+
+ record_data = tcore_util_convert_hexstring_to_bytes(p_in);
+ if (!record_data) {
+ err("tcore_util_convert_hexstring_to_bytes Failed!!");
+ return ret;
+ }
+ tcore_util_hex_dump(" ", strlen(p_in) / 2, record_data);
+
+ ptr_data = (unsigned char *)record_data;
+ switch (tcore_sim_get_type(o)) {
+ case SIM_TYPE_USIM: {
+ /*
+ * ETSI TS 102 221 v7.9.0
+ * - Response Data
+ * '62' FCP template tag
+ * - Response for an EF
+ * '82' M File Descriptor
+ * '83' M File Identifier
+ * 'A5' O Proprietary information
+ * '8A' M Life Cycle Status Integer
+ * '8B', '8C' or 'AB' C1 Security attributes
+ * '80' M File size
+ * '81' O Total file size
+ * '88' O Short File Identifier (SFI)
+ */
+
+ /* FCP template tag - File Control Parameters tag*/
+ if (*ptr_data == SIM_FCP_TEMPLATE_TAG) {
+ /* parse complete FCP tag. increment to next byte*/
+ ptr_data++;
+
+ dbg("tag_len: %02x", *ptr_data++);
+ /* FCP file descriptor - file type, accessibility, DF, ADF etc*/
+ if (*ptr_data == SIM_FILE_DESCRIPTOR_TAG) {
+ /* increment to next byte */
+ ptr_data++;
+
+ /* 2 or 5 value*/
+ ptr_data++;
+
+ /* consider only last 3 bits*/
+ file_type_tag = file_type_tag & (*ptr_data);
+ dbg("File Type Tag: %02x", file_type_tag);
+
+ switch (file_type_tag) {
+ case SIM_FTYPE_TRANSPARENT:
+ dbg("FileType: [Transparent file type]");
+ p_ef_info->file_type = SIM_FTYPE_TRANSPARENT;
+
+ /* increment to next byte */
+ ptr_data++;
+
+ /* increment to next byte */
+ ptr_data++;
+ break;
+
+ case SIM_FTYPE_LINEAR_FIXED:
+ dbg("FileType: [Linear fixed file type]");
+ /* increment to next byte */
+ ptr_data++;
+
+ /* data coding byte - value 21 */
+ ptr_data++;
+
+ /* 2bytes */
+ memcpy(&p_ef_info->record_length, ptr_data, 2);
+
+ /* swap bytes */
+ p_ef_info->record_length = _swap_bytes16(p_ef_info->record_length);
+ ptr_data = ptr_data + 2;
+ p_ef_info->number_of_records = *ptr_data++;
+
+ /* Data lossy conversation from enum (int) to unsigned char */
+ p_ef_info->file_type = SIM_FTYPE_LINEAR_FIXED;
+ break;
+
+ case SIM_FTYPE_CYCLIC:
+ dbg("FileType: [Cyclic fixed file type]");
+ /* increment to next byte */
+ ptr_data++;
+
+ /* data coding byte - value 21 */
+ ptr_data++;
+
+ /* 2bytes */
+ memcpy(&p_ef_info->record_length, ptr_data, 2);
+
+ /* swap bytes */
+ p_ef_info->record_length = _swap_bytes16(p_ef_info->record_length);
+ ptr_data = ptr_data + 2;
+ p_ef_info->number_of_records = *ptr_data++;
+ p_ef_info->file_type = SIM_FTYPE_CYCLIC;
+
+ break;
+
+ default:
+ err("Unhandled File Type [0x%x]", *ptr_data);
+ break;
+ }
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ goto EXIT;
+ }
+
+ /* File identifier - file id */ /* 0x84, 0x85, 0x86 etc are currently ignored and not handled */
+ if (*ptr_data == SIM_FILE_IDENTIFIER_TAG) {
+ /* increment to next byte */
+ ptr_data++;
+ file_id_len = *ptr_data++;
+ dbg("File ID length: %02x", file_id_len);
+
+ memcpy(&p_ef_info->file_id, ptr_data, file_id_len);
+ dbg("File ID: %x", p_ef_info->file_id);
+
+ /* swap bytes */
+ p_ef_info->file_id = _swap_bytes16(p_ef_info->file_id);
+
+ ptr_data = ptr_data + 2;
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ goto EXIT;
+ }
+
+ /* proprietary information */
+ if (*ptr_data == SIM_PROPRIETARY_INFORMATION_TAG) {
+ unsigned short prop_len;
+ /* increment to next byte */
+ ptr_data++;
+
+ /* length */
+ prop_len = *ptr_data;
+ dbg("prop_len: %02x", prop_len);
+
+ /* skip data */
+ ptr_data = ptr_data + prop_len + 1;
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ }
+
+ /* life cycle status integer [8A][length:0x01][status]*/
+ /*
+ * status info b8~b1
+ * 00000000 : No information given
+ * 00000001 : creation state
+ * 00000011 : initialization state
+ * 000001-1 : operation state -activated
+ * 000001-0 : operation state -deactivated
+ * 000011-- : Termination state
+ * b8~b5 !=0, b4~b1=X : Proprietary
+ * Any other value : RFU
+ */
+ if (*ptr_data == SIM_LIFE_CYCLE_STATUS_TAG) {
+ /* increment to next byte */
+ ptr_data++;
+
+ /* length - value 1 */
+ ptr_data++;
+
+ switch (*ptr_data) {
+ case 0x04:
+ case 0x06:
+ dbg("Operation state - Deactivated");
+ ptr_data++;
+ break;
+
+ case 0x05:
+ case 0x07:
+ dbg("Operation state - Activated");
+ ptr_data++;
+ break;
+
+ default:
+ dbg("DEBUG! LIFE CYCLE STATUS =[0x%x]", *ptr_data);
+ ptr_data++;
+ break;
+ }
+ }
+
+ /* related to security attributes : currently not handled*/
+ if (*ptr_data == 0x86 || *ptr_data == 0x8B || *ptr_data == 0x8C || *ptr_data == 0xAB) {
+ /* increment to next byte */
+ ptr_data++;
+
+ /* if tag length is 3 */
+ if (*ptr_data == 0x03) {
+ /* increment to next byte */
+ ptr_data++;
+
+ /* EFARR file id */
+ memcpy(&arr_file_id, ptr_data, 2);
+
+ /* swap byes */
+ arr_file_id = _swap_bytes16(arr_file_id);
+ ptr_data = ptr_data + 2;
+ ptr_data++;
+ } else {
+ /* if tag length is not 3 */
+ /* ignoring bytes */
+ dbg("Useless security attributes, so jump to next tag");
+ ptr_data = ptr_data + (*ptr_data + 1);
+ }
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ goto EXIT;
+ }
+
+ /* file size excluding structural info*/
+ if (*ptr_data == SIM_FILE_SIZE_TAG) {
+ /*
+ * for EF file size is body of file and for Linear or cyclic it is
+ * number of recXsizeof(one record)
+ */
+ /* increment to next byte */
+ ptr_data++;
+
+ /* length is 1 byte - value is 2 bytes or more */
+ ptr_data++;
+ memcpy(&p_ef_info->file_size, ptr_data, 2);
+
+ /* swap bytes */
+ p_ef_info->file_size = _swap_bytes16(p_ef_info->file_size);
+ ptr_data = ptr_data + 2;
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ goto EXIT;
+ }
+
+ /* total file size including structural info*/
+ if (*ptr_data == SIM_TOTAL_FILE_SIZE_TAG) {
+ /* increment to next byte */
+ ptr_data++;
+ /* ignored bytes */
+ ptr_data = ptr_data + 3;
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ /* 0x81 is optional tag?? check out! so do not return -1 from here! */
+ }
+
+ /*short file identifier ignored*/
+ if (*ptr_data == SIM_SHORT_FILE_IDENTIFIER_TAG) {
+ dbg("0x88: Do Nothing");
+ /* DO NOTHING */
+ }
+ } else {
+ err("INVALID FCP received[0x%x] - Debug!", *ptr_data);
+ goto EXIT;
+ }
+ }
+ break;
+ case SIM_TYPE_GSM: {
+ /*Ignore RFU byte1 and byte2 */
+ ptr_data++;
+ ptr_data++;
+
+ /* file size */
+ memcpy(&p_ef_info->file_size, ptr_data, 2);
+
+ /* swap bytes */
+ p_ef_info->file_size = _swap_bytes16(p_ef_info->file_size);
+
+ /* parsed file size */
+ ptr_data = ptr_data + 2;
+
+ /* file id */
+ memcpy(&p_ef_info->file_id, ptr_data, 2);
+ p_ef_info->file_id = _swap_bytes16(p_ef_info->file_id);
+ ptr_data = ptr_data + 2;
+
+ /* save file type - transparent, linear fixed or cyclic */
+ file_type_tag = (*(ptr_data + 7));
+
+ switch (*ptr_data) {
+ case SIM_FTYPE_RFU:
+ /* RFU file type */
+ dbg("RFU file type- not handled - Debug!");
+ break;
+
+ case SIM_FTYPE_MF:
+ /* MF file type */
+ dbg("MF file type - not handled - Debug!");
+ break;
+
+ case SIM_FTYPE_DF:
+ /* DF file type */
+ dbg("DF file type - not handled - Debug!");
+ break;
+
+ case SIM_FTYPE_EF:
+ /* EF file type */
+ dbg("EF file type tag[%d] ", file_type_tag);
+ /* increment to next byte */
+ ptr_data++;
+
+ if (file_type_tag == 0x00 || file_type_tag == 0x01) {
+ /* increament to next byte as this byte is RFU */
+ ptr_data++;
+ p_ef_info->file_type = (file_type_tag == 0x00) ? SIM_FTYPE_TRANSPARENT : SIM_FTYPE_LINEAR_FIXED;
+ } else {
+ /* increment to next byte */
+ ptr_data++;
+
+ /* For a cyclic EF all bits except bit 7 are RFU; b7=1 indicates that */
+ /* the INCREASE command is allowed on the selected cyclic file. */
+ p_ef_info->file_type = SIM_FTYPE_CYCLIC;
+ }
+
+ /* bytes 9 to 11 give SIM file access conditions */
+ ptr_data++;
+
+ /* byte 10 has one nibble that is RF U and another for INCREASE which is not used currently */
+ ptr_data++;
+
+ /* byte 11 is invalidate and rehabilate nibbles */
+ ptr_data++;
+
+ /* byte 12 - file status */
+ ptr_data++;
+
+ /* byte 13 - GSM specific data */
+ ptr_data++;
+
+ /* byte 14 - structure of EF - transparent or linear or cyclic , already saved above */
+ ptr_data++;
+
+ /* byte 15 - length of record for linear and cyclic , for transparent it is set to 0x00. */
+ p_ef_info->record_length = *ptr_data;
+ if (p_ef_info->record_length != 0)
+ p_ef_info->number_of_records = (p_ef_info->file_size / p_ef_info->record_length);
+ break;
+
+ default:
+ err("Unhandled file type[0x%x]", *ptr_data);
+ break;
+ }
+ }
+ break;
+ default:
+ err("Unknown SIM type [%d]", tcore_sim_get_type(o));
+ break;
+ }
+
+ ret = TRUE;
+
+EXIT:
+ g_free(record_data);
+ return ret;
+}
+
enum tel_sim_status tcore_sim_get_status(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return -1;
}
+
return po->sim_status;
}
gboolean tcore_sim_set_status(CoreObject *o, enum tel_sim_status status)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
po->sim_status = status;
return TRUE;
gboolean tcore_sim_get_identification(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return -1;
}
+
return po->b_sim_changed;
}
enum tel_sim_type tcore_sim_get_type(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return -1;
}
+
return po->type;
}
gboolean tcore_sim_set_type(CoreObject *o, enum tel_sim_type type)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
po->type = type;
+
return TRUE;
}
-struct tel_sim_imsi* tcore_sim_get_imsi(CoreObject *o)
+struct tel_sim_imsi *tcore_sim_get_imsi(CoreObject *o)
{
- struct tel_sim_imsi *tmp_imsi;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return NULL;
}
- tmp_imsi = calloc(1, sizeof(struct tel_sim_imsi));
- memcpy(tmp_imsi, &po->imsi, sizeof(struct tel_sim_imsi));
- return tmp_imsi;
+
+ return g_memdup(&po->imsi, sizeof(struct tel_sim_imsi));
}
gboolean tcore_sim_set_imsi(CoreObject *o, const struct tel_sim_imsi *imsi)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
memcpy(&po->imsi, imsi, sizeof(struct tel_sim_imsi));
+
return TRUE;
}
-struct tel_sim_msisdn_list* tcore_sim_get_msisdn_list(CoreObject *o)
+struct tel_sim_msisdn_list *tcore_sim_get_msisdn_list(CoreObject *o)
{
- struct tel_sim_msisdn_list *tmp_msisdn_list;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->msisdn_list is NULL");
return NULL;
}
- tmp_msisdn_list = calloc(1, sizeof(struct tel_sim_msisdn_list));
- memcpy(tmp_msisdn_list, po->msisdn_list, sizeof(struct tel_sim_msisdn_list));
- return tmp_msisdn_list;
+
+ return g_memdup(po->msisdn_list, sizeof(struct tel_sim_msisdn_list));
}
gboolean tcore_sim_set_msisdn_list(CoreObject *o, const struct tel_sim_msisdn_list *msisdn_list)
{
- struct tel_sim_msisdn_list *empty_msisdn_list = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!msisdn_list) {
- empty_msisdn_list = calloc(1, sizeof(struct tel_sim_msisdn_list));
- msisdn_list = empty_msisdn_list;
- }
- if (po->msisdn_list) {
- memcpy(po->msisdn_list, msisdn_list, sizeof(struct tel_sim_msisdn_list));
+ if (po->msisdn_list) {
+ if (msisdn_list)
+ memcpy(po->msisdn_list, msisdn_list, sizeof(struct tel_sim_msisdn_list));
+ else
+ memset(po->msisdn_list, 0x0, sizeof(struct tel_sim_msisdn_list));
} else {
- struct tel_sim_msisdn_list *tmp_msisdn_list = NULL;
- tmp_msisdn_list = calloc(1, sizeof(struct tel_sim_msisdn_list));
- memcpy(tmp_msisdn_list, msisdn_list, sizeof(struct tel_sim_msisdn_list));
- po->msisdn_list = tmp_msisdn_list;
+ if (msisdn_list)
+ po->msisdn_list = g_memdup(msisdn_list, sizeof(struct tel_sim_msisdn_list));
+ else
+ po->msisdn_list = g_malloc0(sizeof(struct tel_sim_msisdn_list));
}
- if (empty_msisdn_list)
- free(empty_msisdn_list);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_msisdn_list(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return TCORE_RETURN_SUCCESS;
}
-struct tel_sim_service_table* tcore_sim_get_service_table(CoreObject *o)
+struct tel_sim_service_table *tcore_sim_get_service_table(CoreObject *o)
{
- struct tel_sim_service_table *tmp_svct;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->svct is NULL.");
return NULL;
}
- tmp_svct = calloc(1, sizeof(struct tel_sim_service_table));
- memcpy(tmp_svct, po->svct, sizeof(struct tel_sim_service_table));
- return tmp_svct;
+
+ return g_memdup(po->svct, sizeof(struct tel_sim_service_table));
}
gboolean tcore_sim_set_service_table(CoreObject *o, const struct tel_sim_service_table *svct)
{
struct private_object_data *po = NULL;
- struct tel_sim_service_table *empty_svct = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!svct) {
- empty_svct = calloc(1, sizeof(struct tel_sim_service_table));
- svct = empty_svct;
- }
- if (po->svct) {
- memcpy(po->svct, svct, sizeof(struct tel_sim_service_table));
+ if (po->svct) {
+ if (svct)
+ memcpy(po->svct, svct, sizeof(struct tel_sim_service_table));
+ else
+ memset(po->svct, 0x0, sizeof(struct tel_sim_service_table));
} else {
- struct tel_sim_service_table *tmp_svct = NULL;
- tmp_svct = calloc(1, sizeof(struct tel_sim_service_table));
- memcpy(tmp_svct, svct, sizeof(struct tel_sim_service_table));
- po->svct = tmp_svct;
+ if (svct)
+ po->svct = g_memdup(svct, sizeof(struct tel_sim_service_table));
+ else
+ po->svct = g_malloc0(sizeof(struct tel_sim_service_table));
}
- if(empty_svct)
- free(empty_svct);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_service_table(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_sim_get_cphs_status(CoreObject *o){
+gboolean tcore_sim_get_cphs_status(CoreObject *o)
+{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
return po->b_cphs;
}
-gboolean tcore_sim_set_cphs_status(CoreObject *o, gboolean b_support){
+gboolean tcore_sim_set_cphs_status(CoreObject *o, gboolean b_support)
+{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
po->b_cphs = b_support;
+
return TRUE;
}
-struct tel_sim_cphs_csp* tcore_sim_get_csp(CoreObject *o)
+struct tel_sim_cphs_csp *tcore_sim_get_csp(CoreObject *o)
{
- struct tel_sim_cphs_csp *tmp_csp;
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
dbg("po->csp is NULL");
return NULL;
}
- tmp_csp = calloc(1, sizeof(struct tel_sim_cphs_csp));
- if (!tmp_csp) {
- err("memory allocation failed");
- return NULL;
- }
- memcpy(tmp_csp, po->csp, sizeof(struct tel_sim_cphs_csp));
- return tmp_csp;
+
+ return g_memdup(po->csp, sizeof(struct tel_sim_cphs_csp));
}
gboolean tcore_sim_set_csp(CoreObject *o, const struct tel_sim_cphs_csp *csp)
{
- struct tel_sim_cphs_csp *empty_csp = NULL;
struct private_object_data *po = NULL;
po = tcore_object_ref_object(o);
dbg("po access fail");
return FALSE;
}
- if (!csp) {
- empty_csp = calloc(1, sizeof(struct tel_sim_cphs_csp));
- csp = empty_csp;
- }
- if (!(po->csp)) {
- po->csp = calloc(1, sizeof(struct tel_sim_cphs_csp));
- if (!(po->csp)) {
- err("memory allocation failed");
- free(empty_csp);
- return FALSE;
- }
+ if (po->csp) {
+ if (csp)
+ memcpy(po->csp, csp, sizeof(struct tel_sim_cphs_csp));
+ else
+ memset(po->csp, 0x0, sizeof(struct tel_sim_cphs_csp));
+ } else {
+ if (csp)
+ po->csp = g_memdup(csp, sizeof(struct tel_sim_cphs_csp));
+ else
+ po->csp = g_malloc0(sizeof(struct tel_sim_cphs_csp));
}
- memcpy(po->csp, csp, sizeof(struct tel_sim_cphs_csp));
- if (empty_csp)
- free(empty_csp);
return TRUE;
}
return TRUE;
}
-struct tel_sim_ecc_list* tcore_sim_get_ecc_list(CoreObject *o)
+struct tel_sim_ecc_list *tcore_sim_get_ecc_list(CoreObject *o)
{
- struct tel_sim_ecc_list *tmp_ecc_list;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->ecc_list is NULL");
return NULL;
}
- tmp_ecc_list = calloc(1, sizeof(struct tel_sim_ecc_list));
- memcpy(tmp_ecc_list, po->ecc_list, sizeof(struct tel_sim_ecc_list));
- return tmp_ecc_list;
+
+ return g_memdup(po->ecc_list, sizeof(struct tel_sim_ecc_list));
}
gboolean tcore_sim_set_ecc_list(CoreObject *o, const struct tel_sim_ecc_list *ecc_list)
{
- struct tel_sim_ecc_list *empty_ecc_list = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!ecc_list) {
- empty_ecc_list = calloc(1, sizeof(struct tel_sim_ecc_list));
- ecc_list = empty_ecc_list;
- }
- if (po->ecc_list) {
- memcpy(po->ecc_list, ecc_list, sizeof(struct tel_sim_ecc_list));
+ if (po->ecc_list) {
+ if (ecc_list)
+ memcpy(po->ecc_list, ecc_list, sizeof(struct tel_sim_ecc_list));
+ else
+ memset(po->ecc_list, 0x0, sizeof(struct tel_sim_ecc_list));
} else {
- struct tel_sim_ecc_list *tmp_ecc_list = NULL;
- tmp_ecc_list = calloc(1, sizeof(struct tel_sim_ecc_list));
- memcpy(tmp_ecc_list, ecc_list, sizeof(struct tel_sim_ecc_list));
- po->ecc_list = tmp_ecc_list;
+ if (ecc_list)
+ po->ecc_list = g_memdup(ecc_list, sizeof(struct tel_sim_ecc_list));
+ else
+ po->ecc_list = g_malloc0(sizeof(struct tel_sim_ecc_list));
}
- if (empty_ecc_list)
- free(empty_ecc_list);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_ecc_list(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return TCORE_RETURN_SUCCESS;
}
-struct tel_sim_spn* tcore_sim_get_spn(CoreObject *o)
+struct tel_sim_spn *tcore_sim_get_spn(CoreObject *o)
{
- struct tel_sim_spn *tmp_spn;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->spn is NULL");
return NULL;
}
- tmp_spn = calloc(1, sizeof(struct tel_sim_spn));
- memcpy(tmp_spn, po->spn, sizeof(struct tel_sim_spn));
- return tmp_spn;
+
+ return g_memdup(po->spn, sizeof(struct tel_sim_spn));
}
gboolean tcore_sim_set_spn(CoreObject *o, const struct tel_sim_spn *spn)
{
- struct tel_sim_spn *empty_spn = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!spn) {
- empty_spn = calloc(1, sizeof(struct tel_sim_spn));
- spn = empty_spn;
- }
- if (po->spn) {
- memcpy(po->spn, spn, sizeof(struct tel_sim_spn));
+ if (po->spn) {
+ if (spn)
+ memcpy(po->spn, spn, sizeof(struct tel_sim_spn));
+ else
+ memset(po->spn, 0x0, sizeof(struct tel_sim_spn));
} else {
- struct tel_sim_spn *tmp_spn = NULL;
- tmp_spn = calloc(1, sizeof(struct tel_sim_spn));
- memcpy(tmp_spn, spn, sizeof(struct tel_sim_spn));
- po->spn = tmp_spn;
+ if (spn)
+ po->spn = g_memdup(spn, sizeof(struct tel_sim_spn));
+ else
+ po->spn = g_malloc0(sizeof(struct tel_sim_spn));
}
- if (empty_spn)
- free(empty_spn);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_spn(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return TCORE_RETURN_SUCCESS;
}
-struct tel_sim_cphs_netname* tcore_sim_get_cphs_netname(CoreObject *o)
+struct tel_sim_cphs_netname *tcore_sim_get_cphs_netname(CoreObject *o)
{
- struct tel_sim_cphs_netname *tmp_cphs_netname;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->cphs_netname is NULL");
return NULL;
}
- tmp_cphs_netname = calloc(1, sizeof(struct tel_sim_cphs_netname));
- memcpy(tmp_cphs_netname, po->cphs_netname, sizeof(struct tel_sim_cphs_netname));
- return tmp_cphs_netname;
+
+ return g_memdup(po->cphs_netname, sizeof(struct tel_sim_cphs_netname));
}
gboolean tcore_sim_set_cphs_netname(CoreObject *o, const struct tel_sim_cphs_netname *cphs_netname)
{
- struct tel_sim_cphs_netname *empty_cphs_netname = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!cphs_netname) {
- empty_cphs_netname = calloc(1, sizeof(struct tel_sim_cphs_netname));
- cphs_netname = empty_cphs_netname;
- }
- if (po->cphs_netname) {
- memcpy(po->cphs_netname, cphs_netname, sizeof(struct tel_sim_cphs_netname));
+ if (po->cphs_netname) {
+ if (cphs_netname)
+ memcpy(po->cphs_netname, cphs_netname, sizeof(struct tel_sim_cphs_netname));
+ else
+ memset(po->cphs_netname, 0x0, sizeof(struct tel_sim_cphs_netname));
} else {
- struct tel_sim_cphs_netname *tmp_cphs_netname = NULL;
- tmp_cphs_netname = calloc(1, sizeof(struct tel_sim_cphs_netname));
- memcpy(tmp_cphs_netname, cphs_netname, sizeof(struct tel_sim_cphs_netname));
- po->cphs_netname = tmp_cphs_netname;
+ if (cphs_netname)
+ po->cphs_netname = g_memdup(cphs_netname, sizeof(struct tel_sim_cphs_netname));
+ else
+ po->cphs_netname = g_malloc0(sizeof(struct tel_sim_cphs_netname));
}
- if (empty_cphs_netname)
- free(empty_cphs_netname);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_cphs_netname(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return TCORE_RETURN_SUCCESS;
}
-struct tel_sim_iccid* tcore_sim_get_iccid(CoreObject *o)
+struct tel_sim_iccid *tcore_sim_get_iccid(CoreObject *o)
{
- struct tel_sim_iccid *tmp_iccid;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
dbg("po->iccid is NULL");
return NULL;
}
- tmp_iccid = calloc(1, sizeof(struct tel_sim_iccid));
- memcpy(tmp_iccid, po->iccid, sizeof(struct tel_sim_iccid));
- return tmp_iccid;
+
+ return g_memdup(po->iccid, sizeof(struct tel_sim_iccid));
}
gboolean tcore_sim_set_iccid(CoreObject *o, const struct tel_sim_iccid *iccid)
{
- struct tel_sim_iccid *empty_iccid = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
- if (!iccid) {
- empty_iccid = calloc(1, sizeof(struct tel_sim_iccid));
- iccid = empty_iccid;
- }
- if (po->iccid) {
- memcpy(po->iccid, iccid, sizeof(struct tel_sim_iccid));
+ if (po->iccid) {
+ if (iccid)
+ memcpy(po->iccid, iccid, sizeof(struct tel_sim_iccid));
+ else
+ memset(po->iccid, 0x0, sizeof(struct tel_sim_iccid));
} else {
- struct tel_sim_iccid *tmp_iccid = NULL;
- tmp_iccid = calloc(1, sizeof(struct tel_sim_iccid));
- memcpy(tmp_iccid, iccid, sizeof(struct tel_sim_iccid));
- po->iccid = tmp_iccid;
+ if (iccid)
+ po->iccid = g_memdup(iccid, sizeof(struct tel_sim_iccid));
+ else
+ po->iccid = g_malloc0(sizeof(struct tel_sim_iccid));
}
- if (empty_iccid)
- free(empty_iccid);
-
return TRUE;
}
enum tcore_return tcore_sim_delete_iccid(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
gboolean tcore_sim_link_userdata(CoreObject *o, void *userdata)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return FALSE;
}
+
po->userdata = userdata;
+
return TRUE;
}
-void* tcore_sim_ref_userdata(CoreObject *o)
+void *tcore_sim_ref_userdata(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po || !po->userdata) {
dbg("po access fail");
return NULL;
}
+
return po->userdata;
}
{
struct tcore_sim_operations *tmp_ops = NULL;
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
dbg("po access fail");
return;
}
- tmp_ops = po->ops;
+ /* set ops to default type when core object is created. */
+ tmp_ops = po->ops[TCORE_OPS_TYPE_CP];
+
memset(po, 0x00, sizeof(struct private_object_data));
- po->ops = tmp_ops;
+ po->ops[TCORE_OPS_TYPE_CP] = tmp_ops;
po->sim_status = SIM_STATUS_UNKNOWN;
}
unsigned char tcore_sim_get_app_list(CoreObject *o)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
err("po access fail");
return 0;
}
+
return po->app_list;
}
gboolean tcore_sim_set_app_list(CoreObject *o, unsigned char app_list)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
err("po access fail");
}
po->app_list = app_list;
+
return TRUE;
}
struct tel_sim_ist *tcore_sim_get_isim_service_table(CoreObject *o)
{
struct private_object_data *po = NULL;
- struct tel_sim_ist *ist;
+
po = tcore_object_ref_object(o);
if (!po) {
err("po access fail");
return NULL;
}
+
if (!po->ist) {
err("po->ist is NULL");
return NULL;
}
- ist = calloc(1, sizeof(struct tel_sim_ist));
- memcpy(ist, po->ist, sizeof(struct tel_sim_ist));
- return ist;
+ return g_memdup(po->ist, sizeof(struct tel_sim_ist));
}
gboolean tcore_sim_set_isim_service_table(CoreObject *o, struct tel_sim_ist *ist)
{
struct private_object_data *po = NULL;
+
po = tcore_object_ref_object(o);
if (!po) {
err("po access fail");
return FALSE;
}
+
if (!ist) {
err("ist is NULL");
return FALSE;
}
- if (po->ist) {
- memcpy(po->ist, ist, sizeof(struct tel_sim_ist));
- } else {
- po->ist = calloc(1, sizeof(struct tel_sim_ist));
+ if (po->ist)
memcpy(po->ist, ist, sizeof(struct tel_sim_ist));
- }
+ else
+ po->ist = g_memdup(ist, sizeof(struct tel_sim_ist));
+
return TRUE;
}
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_SIM);
tcore_object_link_object(o, po);
tcore_object_set_free_hook(o, _free_hook);
- tcore_object_set_clone_hook(o, _clone_hook);
tcore_object_set_dispatcher(o, _dispatcher);
tcore_sim_initialize_context(o);
tcore_object_free(o);
}
-void tcore_sim_set_ops(CoreObject *o, struct tcore_sim_operations *ops)
+void tcore_sim_set_ops(CoreObject *o, struct tcore_sim_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_SIM);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "user_request.h"
#include "co_sms.h"
struct private_object_data {
- struct tcore_sms_operations *ops;
+ struct tcore_sms_operations *ops[TCORE_OPS_TYPE_MAX];
enum telephony_sms_ready_status SmsReadyStatus;
};
-int _tcore_util_sms_encode_smsParameters(const struct telephony_sms_Params *incoming, unsigned char *data, int SMSPRecordLen)
+int _tcore_util_sms_encode_smsParameters(const struct telephony_sms_Params *incoming,
+ unsigned char *data, int SMSPRecordLen)
{
struct telephony_sms_Params *smsParams = (struct telephony_sms_Params *)incoming;
unsigned int nPIDIndex = 0;
unsigned char nOffset = 0;
- if(incoming == NULL || data == NULL)
+ if (incoming == NULL || data == NULL)
return FALSE;
- memset(data, 0xff, SMSPRecordLen);//pSmsParam->RecordLen);
+ memset(data, 0xff, SMSPRecordLen);
dbg(" Record index = %d", (int) smsParams->recordIndex);
dbg(" Alpha ID Len = %d", (int) smsParams->alphaIdLen);
- dbg(" Record Length : %d", SMSPRecordLen);//pSmsParam->RecordLen);
+ dbg(" Record Length : %d", SMSPRecordLen);
- if (SMSPRecordLen/*pSmsParam->RecordLen*/>= nDefaultSMSPWithoutAlphaId) {
- nPIDIndex = SMSPRecordLen
- /*pSmsParam->RecordLen*/- nDefaultSMSPWithoutAlphaId;
- }
+ if (SMSPRecordLen/*pSmsParam->RecordLen*/>= nDefaultSMSPWithoutAlphaId)
+ nPIDIndex = SMSPRecordLen /*pSmsParam->RecordLen*/- nDefaultSMSPWithoutAlphaId;
- //dongil01.park(2008/12/27) - Check Point
- memcpy(data, smsParams->szAlphaId, (int) nPIDIndex/*pSmsParam->AlphaIdLen*/);
+ /* dongil01.park(2008/12/27) - Check Point */
+ memcpy(data, smsParams->szAlphaId, (int)nPIDIndex/*pSmsParam->AlphaIdLen*/);
dbg(" Alpha ID : %s", smsParams->szAlphaId);
dbg(" nPIDIndex = %d", nPIDIndex);
data[nPIDIndex] = smsParams->paramIndicator;
- dbg(" Param Indicator = %02x", smsParams->paramIndicator);
+ dbg(" Param Indicator = %02x", smsParams->paramIndicator);
if ((smsParams->paramIndicator & SMSPValidDestAddr) == 0x00) {
nOffset = nDestAddrOffset;
dbg(" nextIndex = %d", nPIDIndex);
}
- if( (smsParams->paramIndicator & SMSPValidSvcAddr) == 0x00 )
- {
+ if ((smsParams->paramIndicator & SMSPValidSvcAddr) == 0x00) {
dbg("TON [%d] / NPI [%d]", smsParams->tpSvcCntrAddr.typeOfNum, smsParams->tpSvcCntrAddr.numPlanId);
nOffset = nSCAAddrOffset;
}
-void tcore_util_sms_semioctet_to_octect(int* nScLength) {
- if (*nScLength % 2) {
+void tcore_util_sms_semioctet_to_octect(int *nScLength)
+{
+ if (*nScLength % 2)
*nScLength = (*nScLength / 2) + 1;
- } else {
+ else
*nScLength = *nScLength / 2;
- }
-
- return;
}
-int tcore_util_sms_decode_smsParameters(uint8_t *incoming, uint32_t length, struct telephony_sms_Params *params)
+int tcore_util_sms_decode_smsParameters(uint8_t *incoming, uint32_t length,
+ struct telephony_sms_Params *params)
{
int alpha_id_len = 0;
int i = 0;
dbg(" RecordLen = %d", length);
- if(incoming == NULL || params == NULL)
+ if (incoming == NULL || params == NULL)
return FALSE;
- alpha_id_len = length -SMS_SMSP_PARAMS_MAX_LEN;
+ alpha_id_len = length - SMS_SMSP_PARAMS_MAX_LEN;
- if ( alpha_id_len > 0 )
- {
- if(alpha_id_len > SMS_SMSP_ALPHA_ID_LEN_MAX)
- {
+ if (alpha_id_len > 0) {
+ if (alpha_id_len > SMS_SMSP_ALPHA_ID_LEN_MAX)
alpha_id_len = SMS_SMSP_ALPHA_ID_LEN_MAX;
- }
- for( i=0 ; i < alpha_id_len ; i++)
- {
- if( 0xff == incoming[i])
- {
+ for (i = 0 ; i < alpha_id_len ; i++) {
+ if (0xff == incoming[i]) {
dbg(" found");
break;
}
dbg(" Alpha id length = %d", i);
- }
- else
- {
+ } else {
params->alphaIdLen = 0;
dbg(" Alpha id length is zero");
}
- //dongil01.park - start parse from here.
+ /* dongil01.park - start parse from here. */
params->paramIndicator = incoming[alpha_id_len];
dbg(" Param Indicator = %02x", params->paramIndicator);
- //dongil01.park(2008/12/26) - DestAddr
- if( (params->paramIndicator & SMSPValidDestAddr) == 0)
- {
+ /* dongil01.park(2008/12/26) - DestAddr */
+ if ((params->paramIndicator & SMSPValidDestAddr) == 0) {
nOffset = nDestAddrOffset;
- if( 0x00 == incoming[alpha_id_len + nOffset] || 0xff == incoming[alpha_id_len + nOffset])
- {
+ if (0x00 == incoming[alpha_id_len + nOffset] || 0xff == incoming[alpha_id_len + nOffset]) {
params->tpDestAddr.dialNumLen = 0;
dbg("DestAddr Length is 0");
- }
- else
- {
- if ( 0 < (int)incoming[alpha_id_len + nOffset] )
- {
- params->tpDestAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1 );
-
- if(params->tpDestAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
- params->tpDestAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
- }
- else
- {
+ } else {
+ if (0 < (int)incoming[alpha_id_len + nOffset]) {
+ params->tpDestAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
+
+ if (params->tpDestAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
+ params->tpDestAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
+ } else {
params->tpDestAddr.dialNumLen = 0;
}
- params->tpDestAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
- params->tpDestAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70 )>>4 ;
-
- memcpy( params->tpDestAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpDestAddr.dialNumLen)) ;
+ params->tpDestAddr.numPlanId = incoming[alpha_id_len + (++nOffset)] & 0x0f ;
+ params->tpDestAddr.typeOfNum = (incoming[alpha_id_len + nOffset] & 0x70)>>4 ;
- dbg("Dest TON is %d",params->tpDestAddr.typeOfNum);
- dbg("Dest NPI is %d",params->tpDestAddr.numPlanId);
- dbg("Dest Length = %d",params->tpDestAddr.dialNumLen);
- dbg("Dest Addr = %s",params->tpDestAddr.diallingNum);
+ memcpy(params->tpDestAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpDestAddr.dialNumLen)) ;
+ dbg("Dest TON is %d", params->tpDestAddr.typeOfNum);
+ dbg("Dest NPI is %d", params->tpDestAddr.numPlanId);
+ dbg("Dest Length = %d", params->tpDestAddr.dialNumLen);
+ dbg("Dest Addr = %s", params->tpDestAddr.diallingNum);
}
}
- //dongil01.park(2008/12/26) - SvcAddr
- if( (params->paramIndicator & SMSPValidSvcAddr) == 0)
- {
+ /* dongil01.park(2008/12/26) - SvcAddr */
+ if ((params->paramIndicator & SMSPValidSvcAddr) == 0) {
nOffset = nSCAAddrOffset;
- if( 0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset] )
- {
+ if (0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset]) {
params->tpSvcCntrAddr.dialNumLen = 0;
dbg(" SCAddr Length is 0");
- }
- else
- {
- if ( 0 < (int)incoming[alpha_id_len + nOffset] )
- {
+ } else {
+ if (0 < (int)incoming[alpha_id_len + nOffset]) {
params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
- if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
- params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
+ if (params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
+ params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
- params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
- params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;
+ params->tpSvcCntrAddr.numPlanId = incoming[alpha_id_len + (++nOffset)] & 0x0f ;
+ params->tpSvcCntrAddr.typeOfNum = (incoming[alpha_id_len + nOffset] & 0x70) >> 4;
- memcpy( params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpSvcCntrAddr.dialNumLen));
+ memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpSvcCntrAddr.dialNumLen));
- dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);
- dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);
- dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);
+ dbg("SCAddr Length = %d ", params->tpSvcCntrAddr.dialNumLen);
+ dbg("SCAddr TON is %d", params->tpSvcCntrAddr.typeOfNum);
+ dbg("SCAddr NPI is %d", params->tpSvcCntrAddr.numPlanId);
- for( i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)
- dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);
- }
- else
- {
+ for (i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i++)
+ dbg("SCAddr = %d [%02x]", i, params->tpSvcCntrAddr.diallingNum[i]);
+ } else
params->tpSvcCntrAddr.dialNumLen = 0;
- }
}
- }
- else if ( (0x00 < (int)incoming[alpha_id_len +nSCAAddrOffset] && (int)incoming[alpha_id_len +nSCAAddrOffset] <= 12 )
- || 0xff != (int)incoming[alpha_id_len +nSCAAddrOffset])
- {
+ } else if ((0x00 < (int)incoming[alpha_id_len + nSCAAddrOffset]
+ && (int)incoming[alpha_id_len + nSCAAddrOffset] <= 12)
+ || 0xff != (int)incoming[alpha_id_len + nSCAAddrOffset]) {
nOffset = nSCAAddrOffset;
- if( 0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset] )
- {
+ if (0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset]) {
params->tpSvcCntrAddr.dialNumLen = 0;
dbg("SCAddr Length is 0");
- }
- else
- {
+ } else {
- if ( 0 < (int)incoming[alpha_id_len + nOffset] )
- {
+ if (0 < (int)incoming[alpha_id_len + nOffset]) {
params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
- params->tpSvcCntrAddr.dialNumLen = incoming[alpha_id_len + nOffset] -1;
+ params->tpSvcCntrAddr.dialNumLen = incoming[alpha_id_len + nOffset] - 1;
- if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
- params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
+ if (params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
+ params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
- params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
- params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;
+ params->tpSvcCntrAddr.numPlanId = incoming[alpha_id_len + (++nOffset)] & 0x0f ;
+ params->tpSvcCntrAddr.typeOfNum = (incoming[alpha_id_len + nOffset] & 0x70) >> 4;
- memcpy( params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)],
- (params->tpSvcCntrAddr.dialNumLen)) ;
+ memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)],
+ (params->tpSvcCntrAddr.dialNumLen)) ;
- dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);
- dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);
- dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);
+ dbg("SCAddr Length = %d ", params->tpSvcCntrAddr.dialNumLen);
+ dbg("SCAddr TON is %d", params->tpSvcCntrAddr.typeOfNum);
+ dbg("SCAddr NPI is %d", params->tpSvcCntrAddr.numPlanId);
- for( i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)
- dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);
- }
- else
- {
+ for (i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i++)
+ dbg("SCAddr = %d [%02x]", i, params->tpSvcCntrAddr.diallingNum[i]);
+ } else
params->tpSvcCntrAddr.dialNumLen = 0;
- }
}
}
- if( (params->paramIndicator & SMSPValidPID) == 0 && (alpha_id_len + nPIDOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
- {
+ if ((params->paramIndicator & SMSPValidPID) == 0
+ && (alpha_id_len + nPIDOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
params->tpProtocolId = incoming[alpha_id_len + nPIDOffset];
- }
- if( (params->paramIndicator & SMSPValidDCS) == 0 && (alpha_id_len + nDCSOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
- {
+
+ if ((params->paramIndicator & SMSPValidDCS) == 0
+ && (alpha_id_len + nDCSOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
params->tpDataCodingScheme = incoming[alpha_id_len + nDCSOffset];
- }
- if( (params->paramIndicator & SMSPValidVP) == 0 && (alpha_id_len + nVPOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
- {
+
+ if ((params->paramIndicator & SMSPValidVP) == 0
+ && (alpha_id_len + nVPOffset) < SMS_MAX_EFSMSP_RECORD_LENGTH)
params->tpValidityPeriod = incoming[alpha_id_len + nVPOffset];
- }
- dbg(" Alpha Id(Len) = %d",(int)params->alphaIdLen);
+ dbg(" Alpha Id(Len) = %d", (int)params->alphaIdLen);
- for (i=0; i< (int)params->alphaIdLen ; i++)
- {
- dbg(" Alpha Id = [%d] [%c]",i,params->szAlphaId[i]);
- }
- dbg(" PID = %d",params->tpProtocolId);
- dbg(" DCS = %d",params->tpDataCodingScheme);
- dbg(" VP = %d",params->tpValidityPeriod);
+ for (i = 0; i < (int)params->alphaIdLen ; i++)
+ dbg(" Alpha Id = [%d] [%c]", i, params->szAlphaId[i]);
+
+ dbg(" PID = %d", params->tpProtocolId);
+ dbg(" DCS = %d", params->tpDataCodingScheme);
+ dbg(" VP = %d", params->tpValidityPeriod);
return TRUE;
}
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
- struct private_object_data *po = NULL;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_sms_operations *ops = NULL;
TReturn rtn = TCORE_RETURN_SUCCESS;
CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_SMS, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(o);
- if (!po || !po->ops) {
- dbg("[tcore_SMS] ERR: private_object is NULL or ops is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
- if(po->SmsReadyStatus == SMS_READY_STATUS_NONE) {
+ if (po->SmsReadyStatus == SMS_READY_STATUS_NONE) {
dbg("[tcore_SMS] DEVICE_NOT_READY");
return TCORE_RETURN_ENOSYS; /* TAPI_API_NETTEXT_DEVICE_NOT_READY */
}
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
+
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_SMS_SEND_UMTS_MSG:
- if (!po->ops->send_umts_msg)
- {
- dbg("[tcore_SMS] ERR: po->ops->send_umts_msg is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SEND_UMTS_MSG:
+ tcore_check_null_ret_err("ops->send_umts_msg",
+ ops->send_umts_msg, TCORE_RETURN_ENOSYS);
- rtn = po->ops->send_umts_msg(o, ur);
+ rtn = ops->send_umts_msg(o, ur);
+ break;
- break;
- case TREQ_SMS_READ_MSG:
- if (!po->ops->read_msg)
- {
- dbg("[tcore_SMS] ERR: po->ops->read_msg is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_READ_MSG:
+ tcore_check_null_ret_err("ops->connect",
+ ops->read_msg, TCORE_RETURN_ENOSYS);
- rtn = po->ops->read_msg(o, ur);
+ rtn = ops->read_msg(o, ur);
+ break;
- break;
- case TREQ_SMS_SAVE_MSG:
- if (!po->ops->save_msg)
- {
- dbg("[tcore_SMS] ERR: po->ops->save_msg is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SAVE_MSG:
+ tcore_check_null_ret_err("ops->save_msg",
+ ops->save_msg, TCORE_RETURN_ENOSYS);
- rtn = po->ops->save_msg(o, ur);
+ rtn = ops->save_msg(o, ur);
+ break;
- break;
- case TREQ_SMS_DELETE_MSG:
- if (!po->ops->delete_msg)
- {
- dbg("[tcore_SMS] ERR: po->ops->delete_msg is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_DELETE_MSG:
+ tcore_check_null_ret_err("ops->delete_msg",
+ ops->delete_msg, TCORE_RETURN_ENOSYS);
- rtn = po->ops->delete_msg(o, ur);
+ rtn = ops->delete_msg(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_COUNT:
- if (!po->ops->get_storedMsgCnt)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_storedMsgCnt is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_COUNT:
+ tcore_check_null_ret_err("ops->get_storedMsgCnt",
+ ops->get_storedMsgCnt, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_storedMsgCnt(o, ur);
+ rtn = ops->get_storedMsgCnt(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_SCA:
- if (!po->ops->get_sca)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_sca is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_SCA:
+ tcore_check_null_ret_err("ops->get_sca",
+ ops->get_sca, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_sca(o, ur);
+ rtn = ops->get_sca(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_SCA:
- if (!po->ops->set_sca)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_sca is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_SCA:
+ tcore_check_null_ret_err("ops->set_sca",
+ ops->set_sca, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_sca(o, ur);
+ rtn = ops->set_sca(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_CB_CONFIG:
- if (!po->ops->get_cb_config)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_cb_config is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_CB_CONFIG:
+ tcore_check_null_ret_err("ops->get_cb_config",
+ ops->get_cb_config, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_cb_config(o, ur);
+ rtn = ops->get_cb_config(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_CB_CONFIG:
- if (!po->ops->set_cb_config)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_cb_config is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_CB_CONFIG:
+ tcore_check_null_ret_err("ops->set_cb_config",
+ ops->set_cb_config, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_cb_config(o, ur);
+ rtn = ops->set_cb_config(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_MEM_STATUS:
- if (!po->ops->set_mem_status)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_mem_status is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_MEM_STATUS:
+ tcore_check_null_ret_err("ops->set_mem_status",
+ ops->set_mem_status, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_mem_status(o, ur);
+ rtn = ops->set_mem_status(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_PREF_BEARER:
- if (!po->ops->get_pref_brearer)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_pref_brearer is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_PREF_BEARER:
+ tcore_check_null_ret_err("ops->get_pref_brearer",
+ ops->get_pref_brearer, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_pref_brearer(o, ur);
+ rtn = ops->get_pref_brearer(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_PREF_BEARER:
- if (!po->ops->set_pref_brearer)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_pref_brearer is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_PREF_BEARER:
+ tcore_check_null_ret_err("ops->set_pref_brearer",
+ ops->set_pref_brearer, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_pref_brearer(o, ur);
+ rtn = ops->set_pref_brearer(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_DELIVERY_REPORT:
- if (!po->ops->set_delivery_report)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_delivery_report is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_DELIVERY_REPORT:
+ tcore_check_null_ret_err("ops->set_delivery_report",
+ ops->set_delivery_report, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_delivery_report(o, ur);
+ rtn = ops->set_delivery_report(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_MSG_STATUS:
- if (!po->ops->set_msg_status)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_msg_status is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_MSG_STATUS:
+ tcore_check_null_ret_err("ops->set_msg_status",
+ ops->set_msg_status, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_msg_status(o, ur);
+ rtn = ops->set_msg_status(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_PARAMS:
- if (!po->ops->get_sms_params)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_sms_params is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_PARAMS:
+ tcore_check_null_ret_err("ops->get_sms_params",
+ ops->get_sms_params, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_sms_params(o, ur);
+ rtn = ops->get_sms_params(o, ur);
+ break;
- break;
- case TREQ_SMS_SET_PARAMS:
- if (!po->ops->set_sms_params)
- {
- dbg("[tcore_SMS] ERR: po->ops->set_sms_params is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SET_PARAMS:
+ tcore_check_null_ret_err("ops->set_sms_params",
+ ops->set_sms_params, TCORE_RETURN_ENOSYS);
- rtn = po->ops->set_sms_params(o, ur);
+ rtn = ops->set_sms_params(o, ur);
+ break;
- break;
- case TREQ_SMS_GET_PARAMCNT:
- if (!po->ops->get_paramcnt)
- {
- dbg("[tcore_SMS] ERR: po->ops->get_paramcnt is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_GET_PARAMCNT:
+ tcore_check_null_ret_err("ops->get_paramcnt",
+ ops->get_paramcnt, TCORE_RETURN_ENOSYS);
- rtn = po->ops->get_paramcnt(o, ur);
+ rtn = ops->get_paramcnt(o, ur);
+ break;
- break;
- case TREQ_SMS_SEND_CDMA_MSG:
- if (!po->ops->send_cdma_msg)
- {
- dbg("[tcore_SMS] ERR: po->ops->send_cdma_msg is NULL");
- return TCORE_RETURN_ENOSYS;
- }
+ case TREQ_SMS_SEND_CDMA_MSG:
+ tcore_check_null_ret_err("ops->send_cdma_msg",
+ ops->send_cdma_msg, TCORE_RETURN_ENOSYS);
- rtn = po->ops->send_cdma_msg(o, ur);
+ rtn = ops->send_cdma_msg(o, ur);
+ break;
- break;
- default:
- break;
+ default:
+ break;
}
dbg("[tcore_SMS] result = [0x%x], command = [0x%x]", rtn, command);
}
}
-static void _clone_hook(CoreObject *src, CoreObject *dest)
-{
- struct private_object_data *src_po = NULL;
- struct private_object_data *dest_po = NULL;
-
- if (!src || !dest)
- return;
-
- dest_po = calloc(1, sizeof(struct private_object_data));
- if (!dest_po) {
- tcore_object_link_object(dest, NULL);
- return;
- }
-
- src_po = tcore_object_ref_object(src);
- dest_po->ops = src_po->ops;
-
- tcore_object_link_object(dest, dest_po);
-}
-
enum telephony_sms_ready_status tcore_sms_get_ready_status(CoreObject *o)
{
struct private_object_data *po = NULL;
}
CoreObject *tcore_sms_new(TcorePlugin *p, const char *name,
- struct tcore_sms_operations *ops, TcoreHal *hal)
+ struct tcore_sms_operations *ops, TcoreHal *hal)
{
CoreObject *o = NULL;
struct private_object_data *po = NULL;
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
tcore_object_set_type(o, CORE_OBJECT_TYPE_SMS);
tcore_object_link_object(o, po);
tcore_object_set_free_hook(o, _free_hook);
- tcore_object_set_clone_hook(o, _clone_hook);
tcore_object_set_dispatcher(o, _dispatcher);
return o;
tcore_object_free(o);
}
-void tcore_sms_set_ops(CoreObject *o, struct tcore_sms_operations *ops)
+void tcore_sms_set_ops(CoreObject *o, struct tcore_sms_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_SMS);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
#include <glib.h>
#include "tcore.h"
+#include "internal/tcore_types.h"
#include "plugin.h"
#include "queue.h"
#include "user_request.h"
#include "co_ss.h"
-#define _check_null( name, value, err ) { \
- if ( !value ) { \
- dbg("[error] %s : NULL", name ); \
- return err; \
- } \
-}
-
struct ussd_session {
gboolean session;
enum tcore_ss_ussd_type type;
- void* data;
+ void *data;
int data_len;
};
+struct ss_routing_policy {
+ enum tcore_ss_routing_policy ss_routing_policy;
+ enum tcore_ussd_routing_policy ussd_routing_policy;
+};
+
struct private_object_data {
+ struct tcore_ss_operations *ops[TCORE_OPS_TYPE_MAX];
+
struct ussd_session ussd_s;
- struct tcore_ss_operations *ops;
+ struct ss_routing_policy routing_policy;
};
-static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
+static TReturn _dispatcher(CoreObject *o, UserRequest *ur, enum tcore_ops_type ops_type)
{
enum tcore_request_command command;
+ struct private_object_data *po = tcore_object_ref_object(o);
+ struct tcore_ss_operations *ops = NULL;
TReturn ret = 0;
- struct private_object_data *po = NULL;
- po = tcore_object_ref_object(o);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_SS, TCORE_RETURN_EINVAL);
+ CORE_OBJECT_VALIDATE_OPS_RETURN_VAL(ops_type, TCORE_RETURN_EINVAL);
- _check_null( "po", po, TCORE_RETURN_FAILURE);
- _check_null( "po->ops", po->ops, TCORE_RETURN_FAILURE);
- _check_null( "ur", ur, TCORE_RETURN_FAILURE);
+ tcore_check_null_ret_err("po", po, TCORE_RETURN_EINVAL);
+ tcore_check_null_ret_err("ur", ur, TCORE_RETURN_EINVAL);
+
+ ops = po->ops[ops_type];
+ tcore_check_null_ret_err("ops", ops, TCORE_RETURN_FAILURE);
command = tcore_user_request_get_command(ur);
switch (command) {
- case TREQ_SS_BARRING_ACTIVATE:
- if (!po->ops->barring_activate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_BARRING_ACTIVATE:
+ tcore_check_null_ret_err("ops->barring_activate",
+ ops->barring_activate, TCORE_RETURN_ENOSYS);
- ret = po->ops->barring_activate(o, ur);
- break;
+ ret = ops->barring_activate(o, ur);
+ break;
- case TREQ_SS_BARRING_DEACTIVATE:
- if (!po->ops->barring_deactivate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_BARRING_DEACTIVATE:
+ tcore_check_null_ret_err("ops->barring_deactivate",
+ ops->barring_deactivate, TCORE_RETURN_ENOSYS);
- ret = po->ops->barring_deactivate(o, ur);
- break;
+ ret = ops->barring_deactivate(o, ur);
+ break;
- case TREQ_SS_BARRING_CHANGE_PASSWORD:
- if (!po->ops->barring_change_password)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_BARRING_CHANGE_PASSWORD:
+ tcore_check_null_ret_err("ops->barring_change_password",
+ ops->barring_change_password, TCORE_RETURN_ENOSYS);
- ret = po->ops->barring_change_password(o, ur);
- break;
+ ret = ops->barring_change_password(o, ur);
+ break;
- case TREQ_SS_BARRING_GET_STATUS:
- if (!po->ops->barring_get_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_BARRING_GET_STATUS:
+ tcore_check_null_ret_err("ops->barring_get_status",
+ ops->barring_get_status, TCORE_RETURN_ENOSYS);
- ret = po->ops->barring_get_status(o, ur);
- break;
+ ret = ops->barring_get_status(o, ur);
+ break;
- case TREQ_SS_FORWARDING_ACTIVATE:
- if (!po->ops->forwarding_activate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_FORWARDING_ACTIVATE:
+ tcore_check_null_ret_err("ops->forwarding_activate",
+ ops->forwarding_activate, TCORE_RETURN_ENOSYS);
- ret = po->ops->forwarding_activate(o, ur);
- break;
+ ret = ops->forwarding_activate(o, ur);
+ break;
- case TREQ_SS_FORWARDING_DEACTIVATE:
- if (!po->ops->forwarding_deactivate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_FORWARDING_DEACTIVATE:
+ tcore_check_null_ret_err("ops->forwarding_deactivate",
+ ops->forwarding_deactivate, TCORE_RETURN_ENOSYS);
- ret = po->ops->forwarding_deactivate(o, ur);
- break;
+ ret = ops->forwarding_deactivate(o, ur);
+ break;
- case TREQ_SS_FORWARDING_REGISTER:
- if (!po->ops->forwarding_register)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_FORWARDING_REGISTER:
+ tcore_check_null_ret_err("ops->forwarding_register",
+ ops->forwarding_register, TCORE_RETURN_ENOSYS);
- ret = po->ops->forwarding_register(o, ur);
- break;
+ ret = ops->forwarding_register(o, ur);
+ break;
- case TREQ_SS_FORWARDING_DEREGISTER:
- if (!po->ops->forwarding_deregister)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_FORWARDING_DEREGISTER:
+ tcore_check_null_ret_err("ops->forwarding_deregister",
+ ops->forwarding_deregister, TCORE_RETURN_ENOSYS);
- ret = po->ops->forwarding_deregister(o, ur);
- break;
+ ret = ops->forwarding_deregister(o, ur);
+ break;
- case TREQ_SS_FORWARDING_GET_STATUS:
- if (!po->ops->forwarding_get_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_FORWARDING_GET_STATUS:
+ tcore_check_null_ret_err("ops->forwarding_get_status",
+ ops->forwarding_get_status, TCORE_RETURN_ENOSYS);
- ret = po->ops->forwarding_get_status(o, ur);
- break;
+ ret = ops->forwarding_get_status(o, ur);
+ break;
- case TREQ_SS_WAITING_ACTIVATE:
- if (!po->ops->waiting_activate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_WAITING_ACTIVATE:
+ tcore_check_null_ret_err("ops->waiting_activate",
+ ops->waiting_activate, TCORE_RETURN_ENOSYS);
- ret = po->ops->waiting_activate(o, ur);
- break;
+ ret = ops->waiting_activate(o, ur);
+ break;
- case TREQ_SS_WAITING_DEACTIVATE:
- if (!po->ops->waiting_deactivate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_WAITING_DEACTIVATE:
+ tcore_check_null_ret_err("ops->waiting_deactivate",
+ ops->waiting_deactivate, TCORE_RETURN_ENOSYS);
- ret = po->ops->waiting_deactivate(o, ur);
- break;
+ ret = ops->waiting_deactivate(o, ur);
+ break;
- case TREQ_SS_WAITING_GET_STATUS:
- if (!po->ops->waiting_get_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_WAITING_GET_STATUS:
+ tcore_check_null_ret_err("ops->waiting_get_status",
+ ops->waiting_get_status, TCORE_RETURN_ENOSYS);
- ret = po->ops->waiting_get_status(o, ur);
- break;
+ ret = ops->waiting_get_status(o, ur);
+ break;
- case TREQ_SS_CLI_ACTIVATE:
- if (!po->ops->cli_activate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_CLI_ACTIVATE:
+ tcore_check_null_ret_err("ops->cli_activate",
+ ops->cli_activate, TCORE_RETURN_ENOSYS);
- ret = po->ops->cli_activate(o, ur);
- break;
+ ret = ops->cli_activate(o, ur);
+ break;
- case TREQ_SS_CLI_DEACTIVATE:
- if (!po->ops->cli_deactivate)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_CLI_DEACTIVATE:
+ tcore_check_null_ret_err("ops->cli_deactivate",
+ ops->cli_deactivate, TCORE_RETURN_ENOSYS);
- ret = po->ops->cli_deactivate(o, ur);
- break;
+ ret = ops->cli_deactivate(o, ur);
+ break;
- case TREQ_SS_CLI_SET_STATUS:
- if (!po->ops->cli_set_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_CLI_SET_STATUS:
+ tcore_check_null_ret_err("ops->cli_set_status",
+ ops->cli_set_status, TCORE_RETURN_ENOSYS);
- ret = po->ops->cli_set_status(o, ur);
- break;
+ ret = ops->cli_set_status(o, ur);
+ break;
- case TREQ_SS_CLI_GET_STATUS:
- if (!po->ops->cli_get_status)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_CLI_GET_STATUS:
+ tcore_check_null_ret_err("ops->cli_get_status",
+ ops->cli_get_status, TCORE_RETURN_ENOSYS);
- ret = po->ops->cli_get_status(o, ur);
- break;
+ ret = ops->cli_get_status(o, ur);
+ break;
- case TREQ_SS_SEND_USSD:
- if (!po->ops->send_ussd)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_SEND_USSD:
+ tcore_check_null_ret_err("ops->send_ussd",
+ ops->send_ussd, TCORE_RETURN_ENOSYS);
- ret = po->ops->send_ussd(o, ur);
- break;
+ ret = ops->send_ussd(o, ur);
+ break;
- case TREQ_SS_SET_AOC:
- if (!po->ops->set_aoc)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_SET_AOC:
+ tcore_check_null_ret_err("ops->set_aoc",
+ ops->set_aoc, TCORE_RETURN_ENOSYS);
- ret = po->ops->set_aoc(o, ur);
- break;
+ ret = ops->set_aoc(o, ur);
+ break;
- case TREQ_SS_GET_AOC:
- if (!po->ops->get_aoc)
- return TCORE_RETURN_ENOSYS;
+ case TREQ_SS_GET_AOC:
+ tcore_check_null_ret_err("ops->get_aoc",
+ ops->get_aoc, TCORE_RETURN_ENOSYS);
- ret = po->ops->get_aoc(o, ur);
- break;
+ ret = ops->get_aoc(o, ur);
+ break;
- default:
- break;
+ default:
+ break;
}
return ret;
}
-static void _clone_hook(CoreObject *src, CoreObject *dest)
-{
- struct private_object_data *src_po = NULL;
- struct private_object_data *dest_po = NULL;
-
- if (!src || !dest)
- return;
-
- dest_po = calloc(1, sizeof(struct private_object_data));
- if (!dest_po) {
- tcore_object_link_object(dest, NULL);
- return;
- }
-
- src_po = tcore_object_ref_object(src);
- dest_po->ops = src_po->ops;
-
- tcore_object_link_object(dest, dest_po);
-}
-
static void _free_hook(CoreObject *o)
{
struct private_object_data *po = NULL;
ussd_s->data_len = 0;
}
-struct ussd_session* tcore_ss_ussd_create_session(CoreObject *o,
+struct ussd_session *tcore_ss_ussd_create_session(CoreObject *o,
enum tcore_ss_ussd_type type, void *data, int data_len)
{
struct private_object_data *po = NULL;
return &po->ussd_s;
- }
- else {
+ } else {
dbg("[ error ] already exist ussd session, type : (0x%x)", po->ussd_s.type);
return 0;
}
void tcore_ss_ussd_destroy_session(struct ussd_session *ussd_s)
{
- if (!ussd_s || !ussd_s->session) {
+ if (!ussd_s || !ussd_s->session)
return;
- }
- else {
- _ussd_session_init(ussd_s);
- }
+ _ussd_session_init(ussd_s);
}
-struct ussd_session* tcore_ss_ussd_get_session(CoreObject *o)
+struct ussd_session *tcore_ss_ussd_get_session(CoreObject *o)
{
struct private_object_data *po = NULL;
if (!ussd_s || !ussd_s->session) {
dbg("[ error ] there is no session");
return 0;
-
- }
- else {
- return ussd_s->type;
}
+
+ return ussd_s->type;
}
void tcore_ss_ussd_set_session_type(struct ussd_session *ussd_s,
if (!ussd_s || !ussd_s->session) {
dbg("[ error ] there is no session");
return;
-
- }
- else {
- ussd_s->type = type;
}
+
+ ussd_s->type = type;
}
-int tcore_ss_ussd_get_session_data(struct ussd_session* ussd_s, void **data)
+int tcore_ss_ussd_get_session_data(struct ussd_session *ussd_s, void **data)
{
if (!ussd_s || !ussd_s->session) {
dbg("[ error ] there is no session");
return -1;
-
}
- else {
- *data = ussd_s->data;
- return ussd_s->data_len;
- }
+ *data = ussd_s->data;
+ return ussd_s->data_len;
}
-void tcore_ss_ussd_set_session_data(struct ussd_session* ussd_s, void *data, int data_len)
+void tcore_ss_ussd_set_session_data(struct ussd_session *ussd_s, void *data, int data_len)
{
if (!ussd_s || !ussd_s->session) {
dbg("[ error ] there is no session");
- return ;
-
+ return;
}
- else {
- ussd_s->data = data;
- ussd_s->data_len = data_len;
- }
+ ussd_s->data = data;
+ ussd_s->data_len = data_len;
}
+void tcore_ss_set_ussd_routing(CoreObject *o, enum tcore_ussd_routing_policy ussd_routing_policy)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return;
+
+ po->routing_policy.ussd_routing_policy = ussd_routing_policy;
+}
+
+enum tcore_ussd_routing_policy tcore_ss_get_ussd_routing(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_SS_USSD_ROUTING_POLICY_CS_ALWAYS; /* 'default' to CS */
+
+ return po->routing_policy.ussd_routing_policy;
+}
+
+void tcore_ss_set_ss_routing(CoreObject *o, enum tcore_ss_routing_policy ss_routing_policy)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return;
+
+ po->routing_policy.ss_routing_policy = ss_routing_policy;
+}
+
+enum tcore_ss_routing_policy tcore_ss_get_ss_routing(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_SS_ROUTING_POLICY_CS_ALWAYS; /* 'default' to CS */
+
+ return po->routing_policy.ss_routing_policy;
+}
CoreObject *tcore_ss_new(TcorePlugin *p, const char *name,
struct tcore_ss_operations *ops, TcoreHal *hal)
return NULL;
}
- po->ops = ops;
+ /* set ops to default type when core object is created. */
+ po->ops[TCORE_OPS_TYPE_CP] = ops;
+ po->routing_policy.ss_routing_policy = TCORE_SS_ROUTING_POLICY_CS_ALWAYS; /* 'default' to CS */
+ po->routing_policy.ussd_routing_policy = TCORE_SS_USSD_ROUTING_POLICY_CS_ALWAYS; /* 'default' to CS */
_ussd_session_init(&po->ussd_s);
tcore_object_set_type(o, CORE_OBJECT_TYPE_SS);
tcore_object_link_object(o, po);
tcore_object_set_free_hook(o, _free_hook);
- tcore_object_set_clone_hook(o, _clone_hook);
tcore_object_set_dispatcher(o, _dispatcher);
return o;
tcore_object_free(o);
}
-void tcore_ss_set_ops(CoreObject *o, struct tcore_ss_operations *ops)
+void tcore_ss_set_ops(CoreObject *o, struct tcore_ss_operations *ops, enum tcore_ops_type ops_type)
{
struct private_object_data *po = NULL;
CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_SS);
+ CORE_OBJECT_VALIDATE_OPS_RETURN(ops_type);
po = (struct private_object_data *)tcore_object_ref_object(o);
if (!po) {
+ err("po is NULL");
return;
}
- po->ops = ops;
+ po->ops[ops_type] = ops;
}
#include "communicator.h"
struct tcore_communicator_type {
- const char *name;
+ char *name;
struct tcore_communitor_operations *ops;
void *user_data;
};
-Communicator* tcore_communicator_new(TcorePlugin *plugin, const char *name,
- struct tcore_communitor_operations *ops)
+Communicator *tcore_communicator_new(TcorePlugin *plugin,
+ const char *name, struct tcore_communitor_operations *ops)
{
Communicator *comm;
- comm = calloc(1, sizeof(struct tcore_communicator_type));
+ comm = g_try_malloc0(sizeof(struct tcore_communicator_type));
if (!comm)
return NULL;
if (name)
- comm->name = strdup(name);
+ comm->name = g_strdup(name);
comm->parent_plugin = plugin;
comm->ops = ops;
return;
if (comm->name)
- free((void *)comm->name);
+ g_free(comm->name);
- free(comm);
+ g_free(comm);
}
TcorePlugin *tcore_communicator_ref_plugin(Communicator *comm)
if (!comm)
return NULL;
- return comm->name;
+ return (const char *)comm->name;
}
TReturn tcore_communicator_link_user_data(Communicator *comm, void *data)
if (!comm || !comm->ops || !comm->ops->send_response)
return TCORE_RETURN_EINVAL;
- dbg("ur = %p", ur);
+ dbg("ur = 0x%x", (unsigned int)ur);
return comm->ops->send_response(comm, ur, command, data_len, data);
}
void *user_data;
CoreObjectFreeHook free_hook;
- CoreObjectCloneHook clone_hook;
CoreObjectDispatcher dispatcher;
GSList *callbacks;
GHashTable *property;
}
/* Search all the Table entries with matching 'type' */
- for ( ; co_list ; co_list = co_list->next) {
+ for (; co_list ; co_list = co_list->next) {
if (co_list->data == NULL)
continue;
{
CoreObject *co;
- co = calloc(1, sizeof(struct tcore_object_type));
+ co = g_try_malloc0(sizeof(struct tcore_object_type));
if (!co)
return NULL;
struct callback_type *cb = user_data;
ret = cb->callback(cb->co, lines, cb->user_data);
- if (ret == FALSE) {
-
- }
+ if (ret == FALSE)
+ err("Callback processing failed!");
return ret;
}
}
static object_mapping_table_t *_object_search_mapping_tbl_entry(GSList *mapping_tbl_list,
- TcoreHal *hal)
+ TcoreHal *hal)
{
GSList *list;
object_mapping_table_t *tbl_entry = NULL;
continue;
/* Search for Table entry with matching 'hal' */
- if (tbl_entry->hal == hal) {
+ if (tbl_entry->hal == hal)
return tbl_entry;
- }
}
return NULL;
}
static object_mapping_table_t *_object_search_mapping_tbl_entry_by_type(
- GSList *mapping_tbl_list, unsigned int type)
+ GSList *mapping_tbl_list, unsigned int type)
{
GSList *list;
GSList *co_list;
if (co_list->data == NULL)
continue;
- if (type == GPOINTER_TO_UINT(co_list->data)) {
+ if (type == GPOINTER_TO_UINT(co_list->data))
return tbl_entry;
- }
}
}
case CORE_OBJECT_TYPE_CUSTOM: /* Fall through */
default:
err("Unsupport/Invalid Core Object Type [0x%x]", type);
+ break;
}
return co;
/* Invoke initializer */
if (initializer_list->modem_init)
ret = initializer_list->modem_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_CALL: {
/* Invoke initializer */
if (initializer_list->call_init)
ret = initializer_list->call_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SS: {
/* Invoke initializer */
if (initializer_list->ss_init)
ret = initializer_list->ss_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_NETWORK: {
/* Invoke initializer */
if (initializer_list->network_init)
ret = initializer_list->network_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_PS: {
/* Invoke initializer */
if (initializer_list->ps_init)
ret = initializer_list->ps_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SIM: {
/* Invoke initializer */
if (initializer_list->sim_init)
ret = initializer_list->sim_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SAT: {
/* Invoke initializer */
if (initializer_list->sat_init)
ret = initializer_list->sat_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SAP: {
/* Invoke initializer */
if (initializer_list->sap_init)
ret = initializer_list->sap_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SMS:{
/* Invoke initializer */
if (initializer_list->sms_init)
ret = initializer_list->sms_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_PHONEBOOK: {
/* Invoke initializer */
if (initializer_list->phonebook_init)
ret = initializer_list->phonebook_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_GPS:{
/* Invoke initializer */
if (initializer_list->gps_init)
ret = initializer_list->gps_init(plugin, co);
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_CUSTOM: /* Fall through */
default:
dbg("Unsupport/Invalid Core Object Type [0x%x]", type);
+ break;
}
return ret;
static void _deinit_core_object_by_type(unsigned int type,
- TcorePlugin *plugin, struct object_deinitializer *deinitializer_list)
+ TcorePlugin *plugin, struct object_deinitializer *deinitializer_list)
{
CoreObject *co;
/* Invoke deinitializer */
deinitializer_list->modem_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_CALL: {
if (deinitializer_list->call_deinit) {
/* Invoke deinitializer */
deinitializer_list->call_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SS: {
if (deinitializer_list->ss_deinit) {
/* Invoke deinitializer */
deinitializer_list->ss_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_NETWORK: {
if (deinitializer_list->network_deinit) {
/* Invoke deinitializer */
deinitializer_list->network_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_PS: {
if (deinitializer_list->ps_deinit) {
/* Invoke deinitializer */
deinitializer_list->ps_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SIM: {
if (deinitializer_list->sim_deinit) {
/* Invoke deinitializer */
deinitializer_list->sim_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SAT: {
if (deinitializer_list->sat_deinit) {
/* Invoke deinitializer */
deinitializer_list->sat_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SAP: {
if (deinitializer_list->sap_deinit) {
/* Invoke deinitializer */
deinitializer_list->sap_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_SMS:{
if (deinitializer_list->sms_deinit) {
/* Invoke deinitializer */
deinitializer_list->sms_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_PHONEBOOK: {
if (deinitializer_list->phonebook_deinit) {
/* Invoke deinitializer */
deinitializer_list->phonebook_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_GPS:{
if (deinitializer_list->gps_deinit) {
/* Invoke deinitializer */
deinitializer_list->gps_deinit(plugin, co);
}
- } break;
+ }
+ break;
case CORE_OBJECT_TYPE_CUSTOM: /* Fall through */
default:
warn("free_hook is null, private-object couldn't be freed!!");
}
- if (co->property) {
+ if (co->property)
g_hash_table_destroy(co->property);
- }
if (co->callbacks) {
for (l = co->callbacks; l; l = l->next) {
free(co);
}
-CoreObject *tcore_object_clone(CoreObject *src, TcorePlugin *new_parent)
-{
- CoreObject *dest;
- TcorePlugin *p;
-
- GSList *l = NULL;
- struct callback_type *cb = NULL;
-
- if (!src)
- return NULL;
-
- if (new_parent)
- p = new_parent;
- else
- p = src->parent_plugin;
-
- dest = _object_new(p, src->type);
- if (!dest)
- return NULL;
-
- dest->object = src->object;
- dest->user_data = src->user_data;
- dest->free_hook = src->free_hook;
- dest->clone_hook = src->clone_hook;
- dest->dispatcher = src->dispatcher;
- dest->hal = src->hal;
-
- for (l = src->callbacks; l; l = l->next) {
- cb = l->data;
- if (!cb)
- continue;
-
- tcore_object_add_callback(dest, cb->event, cb->callback, cb->user_data);
- }
-
- tcore_plugin_add_core_object(p, dest);
-
- if (src->clone_hook)
- src->clone_hook(src, dest);
-
- return dest;
-}
-
-CoreObject *tcore_object_clone_template_object(TcorePlugin *p,
- unsigned int co_type)
-{
- CoreObject *template_co;
-
- template_co = tcore_server_find_template_object(tcore_plugin_ref_server(p), co_type);
- if(template_co == NULL)
- return NULL;
-
- return tcore_object_clone(template_co, p);
-
-}
-
const char *tcore_object_ref_name(CoreObject *co)
{
if (!co)
return TCORE_RETURN_SUCCESS;
}
-
-TReturn tcore_object_set_clone_hook(CoreObject *co,
- CoreObjectCloneHook clone_hook)
-{
- if (!co)
- return TCORE_RETURN_EINVAL;
-
- co->clone_hook = clone_hook;
-
- return TCORE_RETURN_SUCCESS;
-}
-
TReturn tcore_object_set_name(CoreObject *co, const char *name)
{
if (!co)
return TCORE_RETURN_EINVAL;
if (co->hal) {
- // remove unsolicited callbacks
+ /* Remove unsolicited callbacks */
if (tcore_hal_get_mode(co->hal) == TCORE_HAL_MODE_AT) {
at = tcore_hal_get_at(co->hal);
for (l = co->callbacks; l; l = l->next) {
if (!hal)
return TCORE_RETURN_SUCCESS;
- // register unsolicited callbacks
+ /* Register unsolicited callbacks */
if (tcore_hal_get_mode(hal) == TCORE_HAL_MODE_AT) {
at = tcore_hal_get_at(hal);
for (l = co->callbacks; l; l = l->next) {
return co->user_data;
}
+/* This API will dispatch the request to default ops(i.e. CP) */
TReturn tcore_object_dispatch_request(CoreObject *co,
UserRequest *ur)
{
+ return tcore_object_dispatch_request_with_type(co, ur, TCORE_OPS_TYPE_CP);
+}
+
+/* This API will dispatch the request according to ops type */
+TReturn tcore_object_dispatch_request_with_type(CoreObject *co,
+ UserRequest *ur, enum tcore_ops_type ops_type)
+{
if (!co || !ur)
return TCORE_RETURN_EINVAL;
if (!co->dispatcher)
return TCORE_RETURN_ENOSYS;
- return co->dispatcher(co, ur);
+ return co->dispatcher(co, ur, ops_type);
}
TReturn tcore_object_set_dispatcher(CoreObject *co,
}
TReturn tcore_object_override_callback(CoreObject *co,
- const char *event, tcore_object_callback callback, void *user_data)
+ const char *event, tcore_object_callback callback, void *user_data)
{
struct callback_type *cb = NULL;
GSList *l = NULL;
}
TReturn tcore_object_del_callback(CoreObject *co,
- const char *event, CoreObjectCallback callback)
+ const char *event, CoreObjectCallback callback)
{
struct callback_type *cb = NULL;
GSList *l = NULL;
}
TReturn tcore_object_emit_callback(CoreObject *co,
- const char *event, const void *event_info)
+ const char *event, const void *event_info)
{
struct callback_type *cb = NULL;
GSList *l = NULL;
return TCORE_RETURN_SUCCESS;
}
-static GSList *_set_property_real (CoreObject *co, const char *key,
+static GSList *_set_property_real(CoreObject *co, const char *key,
const char *value, GSList *list)
{
char *prev;
return list;
if (!value) {
- g_hash_table_remove (co->property, key);
- return g_slist_append (list, (char *)key);
+ g_hash_table_remove(co->property, key);
+ return g_slist_append(list, (char *)key);
}
prev = g_hash_table_lookup(co->property, key);
/*
* If same data, no change & no callback emit
*/
- if (strcmp (prev, value) == 0)
+ if (strcmp(prev, value) == 0)
return list;
g_hash_table_replace(co->property, strdup(key), strdup(value));
- }
- else {
+ } else
g_hash_table_insert(co->property, strdup(key), strdup(value));
- }
- return g_slist_append (list, (char *)key);
+ return g_slist_append(list, (char *)key);
}
TReturn tcore_object_set_property_full(CoreObject *co, const char *first_property, ...)
if (!co || !first_property)
return TCORE_RETURN_EINVAL;
- va_start (argptr, first_property);
+ va_start(argptr, first_property);
k = first_property;
- v = va_arg (argptr, char *);
- list = _set_property_real (co, k, v, list);
+ v = va_arg(argptr, char *);
+ list = _set_property_real(co, k, v, list);
while (1) {
- k = va_arg (argptr, char *);
+ k = va_arg(argptr, char *);
if (!k)
break;
- v = va_arg (argptr, char *);
- list = _set_property_real (co, k, v, list);
+ v = va_arg(argptr, char *);
+ list = _set_property_real(co, k, v, list);
}
- va_end (argptr);
+ va_end(argptr);
if (!list)
return TCORE_RETURN_SUCCESS;
if (g_slist_length(list) > 0)
- tcore_object_emit_callback (co,
+ tcore_object_emit_callback(co,
CORE_OBJECT_EVENT_PROPERTY_CHANGED, list);
- g_slist_free (list);
+ g_slist_free(list);
return TCORE_RETURN_SUCCESS;
}
return co->property;
}
void *tcore_object_add_mapping_tbl_entry(void *mapping_tbl,
- unsigned int object_type, TcoreHal *hal)
+ unsigned int object_type, TcoreHal *hal)
{
GSList *mapping_tbl_list = mapping_tbl;
object_mapping_table_t *tbl_entry;
* new Table entry is created
*/
- tbl_entry = g_try_new0(object_mapping_table_t, 1);
+ tbl_entry = g_try_malloc0(sizeof(object_mapping_table_t));
if (tbl_entry != NULL)
tbl_entry->hal = hal;
else {
}
void tcore_object_remove_mapping_tbl_entry_by_type(void *mapping_tbl,
- unsigned int co_type)
+ unsigned int co_type)
{
GSList *mapping_tbl_list;
object_mapping_table_t *tbl_entry;
}
/* Remove the Core Object type from the list */
- tbl_entry->object_type = g_slist_remove(tbl_entry->object_type, (gconstpointer)GUINT_TO_POINTER(co_type));
+ tbl_entry->object_type = g_slist_remove(tbl_entry->object_type, GUINT_TO_POINTER(co_type));
}
void tcore_object_print_mapping_tbl(void *mapping_tbl)
mapping_tbl_list = mapping_tbl;
- for ( ; mapping_tbl_list ; mapping_tbl_list = mapping_tbl_list->next) {
+ for (; mapping_tbl_list ; mapping_tbl_list = mapping_tbl_list->next) {
tbl_entry = mapping_tbl_list->data;
if (tbl_entry == NULL)
continue;
/* Initialize Core Objects */
TReturn tcore_object_init_objects(TcorePlugin *plugin,
- struct object_initializer *initializer_list)
+ struct object_initializer *initializer_list)
{
GSList *mapping_tbl_list;
gboolean ret = FALSE;
/* Create each Core Object based on the Mapping Table entries */
mtbl_list = mapping_tbl_list;
- for ( ; mtbl_list ; mtbl_list = mtbl_list->next) {
+ for (; mtbl_list ; mtbl_list = mtbl_list->next) {
tbl_entry = mtbl_list->data;
if (tbl_entry != NULL) {
CoreObject *co;
object_type_list = tbl_entry->object_type;
- for ( ; object_type_list ; object_type_list = object_type_list->next) {
- type = GPOINTER_TO_UINT(object_type_list->data);
+ for (; object_type_list ; object_type_list = object_type_list->next) {
+ type = GPOINTER_TO_UINT(object_type_list->data);
co = _create_core_object_by_type(type, plugin, tbl_entry->hal);
if (co == NULL) {
err("Failed to create Core Object - Type: [0x%x]", type);
return TCORE_RETURN_FAILURE;
}
+
dbg("Created Core Object - Type: [0x%x]", type);
}
}
/* Initialize each Core Object based on the Mapping Table entries */
mtbl_list = mapping_tbl_list;
- for ( ; mtbl_list ; mtbl_list = mtbl_list->next) {
+ for (; mtbl_list ; mtbl_list = mtbl_list->next) {
tbl_entry = mtbl_list->data;
if (tbl_entry != NULL) {
/* To handle NULL 'init' function case */
object_type_list = tbl_entry->object_type;
- for ( ; object_type_list ; object_type_list = object_type_list->next) {
+ for (; object_type_list ; object_type_list = object_type_list->next) {
type = GPOINTER_TO_UINT(object_type_list->data);
dbg("Core Object type: [0x%x]", type);
err("Failed to initialize Core Object Type [0x%x]", type);
return TCORE_RETURN_FAILURE;
}
+
dbg("Initialized Core Object - Type: [0x%x]", type);
}
}
}
- } else {
+ } else
err("Mapping Table is NOT present");
- }
+
if (ret == FALSE) {
err("Failed to create/initialize Core Objects");
return TCORE_RETURN_FAILURE;
/* De-initialize Core Objects */
void tcore_object_deinit_objects(TcorePlugin *plugin,
- struct object_deinitializer *deinitializer_list)
+ struct object_deinitializer *deinitializer_list)
{
GSList *mapping_tbl_list;
unsigned int type;
/* De-initialize each Core Object based on the Mapping Table entries */
- for ( ; mapping_tbl_list ; mapping_tbl_list = mapping_tbl_list->next) {
+ for (; mapping_tbl_list ; mapping_tbl_list = mapping_tbl_list->next) {
tbl_entry = mapping_tbl_list->data;
if (tbl_entry == NULL)
continue;
object_type_list = tbl_entry->object_type;
- for ( ; object_type_list ; object_type_list = object_type_list->next) {
+ for (; object_type_list ; object_type_list = object_type_list->next) {
type = GPOINTER_TO_UINT(object_type_list->data);
dbg("Core Object type: [0x%x]", type);
_deinit_core_object_by_type(type, plugin, deinitializer_list);
}
}
+
dbg("Successfully de-initialized Core Objects");
} else
err("Mapping Table is NOT present");
#include "mux.h"
-//#define IDLE_SEND_PRIORITY G_PRIORITY_DEFAULT
#define IDLE_SEND_PRIORITY G_PRIORITY_HIGH
struct hook_send_type {
p = tcore_queue_ref_next_pending(h->queue);
if (!p) {
#ifdef TCORE_HAL_DEBUG
- dbg("next pending is NULL. no send, queue len=%d", tcore_queue_get_length(h->queue));
+ dbg("next pending is NULL. no send, queue len=%d",
+ tcore_queue_get_length(h->queue));
#endif
goto out;
}
data = tcore_pending_ref_request_data(p, &data_len);
dbg("queue(%p) len=%d, pending(%p) id=0x%x data_len=%d",
- h->queue, tcore_queue_get_length(h->queue), p, tcore_pending_get_id(p), data_len);
+ h->queue, tcore_queue_get_length(h->queue), p, tcore_pending_get_id(p), data_len);
- if (h->mode == TCORE_HAL_MODE_AT) {
+ if (h->mode == TCORE_HAL_MODE_AT)
ret = tcore_at_set_request(h->at, data, TRUE);
- }
- else {
+ else
ret = tcore_hal_send_data(h, data_len, data);
- }
if (ret == TCORE_RETURN_SUCCESS) {
tcore_pending_emit_send_callback(p, TRUE);
tcore_pending_start_timer(p);
- }
- else {
+ } else
tcore_pending_emit_send_callback(p, FALSE);
- }
if (ret != TCORE_RETURN_HOOK_STOP) {
if (tcore_pending_get_auto_free_status_after_sent(p)) {
/* renew idler */
renew = TRUE;
- }
- else {
+ } else {
/* Send fail */
if (ret != TCORE_RETURN_SUCCESS) {
dbg("send fail.");
}
TcoreHal *tcore_hal_new(TcorePlugin *plugin, const char *name,
- struct tcore_hal_operations *hops,
- enum tcore_hal_mode mode)
+ struct tcore_hal_operations *hops, enum tcore_hal_mode mode)
{
TcoreHal *h;
for (list = hal->hook_list_send; list; list = list->next) {
hook = list->data;
- if (!hook) {
+ if (!hook)
continue;
- }
- if (hook->func(hal, data_len, data, hook->user_data) == TCORE_HOOK_RETURN_STOP_PROPAGATION) {
+ if (hook->func(hal, data_len, data, hook->user_data)
+ == TCORE_HOOK_RETURN_STOP_PROPAGATION)
return TCORE_RETURN_HOOK_STOP;
- }
}
return hal->ops->send(hal, data_len, data);
return TCORE_RETURN_FAILURE;
ret = tcore_queue_push(hal->queue, pending);
- if( ret != TCORE_RETURN_SUCCESS ) {
+ if (ret != TCORE_RETURN_SUCCESS) {
dbg("Pushing pending fails : return [ %d ]", ret);
return ret;
}
if (priority == TCORE_PENDING_PRIORITY_IMMEDIATELY) {
dbg("IMMEDIATELY pending !!");
_hal_idle_send(hal);
- }
- else {
- if (tcore_queue_get_normal_length(hal->queue) <= 1) {
+ } else {
+ if (tcore_queue_get_normal_length(hal->queue) <= 1)
g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL);
- }
}
return TCORE_RETURN_SUCCESS;
dbg("TCORE_HAL_MODE_AT");
tcore_free_pending_timeout_at_request(hal->at);
p = tcore_queue_pop_by_pending(hal->queue, p);
- if (!p) {
+ if (!p)
dbg("no pending");
- }
+
tcore_user_request_free(tcore_pending_ref_user_request(p));
tcore_pending_free(p);
- }
- else {
- if(hal->mode == TCORE_HAL_MODE_CUSTOM) {
+ } else {
+ if (hal->mode == TCORE_HAL_MODE_CUSTOM) {
dbg("TCORE_HAL_MODE_CUSTOM");
p = tcore_queue_pop_by_pending(hal->queue, p);
- if (!p) {
+ if (!p)
dbg("no pending");
- }
+
tcore_user_request_free(tcore_pending_ref_user_request(p));
tcore_pending_free(p);
- }
- else if(hal->mode == TCORE_HAL_MODE_TRANSPARENT) {
+ } else if (hal->mode == TCORE_HAL_MODE_TRANSPARENT) {
dbg("TCORE_HAL_MODE_TRANSPARENT");
/* TODO : Need to free resources */
tcore_cmux_rcv_from_hal(hal, (unsigned char *)data, data_len);
}
}
+
/* Send next request in queue */
- g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL );
+ g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL);
return TCORE_RETURN_SUCCESS;
}
ret = tcore_at_process(hal->at, data_len, data);
if (ret) {
/* Send next request in queue */
- g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL );
+ g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL);
}
- }
- else {
- if(hal->mode == TCORE_HAL_MODE_CUSTOM) {
+ } else {
+ if (hal->mode == TCORE_HAL_MODE_CUSTOM) {
dbg("TCORE_HAL_MODE_CUSTOM");
p = tcore_queue_pop_by_id(hal->queue, id);
if (!p) {
tcore_pending_emit_response_callback(p, data_len, data);
tcore_user_request_free(tcore_pending_ref_user_request(p));
tcore_pending_free(p);
- }
- else if(hal->mode == TCORE_HAL_MODE_TRANSPARENT) {
+ } else if (hal->mode == TCORE_HAL_MODE_TRANSPARENT) {
dbg("TCORE_HAL_MODE_TRANSPARENT");
/* Invoke CMUX receive API for decoding */
tcore_cmux_rcv_from_hal(hal, (unsigned char *)data, data_len);
}
+
/* Send next request in queue */
- g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL );
+ g_idle_add_full(IDLE_SEND_PRIORITY, _hal_idle_send, hal, NULL);
}
return TCORE_RETURN_SUCCESS;
for (list = hal->callbacks; list; list = list->next) {
item = list->data;
- if (!item) {
+ if (!item)
continue;
- }
if (item->func == func) {
hal->callbacks = g_slist_remove(hal->callbacks, item);
for (list = hal->callbacks; list; list = list->next) {
item = list->data;
- if (item) {
+ if (item && item->func)
item->func(hal, data_len, data, item->user_data);
- }
}
return TCORE_RETURN_SUCCESS;
for (list = hal->hook_list_send; list; list = list->next) {
hook = list->data;
- if (!hook) {
+ if (!hook)
continue;
- }
if (hook->func == func) {
hal->hook_list_send = g_slist_remove(hal->hook_list_send, hook);
return hal->ops->power(hal, flag);
}
TReturn tcore_hal_setup_netif(TcoreHal *hal, CoreObject *co,
- TcoreHalSetupNetifCallback func,
- void *user_data, unsigned int cid,
- gboolean enable)
+ TcoreHalSetupNetifCallback func, void *user_data,
+ unsigned int cid, gboolean enable)
{
if ((hal == NULL) || (hal->ops == NULL) || (hal->ops->setup_netif == NULL))
return TCORE_RETURN_EINVAL;
--- /dev/null
+/*
+ * libtcore
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include "tcore.h"
+#include "server.h"
+#include "manager.h"
+#include "plugin.h"
+#include "core_object.h"
+
+struct tcore_manager_type {
+ TcorePlugin *parent_plugin;
+
+ ManagerRequestDispatcher request_dispatcher;
+ ManagerNotificationHandler notification_handler;
+};
+
+Manager *tcore_manager_new(TcorePlugin *manager_plugin)
+{
+ Server *server;
+ Manager *manager;
+
+ /* Allocate Manager */
+ manager = g_try_malloc0(sizeof(Manager));
+ if (manager == NULL)
+ return NULL;
+
+ manager->parent_plugin = manager_plugin;
+
+ /* Set Manager to Server */
+ server = tcore_plugin_ref_server(manager_plugin);
+ tcore_server_set_manager(server, manager);
+
+ return manager;
+}
+
+void tcore_manager_free(TcorePlugin *manager_plugin, Manager *manager)
+{
+ Server *server;
+
+ /* Free Manager */
+ if (manager)
+ g_free(manager);
+
+ /* Reset Manager at Server */
+ server = tcore_plugin_ref_server(manager_plugin);
+ tcore_server_set_manager(server, NULL);
+}
+
+TReturn tcore_manager_set_request_dispatcher(Manager *manager,
+ ManagerRequestDispatcher request_dispatcher)
+{
+ if (!manager)
+ return TCORE_RETURN_FAILURE;
+
+ /* Update Request dispatcher at Manager */
+ manager->request_dispatcher = request_dispatcher;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_manager_set_notification_handler(Manager *manager,
+ ManagerNotificationHandler notification_handler)
+{
+ if (!manager)
+ return TCORE_RETURN_FAILURE;
+
+ /* Update Notification handler at Manager */
+ manager->notification_handler = notification_handler;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+enum tcore_manager_return tcore_manager_dispatch_request(Manager *manager, UserRequest *ur)
+{
+ if (!manager || !manager->request_dispatcher)
+ return TCORE_MANAGER_RETURN_CONTINUE;
+
+ return manager->request_dispatcher(manager, ur);
+}
+
+enum tcore_manager_return tcore_manager_send_notification(Manager *manager, CoreObject *source,
+ enum tcore_notification_command command,
+ unsigned int data_len, void *data)
+{
+ if (!manager || !manager->notification_handler)
+ return TCORE_MANAGER_RETURN_CONTINUE;
+
+ return manager->notification_handler(manager,
+ source, command, data_len, data);
+}
+
+TcorePlugin *tcore_manager_get_plugin(Manager *manager)
+{
+ if (!manager)
+ return NULL;
+
+ /* Provide 'parent plug-in' */
+ return manager->parent_plugin;
+}
/* CMUX Commands */
#define CMUX_COMMAND_SABM 0x2F
-#define CMUX_COMMAND_UA 0x63
-#define CMUX_COMMAND_DM 0x0F
-#define CMUX_COMMAND_DISC 0x43
-#define CMUX_COMMAND_UIH 0xEF
-#define CMUX_COMMAND_UI 0x03
+#define CMUX_COMMAND_UA 0x63
+#define CMUX_COMMAND_DM 0x0F
+#define CMUX_COMMAND_DISC 0x43
+#define CMUX_COMMAND_UIH 0xEF
+#define CMUX_COMMAND_UI 0x03
/* CMUX Delimiter Byte */
#define CMUX_FRAME_DELIMITER 0xF9
/* CMUX structure - Internal */
struct cmux_internal {
- tcore_cmux_channel *channel_info[CMUX_CHANNEL_MAX];
+ tcore_cmux_channel * channel_info[CMUX_CHANNEL_MAX];
int is_waiting;
/* All the local functions declared below */
static void _cmux_on_confirmation_message_send(TcorePending *plugin,
- gboolean result, void *user_data);
+ gboolean result, void *user_data);
tcore_cmux_object *_cmux_new(int max_channels, unsigned int buffer_size);
static void _cmux_free(tcore_cmux_object *cmux_obj);
static void _cmux_close_channel(tcore_cmux_object *cmux_obj, int channel_id);
static TcoreHal *_cmux_create_logical_hal(tcore_cmux_object *cmux_obj,
- tcore_cmux_channel *channel);
+ tcore_cmux_channel *channel);
static gboolean _cmux_recv_cmux_data(tcore_cmux_object *cmux_obj,
tcore_cmux_channel *channel);
static TReturn _cmux_send_data(TcoreHal *hal, int data_len, unsigned char *data);
static unsigned char *_cmux_encode_cmux_frame(tcore_cmux_object *cmux_obj,
- unsigned char *data, unsigned int length, int channel_id,
- int frame_type, unsigned char EA_bit, unsigned char CR_bit,
- unsigned char PF_bit, int *out_data_len);
+ unsigned char *data, unsigned int length, int channel_id,
+ int frame_type, unsigned char EA_bit, unsigned char CR_bit,
+ unsigned char PF_bit, int *out_data_len);
static tcore_cmux_object *_cmux_get_cmux_object(TcorePlugin *plugin);
static unsigned char _cmux_calc_crc(unsigned char *header, int length);
static int _cmux_check_recv_crc(unsigned char *data,
- unsigned char length,
- unsigned char rcv_fcs);
+ unsigned char length, unsigned char rcv_fcs);
static unsigned char _cmux_calc_crc(unsigned char *header, int length)
{
}
static int _cmux_check_recv_crc(unsigned char *data,
- unsigned char length,
- unsigned char rcv_fcs)
+ unsigned char length, unsigned char rcv_fcs)
{
unsigned char fcs = 0xFF; /* Init */
while ((*msg_start_ptr++ & 0x01))
msg_len++;
- if ((cmd_type & 0x02) == 0x02) { /* This is a command Request */
+ if ((cmd_type & 0x02) == 0x02) { /* This is a command Request */
switch (cmd_type) {
- case CMUX_COMMAND_MSC:
- dbg("Modem Status Command");
- break;
- case CMUX_COMMAND_CLD:
- dbg("Multiplexer close down");
-
- cmux_obj->cmux_state = CMUX_CLOSED;
-
- /* TODO - Need to notify regarding CMUX closure */
- tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
- break;
- default:
- /* We will be supporting these commands in Phase 2 */
- dbg("Default");
- break;
+ case CMUX_COMMAND_MSC:
+ dbg("Modem Status Command");
+ break;
+
+ case CMUX_COMMAND_CLD:
+ dbg("Multiplexer close down");
+
+ cmux_obj->cmux_state = CMUX_CLOSED;
+
+ /* TODO - Need to notify regarding CMUX closure */
+ tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
+ break;
+
+ default:
+ /* We will be supporting these commands in Phase 2 */
+ dbg("Default");
+ break;
}
}
} else
dbg("Frame Type: [0x%02x]", frame_type);
switch (frame_type) {
- case CMUX_COMMAND_UI:
- case CMUX_COMMAND_UIH:
- dbg("Received UI/UIH Frame");
- if (channel_id == CMUX_CHANNEL_0) { /* This is control info */
- dbg("Control information");
- _cmux_control_channel_handle(cmux_obj);
- } else {
- dbg("Normal information");
-
- /* Put in the logical HAL queue, this goes to the Cobject */
- if (FALSE == _cmux_recv_cmux_data(cmux_obj, channel))
- err("Failed receive callback");
- }
- break;
- case CMUX_COMMAND_UA:
- dbg("Received UA Frame - Channel State: [%d]", channel->channel_state);
- if (CMUX_CHANNEL_SABM_SEND_WAITING_FOR_UA == channel->channel_state) {
- channel->channel_state = CMUX_CHANNEL_ESTABLISHED;
+ case CMUX_COMMAND_UI:
+ case CMUX_COMMAND_UIH:
+ dbg("Received UI/UIH Frame");
+ if (channel_id == CMUX_CHANNEL_0) { /* This is control info */
+ dbg("Control information");
+ _cmux_control_channel_handle(cmux_obj);
+ } else {
+ dbg("Normal information");
+
+ /* Put in the logical HAL queue, this goes to the Cobject */
+ if (FALSE == _cmux_recv_cmux_data(cmux_obj, channel))
+ err("Failed receive callback");
+ }
+ break;
- if (channel->channel_id != CMUX_CHANNEL_0) {
- TcoreHal *hal;
-
- /* Create Logical HAL */
- hal = _cmux_create_logical_hal(cmux_obj, channel);
- if (hal != NULL) {
- dbg("Invoking CMUX Channel Setup callback for [%d] channel",
- channel->channel_id);
- /*
- * 'channel_setup_cb' cannot be NULL as it is MANDATED during
- * CMUX setup operation.
- */
- cmux_obj->internal_mux.channel_setup_cb(channel->channel_id, hal,
- cmux_obj->internal_mux.channel_setup_user_data);
- } else
- err("Failed to Create Logical HAL");
- }
-
- count++;
- dbg("Count: [%d]", count);
- if (cmux_obj->max_cmux_channels == count) {
- dbg("Invoking CMUX Channel Setup Complete callback - Total Channels: [%d]",
- count);
+ case CMUX_COMMAND_UA:
+ dbg("Received UA Frame - Channel State: [%d]", channel->channel_state);
+ if (CMUX_CHANNEL_SABM_SEND_WAITING_FOR_UA == channel->channel_state) {
+ channel->channel_state = CMUX_CHANNEL_ESTABLISHED;
+
+ if (channel->channel_id != CMUX_CHANNEL_0) {
+ TcoreHal *hal;
+
+ /* Create Logical HAL */
+ hal = _cmux_create_logical_hal(cmux_obj, channel);
+ if (hal != NULL) {
+ dbg("Invoking CMUX Channel Setup callback for [%d] channel",
+ channel->channel_id);
/*
- * 'setup_complete_cb' cannot be NULL as it is MANDATED during
+ * 'channel_setup_cb' cannot be NULL as it is MANDATED during
* CMUX setup operation.
*/
- cmux_obj->internal_mux.setup_complete_cb(
- cmux_obj->internal_mux.setup_complete_user_data);
+ cmux_obj->internal_mux.channel_setup_cb(channel->channel_id, hal,
+ cmux_obj->internal_mux.channel_setup_user_data);
+ } else
+ err("Failed to Create Logical HAL");
+ }
+
+ count++;
+ dbg("Count: [%d]", count);
+ if (cmux_obj->max_cmux_channels == count) {
+ dbg("Invoking CMUX Channel Setup Complete callback - Total Channels: [%d]",
+ count);
+ /*
+ * 'setup_complete_cb' cannot be NULL as it is MANDATED during
+ * CMUX setup operation.
+ */
+ cmux_obj->internal_mux.setup_complete_cb(
+ cmux_obj->internal_mux.setup_complete_user_data);
- /* Reset 'count' */
- count = 0;
- }
- } else if (CMUX_CHANNEL_DISC_SEND_WAITING_FOR_UA ==
- channel->channel_state) {
- channel->channel_state = CMUX_CHANNEL_CLOSED;
+ /* Reset 'count' */
+ count = 0;
+ }
+ } else if (CMUX_CHANNEL_DISC_SEND_WAITING_FOR_UA ==
+ channel->channel_state) {
+ channel->channel_state = CMUX_CHANNEL_CLOSED;
- if (channel_id == CMUX_CHANNEL_0) {
- cmux_obj->cmux_state = CMUX_CLOSED;
+ if (channel_id == CMUX_CHANNEL_0) {
+ cmux_obj->cmux_state = CMUX_CLOSED;
- /* TODO - Need to notify regarding CMUX closure */
- tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
- }
- } else
- err("Received UA in wrong state!!!");
+ /* TODO - Need to notify regarding CMUX closure */
+ tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
+ }
+ } else
+ err("Received UA in wrong state!!!");
- break;
- case CMUX_COMMAND_DM:
+ break;
+
+ case CMUX_COMMAND_DM:
+ /*
+ * 5.4.1 DLC Establishment : If the responding station is not ready or unwilling
+ * to establish the particular DLC it will reply with a DM frame with the
+ * F-bit set to 1.
+ */
+ dbg("Received DM Frame");
+ if ((channel->channel_state == CMUX_CHANNEL_ESTABLISHED)
+ || (channel->channel_state ==
+ CMUX_CHANNEL_SABM_SEND_WAITING_FOR_UA)) {
+ /* Channel State set to Close */
+ channel->channel_state = CMUX_CHANNEL_CLOSED;
+ }
+
+ /* Flush the Channel data */
+ _cmux_flush_channel_data(cmux_obj);
+ break;
+
+ case CMUX_COMMAND_DISC:
+ dbg("Received DISC Frame");
+ if (channel->poll_final_bit == 0) {
/*
- * 5.4.1 DLC Establishment : If the responding station is not ready or unwilling
- * to establish the particular DLC it will reply with a DM frame with the
- * F-bit set to 1.
+ * In the case where a CMUX_COMMAND_SABM or
+ * CMUX_COMMAND_DISC command with
+ * the P bit set to 0 is received then the received frame shall be
+ * discarded.
*/
- dbg("Received DM Frame");
- if ((channel->channel_state == CMUX_CHANNEL_ESTABLISHED)
- || (channel->channel_state ==
- CMUX_CHANNEL_SABM_SEND_WAITING_FOR_UA)) {
- /* Channel State set to Close */
- channel->channel_state = CMUX_CHANNEL_CLOSED;
- }
/* Flush the Channel data */
_cmux_flush_channel_data(cmux_obj);
- break;
- case CMUX_COMMAND_DISC:
- dbg("Received DISC Frame");
- if (channel->poll_final_bit == 0) {
+ } else {
+ if (channel->channel_state == CMUX_CHANNEL_CLOSED) {
/*
- * In the case where a CMUX_COMMAND_SABM or
- * CMUX_COMMAND_DISC command with
- * the P bit set to 0 is received then the received frame shall be
- * discarded.
+ * If a CMUX_COMMAND_DISC command is received while in
+ * disconnected mode a CMUX_COMMAND_DM response should
+ * be sent
*/
- /* Flush the Channel data */
- _cmux_flush_channel_data(cmux_obj);
- } else {
- if (channel->channel_state == CMUX_CHANNEL_CLOSED) {
- /*
- * If a CMUX_COMMAND_DISC command is received while in
- * disconnected mode a CMUX_COMMAND_DM response should
- * be sent
- */
+ /* Encoding frame */
+ send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
+ 0, channel_id, CMUX_COMMAND_DM,
+ 0x01, 0x01, 0x01, &len);
+ } else { /* Send Unnumbered Acknowledgement */
+ /* Encoding frame */
+ send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
+ 0, channel_id, CMUX_COMMAND_UA,
+ 0x01, 0x01, 0x01, &len);
+ }
- /* Encoding frame */
- send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
- 0, channel_id, CMUX_COMMAND_DM,
- 0x01, 0x01, 0x01, &len);
- } else { /* Send Unnumbered Acknowledgement */
- /* Encoding frame */
- send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
- 0, channel_id, CMUX_COMMAND_UA,
- 0x01, 0x01, 0x01, &len);
- }
-
- if (len == 0) {
- err("Failed to encode");
- return;
- }
+ if (len == 0) {
+ err("Failed to encode");
+ return;
+ }
- /* Send CMUX data */
- ret = _cmux_send_data(cmux_obj->phy_hal, len, send_data);
- dbg("return %d", ret);
+ /* Send CMUX data */
+ ret = _cmux_send_data(cmux_obj->phy_hal, len, send_data);
+ dbg("return %d", ret);
- /* Flush the Channel data */
- _cmux_flush_channel_data(cmux_obj);
+ /* Flush the Channel data */
+ _cmux_flush_channel_data(cmux_obj);
- /*
- * 5.3.4 Disconnect (DISC) command: CMUX_COMMAND_DISC
- * command sent at DLCI 0 have the same meaning as the
- * Multiplexer Close Down command.
- */
- if (channel_id == CMUX_CHANNEL_0) {
- cmux_obj->cmux_state = CMUX_CLOSED;
+ /*
+ * 5.3.4 Disconnect (DISC) command: CMUX_COMMAND_DISC
+ * command sent at DLCI 0 have the same meaning as the
+ * Multiplexer Close Down command.
+ */
+ if (channel_id == CMUX_CHANNEL_0) {
+ cmux_obj->cmux_state = CMUX_CLOSED;
- /* Close CMUX */
- /* TODO - Need to notify regarding CMUX closure */
- tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
- }
+ /* Close CMUX */
+ /* TODO - Need to notify regarding CMUX closure */
+ tcore_cmux_close(cmux_obj->phy_hal, NULL, NULL);
}
- break;
- case CMUX_COMMAND_SABM:
- dbg("Received SABM Frame");
- if (channel->poll_final_bit == 0) {
- /*
- * In the case where a CMUX_COMMAND_SABM or CMUX_COMMAND_DISC
- * command with the P bit set to 0 is received then the received frame
- * shall be discarded.
- */
+ }
+ break;
- /* Flush the Channel data */
- _cmux_flush_channel_data(cmux_obj);
- } else {
- /* Encoding frame */
- send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
- 0, channel_id, CMUX_COMMAND_UA,
- 0x01, 0x01, 0x01, &len);
- if (len != 0)
- /* Send CMUX data */
- ret = _cmux_send_data(cmux_obj->phy_hal, len, send_data);
- else
- err("Failed to encode");
-
- if (channel->channel_state != CMUX_CHANNEL_ESTABLISHED)
- /* Channel State set to Established */
- channel->channel_state = CMUX_CHANNEL_ESTABLISHED;
+ case CMUX_COMMAND_SABM:
+ dbg("Received SABM Frame");
+ if (channel->poll_final_bit == 0) {
+ /*
+ * In the case where a CMUX_COMMAND_SABM or CMUX_COMMAND_DISC
+ * command with the P bit set to 0 is received then the received frame
+ * shall be discarded.
+ */
+
+ /* Flush the Channel data */
+ _cmux_flush_channel_data(cmux_obj);
+ } else {
+ /* Encoding frame */
+ send_data = _cmux_encode_cmux_frame(cmux_obj, NULL,
+ 0, channel_id, CMUX_COMMAND_UA,
+ 0x01, 0x01, 0x01, &len);
+ if (len != 0)
+ /* Send CMUX data */
+ ret = _cmux_send_data(cmux_obj->phy_hal, len, send_data);
+ else
+ err("Failed to encode");
+
+ if (channel->channel_state != CMUX_CHANNEL_ESTABLISHED) {
+ /* Channel State set to Established */
+ channel->channel_state = CMUX_CHANNEL_ESTABLISHED;
}
- break;
- default:
- warn("invalid frame_type");
- break;
+ }
+ break;
+
+ default:
+ warn("invalid frame_type");
+ break;
}
dbg("Exit");
} else {
cmux_obj->internal_mux.info_field_len = *(frame_process_ptr + 1) << 7;
cmux_obj->internal_mux.info_field_len =
- (cmux_obj->internal_mux.info_field_len
- | ((*frame_process_ptr++ & 0xFE) >> 1));
+ (cmux_obj->internal_mux.info_field_len | ((*frame_process_ptr++ & 0xFE) >> 1));
header_length = 4;
frame_process_ptr++;
}
/* Directly send to Physical HAL */
ret = tcore_hal_send_data(hal, data_len, (void *) data);
- if (ret != TCORE_RETURN_SUCCESS) {
+ if (ret != TCORE_RETURN_SUCCESS)
err("Failed to send CMUX data");
- } else
+ else
dbg("Successfully sent CMUX data");
dbg("Exit");
return FALSE;
}
- dbg("Dispatching to logical HAL - hal: [%p]", hal);
+ dbg("Dispatching to logical HAL - hal: [0x%x]", (unsigned int)hal);
if (tcore_hal_dispatch_response_data(hal, 0,
cmux_obj->internal_mux.info_field_len,
cmux_obj->internal_mux.info_field)
/* Send DSC command */
/* Encoding frame */
send_data = _cmux_encode_cmux_frame(cmux_obj, NULL, 0, channel_id,
- CMUX_COMMAND_DISC, 0x01, 0x01, 0x01, &len);
+ CMUX_COMMAND_DISC, 0x01, 0x01, 0x01, &len);
if (len != 0) {
/* Send CMUX data */
ret = _cmux_send_data(cmux_obj->phy_hal, len, send_data);
- dbg("return %d", ret);
- }
- else {
+ dbg("return %d", ret);
+ } else {
err("Failed to encode");
- }
- } else
+ }
+ } else {
/* Channel is already closed */
err("Channel is already closed");
+ }
dbg("Exit");
}
if (++pos >= length)
return;
- switch(decode_state) {
- case TCORE_CMUX_DECODE_FLAG_HUNT:
- full_frame_len = 0;
- dec_length = 0;
- dec_fcs = 0xFF;
- dec_data = cmux_obj->cmux_buffer;
- goto FLAG_HUNT;
- break;
- case TCORE_CMUX_DECODE_ADDR_HUNT:
- goto ADDR_HUNT;
- break;
- case TCORE_CMUX_DECODE_CONTROL_HUNT:
- goto CONTROL_HUNT;
- break;
- case TCORE_CMUX_DECODE_LENGTH1_HUNT:
- goto LENGTH1_HUNT;
- break;
- case TCORE_CMUX_DECODE_LENGTH2_HUNT:
- goto LENGTH2_HUNT;
- break;
- case TCORE_CMUX_DECODE_DATA_HUNT:
- goto DATA_HUNT;
- break;
- case TCORE_CMUX_DECODE_FCS_HUNT:
- goto FCS_HUNT;
- break;
- default:
- warn("invalid decode_state");
- break;
+ switch (decode_state) {
+ case TCORE_CMUX_DECODE_FLAG_HUNT:
+ full_frame_len = 0;
+ dec_length = 0;
+ dec_fcs = 0xFF;
+ dec_data = cmux_obj->cmux_buffer;
+ goto FLAG_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_ADDR_HUNT:
+ goto ADDR_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_CONTROL_HUNT:
+ goto CONTROL_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_LENGTH1_HUNT:
+ goto LENGTH1_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_LENGTH2_HUNT:
+ goto LENGTH2_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_DATA_HUNT:
+ goto DATA_HUNT;
+ break;
+
+ case TCORE_CMUX_DECODE_FCS_HUNT:
+ goto FCS_HUNT;
+ break;
+
+ default:
+ warn("invalid decode_state");
+ break;
}
FLAG_HUNT:
return TCORE_RETURN_EINVAL;
}
- dbg("Physical HAL: [%p] cmux_buf_size: [%d]",
- phy_hal, cmux_buf_size);
+ dbg("Physical HAL: [%p] cmux_buf_size: [%d]", phy_hal, cmux_buf_size);
/*
* Max Channels
* (+ 1) is for CMUX Control Channel
*/
- if ((max_channels +1) >= CMUX_CHANNEL_MAX) {
+ if ((max_channels + 1) >= CMUX_CHANNEL_MAX) {
err("Number of Channels requested is greater than supported");
return TCORE_RETURN_EINVAL;
}
{
TcorePlugin *p;
- p = calloc(1, sizeof(struct tcore_plugin_type));
+ p = g_try_malloc0(sizeof(struct tcore_plugin_type));
if (!p)
return NULL;
if (filename)
- p->filename = strdup(filename);
+ p->filename = g_strdup(filename);
p->desc = desc;
p->property = g_hash_table_new(g_str_hash, g_str_equal);
}
if (plugin->filename) {
- free(plugin->filename);
+ g_free(plugin->filename);
plugin->filename = NULL;
}
plugin->handle = NULL;
}
- free(plugin);
+ g_free(plugin);
}
const struct tcore_plugin_define_desc *tcore_plugin_get_description(TcorePlugin *plugin)
return strdup(plugin->filename);
}
-const char* tcore_plugin_ref_plugin_name(TcorePlugin *plugin)
+const char *tcore_plugin_ref_plugin_name(TcorePlugin *plugin)
{
if (!plugin)
return NULL;
+ if (!plugin->desc)
+ return NULL;
+
if (!plugin->desc->name)
return NULL;
if (!co)
continue;
- if (tcore_object_get_type(co) == type) {
+ if (tcore_object_get_type(co) == type)
return co;
- }
}
return NULL;
if (!co)
continue;
- if ((CORE_OBJECT_TYPE_DEFAULT |(tcore_object_get_type(co) & 0x0FF00000)) == type)
+ if ((CORE_OBJECT_TYPE_DEFAULT | (tcore_object_get_type(co) & 0x0FF00000)) == type)
rlist = g_slist_append(rlist, co);
}
return rlist;
}
-TReturn tcore_plugin_core_object_event_emit(TcorePlugin *plugin, const char *event, const void *event_info)
+TReturn tcore_plugin_core_object_event_emit(TcorePlugin *plugin,
+ const char *event, const void *event_info)
{
GSList *list;
CoreObject *co;
if (prev != NULL) {
free(prev);
g_hash_table_replace(plugin->property, (gpointer)key, data);
- }
- else {
+ } else
g_hash_table_insert(plugin->property, strdup(key), data);
- }
return TCORE_RETURN_SUCCESS;
}
free(pending->data);
}
- if (pending->timer_src) {
+ if (pending->timer_src)
g_source_remove(pending->timer_src);
- }
free(pending);
}
return TCORE_RETURN_ENOMEM;
memcpy(pending->data, data, data_len);
- }
- else {
+ } else
pending->data = data;
- }
return TCORE_RETURN_SUCCESS;
}
/* pending timer */
if (pending->timeout > 0 && pending->on_timeout) {
dbg("start pending timer! (%d secs)", pending->timeout);
- pending->timer_src = g_timeout_add_seconds(pending->timeout, _on_pending_timeout, pending);
+ pending->timer_src =
+ g_timeout_add_seconds(pending->timeout,
+ _on_pending_timeout, pending);
}
return TCORE_RETURN_SUCCESS;
}
{
TcoreQueue *queue;
- queue = calloc(1, sizeof(struct tcore_queue_type));
+ queue = g_try_malloc0(sizeof(struct tcore_queue_type));
if (!queue)
return FALSE;
queue->gq = g_queue_new();
if (!queue->gq) {
- free(queue);
+ g_free(queue);
return FALSE;
}
if (queue->gq)
g_queue_free(queue->gq);
- free(queue);
+ g_free(queue);
}
static void _tcore_queue_push_head(TcoreQueue *queue, TcorePending *pending)
do {
i++;
tmp = g_queue_peek_nth(queue->gq, i);
- if (!tmp) {
+ if (!tmp)
break;
- }
if (tmp->priority == TCORE_PENDING_PRIORITY_IMMEDIATELY)
continue;
tcore_pending_get_priority(pending, &priority);
switch (priority) {
- case TCORE_PENDING_PRIORITY_IMMEDIATELY:
- case TCORE_PENDING_PRIORITY_HIGH:
- pending->queue = queue;
- _tcore_queue_push_head(queue, pending);
- break;
-
- case TCORE_PENDING_PRIORITY_DEFAULT:
- case TCORE_PENDING_PRIORITY_LOW:
- pending->queue = queue;
- g_queue_push_tail(queue->gq, pending);
- break;
-
- default:
- return TCORE_RETURN_EINVAL;
- break;
+ case TCORE_PENDING_PRIORITY_IMMEDIATELY:
+ case TCORE_PENDING_PRIORITY_HIGH:
+ pending->queue = queue;
+ _tcore_queue_push_head(queue, pending);
+ break;
+
+ case TCORE_PENDING_PRIORITY_DEFAULT:
+ case TCORE_PENDING_PRIORITY_LOW:
+ pending->queue = queue;
+ g_queue_push_tail(queue->gq, pending);
+ break;
+
+ default:
+ return TCORE_RETURN_EINVAL;
}
dbg("pending(%p) push to queue(%p). queue length=%d",
- pending, queue, g_queue_get_length(queue->gq));
+ pending, queue, g_queue_get_length(queue->gq));
return TCORE_RETURN_SUCCESS;
}
}
i++;
- } while(1);
+ } while (1);
return NULL;
}
static TcorePending *_tcore_queue_search_full(TcoreQueue *queue, unsigned int id,
- enum tcore_request_command command, enum search_field field, gboolean flag_pop)
+ enum tcore_request_command command, enum search_field field, gboolean flag_pop)
{
TcorePending *pending = NULL;
int i = 0;
i++;
continue;
}
- }
- else if ((field & 0xF0) == 0x20) {
+ } else if ((field & 0xF0) == 0x20) {
/* search option is sent pending */
if (pending->flag_sent == FALSE) {
i++;
if ((field & 0x0F) == SEARCH_FIELD_ID_ALL) {
if (pending->id == id) {
- if (flag_pop == TRUE) {
+ if (flag_pop == TRUE)
pending = g_queue_pop_nth(queue->gq, i);
- }
+
break;
}
- }
- else if ((field & 0x0F) == SEARCH_FIELD_COMMAND_ALL) {
+ } else if ((field & 0x0F) == SEARCH_FIELD_COMMAND_ALL) {
ur = tcore_pending_ref_user_request(pending);
if (tcore_user_request_get_command(ur) == command) {
- if (flag_pop == TRUE) {
+ if (flag_pop == TRUE)
pending = g_queue_pop_nth(queue->gq, i);
- }
+
break;
}
}
do {
pending = g_queue_peek_nth(queue->gq, i);
- if (!pending) {
+ if (!pending)
return NULL;
- }
/* skip already sent immediately pending */
if (pending->priority == TCORE_PENDING_PRIORITY_IMMEDIATELY) {
- if (pending->flag_sent == FALSE) {
+ if (pending->flag_sent == FALSE)
break;
- }
i++;
continue;
- }
- else {
+ } else
break;
- }
} while (pending != NULL);
if (pending->flag_sent == TRUE) {
do {
pending = g_queue_peek_nth(queue->gq, i);
- if (!pending) {
+ if (!pending)
break;
- }
if (pending->priority == TCORE_PENDING_PRIORITY_IMMEDIATELY) {
i++;
if (queue->hal) {
dbg("hal %p", queue->hal);
tcore_hal_dispatch_response_data(queue->hal, pending->id, 0, NULL);
- }
- else {
+ } else {
dbg("no hal");
pending = tcore_queue_pop_by_pending(queue, pending);
tcore_pending_emit_response_callback(pending, 0, NULL);
#include "plugin.h"
#include "hal.h"
#include "server.h"
+#include "manager.h"
#include "user_request.h"
#include "core_object.h"
#include "co_ps.h"
struct tcore_server_type {
GMainLoop *mainloop;
+
+ Manager *manager;
+
GSList *plugins;
GSList *communicators;
GSList *storages;
GSList *hals;
GSList *modems;
- GSList *template_co;
-
GSList *hook_list_request;
GSList *hook_list_notification;
TcorePlugin *default_plugin;
GSList *list;
TcoreModem *modem;
- if (s->default_plugin != NULL) {
+ if (s->default_plugin != NULL)
return s->default_plugin;
- }
for (list = s->modems; list; list = list->next) {
modem = list->data;
continue;
s->default_plugin = modem->modem_plugin;
+
return modem->modem_plugin;
}
return NULL;
}
- s->mainloop = g_main_loop_new (NULL, FALSE);
+ s->mainloop = g_main_loop_new(NULL, FALSE);
if (!s->mainloop) {
err("mainloop creation failed!!!");
free(s);
}
/* Unref 'mainloop' */
- if (s->mainloop) {
+ if (s->mainloop)
g_main_loop_unref(s->mainloop);
- }
/* Free server */
free(s);
return TCORE_RETURN_SUCCESS;
}
+TReturn tcore_server_set_manager(Server *s, Manager *manager)
+{
+ if (!s)
+ return TCORE_RETURN_EINVAL;
+
+ s->manager = manager;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+Manager *tcore_server_ref_manager(Server *s)
+{
+ if (!s)
+ return NULL;
+
+ return s->manager;
+}
+
TReturn tcore_server_add_plugin(Server *s, TcorePlugin *plugin)
{
if (!s || !plugin)
if (!s || !comm)
return TCORE_RETURN_EINVAL;
- s->communicators = g_slist_remove( s->communicators, comm );
+ s->communicators = g_slist_remove(s->communicators, comm);
return TCORE_RETURN_SUCCESS;
}
for (list = s->communicators; list; list = list->next) {
comm = list->data;
- if (!comm) {
+ if (!comm)
continue;
- }
- if (g_strcmp0(tcore_communicator_ref_name(comm), name) == 0) {
+ if (g_strcmp0(tcore_communicator_ref_name(comm), name) == 0)
return comm;
- }
}
return NULL;
for (list = s->storages; list; list = list->next) {
strg = list->data;
- if (!strg) {
+ if (!strg)
continue;
- }
- if (g_strcmp0(tcore_storage_ref_name(strg), name) == 0) {
+ if (g_strcmp0(tcore_storage_ref_name(strg), name) == 0)
return strg;
- }
}
return NULL;
for (list = s->hals; list; list = list->next) {
temp = list->data;
- if (!temp) {
+ if (!temp)
continue;
- }
if (temp == hal)
return TCORE_RETURN_EALREADY;
return s->hals;
}
-CoreObject *tcore_server_find_template_object(Server *s, unsigned int type)
-{
- GSList *list;
- CoreObject *template_co;
-
- for (list = s->template_co; list; list = list->next) {
- template_co = list->data;
- if (template_co == NULL)
- continue;
-
- if (type == tcore_object_get_type(template_co))
- return template_co;
- }
-
- return NULL;
-}
-
TcoreHal *tcore_server_find_hal(Server *s, const char *name)
{
GSList *list;
for (list = s->hals; list; list = list->next) {
hal = list->data;
- if (!hal) {
+ if (!hal)
continue;
- }
buf = tcore_hal_get_name(hal);
if (!buf)
char *modem_name = NULL;
TcorePlugin *p;
enum tcore_request_command command = 0;
- GSList *list, *co_list=NULL;
+ GSList *list, *co_list = NULL;
struct hook_request_type *hook;
int category;
CoreObject *o;
TReturn ret = TCORE_RETURN_ENOSYS;
TReturn prev_ret = TCORE_RETURN_FAILURE;
+ enum tcore_ops_type ops_type = TCORE_OPS_TYPE_CP;
if (!s || !ur)
return TCORE_RETURN_EINVAL;
for (list = s->hook_list_request; list; list = list->next) {
hook = list->data;
- if (!hook) {
+ if (!hook)
continue;
- }
if (hook->command == tcore_user_request_get_command(ur)) {
if (hook->func) {
- enum tcore_hook_return hook_ret;
+ enum tcore_hook_return h_ret;
- hook_ret = hook->func(s, ur, hook->user_data);
- if (hook_ret == TCORE_HOOK_RETURN_STOP_PROPAGATION) {
+ h_ret = hook->func(s, ur, hook->user_data);
+ if (h_ret == TCORE_HOOK_RETURN_STOP_PROPAGATION)
return TCORE_RETURN_SUCCESS;
- } else if (hook_ret == TCORE_HOOK_RETURN_STOP_PROPAGATION_FAIL) {
- return TCORE_RETURN_FAILURE;
- }
}
}
}
+ /* In case Manager is available, process Request in Manager */
+ if (s->manager) {
+ enum tcore_manager_return mgr_ret;
+
+ mgr_ret = tcore_manager_dispatch_request(s->manager, ur);
+
+ if (mgr_ret == TCORE_MANAGER_RETURN_FAILURE)
+ return TCORE_RETURN_FAILURE;
+ else if (mgr_ret == TCORE_MANAGER_RETURN_STOP)
+ return TCORE_RETURN_SUCCESS;
+ else if (mgr_ret == TCORE_MANAGER_RETURN_CONTINUE_IMS)
+ ops_type = TCORE_OPS_TYPE_IMS;
+ else
+ ops_type = TCORE_OPS_TYPE_CP;
+ }
+
modem_name = tcore_user_request_get_modem_name(ur);
if (!modem_name)
return TCORE_RETURN_EINVAL;
- p = tcore_server_find_plugin(s, (const char*)modem_name);
+ p = tcore_server_find_plugin(s, (const char *)modem_name);
if (!p) {
free(modem_name);
return TCORE_RETURN_SERVER_WRONG_PLUGIN;
* The concept is to consider that the Request is being
* processed atleast by 1 entity.
*/
- ret = tcore_object_dispatch_request(o, ur);
- if ( ret != TCORE_RETURN_SUCCESS) {
+ ret = tcore_object_dispatch_request_with_type(o, ur, ops_type);
+ if (ret != TCORE_RETURN_SUCCESS)
dbg("failed... ret=[%d]", ret);
- }
- else {
+ else
prev_ret = ret;
- }
+
ret = prev_ret;
}
if (!s)
return TCORE_RETURN_EINVAL;
+ /* In case Manager is available, process Notification in Manager */
+ if (s->manager) {
+ enum tcore_manager_return mgr_ret;
+
+ /* Send notification to 'manager' */
+ mgr_ret = tcore_manager_send_notification(s->manager,
+ source, command, data_len, data);
+
+ if (mgr_ret == TCORE_MANAGER_RETURN_FAILURE)
+ return TCORE_RETURN_FAILURE;
+ else if (mgr_ret == TCORE_MANAGER_RETURN_STOP)
+ return TCORE_RETURN_SUCCESS;
+ /* in other cases, send notification to communicator. */
+ }
+
for (list = s->hook_list_notification; list;) {
hook = list->data;
list = list->next;
- if (!hook) {
+ if (!hook)
continue;
- }
- if (hook->command == command) {
- if (hook->func(s, source, command, data_len, data, hook->user_data) == TCORE_HOOK_RETURN_STOP_PROPAGATION) {
+ if (hook->command == command)
+ if (hook->func(s, source,
+ command, data_len, data,
+ hook->user_data) == TCORE_HOOK_RETURN_STOP_PROPAGATION)
return TCORE_RETURN_SUCCESS;
- }
- }
}
for (list = s->communicators; list;) {
comm = list->data;
list = list->next;
- if (!comm) {
+ if (!comm)
continue;
- }
tcore_communicator_send_notification(comm, source, command, data_len, data);
}
}
TReturn tcore_server_add_request_hook(Server *s,
- enum tcore_request_command command,
- TcoreServerRequestHook func, void *user_data)
+ enum tcore_request_command command,
+ TcoreServerRequestHook func, void *user_data)
{
struct hook_request_type *hook;
for (list = s->hook_list_request; list; list = list->next) {
hook = list->data;
- if (!hook) {
+ if (!hook)
continue;
- }
if (hook->func == func) {
s->hook_list_request = g_slist_remove(s->hook_list_request, hook);
}
TReturn tcore_server_add_notification_hook(Server *s,
- enum tcore_notification_command command,
- TcoreServerNotificationHook func, void *user_data)
+ enum tcore_notification_command command,
+ TcoreServerNotificationHook func, void *user_data)
{
struct hook_notification_type *hook;
}
TReturn tcore_server_remove_notification_hook(Server *s,
- TcoreServerNotificationHook func)
+ TcoreServerNotificationHook func)
{
struct hook_notification_type *hook;
GSList *list;
for (list = s->hook_list_notification; list; list = list->next) {
hook = list->data;
- if (!hook) {
+ if (!hook)
continue;
- }
if (hook->func == func) {
s->hook_list_notification = g_slist_remove(s->hook_list_notification, hook);
/* Add 'modem' to 'modems' list */
s->modems = g_slist_append(s->modems, modem);
dbg("Added to 'modems' entry - CP Name: [%s] Modem Interface Plug-in: [%s]",
- modem->cp_name, tcore_plugin_ref_plugin_name(modem_iface_plugin));
+ modem->cp_name, tcore_plugin_ref_plugin_name(modem_iface_plugin));
return modem;
}
modem = __get_modem(modem_plugin);
if (modem == NULL) {
err("Failed to find 'modem' for Plug-in: [%s]",
- tcore_plugin_ref_plugin_name(modem_plugin));
+ tcore_plugin_ref_plugin_name(modem_plugin));
+
return NULL;
}
}
gboolean tcore_server_add_cp_mapping_tbl_entry(TcoreModem *modem,
- unsigned int co_type, TcoreHal *hal)
+ unsigned int co_type, TcoreHal *hal)
{
if (modem == NULL) {
err("Modem is NULL");
* Set the Mapping Table to the Modems list
*/
modem->mapping_tbl =
- tcore_object_add_mapping_tbl_entry(modem->mapping_tbl,
- co_type, hal);
+ tcore_object_add_mapping_tbl_entry(modem->mapping_tbl,
+ co_type, hal);
return TRUE;
}
}
void tcore_server_remove_cp_mapping_tbl_entry(TcoreModem *modem,
- TcoreHal *hal)
+ TcoreHal *hal)
{
if (modem == NULL) {
err("Modem is NULL");
modem = __get_modem(modem_plugin);
if (modem == NULL) {
err("Failed to find 'modem' for Modem Plug-in: [%s]",
- tcore_plugin_ref_plugin_name(modem_plugin));
+ tcore_plugin_ref_plugin_name(modem_plugin));
return NULL;
}
msg("Modem: [0x%x] CP Name: [%s]", modem, modem->cp_name);
msg("Modem Plug-in: [%s] <---> Modem Interface Plug-in: [%s]",
- tcore_plugin_ref_plugin_name(modem->modem_plugin),
- tcore_plugin_ref_plugin_name(modem->modem_iface_plugin));
+ tcore_plugin_ref_plugin_name(modem->modem_plugin),
+ tcore_plugin_ref_plugin_name(modem->modem_iface_plugin));
}
}
TReturn tcore_server_load_modem_plugin(Server *s,
- TcoreModem *modem,
- const char *name)
+ TcoreModem *modem, const char *name)
{
struct tcore_plugin_define_desc *desc;
TcorePlugin *modem_plugin;
if ((s == NULL) || (modem == NULL) || (name == NULL)) {
err("Server: [%p] modem: [%p] Plug-in Name (.so): [%s] ",
- s, modem, name);
+ s, modem, name);
ret = TCORE_RETURN_EINVAL;
goto out;
}
dbg("Plugin %s initialization success", desc->name);
/* Notify addition of Plug-in to Upper Layers */
- tcore_server_send_notification(s, NULL, TNOTI_SERVER_ADDED_MODEM_PLUGIN,
- 0, modem_plugin);
+ tcore_server_send_notification(s, NULL,
+ TNOTI_SERVER_ADDED_MODEM_PLUGIN,
+ 0, modem_plugin);
ret = TCORE_RETURN_SUCCESS;
}
msg("Modem Plug-in: [%s] <---> Modem Interface Plug-in: [%s] - CP Name: [%s]",
- tcore_plugin_ref_plugin_name(modem->modem_plugin),
- tcore_plugin_ref_plugin_name(modem->modem_iface_plugin), modem->cp_name);
+ tcore_plugin_ref_plugin_name(modem->modem_plugin),
+ tcore_plugin_ref_plugin_name(modem->modem_iface_plugin), modem->cp_name);
/* Notify removal of Plug-in to Upper Layers */
- tcore_server_send_notification(s, NULL, TNOTI_SERVER_REMOVED_MODEM_PLUGIN,
- 0, modem_plugin);
+ tcore_server_send_notification(s, NULL,
+ TNOTI_SERVER_REMOVED_MODEM_PLUGIN,
+ 0, modem_plugin);
/* Extract descriptor of Modem Plug-in */
desc = tcore_plugin_get_description(modem_plugin);
/* Unload Modem Plug-in */
if (desc->unload != NULL) {
dbg("Unloading Modem Plug-in: [%s]",
- tcore_plugin_ref_plugin_name(modem_plugin));
+ tcore_plugin_ref_plugin_name(modem_plugin));
desc->unload(modem_plugin);
}
}
dbg("Modem is NULL");
continue;
}
- if (NULL != modem->modem_plugin) {
+
+ if (NULL != modem->modem_plugin)
modem_plugin_list = g_slist_append(modem_plugin_list, modem->modem_plugin);
- }
}
return modem_plugin_list;
TcorePlugin *parent_plugin;
};
-struct storage_callback_type{
+struct storage_callback_type {
TcoreStorageKeyCallback cb_fn;
void *user_data;
};
strg->parent_plugin = plugin;
strg->ops = ops;
- strg->callback = g_hash_table_new_full(g_str_hash,g_str_equal, g_free, NULL);
+ strg->callback = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
tcore_server_add_storage(tcore_plugin_ref_server(plugin), strg);
if (!path)
return NULL;
- if (!strg || !strg->ops || !strg->ops->create_handle) {
+ if (!strg || !strg->ops || !strg->ops->create_handle)
return NULL;
- }
return strg->ops->create_handle(strg, path);
}
if (!handle)
return FALSE;
- if (!strg || !strg->ops || !strg->ops->remove_handle) {
+ if (!strg || !strg->ops || !strg->ops->remove_handle)
return FALSE;
- }
return strg->ops->remove_handle(strg, handle);
}
gboolean tcore_storage_set_int(Storage *strg, enum tcore_storage_key key,
- int value)
+ int value)
{
- if (!strg || !strg->ops || !strg->ops->set_int) {
+ if (!strg || !strg->ops || !strg->ops->set_int)
return FALSE;
- }
return strg->ops->set_int(strg, key, value);
}
gboolean tcore_storage_set_string(Storage *strg, enum tcore_storage_key key,
const char *value)
{
- if (!strg || !strg->ops || !strg->ops->set_string) {
+ if (!strg || !strg->ops || !strg->ops->set_string)
return FALSE;
- }
return strg->ops->set_string(strg, key, value);
}
gboolean tcore_storage_set_bool(Storage *strg, enum tcore_storage_key key,
- gboolean value)
+ gboolean value)
{
- if (!strg || !strg->ops || !strg->ops->set_bool) {
+ if (!strg || !strg->ops || !strg->ops->set_bool)
return FALSE;
- }
return strg->ops->set_bool(strg, key, value);
}
int tcore_storage_get_int(Storage *strg, enum tcore_storage_key key)
{
- if (!strg || !strg->ops || !strg->ops->get_int) {
+ if (!strg || !strg->ops || !strg->ops->get_int)
return -1;
- }
return strg->ops->get_int(strg, key);
}
char *tcore_storage_get_string(Storage *strg, enum tcore_storage_key key)
{
- if (!strg || !strg->ops || !strg->ops->get_string) {
+ if (!strg || !strg->ops || !strg->ops->get_string)
return NULL;
- }
return strg->ops->get_string(strg, key);
}
gboolean tcore_storage_get_bool(Storage *strg, enum tcore_storage_key key)
{
- if (!strg || !strg->ops || !strg->ops->get_bool) {
+ if (!strg || !strg->ops || !strg->ops->get_bool)
return FALSE;
- }
return strg->ops->get_bool(strg, key);
}
static void tcore_storage_vkey_callback_dispatcher(Storage *strg,
- enum tcore_storage_key key, void *value)
+ enum tcore_storage_key key, void *value)
{
gchar *key_gen = NULL;
GSList *cb_data = NULL;
}
gboolean tcore_storage_set_key_callback(Storage *strg,
- enum tcore_storage_key key, TcoreStorageKeyCallback cb, void *user_data)
+ enum tcore_storage_key key, TcoreStorageKeyCallback cb, void *user_data)
{
gpointer tmp = NULL;
gchar *key_gen = NULL;
struct storage_callback_type *tmp_cb = NULL;
if (!strg || !strg->ops || !strg->ops->set_key_callback)
- {
return FALSE;
- }
strg_cb_data = g_new0(struct storage_callback_type, 1);
strg_cb_data->cb_fn = cb;
tmp = g_slist_append(tmp, strg_cb_data);
g_hash_table_replace(strg->callback, g_strdup(key_gen), tmp);
- }
- else {
+ } else {
GSList *data = NULL;
data = g_slist_append(data, strg_cb_data);
g_hash_table_insert(strg->callback, g_strdup(key_gen), data);
}
gboolean tcore_storage_remove_key_callback(Storage *strg,
- enum tcore_storage_key key, TcoreStorageKeyCallback cb)
+ enum tcore_storage_key key, TcoreStorageKeyCallback cb)
{
GSList *tmp = NULL;
gchar *key_gen = NULL;
int cb_cnt = 0;
struct storage_callback_type *tmp_cb = NULL;
- if (!strg || !strg->ops || !strg->ops->remove_key_callback) {
+ if (!strg || !strg->ops || !strg->ops->remove_key_callback)
return FALSE;
- }
key_gen = g_strdup_printf("%d", key);
tmp = g_hash_table_lookup(strg->callback, key_gen);
- if (tmp == NULL){
+ if (tmp == NULL) {
g_free(key_gen);
return FALSE;
}
}
gboolean tcore_storage_update_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param)
+ const char *query, GHashTable *in_param)
{
if (!strg || !handle || !query)
return FALSE;
- if (!strg->ops || !strg->ops->update_query_database) {
+ if (!strg->ops || !strg->ops->update_query_database)
return FALSE;
- }
return strg->ops->update_query_database(strg, handle, query, in_param);
}
gboolean tcore_storage_read_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param,
- GHashTable *out_param, int out_param_cnt)
+ const char *query, GHashTable *in_param,
+ GHashTable *out_param, int out_param_cnt)
{
if (!strg || !handle || !query)
return FALSE;
- if (!strg->ops || !strg->ops->read_query_database) {
+ if (!strg->ops || !strg->ops->read_query_database)
return FALSE;
- }
return strg->ops->read_query_database(strg, handle, query,
in_param, out_param, out_param_cnt);
}
gboolean tcore_storage_insert_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param)
+ const char *query, GHashTable *in_param)
{
if (!strg || !handle || !query)
return FALSE;
- if (!strg->ops || !strg->ops->insert_query_database) {
+ if (!strg->ops || !strg->ops->insert_query_database)
return FALSE;
- }
return strg->ops->insert_query_database(strg, handle, query, in_param);
}
gboolean tcore_storage_remove_query_database(Storage *strg, void *handle,
- const char *query, GHashTable *in_param)
+ const char *query, GHashTable *in_param)
{
if (!strg || !handle || !query)
return FALSE;
- if (!strg->ops || !strg->ops->remove_query_database) {
+ if (!strg->ops || !strg->ops->remove_query_database)
return FALSE;
- }
return strg->ops->remove_query_database(strg, handle, query, in_param);
}
if (ur->data)
free(ur->data);
- if(ur->metainfo)
+ if (ur->metainfo)
free(ur->metainfo);
dbg("user_request(%p) free.", ur);
hook = list->data;
list = list->next;
- if (!hook) {
+ if (!hook)
continue;
- }
if (hook->func)
hook->func(ur, command, data_len, data, hook->user_data);
}
memcpy(ur->data, data, data_len);
- }
- else
+ } else
ur->data_len = 0;
- }
- else {
+ } else
ur->data = NULL;
- }
return TCORE_RETURN_SUCCESS;
}
}
memcpy(ur->metainfo, metainfo, metainfo_len);
- }
- else
+ } else
ur->metainfo_len = 0;
- }
- else {
+ } else
ur->metainfo = NULL;
- }
return TCORE_RETURN_SUCCESS;
}
#include "util.h"
-#define tabGsmUniMax2 9
-#define tabGsmUniMax 42
+#define tabGsmUniMax2 9
+#define tabGsmUniMax 42
+#define TAB_SPACE " "
gboolean tcore_debug = TRUE;
-static gboolean _find_gsm_code_exception_table(unsigned short src);
-static int _get_gsm_code_size(unsigned short* src, int src_len);
-static gboolean _convert_gsm_to_unicode(unsigned short *dest, int dest_len, unsigned char *src, unsigned int src_len);
-static int _convert_gsm_to_ucs2(unsigned short* dest, unsigned char* src, unsigned int src_len);
-static void _convert_gsm_to_utf8(unsigned char *dest, unsigned short *dest_len, unsigned char *src, unsigned int src_len);
-static gboolean _convert_unicode_to_gsm(unsigned char* dest, int dest_len, unsigned short* src, int src_len);
-static char* _convert_ucs_to_utf8(unsigned char *src, int src_len);
-static int _convert_ucs2_to_gsm(unsigned char* dest, unsigned short* src, unsigned int src_len);
-static void _convert_alpha_field_ucs2_to_utf8(unsigned char *out, unsigned short *out_len, unsigned char *in, unsigned short in_len);
-static int _convert_utf8_to_unicode(unsigned short* dest, unsigned char* src, unsigned int src_len);
+static gboolean _find_gsm_code_exception_table(unsigned short src);
+static int _get_gsm_code_size(unsigned short *src, int src_len);
+static gboolean _convert_gsm_to_unicode(unsigned short *dest, int dest_len, unsigned char *src, unsigned int src_len);
+static int _convert_gsm_to_ucs2(unsigned short *dest, unsigned char *src, unsigned int src_len);
+static void _convert_gsm_to_utf8(unsigned char *dest, unsigned short *dest_len, unsigned char *src, unsigned int src_len);
+static gboolean _convert_unicode_to_gsm(unsigned char *dest, int dest_len, unsigned short *src, int src_len);
+static char *_convert_ucs_to_utf8(unsigned char *src, int src_len);
+static int _convert_ucs2_to_gsm(unsigned char *dest, unsigned short *src, unsigned int src_len);
+static void _convert_alpha_field_ucs2_to_utf8(unsigned char *out, unsigned short *out_len, unsigned char *in, unsigned short in_len);
+static int _convert_utf8_to_unicode(unsigned short *dest, unsigned char *src, unsigned int src_len);
typedef struct {
char gsm;
} GsmUniTable;
const GsmUniTable gsm_unicode2_table[] = {
- { 0x14, 0x005E }, { 0x28, 0x007B }, { 0x29, 0x007D }, { 0x2F, 0x005C },
- { 0x3C, 0x005B }, { 0x3D, 0x007E }, { 0x3E, 0x005D }, { 0x40, 0x007C },
- { 0x65, 0x20AC } };
+ {0x14, 0x005E}, {0x28, 0x007B}, {0x29, 0x007D}, {0x2F, 0x005C},
+ {0x3C, 0x005B}, {0x3D, 0x007E}, {0x3E, 0x005D}, {0x40, 0x007C},
+ {0x65, 0x20AC}
+};
const GsmUniTable gsm_unicode_table[] = {
- { 0x00, 0x0040 }, { 0x01, 0x00A3 }, { 0x02, 0x0024 }, { 0x03, 0x00A5 },
- { 0x04, 0x00E8 }, { 0x05, 0x00E9 }, { 0x06, 0x00F9 }, { 0x07, 0x00EC }, { 0x08, 0x00F2 },
- { 0x09, 0x00E7 }, { 0x0B, 0x00D8 }, { 0x0C, 0x00F8 }, { 0x0E, 0x00C5 }, { 0x0F, 0x00E5 },
- { 0x10, 0x0394 }, { 0x11, 0x005F }, { 0x12, 0x03A6 }, { 0x13, 0x0393 }, { 0x14, 0x039B },
- { 0x15, 0x03A9 }, { 0x16, 0x03A0 }, { 0x17, 0x03A8 }, { 0x18, 0x03A3 }, { 0x19, 0x0398 },
- { 0x1A, 0x039E }, { 0x1C, 0x00C6 }, { 0x1D, 0x00E6 }, { 0x1E, 0x00DF }, { 0x1F, 0x00C9 },
- { 0x24, 0x00A4 }, { 0x40, 0x00A1 }, { 0x5B, 0x00C4 }, { 0x5C, 0x00D6 }, { 0x5D, 0x00D1 },
- { 0x5E, 0x00DC }, { 0x5F, 0x00A7 }, { 0x60, 0x00BF }, { 0x7B, 0x00E4 }, { 0x7C, 0x00F6 },
- { 0x7D, 0x00F1 }, { 0x7E, 0x00FC }, { 0x7F, 0x00E0 }, };
-
-
-
+ {0x00, 0x0040}, {0x01, 0x00A3}, {0x02, 0x0024}, {0x03, 0x00A5},
+ {0x04, 0x00E8}, {0x05, 0x00E9}, {0x06, 0x00F9}, {0x07, 0x00EC}, {0x08, 0x00F2},
+ {0x09, 0x00E7}, {0x0B, 0x00D8}, {0x0C, 0x00F8}, {0x0E, 0x00C5}, {0x0F, 0x00E5},
+ {0x10, 0x0394}, {0x11, 0x005F}, {0x12, 0x03A6}, {0x13, 0x0393}, {0x14, 0x039B},
+ {0x15, 0x03A9}, {0x16, 0x03A0}, {0x17, 0x03A8}, {0x18, 0x03A3}, {0x19, 0x0398},
+ {0x1A, 0x039E}, {0x1C, 0x00C6}, {0x1D, 0x00E6}, {0x1E, 0x00DF}, {0x1F, 0x00C9},
+ {0x24, 0x00A4}, {0x40, 0x00A1}, {0x5B, 0x00C4}, {0x5C, 0x00D6}, {0x5D, 0x00D1},
+ {0x5E, 0x00DC}, {0x5F, 0x00A7}, {0x60, 0x00BF}, {0x7B, 0x00E4}, {0x7C, 0x00F6},
+ {0x7D, 0x00F1}, {0x7E, 0x00FC}, {0x7F, 0x00E0},
+};
static gboolean _find_gsm_code_exception_table(unsigned short src)
{
|| (src >= 0x0061 && src <= 0x007A)
|| src == 0x000A || src == 0x000D)
return TRUE;
+
return FALSE;
}
-static int _get_gsm_code_size(unsigned short* src, int src_len)
+static int _get_gsm_code_size(unsigned short *src, int src_len)
{
gboolean in_table = FALSE;
gboolean in_sec_table = FALSE;
int i, gsm_len = 0;
if (NULL == src) {
- dbg( "INPUT PARAM was NULL");
+ dbg("INPUT PARAM was NULL");
return -1;
}
if (_find_gsm_code_exception_table(*src) == TRUE) {
src++;
gsm_len++;
+
continue;
}
+
in_table = FALSE;
for (i = 0; i < tabGsmUniMax; i++) {
if (*src == gsm_unicode_table[i].unicode) {
src++;
in_table = TRUE;
gsm_len++;
+
break;
}
}
+
if (in_table == FALSE) {
in_sec_table = FALSE;
for (i = 0; i < tabGsmUniMax2; i++) {/* second table */
if (*src == gsm_unicode2_table[i].unicode) {
src++;
- in_table = TRUE;
in_sec_table = TRUE;
gsm_len += 2;
+
break;
}
}
+
if (in_sec_table == FALSE) {/* second*/
if (_find_gsm_code_exception_table(*src) == FALSE) {
- dbg( "GSM Char[%d], gsm_len[%d]", *src, gsm_len);
+ dbg("GSM Char[%d], gsm_len[%d]", *src, gsm_len);
return -1;
}
+
src++;
gsm_len++;
}
}
}
+
return gsm_len;
}
{
int count, tmp_len;
- if(!dest || !src) {
- dbg( "dest(%p) or src(%p) is null",dest, src);
+ if (!dest || !src) {
+ dbg("dest(%p) or src(%p) is null", dest, src);
return FALSE;
}
- if(!src_len){
+ if (!src_len) {
dest[0] = '\0';
return TRUE;
}
dbg("source string (%s) len(%d)", src, src_len);
- for(count = 0; count < (int)src_len; count++){
- if(src[count] == 0x1B)
+ for (count = 0; count < (int)src_len; count++) {
+ if (src[count] == 0x1B)
src_len--;
}
+
dbg("strlen excluding escape character (%d)", src_len);
tmp_len = _convert_gsm_to_ucs2(dest, src, src_len);
return TRUE;
}
-static int _convert_gsm_to_ucs2(unsigned short* dest, unsigned char* src, unsigned int src_len)
+static int _convert_gsm_to_ucs2(unsigned short *dest, unsigned char *src, unsigned int src_len)
{
int count;
- unsigned short* org;
+ unsigned short *org;
org = dest;
- for(count=0; count < (int)src_len; count++){
- int table_index=0;
+ for (count = 0; count < (int)src_len; count++) {
+ int table_index = 0;
gboolean b_tabled = FALSE;
/*
* if the first byte is 0x1B, it is the escape character.
* The byte value shoulbe be changed to unicode.
*/
- if(*src == 0x1B){
- src++; count++;//move to next byte
- for(table_index=0; table_index < tabGsmUniMax2; table_index++){
- if(*src == gsm_unicode2_table[table_index].gsm){
+ if (*src == 0x1B) {
+ src++; count++; /* move to next byte */
+ for (table_index = 0; table_index < tabGsmUniMax2; table_index++) {
+ if (*src == gsm_unicode2_table[table_index].gsm) {
*dest = gsm_unicode2_table[table_index].unicode;
b_tabled = TRUE;
break;
}
}
- //if matched data is not in table, it should be changed to NULL;
- if(!b_tabled){
+ /* if matched data is not in table, it should be changed to NULL; */
+ if (!b_tabled)
*dest = 0x0020;
- }
- }
- else{
- for(table_index=0; table_index < tabGsmUniMax; table_index++){
- if(*src == gsm_unicode_table[table_index].gsm){
+ } else {
+ for (table_index = 0; table_index < tabGsmUniMax; table_index++) {
+ if (*src == gsm_unicode_table[table_index].gsm) {
*dest = gsm_unicode_table[table_index].unicode;
b_tabled = TRUE;
break;
}
}
- //if matched data is not in table, it is using original value;
- if(!b_tabled){
+ /* if matched data is not in table, it is using original value; */
+ if (!b_tabled)
*dest = *src;
- }
}
- //move to next position
+ /* move to next position */
src++; dest++;
}
return (dest - org);
}
-static void _convert_gsm_to_utf8(unsigned char* dest, unsigned short* dest_len, unsigned char* src, unsigned int src_len)
+static void _convert_gsm_to_utf8(unsigned char *dest, unsigned short *dest_len, unsigned char *src, unsigned int src_len)
{
unsigned short tmp_len = 0;
char *target_tmp = NULL;
memset(tmp_dest, 0 , SAT_TEXT_STRING_LEN_MAX);
_convert_gsm_to_unicode(tmp_dest, SAT_TEXT_STRING_LEN_MAX, src, src_len);
- while(tmp_dest[tmp_len] != '\0'){
+ while (tmp_dest[tmp_len] != '\0')
tmp_len++;
+ tmp_len++; /* add null character */
+
+ tmp_len = tmp_len * 2; /* for byte align */
+ raw_unicode = (unsigned char *)malloc(tmp_len);
+ if (!raw_unicode) {
+ *dest_len = 0;
+ return;
}
- tmp_len++; // add null character
- tmp_len = tmp_len*2; //for byte align
- raw_unicode = (unsigned char*)malloc(tmp_len);
memset(raw_unicode, 0, tmp_len);
- memcpy(raw_unicode, (unsigned char*)tmp_dest, tmp_len);
+ memcpy(raw_unicode, (unsigned char *)tmp_dest, tmp_len);
target_tmp = _convert_ucs_to_utf8(raw_unicode, tmp_len);
- if(!target_tmp){
- dbg( "str is NULL");
+ if (!target_tmp) {
+ dbg("str is NULL");
g_free(raw_unicode);
return;
}
- *dest_len = strlen((const char*)target_tmp);
- dbg("utf8 (%s), len(%d)", (const char*)target_tmp, strlen((const char*)target_tmp));
- memcpy(dest, target_tmp, strlen((const char*)target_tmp));
+ *dest_len = strlen((const char *)target_tmp);
+ dbg("utf8 (%s), len(%d)", (const char *)target_tmp, strlen((const char *)target_tmp));
+ memcpy(dest, target_tmp, strlen((const char *)target_tmp));
dbg("final utf8 str (%s), length (%d)", dest, tmp_len);
g_free(raw_unicode);
return;
}
-static gboolean _convert_unicode_to_gsm(unsigned char* dest, int dest_len, unsigned short* src, int src_len)
+static gboolean _convert_unicode_to_gsm(unsigned char *dest, int dest_len, unsigned short *src, int src_len)
{
- char* tmp_str;
+ char *tmp_str;
int gc_len = 0;
if ((NULL == dest) || (NULL == src)) {
- dbg( "INPUT PARAM was NULL");
+ dbg("INPUT PARAM was NULL");
return FALSE;
}
gc_len = _get_gsm_code_size(src, src_len);
if (0 >= gc_len) {
- dbg( "Warning: Error[%d] while finding the GSM Code Size", gc_len);
+ dbg("Warning: Error[%d] while finding the GSM Code Size", gc_len);
return FALSE;
}
if (dest_len < gc_len) {
- if (dest_len == sizeof(void*)) {
- dbg( "Out buffer size seems to be small (%s)", dest);
- } else {
+ if (dest_len == sizeof(void *))
+ dbg("Out buffer size seems to be small (%s)", dest);
+ else
dbg("Buffer size is too small (%s): dest_len(%d), gc_len(%d)", dest, dest_len, gc_len);
- }
+
return FALSE;
}
tmp_str = calloc(1, (unsigned short) gc_len);
if (tmp_str == NULL) {
- dbg( "Memory Allocation Failed!");
+ dbg("Memory Allocation Failed!");
return FALSE;
}
- gc_len = _convert_ucs2_to_gsm((unsigned char*) tmp_str, src, src_len);
+ gc_len = _convert_ucs2_to_gsm((unsigned char *) tmp_str, src, src_len);
if (gc_len != -1) {
- memcpy((char*) dest, (char*) tmp_str, gc_len);
+ memcpy((char *) dest, (char *) tmp_str, gc_len);
free(tmp_str);
return TRUE;
}
return FALSE;
}
-static char* _convert_ucs_to_utf8(unsigned char* src, int src_len)
+static char *_convert_ucs_to_utf8(unsigned char *src, int src_len)
{
- char* utf_str = NULL;
+ char *utf_str = NULL;
iconv_t cd = NULL;
size_t ileft = 0;
size_t oleft = 0;
- char* pIn = NULL;
- char* in_buf = NULL;
- char* out_buf = NULL;
+ char *pIn = NULL;
+ char *in_buf = NULL;
+ char *out_buf = NULL;
if (!src) {
dbg("src is null");
return NULL;
}
- ileft = src_len * 2;//over allocate as utf-8 may occupy 3 bytes
- oleft = src_len * 3;//over allocate as utf-8 may occupy 3 bytes
- pIn = in_buf = (char*) malloc(ileft + 2);
+ ileft = src_len * 2; /* over allocate as utf-8 may occupy 3 bytes */
+ oleft = src_len * 3; /* over allocate as utf-8 may occupy 3 bytes */
+ pIn = in_buf = (char *) malloc(ileft + 2);
+ if (in_buf == NULL) {
+ dbg("in_buf allocation failed");
+ return NULL;
+ }
+
utf_str = out_buf = (char *) malloc(oleft + 1);
+ if (utf_str == NULL) {
+ dbg("in_buf allocation failed");
+ free(in_buf);
+ return NULL;
+ }
memset(in_buf, 0x00, ileft + 2);
memset(out_buf, 0x00, oleft + 1);
cd = iconv_open("UTF-8", "UCS-2");
- if (iconv(cd, (char**) &in_buf, &ileft, &out_buf, &oleft) == (size_t)(-1)) {
+ if (iconv(cd, (char **) &in_buf, &ileft, &out_buf, &oleft) == (size_t)(-1))
dbg("failed to iconv errno:%d", errno);
- } else {
+ else
utf_str[src_len * 2 - ileft] = '\0';
- }
iconv_close(cd);
free(pIn);
return utf_str;
}
-static int _convert_ucs2_to_gsm(unsigned char* dest, unsigned short* src, unsigned int src_len)
+static int _convert_ucs2_to_gsm(unsigned char *dest, unsigned short *src, unsigned int src_len)
{
- unsigned char* rear = NULL;
- unsigned short* p;
+ unsigned char *rear = NULL;
+ unsigned short *p;
unsigned char temp;
gboolean in_table = FALSE;
gboolean in_sec_table = FALSE;
int i, gc_len = 0;
if ((!dest) || (!src) || (0x00 == src_len)) {
- dbg( "Warning: Wrong Input");
+ dbg("Warning: Wrong Input");
return -1;
}
for (; src_len > 0 && p; src_len--) {
in_table = FALSE;
- for (i = 0; i < tabGsmUniMax; i++) { /* is in table */
+ for (i = 0; i < tabGsmUniMax; i++) {/* is in table */
if (*p == gsm_unicode_table[i].unicode) {
temp = (unsigned char) (gsm_unicode_table[i].gsm);
*rear = temp;
p++;
in_table = TRUE;
gc_len++;
+
break;
}
}
+
if (in_table == FALSE) {
in_sec_table = FALSE;
for (i = 0; i < tabGsmUniMax2; i++) { /* second table*/
*rear = temp;
rear++;
p++;
- in_table = TRUE;
in_sec_table = TRUE;
gc_len += 2;
+
break;
}
}
- if (in_sec_table == FALSE) { /* second */
+
+ if (in_sec_table == FALSE) {/* second */
if (_find_gsm_code_exception_table(*p) == FALSE)
return -1;
+
temp = (unsigned char) (*p); /* isn't in table. but it's just able to be converted to GSM (0x00?? -> 0x??)*/
*rear = temp;
rear++;
}
}
}
+
src = p;
return gc_len;
}
-int tcore_util_convert_ucs2_to_utf8(char *out, unsigned short *out_len, char *in, unsigned short in_len)
+static unsigned char _convert_hexchar_to_int(char c)
{
- //input string "char *in" should be BIG-ENDIAN format.
+ if (c >= '0' && c <= '9')
+ return (c - '0');
+ else if (c >= 'A' && c <= 'F')
+ return (c - 'A' + 10);
+ else if (c >= 'a' && c <= 'f')
+ return (c - 'a' + 10);
+ else {
+ dbg("invalid charater!!");
+ return -1;
+ }
+}
+
+char *tcore_util_convert_hexstring_to_bytes(char *s)
+{
+ char *ret;
+ int i;
+ int sz;
+
+ if (s == NULL)
+ return NULL;
+
+ sz = strlen(s);
+
+ ret = g_try_malloc0((sz / 2) + 1);
+ if (ret == NULL)
+ return NULL;
+
+ dbg("Convert String to Binary!!");
+
+ for (i = 0; i < sz; i += 2)
+ ret[i / 2] = (char)((_convert_hexchar_to_int(s[i]) << 4) | _convert_hexchar_to_int(s[i + 1]));
+
+ return ret;
+}
+
+int tcore_util_convert_ucs2_to_utf8(char *out, unsigned short *out_len,
+ char *in, unsigned short in_len)
+{
+ /* input string "char *in" should be BIG-ENDIAN format. */
gsize byte_converted = 0;
gsize byte_read = 0;
gchar *str_converted = NULL;
if (NULL == out || NULL == out_len || NULL == in) {
- dbg( "Invalid Input Parameter");
+ dbg("Invalid Input Parameter");
return 0;
}
+
try_again:
- str_converted = (gchar *)g_convert((const gchar *)in, (gssize)in_len, "UTF8", "UCS-2BE", &byte_read, &byte_converted, NULL);
+ str_converted = (gchar *)g_convert((const gchar *)in, (gssize)in_len,
+ "UTF8", "UCS-2BE", &byte_read, &byte_converted, NULL);
dbg("read:[%d] converted:[%d] out:[%s]", byte_read, byte_converted, str_converted);
return 0;
}
-static void _convert_alpha_field_ucs2_to_utf8(unsigned char *out, unsigned short *out_len, unsigned char *in, unsigned short in_len)
+static void _convert_alpha_field_ucs2_to_utf8(unsigned char *out, unsigned short *out_len,
+ unsigned char *in, unsigned short in_len)
{
- //input string "unsigned char *in" should be BIG-ENDIAN format.
+ /* input string "unsigned char *in" should be BIG-ENDIAN format. */
int i = 0;
- switch(in[0]) {
- case 0x80: {
- dbg("[UCS2] prefix case:[0x80]");
- tcore_util_hex_dump(" [UCS2] ", in_len, in);
- tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char*)in+1, in_len-1);
- } break;
-
- case 0x81: {
- unsigned char num = in[1]; //number of characters
- unsigned short base = (unsigned short) in[2] << 7; //base pointer for UCS2 type
- int data_loc = 3; //starting location of data
- unsigned short* in_buf = NULL;
- dbg("[UCS2] prefix case:[0x81]");
- in_buf = (unsigned short*)malloc(num * sizeof(unsigned short));
- for(i=0; i<num; i++,data_loc++) {
- if(in[data_loc]<0x80) { // if the MSB is zero (0x80 => 1000b), then remaining 7 bits are GSM default character.
- _convert_gsm_to_ucs2(&in_buf[i], &in[data_loc], 1);
- dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
- } else { // if the MSB is 1 then the remaining 7 bits are offset value added to Base Pointer which the result defines the UCS2 character.
- in_buf[i] = base + ((unsigned short)(in[data_loc]) & 0x7F);
- dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
- }
+ switch (in[0]) {
+ case 0x80: {
+ dbg("[UCS2] prefix case:[0x80]");
+ tcore_util_hex_dump(" [UCS2] ", in_len, in);
+ tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char *)in+1, in_len-1);
+ }
+ break;
+
+ case 0x81: {
+ unsigned char num = in[1]; /* number of characters */
+ unsigned short base = (unsigned short) in[2] << 7; /* base pointer for UCS2 type */
+ int data_loc = 3; /* starting location of data */
+ unsigned short *in_buf = NULL;
+ dbg("[UCS2] prefix case:[0x81]");
+ in_buf = (unsigned short *)malloc(num * sizeof(unsigned short));
+ if (in_buf == NULL) {
+ dbg("in_buf malloc failed.");
+ return;
+ }
+
+ for (i = 0; i < num; i++, data_loc++) {
+ if (in[data_loc] < 0x80) {
+ /*
+ * if the MSB is zero (0x80 => 1000b), then remaining 7 bits
+ * are GSM default character.
+ */
+ _convert_gsm_to_ucs2(&in_buf[i], &in[data_loc], 1);
+ dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
+ } else {
+ /*
+ * if the MSB is 1 then the remaining 7 bits are offset value
+ * added to Base Pointer which the result defines the UCS2 character.
+ */
+ in_buf[i] = base + ((unsigned short)(in[data_loc]) & 0x7F);
+ dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
}
- {
- unsigned char *dest = NULL;
- dest = (unsigned char*)malloc(num*2);
- tcore_util_swap_byte_order(dest, (unsigned char*)in_buf, num*2);
- tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char*) dest, num*2);
- if(in_buf!=NULL) free(in_buf);
- if(dest!=NULL) free(dest);
+ }
+ {
+ unsigned char *dest = NULL;
+ dest = (unsigned char *)malloc(num*2);
+ if (dest == NULL) {
+ dbg("dest malloc failed.");
+ free(in_buf);
+ return;
}
- } break;
-
- case 0x82: {
- unsigned char num = in[1]; //number of characters
- unsigned short base = ((unsigned short) in[2] << 8) | (unsigned short) in[3]; //base pointer for UCS2 type
- int data_loc = 4; //starting location of data
- unsigned short* in_buf = NULL;
- dbg("[UCS2] prefix case:[0x82]");
- in_buf = (unsigned short*)malloc(num * sizeof(unsigned short));
- for(i=0; i<num; i++,data_loc++) {
- if(in[data_loc]<0x80) {
- _convert_gsm_to_ucs2(&in_buf[i], &in[data_loc], (unsigned int)1);
- dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
- } else {
- in_buf[i] = base + ((unsigned short)(in[data_loc]) & 0x7F);
- dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
- }
+
+ tcore_util_swap_byte_order(dest, (unsigned char *)in_buf, num*2);
+ tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char *) dest, num*2);
+
+ free(in_buf);
+ free(dest);
+ }
+ }
+ break;
+
+ case 0x82: {
+ unsigned char num = in[1]; /* number of characters */
+ unsigned short base = ((unsigned short) in[2] << 8) | (unsigned short) in[3]; /* base pointer for UCS2 type */
+ int data_loc = 4; /* starting location of data */
+ unsigned short *in_buf = NULL;
+ dbg("[UCS2] prefix case:[0x82]");
+ in_buf = (unsigned short *)malloc(num * sizeof(unsigned short));
+ if (in_buf == NULL) {
+ dbg("in_buf malloc failed.");
+ return;
+ }
+
+ for (i = 0; i < num; i++, data_loc++) {
+ if (in[data_loc] < 0x80) {
+ _convert_gsm_to_ucs2(&in_buf[i], &in[data_loc], (unsigned int)1);
+ dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
+ } else {
+ in_buf[i] = base + ((unsigned short)(in[data_loc]) & 0x7F);
+ dbg("[UCS2]in_buf[%d]=0x%04x", i, in_buf[i]);
}
- {
- unsigned char *dest = NULL;
- dest = (unsigned char*)malloc(num*2);
- tcore_util_swap_byte_order(dest, (unsigned char*)in_buf, num*2);
- tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char*) dest, num*2);
- if(in_buf!=NULL) free(in_buf);
- if(dest!=NULL) free(dest);
+ }
+ {
+ unsigned char *dest = NULL;
+ dest = (unsigned char *)malloc(num*2);
+ if (dest == NULL) {
+ dbg("dest malloc failed.");
+ free(in_buf);
+ return;
}
- } break;
- default: {
- dbg("[UCS2] non-prefix case.");
- tcore_util_hex_dump(" [UCS2] ", in_len, in);
- tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char*)in, in_len);
- } break;
+ tcore_util_swap_byte_order(dest, (unsigned char *)in_buf, num*2);
+ tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char *) dest, num*2);
+
+ free(in_buf);
+ free(dest);
+ }
+ }
+ break;
+
+ default: {
+ dbg("[UCS2] non-prefix case.");
+ tcore_util_hex_dump(" [UCS2] ", in_len, in);
+ tcore_util_convert_ucs2_to_utf8((char *)out, out_len, (char *)in, in_len);
+ }
+ break;
}
}
-static int _convert_utf8_to_unicode(unsigned short* dest, unsigned char* src, unsigned int src_len)
+static int _convert_utf8_to_unicode(unsigned short *dest, unsigned char *src, unsigned int src_len)
{
- unsigned short* org = NULL;
+ unsigned short *org = NULL;
unsigned char hi = 0;
unsigned char mid = 0;
unsigned char low = 0;
if ((NULL == dest) || (NULL == src)) {
- dbg( "INPUT PARAM NULL");
+ dbg("INPUT PARAM NULL");
return -1;
}
dest++;
src++;
src_len--;
- dbg( "utf8 incorrect range");
+ dbg("utf8 incorrect range");
}
}
+
*dest = 0;
return (dest - org);
}
-static char _convert_gsm7bit_extension( char c )
+static char _convert_gsm7bit_extension(char c)
{
- switch ( c ) {
- case 0x0A:
- case 0x1B:
- return ' ';
- case 0x14:
- return '^';
- case 0x28:
- return '{';
- case 0x29:
- return '}';
- case 0x2F:
- return '\\';
- case 0x3C:
- return '[';
- case 0x3D:
- return '~';
- case 0x3E:
- return ']';
- case 0x40:
- return '|';
- /*
- case 0x65:
- This code represents the EURO currency symbol. The code value is that used for the character ‘e’. Therefore
- a receiving entity which is incapable of displaying the EURO currency symbol will display the character ‘e’
- instead. GSM 03.38
- */
- case 0x65:
- return 'e';
- default:
- dbg("this is not extension character : (0x%x)", c);
- break;
+ switch (c) {
+ case 0x0A:
+ case 0x1B:
+ return ' ';
+
+ case 0x14:
+ return '^';
+
+ case 0x28:
+ return '{';
+
+ case 0x29:
+ return '}';
+
+ case 0x2F:
+ return '\\';
+
+ case 0x3C:
+ return '[';
+
+ case 0x3D:
+ return '~';
+
+ case 0x3E:
+ return ']';
+
+ case 0x40:
+ return '|';
+
+ /*
+ case 0x65:
+ This code represents the EURO currency symbol.
+ The code value is that used for the character ‘e’.
+ Therefore a receiving entity which is incapable of displaying
+ the EURO currency symbol will display the character ‘e’ instead. GSM 03.38
+ */
+ case 0x65:
+ return 'e';
+
+ default:
+ dbg("this is not extension character : (0x%x)", c);
+ break;
}
return c;
}
-gboolean tcore_util_convert_utf8_to_gsm(unsigned char *dest, int *dest_len, unsigned char* src, int src_len)
+gboolean tcore_util_convert_utf8_to_gsm(unsigned char *dest, int *dest_len,
+ unsigned char *src, int src_len)
{
unsigned short *uc = NULL;
int gc_len = 0;
int uc_len = 0;
if (src == NULL || src_len == 0) {
- dbg( "WARNING: Invalid Parameter");
+ dbg("WARNING: Invalid Parameter");
return FALSE;
}
- uc = (unsigned short*) calloc(src_len + 1, sizeof(unsigned short));
+ uc = (unsigned short *)calloc(src_len + 1, sizeof(unsigned short));
if (!uc) {
- dbg( "WARNING: calloc Failed");
+ err("Memory allocation failed");
return FALSE;
}
- /*Converting from UTF8 => UNICODE*/
+ /* Converting from UTF8 => UNICODE */
uc_len = _convert_utf8_to_unicode(uc, src, src_len);
- dbg( "uc_len:[%d]", uc_len);
- if(uc_len == -1) {
- dbg( "_convert_utf8_to_unicode returns false!");
+ dbg("uc_len:[%d]", uc_len);
+ if (uc_len == -1) {
+ err("_convert_utf8_to_unicode returns false!");
free(uc);
return FALSE;
}
/*Finding the GSMCode Size*/
gc_len = _get_gsm_code_size(uc, uc_len);
- dbg( "gc_len:[%d]", gc_len);
- if ( gc_len == -1) {
- dbg( "SM- DATA is not in GSM7BIT Character Set & Error:[%d]", gc_len);
+ dbg("gc_len:[%d]", gc_len);
+ if (gc_len == -1) {
+ err("SM- DATA is not in GSM7BIT Character Set & Error:[%d]", gc_len);
free(uc);
return FALSE;
}
*dest_len = gc_len;
- /*Converting from UNICODE ==> GSM CODE */
- if (_convert_unicode_to_gsm((unsigned char*) dest, *dest_len, uc, uc_len) == FALSE) {
- dbg( "_convert_unicode_to_gsm Failed");
+
+ /* Converting from UNICODE ==> GSM CODE */
+ if (_convert_unicode_to_gsm((unsigned char *) dest, *dest_len, uc, uc_len) == FALSE) {
+ err("_convert_unicode_to_gsm Failed");
*dest_len = 0x00;
free(uc);
return FALSE;
}
- if(uc)
+ if (uc)
free(uc);
+
return TRUE;
}
-gboolean tcore_util_convert_utf8_to_ucs2(char **dest, int *dest_len, unsigned char *src, int src_len)
+gboolean tcore_util_convert_utf8_to_ucs2(char **dest, int *dest_len,
+ unsigned char *src, int src_len)
{
gsize byte_converted = 0;
gsize byte_read = 0;
gchar *str_converted = NULL;
if (NULL == src || NULL == dest || NULL == dest_len) {
- dbg( "Invalid Input Parameter");
+ dbg("Invalid Input Parameter");
return FALSE;
}
+
try_again:
- /*Converting from UTF8 => UCS-2 BIG-ENDIAN FORMAT using the g_convert*/
- str_converted = (gchar *)g_convert((const gchar *)src, (gssize)src_len, "UCS-2BE", "UTF8", &byte_read, &byte_converted, NULL);
+ /* Converting from UTF8 => UCS-2 BIG-ENDIAN FORMAT using the g_convert */
+ str_converted = (gchar *)g_convert((const gchar *)src, (gssize)src_len,
+ "UCS-2BE", "UTF8", &byte_read, &byte_converted, NULL);
dbg("byte_read: [%d] byte_converted: [%d]", byte_read, byte_converted);
if (str_converted) {
goto try_again;
}
}
+
return TRUE;
}
gboolean tcore_util_convert_string_to_utf8(unsigned char *dest, unsigned short *dest_len,
- enum alphabet_format dcs, const unsigned char *src, unsigned short src_len)
+ enum alphabet_format dcs, const unsigned char *src, unsigned short src_len)
{
- dbg("dcs=[0x%02x], src=[%s], src_len=[%d]", dcs, src, src_len );
+ dbg("dcs=[0x%02x], src=[%s], src_len=[%d]", dcs, src, src_len);
- if(src==NULL || src_len==0) {
+ if (src == NULL || src_len == 0) {
err("src is NULL or src_len is 0");
return FALSE;
}
switch (dcs) {
- case ALPHABET_FORMAT_SMS_DEFAULT: {
- unsigned char* tmp_dest_str = NULL;
- tmp_dest_str = (unsigned char*)tcore_util_unpack_gsm7bit((const unsigned char *)src, src_len);
+ case ALPHABET_FORMAT_SMS_DEFAULT: {
+ unsigned char *tmp_dest_str = NULL;
+ tmp_dest_str = (unsigned char *)tcore_util_unpack_gsm7bit((const unsigned char *)src, src_len);
- if(!tmp_dest_str) {
- err("temp_dest_str is NULL");
- return FALSE;
- }
- _convert_gsm_to_utf8(dest, dest_len, tmp_dest_str, strlen((const char*)tmp_dest_str));
- if(tmp_dest_str) {
- free(tmp_dest_str);
- }
- } break;
+ if (!tmp_dest_str) {
+ err("temp_dest_str is NULL");
+ return FALSE;
+ }
+ _convert_gsm_to_utf8(dest, dest_len, tmp_dest_str, strlen((const char *)tmp_dest_str));
- case ALPHABET_FORMAT_8BIT_DATA: {//GSM7bit with bit 8 set to 0
- int tmp_str_len = 0;
- unsigned char *src_buf = NULL;
+ if (tmp_dest_str)
+ free(tmp_dest_str);
+ }
+ break;
- src_buf = (unsigned char*)malloc(src_len);
- if(src_buf == NULL) {
- dbg("src_buf malloc failed.");
- return FALSE;
- }
+ case ALPHABET_FORMAT_8BIT_DATA: { /* GSM7bit with bit 8 set to 0 */
+ int tmp_str_len = 0;
+ unsigned char *src_buf = NULL;
- memset(src_buf, 0, src_len);
- memcpy(src_buf, src, src_len);
+ src_buf = (unsigned char *)malloc(src_len);
+ if (src_buf == NULL) {
+ dbg("src_buf malloc failed.");
+ return FALSE;
+ }
- /*get string length*/
- /* 0xFF is the end of string */
- while (src[tmp_str_len] != 0xFF && tmp_str_len < src_len) {
- tmp_str_len++;
- }
- /* last space character must be deleted */
- while (src[tmp_str_len - 1] == 0x20 && tmp_str_len > 0) {
- tmp_str_len--;
- }
- dbg( "tmp_str_len[%d]", tmp_str_len);
+ memset(src_buf, 0, src_len);
+ memcpy(src_buf, src, src_len);
- _convert_gsm_to_utf8(dest, dest_len, src_buf, tmp_str_len);
- if(src_buf != NULL)
- free(src_buf);
- } break;
+ /*
+ * Get string length
+ * '0xFF' is the end of string
+ */
+ while (src[tmp_str_len] != 0xFF && tmp_str_len < src_len)
+ tmp_str_len++;
- case ALPHABET_FORMAT_UCS2: {
- unsigned char *src_buf = NULL;
+ /* last space character must be deleted */
+ while (src[tmp_str_len - 1] == 0x20 && tmp_str_len > 0)
+ tmp_str_len--;
- src_buf = (unsigned char*)malloc(src_len);
- if(src_buf == NULL) {
- dbg("src_buf malloc failed.");
- return FALSE;
- }
+ dbg("tmp_str_len[%d]", tmp_str_len);
- memset(src_buf, 0, src_len);
- memcpy(src_buf, src, src_len);
+ _convert_gsm_to_utf8(dest, dest_len, src_buf, tmp_str_len);
+ if (src_buf != NULL)
+ free(src_buf);
+ }
+ break;
- _convert_alpha_field_ucs2_to_utf8(dest, dest_len, src_buf, src_len);
- if(src_buf != NULL)
- free(src_buf);
- } break;
+ case ALPHABET_FORMAT_UCS2: {
+ unsigned char *src_buf = NULL;
- default: {
- dbg("not handled alpha format[0x%02x]", dcs);
+ src_buf = (unsigned char *)malloc(src_len);
+ if (src_buf == NULL) {
+ dbg("src_buf malloc failed.");
return FALSE;
- } break;
+ }
+
+ memset(src_buf, 0, src_len);
+ memcpy(src_buf, src, src_len);
+
+ _convert_alpha_field_ucs2_to_utf8(dest, dest_len, src_buf, src_len);
+ if (src_buf != NULL)
+ free(src_buf);
}
+ break;
+
+ default: {
+ dbg("not handled alpha format[0x%02x]", dcs);
+ return FALSE;
+ }
+ }
+
return TRUE;
}
-gboolean tcore_util_convert_ascii_to_utf8( unsigned char **dest, int *dest_len, unsigned char *src, int src_len )
+gboolean tcore_util_convert_ascii_to_utf8(unsigned char **dest, int *dest_len,
+ unsigned char *src, int src_len)
{
int i = 0, j = 0, tmp_len = 0;
unsigned char *tmp = 0;
- if ( (!dest) || (!src) || (!dest_len) )
+ if ((!dest) || (!src) || (!dest_len))
return FALSE;
- if ( !src_len ) {
- src_len = strlen( (char*)src );
- }
+ if (!src_len)
+ src_len = strlen((char *)src);
tmp_len = (src_len * 2);
- tmp = g_new0( unsigned char, tmp_len );
+ tmp = g_new0(unsigned char, tmp_len);
- for ( i=0, j=0; i<src_len; i++, j++ ) {
- if ( src[i] <= 0x7F ) {
+ for (i = 0, j = 0; i < src_len; i++, j++) {
+ if (src[i] <= 0x7F) {
tmp[j] = src[i];
-
- } else if ( (src[i] >= 0x80) && (src[i] <= 0xBF) ) {
+ } else if ((src[i] >= 0x80) && (src[i] <= 0xBF)) {
tmp[j] = 0xC2;
tmp[++j] = src[i];
-
- } else { //( (src[i] >= 0xC0) && (src[i] <= 0xFF) )
+ } else { /* ((src[i] >= 0xC0) && (src[i] <= 0xFF)) */
tmp[j] = 0xC3;
tmp[++j] = (src[i] - 0x40);
-
}
}
*dest_len = (j+1);
- *dest = g_new0( unsigned char, *dest_len );
- memcpy( *dest, tmp, j );
+ *dest = g_new0(unsigned char, *dest_len);
+ memcpy(*dest, tmp, j);
- g_free( tmp );
+ g_free(tmp);
return TRUE;
}
-void tcore_util_swap_byte_order(unsigned char* dest, const unsigned char* src, int src_len)
+void tcore_util_swap_byte_order(unsigned char *dest,
+ const unsigned char *src, int src_len)
{
int i = 0;
- for (i = 0; i+1 < src_len; i=i+2) {
+ for (i = 0; i+1 < src_len; i = i+2) {
dest[i] = src[i+1];
dest[i+1] = src[i];
}
- if(src_len%2==1)
+
+ if (src_len%2 == 1)
dest[i-1] = src[i-1];
+
dbg("swap completed.");
}
static gboolean _tcore_util_marshal_create_gvalue(GValue *value,
- const void *data, enum tcore_util_marshal_data_type type)
+ const void *data, enum tcore_util_marshal_data_type type)
{
switch (type) {
- case TCORE_UTIL_MARSHAL_DATA_CHAR_TYPE:
- g_value_init(value, type);
- g_value_set_schar(value, *((gchar *) data));
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_BOOLEAN_TYPE:
- g_value_init(value, type);
- g_value_set_boolean(value, *((gboolean *) data));
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_INT_TYPE:
- g_value_init(value, type);
- g_value_set_int(value, *((gint *) data));
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_DOUBLE_TYPE:
- g_value_init(value, type);
- g_value_set_double(value, *((gdouble *) data));
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_STRING_TYPE:
- g_value_init(value, type);
- g_value_set_string(value, (gchar *) data);
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE:
- g_value_init(value, G_TYPE_HASH_TABLE);
- g_value_set_boxed(value, (gpointer) data);
- break;
-
- default:
- return FALSE;
- break;
+ case TCORE_UTIL_MARSHAL_DATA_CHAR_TYPE:
+ g_value_init(value, type);
+ g_value_set_schar(value, *((gchar *) data));
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_BOOLEAN_TYPE:
+ g_value_init(value, type);
+ g_value_set_boolean(value, *((gboolean *) data));
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_INT_TYPE:
+ g_value_init(value, type);
+ g_value_set_int(value, *((gint *) data));
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_DOUBLE_TYPE:
+ g_value_init(value, type);
+ g_value_set_double(value, *((gdouble *) data));
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_STRING_TYPE:
+ g_value_init(value, type);
+ g_value_set_string(value, (gchar *) data);
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE:
+ g_value_init(value, G_TYPE_HASH_TABLE);
+ g_value_set_boxed(value, (gpointer) data);
+ break;
+
+ default:
+ return FALSE;
}
return TRUE;
static gboolean _tcore_util_return_value(GValue *src, void **dest,
- enum tcore_util_marshal_data_type type)
+ enum tcore_util_marshal_data_type type)
{
switch (type) {
- case TCORE_UTIL_MARSHAL_DATA_CHAR_TYPE:
- *dest = g_new0(gchar, 1);
- *((gchar *) *dest) = g_value_get_schar(src);
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_BOOLEAN_TYPE:
- *dest = g_new0(gboolean, 1);
- *((gboolean *) *dest) = g_value_get_boolean(src);
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_INT_TYPE:
- *dest = g_new0(gint, 1);
- *((gint *) *dest) = g_value_get_int(src);
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_DOUBLE_TYPE:
- *dest = g_new0(gdouble, 1);
- *((gdouble *) *dest) = g_value_get_double(src);
- break;
-
- case TCORE_UTIL_MARSHAL_DATA_STRING_TYPE:
+ case TCORE_UTIL_MARSHAL_DATA_CHAR_TYPE:
+ *dest = g_new0(gchar, 1);
+ *((gchar *)*dest) = g_value_get_schar(src);
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_BOOLEAN_TYPE:
+ *dest = g_new0(gboolean, 1);
+ *((gboolean *)*dest) = g_value_get_boolean(src);
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_INT_TYPE:
+ *dest = g_new0(gint, 1);
+ *((gint *)*dest) = g_value_get_int(src);
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_DOUBLE_TYPE:
+ *dest = g_new0(gdouble, 1);
+ *((gdouble *)*dest) = g_value_get_double(src);
+ break;
+
+ case TCORE_UTIL_MARSHAL_DATA_STRING_TYPE:
+ if (src)
*dest = g_value_dup_string(src);
- break;
+ break;
- case TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE:
- *dest = g_value_dup_boxed(src);
- break;
+ case TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE:
+ *dest = g_value_dup_boxed(src);
+ break;
- default:
- return FALSE;
- break;
+ default:
+ return FALSE;
}
return TRUE;
g_hash_table_destroy(ht);
}
- g_value_unset((GValue *) value);
+ g_value_unset((GValue *)value);
g_free(value);
return;
}
static gboolean _tcore_util_marshal_convert_str_to_type(GValue *src,
- GValue *dest, unsigned int dest_type)
+ GValue *dest, unsigned int dest_type)
{
if (dest_type == G_TYPE_HASH_TABLE)
dest_type = G_TYPE_BOXED;
switch (dest_type) {
- case G_TYPE_INT: {
- gint64 tmp = 0;
- tmp = g_ascii_strtoll(g_value_get_string(src), NULL, 10);
- g_value_set_int(dest, tmp);
- }
- break;
- case G_TYPE_BOOLEAN: {
- gboolean tmp = FALSE;
- tmp = g_ascii_strncasecmp(g_value_get_string(src), "TRUE", 4) == 0
- ? TRUE : FALSE;
- g_value_set_boolean(dest, tmp);
- }
- break;
- case G_TYPE_STRING: {
- const gchar* tmp = NULL;
- tmp = g_value_get_string(src);
- g_value_set_string(dest, tmp);
- }
- break;
- case G_TYPE_DOUBLE: {
- gdouble tmp = 0;
- tmp = g_ascii_strtod(g_value_get_string(src), NULL);
- g_value_set_double(dest, tmp);
- }
- break;
- case G_TYPE_BOXED: {
- GHashTable* tmp;
- tmp = tcore_util_marshal_deserialize_string(g_value_get_string(src));
- g_value_set_boxed(dest, tmp);
- }
- break;
- default: {
- return FALSE;
- }
- break;
+ case G_TYPE_INT: {
+ gint64 tmp = 0;
+ tmp = g_ascii_strtoll(g_value_get_string(src), NULL, 10);
+ g_value_set_int(dest, tmp);
+ }
+ break;
+
+ case G_TYPE_BOOLEAN: {
+ gboolean tmp = FALSE;
+ tmp = g_ascii_strncasecmp(g_value_get_string(src), "TRUE", 4) == 0
+ ? TRUE : FALSE;
+ g_value_set_boolean(dest, tmp);
+ }
+ break;
+
+ case G_TYPE_STRING: {
+ const gchar *tmp = NULL;
+ tmp = g_value_get_string(src);
+ g_value_set_string(dest, tmp);
+ }
+ break;
+
+ case G_TYPE_DOUBLE: {
+ gdouble tmp = 0;
+ tmp = g_ascii_strtod(g_value_get_string(src), NULL);
+ g_value_set_double(dest, tmp);
+ }
+ break;
+
+ case G_TYPE_BOXED: {
+ GHashTable *tmp;
+ tmp = tcore_util_marshal_deserialize_string(g_value_get_string(src));
+ g_value_set_boxed(dest, tmp);
+ }
+ break;
+
+ default: {
+ return FALSE;
+ }
}
return TRUE;
return TCORE_RETURN_EINVAL;
fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
+ if (fd < 0)
return TCORE_RETURN_FAILURE;
- }
memset(&ifr, 0, sizeof(struct ifreq));
strncpy(ifr.ifr_name, name, IFNAMSIZ);
}
close(fd);
+
return TCORE_RETURN_SUCCESS;
}
return TCORE_RETURN_EINVAL;
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
- if (fd < 0) {
+ if (fd < 0)
return TCORE_RETURN_FAILURE;
- }
memset(&ifr, 0, sizeof(struct ifreq));
strncpy(ifr.ifr_name, name, IFNAMSIZ);
return TCORE_RETURN_SUCCESS;
}
-TReturn tcore_util_netif_set(const char *name, const char *ipaddr,
- const char *gateway, const char *netmask)
+TReturn tcore_util_netif_set(const char *name,
+ const char *ipaddr, const char *gateway, const char *netmask)
{
int ret;
int fd;
return TCORE_RETURN_EINVAL;
fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
+ if (fd < 0)
return TCORE_RETURN_FAILURE;
- }
memset(&sai, 0, sizeof(struct sockaddr_in));
sai.sin_family = AF_INET;
return TCORE_RETURN_SUCCESS;
}
-TReturn tcore_util_reset_ipv4_socket(const char *name, const char* ipaddr)
+TReturn tcore_util_netif_set_arp(const char *name, gboolean disable)
{
int ret;
int fd;
struct ifreq ifr;
- struct sockaddr_in sai;
if (!name)
return TCORE_RETURN_EINVAL;
return TCORE_RETURN_EINVAL;
fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
+ if (fd < 0)
+ return TCORE_RETURN_FAILURE;
+
+ memset(&ifr, 0, sizeof(struct ifreq));
+ strncpy(ifr.ifr_name, name, IFNAMSIZ);
+ ifr.ifr_name[IFNAMSIZ - 1] = '\0';
+
+ ret = ioctl(fd, SIOCGIFFLAGS, &ifr);
+ if (ret < 0) {
+ close(fd);
return TCORE_RETURN_FAILURE;
}
+ if (disable)
+ ifr.ifr_flags |= IFF_NOARP;
+ else
+ ifr.ifr_flags &= ~IFF_NOARP;
+
+ ret = ioctl(fd, SIOCSIFFLAGS, &ifr);
+ if (ret < 0) {
+ close(fd);
+ return TCORE_RETURN_FAILURE;
+ }
+
+ close(fd);
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_util_reset_ipv4_socket(const char *name, const char *ipaddr)
+{
+ int ret;
+ int fd;
+ struct ifreq ifr;
+ struct sockaddr_in sai;
+
+ if (!name)
+ return TCORE_RETURN_EINVAL;
+
+ if (strlen(name) > IFNAMSIZ)
+ return TCORE_RETURN_EINVAL;
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd < 0)
+ return TCORE_RETURN_FAILURE;
+
memset(&sai, 0, sizeof(struct sockaddr_in));
sai.sin_family = AF_INET;
sai.sin_port = 0;
strncpy(ifr.ifr_name, name, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = '\0';
- if(!ipaddr) {
+ if (!ipaddr) {
ret = ioctl(fd, SIOCGIFADDR, &ifr);
if (ret < 0) {
dbg("fail to ioctl[SIOCGIFADDR]!!!");
return TCORE_RETURN_FAILURE;
}
}
+
/* SIOCKILLADDR is initially introduced in Android OS. */
#ifndef SIOCKILLADDR
#define SIOCKILLADDR 0x8939
return TCORE_RETURN_FAILURE;
}
- if(ipaddr) {
+ if (ipaddr) {
dbg("devname: %s, ipaddr: %s", name, ipaddr);
} else {
memset(&sai, 0, sizeof(struct sockaddr_in));
memcpy(&sai, &ifr.ifr_addr, sizeof(struct sockaddr_in));
dbg("devname: %s, ipaddr: %s", name, inet_ntoa(sai.sin_addr));
}
+
close(fd);
return TCORE_RETURN_SUCCESS;
}
return TCORE_RETURN_EINVAL;
fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
+ if (fd < 0)
return TCORE_RETURN_FAILURE;
- }
memset(&ifr, 0, sizeof(struct ifreq));
strncpy(ifr.ifr_name, name, IFNAMSIZ);
char *tcore_util_get_string_by_ip6type(unsigned char ipv6_addr_type[IPV6_ADDR_LEN])
{
- char buf[INET6_ADDRSTRLEN] = {0, };
+ char buf[INET6_ADDRSTRLEN] = {0,};
if (inet_ntop(AF_INET6, ipv6_addr_type, buf, INET6_ADDRSTRLEN) == NULL)
return NULL;
{
enum tcore_dcs_type dcs = TCORE_DCS_TYPE_NONE;
- switch (encode & 0xf0)
- {
- case 0x00:
- case 0x20:
- case 0x30:
+ switch (encode & 0xf0) {
+ case 0x00:
+ case 0x20:
+ case 0x30:
+ dcs = TCORE_DCS_TYPE_7_BIT;
+ break;
+
+ case 0x10:
+ if ((encode & 0x0f) == 0x00)
dcs = TCORE_DCS_TYPE_7_BIT;
- break;
-
- case 0x10:
- if ((encode & 0x0f) == 0x00)
- dcs = TCORE_DCS_TYPE_7_BIT;
- else if ((encode & 0x0f) == 0x01)
- dcs = TCORE_DCS_TYPE_8_BIT; //should be re-defined
- else
- dcs = TCORE_DCS_TYPE_UNSPECIFIED;
- break;
-
- case 0x40:
- case 0x50:
- case 0x60:
- case 0x70: // 01xx
- if ((encode & 0x0c) == 0x00)
- dcs = TCORE_DCS_TYPE_7_BIT;
- else if ((encode & 0x0c) == 0x04)
- dcs = TCORE_DCS_TYPE_8_BIT;
- else if ((encode & 0x0c) == 0x08)
- dcs = TCORE_DCS_TYPE_UCS2;
- else if ((encode & 0x0c) == 0x0c)
- dcs = TCORE_DCS_TYPE_UNSPECIFIED;
- break;
-
- case 0x90: // 1001
- if ((encode & 0x0c) == 0x00)
- dcs = TCORE_DCS_TYPE_7_BIT;
- else if ((encode & 0x0c) == 0x04)
- dcs = TCORE_DCS_TYPE_8_BIT;
- else if ((encode & 0x0c) == 0x08)
- dcs = TCORE_DCS_TYPE_UCS2;
- else if ((encode & 0x0c) == 0x0c)
- dcs = TCORE_DCS_TYPE_UNSPECIFIED;
- break;
-
- case 0x80: // 1000
- case 0xA0:
- case 0xB0:
- case 0xC0:
- case 0xD0: // 1010 .. 1101
- case 0xE0: // 0x1110
- break;
-
- case 0xF0:
- if ((encode & 0x04) == 0x00)
- dcs = TCORE_DCS_TYPE_7_BIT;
- else if ((encode & 0x04) == 0x04)
- dcs = TCORE_DCS_TYPE_8_BIT;
- break;
- default:
- err("invalid encoding type");
- break;
+ else if ((encode & 0x0f) == 0x01)
+ dcs = TCORE_DCS_TYPE_8_BIT; /* should be re-defined */
+ else
+ dcs = TCORE_DCS_TYPE_UNSPECIFIED;
+ break;
+
+ case 0x40:
+ case 0x50:
+ case 0x60:
+ case 0x70: /* 01xx */
+ if ((encode & 0x0c) == 0x00)
+ dcs = TCORE_DCS_TYPE_7_BIT;
+ else if ((encode & 0x0c) == 0x04)
+ dcs = TCORE_DCS_TYPE_8_BIT;
+ else if ((encode & 0x0c) == 0x08)
+ dcs = TCORE_DCS_TYPE_UCS2;
+ else if ((encode & 0x0c) == 0x0c)
+ dcs = TCORE_DCS_TYPE_UNSPECIFIED;
+ break;
+
+ case 0x90: /* 1001 */
+ if ((encode & 0x0c) == 0x00)
+ dcs = TCORE_DCS_TYPE_7_BIT;
+ else if ((encode & 0x0c) == 0x04)
+ dcs = TCORE_DCS_TYPE_8_BIT;
+ else if ((encode & 0x0c) == 0x08)
+ dcs = TCORE_DCS_TYPE_UCS2;
+ else if ((encode & 0x0c) == 0x0c)
+ dcs = TCORE_DCS_TYPE_UNSPECIFIED;
+ break;
+
+ case 0x80: /* 1000 */
+ case 0xA0:
+ case 0xB0:
+ case 0xC0:
+ case 0xD0: /* 1010 .. 1101 */
+ case 0xE0: /* 0x1110 */
+ break;
+
+ case 0xF0:
+ if ((encode & 0x04) == 0x00)
+ dcs = TCORE_DCS_TYPE_7_BIT;
+ else if ((encode & 0x04) == 0x04)
+ dcs = TCORE_DCS_TYPE_8_BIT;
+ break;
+
+ default:
+ err("invalid encoding type");
+ break;
}
return dcs;
}
-#define CONVERT_HEXCHAR_TO_INT(h, i) if ((h) >= '0' && (h) <= '9') (i) = (h) - '0'; \
- else if ((h) >= 'A' && (h) <= 'F') (i) = (h) - 'A' + 10; \
- else if ((h) >= 'a' && (h) <= 'f') (i) = (h) - 'a' + 10; \
- else (i) = 0;
-
-
unsigned char *tcore_util_decode_hex(const char *src, int len)
{
unsigned char *buf;
if (!src)
return NULL;
- if (len == -1) {
+ if (len == -1)
out_len = strlen(src) / 2 + 1;
- }
- else {
+ else
out_len = len;
- }
buf = calloc(1, out_len);
if (!buf)
return NULL;
- for (; j < out_len; i+= 2, j++) {
+ for (; j < out_len; i += 2, j++) {
CONVERT_HEXCHAR_TO_INT(src[i], value1);
CONVERT_HEXCHAR_TO_INT(src[i+1], value2);
void tcore_util_hex_dump(const char *pad, int size, const void *data)
{
- char buf[255] = {0, };
- char hex[4] = {0, };
+ char buf[255] = {0,};
+ char hex[4] = {0,};
int i = 0;
unsigned char *p = NULL;
p = (unsigned char *)data;
g_snprintf(buf, 255, "%s%04X: ", pad, 0);
- for (i = 0; i<size; i++) {
+ for (i = 0; i < size; i++) {
g_snprintf(hex, 4, "%02X ", p[i]);
memcpy(buf+strlen(buf), hex, 4);
dbg("%s", buf);
memset(buf, 0, 255);
snprintf(buf, 255, "%s%04X: ", pad, i + 1);
- }
- else {
- strcat(buf, " ");
- }
+ } else
+ strncat(buf, TAB_SPACE, strlen(TAB_SPACE));
}
}
unsigned char shift = 0;
int outlen = 0;
- if (!src || src_len == 0) {
+ if (!src || src_len == 0)
return NULL;
- }
outlen = (src_len * 8) / 7;
dest[i] = (src[pos] << shift) & 0x7F;
if (pos != 0) {
- /* except the first byte, a character contains some bits from the previous byte.*/
+ /*
+ * except the first byte, a character contains some bits
+ * from the previous byte.
+ */
dest[i] |= src[pos - 1] >> (8 - shift);
}
}
}
- /*If a character is '\r'(13), change it to space(32) */
- for (i = 0, j=0; i < outlen; i++, j++) {
- if (dest[i] == '\r') {
+ /* If a character is '\r'(13), change it to space(32) */
+ for (i = 0, j = 0; i < outlen; i++, j++) {
+ if (dest[i] == '\r')
dest[j] = ' ';
-
- } else if (dest[i] == 0x1B) { /*If a charater is 0x1B (escape), next charater is changed on gsm 7bit extension table */
- dest[j] = _convert_gsm7bit_extension( dest[++i] );
-
- } else {
+ else if (dest[i] == 0x1B) /* If a charater is 0x1B (escape), next charater is changed on gsm 7bit extension table */
+ dest[j] = _convert_gsm7bit_extension(dest[++i]);
+ else
dest[j] = dest[i];
- }
}
- outlen -= ( i - j );
+ outlen -= (i - j);
dest[outlen] = '\0';
unsigned int pos = 0, shift = 0;
unsigned int outlen = 0;
- if (!src || src_len == 0) {
+ if (!src || src_len == 0)
return NULL;
- }
outlen = ((src_len * 7) / 8) + 1;
shift = 0;
i++;
}
- }
- else {
+ } else {
if (shift == 6)
dest[pos] |= 0x1a;
}
return dest;
}
-char* tcore_util_convert_bcd_str_2_ascii_str(const char* src, int src_len)
+char *tcore_util_convert_bcd_str_2_ascii_str(const char *src, int src_len)
{
int count = 0;
char *dest = NULL;
- if(!src)
+ if (!src)
return NULL;
dest = malloc((src_len+1)*sizeof(char));
+ if (!dest)
+ return NULL;
+
memset(dest, 0, (src_len+1)*sizeof(char));
- for(count = 0; count < src_len; count++){
- switch(src[count]){
- case 0x0A:
- dest[count] = '*';
- break;
- case 0x0B:
- dest[count] = '#';
- break;
- case 0x0C:
- dest[count] = 'p'; //Pause
- break;
- case 0x0D:
- dest[count] = '?'; //Wild Card character
- break;
- case 0x0E: //ignore, RFU
- case 0x0F:
- dest[count] = '\0'; //Null termination
- break;
- default:
- dest[count] = src[count]+'0'; //digits 0~9
- break;
+ for (count = 0; count < src_len; count++) {
+ switch (src[count]) {
+ case 0x0A:
+ dest[count] = '*';
+ break;
+
+ case 0x0B:
+ dest[count] = '#';
+ break;
+
+ case 0x0C:
+ dest[count] = 'p'; /* Pause */
+ break;
+
+ case 0x0D:
+ dest[count] = '?'; /* Wild Card character */
+ break;
+
+ case 0x0E: /* ignore, RFU */
+ case 0x0F:
+ dest[count] = '\0'; /* Null termination */
+ break;
+
+ default:
+ dest[count] = src[count]+'0'; /* digits 0~9 */
+ break;
}
}
return dest;
}
-char* tcore_util_convert_bcd2ascii(const char* src, int src_len, int max_len)
+char *tcore_util_convert_bcd2ascii(const char *src, int src_len, int max_len)
{
- int count = 0, len=0;
+ int count = 0, len = 0;
char l_bcd = 0x00, h_bcd = 0x0F;
char *dest = NULL;
- if(!src)
+ if (!src)
return NULL;
- if(src_len*2 > max_len){
+ if (src_len*2 > max_len) {
err("PARSER - number length exceeds the max");
return NULL;
}
dest = malloc((src_len*2)*sizeof(char)+1);
+ if (!dest)
+ return NULL;
+
memset(dest, 0, (src_len*2)*sizeof(char)+1);
- for(count = 0; count < src_len; count++){
+ for (count = 0; count < src_len; count++) {
l_bcd = src[count] & 0x0F;
h_bcd = (src[count] & 0xF0) >> 0x04;
- switch(l_bcd){
- case 0x0A:
- dest[len++] = '*';
- break;
- case 0x0B:
- dest[len++] = '#';
- break;
- case 0x0C:
- dest[len++] = 'p'; //Pause
- break;
- case 0x0D:
- dest[len++] = '?'; //Wild Card character
- break;
- case 0x0E: //ignore, RFU
- case 0x0F: //ignore in l_bcd
- break;
- default:
- dest[len++] = l_bcd+'0'; //digits 0~9
- break;
- }//l_lbcd switch
+ switch (l_bcd) {
+ case 0x0A:
+ dest[len++] = '*';
+ break;
- switch(h_bcd){
- case 0x0A:
- dest[len++] = '*';
- break;
- case 0x0B:
- dest[len++] = '#';
- break;
- case 0x0C:
- dest[len++] = 'p'; //Pause
- break;
- case 0x0D:
- dest[len++] = '?'; //Wild Card character
- break;
- case 0x0E: //ignore, RFU
- case 0x0F:
- dest[len] = '\0'; //Null termination
- break;
- default:
- dest[len++] = h_bcd+'0'; //digits 0~9
- break;
- }//h_bcd switch
+ case 0x0B:
+ dest[len++] = '#';
+ break;
+
+ case 0x0C:
+ dest[len++] = 'p'; /* Pause */
+ break;
+
+ case 0x0D:
+ dest[len++] = '?'; /* Wild Card character */
+ break;
+
+ case 0x0E: /* ignore, RFU */
+ case 0x0F: /* ignore in l_bcd */
+ break;
+
+ default:
+ dest[len++] = l_bcd+'0'; /* digits 0~9 */
+ break;
+ } /* l_lbcd switch */
+
+ switch (h_bcd) {
+ case 0x0A:
+ dest[len++] = '*';
+ break;
+
+ case 0x0B:
+ dest[len++] = '#';
+ break;
+
+ case 0x0C:
+ dest[len++] = 'p'; /* Pause */
+ break;
+
+ case 0x0D:
+ dest[len++] = '?'; /* Wild Card character */
+ break;
+
+ case 0x0E: /* ignore, RFU */
+ case 0x0F:
+ dest[len] = '\0'; /* Null termination */
+ break;
+
+ default:
+ dest[len++] = h_bcd+'0'; /*digits 0~9 */
+ break;
+ } /* h_bcd switch */
}
- if(h_bcd != 0x0F)
+ if (h_bcd != 0x0F)
dest[len] = '\0';
dbg("PARSER - number(%s) len(%d)", dest, len);
return dest;
}
-char* tcore_util_convert_digit2ascii(const char* src, int src_len)
+char *tcore_util_convert_digit2ascii(const char *src, int src_len)
{
int count = 0;
char *dest = NULL;
- if(!src)
+ if (!src)
return NULL;
dest = malloc((src_len+1)*sizeof(char));
+ if (!dest)
+ return NULL;
+
memset(dest, 0, (src_len+1)*sizeof(char));
- for(count = 0; count < src_len; count++){
+ for (count = 0; count < src_len; count++)
dest[count] = src[count] + '0';
- }
dest[count] = '\0';
dbg("PARSER - number(%s) len(%d)", dest, strlen(dest));
return dest;
}
-
GHashTable *tcore_util_marshal_create()
{
GHashTable *ht = NULL;
- ht = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
- _tcore_util_marshal_remove_value);
+ ht = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, _tcore_util_marshal_remove_value);
return ht;
}
ht = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
_tcore_util_marshal_remove_value);
- if (strlen(serialized_string) == 0) {
+ if (strlen(serialized_string) == 0)
return ht;
- }
g_value_init(&src, G_TYPE_STRING);
while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
unsigned int gtype = 0;
gchar *tmp = NULL, *encoded_d = NULL;
- GValue gval = { 0,{ { 0 } } };
+ GValue gval = {0, {{0} } };
g_value_init(&gval, G_TYPE_STRING);
if (gtype != G_TYPE_HASH_TABLE) {
g_value_transform((GValue *) value, &gval);
tmp = g_value_dup_string(&gval);
- }
- else {
+ } else {
GHashTable *sub_ht;
sub_ht = g_value_get_boxed((GValue *) value);
tmp = tcore_util_marshal_serialize(sub_ht);
encoded_d = g_base64_encode((guchar *)tmp, (gsize)strlen(tmp));
g_free(tmp);
- g_string_append_printf(gstring_tmp, "%s:%d:%s ", (gchar *)key,
- gtype, encoded_d);
+ g_string_append_printf(gstring_tmp, "%s:%d:%s ",
+ (gchar *)key, gtype, encoded_d);
g_free((gpointer)encoded_d);
g_value_unset(&gval);
}
if (!ht || !key)
return 0;
- rv = tcore_util_marshal_get_data(ht, key, (void **) &tmp,
- TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ rv = tcore_util_marshal_get_data(ht, key,
+ (void **)&tmp, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
if (!rv)
return 0;
if (!ht || !key)
return 0;
- rv = tcore_util_marshal_get_data(ht, key, (void **) &rvalue,
- TCORE_UTIL_MARSHAL_DATA_STRING_TYPE);
+ rv = tcore_util_marshal_get_data(ht, key,
+ (void **)&rvalue, TCORE_UTIL_MARSHAL_DATA_STRING_TYPE);
if (!rv)
return NULL;
if (!ht || !key)
return 0;
- rv = tcore_util_marshal_get_data(ht, key, (void **) &rvalue,
- TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
+ rv = tcore_util_marshal_get_data(ht, key,
+ (void **)&rvalue, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
if (!rv)
return NULL;
tcore_debug = enable;
}
+gboolean tcore_util_is_country_NA(char *plmn)
+{
+ if (!plmn)
+ return FALSE;
+
+ if (!strncmp(plmn, "310", 3)
+ || !strncmp(plmn, "311", 3)
+ || !strncmp(plmn, "312", 3)
+ || !strncmp(plmn, "313", 3)
+ || !strncmp(plmn, "314", 3)
+ || !strncmp(plmn, "315", 3)
+ || !strncmp(plmn, "316", 3)
+ || !strncmp(plmn, "302", 3))
+ return TRUE;
+
+ return FALSE;
+}
ret = tcore_at_buf_write(at, strlen(msg_2), msg_2);
g_assert(ret == TCORE_RETURN_SUCCESS);
- tcore_at_free (at);
+ tcore_at_free(at);
}
static void test_tok(void)
ret = tcore_at_process(at, strlen(msg), msg);
g_assert(ret == TRUE);
- tcore_at_free (at);
+ tcore_at_free(at);
}
int main(int argc, char **argv)
co = tcore_object_new(NULL, "test", NULL);
g_assert(co);
- tcore_object_free (co);
+ tcore_object_free(co);
}
static void test_callback_renew(void)
co = tcore_object_new(NULL, "test", NULL);
g_assert(co);
- // lifetime: unlimit
+ /* lifetime: unlimit */
_count = 0;
ret = tcore_object_add_callback(co, "event1", on_event1, NULL);
g_assert(ret == TCORE_RETURN_SUCCESS);
co = tcore_object_new(NULL, "test", NULL);
g_assert(co);
- // lifetime: one time callback + unlimit callback
+ /* lifetime: one time callback + unlimit callback */
_count = 0;
ret = tcore_object_add_callback(co, "event2", on_event2, NULL);
g_assert(ret == TCORE_RETURN_SUCCESS);
g_assert(_count == 2);
- tcore_object_free (co);
+ tcore_object_free(co);
}
-static gboolean on_prop_changed (CoreObject *co, const void *event_info,
+static gboolean on_prop_changed(CoreObject *co, const void *event_info,
void *user_data)
{
int *mode = user_data;
const char *data;
switch (*mode) {
- case 1:
- g_assert (g_slist_length(key) == 1);
- g_assert_cmpstr (key->data, ==, "qqq");
- data = tcore_object_ref_property (co, "qqq");
- g_assert_cmpstr (data, ==, "1234");
- break;
-
- case 2:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "qqq");
- data = tcore_object_ref_property (co, "qqq");
- g_assert (data == NULL);
- break;
-
- case 3:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "www");
- data = tcore_object_ref_property (co, "www");
- g_assert_cmpstr (data, ==, "heap");
- break;
-
- case 4:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "www");
- data = tcore_object_ref_property (co, "www");
- g_assert (data == NULL);
- break;
-
- case 5:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "key");
- data = tcore_object_ref_property (co, "key");
- g_assert_cmpstr (data, ==, "1");
- break;
-
- case 6:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "key");
- data = tcore_object_ref_property (co, "key");
- g_assert_cmpstr (data, ==, "2");
- break;
-
- case 7:
- g_assert (FALSE);
- break;
-
- case 8:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "key");
- data = tcore_object_ref_property (co, "key");
- g_assert_cmpstr (data, ==, "2");
- break;
-
- case 9:
- g_assert (g_slist_length (key) == 2);
- g_assert_cmpstr (key->data, ==, "foo");
- g_assert_cmpstr (key->next->data, ==, "bar");
- data = tcore_object_ref_property (co, "foo");
- g_assert_cmpstr (data, ==, "1");
- data = tcore_object_ref_property (co, "bar");
- g_assert_cmpstr (data, ==, "2");
- break;
-
- case 10:
- g_assert (g_slist_length (key) == 1);
- g_assert_cmpstr (key->data, ==, "foo");
- data = tcore_object_ref_property (co, "foo");
- g_assert (data == NULL);
- break;
-
- case 11:
- g_assert (g_slist_length (key) == 2);
- g_assert (g_slist_find_custom (key, "foo",
- (GCompareFunc)g_strcmp0) != NULL);
- g_assert (CORE_OBJECT_KEY_FIND(key, "bar") != NULL);
- data = tcore_object_ref_property (co, "foo");
- g_assert_cmpstr (data, ==, "1");
- data = tcore_object_ref_property (co, "bar");
- g_assert (data == NULL);
- break;
-
- default:
- g_assert (FALSE);
- break;
+ case 1:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "qqq");
+ data = tcore_object_ref_property(co, "qqq");
+ g_assert_cmpstr(data, ==, "1234");
+ break;
+
+ case 2:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "qqq");
+ data = tcore_object_ref_property(co, "qqq");
+ g_assert(data == NULL);
+ break;
+
+ case 3:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "www");
+ data = tcore_object_ref_property(co, "www");
+ g_assert_cmpstr(data, ==, "heap");
+ break;
+
+ case 4:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "www");
+ data = tcore_object_ref_property(co, "www");
+ g_assert(data == NULL);
+ break;
+
+ case 5:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "key");
+ data = tcore_object_ref_property(co, "key");
+ g_assert_cmpstr(data, ==, "1");
+ break;
+
+ case 6:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "key");
+ data = tcore_object_ref_property(co, "key");
+ g_assert_cmpstr(data, ==, "2");
+ break;
+
+ case 7:
+ g_assert(FALSE);
+ break;
+
+ case 8:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "key");
+ data = tcore_object_ref_property(co, "key");
+ g_assert_cmpstr(data, ==, "2");
+ break;
+
+ case 9:
+ g_assert(g_slist_length(key) == 2);
+ g_assert_cmpstr(key->data, ==, "foo");
+ g_assert_cmpstr(key->next->data, ==, "bar");
+ data = tcore_object_ref_property(co, "foo");
+ g_assert_cmpstr(data, ==, "1");
+ data = tcore_object_ref_property(co, "bar");
+ g_assert_cmpstr(data, ==, "2");
+ break;
+
+ case 10:
+ g_assert(g_slist_length(key) == 1);
+ g_assert_cmpstr(key->data, ==, "foo");
+ data = tcore_object_ref_property(co, "foo");
+ g_assert(data == NULL);
+ break;
+
+ case 11:
+ g_assert(g_slist_length(key) == 2);
+ g_assert(g_slist_find_custom(key, "foo",
+ (GCompareFunc)g_strcmp0) != NULL);
+ g_assert(CORE_OBJECT_KEY_FIND(key, "bar") != NULL);
+ data = tcore_object_ref_property(co, "foo");
+ g_assert_cmpstr(data, ==, "1");
+ data = tcore_object_ref_property(co, "bar");
+ g_assert(data == NULL);
+ break;
+
+ default:
+ g_assert(FALSE);
+ break;
}
/* Set flag to callback invocation success */
return TRUE;
}
-static void test_property (void)
+static void test_property(void)
{
CoreObject *co;
const char *data;
int mode = 0;
GSList *tmp_list;
- co = tcore_object_new (NULL, "test", NULL);
- g_assert (co);
+ co = tcore_object_new(NULL, "test", NULL);
+ g_assert(co);
- tcore_object_add_callback (co, CORE_OBJECT_EVENT_PROPERTY_CHANGED,
- on_prop_changed, &mode);
+ tcore_object_add_callback(co, CORE_OBJECT_EVENT_PROPERTY_CHANGED,
+ on_prop_changed, &mode);
- raw = tcore_object_ref_property_hash (co);
- g_assert (raw);
+ raw = tcore_object_ref_property_hash(co);
+ g_assert(raw);
/* Case: Basic property set */
mode = 1;
- tcore_object_set_property (co, "qqq", "1234");
- g_assert (g_hash_table_size (raw) == 1);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "qqq", "1234");
+ g_assert(g_hash_table_size(raw) == 1);
+ g_assert(mode == 0);
- data = tcore_object_ref_property (co, "qqq");
+ data = tcore_object_ref_property(co, "qqq");
g_assert_cmpstr(data, ==, "1234");
/* Case: Basic property remove */
mode = 2;
- tcore_object_set_property (co, "qqq", NULL);
- g_assert (g_hash_table_size (raw) == 0);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "qqq", NULL);
+ g_assert(g_hash_table_size(raw) == 0);
+ g_assert(mode == 0);
- data = tcore_object_ref_property (co, "qqq");
- g_assert (data == NULL);
+ data = tcore_object_ref_property(co, "qqq");
+ g_assert(data == NULL);
/* Case: Malloc property set */
mode = 3;
test = strdup("heap");
- tcore_object_set_property (co, "www", test);
- g_assert (g_hash_table_size (raw) == 1);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "www", test);
+ g_assert(g_hash_table_size(raw) == 1);
+ g_assert(mode == 0);
free(test);
- data = tcore_object_ref_property (co, "www");
+ data = tcore_object_ref_property(co, "www");
g_assert_cmpstr(data, ==, "heap");
/* Case: Malloc property remove */
mode = 4;
- tcore_object_set_property (co, "www", NULL);
- g_assert (g_hash_table_size (raw) == 0);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "www", NULL);
+ g_assert(g_hash_table_size(raw) == 0);
+ g_assert(mode == 0);
- data = tcore_object_ref_property (co, "www");
- g_assert (data == NULL);
+ data = tcore_object_ref_property(co, "www");
+ g_assert(data == NULL);
/* Case: Same key & Different value set */
mode = 5;
- tcore_object_set_property (co, "key", "1");
- g_assert (g_hash_table_size (raw) == 1);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "key", "1");
+ g_assert(g_hash_table_size(raw) == 1);
+ g_assert(mode == 0);
mode = 6;
- tcore_object_set_property (co, "key", "2");
- g_assert (g_hash_table_size (raw) == 1);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "key", "2");
+ g_assert(g_hash_table_size(raw) == 1);
+ g_assert(mode == 0);
/* Case: Same key & Same value set => No callback invocation */
mode = 7;
- tcore_object_set_property (co, "key", "2");
- g_assert (g_hash_table_size (raw) == 1);
- g_assert (mode == 7);
+ tcore_object_set_property(co, "key", "2");
+ g_assert(g_hash_table_size(raw) == 1);
+ g_assert(mode == 7);
/* Case: Same key & Same value set & force event invocation */
mode = 8;
- tcore_object_set_property (co, "key", "2");
- g_assert (g_hash_table_size (raw) == 1);
+ tcore_object_set_property(co, "key", "2");
+ g_assert(g_hash_table_size(raw) == 1);
- tmp_list = g_slist_append (NULL, (char*)"key");
+ tmp_list = g_slist_append(NULL, (char *)"key");
tcore_object_emit_callback(co, CORE_OBJECT_EVENT_PROPERTY_CHANGED, tmp_list);
- g_assert (mode == 0);
+ g_assert(mode == 0);
g_slist_free(tmp_list);
/* Case: Multiple property set */
mode = 9;
- tcore_object_set_property (co, "foo", "1", "bar", "2");
- g_assert (g_hash_table_size (raw) == 3);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "foo", "1", "bar", "2");
+ g_assert(g_hash_table_size(raw) == 3);
+ g_assert(mode == 0);
/* Case: Set key without value => same as key with NULL: remove key */
mode = 10;
- tcore_object_set_property (co, "foo");
- g_assert (g_hash_table_size (raw) == 2);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "foo");
+ g_assert(g_hash_table_size(raw) == 2);
+ g_assert(mode == 0);
/* Case: Multiple property set with unset (foo set, bar unset) */
mode = 11;
- tcore_object_set_property (co, "foo", "1", "bar");
- g_assert (g_hash_table_size (raw) == 2);
- g_assert (mode == 0);
+ tcore_object_set_property(co, "foo", "1", "bar");
+ g_assert(g_hash_table_size(raw) == 2);
+ g_assert(mode == 0);
- tcore_object_free (co);
+ tcore_object_free(co);
}
int main(int argc, char **argv)
/* pack 'hello' */
dest = tcore_util_pack_gsm7bit((unsigned char *)"hello", strlen("hello"));
- if(!dest){
+ if (dest) {
g_assert(memcmp(packed, dest, strlen((char *)dest)) == 0);
free(dest);
}
struct tcore_network_operator_info *tmp_noi;
TReturn ret;
- p = tcore_plugin_new (NULL, NULL, NULL, NULL);
- g_assert (p);
+ p = tcore_plugin_new(NULL, NULL, NULL, NULL);
+ g_assert(p);
- o = tcore_network_new (p, "test_network", NULL, NULL);
- g_assert (o);
+ o = tcore_network_new(p, "test_network", NULL, NULL);
+ g_assert(o);
/* Add 2 items */
- snprintf (noi.mcc, 4, "123");
- snprintf (noi.mnc, 4, "01");
- snprintf (noi.name, 41, "Hello");
- ret = tcore_network_operator_info_add (o, &noi);
- g_assert (ret == TCORE_RETURN_SUCCESS);
-
- snprintf (noi.mcc, 4, "123");
- snprintf (noi.mnc, 4, "02");
- snprintf (noi.name, 41, "World");
- ret = tcore_network_operator_info_add (o, &noi);
- g_assert (ret == TCORE_RETURN_SUCCESS);
+ snprintf(noi.mcc, 4, "123");
+ snprintf(noi.mnc, 4, "01");
+ snprintf(noi.name, 41, "Hello");
+ ret = tcore_network_operator_info_add(o, &noi);
+ g_assert(ret == TCORE_RETURN_SUCCESS);
+
+ snprintf(noi.mcc, 4, "123");
+ snprintf(noi.mnc, 4, "02");
+ snprintf(noi.name, 41, "World");
+ ret = tcore_network_operator_info_add(o, &noi);
+ g_assert(ret == TCORE_RETURN_SUCCESS);
/* Check items */
- tmp_noi = tcore_network_operator_info_find (o, "123", "01");
- g_assert (tmp_noi);
- g_assert_cmpstr (tmp_noi->name, ==, "Hello");
+ tmp_noi = tcore_network_operator_info_find(o, "123", "01");
+ g_assert(tmp_noi);
+ g_assert_cmpstr(tmp_noi->name, ==, "Hello");
- tmp_noi = tcore_network_operator_info_find (o, "123", "02");
- g_assert (tmp_noi);
- g_assert_cmpstr (tmp_noi->name, ==, "World");
+ tmp_noi = tcore_network_operator_info_find(o, "123", "02");
+ g_assert(tmp_noi);
+ g_assert_cmpstr(tmp_noi->name, ==, "World");
/* Replace item */
- snprintf (noi.mcc, 4, "123");
- snprintf (noi.mnc, 4, "02");
- snprintf (noi.name, 41, "Update");
- ret = tcore_network_operator_info_add (o, &noi);
- g_assert (ret == TCORE_RETURN_SUCCESS);
+ snprintf(noi.mcc, 4, "123");
+ snprintf(noi.mnc, 4, "02");
+ snprintf(noi.name, 41, "Update");
+ ret = tcore_network_operator_info_add(o, &noi);
+ g_assert(ret == TCORE_RETURN_SUCCESS);
/* Check items */
- tmp_noi = tcore_network_operator_info_find (o, "123", "01");
- g_assert (tmp_noi);
- g_assert_cmpstr (tmp_noi->name, ==, "Hello");
+ tmp_noi = tcore_network_operator_info_find(o, "123", "01");
+ g_assert(tmp_noi);
+ g_assert_cmpstr(tmp_noi->name, ==, "Hello");
- tmp_noi = tcore_network_operator_info_find (o, "123", "02");
- g_assert (tmp_noi);
- g_assert_cmpstr (tmp_noi->name, ==, "Update");
+ tmp_noi = tcore_network_operator_info_find(o, "123", "02");
+ g_assert(tmp_noi);
+ g_assert_cmpstr(tmp_noi->name, ==, "Update");
- tcore_network_free (o);
- tcore_plugin_free (p);
+ tcore_network_free(o);
+ tcore_plugin_free(p);
}
int main(int argc, char **argv)
GHashTable *list;
int value_int;
- list = tcore_util_marshal_create ();
+ list = tcore_util_marshal_create();
g_assert(list);
value_int = 1;
- tcore_util_marshal_add_data (list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
- g_assert(tcore_util_marshal_get_int (list, "key1") == value_int);
+ tcore_util_marshal_add_data(list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ g_assert(tcore_util_marshal_get_int(list, "key1") == value_int);
value_int = 2;
- tcore_util_marshal_add_data (list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
- g_assert(tcore_util_marshal_get_int (list, "key2") == value_int);
+ tcore_util_marshal_add_data(list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ g_assert(tcore_util_marshal_get_int(list, "key2") == value_int);
- tcore_util_marshal_destory (list);
+ tcore_util_marshal_destory(list);
}
static void test_marshal_serialize(void)
char buf[255];
int value_int;
- list = tcore_util_marshal_create ();
+ list = tcore_util_marshal_create();
g_assert(list);
value_int = 1;
- tcore_util_marshal_add_data (list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
- g_assert(tcore_util_marshal_get_int (list, "key1") == value_int);
+ tcore_util_marshal_add_data(list, "key1", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ g_assert(tcore_util_marshal_get_int(list, "key1") == value_int);
value_int = 2;
- tcore_util_marshal_add_data (list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
- g_assert(tcore_util_marshal_get_int (list, "key2") == value_int);
+ tcore_util_marshal_add_data(list, "key2", &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ g_assert(tcore_util_marshal_get_int(list, "key2") == value_int);
- item = tcore_util_marshal_create ();
- g_assert (item);
- tcore_util_marshal_add_data (list, "key_object", item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
+ item = tcore_util_marshal_create();
+ g_assert(item);
+ tcore_util_marshal_add_data(list, "key_object", item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
for (i = 0; i < 3; i++) {
- item = tcore_util_marshal_create ();
- g_assert (item);
+ item = tcore_util_marshal_create();
+ g_assert(item);
value_int = i * 10;
- snprintf (buf, 255, "sub-%d", i);
- tcore_util_marshal_add_data (item, buf, &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
- g_assert(tcore_util_marshal_get_int (item, buf) == value_int);
+ snprintf(buf, 255, "sub-%d", i);
+ tcore_util_marshal_add_data(item, buf, &value_int, TCORE_UTIL_MARSHAL_DATA_INT_TYPE);
+ g_assert(tcore_util_marshal_get_int(item, buf) == value_int);
- tcore_util_marshal_add_data (list, buf, item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
+ tcore_util_marshal_add_data(list, buf, item, TCORE_UTIL_MARSHAL_DATA_OBJECT_TYPE);
}
- serialized = tcore_util_marshal_serialize (list);
- g_assert (serialized);
- tcore_util_marshal_destory (list);
+ serialized = tcore_util_marshal_serialize(list);
+ g_assert(serialized);
+ tcore_util_marshal_destory(list);
- tmp = tcore_util_marshal_deserialize_string (serialized);
- g_assert (tmp);
+ tmp = tcore_util_marshal_deserialize_string(serialized);
+ g_assert(tmp);
- free (serialized);
+ free(serialized);
- g_assert(tcore_util_marshal_get_int (tmp, "key1") == 1);
- g_assert(tcore_util_marshal_get_int (tmp, "key2") == 2);
+ g_assert(tcore_util_marshal_get_int(tmp, "key1") == 1);
+ g_assert(tcore_util_marshal_get_int(tmp, "key2") == 2);
- tcore_util_marshal_destory (tmp);
+ tcore_util_marshal_destory(tmp);
}
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
-#if !GLIB_CHECK_VERSION(2,35,0)
+#if !GLIB_CHECK_VERSION(2, 35, 0)
g_type_init();
#endif