Exemplo n.º 1
0
        public void ThrowsAnExceptionWhenTheCompletionSourceIsNotCreated()
        {
            var api               = new Mock <IRasApi32>();
            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns((ITaskCompletionSource <RasConnection>)null);

            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();
            var callbackHandler           = new Mock <IRasDialCallbackHandler>();

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            Assert.ThrowsAsync <InvalidOperationException>(() => target.DialAsync(context));
        }
Exemplo n.º 2
0
        public RASDIALEXTENSIONS Build(RasDialContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var rasDialExtensions = structFactory.Create <RASDIALEXTENSIONS>();

            RasDialerOptions options;

            if ((options = context.Options) != null)
            {
                if (options.Owner != null)
                {
                    rasDialExtensions.hwndParent = options.Owner.Handle;
                }

                rasDialExtensions.dwfOptions = BuildOptions();
            }

            if (getEapUserData.TryUnsafeGetEapUserData(IntPtr.Zero, context.EntryName, context.PhoneBookPath, out var eapInfo))
            {
                rasDialExtensions.RasEapInfo = eapInfo;
            }

            return(rasDialExtensions);
        }
Exemplo n.º 3
0
        public async Task DialTheConnection()
        {
            var handle         = new IntPtr(1);
            var phoneBookPath  = @"C:\Test.pbk";
            var entryName      = "Entry";
            var userName       = "******";
            var password       = "******";
            var interfaceIndex = 1;

            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, phoneBookPath, ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                 (ref RASDIALEXTENSIONS rasDialExtensions, string lpszPhoneBook, ref RASDIALPARAMS rasDialParams, Ras.NotifierType notifierType, RasDialFunc2 o5, out IntPtr o6) =>
            {
                Assert.AreEqual(phoneBookPath, lpszPhoneBook);
                o6 = handle;

                return(SUCCESS);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = phoneBookPath,
                EntryName     = entryName,
                Credentials   = new NetworkCredential(userName, password),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = interfaceIndex
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);
            var result = await target.DialAsync(context);

            Assert.AreSame(connection.Object, result);
            Assert.IsTrue(target.IsBusy);
            callbackHandler.Verify(o => o.Initialize(completionSource.Object, It.IsAny <Action <StateChangedEventArgs> >(), It.IsAny <Action>(), It.IsAny <CancellationToken>()), Times.Once);
            callbackHandler.Verify(o => o.SetHandle(handle), Times.Once);
        }
Exemplo n.º 4
0
        private void BeginDial(RasDialContext context)
        {
            try
            {
                SetBusy();

                var rasDialExtensions = ConvertToRasDialExtensions(context);
                var rasDialParams     = ConvertToRasDialParams(context);

                var handle = IntPtr.Zero;

                try
                {
                    var ret = api.RasDial(ref rasDialExtensions, context.PhoneBookPath, ref rasDialParams, NotifierType.RasDialFunc2, callback, out handle);
                    if (ret != SUCCESS)
                    {
                        throw exceptionPolicy.Create(ret);
                    }
                }
                finally
                {
                    context.Handle = handle;
                }

                callbackHandler.SetHandle(context.Handle);
            }
            catch (Exception)
            {
                HangUpIfNecessary(context);
                SetNotBusy();

                throw;
            }
        }
Exemplo n.º 5
0
        public void ThrowsAnExceptionWhenNonSuccessIsReturnedFromWin32()
        {
            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk",
                                     ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(),
                                     out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                              (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5,
                                                                               out IntPtr o6) =>
            {
                o6 = IntPtr.Zero;

                return(ERROR_INVALID_PARAMETER);
            }));

            exceptionPolicy.Setup(o => o.Create(ERROR_INVALID_PARAMETER)).Returns(new TestException());

            var connection       = new Mock <RasConnection>();
            var completionSource = new TaskCompletionSource <RasConnection>();

            completionSource.SetResult(connection.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            Assert.ThrowsAsync <TestException>(() => target.DialAsync(context));
        }
Exemplo n.º 6
0
        public void BuildsTheStructureWithTheStoredCredentialsWithNullCredentials()
        {
            var entryName     = "Test";
            var phoneBookPath = @"C:\Test.pbk";

            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasGetEntryDialParams(phoneBookPath, ref It.Ref <RASDIALPARAMS> .IsAny, out It.Ref <bool> .IsAny)).Returns(new RasGetEntryDialParamsCallback(
                                                                                                                                            (string o1, ref RASDIALPARAMS o2, out bool o3) =>
            {
                o2.szUserName = "******";
                o2.szPassword = "******";
                o2.szDomain   = "Domain";

                o3 = true;
                return(SUCCESS);
            }));

            var structFactory   = new Mock <IStructFactory>();
            var exceptionPolicy = new Mock <IExceptionPolicy>();

            var context = new RasDialContext
            {
                EntryName     = entryName,
                PhoneBookPath = phoneBookPath,
                Credentials   = null
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual("User", result.szUserName);
            Assert.AreEqual("Password", result.szPassword);
            Assert.AreEqual("Domain", result.szDomain);
        }
