@@ -89,43 +89,54 @@ cargo build --release
8989
9090### Basic Usage
9191
92+ #### Bidirectional Sessions
93+ After a session is established, ** both peers are equal** and can send or receive files. The ` --role ` parameter only determines who initiates the connection:
94+ - ** Client role** (default for send): Connects to a peer
95+ - ** Server role** (default for receive): Listens for incoming connections
96+
9297#### Send a File
9398``` bash
94- # Direct connection (windowed mode is default)
95- p2p-transfer send myfile.zip --to 192.168.1.100:8080
99+ # Send as client (default) - connect to peer and send
100+ p2p-transfer send myfile.zip --peer 192.168.1.100:8080
101+
102+ # Send as server - listen for peer to connect, then send
103+ p2p-transfer send myfile.zip --role server --port 8080
96104
97- # With auto-discovery
105+ # With auto-discovery (client mode)
98106p2p-transfer send myfile.zip --discover
99107
100108# Sequential mode (one chunk at a time)
101- p2p-transfer send myfile.zip --to 192.168.1.100:8080 --window-size 1
109+ p2p-transfer send myfile.zip --peer 192.168.1.100:8080 --window-size 1
102110```
103111
104112#### Send a Folder
105113``` bash
106114# Transfer entire directory with structure
107- p2p-transfer send ./my_project --to 192.168.1.100:8080
115+ p2p-transfer send ./my_project --peer 192.168.1.100:8080
108116
109117# With compression (adaptive by default)
110- p2p-transfer send ./documents --to 192.168.1.100:8080 --compress --compress-level 5
118+ p2p-transfer send ./documents --peer 192.168.1.100:8080 --compress --compress-level 5
111119
112120# Adaptive compression auto-disables for incompressible data (default: enabled)
113- p2p-transfer send ./mixed_content --to 192.168.1.100:8080 --adaptive true
121+ p2p-transfer send ./mixed_content --peer 192.168.1.100:8080 --adaptive true
114122
115123# Force compression even for incompressible data
116- p2p-transfer send ./photos --to 192.168.1.100:8080 --adaptive false
124+ p2p-transfer send ./photos --peer 192.168.1.100:8080 --adaptive false
117125```
118126
119127#### Receive Files/Folders
120128``` bash
121- # Start receiver on port 8080 (automatically receives when peer sends)
122- p2p-transfer receive ./downloads --port 8080
129+ # Receive as server (default) - listen for peer to connect and receive
130+ p2p-transfer receive --output ./downloads --port 8080
131+
132+ # Receive as client - connect to peer and receive files
133+ p2p-transfer receive --output ./downloads --role client --peer 192.168.1.100:8080
123134
124135# Auto-accept incoming transfers (no prompts)
125- p2p-transfer receive ./received --port 7778 --auto-accept
136+ p2p-transfer receive --output ./received --port 7778 --auto-accept
126137
127138# Short form
128- p2p-transfer receive ./received -p 7778 -a
139+ p2p-transfer receive -o ./received -p 7778 -a
129140```
130141
131142** Note** : The receiver now runs in an event loop that automatically handles incoming transfers. When a peer initiates a send, the receiver will automatically start receiving - no manual action needed. The session stays alive for multiple transfers until the connection is closed.
@@ -185,18 +196,18 @@ Currently, when both machines are behind NAT, you need to manually use the disco
1851962 . ** On Machine B (sender)** - Connect using Machine A's public IP:
186197 ``` bash
187198 # Send to Machine A's public IP and forwarded port
188- p2p-transfer send myfile.zip --to 203.0.113.5:7778
199+ p2p-transfer send myfile.zip --peer 203.0.113.5:7778
189200 ```
190201
191202#### Resume Interrupted Transfer
192203``` bash
193204# Transfer gets interrupted (Ctrl+C)
194- p2p-transfer send ./large_folder --to 192.168.1.100:8080
205+ p2p-transfer send ./large_folder --peer 192.168.1.100:8080
195206# State saved to: transfer_12345678-1234-5678-1234-567812345678.json
196207
197208# Resume later (supports chunk-level resume)
198209p2p-transfer resume 12345678-1234-5678-1234-567812345678 \
199- --to 192.168.1.100:8080 \
210+ --peer 192.168.1.100:8080 \
200211 --path ./large_folder
201212```
202213
@@ -222,16 +233,16 @@ p2p-transfer history --failed
222233
223234``` bash
224235# LAN (low latency, < 5ms)
225- p2p-transfer send file.zip --to 192.168.1.100:8080 --window-size 8
236+ p2p-transfer send file.zip --peer 192.168.1.100:8080 --window-size 8
226237
227238# WiFi (medium latency, 10-20ms) - DEFAULT
228- p2p-transfer send file.zip --to 192.168.1.100:8080 --window-size 16
239+ p2p-transfer send file.zip --peer 192.168.1.100:8080 --window-size 16
229240
230241# Internet (high latency, 50-100ms)
231- p2p-transfer send file.zip --to 192.168.1.100:8080 --window-size 32
242+ p2p-transfer send file.zip --peer 192.168.1.100:8080 --window-size 32
232243
233244# Satellite/VPN (very high latency, 500ms+)
234- p2p-transfer send file.zip --to 192.168.1.100:8080 --window-size 64
245+ p2p-transfer send file.zip --peer 192.168.1.100:8080 --window-size 64
235246```
236247
237248** Memory Usage** : Window size × 1MB chunk size
@@ -243,16 +254,16 @@ p2p-transfer send file.zip --to 192.168.1.100:8080 --window-size 64
243254
244255``` bash
245256# Limit to 10 MB/s (useful for shared networks)
246- p2p-transfer send largefile.zip --to 192.168.1.100:8080 --max-speed 10M
257+ p2p-transfer send largefile.zip --peer 192.168.1.100:8080 --max-speed 10M
247258
248259# Limit to 1 GB/s (for very fast networks)
249- p2p-transfer send largefile.zip --to 192.168.1.100:8080 --max-speed 1G
260+ p2p-transfer send largefile.zip --peer 192.168.1.100:8080 --max-speed 1G
250261
251262# Limit to 512 KB/s (for slow connections)
252- p2p-transfer send largefile.zip --to 192.168.1.100:8080 --max-speed 512K
263+ p2p-transfer send largefile.zip --peer 192.168.1.100:8080 --max-speed 512K
253264
254265# Unlimited bandwidth (default)
255- p2p-transfer send largefile.zip --to 192.168.1.100:8080
266+ p2p-transfer send largefile.zip --peer 192.168.1.100:8080
256267```
257268
258269** How it works** :
@@ -267,16 +278,16 @@ Transfers automatically recover from network failures with exponential backoff:
267278
268279``` bash
269280# Auto-reconnect is enabled by default
270- p2p-transfer send large_folder/ --to 192.168.1.100:8080
281+ p2p-transfer send large_folder/ --peer 192.168.1.100:8080
271282
272283# Disable auto-reconnect (manual resume only)
273- p2p-transfer send large_folder/ --to 192.168.1.100:8080 --auto-reconnect false
284+ p2p-transfer send large_folder/ --peer 192.168.1.100:8080 --auto-reconnect false
274285
275286# Unlimited retries (keeps trying until success or permanent error)
276- p2p-transfer send large_folder/ --to 192.168.1.100:8080 --max-retries 0
287+ p2p-transfer send large_folder/ --peer 192.168.1.100:8080 --max-retries 0
277288
278289# Custom retry limit
279- p2p-transfer send large_folder/ --to 192.168.1.100:8080 --max-retries 10
290+ p2p-transfer send large_folder/ --peer 192.168.1.100:8080 --max-retries 10
280291```
281292
282293** How it works** :
@@ -347,7 +358,7 @@ Progress: 100/100 chunks (100.0%, complete)
347358
348359# Later...
349360$ p2p-transfer resume abc12345-def6-7890-ghij-klmnopqrstuv \
350- --to 192.168.1.100:8080 --path my_project
361+ --peer 192.168.1.100:8080 --path my_project
351362
352363🔄 Resuming transfer
353364 Progress: 8/10 files (80.0%)
0 commit comments