private static ServerCommandServiceClient CreateWcfClient(LoginSettings loginSettings, Uri uri)
        {
            var binding  = GetBinding(loginSettings.IsBasicUser);
            var spn      = SpnFactory.GetSpn(uri);
            var endpoint = new EndpointAddress(uri, EndpointIdentity.CreateSpnIdentity(spn));
            var client   = new ServerCommandServiceClient(binding, endpoint);

            if (loginSettings.IsBasicUser)
            {
                client.ClientCredentials.UserName.UserName = "******" + loginSettings.NetworkCredential.UserName;
                client.ClientCredentials.UserName.Password = loginSettings.NetworkCredential.Password;

                // If it's basic user, you need to specify the certificate validation mode yourself
                client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication()
                {
                    CertificateValidationMode = X509CertificateValidationMode.None
                };
            }
            else
            {
                client.ClientCredentials.Windows.ClientCredential = LoginSettingsCache.GetNetworkCredential(EnvironmentManager.Instance.MasterSite.ServerId);
            }

            return(client);
        }
Exemple #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite);

            VideoOS.Platform.SDK.Environment.Login(ls.Uri, IntegrationId, IntegrationName, Version, ManufacturerName);
            dumpConfigurationUserControl1.FillContentAsync();
        }
Exemple #3
0
        public CreateChannelResult <T> CreateChannel <T>(ServerId serverId = null)
        {
            serverId = serverId ?? MasterSite.FQID.ServerId;
            var uri = LoginSettingsCache.GetLoginSettings(serverId).Uri;

            return(ChannelBuilder.BuildChannel <T>(uri, AuthType, _cc));
        }
Exemple #4
0
        public string GetCurrentToken(ServerId serverId = null)
        {
            serverId = serverId ?? MasterSite.FQID.ServerId;
            var settings = LoginSettingsCache.GetLoginSettings(serverId);

            return(settings.Token);
        }
Exemple #5
0
        public SmartSearchStatusType GetStatus(Guid searchId)
        {
            LoginSettings     ls     = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id);
            SmartSearchStatus status = rcs.SmartSearchGetStatus(ls.Token, searchId);

            return(status.Status);
        }
Exemple #6
0
        public Guid StartSearch(Item item, DateTime beginTime, DateTime endTime, int sensitivity, TimeSpan duration, String maskString, int maskHeight, int maskWidth)
        {
            Item   recorderItem    = item.GetParent();
            String recorderAddress = recorderItem.FQID.ServerId.Uri.ToString();

            String serverUri = String.Format("{0}RecorderCommandService/RecorderCommandService.asmx", recorderAddress);

            rcs.Url = serverUri;

            LoginSettings ls           = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id);
            TimeDuration  timeDuration = new TimeDuration()
            {
                MicroSeconds = Convert.ToInt64(duration.TotalMilliseconds * 1000)
            };
            Size size = new Size()
            {
                Height = maskHeight, Width = maskWidth
            };
            ImageMask imageMask = new ImageMask()
            {
                Mask = maskString, Size = size
            };

            return(rcs.SmartSearchStart(ls.Token, item.FQID.ObjectId, beginTime, endTime, sensitivity, timeDuration, imageMask, true, new Size()
            {
                Width = 320, Height = 200
            }));
        }
        public override void Init()
        {
            try
            {
                MessageCommunicationManager.Start(EnvironmentManager.Instance.MasterSite.ServerId);
                _messageCommunication = MessageCommunicationManager.Get(EnvironmentManager.Instance.MasterSite.ServerId);

                _messageCommunication.ConnectionStateChangedEvent += new EventHandler(_messageCommunication_ConnectionStateChangedEvent);
                _obj1 = _messageCommunication.RegisterCommunicationFilter(WhoAreOnlineResponseHandler, new VideoOS.Platform.Messaging.CommunicationIdFilter(MessageCommunication.WhoAreOnlineResponse));
                _obj2 = _messageCommunication.RegisterCommunicationFilter(NewEndPointHandler, new VideoOS.Platform.Messaging.CommunicationIdFilter(MessageCommunication.NewEndPointIndication));
                _obj3 = _messageCommunication.RegisterCommunicationFilter(EndPointTableChangedHandler, new VideoOS.Platform.Messaging.CommunicationIdFilter(MessageCommunication.EndPointTableChangedIndication));
                _obj4 = _messageCommunication.RegisterCommunicationFilter(ChatLineHandler, new VideoOS.Platform.Messaging.CommunicationIdFilter(MessageIdChatLine));

                LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite);
                _myName = ls.UserName;
                if (_myName.Contains("\\"))
                {
                    _myName = _myName.Split('\\')[1];
                }
                if (_messageCommunication.IsConnected)
                {
                    _messageCommunication.TransmitMessage(
                        new VideoOS.Platform.Messaging.Message(MessageCommunication.WhoAreOnlineRequest), null, null,
                        null);
                }
            } catch (Exception ex)
            {
                EnvironmentManager.Instance.ExceptionDialog("Chat.Init", ex);
            }
        }
