public void CopyManifestInformation(IRepositoryProxy otherRepository) { // Clone the manifest and all of its information Manifest dummyManifest = new Manifest(otherRepository.Manifest); // Remove the files before we send it over because all we care about is the info dummyManifest.RootDirectory.Files.Clear(); dummyManifest.RootDirectory.Subdirectories.Clear(); Uri requestUri = new Uri(BaseUri.ToString()); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); request.Method = "SETMANIFESTINFO"; request.Timeout = RequestTimeout; request.AllowWriteStreamBuffering = false; MemoryStream memStream = new MemoryStream(); dummyManifest.WriteManifestStream(memStream); memStream.Seek(0, SeekOrigin.Begin); request.ContentLength = memStream.Length; StreamUtilities.CopyStream(memStream, request.GetRequestStream()); request.GetRequestStream().Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Close(); }
protected void HandleGetRequest( HttpClientContext context, HttpRequest request) { try { // TODO: Authenticate based on request address FileInfo fileInfo = new FileInfo(GetLocalFilePathFromRequest(request)); HttpResponse response = (HttpResponse)request.CreateResponse(context); response.ContentType = "application/octet-stream"; if (request.UriParts.Length == 1) { // Requesting manifest Guid repoGuid = GetRepositoryGuidFromRequest(request); Manifest manifestClone = GetRepositoryFromGuid(repoGuid).CloneManifest(); MemoryStream memStream = new MemoryStream(); manifestClone.WriteManifestStream(memStream); memStream.Seek(0, SeekOrigin.Begin); response.ContentLength = memStream.Length; response.SendHeaders(); StreamUtilities.CopyStream(memStream, context.Stream); context.Stream.Close(); } else { // Requesting file using (FileStream stream = new FileStream( fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { response.ContentLength = stream.Length; response.SendHeaders(); StreamUtilities.CopyStream(stream, context.Stream); context.Stream.Close(); } } } catch (Exception ex) { context.Respond( "HTTP/1.0", HttpStatusCode.InternalServerError, "Internal server error", ex.ToString(), "text/plain"); } }
public FileInfo CloneFile( ManifestFileInfo copyFile, DirectoryInfo copyToDirectory) { Uri requestUri = MakeRemoteUri(copyFile); int retries = 0; bool success = false; string tempFilePath = null; do { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); request.Method = "GET"; request.Timeout = RequestTimeout; request.ReadWriteTimeout = RequestReadWriteTimeout; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); tempFilePath = Path.Combine( TempDirectory.FullName, copyFile.FileHash.ToString()); using (FileStream fileStream = new FileStream( tempFilePath, FileMode.Create)) { StreamUtilities.CopyStream(response.GetResponseStream(), fileStream); response.GetResponseStream().Close(); } success = true; } catch (System.Net.WebException ex) { System.Console.WriteLine("RETRY: " + ++numRetries); if (++retries > MaxNumberOfRequestRetries) { throw ex; } System.Threading.Thread.Sleep(RequestRetryWaitInterval); } } while (success == false); return(new FileInfo(tempFilePath)); }
public void PutFile( IRepositoryProxy sourceRepository, ManifestFileInfo sourceManifestFile) { FileInfo sourceFile = sourceRepository.GetFile(sourceManifestFile); Uri requestUri = MakeRemoteUri(sourceManifestFile); int retries = 0; bool success = false; do { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); request.Method = "PUT"; request.Timeout = RequestTimeout; request.ReadWriteTimeout = RequestReadWriteTimeout; request.AllowWriteStreamBuffering = false; SetStandardFileHeaders(request, sourceManifestFile); using (FileStream fileStream = sourceFile.OpenRead()) { request.ContentLength = fileStream.Length; StreamUtilities.CopyStream(fileStream, request.GetRequestStream()); request.GetRequestStream().Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Close(); success = true; } catch (System.Net.WebException ex) { if (++retries > MaxNumberOfRequestRetries) { throw ex; } System.Threading.Thread.Sleep(RequestRetryWaitInterval); } } while (success == false); }
public static bool UnpackResourceAsFile(string resourceName, string targetFileName, Assembly sourceAssembly) { Stream sourceStream = sourceAssembly.GetManifestResourceStream(resourceName); if (sourceStream == null) { return(false); } FileStream targetStream = File.Open(targetFileName, FileMode.Create); StreamUtilities.CopyStream(sourceStream, targetStream); targetStream.Close(); return(true); }
protected void ReadCryptFile( FileInfo sourceFileInfo, byte[] keyData, String destFilePath) { Stream sourceFileStream = sourceFileInfo.OpenRead(); Stream cryptoStream = CryptUtilities.MakeDecryptionReadStreamFrom( sourceFileStream, keyData); FileStream destFileStream = File.OpenWrite(destFilePath); StreamUtilities.CopyStream( cryptoStream, destFileStream); destFileStream.Close(); }
public static bool UnpackResourceAsFile(string resourceName, string targetFileName, Assembly sourceAssembly) { Stream sourceStream = sourceAssembly.GetManifestResourceStream(resourceName); if (sourceStream == null) { return(false); } var dir = Path.GetDirectoryName(targetFileName); if (dir.Length > 0) { Directory.CreateDirectory(dir); // Create directory if needed. } FileUtilities.ForceDelete(targetFileName); FileStream targetStream = File.Open(targetFileName, FileMode.Create); StreamUtilities.CopyStream(sourceStream, targetStream); targetStream.Close(); return(true); }