Exemplo n.º 1
0
        public SoftwareBreakpoint(IntPtr address, BreakpointHandler handler)
        {
            Contract.Requires(handler != null);

            Address = address;

            this.handler = handler;
        }
        public void RemoveBreakpoint(MethodBase method, int ilOffset)
        {
            Breakpoint b = new Breakpoint(method, ilOffset);

            if (Breakpoints.Contains(b))
            {
                Breakpoints.Remove(b);

                BreakpointHandler temp = BookmarkRemoved;
                if (temp != null)
                {
                    temp(method, ilOffset);
                }
            }
        }
        public void AddBreakpoint(MethodBase method, int ilOffset)
        {
            Breakpoint b = new Breakpoint(method, ilOffset);

            if (!Breakpoints.Contains(b))
            {
                Breakpoints.Add(b);

                BreakpointHandler temp = BookmarkAdded;
                if (temp != null)
                {
                    temp(method, ilOffset);
                }
            }
        }
Exemplo n.º 4
0
        public HardwareBreakpoint(IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, BreakpointHandler handler)
        {
            Contract.Requires(handler != null);

            if (register == HardwareBreakpointRegister.InvalidRegister)
            {
                throw new InvalidOperationException();
            }

            Address  = address;
            Register = register;
            Trigger  = trigger;
            Size     = size;

            this.handler = handler;
        }
        public async Task SendAsync_ShouldRetryWithNewToken_WhenRefreshedWhileRequesting()
        {
            // Arrange
            var breakpointHandler = new BreakpointHandler {
                InnerHandler = _innerHandler
            };
            var requestBreakpoint     = breakpointHandler.Breakpoint;
            var breakpointTokenClient = new BreakpointTokenClient(_tokenClient);
            var tokenClientBreakpoint = breakpointTokenClient.Breakpoint;
            var handler = new UnauthorizedResponseHandler(breakpointTokenClient, _tokenStorage, _userStorage)
            {
                InnerHandler = breakpointHandler
            };
            var client = new HttpClient(handler)
            {
                BaseAddress = _baseAddress
            };

            _tokenClient.RefreshTokenAsync(Arg.Any <CancellationToken>())
            .Returns(ApiResponseResult <RefreshTokenResponse> .Ok(
                         new RefreshTokenResponse {
                AccessToken = "New access token", RefreshToken = "New refresh token"
            }));

            var response = new HttpResponseMessage(HttpStatusCode.OK);

            // Act
            var task1 = Task.CompletedTask;
            var task2 = Task.CompletedTask;

            try
            {
                // Sending first request and pausing it
                var request1 = new HttpRequestMessage(HttpMethod.Get, "/vpn");
                task1 = client.SendAsync(request1);
                var request1Hit = await requestBreakpoint.WaitForHit().TimeoutAfter(TestTimeout);

                // Sending second request and pausing it
                var request2 = new HttpRequestMessage(HttpMethod.Get, "/profiles");
                task2 = client.SendAsync(request2);
                var request2Hit = await requestBreakpoint.WaitForHit().TimeoutAfter(TestTimeout);

                // Continue first request and get Unauthorized
                _innerHandler.Expect(HttpMethod.Get, "https://api.protonvpn.ch/vpn")
                .Respond(HttpStatusCode.Unauthorized);
                request1Hit.Continue();

                // First request initiated token refresh
                await tokenClientBreakpoint.WaitForHitAndContinue().TimeoutAfter(TestTimeout);

                // First request retried with new tokens
                request1Hit = await requestBreakpoint.WaitForHit().TimeoutAfter(TestTimeout);

                _innerHandler.Expect(HttpMethod.Get, "https://api.protonvpn.ch/vpn")
                .WithHeaders("Authorization", "Bearer New access token")
                .Respond(req => response);
                request1Hit.Continue();
                await task1.TimeoutAfter(TestTimeout);

                // Second request continues and gets Unauthorized
                _innerHandler.Expect(HttpMethod.Get, "https://api.protonvpn.ch/profiles")
                .Respond(HttpStatusCode.Unauthorized);
                request2Hit.Continue();

                // Second request retried with new access token
                request2Hit = await requestBreakpoint.WaitForHit().TimeoutAfter(TestTimeout);

                _innerHandler.Expect(HttpMethod.Get, "https://api.protonvpn.ch/profiles")
                .WithHeaders("Authorization", "Bearer New access token")
                .Respond(req => response);
                request2Hit.Continue();
            }
            finally
            {
                await task1.TimeoutAfter(TestTimeout);

                await task2.TimeoutAfter(TestTimeout);
            }

            // Assert
            await _tokenClient.Received(1).RefreshTokenAsync(Arg.Any <CancellationToken>());

            _innerHandler.VerifyNoOutstandingExpectation();
        }
Exemplo n.º 6
0
 void BreakpointWrapper(object sender, EventArgs e)
 {
     BreakpointHandler?.Invoke(this, e);
 }
Exemplo n.º 7
0
        public void FindCodeByBreakpoint(IntPtr address, int size, HardwareBreakpointTrigger trigger)
        {
            var register = GetUsableDebugRegister();

            if (register == HardwareBreakpointRegister.InvalidRegister)
            {
                throw new NoHardwareBreakpointAvailableException();
            }

            var breakpointList = SplitBreakpoint(address, size);

            var fcf = new FoundCodeForm(process, breakpointList[0].Address, trigger);

            var localBreakpoints = new List <IBreakpoint>();

            fcf.Stop += (sender, e) =>
            {
                lock (localBreakpoints)
                {
                    foreach (var bp in localBreakpoints)
                    {
                        RemoveBreakpoint(bp);
                    }

                    localBreakpoints.Clear();
                }
            };

            BreakpointHandler handler = delegate(IBreakpoint bp, ref DebugEvent evt)
            {
                fcf.AddRecord(evt.ExceptionInfo);
            };

            var breakpoint = new HardwareBreakpoint(breakpointList[0].Address, register, trigger, (HardwareBreakpointSize)breakpointList[0].Size, handler);

            try
            {
                AddBreakpoint(breakpoint);
                localBreakpoints.Add(breakpoint);

                fcf.Show();
            }
            catch
            {
                fcf.Dispose();

                throw;
            }

            if (breakpointList.Count > 1)
            {
                foreach (var split in breakpointList.Skip(1))
                {
                    register = GetUsableDebugRegister();
                    if (register == HardwareBreakpointRegister.InvalidRegister)
                    {
                        break;
                    }

                    breakpoint = new HardwareBreakpoint(split.Address, register, trigger, (HardwareBreakpointSize)split.Size, handler);
                    AddBreakpoint(breakpoint);
                    localBreakpoints.Add(breakpoint);
                }
            }
        }