コード例 #1
0
        private void OnBootstrapStart(string server, ServiceEventMessage message)
        {
            BootstrapServer bootstrap = (BootstrapServer)message.Parameters["BootstrapServer"];

            DataAccessFactory.Configuration.SaveBootstrapServer(bootstrap, TObjectState.Add);
            BusinessLogicFactory.ServiceMessages.AckMessage(message);
        }
コード例 #2
0
        public BootstrapServer GetBootstrapServer(int organisationID)
        {
            BootstrapServer result = DataAccessFactory.Configuration.GetBootstrapServer(organisationID);

            if (result == null)
            {
                result = AllocateBootstrapServer(organisationID);
            }
            return(result);
        }
コード例 #3
0
        public List <BootstrapServer> GetBootstrapServers()
        {
            List <BootstrapServer> result = _CachedBootstrapServers;

            if (result == null)
            {
                lock (this)
                {
                    result = _CachedBootstrapServers;
                    if (result == null)
                    {
                        result = new List <BootstrapServer>();
                        IMongoDatabase database = GetDatabase(DATABASE_NAME, false);
                        IMongoCollection <BsonDocument> collection  = database.GetCollection <BsonDocument>("BootstrapServer");
                        IAsyncCursor <BsonDocument>     mongoCursor = collection.FindSync(new BsonDocument());
                        while (mongoCursor.MoveNext())
                        {
                            foreach (BsonDocument item in mongoCursor.Current)
                            {
                                BootstrapServer bootstrapServer = new BootstrapServer();
                                bootstrapServer.Url = BsonHelper.GetString(item, "_id");
                                if (item.Contains("ServerIdentities"))
                                {
                                    BsonArray array = item["ServerIdentities"].AsBsonArray;
                                    foreach (BsonValue arrayItem in array)
                                    {
                                        BsonDocument pskIdentityDoc = arrayItem.AsBsonDocument;
                                        if (pskIdentityDoc != null)
                                        {
                                            PSKIdentity pskIdentity = new PSKIdentity();
                                            pskIdentity.Identity = BsonHelper.GetString(pskIdentityDoc, "_id");
                                            pskIdentity.Secret   = BsonHelper.GetString(pskIdentityDoc, "Secret");
                                            bootstrapServer.AddServerIdentity(pskIdentity);
                                        }
                                    }
                                }
                                if (item.Contains("ServerCertificate"))
                                {
                                    BsonDocument serverCertificateDoc = item["ServerCertificate"].AsBsonDocument;
                                    if (serverCertificateDoc != null)
                                    {
                                        bootstrapServer.ServerCertificate = new Certificate();
                                        bootstrapServer.ServerCertificate.CertificateFormat = (TCertificateFormat)BsonHelper.GetInt32(serverCertificateDoc, "_id");
                                        bootstrapServer.ServerCertificate.RawCertificate    = BsonHelper.GetString(serverCertificateDoc, "RawCertificate");
                                    }
                                }
                                result.Add(bootstrapServer);
                            }
                        }
                        _CachedBootstrapServers = result;
                    }
                }
            }
            return(result);
        }
コード例 #4
0
        public void AllocateBootstrapServer(int organisationID, BootstrapServer bootstrapServer)
        {
            IMongoDatabase database = GetDatabase(DATABASE_NAME, true);
            IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("OrganisationBootstrapServer");
            FilterDefinition <BsonDocument> query      = Builders <BsonDocument> .Filter.Eq("_id", organisationID);

            BsonDocument doc = new BsonDocument();

            BsonHelper.SetValue(doc, "_id", organisationID);
            BsonHelper.SetValue(doc, "Url", bootstrapServer.Url);
            UpdateOptions options = new UpdateOptions();

            options.IsUpsert = true;
            collection.ReplaceOne(query, doc, options);
        }
コード例 #5
0
        private BootstrapServer AllocateBootstrapServer(int organisationID)
        {
            BootstrapServer        result           = null;
            List <BootstrapServer> bootstrapServers = DataAccessFactory.Configuration.GetBootstrapServers();

            if (bootstrapServers.Count > 0)
            {
                int index;
                lock (this)
                {
                    index = _BootstrapServerIndex = (_BootstrapServerIndex + 1) % bootstrapServers.Count;
                }
                result = bootstrapServers[index];
                DataAccessFactory.Configuration.AllocateBootstrapServer(organisationID, result);
            }
            return(result);
        }
コード例 #6
0
        public BootstrapServer GetBootstrapServer(int organisationID)
        {
            BootstrapServer result   = null;
            IMongoDatabase  database = GetDatabase(DATABASE_NAME, false);
            IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("OrganisationBootstrapServer");
            BsonDocument doc = collection.Find(Builders <BsonDocument> .Filter.Eq("_id", organisationID)).FirstOrDefault();

            if (doc != null)
            {
                string url = BsonHelper.GetString(doc, "Url");
                List <BootstrapServer> bootstrapServers = GetBootstrapServers();
                foreach (BootstrapServer item in bootstrapServers)
                {
                    if (string.Compare(url, item.Url, true) == 0)
                    {
                        result = item;
                        break;
                    }
                }
            }
            return(result);
        }
