Contents
This page describes how a Keystore API should look like to be compatible with YateOTA, in case you opt to build your own Keystore/middleware instead of deploying YateOTA with YateHSS/HLR.
The two main operations of the Keystore when working with YateOTA:
* return sim specific information to build OTA message: kic,kid,kik,counter and profile specific info: spi, cla, kik alb.kid alg, tar ram, tar rfm sim, tar rfm usim. This information should also contain the subscriber MSISDN, as this is needed to deliver the update to using the SMSC connection
* update counter value per IMSI/ICCID/MSISDN when YateOTA deems it necessary
The URLs listed below are configurable, but YateOTA will do a HTTP GET request to the them after replacing IMSI / MSISDN / ICCid, depending on how campaign is made.
Retrieve sim info to build messages
URL SIM Info:
http://ip_datastore/api.php?request=get_sims&imsi=${imsi}&msisdn=${msisdn}&iccid=${iccid}
YateOTA does a GET request to url_get_siminfo after substituting imsi/msisdn/iccid, depending on how campaign was created.
Response should have:
Content-Type: application/json
Body:
{
"code": 0,
"sim_range": [
{
"imsi": "232030000020009",
"msisdn": "43332300009",
"pin": "0000",
"pin2": "0311",
"puk": "56149650",
"puk2": "76986469",
"adm1": "71711968",
"ota": {
"kic": "5CDC70C28563FEF9966E6DC75EA0D4C46B5BEABB270697CA",
"kid": "39EE78062AD5B798851814042AA8FA81662DF84ACCD0A462",
"kik": "127945D0E67A315545A68897EBF7CEC1B6D442458CCF9AC3"
},
"ota_counter": "0000000002",
"ota_profile": {
"cla": "80",
"spi": "1621",
"kid": "19",
"kic": "19",
"tar_ram": "000000",
"tar_rfm_sim": "B00010",
"tar_rfm_usim": "B00001"
}
}
]
}
Where:
“code”: 0 – success
and single object in “sim_range”. Essential fields for YateOTA are:
* msisdn – we need it to deliver campaign to it. It should appear in response even if campaign is done based on msisdn and it appears in url_get_siminfo
* ota object
* ota_counter
* ota_profile_object
All extra fields in sim object are ignored.
The other fields in my example pin/puk/adm are not needed for yate-ota campaign manager but you need to know them to use Local mode with card reader attached
HTTP errors / code !=0 in response are considered errors.
Empty sim_range array is mapped to “Unknown”. Participant state is automatically marked as failed.
Update counter field and indication of this comes in response from SIM card
URL Update Counter:
http://ip_datastore/api.php?request=set_sim&node=hss&imsi=${imsi}&msisdn=${msisdn}&ota_counter=${ota_counter}
YateOTA will increment counter it received when calling get_siminfo when
- response from sim card indicates that
- no response is received in configured expire time if “Update counter on expire” is checked in configuration wizard
Response should have:
Content-Type: application/json
Body:
{
"code": 0
}
YateOTA
OTA gateway solution for remote updates
See the product here ››