Exemple #8
0
        // Initialize the Config API client
        private void InitializeClient()
        {
            LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite);

            _configApiClient.ServerAddress = EnvironmentManager.Instance.MasterSite.ServerId.ServerHostname;
            _configApiClient.ServerPort    = EnvironmentManager.Instance.MasterSite.ServerId.Serverport;
            _configApiClient.BasicUser     = ls.IsBasicUser;
            _configApiClient.Username      = EnvironmentManager.Instance.LoginNetworkCredential.UserName;
            _configApiClient.Password      = EnvironmentManager.Instance.LoginNetworkCredential.Password;
            _configApiClient.Domain        = EnvironmentManager.Instance.LoginNetworkCredential.Domain;
            _configApiClient.Initialize();
        }
Exemple #9
0
        public SearchResult GetSearchResult(Guid searchId, bool continueSearch)
        {
            LoginSettings     ls     = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id);
            SmartSearchResult result = rcs.SmartSearchGetResult(ls.Token, searchId, continueSearch);

            return(new SearchResult()
            {
                Time = result.ImageTime,
                Resolution = result.MotionAreas.Resolution,
                MotionAreas = result.MotionAreas.Areas
            });
        }
 private void OnTimerTick(object sender, EventArgs e)
 {
     if (_selectedItem != null)
     {
         LoginSettings loginSettings = LoginSettingsCache.GetLoginSettings(_selectedItem.FQID);
         if (loginSettings != null)
         {
             textBoxToken.Text = loginSettings.Token;
         }
         else
         {
             textBoxToken.Text = "--- token not found ---";
         }
     }
 }
