Пример #1
0
        public Task GetSetupParameters()
        {
            AssertOnlyInSetupMode();
            var setupParameters = SetupParameters.Get(ServerStore);

            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
                using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    writer.WriteStartObject();
                    writer.WritePropertyName(nameof(SetupParameters.FixedServerPortNumber));

                    if (setupParameters.FixedServerPortNumber.HasValue)
                    {
                        writer.WriteInteger(setupParameters.FixedServerPortNumber.Value);
                    }
                    else
                    {
                        writer.WriteNull();
                    }

                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.IsDocker));
                    writer.WriteBool(setupParameters.IsDocker);

                    writer.WriteEndObject();
                }

            return(Task.CompletedTask);
        }
Пример #2
0
        public async Task GetSetupParameters()
        {
            AssertOnlyInSetupMode();
            var setupParameters = await SetupParameters.Get(ServerStore);

            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
                await using (var writer = new AsyncBlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    writer.WriteStartObject();
                    writer.WritePropertyName(nameof(SetupParameters.FixedServerPortNumber));

                    if (setupParameters.FixedServerPortNumber.HasValue)
                    {
                        writer.WriteInteger(setupParameters.FixedServerPortNumber.Value);
                    }
                    else
                    {
                        writer.WriteNull();
                    }

                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.IsDocker));
                    writer.WriteBool(setupParameters.IsDocker);
                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.IsAzure));
                    writer.WriteBool(setupParameters.IsAzure);
                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.IsAws));
                    writer.WriteBool(setupParameters.IsAws);
                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.RunningOnPosix));
                    writer.WriteBool(setupParameters.RunningOnPosix);
                    writer.WriteComma();

                    writer.WritePropertyName(nameof(SetupParameters.RunningOnMacOsx));
                    writer.WriteBool(setupParameters.RunningOnMacOsx);

                    writer.WriteEndObject();
                }
        }
Пример #3
0
        public Task GetIps()
        {
            AssertOnlyInSetupMode();

            NetworkInterface[] netInterfaces = null;
            try
            {
                netInterfaces = NetworkInterface.GetAllNetworkInterfaces();
            }
            catch (Exception)
            {
                // https://github.com/dotnet/corefx/issues/26476
                // If GetAllNetworkInterfaces is not supported, we'll just return the default: 127.0.0.1
            }


            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
                using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    writer.WriteStartObject();
                    writer.WritePropertyName("MachineName");
                    writer.WriteString(Environment.MachineName);
                    writer.WriteComma();
                    writer.WritePropertyName("NetworkInterfaces");
                    writer.WriteStartArray();
                    var first = true;

                    List <string> ips;
                    if (netInterfaces != null)
                    {
                        foreach (var netInterface in netInterfaces)
                        {
                            ips = netInterface.GetIPProperties().UnicastAddresses
                                  .Where(x =>
                            {
                                // filter 169.254.xxx.xxx out, they are not meaningful for binding
                                if (x.Address.AddressFamily != AddressFamily.InterNetwork)
                                {
                                    return(false);
                                }
                                var addressBytes = x.Address.GetAddressBytes();

                                // filter 127.xxx.xxx.xxx out, in docker only
                                if (SetupParameters.Get(ServerStore).IsDocker&& addressBytes[0] == 127)
                                {
                                    return(false);
                                }

                                return(addressBytes[0] != 169 || addressBytes[1] != 254);
                            })
                                  .Select(addr => addr.Address.ToString())
                                  .ToList();

                            // If there's a hostname in the server url, add it to the list
                            if (SetupParameters.Get(ServerStore).DockerHostname != null && ips.Contains(SetupParameters.Get(ServerStore).DockerHostname) == false)
                            {
                                ips.Add(SetupParameters.Get(ServerStore).DockerHostname);
                            }

                            if (first == false)
                            {
                                writer.WriteComma();
                            }
                            first = false;

                            writer.WriteStartObject();
                            writer.WritePropertyName("Name");
                            writer.WriteString(netInterface.Name);
                            writer.WriteComma();
                            writer.WritePropertyName("Description");
                            writer.WriteString(netInterface.Description);
                            writer.WriteComma();
                            writer.WriteArray("Addresses", ips);
                            writer.WriteEndObject();
                        }
                    }
                    else
                    {
                        // https://github.com/dotnet/corefx/issues/26476
                        // If GetAllNetworkInterfaces is not supported, we'll just return the default: 127.0.0.1
                        ips = new List <string>
                        {
                            "127.0.0.1"
                        };
                        writer.WriteStartObject();
                        writer.WritePropertyName("Name");
                        writer.WriteString("Loopback Interface");
                        writer.WriteComma();
                        writer.WritePropertyName("Description");
                        writer.WriteString("Loopback Interface");
                        writer.WriteComma();
                        writer.WriteArray("Addresses", ips);
                        writer.WriteEndObject();
                    }


                    writer.WriteEndArray();
                    writer.WriteEndObject();
                }

            return(Task.CompletedTask);
        }
Пример #4
0
        public Task GetIps()
        {
            AssertOnlyInSetupMode();

            using (ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context))
                using (var writer = new BlittableJsonTextWriter(context, ResponseBodyStream()))
                {
                    writer.WriteStartObject();
                    writer.WritePropertyName("MachineName");
                    writer.WriteString(Environment.MachineName);
                    writer.WriteComma();
                    writer.WritePropertyName("NetworkInterfaces");
                    writer.WriteStartArray();
                    var first = true;
                    foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces())
                    {
                        var ips = netInterface.GetIPProperties().UnicastAddresses
                                  .Where(x =>
                        {
                            // filter 169.254.xxx.xxx out, they are not meaningful for binding
                            if (x.Address.AddressFamily != AddressFamily.InterNetwork)
                            {
                                return(false);
                            }
                            var addressBytes = x.Address.GetAddressBytes();

                            // filter 127.xxx.xxx.xxx out, in docker only
                            if (SetupParameters.Get(ServerStore).IsDocker&& addressBytes[0] == 127)
                            {
                                return(false);
                            }

                            return(addressBytes[0] != 169 || addressBytes[1] != 254);
                        })
                                  .Select(addr => addr.Address.ToString())
                                  .ToList();

                        // If there's a hostname in the server url, add it to the list
                        if (SetupParameters.Get(ServerStore).DockerHostname != null && ips.Contains(SetupParameters.Get(ServerStore).DockerHostname) == false)
                        {
                            ips.Add(SetupParameters.Get(ServerStore).DockerHostname);
                        }

                        if (first == false)
                        {
                            writer.WriteComma();
                        }
                        first = false;

                        writer.WriteStartObject();
                        writer.WritePropertyName("Name");
                        writer.WriteString(netInterface.Name);
                        writer.WriteComma();
                        writer.WritePropertyName("Description");
                        writer.WriteString(netInterface.Description);
                        writer.WriteComma();
                        writer.WriteArray("Addresses", ips);
                        writer.WriteEndObject();
                    }

                    writer.WriteEndArray();
                    writer.WriteEndObject();
                }

            return(Task.CompletedTask);
        }