예제 #1
0
        public override IOperationAction <T, U, V> CreateInvalidResponse(IOperationAction <T, U, V> action)
        {
            // get model errors - ModelDTO.Errors
            var errors = new List <IError>();
            // Add errors
            IInvalidResponse <IError> invalidResponse = new InvalidResponse <IError>(errors);

            // create new action with new invalid response
            return(AddInvalidResponseToAction(action, invalidResponse));;
        }
예제 #2
0
        public byte[] HandleRequest(byte[] requestBytes)
        {
            object request = DiffPrivRequest.ParseRequest(requestBytes);

            if (request is Common.GetQuoteRequest)
            {
                GetQuoteResponse getQuoteResponse = new GetQuoteResponse(0, key_pair);
                return(getQuoteResponse.Encode());
            }
            if (request is InitializeDBRequest)
            {
                InitializeDBRequest r = (InitializeDBRequest)request;
                if (rows_received != 0)
                {
                    Console.Error.WriteLine("Received request to initialize DB after receiving rows");
                    return(DiffPrivSrvResponse.EncodeInitializeDBResponse(18));
                }

                if (r.budget_num < r.budget_den)
                {
                    Console.Error.WriteLine("Received request to initialize DB with budget < 1");
                    return(DiffPrivSrvResponse.EncodeInitializeDBResponse(16));
                }

                budget = new BigRational(r.budget_num, r.budget_den);
                rows.Clear();
                return(DiffPrivSrvResponse.EncodeInitializeDBResponse(0));
            }
            if (request is AddRowRequest)
            {
                byte[] ciphertext = ((AddRowRequest)request).ciphertext;
                byte[] plaintext;
                try
                {
                    plaintext = key_pair.Decrypt(ciphertext, false);
                }
                catch
                {
                    Console.Error.WriteLine("Received undecryptable add-row request");
                    return(DiffPrivSrvResponse.EncodeAddRowResponse());
                }

                HandleAddRowRequest(plaintext);
                return(DiffPrivSrvResponse.EncodeAddRowResponse());
            }
            if (request is QueryRequest)
            {
                QueryRequest r = (QueryRequest)request;
                return(HandleQueryRequest(r));
            }
            return(InvalidResponse.Encode());
        }
예제 #3
0
        public string GetResponse(string receivedMessage, Hub hub)
        {
            InitstrategyList(hub, receivedMessage);


            if (ResponseCollection.ContainsKey(receivedMessage))
            {
                var call = ResponseCollection[receivedMessage];
                return(call.GetReponse());
            }
            else
            {
                var exceptionResponse = new InvalidResponse(receivedMessage, hub);
                return(exceptionResponse.GetReponse());
            }
        }
예제 #4
0
        private void Boxes_SelectedIndexChanged(object sender, EventArgs e)
        {
            // make sure something is selected
            if (_availresponses.SelectedIndex == -1)
            {
                return;
            }
            // get selected response
            string resname = (string)_availresponses.SelectedItem;
            // load it into working response
            Response tmp = new InvalidResponse();

            try
            {
                tmp = ResponseLoader.FromDLL(resname, Properties.Settings.Default.boxdll);
            }
            catch (Exception ex)
            {
                // log it
                bigexceptiondump(ex);
                // unselect response
                _availresponses.SelectedIndex = -1;
                return;
            }
            // add it
            int idx = addresponse(tmp);

            // make sure it worked
            if (idx == -1)
            {
                return;
            }
            // save the dll that contains the class for use with skins
            string dll = string.Empty;

            // if we don't have this class, add it
            if (!_class2dll.TryGetValue(resname, out dll))
            {
                _class2dll.Add(resname, Properties.Settings.Default.boxdll);
            }
            else // otherwise replace current dll as providing this class
            {
                _class2dll[resname] = Properties.Settings.Default.boxdll;
            }
            // unselect response
            _availresponses.SelectedIndex = -1;
        }