Exemple #11
0
        public void Open()
        {
            VideoOS.Platform.SDK.Environment.Initialize();
            VideoOS.Platform.SDK.Environment.AddServer(_uri, _cc);
            VideoOS.Platform.SDK.Environment.Login(_uri);
            _loginSettings = LoginSettingsCache.GetLoginSettings(_uri.Host, _uri.Port);
            CurrentSite    = MasterSite;
            if (!IncludeChildSites)
            {
                return;
            }

            var stack = new Stack <Item>(MasterSite.GetChildren());

            while (stack.Count > 0)
            {
                var item = stack.Pop();
                AddSite(item.FQID.ServerId.Uri);
                item.GetChildren().ForEach(stack.Push);
            }
        }
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Console.WriteLine("Milestone SDK evidence lock demo (XProtect Corporate only)");
            Console.WriteLine("Creates 2 new evidence locks and retrieves them using ");
            Console.WriteLine("  1) MarkedDataGet");
            Console.WriteLine("  2) MarkedDataSearch");
            Console.WriteLine("And then deletes them again");
            Console.WriteLine("");

            // Initialize the SDK - must be done in stand alone
            VideoOS.Platform.SDK.Environment.Initialize();
            VideoOS.Platform.SDK.UI.Environment.Initialize();           // Initialize ActiveX references, e.g. usage of ImageViewerActiveX etc

            #region Connect to the server
            var loginForm = new VideoOS.Platform.SDK.UI.LoginDialog.DialogLoginForm(SetLoginResult, IntegrationId, IntegrationName, Version, ManufacturerName);
            Application.Run(loginForm);                                                         // Show and complete the form and login to server
            if (!_connected)
            {
                Console.WriteLine("Failed to connect or login");
                Console.ReadKey();
                return;
            }

            if (EnvironmentManager.Instance.MasterSite.ServerId.ServerType != ServerId.CorporateManagementServerType)
            {
                Console.WriteLine("Evidence locks are not supported on this product.");
                Console.ReadKey();
                return;
            }
            #endregion

            #region Select a camera
            Item selectedItem = null;
            var  form         = new VideoOS.Platform.UI.ItemPickerForm
            {
                KindFilter = Kind.Camera,
                AutoAccept = true
            };
            form.Init(Configuration.Instance.GetItems());

            if (form.ShowDialog() == DialogResult.OK)
            {
                selectedItem = form.SelectedItem;
            }

            if (selectedItem == null)
            {
                Console.WriteLine("Failed to pick a camera");
                Console.ReadKey();
                return;
            }
            if (selectedItem.FQID.ServerId.ServerType != ServerId.CorporateRecordingServerType)
            {
                Console.WriteLine("Evidence locks are not supported on this product.");
                Console.ReadKey();
                return;
            }

            #endregion

            var loginSettings = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite);

            using (var client = CreateWcfClient(loginSettings))
            {
                // Get token needed for calls to manipulate evidence locks.
                var token = loginSettings.Token;
                var devicesToCreateLockOn = new[] { selectedItem.FQID.ObjectId };

                DateTime timeNow = DateTime.UtcNow;

                #region create first evidence lock

                Console.WriteLine("Creating the first evidence lock");

                var timeBegin1    = timeNow.AddMinutes(-60);
                var markedDataId1 = Guid.NewGuid();
                try {
                    var markedDataCreateResult = client.MarkedDataCreate(
                        token,
                        markedDataId1,
                        devicesToCreateLockOn,
                        timeBegin1,
                        timeBegin1.AddMinutes(5),
                        timeBegin1.AddMinutes(10),
                        string.Format("MyEvidenceLock-{0}", timeBegin1.ToLongTimeString()),
                        string.Format("AutoEvidenceLock-{0}", timeBegin1.ToLongTimeString()),
                        string.Format("AutoEvidenceLock-{0} set for a duration of 10 minutes", timeBegin1.ToLongTimeString()),
                        2,                 // 2 is used for evidence locks
                        true,              // This must be set to true to actual lock data!
                        DateTime.MaxValue, // We never expire the the evidence lock
                        new RetentionOption {
                        RetentionOptionType = RetentionOptionType.Indefinite, RetentionUnits = -1
                    }
                        );
                    Console.WriteLine("{0} when creating evidence lock 1 with ID = {1}", markedDataCreateResult.Status, markedDataCreateResult.MarkedData.Id);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("EvidenceLock 1 failed: " + ex.Message);
                    Console.WriteLine("Press any Key");
                    Console.ReadKey();
                    return;
                }

                #endregion

                #region Create a second evidence lock

                Console.WriteLine("Creating a second evidence lock - 20 minutes after the first evidence lock");
                DateTime timeBegin2    = timeBegin1.AddMinutes(20);
                var      markedDataId2 = Guid.NewGuid();
                try
                {
                    var markedDataCreateResult = client.MarkedDataCreate(
                        token,
                        markedDataId2,
                        devicesToCreateLockOn,
                        timeBegin2,
                        timeBegin2.AddMinutes(5),
                        timeBegin2.AddMinutes(10),
                        string.Format("MyEvidenceLock-{0}", timeBegin2.ToLongTimeString()),
                        string.Format("AutoEvidenceLock-{0}", timeBegin2.ToLongTimeString()),
                        string.Format("AutoEvidenceLock-{0} set for a duration of 10 minutes", timeBegin2.ToLongTimeString()),
                        2,                 // 2 is used for evidence locks
                        true,              // This must be set to true to actual lock data!
                        DateTime.MaxValue, // We never expire the the evidence lock
                        new RetentionOption {
                        RetentionOptionType = RetentionOptionType.Indefinite, RetentionUnits = -1
                    }
                        );

                    Console.WriteLine("{0} when creating evidence lock 2 with ID = {1}", markedDataCreateResult.Status, markedDataCreateResult.MarkedData.Id);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("EvidenceLock 2 failed: " + ex.Message);
                    Console.WriteLine("Press any Key");
                    Console.ReadKey();
                    return;
                }


                #endregion

                #region MarkedDataSearch

                Console.WriteLine("Searching for evidence locks ...");
                var searchResult = client.MarkedDataSearch(
                    token,
                    devicesToCreateLockOn, // use empty array to search on all devices
                    null,                  // Use null to not search for text
                    null,                  // Use null to search for all users
                    DateTime.MinValue.ToUniversalTime(),
                    DateTime.MinValue.ToUniversalTime(),
                    DateTime.UtcNow.AddHours(-1),
                    DateTime.UtcNow.AddSeconds(-10),
                    DateTime.MinValue.ToUniversalTime(),
                    DateTime.MinValue.ToUniversalTime(),
                    DateTime.MinValue.ToUniversalTime(),
                    DateTime.MinValue.ToUniversalTime(),
                    0,
                    100,
                    SortOrderOption.CreateTime,
                    true
                    );

                Console.WriteLine("-> Found {0} evidence lock{1}", searchResult.Length, searchResult.Length == 1 ? string.Empty : "s");
                if (searchResult.Length > 0)
                {
                    int counter = 1;
                    foreach (var markedData in searchResult)
                    {
                        Console.WriteLine("{0}:", counter);
                        PrintMarkedData(markedData);
                        counter++;
                    }
                }
                Console.WriteLine("");

                #endregion

                #region MarkedDataGet

                // Get first created evidence lock
                Console.WriteLine(
                    "Looking for the first evidence lock using MarkedDataGet  (finding the first of the 2 newly created)");
                var markedDataGet = client.MarkedDataGet(token, markedDataId1);
                if (markedDataGet != null)
                {
                    Console.WriteLine("-> An evidence lock was found");
                    PrintMarkedData(markedDataGet);
                }
                else
                {
                    Console.WriteLine("Sorry no evidence lock found");
                }
                Console.WriteLine("");

                #endregion

                #region Deleting evidence locks

                Console.WriteLine("Deleting the two newly created evidence locks");
                var deleteResult = client.MarkedDataDelete(token, new[] { markedDataId1, markedDataId2 });
                foreach (var markedDataResult in deleteResult)
                {
                    Console.WriteLine("Deleting marked data {0} was a {1}", markedDataResult.MarkedData.Id, markedDataResult.Status);
                }

                #endregion

                Console.WriteLine("");
                Console.WriteLine("Press any key");
                Console.Out.Flush();
                Console.ReadKey();
            }
        }
Exemple #13
0
        private static void PrepareToLogin(string serverName, string userName, string password)
        {
            ServerName        = serverName;
            milestoneUserName = userName;
            milestonePassword = password;

            if (string.IsNullOrEmpty(ServerName))
            {
                string msg = "Server address cannot be emnpty";
                Program.Log.Warn(msg);
                Console.WriteLine(msg);
                return;
            }

            Uri               uri    = null;
            CredentialCache   cc     = null;
            NetworkCredential nc     = null;
            bool              logged = false;

            if (!string.IsNullOrEmpty(milestoneUserName))
            {
                // You need this to apply Enterprise "basic" credentials.
                uri = new UriBuilder(ServerName).Uri;
                cc  = Util.BuildCredentialCache(uri, milestoneUserName, milestonePassword, "Negotiate");//"Basic" : "Negotiate"
                SDKEnvironment.AddServer(uri, cc);
                // use the same credentiel as when logge on to the Management Server
                logged = Login(uri);
            }

            if (!logged)
            {
                try
                {
                    uri = new UriBuilder(ServerName).Uri;
                }
                catch (Exception ex)
                {
                    Program.Log.Error(ServerName, ex);
                    Program.Log.Error(ServerName, ex.InnerException);
                    return;
                }

                // This will reuse the Windows credentials you are logged in with
                nc = CredentialCache.DefaultNetworkCredentials;
                SDKEnvironment.AddServer(uri, nc);

                //Pick up the login settings from the management server to be used when logging into the Recording Server.
                loginSettings = LoginSettingsCache.GetLoginSettings(ServerName);

                logged = Login(uri);
            }

            if (!logged)
            {
                uri = new Uri($"http://{Configuration.Instance.ServerFQID.ServerId.ServerHostname}:{Configuration.Instance.ServerFQID.ServerId.Serverport}/");
                SDKEnvironment.AddServer(uri, nc);
                logged = Login(uri);
            }

            if (!logged && loginSettings != null)
            {
                SDKEnvironment.AddServer(uri, nc);
                logged = Login(loginSettings.Uri);
            }

            if (!logged)
            {
                Program.Log.Error("Doesn't logged in.");
                return;
            }

            try
            {
                if (!SDKEnvironment.IsServerConnected(uri))
                {
                    string msg = $"Failed to connect to {uri}";
                    Program.Log.Warn(msg);
                    return;
                }

                scs          = new ServerCommandService();
                scs.Timeout *= 3;                                       // The default is 100,000 milliseconds.

                // use the same credentiel as when logge on to the Management Server
                if (cc != null)
                {
                    scs.Credentials = cc;
                }
                else if (nc != null)
                {
                    scs.Credentials = nc;
                }

                connectedToMilestone = true;
                List <Item> items = Configuration.Instance.GetItems();
                EnumerateElementChildren(items, AllCameras);
                ProductCode = EnvironmentManager.Instance.SystemLicense.ProductCode;
                ServerId    = Configuration.Instance.ServerFQID.ServerId.Id;
            }
            catch (Exception ex)
            {
                Program.Log.Error($"Internal error connecting to: {uri.DnsSafeHost}", ex);
            }

            if (loginSettings != null)
            {
                Token = loginSettings.Token;
            }

            if (connectedToMilestone)
            {
                try
                {
                    string           path             = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                    MilestoneVersion milestoneVersion = new MilestoneVersion();
                    milestoneVersion.Connection = connectedToMilestone;

                    File.WriteAllText($"{path}\\Milestone.json", JsonHelper.FromClass(milestoneVersion));
                }
                catch (Exception ex)
                {
                    Program.Log.Error(null, ex);
                }
                scs.Url = $"{ServerName}ServerAPI/ServerCommandService.asmx";
                string msg = $"Connected to Milestone server: {ServerName}";

                MilestoneInfo();

                Console.WriteLine(msg);
                Program.Log.Info(msg);
            }
            else
            {
                Console.WriteLine($"Failed to connect to {ServerName}");
            }
        }
Exemple #14
0
        private async Task <LoginResult> InitAndLogin(Uri uri, NetworkCredential nc = null)
        {
            if (nc == null)
            {
                _currentUserAuth = true;
            }
            VideoOS.Platform.SDK.Environment.Initialize();
            VideoOS.Platform.SDK.Environment.AddServer(uri, nc ?? CredentialCache.DefaultNetworkCredentials);

            try
            {
                await Task.Run(() => VideoOS.Platform.SDK.Environment.Login(uri)).ConfigureAwait(false);
            }
            catch (VideoOS.Platform.SDK.Platform.InvalidCredentialsMIPException ex)
            {
                return(new LoginResult
                {
                    Success = false,
                    Message = "Login failed. Invalid username or password.",
                    Exception = ex
                });
            }
            catch (VideoOS.Platform.SDK.Platform.ServerNotFoundMIPException ex)
            {
                return(new LoginResult
                {
                    Success = false,
                    Message = "Login failed. Server not found.",
                    Exception = ex
                });
            }
            catch (VideoOS.Platform.SDK.Platform.LoginFailedInternalMIPException ex)
            {
                return(new LoginResult
                {
                    Success = false,
                    Message = "Login failed. Internal error on Management Server.",
                    Exception = ex
                });
            }
            catch (Exception ex)
            {
                return(new LoginResult
                {
                    Success = false,
                    Message = $"An error occurred during login. Error \"{ex.Message}\".",
                    Exception = ex
                });
            }
            if (VideoOS.Platform.SDK.Environment.IsLoggedIn(uri))
            {
                _loginSettings = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite);
                return(new LoginResult
                {
                    Success = true,
                    Message = "Logged in"
                });
            }
            else
            {
                return(new LoginResult
                {
                    Success = false,
                    Message = "Not logged in"
                });
            }
        }
Exemple #15
0
        public void CancelSearch(Guid searchId)
        {
            LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id);

            rcs.SmartSearchCancel(ls.Token, searchId);
        }