public BoltProtocolV1(ITcpSocketClient tcpSocketClient, BufferSettings bufferSettings, ILogger logger = null)
 {
     _tcpSocketClient = tcpSocketClient;
     _bufferSettings  = bufferSettings;
     _logger          = logger;
     CreateReaderAndWriter(BoltProtocolPackStream.V1);
 }
Esempio n. 2
0
 public SocketClient(Uri uri, SocketSettings socketSettings, BufferSettings bufferSettings, ILogger logger = null,
                     ITcpSocketClient socketClient = null)
 {
     _uri             = uri;
     _logger          = logger;
     _bufferSettings  = bufferSettings;
     _tcpSocketClient = socketClient ?? new TcpSocketClient(socketSettings, _logger);
 }
        private IDriver SetupWithCustomResolver(Uri overridenUri, Config config)
        {
            var connectionSettings = new ConnectionSettings(AuthToken, config);

            connectionSettings.SocketSettings.HostResolver =
                new CustomHostResolver(Server.BoltUri, connectionSettings.SocketSettings.HostResolver);
            var bufferSettings    = new BufferSettings(config);
            var connectionFactory = new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(GraphDatabase.CreateDriver(overridenUri, config, connectionFactory));
        }
        public virtual IMessageReader NewReader(Stream stream, BufferSettings bufferSettings, ILogger logger = null, bool byteArraySupportEnabled = true)
        {
            var messageFormat = BoltProtocolMessageFormat.V1;

            if (!byteArraySupportEnabled)
            {
                messageFormat = BoltProtocolMessageFormat.V1NoByteArray;
            }
            return(new MessageReader(stream, bufferSettings.DefaultReadBufferSize,
                                     bufferSettings.MaxReadBufferSize, logger, messageFormat));
        }
        public BoltProtocolV2(ITcpSocketClient tcpSocketClient, BufferSettings bufferSettings, ILogger logger = null)
        {
            _tcpSocketClient = tcpSocketClient;
            _bufferSettings  = bufferSettings;
            _logger          = logger;

            Reader = new BoltReader(_tcpSocketClient.ReadStream, _bufferSettings.DefaultReadBufferSize,
                                    _bufferSettings.MaxReadBufferSize, _logger, BoltProtocolPackStream.V2);
            Writer = new BoltWriter(_tcpSocketClient.WriteStream, _bufferSettings.DefaultWriteBufferSize,
                                    _bufferSettings.MaxWriteBufferSize, _logger, BoltProtocolPackStream.V2);
        }
Esempio n. 6
0
        public virtual IMessageWriter NewWriter(Stream writeStream, BufferSettings bufferSettings, IDriverLogger logger = null, bool byteArraySupportEnabled = true)
        {
            var messageFormat = BoltProtocolMessageFormat.V1;

            if (!byteArraySupportEnabled)
            {
                messageFormat = BoltProtocolMessageFormat.V1NoByteArray;
            }
            return(new MessageWriter(writeStream, bufferSettings.DefaultWriteBufferSize,
                                     bufferSettings.MaxWriteBufferSize, logger, messageFormat));
        }
