Exemple #1
0
        public object Initialize(JToken arg)
        {
            /* We want to support the hover capability. When we get a hover request we will respond
             * with the appropriate text.
             * Check the client's declared capabilities to identify what hover format the client expects
             * before returning a hover response from the server. Stash away the expected format for use
             * when composing the hover response.
             */
            var b = arg.ToObject <InitializeParams>();

            MarkupKind[] m = b.Capabilities.TextDocument.Hover.ContentFormat;

            // in the case of Visual Studio, this is what I am observing. Capturing that as an assertion
            // just in case things change.
            System.Diagnostics.Debug.Assert(m != null &&
                                            m.Length == 1 &&
                                            m[0] == MarkupKind.PlainText);

            HoverContentFormat = m[0];

            /*
             *"hover" is the only capability that we wil report back as supported.
             */
            var capabilities = new ServerCapabilities();

            capabilities.HoverProvider = true;

            var result = new InitializeResult();

            result.Capabilities = capabilities;

            Initialized?.Invoke(this, new EventArgs());

            return(result);
        }
        public object Initialize(JToken arg)
        {
            Log(Methods.InitializeName, arg);

            var capabilities = new ServerCapabilities();

            capabilities.TextDocumentSync                        = new TextDocumentSyncOptions();
            capabilities.TextDocumentSync.OpenClose              = true;
            capabilities.TextDocumentSync.Change                 = TextDocumentSyncKind.Full;
            capabilities.CompletionProvider                      = new CompletionOptions();
            capabilities.CompletionProvider.ResolveProvider      = false;
            capabilities.CompletionProvider.TriggerCharacters    = new string[] { ",", "." };
            capabilities.CodeActionProvider                      = true;
            capabilities.SignatureHelpProvider                   = new SignatureHelpOptions();
            capabilities.SignatureHelpProvider.TriggerCharacters = new string [] { "(" };
            capabilities.DefinitionProvider                      = true;
            capabilities.ReferencesProvider                      = true;
            capabilities.HoverProvider           = true;
            capabilities.WorkspaceSymbolProvider = true;

            var result = new InitializeResult();

            result.Capabilities = capabilities;

            return(result);
        }
        public object Initialize(JToken arg)
        {
            if (trace)
            {
                System.Console.Error.WriteLine("<-- Initialize");
                System.Console.Error.WriteLine(arg.ToString());
            }
            ServerCapabilities capabilities = new ServerCapabilities
            {
                TextDocumentSync = new TextDocumentSyncOptions
                {
                    OpenClose = true,
                    Change    = TextDocumentSyncKind.Incremental,
                    Save      = new SaveOptions
                    {
                        IncludeText = true
                    }
                },

                HoverProvider = true,

                CompletionProvider = new CompletionOptions
                {
                    ResolveProvider   = true,
                    TriggerCharacters = new string[] { ",", "." }
                },

                ReferencesProvider = true,

                DefinitionProvider = true,

                TypeDefinitionProvider = false, // Does not make sense for Antlr.

                ImplementationProvider = false, // Does not make sense for Antlr.

                DocumentHighlightProvider = true,

                DocumentSymbolProvider = true,

                WorkspaceSymbolProvider = false,

                DocumentFormattingProvider = true,

                DocumentRangeFormattingProvider = false,

                RenameProvider = true
            };

            InitializeResult result = new InitializeResult
            {
                Capabilities = capabilities
            };
            string json = JsonConvert.SerializeObject(result);

            if (trace)
            {
                System.Console.Error.WriteLine("--> " + json);
            }
            return(result);
        }
