Example #1
0
        private void btnPause_Click(object sender, EventArgs e)
        {
            if (activeReader != null)
            {
                btnPause.Enabled = false;

                Logger.Trace("Stopping...");
                activeReader.StopWaitCard();
                activeReader = null;

                ShowResult("Press the \"Play\" button when ready.", null, false);

                EnableControls(true);
                btnPlay.Enabled = CanPlay();
            }
        }
        int Run(string[] args)
        {
            ConsoleTitle(ProgName);

            if (!ParseArgs(args))
            {
                Console.WriteLine("Try " + ProgName + " --help");
                return(1);
            }

            if (Action == ActionE.Help)
            {
                Usage();
                return(0);
            }

            if (!AppleVasLicense.AutoLoad())
            {
                Logger.Info("No license file");
            }

            if (Action == ActionE.Version)
            {
                ConsoleColor(ConsoleColorScheme.Info);
                Console.WriteLine("SpringCard.AppleVAS library version: {0}", SpringCard.AppleVas.Library.ModuleInfo.LongVersion);
                ConsoleColor();
                return(0);
            }

            if (Action == ActionE.SelfTest)
            {
                if (!AppleVasTerminal.SelfTest())
                {
                    ConsoleColor(ConsoleColorScheme.Error);
                    Console.WriteLine("SpringCard.AppleVAS self-test failed");
                    ConsoleColor();
                    return(1);
                }
                else
                {
                    ConsoleColor(ConsoleColorScheme.Success);
                    Console.WriteLine("SpringCard.AppleVAS self-test OK");
                    ConsoleColor();
                    return(0);
                }
            }

            if (Action == ActionE.KeyId)
            {
                uint keyId = AppleVasCrypto.ECC.ComputeKeyIdFromPem(KeyInputFile);
                Console.WriteLine("{0:X08}", keyId);
                return(0);
            }

            Logger.Debug("Loading the list of PC/SC readers");

            string[] ReaderNames = (new SCardReaderList()).Readers;

            if (Action == ActionE.ListReaders)
            {
                Console.WriteLine(string.Format("{0} PC/SC Reader(s) found", ReaderNames.Length));
                for (int i = 0; i < ReaderNames.Length; i++)
                {
                    Console.WriteLine(string.Format("{0}: {1}", i, ReaderNames[i]));
                }
                return(0);
            }

            if (!File.Exists(ConfigFile))
            {
                ConsoleColor(ConsoleColorScheme.Error);
                Console.WriteLine("File {0} not found", ConfigFile);
                ConsoleColor();
                return(1);
            }

            try
            {
                terminalConfig = AppleVasTerminalConfig.LoadFromJsonFile(ConfigFile);
            }
            catch (Exception e)
            {
                ConsoleColor(ConsoleColorScheme.Error);
                Console.WriteLine("Failed to load the configuration");
                Console.WriteLine("Error: {0}", e.Message);
                ConsoleColor();
                return(1);
            }

            ConsoleColor(ConsoleColorScheme.Info);
            Console.WriteLine(terminalConfig.Description);
            ConsoleColor();

            if (ReaderName == null)
            {
                if (ReaderIndex < 0)
                {
                    ReaderIndex = 0;
                }

                Logger.Debug("Selecting the PC/SC reader at index {0}", ReaderIndex);

                if ((ReaderIndex >= ReaderNames.Length))
                {
                    ConsoleColor(ConsoleColorScheme.Error);
                    Console.WriteLine("No PC/SC Reader at index {0}", ReaderIndex);
                    Console.WriteLine("Use " + ProgName + " --list-readers to show the available reader(s)");
                    ConsoleColor();
                    return(1);
                }

                ReaderName = ReaderNames[ReaderIndex];
            }

            Logger.Debug("Using PC/SC reader {0}", ReaderName);

            if (Stress)
            {
                timerFieldOff           = new System.Timers.Timer(1000 * FieldOffAfter);
                timerFieldOff.Elapsed  += RfFieldOff;
                timerFieldOff.AutoReset = true;
                timerFieldOff.Enabled   = false;
                timerFieldOn            = new System.Timers.Timer(1000 * FieldOffLength);
                timerFieldOn.Elapsed   += RfFieldOn;
                timerFieldOn.AutoReset  = true;
                timerFieldOn.Enabled    = false;
            }

            SCardChannel directChannel = new SCardChannel(ReaderName);

            if (directChannel.ConnectDirect())
            {
                directChannel.Control(new byte[] { 0x58, 0x23, 0x00 });
                directChannel.DisconnectLeave();
            }

            terminalReader = new SCardReader(ReaderName);
            terminalReader.StartWaitCard(new SCardReader.CardConnectedCallback(CardConnectedCallback), new SCardReader.CardRemovedCallback(CardRemovedCallback));

            Console.WriteLine("Press any key to exit.");

            Console.ReadKey(true);

            Console.WriteLine("Exit required...");
            terminalReader.StopWaitCard();
            Console.WriteLine("Bye.");
            return(0);
        }