tonhowtf/omniget · warning
Receiver rejected transfer
Error message
Receiver rejected transfer: {} What it means
After the sender transmits the file name and size header, the receiver must answer "OK" to accept the transfer. Any other response means the receiver refused — typically the user declined the incoming file on the other side. The raw response is included in the message so the sender can see why.
Solutions
- Check the response text in the error to see the receiver's refusal reason and surface it to the sender
- On the receiver side, verify the accept prompt logic sends exactly "OK" on acceptance
- If rejection is due to size/name, sanitize the file name or confirm free disk space on the receiver before resending
Example fix
// before
if ok_response != "OK" {
anyhow::bail!("Receiver rejected transfer: {}", ok_response);
}
// after
match ok_response.trim() {
"OK" => {}
"REJECT:disk" => anyhow::bail!("Receiver lacks disk space for {} bytes", session.file_size),
other => anyhow::bail!("Receiver rejected transfer: {}", other),
} Defensive patterns
Strategy: fallback
Validate before calling
// Receiver-side pre-checks that prevent rejections
let free = fs2::available_space(&download_dir)?;
if free < file_size { anyhow::bail!("Insufficient disk space on receiver"); } Try / catch
match run_sender(&mut session, &cancel).await {
Err(e) if e.to_string().contains("Receiver rejected transfer") => {
ui.show_info("The recipient declined the file.");
}
other => other?,
} Prevention
- Sanitize file names before sending so receivers never reject for path-safety
- Check receiver disk space (sent in header) before large transfers
- Standardize the accept token to exactly "OK" in all receiver implementations
When it happens
Trigger: During run_sender, the receiver's reply line after the header is anything other than "OK" — usually "NO"/"REJECT" from a user pressing decline, or a protocol-level refusal (e.g. insufficient disk space reported by a custom receiver).
Common situations: Receiver declines the incoming transfer dialog; receiver rejects because the file name looks unsafe (path characters) or too large for its disk; a mismatched receiver implementation sends a different acknowledgement token.
Related errors
- Receiver rejected transfer
- Relay error
- Unexpected relay response
- Send cancelled while waiting for receiver
- Send cancelled while waiting for OK
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/a400780a143097bf.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/platforms/p2p.rs:297
anyhow::bail!("Unexpected relay response: {}", ready);
}
*session.status.lock().await = "connected".to_string();
tracing::info!("[p2p] receiver connected");
let header = format!("{}\n{}\n", session.file_name, session.file_size);
write_half.write_all(header.as_bytes()).await?;
write_half.flush().await?;
let ok_response = tokio::select! {
line = read_line(&mut reader) => line?,
_ = cancel.cancelled() => {
anyhow::bail!("Send cancelled while waiting for OK");
}
};
if ok_response != "OK" {
anyhow::bail!("Receiver rejected transfer: {}", ok_response);
}
*session.status.lock().await = "transferring".to_string();
tracing::info!(
"[p2p] transferring: {} ({} bytes)",
session.file_name,
session.file_size
);
let mut file = File::open(&session.file_path).await?;
let mut buf = vec![0u8; CHUNK_SIZE];
let mut sent: u64 = 0;
loop {
if cancel.is_cancelled() {
anyhow::bail!("Send cancelled during transfer");
}
View on GitHub (pinned to 8600b91f42)