package sega.a7; import javacard.framework.Util; public class CommandServer { private Command m_ee_noCommand = null; private Command[] m_ee_list = new Command[4]; private short m_ee_listCount = 0; public void setNoCommand(Command cmdClass) { this.m_ee_noCommand = cmdClass; } public void attachCommand(Command cmdClass) { if (this.m_ee_listCount >= this.m_ee_list.length) { Command[] ee_tmpCommand = new Command[this.m_ee_list.length * 2]; for (short ii = 0; ii < this.m_ee_list.length; ii++) ee_tmpCommand[ii] = this.m_ee_list[ii]; this.m_ee_list = ee_tmpCommand; } this.m_ee_list[this.m_ee_listCount++] = cmdClass; } public short findCommand(short cmd) { for (short ramD_ii = 0; ramD_ii < this.m_ee_listCount; ramD_ii++) { if (this.m_ee_list[ramD_ii].getCmd_ee() == cmd) return ramD_ii; } return -1; } public boolean select() { boolean ramD_bRet = true; for (short ramD_ii = 0; ramD_ii < this.m_ee_listCount; ramD_ii++) { if (!this.m_ee_list[ramD_ii].select()) ramD_bRet = false; } return ramD_bRet; } public short execute(byte[] data, short dataOffset, short dataLength, byte[] dst, short dstOffset, short dstLength) { short ramD_cmd = -1; if (6 <= dataLength) ramD_cmd = Util.getShort(data, (short) (dataOffset + AppConfig.A7_COMMAND_OFFSET)); short damD_list = findCommand(ramD_cmd); if (damD_list >= 0) return this.m_ee_list[damD_list].execute(data, dataOffset, dataLength, dst, dstOffset, dstLength); if (this.m_ee_noCommand == null) return -1; return this.m_ee_noCommand.execute(data, ramD_cmd, dataLength, dst, dstOffset, dstLength); } }