Exemple #4
0
        public void SimpleTest(string expected)
        {
            var model = new ServerCapabilities {
                CodeActionProvider = true,
                CodeLensProvider   = new CodeLensRegistrationOptions.StaticOptions {
                    ResolveProvider = true,
                },
                CompletionProvider = new CompletionRegistrationOptions.StaticOptions {
                    ResolveProvider   = true,
                    TriggerCharacters = new[] { "a", "b", "c" }
                },
                DefinitionProvider         = true,
                DocumentFormattingProvider = true,
                DocumentHighlightProvider  = true,
                DocumentLinkProvider       = new DocumentLinkRegistrationOptions.StaticOptions {
                    ResolveProvider = true
                },
                DocumentOnTypeFormattingProvider = new DocumentOnTypeFormattingRegistrationOptions.StaticOptions {
                    FirstTriggerCharacter = ".",
                    MoreTriggerCharacter  = new[] { ";", " " }
                },
                DocumentRangeFormattingProvider = true,
                DocumentSymbolProvider          = true,
                ExecuteCommandProvider          = new ExecuteCommandRegistrationOptions.StaticOptions {
                    Commands = new[] { "command1", "command2" }
                },
                Experimental = new Dictionary <string, JToken> {
                    { "abc", "123" }
                },
                HoverProvider         = true,
                ReferencesProvider    = true,
                RenameProvider        = true,
                SignatureHelpProvider = new SignatureHelpRegistrationOptions.StaticOptions {
                    TriggerCharacters = new[] { ";", " " }
                },
                TextDocumentSync = new TextDocumentSync(
                    new TextDocumentSyncOptions {
                    Change    = TextDocumentSyncKind.Full,
                    OpenClose = true,
                    Save      = new SaveOptions {
                        IncludeText = true
                    },
                    WillSave          = true,
                    WillSaveWaitUntil = true
                }
                    ),
                WorkspaceSymbolProvider = true,
                ColorProvider           = true,
                FoldingRangeProvider    = true,
                ImplementationProvider  = true,
                TypeDefinitionProvider  = true
            };
            var result = Fixture.SerializeObject(model);

            result.Should().Be(expected);

            var deresult = new LspSerializer(ClientVersion.Lsp3).DeserializeObject <ServerCapabilities>(expected);

            deresult.Should().BeEquivalentTo(model, x => x.UsingStructuralRecordEquality());
        }
Exemple #5
0
 public ApplicationTestDataGenerator(int randomStart)
 {
     this._randomStart   = randomStart;
     _serverCapabilities = new ServerCapabilities();
     _randomSource       = new RandomSource(randomStart);
     _dataGenerator      = new DataGenerator(_randomSource);
 }
        public ExtendableServerCapabilities(ServerCapabilities inner, IEnumerable<IRegistrationExtension> registrationExtensions)
        {
            FoldingRangeProvider = inner.FoldingRangeProvider;
            ColorProvider = inner.ColorProvider;
            ImplementationProvider = inner.ImplementationProvider;
            TypeDefinitionProvider = inner.TypeDefinitionProvider;
            Experimental = inner.Experimental;
            ExecuteCommandProvider = inner.ExecuteCommandProvider;
            DocumentLinkProvider = inner.DocumentLinkProvider;
            RenameProvider = inner.RenameProvider;
            DocumentOnTypeFormattingProvider = inner.DocumentOnTypeFormattingProvider;
            DocumentRangeFormattingProvider = inner.DocumentRangeFormattingProvider;
            DeclarationProvider = inner.DeclarationProvider;
            DocumentFormattingProvider = inner.DocumentFormattingProvider;
            CodeActionProvider = inner.CodeActionProvider;
            WorkspaceSymbolProvider = inner.WorkspaceSymbolProvider;
            DocumentSymbolProvider = inner.DocumentSymbolProvider;
            DocumentHighlightProvider = inner.DocumentHighlightProvider;
            ReferencesProvider = inner.ReferencesProvider;
            DefinitionProvider = inner.DefinitionProvider;
            SignatureHelpProvider = inner.SignatureHelpProvider;
            CompletionProvider = inner.CompletionProvider;
            HoverProvider = inner.HoverProvider;
            TextDocumentSync = inner.TextDocumentSync;
            CodeLensProvider = inner.CodeLensProvider;
            Workspace = inner.Workspace;

            CapabilityExtensions = new Dictionary<string, object>(StringComparer.Ordinal);
            foreach (var registrationExtension in registrationExtensions)
            {
                var optionsResult = registrationExtension.GetRegistration();
                CapabilityExtensions[optionsResult.ServerCapability] = optionsResult.Options;
            }
        }
        protected async Task OneTimeSetUp()
        {
            // start GDS first clean, then restart server
            // to ensure the application cert is not 'fresh'
            _server = await TestUtils.StartGDS(true);

            _server.StopServer();
            await Task.Delay(1000);

            _server = await TestUtils.StartGDS(false);

            _serverCapabilities = new ServerCapabilities();
            _randomSource       = new RandomSource(randomStart);
            _dataGenerator      = new DataGenerator(_randomSource);

            // load clients
            _gdsClient = new GlobalDiscoveryTestClient(true);
            await _gdsClient.LoadClientConfiguration(_server.BasePort);

            _pushClient = new ServerConfigurationPushTestClient(true);
            await _pushClient.LoadClientConfiguration(_server.BasePort);

            // connect once
            await _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl);

            await _pushClient.PushClient.Connect(_pushClient.PushClient.EndpointUrl);

            ConnectGDSClient(true);
            RegisterPushServerApplication(_pushClient.PushClient.EndpointUrl);

            _selfSignedServerCert = new X509Certificate2(_pushClient.PushClient.Session.ConfiguredEndpoint.Description.ServerCertificate);
            _domainNames          = X509Utils.GetDomainsFromCertficate(_selfSignedServerCert).ToArray();

            await CreateCATestCerts(_pushClient.TempStorePath);
        }
