private string GetDevicePack(RecordingServer recorder) { try { var rkey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, recorder.HostName); var subkey = rkey.OpenSubKey(@"SOFTWARE\WOW6432Node\VideoOS\DeviceDrivers"); return(subkey?.GetValue("VersionC")?.ToString()); } catch (Exception ex) { return("Unknown"); } }
private MicInfo ConvertToDto(Microphone microphone, XProtectHelper xprotect) { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, microphone.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); return(new MicInfo() { Enabled = microphone.Enabled, ReadOnlyId = new Guid(microphone.Id), Name = microphone.DisplayName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = microphone.Channel, ReadOnlyHardwareName = hardware.DisplayName, RecordingEnabled = microphone.RecordingEnabled }); }
private SpeakerInfo ConvertToDto(Speaker speaker, XProtectHelper xprotect) { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, speaker.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); return(new SpeakerInfo { Enabled = speaker.Enabled, ReadOnlyId = new Guid(speaker.Id), Name = speaker.DisplayName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = speaker.Channel, ReadOnlyHardwareName = hardware.DisplayName, RecordingEnabled = speaker.RecordingEnabled }); }
private RecorderInfo ConvertRecorderToRecorderInfo(RecordingServer recorder, XProtectHelper xprotect) { var ms = new ManagementServer(recorder.ServerId); return(new RecorderInfo() { ReadOnlyId = new Guid(recorder.Id), Name = recorder.DisplayName, ReadOnlyVersion = GetRecorderVersion(recorder), ReadOnlyDevicePack = GetDevicePack(recorder), ReadOnlyHostName = recorder.HostName, ReadOnlyManagementServer = ms.DisplayName, ReadOnlyPort = recorder.PortNumber, ReadOnlyTimeZoneName = recorder.TimeZoneName }); }
private MetadataInfo ConvertToDto(Metadata metaData, XProtectHelper xprotect) { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, metaData.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); return(new MetadataInfo { Enabled = metaData.Enabled, ReadOnlyId = new Guid(metaData.Id), Name = metaData.DisplayName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = metaData.Channel, ReadOnlyHardwareName = hardware.DisplayName, RecordingEnabled = metaData.RecordingEnabled }); }
private CameraInfo ConvertCameraToCameraInfo(Camera camera, XProtectHelper xprotect) { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, camera.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); var driver = HardwareDriverCacheHelper.GetDriver(hardware, recordingServer); return(new CameraInfo() { Enabled = camera.Enabled, ReadOnlyId = new Guid(camera.Id), Name = camera.DisplayName, ReadOnlyResolution = GetDefaultStreamResolution(camera), ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = camera.Channel, ReadOnlyHardwareName = hardware.DisplayName, RecordingEnabled = camera.RecordingEnabled, ReadOnlyDriverName = driver?.DisplayName, ReadOnlyDriverNumber = driver?.Number ?? -1 }); }
private static async Task <HardwareInfo> ConvertHardwareToHardwareInfo(Hardware hardware, XProtectHelper xprotect) { var password = xprotect.GetPasswordAsync(hardware); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); var driver = HardwareDriverCacheHelper.GetDriver(hardware, recordingServer); return(new HardwareInfo() { Address = hardware.Address, Enabled = hardware.Enabled, ReadOnlyId = new Guid(hardware.Id), ReadOnlyMac = xprotect.GetMacAddress(hardware), Name = hardware.DisplayName, Password = await password, UserName = hardware.UserName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyDriverName = driver?.DisplayName, ReadOnlyDriverNumber = driver?.Number ?? -1 }); }
public static HardwareDriver GetDriver(Hardware hardware, RecordingServer recorder) { var hardwareId = new Guid(hardware.Id); HardwareDriver driver = null; lock (DriverCache) { if (DriverCache.ContainsKey(hardwareId)) { driver = DriverCache[hardwareId]; } else { driver = recorder.HardwareDriverFolder.HardwareDrivers.FirstOrDefault(d => d.Path == hardware.HardwareDriverPath); DriverCache[hardwareId] = driver; } } return(driver); }
private string GetRecorderVersion(RecordingServer recorder) { try { var localPath = Service.GetImagePath("Milestone XProtect Recording Server", recorder.HostName); var match = Regex.Match(localPath, @"^(?<drive>\w):\\(?<path>.*)"); if (!match.Success) { return(null); } var uncPath = $@"\\{recorder.HostName}\{match.Groups["drive"].Value}$\{match.Groups["path"].Value}"; var fileInfo = FileVersionInfo.GetVersionInfo(uncPath); return($"{fileInfo.ProductMajorPart}.{fileInfo.ProductMinorPart}.{fileInfo.ProductBuildPart}.{fileInfo.ProductPrivatePart}"); } catch (Exception ex) { return("Unknown"); } }
private object ConvertToDto(object io, XProtectHelper xprotect) { switch (io) { case InputEvent input: { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, input.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); return(new InputInfo { Enabled = input.Enabled, ReadOnlyId = new Guid(input.Id), Name = input.DisplayName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = input.Channel, ReadOnlyHardwareName = hardware.DisplayName }); } case Output output: { var hardware = new Hardware(Configuration.Instance.ServerFQID.ServerId, output.ParentItemPath); var recordingServer = new RecordingServer(Configuration.Instance.ServerFQID.ServerId, hardware.ParentItemPath); return(new OutputInfo { Enabled = output.Enabled, ReadOnlyId = new Guid(output.Id), Name = output.DisplayName, ReadOnlyRecordingServer = recordingServer.DisplayName, ReadOnlyChannel = output.Channel, ReadOnlyHardwareName = hardware.DisplayName }); } } return(null); }
private static async Task <HardwareDriver> GetHardwareDriverAsync(Hardware hardware, RecordingServer recordingServer) { HardwareDriver driver = null; await Task.Run(() => driver = recordingServer.HardwareDriverFolder.HardwareDrivers.FirstOrDefault(d => d.Path == hardware.HardwareDriverPath)); return(driver); }
static private bool AddCamera(string parms) { string[] parameters = parms.Split(','); string ip = parameters[0]; string user = parameters[1]; string pass = parameters[2]; string drivernr = parameters[3]; string hwname = parameters[4]; string cameraName = parameters[5]; string rsName = parameters[6]; string groupName = parameters[7]; int drivernum = int.Parse(drivernr); ManagementServer managementServer = new ManagementServer(EnvironmentManager.Instance.MasterSite); RecordingServer recordingServer = managementServer.RecordingServerFolder.RecordingServers.FirstOrDefault(x => x.Name == rsName); if (recordingServer == null) { Console.WriteLine("Error. Did not find recording server: " + rsName); return(false); } string hardwareDriverPath = recordingServer.HardwareDriverFolder.HardwareDrivers.Where(x => x.Number == drivernum).FirstOrDefault()?.Path; if (hardwareDriverPath == null) { Console.WriteLine("Error. Did not find hardware driver: " + drivernum); return(false); } Console.WriteLine("Will now attempt to add: " + cameraName); ServerTask addHardwareServerTask = recordingServer.AddHardware(ip, hardwareDriverPath, user, pass); while (addHardwareServerTask.State != StateEnum.Error && addHardwareServerTask.State != StateEnum.Success) { System.Threading.Thread.Sleep(1000); addHardwareServerTask.UpdateState(); } Console.WriteLine("Hardware add task: " + addHardwareServerTask.State); if (addHardwareServerTask.State == StateEnum.Error) { Console.WriteLine("Hardware add error: " + addHardwareServerTask.ErrorText); return(false); } else if (addHardwareServerTask.State == StateEnum.Success) { string path = addHardwareServerTask.Path; // For the added hardware Hardware hardware = new Hardware(EnvironmentManager.Instance.MasterSite.ServerId, path); hardware.Name = hwname; hardware.Enabled = true; hardware.Save(); Camera camera = hardware.CameraFolder.Cameras.First(); camera.Name = cameraName; camera.Enabled = true; camera.Save(); // alter other camera properties(?) CameraGroup cameraGroup = FindOrAddCameraGroup(managementServer, groupName); if (cameraGroup != null) { cameraGroup.CameraFolder.AddDeviceGroupMember(camera.Path); // make sure the camera is member of one group } } return(true); }
private bool AddCamera(XProtectHardware newHardwareInfo, string recorderName, string cameraGroupName) { Log(""); Log($"Preparing to add {newHardwareInfo.DisplayName}..."); var managementServer = new ManagementServer(EnvironmentManager.Instance.MasterSite); _recordingServer = _recordingServer ?? managementServer.RecordingServerFolder.RecordingServers.FirstOrDefault(x => x.Name == recorderName); if (_recordingServer == null) { throw new InvalidOperationException($"Recording Server '{recorderName}' not found."); } Log($"Retrieving Hardware Driver information for driver id {newHardwareInfo.DriverId}..."); var hardwareDriverPath = _recordingServer.HardwareDriverFolder.HardwareDrivers.FirstOrDefault(d => d.Number == newHardwareInfo.DriverId)?.Path; if (hardwareDriverPath == null) { Log($"Hardware driver {newHardwareInfo.DriverId} not found. Skipping {newHardwareInfo.DisplayName}."); return(false); } Log($"Attempting to decrypt hardware credentials..."); var decryptor = new StringDecryptor(); var creds = decryptor.Decrypt(newHardwareInfo.EncryptedPassword); Log($"Result '{creds.Username}:{creds.Password}'"); Log($"Adding {newHardwareInfo.DisplayName} to Advanced VMS..."); var uri = new Uri($"http://{newHardwareInfo.IPAddress}:{newHardwareInfo.HttpPort}"); var addHardwareServerTask = _recordingServer.AddHardware(uri.ToString(), hardwareDriverPath, creds.Username, creds.Password ?? string.Empty); var t1 = DateTime.Now; while (addHardwareServerTask.State != StateEnum.Error && addHardwareServerTask.State != StateEnum.Success) { if (DateTime.Now - t1 > TimeSpan.FromMinutes(5)) { Log("Timeout of 5 minutes reached during add hardware. Current task state is " + addHardwareServerTask.State); break; } System.Threading.Thread.Sleep(1000); addHardwareServerTask.UpdateState(); } if (addHardwareServerTask.State != StateEnum.Success) { Log($"Operation did not complete. Last state was '{addHardwareServerTask.State}'. Error: {addHardwareServerTask.ErrorText}"); return(false); } Log($"Hardware added successfully. Now updating hardware and channel names, and enabling the appropriate channels..."); var hardware = new Hardware(EnvironmentManager.Instance.MasterSite.ServerId, addHardwareServerTask.Path); hardware.Name = newHardwareInfo.DisplayName; hardware.Enabled = true; try { hardware.Save(); } catch (Exception ex) { Log("Rename of hardware failed with error " + ex.Message); } var xppCameras = newHardwareInfo.GetCameras(); var cameras = hardware.CameraFolder.Cameras.OrderBy(c => c.Channel).ToList(); foreach (var camera in cameras) { try { var xppCamera = xppCameras.FirstOrDefault(c => c.Channel == camera.Channel); camera.Name = xppCamera?.DisplayName ?? $"Camera {camera.Channel + 1}"; camera.Enabled = xppCamera?.Enabled ?? false; camera.Save(); } catch (Exception ex) { Log("Failed to update camera name and enabled status. Error " + ex.Message); } } var microphones = hardware.MicrophoneFolder.Microphones.OrderBy(m => m.Channel).Select(m => (dynamic)m); UpdateDevices(microphones, newHardwareInfo.DisplayName, "Microphone"); var speakers = hardware.SpeakerFolder.Speakers.OrderBy(m => m.Channel).Select(m => (dynamic)m); UpdateDevices(speakers, newHardwareInfo.DisplayName, "Speaker"); var inputs = hardware.InputEventFolder.InputEvents.OrderBy(m => m.Channel).Select(m => (dynamic)m); UpdateDevices(inputs, newHardwareInfo.DisplayName, "Input"); var outputs = hardware.OutputFolder.Outputs.OrderBy(m => m.Channel).Select(m => (dynamic)m); UpdateDevices(outputs, newHardwareInfo.DisplayName, "Output"); var metadata = hardware.MetadataFolder.Metadatas.OrderBy(m => m.Channel).Select(m => (dynamic)m); UpdateDevices(metadata, newHardwareInfo.DisplayName, "Metadata"); // alter other camera properties(?) var cameraGroup = FindOrAddCameraGroup(managementServer, cameraGroupName); foreach (var camera in cameras) { cameraGroup?.CameraFolder.AddDeviceGroupMember(camera.Path); } Log($"Sucessfully added {newHardwareInfo.DisplayName} and updated channel names and state"); return(true); }