Exemple #1
0
        public override bool Send(string data = "")
        {
            if (data == "")
            {
                return(false);
            }

            try
            {
                if (Status)
                {
                    // Begin sending the data to the remote device.
                    TCPClientStream.WriteString(data);
                }
                else
                {
                    Console.WriteLine("The TCP link is not connected.");
                }
                return(true);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("TCP Client Exception on Send: " + e.Message);
                Status = false; // setting the status to false
                return(false);
            }
        }
Exemple #2
0
        public static byte[] SendTransaction(TCPClientStream stream, byte[] txBytes)
        {
            try
            {
                byte[] rxBuffer = Receive(stream); //wait for ENQ
                if (rxBuffer[0] != 0x05)
                {
                    throw new TCPIPManagerException("Could not send Transaction: ENQ char not received");
                }

                Transmit(stream, txBytes);

                byte[] received = Receive(stream);

                SendACK(stream);

                return(received);
            }
            catch (Exception ex)
            {
                try
                {
                    SendNACK(stream);
                }
                catch { }
                throw ex;
            }
        }
Exemple #3
0
        public void Init(ICardInterfaceManger contactCardInterfaceManger, string contactDeviceId,
                         ICardInterfaceManger contactlessCardInterfaceManger, string contactlessDeviceId,
                         QRCodeMode qrCodeMode, string accountNumberInUse,
                         IConfigurationProvider configProvider, IOnlineApprover onlineContactEMVApprover,
                         TCPClientStream tcpClientStream, TransactionRequest tr = null)
        {
            qrCodeScanned = false;

            this.contactDeviceId                = contactDeviceId;
            this.contactlessDeviceId            = contactlessDeviceId;
            this.qrCodeMode                     = qrCodeMode;
            this.contactCardInterfaceManger     = contactCardInterfaceManger;
            this.contactlessCardInterfaceManger = contactlessCardInterfaceManger;
            this.configProvider                 = configProvider;
            this.onlineContactEMVApprover       = onlineContactEMVApprover;
            this.tcpClientStream                = tcpClientStream;
            this.accountNumberInUse             = accountNumberInUse;

            if (tr != null)
            {
                this.tr           = tr;
                totalAmount.Total = Convert.ToString(tr.GetAmountAuthorized_9F02());
                Start();
            }
            else
            {
                UpdateView(ViewState.Step1TransactDetails);
            }
        }
Exemple #4
0
 public static byte[] SendTransaction(TCPClientStream stream, byte[] txBytes)
 {
     try
     {
         Transmit(stream, txBytes);
         return(Receive(stream));
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Exemple #5
0
        private static void Transmit(TCPClientStream stream, byte[] txBytes)
        {
            short length = (short)(txBytes.Length);

            byte[] lengthBytes = new byte[] { (byte)(length / 256), (byte)(length % 256) };

            byte[] txBytesTCP = Formatting.ConcatArrays(lengthBytes, txBytes);

            Logger.Log("Sending: [" + Formatting.ConvertToInt16(lengthBytes) + "]" +
                       "[" + Formatting.ByteArrayToHexString(txBytes) + "]");

            stream.Write(txBytesTCP);
        }
Exemple #6
0
        private static byte[] Receive(TCPClientStream stream)
        {
            byte chrSTX = 0x02; // Start of Text
            byte chrETX = 0x03; // End of Text

            byte[] rxBuffer       = new Byte[4096];
            int    countBytesRead = stream.Read(rxBuffer);

            byte[] lengthBytesReceived = new byte[2];
            Array.Copy(rxBuffer, 0, lengthBytesReceived, 0, lengthBytesReceived.Length);

            int bytesInRxPacket = Formatting.ConvertToInt16(lengthBytesReceived);

            if (bytesInRxPacket + 2 != countBytesRead)
            {
                throw new TCPIPManagerException("Did not receive all expected bytes");
            }

            byte[] result = new byte[bytesInRxPacket];
            Array.Copy(rxBuffer, 2, result, 0, result.Length);

            bool hasSTX = false;
            bool hasETX = false;

            if (result.First() == chrSTX)
            {
                byte[] strippedSTX = new byte[result.Length - 1];
                Array.Copy(result, 1, strippedSTX, 0, strippedSTX.Length);
                result = strippedSTX;
                hasSTX = true;
            }
            int lastPos = Array.FindIndex(result, 0, (x) => x == chrETX);

            if (lastPos != -1)
            {
                int    lengthToCopy = result.Length - (result.Length - lastPos);
                byte[] strippedETX  = new byte[lengthToCopy];
                Array.Copy(result, 0, strippedETX, 0, strippedETX.Length);
                result = strippedETX;
                hasETX = true;
            }

            Logger.Log("Received:[" + countBytesRead + "]" +
                       (hasSTX == true? "[" + Formatting.ByteArrayToHexString(new byte[] { chrSTX }) + "]": "[No STX]") +
                       "[" + Formatting.ByteArrayToASCIIString(result) + "]" +
                       (hasETX == true ? "[" + Formatting.ByteArrayToHexString(new byte[] { chrETX }) + "]": "[No ETX]"));

            return(result);
        }
Exemple #7
0
        public EMVMain(ICardInterfaceManger cardInterfaceManger, IOnlineApprover onlineApprover, IConfigurationProvider configProvider, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            dlgPin.IsVisible         = false;
            this.cardInterfaceManger = cardInterfaceManger;
            this.onlineApprover      = onlineApprover;
            this.tcpClientStream     = tcpClientStream;
            this.configProvider      = configProvider;
            transactionVM            = new TransactionVM {
                Amount = 1000
            };
            gridMain.BindingContext         = transactionVM;
            cmbTransactionType.SelectedItem = transactionVM.TransactionTypes.First();
        }
        public CardAdminView(ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.contactCardInterfaceManger     = contactCardInterfaceManger;
            this.contactlessCardInterfaceManger = contactlessCardInterfaceManger;
            this.configProvider  = configProvider;
            this.onlineApprover  = onlineApprover;
            this.tcpClientStream = tcpClientStream;

            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;

            gridProgress.IsVisible   = false;
            viewCardList.ItemsSource = SessionSingleton.Account.Cards;

            UpdateView(CardAdminViewState.CardList);
        }
Exemple #9
0
        public POSView(ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.contactCardInterfaceManger     = contactCardInterfaceManger;
            this.contactlessCardInterfaceManger = contactlessCardInterfaceManger;
            this.configProvider  = configProvider;
            this.onlineApprover  = onlineApprover;
            this.tcpClientStream = tcpClientStream;

            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;

            UpdateView(POSViewState.POS);

            basketItems             = new ObservableCollection <POSTransactionLineItem>();
            totalAmount             = new TotalAmountViewModel();
            lblTotal.BindingContext = totalAmount;

            try
            {
                Task.Run(async() =>
                {
                    groups = await CacheProvider.Instance.GetInventoryGroups();
                    items  = await CacheProvider.Instance.GetinventoryItems();
                })
                .ContinueWith((x) =>
                {
                    UpdataItemNavigator();
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        if (lstBasketItems.ItemsSource == null)
                        {
                            lstBasketItems.ItemsSource = basketItems;
                        }
                        gridProgress.IsVisible = false;
                    });
                }, TaskContinuationOptions.OnlyOnRanToCompletion);
            }
            catch (Exception ex)
            {
                Task.Run(async() =>
                {
                    await App.Current.MainPage.DisplayAlert("Error", ex.Message, "OK");
                });
            }
        }