Exemple #8
0
        public object Initialize(JToken arg)
        {
            var initialized = waitForInit?.WaitOne(30_000) ?? false;

            if (!initialized)
            {
                return(new InitializeError {
                    Retry = true
                });
            }

            var capabilities = new ServerCapabilities
            {
                TextDocumentSync = new TextDocumentSyncOptions
                {
                    OpenClose = true,
                    Change    = TextDocumentSyncKind.Full,
                },
                DocumentSymbolProvider = true,
                CompletionProvider     = new CompletionOptions
                {
                    TriggerCharacters   = new[] { ".", ",", "(" },
                    AllCommitCharacters = new[] { " ", ".", ",", "(", ")" }
                },
            };

            waitForInit = null;
            return(new InitializeResult {
                Capabilities = capabilities
            });
        }
        protected async Task OneTimeSetUp()
        {
            // make sure all servers started in travis use a different port, or test will fail
            int testPort = 50000 + (((Int32)DateTime.UtcNow.ToFileTimeUtc() / 10000) & 0x1fff);

            _serverCapabilities = new ServerCapabilities();
            _randomSource       = new RandomSource(randomStart);
            _dataGenerator      = new DataGenerator(_randomSource);
            _server             = new GlobalDiscoveryTestServer(true);
            await _server.StartServer(true, testPort);

            await Task.Delay(1000);

            // load clients
            _gdsClient = new GlobalDiscoveryTestClient(true);
            await _gdsClient.LoadClientConfiguration(testPort);

            _pushClient = new ServerConfigurationPushTestClient(true);
            await _pushClient.LoadClientConfiguration(testPort);

            // connect once
            await _gdsClient.GDSClient.Connect(_gdsClient.GDSClient.EndpointUrl);

            await _pushClient.PushClient.Connect(_pushClient.PushClient.EndpointUrl);

            ConnectGDSClient(true);
            RegisterPushServerApplication(_pushClient.PushClient.EndpointUrl);

            _selfSignedServerCert = new X509Certificate2(_pushClient.PushClient.Session.ConfiguredEndpoint.Description.ServerCertificate);
            _domainNames          = Utils.GetDomainsFromCertficate(_selfSignedServerCert).ToArray();

            CreateCATestCerts(_pushClient.TempStorePath);
        }
