001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.io.j2me.apdu;
028:
029: /**
030: * This class represents a slot for APDU connection.
031: */
032: public class Slot {
033:
034: /** Size of respBuffer. */
035: public static final int respBufferSize = 515;
036:
037: /** Slot number. */
038: int slot;
039:
040: /** Is SIM present in this slot?. */
041: boolean SIMPresent;
042:
043: /**
044: * Internal field for native exchangeAPDU() method.
045: * Keeps current position of received data in a response buffer.
046: */
047: private int received;
048:
049: /**
050: * Internal field for native exchangeAPDU() method. Keeps internal locking
051: * status.
052: */
053: private boolean locked;
054:
055: /**
056: * Since at any time once channel always has to be open with the card
057: * and that channel is generally the basic channel. If the basic
058: * channel is not in use, the APDU manager can select the next
059: * application on that channel.
060: * This variable shows if basic channel is in use currently or not.
061: */
062: boolean basicChannelInUse;
063:
064: /**
065: * This variable shows if the card currently powered or not.
066: */
067: boolean powered;
068:
069: /** Internal buffer for response data. */
070: byte[] respBuffer;
071:
072: /** APDU for logical channel allocation. */
073: byte[] getChannelAPDU;
074:
075: /** APDU for closing a logical channel. */
076: byte[] closeChannelAPDU;
077:
078: /** APDU for the GET RESPONSE command. */
079: byte[] getResponseAPDU;
080:
081: /** An isAlive command APDU. */
082: byte[] isAliveAPDU;
083:
084: /** Answer-To-Reset from last reset command. */
085: byte[] atr;
086:
087: /** File Control Information (FCI) from last selection command. */
088: byte[] FCI;
089:
090: /**
091: * Unique identifier of card session (period of time between card
092: * power up and powerdown).This value is increased after any reset command.
093: */
094: int cardSessionId;
095:
096: /**
097: * Creates a new slot with specified parameters.
098: * @param slot slot number
099: */
100: Slot(int slot) {
101:
102: this .slot = slot;
103: this .cardSessionId = 1;
104: this .locked = false;
105: this .powered = false;
106: this .SIMPresent = false;
107: this .basicChannelInUse = false;
108: this .respBuffer = new byte[respBufferSize];
109: this .atr = null;
110: this .FCI = null;
111:
112: this .getChannelAPDU = new byte[] { 0, 0x70, 0, 0, 1 };
113: this .closeChannelAPDU = new byte[] { 0, 0x70, (byte) 0x80, 0 };
114: this .getResponseAPDU = new byte[] { 0, (byte) 0xC0, 0, 0, 0 };
115: this .isAliveAPDU = new byte[] { 0, 0x70, (byte) 0x80, 0 };
116:
117: }
118: }
|