Exemple #10
0
        private static void Transmit(TCPClientStream stream, byte[] txBytes)
        {
            byte chrSTX = 0x02; // Start of Text
            byte chrETX = 0x03; // End of Text
            //byte[] LRC;

            short length = (short)(txBytes.Length + 2);

            byte[] lengthBytes = new byte[] { (byte)(length / 256), (byte)(length % 256) };

            byte[] txBytesTCP = Formatting.ConcatArrays(lengthBytes, new byte[] { chrSTX }, txBytes, new byte[] { chrETX });

            Logger.Log("Sending: [" + Formatting.ConvertToInt16(lengthBytes) + "]" +
                       "[" + Formatting.ByteArrayToHexString(new byte[] { chrSTX }) + "]" +
                       "[" + Formatting.ByteArrayToASCIIString(txBytes) + "]" +
                       "[" + Formatting.ByteArrayToHexString(new byte[] { chrETX }) + "]");

            stream.Write(txBytesTCP);
        }
        public EMVQRCodeView(ICardInterfaceManger contactCardInterfaceManger,
                             ICardInterfaceManger contactlessCardInterfaceManger,
                             IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.contactCardInterfaceManger     = contactCardInterfaceManger;
            this.contactlessCardInterfaceManger = contactlessCardInterfaceManger;
            this.configProvider  = configProvider;
            this.onlineApprover  = onlineApprover;
            this.tcpClientStream = tcpClientStream;

            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;

            emvTxCtl.Init(contactCardInterfaceManger, SessionSingleton.ContactDeviceId,
                          contactlessCardInterfaceManger, SessionSingleton.ContactlessDeviceId,
                          QRCodeMode.PresentAndPoll, "5906374433f04eb5b67d25c3e50487dc",
                          configProvider, onlineApprover, tcpClientStream);
        }
Exemple #12
0
        public HomeMasterDetailView(ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IOnlineApprover onlineApprover, IConfigurationProvider configProvider, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.contactlessCardInterfaceManger = contactlessCardInterfaceManger;
            this.contactCardInterfaceManger     = contactCardInterfaceManger;
            this.onlineApprover  = onlineApprover;
            this.configProvider  = configProvider;
            this.tcpClientStream = tcpClientStream;

            masterPage.ListViewTransact.ItemSelected += OnItemSelected;
            masterPage.ListViewOthers.ItemSelected   += OnItemSelected;

            //if (Device.RuntimePlatform == Device.UWP)
            //{
            MasterBehavior = MasterBehavior.Popover;
            //}

            (masterPage as HomeMasterView).SetWait(false);
        }