Exemple #10
0
        public SessionSetupAndXRequest(byte[] buffer, int offset, bool isUnicode) : base(buffer, offset, isUnicode)
        {
            MaxBufferSize         = LittleEndianConverter.ToUInt16(this.SMBParameters, 4);
            MaxMpxCount           = LittleEndianConverter.ToUInt16(this.SMBParameters, 6);
            VcNumber              = LittleEndianConverter.ToUInt16(this.SMBParameters, 8);
            SessionKey            = LittleEndianConverter.ToUInt32(this.SMBParameters, 10);
            OEMPasswordLength     = LittleEndianConverter.ToUInt16(this.SMBParameters, 14);
            UnicodePasswordLength = LittleEndianConverter.ToUInt16(this.SMBParameters, 16);
            Reserved              = LittleEndianConverter.ToUInt32(this.SMBParameters, 18);
            Capabilities          = (ServerCapabilities)LittleEndianConverter.ToUInt32(this.SMBParameters, 22);

            OEMPassword     = ByteReader.ReadBytes(this.SMBData, 0, OEMPasswordLength);
            UnicodePassword = ByteReader.ReadBytes(this.SMBData, OEMPasswordLength, UnicodePasswordLength);

            int dataOffset = OEMPasswordLength + UnicodePasswordLength;

            if (isUnicode)
            {
                // A Unicode string MUST be aligned to a 16-bit boundary with respect to the beginning of the SMB Header.
                // Note: SMBData starts at an odd offset.
                int padding = (OEMPasswordLength + UnicodePasswordLength + 1) % 2;
                dataOffset += padding;
            }
            AccountName   = SMB1Helper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            PrimaryDomain = SMB1Helper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            NativeOS      = SMB1Helper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            NativeLanMan  = SMB1Helper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
        }
        protected void OneTimeSetUp()
        {
#if DEBUG
            // work around travis issue by selecting different ports on every run
            const int testPort = 60000;
#else
            const int testPort = 60010;
#endif
            _serverCapabilities = new ServerCapabilities();
            _randomSource       = new RandomSource(randomStart);
            _dataGenerator      = new DataGenerator(_randomSource);
            _server             = new GlobalDiscoveryTestServer(true);
            _server.StartServer(true, testPort).Wait();

            // load client
            _gdsClient = new GlobalDiscoveryTestClient(true);
            _gdsClient.LoadClientConfiguration(testPort).Wait();

            // good applications test set
            _goodApplicationTestSet    = ApplicationTestSet(goodApplicationsTestCount, false);
            _invalidApplicationTestSet = ApplicationTestSet(invalidApplicationsTestCount, true);

            _goodRegistrationOk    = false;
            _invalidRegistrationOk = false;
        }
        public string NativeLanMan;  // SMB_STRING (this field WILL be aligned to start on a 2-byte boundary from the start of the SMB header)

        public SessionSetupAndXRequest(byte[] buffer, int offset, bool isUnicode) : base(buffer, offset, isUnicode)
        {
            MaxBufferSize = LittleEndianConverter.ToUInt16(this.SMBParameters, 4);
            MaxMpxCount   = LittleEndianConverter.ToUInt16(this.SMBParameters, 6);
            VcNumber      = LittleEndianConverter.ToUInt16(this.SMBParameters, 8);
            SessionKey    = LittleEndianConverter.ToUInt32(this.SMBParameters, 10);
            ushort OEMPasswordLength     = LittleEndianConverter.ToUInt16(this.SMBParameters, 14);
            ushort UnicodePasswordLength = LittleEndianConverter.ToUInt16(this.SMBParameters, 16);

            Reserved     = LittleEndianConverter.ToUInt32(this.SMBParameters, 18);
            Capabilities = (ServerCapabilities)LittleEndianConverter.ToUInt32(this.SMBParameters, 22);

            OEMPassword     = ByteReader.ReadBytes(this.SMBData, 0, OEMPasswordLength);
            UnicodePassword = ByteReader.ReadBytes(this.SMBData, OEMPasswordLength, UnicodePasswordLength);

            int dataOffset = OEMPasswordLength + UnicodePasswordLength;

            if (isUnicode)
            {
                // wordCount is 1 byte
                int padding = (1 + OEMPasswordLength + UnicodePasswordLength) % 2;
                dataOffset += padding;
            }
            AccountName   = SMBHelper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            PrimaryDomain = SMBHelper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            NativeOS      = SMBHelper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
            NativeLanMan  = SMBHelper.ReadSMBString(this.SMBData, ref dataOffset, isUnicode);
        }
