gboolean tcore_call_object_get_is_release_pending(CallObject *co);
+gboolean tcore_call_object_set_is_end_requested(CallObject *co, gboolean flag);
+gboolean tcore_call_object_get_is_end_requested(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);
gboolean tcore_context_get_roaming_apn(CoreObject *o);
TReturn tcore_context_set_disable_apn(CoreObject *o, gboolean flag);
gboolean tcore_context_get_disable_apn(CoreObject *o);
+TReturn tcore_context_set_throttled_apn(CoreObject *o, gboolean flag);
+gboolean tcore_context_get_throttled_apn(CoreObject *o);
+TReturn tcore_context_set_drop_packet(CoreObject *o, gboolean flag);
+gboolean tcore_context_get_drop_packet(CoreObject *o);
+
TReturn tcore_context_set_rs_state(CoreObject *o, enum co_context_rs_state rs_state);
enum co_context_rs_state tcore_context_get_rs_state(CoreObject *o);
TReturn tcore_context_set_ra_timer_id(CoreObject *o, gint id);
gboolean tcore_sim_set_isim_service_table(CoreObject *o, const struct tel_sim_ist *ist);
enum tcore_return tcore_sim_delete_isim_service_table(CoreObject *o);
+char *tcore_sim_get_psismsc(CoreObject *o);
+gboolean tcore_sim_set_psismsc(CoreObject *o, const char *uridata);
+enum tcore_return tcore_sim_delete_psismsc(CoreObject *o);
+
char *tcore_sim_get_isim_impi(CoreObject *o);
gboolean tcore_sim_set_isim_impi(CoreObject *o, const char *impi);
enum tcore_return tcore_sim_delete_isim_impi(CoreObject *o);
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_psismsc(struct tel_sim_psismsc *p_out, 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);
TREQ_SIM_GET_ISIM_SERVICE_TABLE,
TREQ_SIM_GET_CDMAIMSI,
TREQ_SIM_SET_PROVISIONING,
+ TREQ_SIM_GET_PSISMSC,
TREQ_SAT = TCORE_REQUEST | TCORE_TYPE_SAT,
TREQ_SAT_REQ_ENVELOPE,
%define major 0
%define minor 3
-%define patchlevel 29
+%define patchlevel 30
Name: libtcore
Version: %{major}.%{minor}.%{patchlevel}
gboolean is_release_pending; /* Need to end call */
enum tcore_call_silent_redial_reason redial_reason; /* Call re-dial reason */
+
+ gboolean is_end_requested; /*for SRVCC case , the call which has end requested from application should not be the target of SRVCC handover*/
+
};
struct private_object_data {
gboolean tcore_call_object_set_audio_codec(CallObject *co, gchar *audio_codec)
{
tcore_check_null_ret_err("co", co, FALSE);
+
+ if (co->audio_codec) {
+ g_free(co->audio_codec);
+ co->audio_codec = NULL;
+ }
co->audio_codec = g_strdup(audio_codec);
return TRUE;
po->iops = iops;
}
+gboolean tcore_call_object_set_is_end_requested(CallObject *co, gboolean flag)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+
+ co->is_end_requested = flag;
+
+ return TRUE;
+}
+
+gboolean tcore_call_object_get_is_end_requested(CallObject *co)
+{
+ tcore_check_null_ret_err("co", co, FALSE);
+
+ return co->is_end_requested;
+}
+
CoreObject *tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal)
{
CoreObject *o = NULL;
gboolean attach_apn;
gboolean roaming_apn;
gboolean disable_apn;
+ gboolean throttled_apn;
+ gboolean drop_packet;
char *apn;
char *addr;
po->tech_pref = CONTEXT_TECH_3GPP;
po->disable_apn = FALSE;
po->pco = -1;
+ po->drop_packet = FALSE;
tcore_object_set_type(o, CORE_OBJECT_TYPE_PS_CONTEXT);
tcore_object_link_object(o, po);
return po->disable_apn;
}
+TReturn tcore_context_set_drop_packet(CoreObject *o, gboolean flag)
+{
+ 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;
+
+ po->drop_packet = flag;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+gboolean tcore_context_get_drop_packet(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
+
+ return po->drop_packet;
+}
+
+TReturn tcore_context_set_throttled_apn(CoreObject *o, gboolean flag)
+{
+ 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;
+
+ po->throttled_apn = flag;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+gboolean tcore_context_get_throttled_apn(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
+
+ return po->throttled_apn;
+}
+
TReturn tcore_context_set_rs_state(CoreObject *o, enum co_context_rs_state rs_state)
{
struct private_object_data *po = NULL;
{
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_df[29] = {
+ enum tel_sim_file_id ef_under_df[30] = {
SIM_EF_IMSI, SIM_EF_SST,
SIM_EF_EST, SIM_EF_OPLMN_ACT,
SIM_EF_GID1, SIM_EF_GID2,
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, SIM_EF_FDN};
dbg("[SAT] SAT PARSER - FILE ID=0x%04x", (unsigned int)file_id);
if ((file_id & 0x6F00) == 0x6F00) {
dbg("[SAT] SAT PARSER - ADF_USIM EF=0x%04x", file_id);
- for (i = 0; i < 29; i++) {
+ for (i = 0; i < 30; i++) {
if (file_id == ef_under_df[i]) {
- dbg("[SAT] SAT PARSER - MATCH!");
+ dbg("[SAT] SAT PARSER - MATCH! %x", ef_under_df[i]);
return TRUE;
}
}
case EVENT_CALL_DISCONNECTED:
case EVENT_LOCATION_STATUS:
case EVENT_ACCESS_TECHNOLOGY_CHANGED:
+ case EVENT_CARD_READER_STATUS:
event_list_obj->evt_list[i] = src_data[temp_index];
event_list_obj->event_list_cnt++;
break;
dst_tr[temp_index++] = 2;
dst_tr[temp_index++] = src_tr->result_type;
dst_tr[temp_index++] = src_tr->me_problem_type;
+
+ /* set bearer description */
+ encoded_len = _sat_encode_bearer_desc_tlv(&(src_tr->bearer_desc), dst_tr, temp_index);
+ temp_index += encoded_len;
break;
case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
struct tel_sim_ist *ist;
char *impi;
+ char *psismsc;
void *userdata; /**< free use data*/
};
case TREQ_SIM_GET_PNN:
case TREQ_SIM_GET_CPHS_NETNAME:
case TREQ_SIM_GET_OPLMNWACT:
+ case TREQ_SIM_GET_PSISMSC:
case TREQ_SIM_GET_ICON:
case TREQ_SIM_GET_IMPI:
case TREQ_SIM_GET_IMPU:
if (po->impi)
free(po->impi);
+ if (po->psismsc)
+ free(po->psismsc);
+
free(po);
tcore_object_link_object(o, NULL);
}
return TRUE;
}
+gboolean tcore_sim_decode_psismsc(struct tel_sim_psismsc *p_out, unsigned char *p_in, int in_length)
+{
+ unsigned char tag = 0, len = 0;
+
+ if (p_in == NULL || p_out == NULL || in_length < 2)
+ return FALSE;
+
+ tag = p_in[0];
+ if (tag != 0x80) {
+ err("tag[0x%x] should be 0x80. return FALSE.", tag);
+ return FALSE;
+ }
+
+ len = p_in[1];
+
+ if (in_length < len + 2)
+ err("invalid length. in_length[%d] < URI_len[%d] + 2", in_length, len);
+
+ p_out->uridata = calloc(1, len + 1);
+ memcpy(p_out->uridata, &p_in[2], len);
+
+ dbg("uridata: %s", p_out->uridata);
+ 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;
return TCORE_RETURN_SUCCESS;
}
+char *tcore_sim_get_psismsc(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po) {
+ err("po access fail");
+ return NULL;
+ }
+
+ if (!po->psismsc) {
+ err("po->psismsc is NULL");
+ return NULL;
+ }
+
+ return g_strdup(po->psismsc);
+}
+
+gboolean tcore_sim_set_psismsc(CoreObject *o, const char *uridata)
+{
+ struct private_object_data *po = NULL;
+
+ po = tcore_object_ref_object(o);
+ if (!po) {
+ err("po access fail");
+ return FALSE;
+ }
+
+ if (!uridata) {
+ err("uridata is NULL");
+ return FALSE;
+ }
+
+ if (po->psismsc)
+ g_free(po->psismsc);
+
+ po->psismsc = g_strdup(uridata);
+
+ return TRUE;
+}
+
+enum tcore_return tcore_sim_delete_psismsc(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+ po = tcore_object_ref_object(o);
+ if (!po) {
+ err("po access fail");
+ return TCORE_RETURN_EINVAL;
+ }
+
+ if (po->psismsc) {
+ g_free(po->psismsc);
+ po->psismsc = NULL;
+ }
+
+ return TCORE_RETURN_SUCCESS;
+}
+
char *tcore_sim_get_isim_impi(CoreObject *o)
{
struct private_object_data *po = NULL;