2025-01-07 09:40:39 +01:00
// Copyright (C) 2025, The Duplicati Team
2024-11-22 11:47:07 +01:00
// https://duplicati.com, hello@duplicati.com
2025-02-18 09:17:08 +01:00
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
2024-11-22 11:47:07 +01:00
// Software is furnished to do so, subject to the following conditions:
2025-02-18 09:17:08 +01:00
//
// The above copyright notice and this permission notice shall be included in
2024-11-22 11:47:07 +01:00
// all copies or substantial portions of the Software.
2025-02-18 09:17:08 +01:00
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2024-11-22 11:47:07 +01:00
// DEALINGS IN THE SOFTWARE.
2024-11-07 10:04:52 +01:00
using CoCoL ;
2024-12-02 10:55:45 +01:00
using Duplicati.Library.Main.Volumes ;
2024-11-08 09:13:54 +01:00
using Duplicati.Library.Utility ;
2024-11-07 10:04:52 +01:00
namespace Duplicati.Library.Main.Operation.Restore
{
2024-11-22 15:26:04 +01:00
/// <summary>
/// Named channels for the restore operation.
/// </summary>
2024-12-10 04:10:34 +01:00
internal class Channels
2024-11-07 10:04:52 +01:00
{
2024-11-22 15:26:04 +01:00
/// <summary>
/// The buffer size for the channels. The buffer size is the number of
/// messages that can be queued up before the sender blocks.
/// </summary>
2025-02-25 16:19:04 +01:00
public static int BufferSize ;
2024-11-08 14:38:24 +01:00
2024-11-22 15:26:04 +01:00
/// <summary>
2024-12-02 15:09:23 +01:00
/// Channel between <see cref="FileLister"/> and <see cref="FileProcessor"/>.
2024-11-22 15:26:04 +01:00
/// </summary>
2024-12-10 04:10:34 +01:00
public readonly IChannel < FileRequest > FilesToRestore = ChannelManager . CreateChannel < FileRequest >( buffersize : BufferSize );
2024-11-22 15:26:04 +01:00
/// <summary>
2024-12-02 15:43:52 +01:00
/// Channel between <see cref="VolumeManager"/> and <see cref="VolumeDownloader"/>.
2024-11-22 15:26:04 +01:00
/// </summary>
2025-02-18 09:25:20 +01:00
public readonly IChannel < long > DownloadRequest = ChannelManager . CreateChannel < long >( buffersize : BufferSize );
2024-11-22 15:26:04 +01:00
/// <summary>
2024-12-02 15:09:23 +01:00
/// Channel between <see cref="VolumeDownloader"/> and <see cref="VolumeDecryptor"/>
2024-11-22 15:26:04 +01:00
/// </summary>
2025-02-18 09:25:20 +01:00
public readonly IChannel <( long , string , TempFile )> DecryptRequest = ChannelManager . CreateChannel <( long , string , TempFile )>( buffersize : BufferSize );
2024-11-22 15:26:04 +01:00
/// <summary>
2024-12-10 04:10:34 +01:00
/// Channel between <see cref="VolumeManager"/> and <see cref="VolumeDecompressor"/>
2024-11-22 15:26:04 +01:00
/// </summary>
2024-12-10 04:10:34 +01:00
public readonly IChannel <( BlockRequest , BlockVolumeReader )> DecompressionRequest = ChannelManager . CreateChannel <( BlockRequest , BlockVolumeReader )>( buffersize : BufferSize );
2024-12-02 15:09:23 +01:00
/// <summary>
2024-12-10 04:10:34 +01:00
/// Channel between <see cref="VolumeManager"/> and <see cref="BlockManager"/> holding the decompressed blocks.
public readonly IChannel <( BlockRequest , byte [])> DecompressedBlock = ChannelManager . CreateChannel <( BlockRequest , byte [])>( buffersize : BufferSize );
2024-12-02 15:09:23 +01:00
/// <summary>
2024-12-10 04:10:34 +01:00
/// Channel between <see cref="VolumeManager"/> and <see cref="BlockManager"/> / <see cref="VolumeDecryptor"/>, used for requesting and responding volumes to the manager.
2024-12-02 15:09:23 +01:00
/// </summary>
2024-12-10 04:10:34 +01:00
public readonly IChannel < object > VolumeRequestResponse = ChannelManager . CreateChannel < object >( buffersize : BufferSize );
2024-11-07 10:04:52 +01:00
}
2024-11-22 15:26:04 +01:00
2024-11-07 10:04:52 +01:00
}