Exemple #13
0
        public override IHandlerResponse Handle(Map map, IContextRequest request)
        {
            ValidateParams(request, 0);

            XmlDocument doc = ServerCapabilities.GetCapabilities(map, Description, request);

            return(new GetCapabilitiesResponse(doc));
        }
Exemple #14
0
        public void Null_Text_Document_Sync(string expected)
        {
            var model = new ServerCapabilities {
                TextDocumentSync = new TextDocumentSync(new TextDocumentSyncOptions())
            };

            var deresult = new LspSerializer(ClientVersion.Lsp3).DeserializeObject <ServerCapabilities>(expected);

            deresult.Should().BeEquivalentTo(model, x => x.UsingStructuralRecordEquality());
        }
Exemple #15
0
        public object Initialize(JToken arg)
        {
            if (trace)
            {
                System.Console.Error.WriteLine("<-- Initialize");
                System.Console.Error.WriteLine(arg.ToString());
            }
            var capabilities = new ServerCapabilities();

            capabilities.TextDocumentSync                  = new TextDocumentSyncOptions();
            capabilities.TextDocumentSync.OpenClose        = true;
            capabilities.TextDocumentSync.Change           = TextDocumentSyncKind.Incremental;
            capabilities.TextDocumentSync.Save             = new SaveOptions();
            capabilities.TextDocumentSync.Save.IncludeText = true;

            capabilities.HoverProvider = true;

            capabilities.CompletionProvider = new CompletionOptions();
            capabilities.CompletionProvider.ResolveProvider   = false;
            capabilities.CompletionProvider.TriggerCharacters = new string[] { ",", "." };

            capabilities.ReferencesProvider = false;

            capabilities.DefinitionProvider = false;

            capabilities.TypeDefinitionProvider = false; // Does not make sense for Antlr.

            capabilities.ImplementationProvider = false; // Does not make sense for Antlr.

            capabilities.DocumentHighlightProvider = false;

            capabilities.DocumentSymbolProvider = false;

            capabilities.WorkspaceSymbolProvider = false;

            capabilities.DocumentFormattingProvider = false;

            capabilities.DocumentRangeFormattingProvider = false;

            capabilities.RenameProvider = false;

            var result = new InitializeResult();

            result.Capabilities = capabilities;
            string json = JsonConvert.SerializeObject(result);

            if (trace)
            {
                System.Console.Error.WriteLine("--> " + json);
            }
            return(result);
        }
        public void RegisterCapabilities(ServerCapabilities serverCapabilities)
        {
            foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(
                         serverCapabilities
                         ))
            {
                var method = _handlerTypeDescriptorProvider.GetMethodForRegistrationOptions(registrationOptions);
                if (method == null)
                {
                    _logger.LogWarning("Unable to find method for given {@RegistrationOptions}", registrationOptions);
                    continue;
                }

                if (string.IsNullOrWhiteSpace(registrationOptions.Id))
                {
                    registrationOptions.Id = Guid.NewGuid().ToString();
                }

                var reg = new Registration {
                    Id              = registrationOptions.Id,
                    Method          = method,
                    RegisterOptions = registrationOptions
                };
                _registrations.AddOrUpdate(registrationOptions.Id, x => reg, (a, b) => reg);
            }

            if (serverCapabilities.Workspace == null)
            {
                _registrationSubject.OnNext(_registrations.Values);
                return;
            }

            foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(
                         serverCapabilities
                         .Workspace
                         ))
            {
                var method = _handlerTypeDescriptorProvider.GetMethodForRegistrationOptions(registrationOptions);
                if (method == null)
                {
                    // TODO: Log this
                    continue;
                }

                var reg = new Registration {
                    Id              = registrationOptions.Id,
                    Method          = method,
                    RegisterOptions = registrationOptions
                };
                _registrations.AddOrUpdate(registrationOptions.Id, x => reg, (a, b) => reg);
            }
        }