Exemple #13
0
        private static byte[] Receive(TCPClientStream stream)
        {
            byte[] rxBuffer       = new Byte[4096];
            int    countBytesRead = stream.Read(rxBuffer);

            byte[] lengthBytesReceived = new byte[2];
            Array.Copy(rxBuffer, 0, lengthBytesReceived, 0, lengthBytesReceived.Length);

            int bytesInRxPacket = Formatting.ConvertToInt16(lengthBytesReceived);

            if (bytesInRxPacket + 2 != countBytesRead)
            {
                throw new TCPIPManagerException("Did not receive all expected bytes");
            }

            byte[] result = new byte[bytesInRxPacket];
            Array.Copy(rxBuffer, 2, result, 0, result.Length);

            Logger.Log("Received:[" + bytesInRxPacket + "]" +
                       "[" + Formatting.ByteArrayToHexString(result) + "]");

            return(result);
        }
Exemple #14
0
        public TerminalMain(ICardInterfaceManger cardInterfaceManger, IOnlineApprover onlineApprover, IConfigurationProvider configProvider, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            Children.Add(new EMVMain(cardInterfaceManger, onlineApprover, configProvider, tcpClientStream));
            Children.Add(new DesFireMain(cardInterfaceManger));
        }
Exemple #15
0
        public EMVTx(ICardInterfaceManger contactCardInterfaceManger,
                     ICardInterfaceManger contactlessCardInterfaceManger,
                     IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();
            gridProgress.IsVisible = false;

            this.onlineApprover = onlineApprover;

            emvTxCtl.Init(contactCardInterfaceManger, SessionSingleton.ContactDeviceId,
                          contactlessCardInterfaceManger, SessionSingleton.ContactlessDeviceId,
                          QRCodeMode.ScanAndProcess, "",
                          configProvider, onlineApprover, tcpClientStream);

            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;
            UpdateView(ViewState.StepTxCtl);
        }
Exemple #16
0
        private static void SendACK(TCPClientStream stream)
        {
            byte chrACK = 0x06;

            Transmit(stream, new byte[] { chrACK });
        }
Exemple #17
0
        public TopUpView(ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.onlineApprover    = onlineApprover;
            gridProgress.IsVisible = false;

            emvTxCtl.Init(contactCardInterfaceManger, SessionSingleton.ContactDeviceId,
                          contactlessCardInterfaceManger, SessionSingleton.ContactlessDeviceId,
                          QRCodeMode.None, SessionSingleton.Account.AccountNumberId,
                          configProvider, onlineApprover, tcpClientStream);
            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;
            emvTxCtl.SetASkAmountInstruction("Enter the amount below that you wish to top up with.");
            emvTxCtl.SetTxStartLabel("Please Tap the Visa or MasterCard card you wish to make the TopUp payment with.");
            UpdateView(ViewState.StepTxCtl);
        }
Exemple #18
0
        public App(ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IOnlineApprover onlineApprover, IConfigurationProvider configProvider, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            MainPage = new HomeMasterDetailView(contactCardInterfaceManger, contactlessCardInterfaceManger, onlineApprover, configProvider, tcpClientStream);
        }
        public TransactView(FlowType flowType, ICardInterfaceManger contactCardInterfaceManger, ICardInterfaceManger contactlessCardInterfaceManger, IConfigurationProvider configProvider, IOnlineApprover onlineApprover, TCPClientStream tcpClientStream)
        {
            InitializeComponent();

            this.onlineApprover = onlineApprover;
            this.flowType       = flowType;

            QRCodeMode mode = QRCodeMode.None;

            switch (flowType)
            {
            case FlowType.SendMoneyFromCardToApp:
                mode = QRCodeMode.PresentAndPoll;
                emvTxCtl.SetHeaderInstruction("Send money from their card to your account");
                emvTxCtl.SetTxStartLabel("Send money from their card to your account");
                this.Title = "Receive Money";
                break;

            case FlowType.SendMoneyFromAppToCard:
                mode = QRCodeMode.ScanAndProcess;
                emvTxCtl.SetHeaderInstruction("Send money from your account to their card");
                emvTxCtl.SetTxStartLabel("Send money from your account to their card");
                this.Title = "Send Money";
                break;
            }

            emvTxCtl.Init(contactCardInterfaceManger, SessionSingleton.ContactDeviceId,
                          contactlessCardInterfaceManger, SessionSingleton.ContactlessDeviceId,
                          mode, SessionSingleton.Account.AccountNumberId,
                          configProvider, onlineApprover, tcpClientStream);

            emvTxCtl.TxCompleted += EmvTxCtl_TxCompleted;

            gridProgress.IsVisible = false;

            UpdateView(ViewState.StepTxCtl);
        }
Exemple #20
0
 public Win10CardProxy(string ip, int port)
 {
     tcpClientStream = new TCPClientStreamUWP();
     this.ip         = ip;
     this.port       = port;
 }