예제 #5
0
        public async Task <Response <List <Item> > > GetAllCountries()
        {
            var ItemList        = new List <Item>();
            var countries       = dbContexts.Countries.ToList();
            var invalidResponse = new InvalidResponse();

            foreach (var country in countries)
            {
                var uri = $"http://api.worldbank.org/v2/country/{country.IsoCode}?format=json";
                using (HttpResponseMessage response = await ApiHelper.client.GetAsync(uri))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        try
                        {
                            var CountriesList = await response.Content.ReadAsAsync <List <object> >();

                            if (CountriesList.Count == 1)
                            {
                                invalidResponse = JsonConvert.DeserializeObject <InvalidResponse>(CountriesList[0].ToString().Substring(0));
                            }

                            var         PagesDetails            = JsonConvert.DeserializeObject <PagesDetails>(CountriesList[0].ToString().Substring(0));
                            List <Item> Items                   = JsonConvert.DeserializeObject <List <Item> >(CountriesList[1].ToString().Substring(0));
                            Items.FirstOrDefault().PagesDetails = PagesDetails;
                            ItemList.Add(Items.FirstOrDefault());
                        }
                        catch (Exception)
                        {
                            return(new Response <List <Item> >()
                            {
                                Message = $"{country.IsoCode.ToUpper()} {invalidResponse.Message.Select(c=>c.Value.ToString()).FirstOrDefault()}",
                                Successful = false
                            });
                        }
                    }
                }
            }
            return(new Response <List <Item> >()
            {
                Message = "Sucessfully retieved countries",
                Model = ItemList,
                Successful = true
            });
        }
예제 #6
0
        public byte[] HandleRequest(byte[] requestBytes)
        {
            object request = NotaryRequest.ParseRequest(requestBytes);

            if (request is Common.GetQuoteRequest)
            {
                GetQuoteResponse getQuoteResponse = new GetQuoteResponse(0, key_pair);
                return(getQuoteResponse.Encode());
            }
            if (request is AdvanceCounterRequest)
            {
                AdvanceCounterRequest r = (AdvanceCounterRequest)request;
                counter = counter + 1;
                byte[] header = new byte[1];
                header[0] = 34;
                byte[] new_counter_value_encoding = CommonRoutines.EncodeMPBigInteger(counter);
                byte[] notary_statement           = CommonRoutines.CombineByteArrays(header, new_counter_value_encoding, r.message);
                byte[] notary_attestation         = key_pair.SignData(notary_statement, CryptoConfig.MapNameToOID("SHA256"));
                return(NotarySrvResponse.EncodeAdvanceCounterResponse(0, notary_statement, notary_attestation));
            }
            return(InvalidResponse.Encode());
        }
예제 #7
0
        void remresp(object sender, EventArgs e)
        {
            // mark UI entry for removal
            List <int> remdidx = new List <int>();

            // process each selected response
            foreach (int dispidx in _resnames.SelectedIndices)
            {
                // make sure we're still trading it
                if ((dispidx < 0) || (dispidx > _disp2real.Count))
                {
                    continue;
                }
                // get actual index
                int selbox = _disp2real[dispidx];
                // get name
                string name = _reslist[selbox].FullName;
                // remove the response
                _reslist[selbox] = new InvalidResponse();
                // clear it's symbols
                _rsym[selbox] = string.Empty;
                // mark it's UI element for removal
                remdidx.Add(dispidx);
                // notify user
                debug("removed #" + dispidx + ": " + name + " id:" + selbox);
            }
            // remove response from screen
            for (int i = remdidx.Count - 1; i >= 0; i--)
            {
                // remove it
                _resnames.Items.RemoveAt(remdidx[i]);
                // remove name map
                _disp2real.RemoveAt(remdidx[i]);
            }

            // update everything
            IndexBaskets();
        }