Exemple #17
0
        protected override Result <InitializeResult, ResponseError <InitializeErrorData> > Initialize(InitializeParams parameters)
        {
            var capabilities = new ServerCapabilities
            {
                textDocumentSync = TextDocumentSyncKind.Incremental,
            };
            var result = new InitializeResult
            {
                capabilities = capabilities
            };

            return(Result <InitializeResult, ResponseError <InitializeErrorData> > .Success(result));
        }
        public void Optional(string expected)
        {
            var model = new ServerCapabilities {
                ColorProvider = (ColorOptions)null
            };

            var result = Fixture.SerializeObject(model);

            result.Should().Be(expected);

            var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject <ServerCapabilities>(expected);

            deresult.Should().BeEquivalentTo(model);
        }
Exemple #19
0
        public void Optional(string expected)
        {
            var model = new ServerCapabilities {
                ColorProvider = null
            };

            var result = Fixture.SerializeObject(model);

            result.Should().Be(expected);

            var deresult = new LspSerializer(ClientVersion.Lsp3).DeserializeObject <ServerCapabilities>(expected);

            deresult.Should().BeEquivalentTo(model, x => x.UsingStructuralRecordEquality());
        }
Exemple #20
0
        public void Constructor_RegistrationExtensions_Populates()
        {
            // Arrange
            var registrationExtension1 = new TestRegistrationExtension("test1");
            var registrationExtension2 = new TestRegistrationExtension("test2");
            var registrations          = new IRegistrationExtension[] { registrationExtension1, registrationExtension2 };
            var baseCapability         = new ServerCapabilities();

            // Act
            var extendableCapabilities = new ExtendableServerCapabilities(baseCapability, registrations);

            // Assert
            Assert.Equal(new[] { "test1", "test2" }, extendableCapabilities.CapabilityExtensions.Keys.ToArray());
        }