Esempio n. 7
0
        /// <summary>
        ///     Returns a driver for a Neo4j instance with custom configuration.
        /// </summary>
        /// <param name="uri">
        ///     The URI to the Neo4j instance. Should be in the form
        ///     <c>bolt://&lt;server location&gt;:&lt;port&gt;</c>. If <c>port</c> is not supplied the default of <c>7687</c> will
        ///     be used.</param>
        /// <param name="authToken">Authentication to use, <see cref="AuthTokens" />.</param>
        /// <param name="config">
        ///     Configuration for the driver instance to use, if <c>null</c> <see cref="Config.DefaultConfig" />
        ///     is used.
        /// </param>
        /// <returns>A new driver to the database instance specified by the <paramref name="uri"/>.</returns>
        public static IDriver Driver(Uri uri, IAuthToken authToken, Config config)
        {
            Throw.ArgumentNullException.IfNull(uri, nameof(uri));
            Throw.ArgumentNullException.IfNull(authToken, nameof(authToken));
            config = config ?? Config.DefaultConfig;

            var connectionSettings = new ConnectionSettings(authToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  = new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(CreateDriver(uri, config, connectionFactory));
        }
Esempio n. 8
0
        public SocketConnection(Uri uri, ConnectionSettings connectionSettings, BufferSettings bufferSettings, ILogger logger = null)
        {
            _idPrefix = $"conn-{uri.Host}:{uri.Port}-";
            _id       = $"{_idPrefix}{UniqueIdGenerator.GetId()}";
            _logger   = new PrefixLogger(logger, FormatPrefix(_id));

            _client    = new SocketClient(uri, connectionSettings.SocketSettings, bufferSettings, _logger);
            _authToken = connectionSettings.AuthToken;
            _userAgent = connectionSettings.UserAgent;
            Server     = new ServerInfo(uri);

            _responsePipeline = new ResponsePipeline(_logger);
        }
        /// <summary>
        /// Returns a driver for a Neo4j instance with custom configuration.
        /// </summary>
        /// <param name="uri">
        /// The URI to the Neo4j instance. Should be in the form
        /// <c>neo4j://&lt;server location&gt;:&lt;port&gt;</c>.
        /// If <c>port</c> is not supplied the default of <c>7687</c> will be used.</param>
        /// <param name="authToken">Authentication to use, <see cref="AuthTokens" />.</param>
        /// <param name="action">
        /// Defines how to build a driver configuration <see cref="Config"/> using <see cref="ConfigBuilder"/>.
        /// If set to <c>null</c>, then no modification will be carried out on the build.
        /// As a result, a default config with default settings will be used <see cref="Config" /> when creating the new driver.
        /// </param>
        /// <returns>A new driver to the database instance specified by the <paramref name="uri"/>.</returns>
        public static IDriver Driver(Uri uri, IAuthToken authToken, Action <ConfigBuilder> action)
        {
            Throw.ArgumentNullException.IfNull(uri, nameof(uri));
            Throw.ArgumentNullException.IfNull(authToken, nameof(authToken));
            var config = ConfigBuilders.BuildConfig(action);

            var connectionSettings = new ConnectionSettings(uri, authToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  =
                new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(CreateDriver(uri, config, connectionFactory));
        }
Esempio n. 10
0
        public SocketConnection(Uri uri, ConnectionSettings connectionSettings, BufferSettings bufferSettings,
            IConnectionListener metricsListener = null, IDriverLogger logger = null)
        {
            _id = $"conn-{UniqueIdGenerator.GetId()}";
            _logger = new PrefixLogger(logger, FormatPrefix(_id));

            _client = new SocketClient(uri, connectionSettings.SocketSettings, bufferSettings, metricsListener, _logger);
            _authToken = connectionSettings.AuthToken;
            _userAgent = connectionSettings.UserAgent;
            Server = new ServerInfo(uri);

            _responseHandler = new MessageResponseHandler(_logger);
        }
Esempio n. 11
0
        public SocketClient(Uri uri, SocketSettings socketSettings, BufferSettings bufferSettings,
                            IConnectionListener connMetricsListener = null, ILogger logger = null, ITcpSocketClient socketClient = null)
        {
            _uri             = uri;
            _logger          = logger;
            _bufferSettings  = bufferSettings;
            _tcpSocketClient = socketClient ?? new TcpSocketClient(socketSettings, _logger);

            _connMetricsListener = connMetricsListener;
            if (_connMetricsListener != null)
            {
                _connEvent = new SimpleTimerEvent();
            }
        }
            public async void ShouldThrowIOExceptionIfFailedToReadOnHandshakeAsync()
            {
                var bufferSettings = new BufferSettings(Config.Default);

                var connMock = new Mock <ITcpSocketClient>();

                TcpSocketClientTestSetup.CreateReadStreamMock(connMock);
                TcpSocketClientTestSetup.CreateWriteStreamMock(connMock);

                var client = new SocketClient(FakeUri, null, bufferSettings, socketClient: connMock.Object);

                var ex = await Record.ExceptionAsync(() => client.ConnectAsync(new Dictionary <string, string>()));

                ex.Should().NotBeNull().And.BeOfType <IOException>();
            }
            public async Task ShouldConnectServerAsync()
            {
                var bufferSettings = new BufferSettings(Config.DefaultConfig);

                var connMock = new Mock <ITcpSocketClient>();

                TcpSocketClientTestSetup.CreateReadStreamMock(connMock, new byte[] { 0, 0, 0, 1 });
                TcpSocketClientTestSetup.CreateWriteStreamMock(connMock);

                var client = new SocketClient(FakeUri, null, bufferSettings, socketClient: connMock.Object);

                await client.StartAsync();

                // Then
                connMock.Verify(x => x.ConnectAsync(FakeUri), Times.Once);
            }
            public async Task ShouldConnectServerAsync()
            {
                var bufferSettings = new BufferSettings(Config.Default);
                var version        = new BoltProtocolVersion(4, 1);
                var connMock       = new Mock <ITcpSocketClient>();

                TcpSocketClientTestSetup.CreateReadStreamMock(connMock, PackStreamBitConverter.GetBytes(version.PackToInt()));
                TcpSocketClientTestSetup.CreateWriteStreamMock(connMock);

                PackStreamBitConverter.GetBytes((int)0x14);

                var client = new SocketClient(FakeUri, null, bufferSettings, socketClient: connMock.Object);

                await client.ConnectAsync(new Dictionary <string, string>());

                // Then
                connMock.Verify(x => x.ConnectAsync(FakeUri), Times.Once);
            }
Esempio n. 15
0
        private (IDriver, ConcurrentQueue<IPooledConnection>) SetupMonitoredDriver()
        {
            var configBuilder = Config.Builder
                .WithMetricsEnabled(true)
                .WithConnectionAcquisitionTimeout(TimeSpan.FromMinutes(5))
                .WithConnectionTimeout(Config.InfiniteInterval)
                .WithMaxConnectionPoolSize(100)
                .WithLogger(new StressTestLogger(_output, LoggingEnabled));
            _configure?.Invoke(configBuilder);
            var config = configBuilder.Build();

            var connectionSettings = new ConnectionSettings(_databaseUri, _authToken, config);
            var bufferSettings = new BufferSettings(config);
            var connectionFactory = new MonitoredPooledConnectionFactory(
                new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger));

            return ((Internal.Driver) GraphDatabase.CreateDriver(_databaseUri, config, connectionFactory),
                connectionFactory.Connections);
        }
Esempio n. 16
0
        private (IDriver, ConcurrentQueue <IPooledConnection>) SetupMonitoredDriver()
        {
            var config = new Config
            {
                MetricsEnabled = true,
                ConnectionAcquisitionTimeout = TimeSpan.FromMinutes(5),
                ConnectionTimeout            = Config.InfiniteInterval,
                MaxConnectionPoolSize        = 100,
                Logger = new StressTestLogger(_output, LoggingEnabled)
            };

            var connectionSettings = new ConnectionSettings(_authToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  = new MonitoredPooledConnectionFactory(
                new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger));

            return((Internal.Driver)GraphDatabase.CreateDriver(_databaseUri, config, connectionFactory),
                   connectionFactory.Connections);
        }
        private void SetupMonitoredDriver()
        {
            var config = new Config
            {
                MetricsFactory = new DefaultMetricsFactory(),
                ConnectionAcquisitionTimeout = TimeSpan.FromMinutes(5),
                ConnectionTimeout            = Config.InfiniteInterval,
                MaxConnectionPoolSize        = 100,
                DriverLogger = new TestDriverLogger(Output)
            };

            var connectionSettings = new ConnectionSettings(AuthToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  = new MonitoredPooledConnectionFactory(
                new PooledConnectionFactory(connectionSettings, bufferSettings, config.DriverLogger));

            _driver      = (Internal.Driver)GraphDatabase.CreateDriver(new Uri(RoutingServer), config, connectionFactory);
            _connections = connectionFactory.Connections;
            _metrics     = _driver.GetMetrics();
        }
 public SocketConnection(Uri uri, ConnectionSettings connectionSettings, BufferSettings bufferSettings,
                         IConnectionListener metricsListener = null, ILogger logger = null)
     : this(new SocketClient(uri, connectionSettings.SocketSettings, bufferSettings, metricsListener, logger),
            connectionSettings.AuthToken, connectionSettings.UserAgent, logger, new ServerInfo(uri))
 {
 }
 public override IMessageReader NewReader(Stream stream, BufferSettings bufferSettings,
                                          ILogger logger = null)
 {
     return(new MessageReader(stream, bufferSettings.DefaultReadBufferSize,
                              bufferSettings.MaxReadBufferSize, logger, BoltProtocolMessageFormat.V4));
 }
 public override IMessageWriter NewWriter(Stream writeStream, BufferSettings bufferSettings,
                                          ILogger logger = null)
 {
     return(new MessageWriter(writeStream, bufferSettings.DefaultWriteBufferSize,
                              bufferSettings.MaxWriteBufferSize, logger, BoltProtocolMessageFormat.V4));
 }
Esempio n. 21
0
 public ExportSettings(BufferSettings bufferSettings)
 {
     Buffer = bufferSettings;
 }
Esempio n. 22
0
 public IMessageReader NewReader(Stream stream, BufferSettings bufferSettings, IDriverLogger logger = null,
                                 bool ignored = true)
 {
     return(new MessageReader(stream, bufferSettings.DefaultReadBufferSize,
                              bufferSettings.MaxReadBufferSize, logger, BoltProtocolMessageFormat.V3));
 }
Esempio n. 23
0
 public IMessageWriter NewWriter(Stream writeStream, BufferSettings bufferSettings,
                                 IDriverLogger logger = null, bool ignored = true)
 {
     return(new MessageWriter(writeStream, bufferSettings.DefaultWriteBufferSize,
                              bufferSettings.MaxWriteBufferSize, logger, BoltProtocolMessageFormat.V3));
 }
Esempio n. 24
0
 public virtual IMessageWriter NewWriter(Stream writeStream, BufferSettings bufferSettings, ILogger logger = null)
 {
     return(new MessageWriter(writeStream, bufferSettings.DefaultWriteBufferSize, bufferSettings.MaxWriteBufferSize, logger, MessageFormat));
 }
Esempio n. 25
0
 public virtual IMessageReader NewReader(Stream stream, BufferSettings bufferSettings,
                                         ILogger logger = null)
 {
     return(new MessageReader(stream, bufferSettings.DefaultReadBufferSize, bufferSettings.MaxReadBufferSize, logger, MessageFormat));
 }
Esempio n. 26
0
 public virtual IMessageReader NewReader(Stream stream, BufferSettings bufferSettings,
                                         IDriverLogger logger = null)
 {
     return(new MessageReader(stream, bufferSettings.DefaultReadBufferSize,
                              bufferSettings.MaxReadBufferSize, logger, BoltProtocolMessageFormat.V1));
 }
        public static IBoltProtocol Create(int version, ITcpSocketClient tcpSocketClient, BufferSettings bufferSettings, ILogger logger = null)
        {
            switch (version)
            {
            case ProtocolVersion.Version1:
                return(new BoltProtocolV1(tcpSocketClient, bufferSettings, logger));

            case ProtocolVersion.NoVersion:
                throw new NotSupportedException(
                          "The Neo4j server does not support any of the protocol versions supported by this client. " +
                          "Ensure that you are using driver and server versions that are compatible with one another.");

            case ProtocolVersion.Http:
                throw new NotSupportedException(
                          "Server responded HTTP. Make sure you are not trying to connect to the http endpoint " +
                          $"(HTTP defaults to port 7474 whereas BOLT defaults to port {GraphDatabase.DefaultBoltPort})");

            default:
                throw new NotSupportedException(
                          "Protocol error, server suggested unexpected protocol version: " + version);
            }
        }