mirror of git://git.sysmocom.de/ofono
stk: Use envelope encoding utility from stkutil.c
This commit is contained in:
parent
f989541161
commit
7e5ef25c5a
|
@ -197,7 +197,7 @@ void ofono_cbs_notify(struct ofono_cbs *cbs, const unsigned char *pdu,
|
||||||
|
|
||||||
if (cbs_topic_in_range(c.message_identifier, cbs->efcbmid_contents)) {
|
if (cbs_topic_in_range(c.message_identifier, cbs->efcbmid_contents)) {
|
||||||
if (cbs->stk)
|
if (cbs->stk)
|
||||||
__ofono_cbs_sim_download(cbs->stk, pdu, pdu_len);
|
__ofono_cbs_sim_download(cbs->stk, &c);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,8 +177,8 @@ void __ofono_atom_free(struct ofono_atom *atom);
|
||||||
#include <ofono/sim.h>
|
#include <ofono/sim.h>
|
||||||
#include <ofono/stk.h>
|
#include <ofono/stk.h>
|
||||||
|
|
||||||
void __ofono_cbs_sim_download(struct ofono_stk *stk,
|
struct cbs;
|
||||||
const guint8 *pdu, int pdu_len);
|
void __ofono_cbs_sim_download(struct ofono_stk *stk, const struct cbs *msg);
|
||||||
|
|
||||||
#include <ofono/ssn.h>
|
#include <ofono/ssn.h>
|
||||||
|
|
||||||
|
|
27
src/stk.c
27
src/stk.c
|
@ -49,32 +49,33 @@ static void stk_cbs_download_cb(const struct ofono_error *error,
|
||||||
{
|
{
|
||||||
if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
|
if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
|
||||||
ofono_error("CellBroadcast download to UICC failed");
|
ofono_error("CellBroadcast download to UICC failed");
|
||||||
|
/* "The ME may retry to deliver the same Cell Broadcast
|
||||||
|
* page." */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG("CellBroadcast download to UICC reported no error");
|
DBG("CellBroadcast download to UICC reported no error");
|
||||||
}
|
}
|
||||||
|
|
||||||
void __ofono_cbs_sim_download(struct ofono_stk *stk,
|
void __ofono_cbs_sim_download(struct ofono_stk *stk, const struct cbs *msg)
|
||||||
const guint8 *pdu, int pdu_len)
|
|
||||||
{
|
{
|
||||||
guint8 tlv[pdu_len + 8];
|
const guint8 *tlv;
|
||||||
|
unsigned int tlv_len;
|
||||||
|
struct stk_envelope e;
|
||||||
|
|
||||||
if (stk->driver->envelope == NULL)
|
if (stk->driver->envelope == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tlv[0] = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD;
|
e.type = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD;
|
||||||
tlv[1] = 6 + pdu_len;
|
e.src = STK_DEVICE_IDENTITY_TYPE_NETWORK;
|
||||||
tlv[2] = 0x80 | STK_DATA_OBJECT_TYPE_DEVICE_IDENTITIES;
|
e.dst = STK_DEVICE_IDENTITY_TYPE_UICC;
|
||||||
tlv[3] = 0x02; /* Device Identities length */
|
memcpy(&e.cbs_pp_download.page, msg, sizeof(msg));
|
||||||
tlv[4] = STK_DEVICE_IDENTITY_TYPE_NETWORK;
|
|
||||||
tlv[5] = STK_DEVICE_IDENTITY_TYPE_UICC;
|
|
||||||
tlv[6] = 0x80 | STK_DATA_OBJECT_TYPE_CBS_PAGE;
|
|
||||||
tlv[7] = pdu_len;
|
|
||||||
|
|
||||||
memcpy(tlv + 8, pdu, pdu_len);
|
tlv = stk_pdu_from_envelope(&e, &tlv_len);
|
||||||
|
if (!tlv)
|
||||||
|
return;
|
||||||
|
|
||||||
stk->driver->envelope(stk, pdu_len + 8, tlv, stk_cbs_download_cb, stk);
|
stk->driver->envelope(stk, tlv_len, tlv, stk_cbs_download_cb, stk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ofono_stk_proactive_command_notify(struct ofono_stk *stk,
|
void ofono_stk_proactive_command_notify(struct ofono_stk *stk,
|
||||||
|
|
Loading…
Reference in New Issue