# HMAC File Server - Network Switching Resilient Configuration
# Optimized for 5G ↔ WiFi switching with session persistence
# Version: 3.3.0 "Nexus Infinitum" - Network Switching Solution

[server]
# Network binding - CRITICAL: Use 0.0.0.0 to bind to all interfaces
bind_ip = "0.0.0.0"
listen_address = "8080"

# Storage and basic settings
storage_path = "./uploads"
max_upload_size = "500MB"
log_file = "/var/log/hmac-file-server.log"
log_level = "info"

# Network resilience - CRITICAL for mobile scenarios
networkevents = true                        # Monitor network changes
auto_adjust_workers = true                  # Adapt to network conditions

[security]
# HMAC secret - MUST match ejabberd module configuration
secret = "network-switching-resilience-secret-key"

# Enhanced authentication for mobile devices
bearer_tokens_enabled = true               # Enable Bearer token auth
jwt_enabled = true                         # Enable JWT authentication
hmac_enabled = true                        # Enable legacy HMAC

# Extended validation periods for network switching
token_grace_period = "8h"                  # 8 hours base grace period
mobile_grace_period = "12h"                # 12 hours for mobile clients
standby_grace_period = "24h"               # 24 hours for standby recovery
ultra_max_grace = "72h"                    # 72 hours ultra-maximum for critical scenarios

[session_store]
# Session persistence for network resilience - NEW in 3.3.0
enabled = true                             # CRITICAL: Enable session store
backend = "memory"                         # "memory" or "redis"
max_sessions = 50000                       # Maximum concurrent sessions
cleanup_interval = "30m"                  # Session cleanup frequency
max_session_age = "72h"                    # Maximum session lifetime
redis_url = ""                             # Optional: "redis://localhost:6379/0"

# Session recovery settings
max_token_refreshes = 10                   # Maximum token refreshes per session
session_recovery_enabled = true           # Enable cross-network session recovery
upload_resumption_enabled = true          # Enable upload resumption

[uploads]
# Upload resilience for network changes
resumable_uploads_enabled = true           # CRITICAL: Enable upload resumption
max_resumable_age = "72h"                  # Keep sessions for 3 days
session_recovery_timeout = "600s"          # 10 minutes to recover from network change
client_reconnect_window = "300s"           # 5 minutes for client to reconnect

# Mobile-optimized chunking
chunked_uploads_enabled = true
chunk_size = "5MB"                         # Smaller chunks for mobile stability
upload_timeout = "3600s"                   # 1 hour upload timeout

# Network change handling
allow_ip_changes = true                    # CRITICAL: Allow IP changes during uploads
allow_session_resume = true               # Resume from different IP addresses
retry_failed_uploads = true               # Auto-retry failed uploads
max_upload_retries = 8                    # More retries for mobile networks
network_change_grace_period = "120s"      # 2 minutes grace during network switch

# File management
allowed_extensions = [".txt", ".pdf", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".zip", ".tar", ".gz", ".7z", ".mp4", ".webm", ".ogg", ".mp3", ".wav", ".flac", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".odt", ".ods", ".odp"]
max_file_size = "100MB"
ttl_enabled = false
ttl = "168h"
networkevents = true

[network_resilience]
# Network change detection and handling - Enhanced for mobile
enabled = true                             # Enable network resilience system
fast_detection = true                      # 1-second detection (vs 5-second default)
quality_monitoring = true                  # Monitor connection quality (RTT, packet loss)
predictive_switching = true                # Switch before network failure
mobile_optimizations = true               # Cellular-friendly settings
upload_resilience = true                   # Resume uploads across network changes

# Timing parameters
detection_interval = "1s"                  # Network change detection interval
quality_check_interval = "5s"             # Connection quality check interval
network_change_threshold = 3              # Switches to trigger network change event
max_detection_interval = "10s"            # Maximum detection interval
quality_degradation_threshold = 5.0       # Packet loss % threshold

# Client support
session_based_tracking = true             # Track by session ID, not IP
allow_ip_changes = true                   # Allow IP changes within session
max_ip_changes_per_session = 20           # Maximum IP changes per session
session_migration_timeout = "10m"        # Time to complete migration

[timeouts]
# Extended timeouts for mobile networks
read_timeout = "600s"                     # 10 minutes read timeout
write_timeout = "600s"                    # 10 minutes write timeout
idle_timeout = "1200s"                    # 20 minutes idle timeout
handshake_timeout = "120s"                # 2 minutes for handshake
keep_alive_timeout = "300s"               # 5 minutes keep-alive
shutdown_timeout = "30s"                  # Graceful shutdown

[logging]
level = "INFO"
file = "/var/log/hmac-file-server/network-switching.log"
max_size = 100                            # MB
max_backups = 5
max_age = 7                               # days
compress = true

# Enhanced logging for network events
log_network_events = true                 # Log all network change events
log_upload_sessions = true                # Log upload session lifecycle
log_token_refresh = true                  # Log token refresh events
log_ip_changes = true                     # Log client IP address changes
log_session_recovery = true               # Log session recovery attempts

[workers]
num_workers = 20                          # More workers for concurrent uploads
upload_queue_size = 2000                  # Larger queue for mobile bursts
autoscaling = true                        # Auto-scale workers based on load
max_workers = 50                          # Maximum worker limit

[metrics]
enabled = true
port = 9090
expose_network_metrics = true             # Expose network resilience metrics
track_session_recovery = true             # Track session recovery success rate
track_network_switches = true             # Track network switching events

[client_network]
# Client network support configuration
session_based_tracking = true            # Track clients by session, not IP
allow_ip_changes = true                   # Allow IP changes within session
max_ip_changes_per_session = 20          # Maximum IP changes allowed
adapt_to_client_network = true           # Adapt server behavior to client network
session_migration_timeout = "10m"       # Migration timeout

[build]
version = "3.3.0"