Exemplo n.º 7
0
        public void OverwritesTheStoredCredentialsWhenCredentialsAreSupplied()
        {
            var entryName     = "Test";
            var phoneBookPath = @"C:\Test.pbk";

            api.Setup(o => o.RasGetEntryDialParams(phoneBookPath, ref It.Ref <RASDIALPARAMS> .IsAny, out It.Ref <bool> .IsAny)).Returns(new RasGetEntryDialParamsCallback(
                                                                                                                                            (string o1, ref RASDIALPARAMS o2, out bool o3) =>
            {
                o2.szUserName = "******";
                o2.szPassword = "******";
                o2.szDomain   = "Domain1";

                o3 = true;
                return(SUCCESS);
            }));

            var context = new RasDialContext
            {
                EntryName     = entryName,
                PhoneBookPath = phoneBookPath,
                Credentials   = new NetworkCredential("User2", "Password2", "Domain2")
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual("User2", result.szUserName);
            Assert.AreEqual("Password2", result.szPassword);
            Assert.AreEqual("Domain2", result.szDomain);
        }
Exemplo n.º 8
0
        public void HangsUpTheConnectionWhenCancelled()
        {
            var handle = new IntPtr(1);

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, It.IsAny <string>(),
                                     ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(),
                                     out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                              (ref RASDIALEXTENSIONS rasDialExtensions, string lpszPhoneBook, ref RASDIALPARAMS rasDialParams,
                                                                               Ras.NotifierType notifierType, RasDialFunc2 o5, out IntPtr o6) =>
            {
                o6 = handle;
                return(SUCCESS);
            }));

            using var cts = new CancellationTokenSource();

            var context = new RasDialContext
            {
                PhoneBookPath     = @"C:\Test.pbk",
                EntryName         = "Entry",
                Credentials       = new NetworkCredential("User", "Password"),
                CancellationToken = cts.Token
            };

            target.DialAsync(context);

            cts.Cancel();

            rasHangUp.Verify(o => o.UnsafeHangUp(context.Handle, It.IsAny <bool>(), CancellationToken.None));
        }
Exemplo n.º 9
0
        private RASDIALEXTENSIONS ConvertToRasDialExtensions(RasDialContext context)
        {
            var result = extensionsBuilder.Build(context);

            context.RasDialExtensions = result;

            return(result);
        }
Exemplo n.º 10
0
        private RASDIALPARAMS ConvertToRasDialParams(RasDialContext context)
        {
            var result = paramsBuilder.Build(context);

            context.RasDialParams = result;

            return(result);
        }
Exemplo n.º 11
0
        private void SetUpCancellationSource(RasDialContext context)
        {
            CancellationSource?.Dispose();
            CancellationSource = CancellationTokenSource.CreateLinkedTokenSource(context.CancellationToken);

            // Ensures that the connection can be cancelled even if the callback is stuck.
            CancellationSource.Token.Register(() => OnCancellationRequestedCallback(context));
        }
Exemplo n.º 12
0
        private void HangUpIfNecessary(RasDialContext context)
        {
            if (context.Handle == IntPtr.Zero)
            {
                return;
            }

            hangUpService.UnsafeHangUp(context.Handle, false, CancellationToken.None);
        }
Exemplo n.º 13
0
        public void CancelsTheDialConnectionAttemptIfDisposed()
        {
            var handle = new IntPtr(1);

            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk", ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                  (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5, out IntPtr o6) =>
            {
                o6 = handle;

                return(SUCCESS);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            target.DialAsync(context);

            Assert.IsTrue(target.IsBusy);

            target.Dispose();

            cancellationSource.Verify(o => o.Cancel(), Times.Once);
        }
Exemplo n.º 14
0
        public void ThrowsAnExceptionWhenNonSuccessIsReturnedFromWin32()
        {
            var api = new Mock <IRasApi32>();

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk", ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(), out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                                                                                                                                                                                  (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5, out IntPtr o6) =>
            {
                o6 = IntPtr.Zero;

                return(ERROR_INVALID_PARAMETER);
            }));

            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            exceptionPolicy.Setup(o => o.Create(ERROR_INVALID_PARAMETER)).Returns(new TestException());

            var callbackHandler = new Mock <IRasDialCallbackHandler>();
            var connection      = new Mock <RasConnection>();

            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult(connection.Object));

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource        = new Mock <ITaskCancellationSource>();
            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object);

            Assert.ThrowsAsync <TestException>(() => target.DialAsync(context));

            Assert.IsFalse(target.IsBusy);
            callbackHandler.Verify(o => o.Initialize(completionSource.Object, It.IsAny <Action <StateChangedEventArgs> >(), It.IsAny <Action>(), It.IsAny <CancellationToken>()), Times.Once);
            callbackHandler.Verify(o => o.SetHandle(It.IsAny <IntPtr>()), Times.Never);
        }
