aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2012-09-10 21:05:42 +0200
committerHarald Welte <laforge@gnumonks.org>2014-10-26 19:09:22 +0100
commita5c9255baa0dd97b564ea8d44444ac80c38153b9 (patch)
treee560df400e42937b1cb1216859d6c86bd1a3ec58
parent495fe2682c37d7e2ba9d969fa0675e59db461790 (diff)
sim: strip the SW from the returned data, as SW is passed in msgb->cb
-rw-r--r--src/sim/reader.c7
-rw-r--r--utils/osmo-sim-test.c6
2 files changed, 8 insertions, 5 deletions
diff --git a/src/sim/reader.c b/src/sim/reader.c
index 71fb763d..5d6033bf 100644
--- a/src/sim/reader.c
+++ b/src/sim/reader.c
@@ -27,11 +27,15 @@
#include <string.h>
#include <stdio.h>
+#include <netinet/in.h>
+
+#include <osmocom/core/msgb.h>
#include <osmocom/sim/sim.h>
#include "sim_int.h"
+/* remove the SW from end of the message */
static int get_sw(struct msgb *resp)
{
int ret;
@@ -39,8 +43,7 @@ static int get_sw(struct msgb *resp)
if (!msgb_apdu_de(resp) || msgb_apdu_le(resp) < 2)
return -EIO;
- ret = resp->data[resp->len-2] << 8;
- ret |= resp->data[resp->len-1];
+ ret = msgb_get_u16(resp);
return ret;
}
diff --git a/utils/osmo-sim-test.c b/utils/osmo-sim-test.c
index f7dc48d8..482ca31e 100644
--- a/utils/osmo-sim-test.c
+++ b/utils/osmo-sim-test.c
@@ -164,7 +164,7 @@ static int dump_fcp_template_msg(struct msgb *msg)
struct tlv_parsed tp;
int rc;
- rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+ rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
if (rc < 0)
return rc;
@@ -223,7 +223,7 @@ static struct msgb *try_select_adf_usim(struct osim_chan_hdl *st)
int rc, i;
msg = select_file(st, 0x2f00);
- rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+ rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
if (rc < 0)
return NULL;
@@ -302,7 +302,7 @@ static int dump_file(struct osim_chan_hdl *chan, uint16_t fid)
goto out;
}
- rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-4, 0, 0);
+ rc = tlv_parse(&tp, &ts102221_fcp_tlv_def, msgb_apdu_de(msg)+2, msgb_apdu_le(msg)-2, 0, 0);
if (rc < 0) {
printf("Unable to parse FCP\n");
goto out;