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

  1. Check the response text in the error to see the receiver's refusal reason and surface it to the sender
  2. On the receiver side, verify the accept prompt logic sends exactly "OK" on acceptance
  3. 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

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


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)