Exemplo n.º 15
0
        public void FlagsTheServiceAsNoLongerBusyWhenCompleted()
        {
            var context = new RasDialContext();

            target.FlagAsBusy();

            Assert.True(target.IsBusy);

            target.SimulateDialCompleted(context);

            Assert.False(target.IsBusy);
        }
Exemplo n.º 16
0
        public void BuildsTheStructureWithTheEntryName()
        {
            var context = new RasDialContext
            {
                EntryName = "Test"
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual("Test", result.szEntryName);
        }
Exemplo n.º 17
0
        protected void OnCancellationRequestedCallback(RasDialContext context)
        {
            if (!IsBusy)
            {
                return;
            }

            HangUpIfNecessary(context);
            OnDialCompletedCallback(context);

            CancelCompletionSourceIfNecessary();
        }
Exemplo n.º 18
0
        public void BuildsTheStructureWithTheUserNameAndPassword()
        {
            var context = new RasDialContext
            {
                Credentials = new NetworkCredential("User", "Pass")
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual("User", result.szUserName);
            Assert.AreEqual("Pass", result.szPassword);
        }
Exemplo n.º 19
0
        public void BuildsTheStructureWithTheInterfaceIndex()
        {
            var context = new RasDialContext
            {
                Options = new RasDialerOptions
                {
                    InterfaceIndex = 1
                }
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual(1, result.dwIfIndex);
        }
Exemplo n.º 20
0
        public void DoesNotErrorIfCancelledBeforeDialAttemptCanStart()
        {
            target.FlagAsBusy();

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            Assert.DoesNotThrow(() => target.SimulateCancellationRequested(context));
            Assert.False(target.IsBusy);
        }
Exemplo n.º 21
0
        public void BuildsTheStructureWithTheUserNamePasswordAndDomain()
        {
            var api             = new Mock <IRasApi32>();
            var structFactory   = new Mock <IStructFactory>();
            var exceptionPolicy = new Mock <IExceptionPolicy>();

            var context = new RasDialContext
            {
                Credentials = new NetworkCredential("User", "Pass", "Domain")
            };

            var target = new RasDialParamsBuilder(api.Object, structFactory.Object, exceptionPolicy.Object);
            var result = target.Build(context);

            Assert.AreEqual("User", result.szUserName);
            Assert.AreEqual("Pass", result.szPassword);
            Assert.AreEqual("Domain", result.szDomain);
        }
Exemplo n.º 22
0
        public RASDIALPARAMS Build(RasDialContext context)
        {
            var rasDialParams = structFactory.Create <RASDIALPARAMS>();

            rasDialParams.szEntryName = context.EntryName;

            var ret = api.RasGetEntryDialParams(context.PhoneBookPath, ref rasDialParams, out _);

            if (ret != SUCCESS)
            {
                throw exceptionPolicy.Create(ret);
            }

            ConfigureOptions(context.Options, ref rasDialParams);
            ConfigureCredentials(context.Credentials, ref rasDialParams);

            return(rasDialParams);
        }
Exemplo n.º 23
0
        public Task <RasConnection> DialAsync(RasDialContext context)
        {
            GuardMustNotBeDisposed();
            GuardMustNotAlreadyBeBusy();

            lock (SyncRoot)
            {
                GuardMustNotAlreadyBeBusy();

                CompletionSource = CreateCompletionSource();
                SetUpCancellationSource(context);

                InitializeCallbackHandler(context);
                BeginDial(context);

                return(CompletionSource.Task);
            }
        }
Exemplo n.º 24
0
        public async Task DisposeWillDisposeTheObjectAsExpected()
        {
            var completionSource = new Mock <ITaskCompletionSource <RasConnection> >();

            completionSource.Setup(o => o.Task).Returns(Task.FromResult((RasConnection)null));

            var api               = new Mock <IRasApi32>();
            var rasHangUp         = new Mock <IRasHangUp>();
            var extensionsBuilder = new Mock <IRasDialExtensionsBuilder>();
            var paramsBuilder     = new Mock <IRasDialParamsBuilder>();
            var exceptionPolicy   = new Mock <IExceptionPolicy>();

            var completionSourceFactory = new Mock <ITaskCompletionSourceFactory>();

            completionSourceFactory.Setup(o => o.Create <RasConnection>()).Returns(completionSource.Object);

            var cancellationSource = new Mock <ITaskCancellationSource>();

            var cancellationSourceFactory = new Mock <ITaskCancellationSourceFactory>();

            cancellationSourceFactory.Setup(o => o.Create(It.IsAny <CancellationToken>())).Returns(cancellationSource.Object);

            var callbackHandler = new Mock <IRasDialCallbackHandler>();

            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            using (var target = new RasDialService(api.Object, rasHangUp.Object, extensionsBuilder.Object, paramsBuilder.Object, exceptionPolicy.Object, callbackHandler.Object, completionSourceFactory.Object, cancellationSourceFactory.Object))
            {
                await target.DialAsync(context);
            }

            callbackHandler.Verify(o => o.Dispose(), Times.Once);
            cancellationSource.Verify(o => o.Dispose(), Times.Once);
        }
Exemplo n.º 25
0
        public void ReleasesTheEapUserDataWhenCompleted()
        {
            var ptr     = new IntPtr(1);
            var context = new RasDialContext
            {
                RasDialExtensions = new RASDIALEXTENSIONS
                {
                    RasEapInfo = new RASEAPINFO
                    {
                        pbEapInfo       = ptr,
                        dwSizeofEapInfo = 1
                    }
                }
            };

            target.SimulateDialCompleted(context);

            marshaller.Verify(o => o.FreeHGlobalIfNeeded(ptr));
        }
Exemplo n.º 26
0
        public void ThrowsAnExceptionWhenAttemptingToDialWhileAlreadyBusy()
        {
            var context = new RasDialContext
            {
                PhoneBookPath = @"C:\Test.pbk",
                EntryName     = "Entry",
                Credentials   = new NetworkCredential("User", "Password"),
                Options       = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            target.FlagAsBusy();

            Assert.IsTrue(target.IsBusy);
            Assert.ThrowsAsync <InvalidOperationException>(() => target.DialAsync(context));

            Assert.IsTrue(target.IsBusy);
        }
Exemplo n.º 27
0
        public RASDIALEXTENSIONS Build(RasDialContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var rasDialExtensions = structFactory.Create <RASDIALEXTENSIONS>();

            RasDialerOptions options;

            if ((options = context.Options) != null)
            {
                if (options.Owner != IntPtr.Zero)
                {
                    rasDialExtensions.hwndParent = options.Owner;
                }

                rasDialExtensions.dwfOptions = BuildOptions(options);
            }

            return(rasDialExtensions);
        }
Exemplo n.º 28
0
        public Task <RasConnection> DialAsync(RasDialContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            GuardMustNotBeDisposed();
            GuardMustNotAlreadyBeBusy();

            lock (SyncRoot)
            {
                GuardMustNotAlreadyBeBusy();

                CompletionSource = CreateCompletionSource();
                SetUpCancellationSource(context);

                InitializeCallbackHandler(context);
                BeginDial(context);

                return(CompletionSource.Task);
            }
        }
Exemplo n.º 29
0
        public void CancelsTheDialConnectionAttemptIfDisposed()
        {
            var handle = new IntPtr(1);

            api.Setup(o => o.RasDial(ref It.Ref <RASDIALEXTENSIONS> .IsAny, @"C:\Test.pbk",
                                     ref It.Ref <RASDIALPARAMS> .IsAny, Ras.NotifierType.RasDialFunc2, It.IsAny <RasDialFunc2>(),
                                     out It.Ref <IntPtr> .IsAny)).Returns(new RasDialCallback(
                                                                              (ref RASDIALEXTENSIONS o1, string o2, ref RASDIALPARAMS o3, Ras.NotifierType o4, RasDialFunc2 o5,
                                                                               out IntPtr o6) =>
            {
                o6 = handle;

                return(SUCCESS);
            }));

            using var cts = new CancellationTokenSource();

            var context = new RasDialContext
            {
                CancellationToken = cts.Token,
                PhoneBookPath     = @"C:\Test.pbk",
                EntryName         = "Entry",
                Credentials       = new NetworkCredential("User", "Password"),
                Options           = new RasDialerOptions
                {
                    InterfaceIndex = 0
                }
            };

            target.DialAsync(context);

            Assert.IsTrue(target.IsBusy);

            target.Dispose();
            Assert.IsTrue(target.CancelledAttempt);
        }
Exemplo n.º 30
0
 private void InitializeCallbackHandler(RasDialContext context)
 {
     callbackHandler.Initialize(CompletionSource, context.OnStateChangedCallback, () => OnDialCompletedCallback(context), CancellationSource.Token);
 }