<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/23895">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sim: Obtain card ATR when opening the card<br><br>Change-Id: I42e387535c40f371b06f384af0ca5dc1e42ed00e<br>---<br>M TODO-RELEASE<br>M include/osmocom/sim/sim.h<br>M src/sim/reader_pcsc.c<br>3 files changed, 35 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/95/23895/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index ed04a14..7ba9347 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -9,3 +9,4 @@</span><br><span> #library    what                    description / commit summary line</span><br><span> libosmovty _LAST_OSMOVTY_NODE      Raise _LAST_OSMOVTY_NODE by introducing some RESERVED*_NODE</span><br><span> libosmogsm      gsm0808_old_bss_to_new_bss_info ABI break (struct changes size), gsm0808_old_bss_to_new_bss_info_att_tlvdef symbol added</span><br><span style="color: hsl(120, 100%, 40%);">+libosmosim     osim_card_hdl           ABI + API breakage due to new struct members</span><br><span>diff --git a/include/osmocom/sim/sim.h b/include/osmocom/sim/sim.h</span><br><span>index 72e7904..16b9f1f 100644</span><br><span>--- a/include/osmocom/sim/sim.h</span><br><span>+++ b/include/osmocom/sim/sim.h</span><br><span>@@ -11,6 +11,13 @@</span><br><span> #define APDU_HDR_LEN      5</span><br><span> #define MAX_AID_LEN        16 /* Table 13.2 of TS 102 221 */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Maximum Answer-To-Reset (ATR) size in bytes</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @note defined in ISO/IEC 7816-3:2006(E) section 8.2.1 as 32, on top the initial character TS of section 8.1</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @remark technical there is no size limitation since Yi present in T0,TDi will indicate if more interface bytes are present, including TDi+i</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSIM_MAX_ATR_LEN 33</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! command-response pairs cases</span><br><span>  *</span><br><span>  * Enumeration used to identify the APDU structure based on command-response pair case , as specified in ISO/IEC 7816-3:2006(E) ยง12.1.</span><br><span>@@ -409,6 +416,10 @@</span><br><span> </span><br><span>       /*! list of applications found on card */</span><br><span>    struct llist_head apps;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /*! ATR (Answer To Reset) of the card */</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t atr[OSIM_MAX_ATR_LEN];</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int atr_len;</span><br><span> };</span><br><span> </span><br><span> struct osim_chan_hdl {</span><br><span>diff --git a/src/sim/reader_pcsc.c b/src/sim/reader_pcsc.c</span><br><span>index c37380a..7d424b8 100644</span><br><span>--- a/src/sim/reader_pcsc.c</span><br><span>+++ b/src/sim/reader_pcsc.c</span><br><span>@@ -56,6 +56,27 @@</span><br><span>      char *name;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int pcsc_get_atr(struct osim_card_hdl *card)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osim_reader_hdl *rh = card->reader;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct pcsc_reader_state *st = rh->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+   char pbReader[MAX_READERNAME];</span><br><span style="color: hsl(120, 100%, 40%);">+        DWORD dwReaderLen = sizeof(pbReader);</span><br><span style="color: hsl(120, 100%, 40%);">+ DWORD dwAtrLen = sizeof(card->atr);</span><br><span style="color: hsl(120, 100%, 40%);">+        DWORD dwState, dwProt;</span><br><span style="color: hsl(120, 100%, 40%);">+        long rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = SCardStatus(st->hCard, pbReader, &dwReaderLen, &dwState, &dwProt,</span><br><span style="color: hsl(120, 100%, 40%);">+                  card->atr, &dwAtrLen);</span><br><span style="color: hsl(120, 100%, 40%);">+        PCSC_ERROR(rc, "SCardStatus");</span><br><span style="color: hsl(120, 100%, 40%);">+      card->atr_len = dwAtrLen;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+end:</span><br><span style="color: hsl(120, 100%, 40%);">+     return -EIO;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct osim_reader_hdl *pcsc_reader_open(int num, const char *id, void *ctx)</span><br><span> {</span><br><span>        struct osim_reader_hdl *rh;</span><br><span>@@ -130,6 +151,8 @@</span><br><span>    chan->card = card;</span><br><span>        llist_add(&chan->list, &card->channels);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    pcsc_get_atr(card);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        return card;</span><br><span> </span><br><span> end:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/23895">change 23895</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/23895"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I42e387535c40f371b06f384af0ca5dc1e42ed00e </div>
<div style="display:none"> Gerrit-Change-Number: 23895 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>