Exemple #21
0
        public ServerCapabilities GetCapabilities(ClientCapabilities clientCapabilities)
        {
            var capabilities = new ServerCapabilities();

            if (clientCapabilities is VSClientCapabilities vsClientCapabilities && vsClientCapabilities.SupportsVisualStudioExtensions)
            {
                capabilities = GetVSServerCapabilities();
            }

            var commitCharacters  = CompletionRules.Default.DefaultCommitCharacters.Select(c => c.ToString()).ToArray();
            var triggerCharacters = _completionProviders.SelectMany(
                lz => CompletionHandler.GetTriggerCharacters(lz.Value)).Distinct().Select(c => c.ToString()).ToArray();

            capabilities.DefinitionProvider     = true;
            capabilities.RenameProvider         = true;
            capabilities.ImplementationProvider = true;
            capabilities.CodeActionProvider     = new CodeActionOptions {
                CodeActionKinds = new[] { CodeActionKind.QuickFix, CodeActionKind.Refactor }
            };
            capabilities.CompletionProvider = new VisualStudio.LanguageServer.Protocol.CompletionOptions
            {
                ResolveProvider     = true,
                AllCommitCharacters = commitCharacters,
                TriggerCharacters   = triggerCharacters,
            };

            capabilities.SignatureHelpProvider = new SignatureHelpOptions {
                TriggerCharacters = new[] { "(", "," }
            };
            capabilities.DocumentSymbolProvider           = true;
            capabilities.WorkspaceSymbolProvider          = true;
            capabilities.DocumentFormattingProvider       = true;
            capabilities.DocumentRangeFormattingProvider  = true;
            capabilities.DocumentOnTypeFormattingProvider = new DocumentOnTypeFormattingOptions {
                FirstTriggerCharacter = "}", MoreTriggerCharacter = new[] { ";", "\n" }
            };
            capabilities.ReferencesProvider     = true;
            capabilities.FoldingRangeProvider   = true;
            capabilities.ExecuteCommandProvider = new ExecuteCommandOptions();
            capabilities.TextDocumentSync       = new TextDocumentSyncOptions
            {
                Change    = TextDocumentSyncKind.Incremental,
                OpenClose = true
            };

            capabilities.HoverProvider = true;

            return(capabilities);
        }
 public SessionSetupRequest(byte[] buffer, int offset) : base(buffer, offset)
 {
     StructureSize        = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 0);
     Flags                = (SessionSetupFlags)ByteReader.ReadByte(buffer, offset + SMB2Header.Length + 2);
     SecurityMode         = (SecurityMode)ByteReader.ReadByte(buffer, offset + SMB2Header.Length + 3);
     Capabilities         = (ServerCapabilities)LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 4);
     Channel              = LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 8);
     SecurityBufferOffset = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 12);
     SecurityBufferLength = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 14);
     PreviousSessionId    = LittleEndianConverter.ToUInt64(buffer, offset + SMB2Header.Length + 16);
     if (SecurityBufferLength > 0)
     {
         SecurityBuffer = ByteReader.ReadBytes(buffer, offset + SecurityBufferOffset, SecurityBufferLength);
     }
 }
