示例#1
0
        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();
        }
示例#2
0
        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");
            }
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
    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();
        }
示例#7
0
    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);
    }