Files
hmac-file-server/DESKTOP_XMPP_CLIENT_FIX.md

4.8 KiB

🖥️ DESKTOP XMPP CLIENT UPLOAD FIX - Dino & Gajim After Restart

🎯 Problem Analysis

Issue: Dino and Gajim can't upload after restart, Android works after reconnection

Root Cause: Desktop XMPP clients restore cached sessions with expired tokens, while mobile clients get fresh authentication.


IMMEDIATE FIX (Try This First!)

Step 1: Clear Client Caches

# Stop XMPP clients completely
pkill -f dino
pkill -f gajim
sleep 5

# Backup existing data (optional)
cp -r ~/.local/share/dino ~/.local/share/dino.backup 2>/dev/null || true
cp -r ~/.local/share/gajim ~/.local/share/gajim.backup 2>/dev/null || true

# Clear caches that may contain expired tokens
rm -rf ~/.cache/dino/ 2>/dev/null || true
rm -rf ~/.cache/gajim/ 2>/dev/null || true

# Clear specific upload-related cached files
find ~/.local/share/dino -name '*upload*' -delete 2>/dev/null || true
find ~/.local/share/gajim -name '*upload*' -delete 2>/dev/null || true
find ~/.local/share/dino -name '*token*' -delete 2>/dev/null || true
find ~/.local/share/gajim -name '*token*' -delete 2>/dev/null || true

# Restart clients
dino &
gajim &

Step 2: Test Upload

  • Try uploading a small file in both Dino and Gajim
  • Should work now with fresh authentication

🔧 ENHANCED SERVER SOLUTION

If the cache clearing doesn't work, deploy the enhanced server:

Deploy Enhanced Server

cd /root/hmac-file-server

# Use the enhanced server binary
./hmac-file-server-desktop-fixed -config config-mobile-resilient.toml

What the Enhanced Server Fixes:

  • 24-hour grace period specifically for desktop XMPP clients (Dino, Gajim)
  • 48-hour session restoration window for cached tokens after restart
  • Enhanced detection of desktop vs mobile XMPP clients
  • Special logging for desktop client authentication issues

📊 Technical Details

Enhanced Client Detection:

Desktop XMPP Clients: 24-hour grace period (session restoration)
Mobile XMPP Clients: 12-hour grace period (network switching)
Network Resilience: 72-hour ultra-grace period (critical scenarios)

Log Messages to Watch For:

🖥️  Desktop XMPP client detected (Dino/Gajim), using 24-hour grace period
🖥️  DESKTOP SESSION RESTORE: allowing within 48-hour restoration window

🌐 Network Configuration Check

Your setup: Notebook (WLAN + Ethernet) → Router → HMAC File Server

Potential Network Issues:

  1. Multiple interfaces may cause IP confusion
  2. Router NAT may assign different IPs after restart
  3. Cached connections may use old IP addresses

Check Network Configuration:

# Check active network interfaces
ip addr show | grep -E "(wlan|eth|eno|wlp)" -A2

# Check default routes
ip route show | grep default

# Check if multiple interfaces have IPs
ifconfig | grep "inet " | grep -v "127.0.0.1"

🚨 Troubleshooting Steps

If Upload Still Fails:

  1. Check Server Logs:
tail -f /var/log/hmac-file-server-mobile.log | grep -E "(Desktop|XMPP|token|auth)"
  1. Check Client User-Agent:
  • Look for log entries showing how clients identify themselves
  • Ensure Dino/Gajim are detected as desktop XMPP clients
  1. Verify Token Generation:
  • Check if clients are getting fresh tokens after restart
  • Look for "expired beyond grace period" messages
  1. Network Debugging:
# Check if clients can reach server
curl -I http://localhost:8080/health

# Check if router/NAT is affecting connections
netstat -tuln | grep 8080

💡 Why This Happens

Desktop vs Mobile Behavior:

  • Desktop clients (Dino/Gajim): Save session state to disk, restore after restart
  • Mobile clients: Reconnect fresh, get new authentication tokens
  • Server: Original grace periods not sufficient for cached/restored sessions

Network Complexity:

  • WLAN + Ethernet: Multiple network paths can confuse client IP detection
  • Router NAT: May assign different internal IPs after restart
  • Cached connections: Old network state restored with expired tokens

Expected Results

After applying the fix:

  • Dino uploads work immediately after restart
  • Gajim uploads work immediately after restart
  • Android continues working after disconnect/reconnect
  • Network switching (WLAN ↔ Ethernet) handled gracefully
  • Router IP changes don't break authentication

🎯 Summary

Root Cause: Desktop XMPP clients restore expired cached sessions
Quick Fix: Clear client caches to force fresh authentication
Long-term Fix: Enhanced server with 48-hour desktop session restoration
Network: Router setup is fine, issue is client-side session caching

The enhanced server now treats desktop XMPP clients with the same network resilience as mobile clients, plus special handling for session restoration scenarios.