Exemple #23
0
        public void CapabilityExtensions_RoundTripsCorrectly()
        {
            // Arrange
            var registrationExtension  = new TestRegistrationExtension("test1");
            var registrations          = new IRegistrationExtension[] { registrationExtension };
            var baseCapability         = new ServerCapabilities();
            var extendableCapabilities = new ExtendableServerCapabilities(baseCapability, registrations);

            // Act
            var serialized   = JsonConvert.SerializeObject(extendableCapabilities);
            var deserialized = JsonConvert.DeserializeObject <VSCapabilities>(serialized);

            // Assert
            Assert.True(deserialized.Test1);
        }
        /// <summary>
        /// Retrieve the server's capabilities before additional requests are made to the remote host.
        /// </summary>
        /// <param name="cancellationToken"></param>
        public void InitializeServerCapabilities(CancellationToken cancellationToken)
        {
            if (ActiveLanguageServerClient == null || ServerCapabilities != null)
            {
                return;
            }

            var initializeRequest = new LS.LspRequest <InitializeParams, InitializeResult>(Methods.InitializeName);

            ThreadHelper.JoinableTaskFactory.Run(async() =>
            {
                var intializeResult = await ActiveLanguageServerClient.RequestAsync(initializeRequest, new InitializeParams(), cancellationToken).ConfigureAwait(false);
                ServerCapabilities  = intializeResult?.Capabilities;
            });
        }
        public NegotiateRequest(byte[] buffer, int offset) : base(buffer, offset)
        {
            StructureSize   = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 0);
            DialectCount    = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 2);
            SecurityMode    = (SecurityMode)LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 4);
            Reserved        = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 6);
            Capabilities    = (ServerCapabilities)LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 8);
            ClientGuid      = LittleEndianConverter.ToGuid(buffer, offset + SMB2Header.Length + 12);
            ClientStartTime = DateTime.FromFileTimeUtc(LittleEndianConverter.ToInt64(buffer, offset + SMB2Header.Length + 28));

            for (int index = 0; index < DialectCount; index++)
            {
                SMB2Dialect dialect = (SMB2Dialect)LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 36 + index * 2);
                Dialects.Add(dialect);
            }
        }
        public void RegisterCapabilities(ServerCapabilities serverCapabilities)
        {
            foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(serverCapabilities))
            {
                var method = _handlerTypeDescriptorProvider.GetMethodForRegistrationOptions(registrationOptions);
                if (method == null)
                {
                    _logger.LogWarning("Unable to find method for given {@RegistrationOptions}", registrationOptions);
                    continue;
                }

                if (registrationOptions.Id != null)
                {
                    var reg = new Registration {
                        Id              = registrationOptions.Id,
                        Method          = method,
                        RegisterOptions = registrationOptions
                    };
                    _registrations.AddOrUpdate(registrationOptions.Id, _ => reg, (_, _) => reg);
                }
            }

            if (serverCapabilities.Workspace != null)
            {
                foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(serverCapabilities.Workspace))
                {
                    var method = _handlerTypeDescriptorProvider.GetMethodForRegistrationOptions(registrationOptions);
                    if (method == null)
                    {
                        // TODO: Log this
                        continue;
                    }

                    if (registrationOptions.Id != null)
                    {
                        var reg = new Registration {
                            Id              = registrationOptions.Id,
                            Method          = method,
                            RegisterOptions = registrationOptions
                        };
                        _registrations.AddOrUpdate(registrationOptions.Id, _ => reg, (_, _) => reg);
                    }
                }
            }

            _registrationSubject.OnNext(_registrations.Values);
        }
        public void RegisterCapabilities(ServerCapabilities serverCapabilities)
        {
            foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(
                         serverCapabilities))
            {
                var descriptor = LspHandlerTypeDescriptorHelper.GetHandlerTypeForRegistrationOptions(registrationOptions);
                if (descriptor == null)
                {
                    _logger.LogWarning("Unable to find handler type descriptor for the given {@RegistrationOptions}", registrationOptions);
                    continue;
                }

                var reg = new Registration()
                {
                    Id              = registrationOptions.Id,
                    Method          = descriptor.Method,
                    RegisterOptions = registrationOptions
                };
                _registrations.AddOrUpdate(registrationOptions.Id, (x) => reg, (a, b) => reg);
            }

            if (serverCapabilities.Workspace == null)
            {
                _registrationSubject.OnNext(_registrations.Values);
                return;
            }

            foreach (var registrationOptions in LspHandlerDescriptorHelpers.GetStaticRegistrationOptions(serverCapabilities
                                                                                                         .Workspace))
            {
                var descriptor = LspHandlerTypeDescriptorHelper.GetHandlerTypeForRegistrationOptions(registrationOptions);
                if (descriptor == null)
                {
                    // TODO: Log this
                    continue;
                }

                var reg = new Registration()
                {
                    Id              = registrationOptions.Id,
                    Method          = descriptor.Method,
                    RegisterOptions = registrationOptions
                };
                _registrations.AddOrUpdate(registrationOptions.Id, (x) => reg, (a, b) => reg);
            }
        }
Exemple #28
0
        public void Resolve_Reference_ReturnsTrue()
        {
            // Arrange
            var methodName   = Methods.TextDocumentReferencesName;
            var capabilities = new ServerCapabilities()
            {
                ReferencesProvider = true,
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
Exemple #29
0
        public void Resolve_TypeDefinitionOptions_ReturnsTrue()
        {
            // Arrange
            var methodName   = Methods.TextDocumentTypeDefinitionName;
            var capabilities = new ServerCapabilities()
            {
                TypeDefinitionProvider = new TypeDefinitionOptions(),
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }
Exemple #30
0
        public void Resolve_CodeLens_ReturnsTrue()
        {
            // Arrange
            var methodName   = Methods.CodeLensResolveName;
            var capabilities = new ServerCapabilities()
            {
                CodeLensProvider = new CodeLensOptions(),
            };
            var jobjectCapabilities = JObject.FromObject(capabilities);
            var filter = Resolver.Resolve(methodName);

            // Act
            var result = filter(jobjectCapabilities);

            // Assert
            Assert.True(result);
        }