private int GenerateProcessArguments() { var multicastArgs = new MulticastArgsDTO(); multicastArgs.schema = new ClientPartitionHelper(_imageProfile).GetImageSchema(); multicastArgs.Environment = _imageProfile.Image.Environment; multicastArgs.ImageName = _imageProfile.Image.Name; multicastArgs.Port = _multicastSession.Port.ToString(); if (_isOnDemand) { multicastArgs.ExtraArgs = SettingServices.GetSettingValue(SettingStrings.SenderArgs); if (!string.IsNullOrEmpty(_clientCount)) { multicastArgs.clientCount = _clientCount; } } else { multicastArgs.ExtraArgs = string.IsNullOrEmpty(_imageProfile.SenderArguments) ? SettingServices.GetSettingValue(SettingStrings.SenderArgs) : _imageProfile.SenderArguments; multicastArgs.clientCount = _computers.Count.ToString(); } var pid = 0; if (_multicastServerId == -1) { pid = new MulticastArguments().GenerateProcessArguments(multicastArgs); } else { var secondaryServer = new SecondaryServerServices().GetSecondaryServer(_multicastServerId); pid = new APICall(new SecondaryServerServices().GetToken(secondaryServer.Name)) .ServiceAccountApi.GetMulticastSenderArgs(multicastArgs); } if (pid == 0) { return(pid); } var activeMulticastSessionServices = new ActiveMulticastSessionServices(); if (_isOnDemand) { _multicastSession.Pid = pid; _multicastSession.Name = _group.Name; activeMulticastSessionServices.AddActiveMulticastSession(_multicastSession); } else { _multicastSession.Pid = pid; activeMulticastSessionServices.UpdateActiveMulticastSession(_multicastSession); } return(pid); }
public int GetMulticastSenderArgs(MulticastArgsDTO multicastArgs) { Request.Method = Method.POST; Request.Resource = string.Format("api/{0}/GetMulticastSenderArgs/", Resource); Request.AddJsonBody(multicastArgs); var response = _apiRequest.Execute <ApiIntResponseDTO>(Request); return(response != null ? response.Value : 0); }
public int GenerateProcessArguments(MulticastArgsDTO mArgs) { var schemaCounter = -1; var multicastHdCounter = 0; string processArguments = null; foreach (var hd in mArgs.schema.HardDrives) { schemaCounter++; if (!hd.Active) { continue; } multicastHdCounter++; var x = 0; foreach (var part in mArgs.schema.HardDrives[schemaCounter].Partitions) { if (!part.Active) { continue; } string imageFile = null; foreach (var ext in new[] { "ntfs", "fat", "extfs", "hfsp", "imager", "winpe", "xfs" }) { imageFile = new FilesystemServices().GetFileNameWithFullPath(mArgs.ImageName, schemaCounter.ToString(), part.Number, ext); if (!string.IsNullOrEmpty(imageFile)) { break; } //Look for lvm if (part.VolumeGroup == null) { continue; } if (part.VolumeGroup.LogicalVolumes == null) { continue; } foreach (var lv in part.VolumeGroup.LogicalVolumes.Where(lv => lv.Active)) { imageFile = new FilesystemServices().GetLVMFileNameWithFullPath(mArgs.ImageName, schemaCounter.ToString(), lv.VolumeGroup, lv.Name, ext); } } if (string.IsNullOrEmpty(imageFile)) { continue; } if (mArgs.Environment == "winpe" && mArgs.schema.HardDrives[schemaCounter].Table.ToLower() == "gpt") { if (part.Type.ToLower() == "system" || part.Type.ToLower() == "recovery" || part.Type.ToLower() == "reserved") { continue; } } if (mArgs.Environment == "winpe" && mArgs.schema.HardDrives[schemaCounter].Table.ToLower() == "mbr") { if (part.Number == mArgs.schema.HardDrives[schemaCounter].Boot && mArgs.schema.HardDrives[schemaCounter].Partitions.Length > 1) { continue; } } x++; var minReceivers = ""; if (!string.IsNullOrEmpty(mArgs.clientCount)) { minReceivers = " --min-receivers " + mArgs.clientCount; } var isUnix = Environment.OSVersion.ToString().Contains("Unix"); string compAlg; var stdout = ""; switch (Path.GetExtension(imageFile)) { case ".lz4": compAlg = isUnix ? "lz4 -d " : "lz4.exe\" -d "; stdout = " - "; break; case ".gz": compAlg = isUnix ? "gzip -c -d " : "gzip.exe\" -c -d "; stdout = ""; break; case ".uncp": compAlg = "none"; break; case ".wim": compAlg = "none"; break; default: return(0); } if (isUnix) { string prefix = null; if (multicastHdCounter == 1) { prefix = x == 1 ? " -c \"" : " ; "; } else { prefix = " ; "; } if (compAlg == "none" || SettingServices.GetSettingValue(SettingStrings.MulticastDecompression) == "client") { processArguments += prefix + "cat " + "\"" + imageFile + "\"" + " | udp-sender" + " --portbase " + mArgs.Port + minReceivers + " " + " --ttl 32 " + mArgs.ExtraArgs; } else { processArguments += prefix + compAlg + "\"" + imageFile + "\"" + stdout + " | udp-sender" + " --portbase " + mArgs.Port + minReceivers + " " + " --ttl 32 " + mArgs.ExtraArgs; } } else { var appPath = HttpContext.Current.Server.MapPath("~") + Path.DirectorySeparatorChar + "private" + Path.DirectorySeparatorChar + "apps" + Path.DirectorySeparatorChar; string prefix = null; if (multicastHdCounter == 1) { //Relative to the multicast server being called var primaryDp = new DistributionPointServices().GetPrimaryDistributionPoint(); if (primaryDp == null) { return(0); } if (primaryDp.Location == "Local") { prefix = x == 1 ? " /c \"" : " & "; } else //Remote { if (x == 1) { prefix = " /c \"net use \\\\" + primaryDp.Server + "\\" + primaryDp.ShareName + " /user:"******" " + new EncryptionServices().DecryptText(primaryDp.RoPassword) + " & "; } else { prefix = " & "; } } } else { prefix = " & "; } if (compAlg == "none" || SettingServices.GetSettingValue(SettingStrings.MulticastDecompression) == "client") { processArguments += prefix + "\"" + appPath + "udp-sender.exe" + "\"" + " --file " + "\"" + imageFile + "\"" + " --portbase " + mArgs.Port + minReceivers + " " + " --ttl 32 " + mArgs.ExtraArgs; } else { processArguments += prefix + "\"" + appPath + compAlg + "\"" + imageFile + "\"" + stdout + " | " + "\"" + appPath + "udp-sender.exe" + "\"" + " --portbase " + mArgs.Port + minReceivers + " " + " --ttl 32 " + mArgs.ExtraArgs; } } } } var pDp = new DistributionPointServices().GetPrimaryDistributionPoint(); if (pDp == null) { return(0); } if (pDp.Location == "Remote") { processArguments += " & net use /delete \\\\" + pDp.Server + "\\" + pDp.ShareName; } processArguments += "\""; return(StartMulticastSender(processArguments, mArgs.groupName)); }
public ApiIntResponseDTO GetMulticastSenderArgs(MulticastArgsDTO multicastArgs) { return(new ApiIntResponseDTO { Value = new MulticastArguments().GenerateProcessArguments(multicastArgs) }); }