- Introduced a comprehensive configuration template (config-adaptive.toml) for adaptive I/O, enabling improved upload/download dual stack with various performance optimizations, security settings, and network resilience features. - Created a test configuration template (test-config.toml) mirroring the adaptive configuration for testing purposes. - Added a simple test configuration (test-simple-config.toml) for basic adaptive features testing with essential parameters. - Included an empty Jupyter notebook (xep0363_analysis.ipynb) for future analysis related to XEP-0363.
261 lines
6.3 KiB
TOML
261 lines
6.3 KiB
TOML
# Enhanced Configuration Template for Adaptive I/O
|
|
# This configuration enables the improved upload/download dual stack
|
|
|
|
[server]
|
|
listen_address = "0.0.0.0:8080"
|
|
storage_path = "/data/uploads"
|
|
metricsenabled = true
|
|
metrics_path = "/metrics"
|
|
max_upload_size = "10GB"
|
|
max_header_bytes = 1048576
|
|
deduplication_enabled = true
|
|
file_naming = "original"
|
|
networkevents = true
|
|
precaching = true
|
|
|
|
# Enhanced performance configuration
|
|
[performance]
|
|
# Adaptive buffer management
|
|
adaptive_buffers = true
|
|
min_buffer_size = "16KB"
|
|
max_buffer_size = "1MB"
|
|
buffer_optimization_interval = "30s"
|
|
initial_buffer_size = "64KB"
|
|
|
|
# Client profiling and optimization
|
|
client_profiling = true
|
|
profile_persistence_duration = "24h"
|
|
connection_type_detection = true
|
|
performance_history_samples = 100
|
|
|
|
# Memory management
|
|
max_memory_usage = "512MB"
|
|
gc_optimization = true
|
|
buffer_pool_preallocation = true
|
|
|
|
[uploads]
|
|
allowed_extensions = ["jpg", "jpeg", "png", "gif", "mp4", "mov", "avi", "pdf", "doc", "docx", "txt"]
|
|
chunked_uploads_enabled = true
|
|
chunk_size = "adaptive" # Can be "adaptive", "fixed:2MB", etc.
|
|
resumable_uploads_enabled = true
|
|
sessiontimeout = "1h"
|
|
maxretries = 3
|
|
|
|
# Adaptive chunking parameters
|
|
min_chunk_size = "256KB"
|
|
max_chunk_size = "10MB"
|
|
chunk_adaptation_algorithm = "predictive" # "fixed", "adaptive", "predictive"
|
|
|
|
# Upload optimization
|
|
concurrent_chunk_uploads = 3
|
|
upload_acceleration = true
|
|
network_aware_chunking = true
|
|
|
|
[downloads]
|
|
allowed_extensions = ["jpg", "jpeg", "png", "gif", "mp4", "mov", "avi", "pdf", "doc", "docx", "txt"]
|
|
chunked_downloads_enabled = true
|
|
chunk_size = "adaptive"
|
|
resumable_downloads_enabled = true
|
|
range_requests = true
|
|
|
|
# Download optimization
|
|
connection_multiplexing = false
|
|
bandwidth_estimation = true
|
|
quality_adaptation = true
|
|
progressive_download = true
|
|
|
|
# Cache control
|
|
cache_control_headers = true
|
|
etag_support = true
|
|
last_modified_support = true
|
|
|
|
[streaming]
|
|
# Advanced streaming features
|
|
adaptive_streaming = true
|
|
network_condition_monitoring = true
|
|
throughput_optimization = true
|
|
latency_optimization = true
|
|
|
|
# Resilience features
|
|
automatic_retry = true
|
|
exponential_backoff = true
|
|
circuit_breaker = true
|
|
max_retry_attempts = 5
|
|
retry_backoff_multiplier = 2.0
|
|
|
|
# Quality adaptation
|
|
quality_thresholds = [
|
|
{ name = "excellent", min_throughput = "10MB/s", max_latency = "50ms" },
|
|
{ name = "good", min_throughput = "1MB/s", max_latency = "200ms" },
|
|
{ name = "fair", min_throughput = "100KB/s", max_latency = "500ms" },
|
|
{ name = "poor", min_throughput = "10KB/s", max_latency = "2s" }
|
|
]
|
|
|
|
[security]
|
|
secret = "your-hmac-secret-key-here"
|
|
enablejwt = false
|
|
jwtsecret = "your-jwt-secret-here"
|
|
jwtalgorithm = "HS256"
|
|
jwtexpiration = "24h"
|
|
|
|
[logging]
|
|
level = "info"
|
|
file = "/var/log/hmac-file-server.log"
|
|
max_size = 100
|
|
max_backups = 3
|
|
max_age = 28
|
|
compress = true
|
|
|
|
[network_resilience]
|
|
# Enhanced network resilience with multi-interface support
|
|
enabled = true
|
|
fast_detection = true
|
|
quality_monitoring = true
|
|
predictive_switching = true
|
|
mobile_optimizations = true
|
|
|
|
# Multi-interface configuration
|
|
multi_interface_enabled = true
|
|
interface_priority = ["eth0", "wlan0", "wwan0", "ppp0"]
|
|
auto_switch_enabled = true
|
|
switch_threshold_latency = "500ms"
|
|
switch_threshold_packet_loss = 5.0
|
|
quality_degradation_threshold = 0.3
|
|
max_switch_attempts = 3
|
|
switch_detection_interval = "2s"
|
|
|
|
# Timing configuration
|
|
detection_interval = "1s"
|
|
quality_check_interval = "5s"
|
|
max_detection_interval = "10s"
|
|
|
|
# Thresholds
|
|
rtt_warning_threshold = "200ms"
|
|
rtt_critical_threshold = "1s"
|
|
packet_loss_warning = 2.0
|
|
packet_loss_critical = 10.0
|
|
stability_minimum = 0.8
|
|
|
|
# Mobile-specific optimizations
|
|
mobile_buffer_size = "32KB"
|
|
mobile_chunk_size = "512KB"
|
|
mobile_retry_multiplier = 1.5
|
|
mobile_timeout_multiplier = 2.0
|
|
|
|
# Interface-specific optimization settings
|
|
[network_interfaces]
|
|
ethernet = { buffer_size = "1MB", chunk_size = "10MB", timeout_multiplier = 1.0, priority = 10 }
|
|
wifi = { buffer_size = "512KB", chunk_size = "5MB", timeout_multiplier = 1.2, priority = 20 }
|
|
lte = { buffer_size = "256KB", chunk_size = "2MB", timeout_multiplier = 2.0, priority = 30 }
|
|
cellular = { buffer_size = "128KB", chunk_size = "512KB", timeout_multiplier = 3.0, priority = 40 }
|
|
vpn = { buffer_size = "256KB", chunk_size = "2MB", timeout_multiplier = 1.5, priority = 50 }
|
|
|
|
# Handoff and switching behavior
|
|
[handoff]
|
|
seamless_switching = true
|
|
chunk_retry_on_switch = true
|
|
pause_transfers_on_switch = false
|
|
switch_notification_enabled = true
|
|
interface_quality_history = 50
|
|
performance_comparison_window = "5m"
|
|
|
|
[client_optimization]
|
|
# Per-client optimization
|
|
enabled = true
|
|
learning_enabled = true
|
|
adaptation_speed = "medium" # "slow", "medium", "fast"
|
|
|
|
# Client type detection
|
|
user_agent_analysis = true
|
|
connection_fingerprinting = true
|
|
performance_classification = true
|
|
|
|
# Optimization strategies
|
|
strategy_mobile = {
|
|
buffer_size = "32KB",
|
|
chunk_size = "512KB",
|
|
retry_multiplier = 1.5,
|
|
timeout_multiplier = 2.0
|
|
}
|
|
|
|
strategy_desktop = {
|
|
buffer_size = "128KB",
|
|
chunk_size = "2MB",
|
|
retry_multiplier = 1.0,
|
|
timeout_multiplier = 1.0
|
|
}
|
|
|
|
strategy_server = {
|
|
buffer_size = "512KB",
|
|
chunk_size = "10MB",
|
|
retry_multiplier = 0.5,
|
|
timeout_multiplier = 0.5
|
|
}
|
|
|
|
[monitoring]
|
|
# Enhanced monitoring and metrics
|
|
detailed_metrics = true
|
|
performance_tracking = true
|
|
client_analytics = true
|
|
|
|
# Metric collection intervals
|
|
realtime_interval = "1s"
|
|
aggregate_interval = "1m"
|
|
summary_interval = "1h"
|
|
|
|
# Storage for metrics
|
|
metrics_retention = "7d"
|
|
performance_history = "24h"
|
|
client_profile_retention = "30d"
|
|
|
|
[experimental]
|
|
# Experimental features
|
|
http3_support = false
|
|
quic_protocol = false
|
|
compression_negotiation = true
|
|
adaptive_compression = true
|
|
|
|
# Advanced I/O
|
|
io_uring_support = false # Linux only
|
|
zero_copy_optimization = true
|
|
memory_mapped_files = false
|
|
|
|
# Machine learning optimizations
|
|
ml_optimization = false
|
|
predictive_caching = false
|
|
intelligent_prefetching = false
|
|
|
|
[timeouts]
|
|
readtimeout = "30s"
|
|
writetimeout = "30s"
|
|
idletimeout = "60s"
|
|
shutdown = "30s"
|
|
|
|
# Adaptive timeouts
|
|
adaptive_timeouts = true
|
|
min_timeout = "5s"
|
|
max_timeout = "300s"
|
|
timeout_adaptation_factor = 1.2
|
|
|
|
[deduplication]
|
|
enabled = true
|
|
directory = "/data/deduplication"
|
|
maxsize = "1GB"
|
|
algorithm = "sha256"
|
|
cleanup_interval = "1h"
|
|
|
|
[iso]
|
|
enabled = false
|
|
mountpoint = "/mnt/iso"
|
|
size = "1GB"
|
|
charset = "utf8"
|
|
|
|
[versioning]
|
|
enableversioning = false
|
|
backend = "filesystem"
|
|
maxversions = 10
|
|
|
|
[clamav]
|
|
clamavenabled = false
|
|
clamavsocket = "/var/run/clamav/clamd.ctl"
|