mirror of git://git.sysmocom.de/ofono
Move PNN operator parsing to simutil
This commit is contained in:
parent
80f43ff849
commit
38eebca61f
27
src/sim.c
27
src/sim.c
|
@ -103,11 +103,6 @@ static char **get_own_numbers(GSList *own_numbers)
|
|||
return ret;
|
||||
}
|
||||
|
||||
struct pnn_operator {
|
||||
char *longname;
|
||||
char *shortname;
|
||||
};
|
||||
|
||||
static void sim_file_op_free(struct sim_file_op *node)
|
||||
{
|
||||
g_free(node);
|
||||
|
@ -594,28 +589,6 @@ const char *ofono_operator_name_sim_override(struct ofono_modem *modem,
|
|||
return sim->pnn[opl_op->id - 1].longname;
|
||||
}
|
||||
|
||||
static gboolean pnn_operator_parse(struct pnn_operator *oper,
|
||||
const guint8 *tlv, int length)
|
||||
{
|
||||
const char *name;
|
||||
int namelength;
|
||||
|
||||
name = ber_tlv_find_by_tag(tlv, 0x43, length, &namelength);
|
||||
if (!name || !namelength)
|
||||
return FALSE;
|
||||
oper->longname = network_name_parse(name, namelength);
|
||||
|
||||
name = ber_tlv_find_by_tag(tlv, 0x45, length, &namelength);
|
||||
if (name && namelength)
|
||||
oper->shortname = network_name_parse(name, namelength);
|
||||
|
||||
if (ber_tlv_find_by_tag(tlv, 0x80, length, &namelength))
|
||||
ofono_debug("%i octets of addition PLMN information "
|
||||
"present in EF-PNN");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sim_pnn_read_cb(const struct ofono_error *error,
|
||||
const unsigned char *pnndata, int length, void *data)
|
||||
{
|
||||
|
|
|
@ -118,3 +118,42 @@ char *sim_network_name_parse(const unsigned char *buffer, int length,
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean sim_pnn_operator_parse(struct sim_pnn_operator *oper,
|
||||
const guint8 *tlv, int length)
|
||||
{
|
||||
const char *name;
|
||||
int namelength;
|
||||
gboolean add_ci;
|
||||
|
||||
name = ber_tlv_find_by_tag(tlv, 0x43, length, &namelength);
|
||||
|
||||
if (!name || !namelength)
|
||||
return FALSE;
|
||||
|
||||
oper->longname = sim_network_name_parse(name, namelength,
|
||||
&oper->long_ci);
|
||||
|
||||
name = ber_tlv_find_by_tag(tlv, 0x45, length, &namelength);
|
||||
|
||||
oper->short_ci = FALSE;
|
||||
oper->shortname = NULL;
|
||||
|
||||
if (name && namelength)
|
||||
oper->shortname = sim_network_name_parse(name, namelength,
|
||||
&oper->short_ci);
|
||||
|
||||
name = ber_tlv_find_by_tag(tlv, 0x80, length, &namelength);
|
||||
|
||||
if (name && namelength)
|
||||
oper->info = sim_string_to_utf8(name, namelength);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sim_pnn_operator_free(struct sim_pnn_operator *oper)
|
||||
{
|
||||
g_free(oper->info);
|
||||
g_free(oper->shortname);
|
||||
g_free(oper->longname);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,19 @@ enum sim_fileid {
|
|||
#define SIM_EFSPN_DC_HOME_PLMN_BIT 0x1
|
||||
#define SIM_EFSPN_DC_ROAMING_SPN_BIT 0x2
|
||||
|
||||
struct sim_pnn_operator {
|
||||
char *longname;
|
||||
gboolean long_ci;
|
||||
char *shortname;
|
||||
gboolean short_ci;
|
||||
char *info;
|
||||
};
|
||||
|
||||
void sim_pnn_operator_free(struct sim_pnn_operator *oper);
|
||||
|
||||
const guint8 *ber_tlv_find_by_tag(const guint8 *pdu, guint8 in_tag,
|
||||
int in_len, int *out_len);
|
||||
char *sim_network_name_parse(const unsigned char *buffer, int length,
|
||||
gboolean *add_ci);
|
||||
gboolean sim_pnn_operator_parse(struct sim_pnn_operator *oper,
|
||||
const guint8 *tlv, int length);
|
||||
|
|
Loading…
Reference in New Issue