コード例 #7
0
        public void SaveBootstrapServer(BootstrapServer bootstrapServer, TObjectState state)
        {
            IMongoDatabase database = GetDatabase(DATABASE_NAME, true);
            IMongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("BootstrapServer");
            FilterDefinition <BsonDocument> query      = Builders <BsonDocument> .Filter.Eq("_id", bootstrapServer.Url);

            if ((state == TObjectState.Add) || (state == TObjectState.Update))
            {
                BsonDocument doc = new BsonDocument();
                BsonHelper.SetValue(doc, "_id", bootstrapServer.Url);
                if (bootstrapServer.ServerIdentities != null && bootstrapServer.ServerIdentities.Count > 0)
                {
                    BsonArray array = new BsonArray();
                    foreach (PSKIdentity pskIdentity in bootstrapServer.ServerIdentities)
                    {
                        BsonDocument pskIdentityDoc = new BsonDocument();
                        BsonHelper.SetValue(pskIdentityDoc, "_id", pskIdentity.Identity);
                        BsonHelper.SetValue(pskIdentityDoc, "Secret", pskIdentity.Secret);
                        array.Add(pskIdentityDoc);
                    }
                    doc.Add("ServerIdentities", array);
                }
                if (bootstrapServer.ServerCertificate != null)
                {
                    BsonDocument serverCertificateDoc = new BsonDocument();
                    BsonHelper.SetValue(serverCertificateDoc, "_id", (int)bootstrapServer.ServerCertificate.CertificateFormat);
                    BsonHelper.SetValue(serverCertificateDoc, "RawCertificate", bootstrapServer.ServerCertificate.RawCertificate);
                    doc.Add("ServerCertificate", serverCertificateDoc);
                }
                UpdateOptions options = new UpdateOptions();
                options.IsUpsert = true;
                collection.ReplaceOne(query, doc, options);
            }
            else if (state == TObjectState.Delete)
            {
                collection.DeleteOne(query);
            }
            BroadcastTableChange("BootstrapServer", string.Empty);
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: CreatorDev/DeviceServer
        public static void Main(string[] args)
        {
            try
            {
                int workerThreads;
                int completionPortThreads;
                System.Threading.ThreadPool.GetMinThreads(out workerThreads, out completionPortThreads);
                if (workerThreads < 16)
                {
                    workerThreads = 16;
                    System.Threading.ThreadPool.SetMinThreads(workerThreads, completionPortThreads);
                }

                IConfigurationBuilder builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddEnvironmentVariables()
                    .AddCommandLine(args);

                IConfigurationRoot configuration = builder.Build();
                ServiceConfiguration.LoadConfig(configuration.GetSection("ServiceConfiguration"));

                int port = 15683;
                bool secureOnly = true;
                IConfigurationSection sectionBootstrap = configuration.GetSection("LWM2MBootstrap");
                if (sectionBootstrap != null)
                {
                    IConfigurationSection sectionPort = sectionBootstrap.GetSection("Port");
                    if (sectionPort != null)
                    {
                        if (!int.TryParse(sectionPort.Value, out port))
                            port = 15683;
                    }
                    IConfigurationSection sectionSecure = sectionBootstrap.GetSection("SecureOnly");
                    if (sectionSecure != null)
                    {
                        if (!bool.TryParse(sectionSecure.Value, out secureOnly))
                            secureOnly = true;
                    }
                }

                Version version = Assembly.GetExecutingAssembly().GetName().Version;
                Console.Write("LWM2M Bootstrap (");
                Console.Write(version.ToString());
                Console.WriteLine(")");

                if (ServiceConfiguration.ExternalUri == null)
                {
                    ServiceConfiguration.ExternalUri = new Uri(string.Concat("coaps://", ServiceConfiguration.Hostname, ":", (port+1).ToString()));
                }

                ServiceConfiguration.DisplayConfig();

                BusinessLogicFactory.Initialise();
                BootstrapServer bootstrapServer = new BootstrapServer();
                //bootstrapServer.PSKIdentities.LoadFromFile("PSKIdentities.xml");
                bootstrapServer.Port = port;
                bootstrapServer.SecureOnly = secureOnly;
                bootstrapServer.Start();

                ServiceEventMessage message = new ServiceEventMessage();
                Imagination.Model.BootstrapServer bootstrap = new Imagination.Model.BootstrapServer();
                bootstrap.Url = ServiceConfiguration.ExternalUri.ToString();
                //PSKIdentity pskIdentity = new PSKIdentity();
                //pskIdentity.Identity = "Test1";
                //pskIdentity.Secret = "TestSecret";
                //bootstrap.AddServerIdentity(pskIdentity);
                message.AddParameter("BootstrapServer", bootstrap);
                BusinessLogicFactory.ServiceMessages.Publish("Bootstrap.Start", message, TMessagePublishMode.Confirms);
                _ShutdownEvent = new ManualResetEvent(false);
                Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
                {
                    _ShutdownEvent.Set();
                    e.Cancel = true;
                };
                Console.Write("Listening on port ");
                Console.WriteLine(port.ToString());
                Console.WriteLine("Press Ctrl+C to stop the server.");
                _ShutdownEvent.WaitOne();
                Console.WriteLine("Exiting.");
                bootstrapServer.Stop();
                BusinessLogicFactory.ServiceMessages.Stop();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }