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); }
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(); }
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)); }
public string GetCurrentToken(ServerId serverId = null) { serverId = serverId ?? MasterSite.FQID.ServerId; var settings = LoginSettingsCache.GetLoginSettings(serverId); return(settings.Token); }
public SmartSearchStatusType GetStatus(Guid searchId) { LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id); SmartSearchStatus status = rcs.SmartSearchGetStatus(ls.Token, searchId); return(status.Status); }
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); } }
// 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(); }
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 ---"; } } }
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(); } }
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}"); } }
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" }); } }
public void CancelSearch(Guid searchId) { LoginSettings ls = LoginSettingsCache.GetLoginSettings(EnvironmentManager.Instance.MasterSite.ServerId.Id); rcs.SmartSearchCancel(ls.Token, searchId); }