예제 #8
0
        public byte[] HandleRequest(byte[] requestBytes)
        {
            object request = TrIncRequest.ParseRequest(requestBytes);

            if (request is Common.GetQuoteRequest)
            {
                GetQuoteResponse getQuoteResponse = new GetQuoteResponse(0, key_pair);
                return(getQuoteResponse.Encode());
            }
            if (request is CreateCounterRequest)
            {
                CreateCounterRequest     r          = (CreateCounterRequest)request;
                RSACryptoServiceProvider public_key = CommonRoutines.DecodePublicKey(r.public_key);
                if (public_key == null)
                {
                    return(TrIncSrvResponse.EncodeCreateCounterResponse(3, 0));
                }
                TrIncCounter counter = new TrIncCounter(public_key);
                counters.Add(counter);
                UInt32 counter_index = (UInt32)(counters.Count - 1);
                return(TrIncSrvResponse.EncodeCreateCounterResponse(0, counter_index));
            }
            if (request is AdvanceCounterRequest)
            {
                AdvanceCounterRequest r = (AdvanceCounterRequest)request;
                if (r.counter_index < 0 || r.counter_index >= counters.Count)
                {
                    Console.Error.WriteLine("Received request for invalid counter index {0}", r.counter_index);
                    return(TrIncSrvResponse.EncodeAdvanceCounterResponse(1, new byte[0], new byte[0]));
                }

                TrIncCounter counter = counters[(int)r.counter_index];
                byte[]       req     = CommonRoutines.CombineByteArrays(r.new_counter_value, r.message);
                if (!counter.PublicKey.VerifyData(req, CryptoConfig.MapNameToOID("SHA256"), r.request_attestation))
                {
                    Console.Error.WriteLine("Received invalid request attestation");
                    return(TrIncSrvResponse.EncodeAdvanceCounterResponse(5, new byte[0], new byte[0]));
                }

                int        offset            = 0;
                BigInteger new_counter_value = CommonRoutines.DecodeMPBigInteger(r.new_counter_value, ref offset);
                if (new_counter_value < 0 || offset != r.new_counter_value.Length)
                {
                    Console.Error.WriteLine("Received invalid new counter value encoding");
                    return(TrIncSrvResponse.EncodeAdvanceCounterResponse(6, new byte[0], new byte[0]));
                }

                if (new_counter_value < counter.Value)
                {
                    Console.Error.WriteLine("New counter value requested {0} is smaller than current counter value {1}", new_counter_value, counter.Value);
                    return(TrIncSrvResponse.EncodeAdvanceCounterResponse(7, new byte[0], new byte[0]));
                }

                BigInteger old_counter_value = counter.Value;
                counter.Value = new_counter_value;

                byte[] header = new byte[1];
                header[0] = 34;
                byte[] counter_index_encoding     = CommonRoutines.EncodeBEWord(r.counter_index);
                byte[] old_counter_value_encoding = CommonRoutines.EncodeMPBigInteger(old_counter_value);
                byte[] new_counter_value_encoding = CommonRoutines.EncodeMPBigInteger(new_counter_value);
                byte[] trinc_statement            = CommonRoutines.CombineByteArrays(header, counter_index_encoding, old_counter_value_encoding, new_counter_value_encoding, r.message);
                byte[] trinc_attestation          = key_pair.SignData(trinc_statement, CryptoConfig.MapNameToOID("SHA256"));
                return(TrIncSrvResponse.EncodeAdvanceCounterResponse(0, trinc_statement, trinc_attestation));
            }
            return(InvalidResponse.Encode());
        }
예제 #9
0
        public void ProcessMessage(Stream stream)
        {
            var headerPart1 = stream.ReadByte();

            if (headerPart1 != 0xFF)
            {
                _logger.WriteLine($"Expected 0xFF header byte 1, recieved '{headerPart1}'");
                return;
            }
            var headerPart2 = stream.ReadByte();

            if (headerPart1 != 0xFA)
            {
                _logger.WriteLine($"Expected 0xFA header byte 2, recieved '{headerPart1}'");
                return;
            }

            var messageId = stream.ReadByte();

            switch (messageId)
            {
            case MessageIds.MESSAGE_INVALID:
            {
                var data = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_INVALID: data={data}");
                InvalidResponse?.Invoke(this, EventArgs.Empty);
            }
            break;

            case MessageIds.MESSAGE_ACKNOWLEDGED:
            {
                var data = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_ACKNOWLEDGED: data={data}");
                AcknowledgedResponse?.Invoke(this, EventArgs.Empty);
            }
            break;

            case MessageIds.MESSAGE_BUTTON_DOWN:
            {
                var column = stream.ReadByte();
                var row    = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_BUTTON_DOWN: column={column},row={row}");
                ButtonDown?.Invoke(this, new ButtonEventArgs(row, column));
            }
            break;

            case MessageIds.MESSAGE_BUTTON_UP:
            {
                var column = stream.ReadByte();
                var row    = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_BUTTON_UP: column={column},row={row}");
                ButtonUp?.Invoke(this, new ButtonEventArgs(row, column));
            }
            break;

            case MessageIds.MESSAGE_TOGGLE_STATE:
            {
                var index = stream.ReadByte();
                var state = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_TOGGLE_STATE: index={index},state={state}");
                ToggleStateChanged?.Invoke(this, new ToggleStateChangeEventArgs(index, state == 1));
            }
            break;

            case MessageIds.MESSAGE_LED_BRIGHTNESS:
            {
                var brightness = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_LED_BRIGHTNESS: brightness={brightness}");
                LEDBrightness?.Invoke(this, new LEDBrightnessEventArgs(brightness));
            }
            break;

            case MessageIds.MESSAGE_VERSION:
            {
                var version = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_VERSION: version={version}");
                VersionResponse?.Invoke(this, new VersionEventArgs(version));
            }
            break;

            case MessageIds.MESSAGE_HEARTBEAT:
            {
                var value = stream.ReadByte();
                _logger.WriteLine($"MESSAGE_HEARTBEAT: value={value}");
                HeartbeatResponse?.Invoke(this, new HeartbeatEventArgs(value));
            }
            break;

            default:
            {
                _logger.WriteLine($"Unexpected message id '{messageId}'");
                throw new ArgumentOutOfRangeException(nameof(messageId), "Unexpected message id");
            }
            }
        }