sendmer 0.2.1

A cli tool to send directories over the network, with NAT hole punching
Documentation
# Sendmer [![][img_crates]][crates] [![][img_doc]][doc]

`Sendmer` 基于 [n0-computer/sendme v0.31.0](https://github.com/n0-computer/sendme/commit/6e50167a8a4d45736179cce3d8d5fd803c87c24e)

用于演示如何使用
[iroh](https://crates.io/crates/iroh) 与 [iroh-blobs](https://crates.io/crates/iroh-blobs)
协议在互联网上传输文件和目录。

该仓库同时扮演两种角色:一方面提供面向终端用户的命令行工具(CLI),
另一方面暴露库 API,允许其他 Rust 项目复用基于 iroh 的传输功能。

同时它也可以作为一个独立的工具用于快速拷贝任务。

Iroh 会在可能的情况下负责 hole punching(打洞)和 NAT 穿透,若打洞失败则回退到中继。

Iroh-blobs 提供基于 [blake3](https://crates.io/crates/blake3) 的流校验,并支持断点续传。

`sendmer` 使用 256 位节点 ID,具备位置透明性(节点 IP 变化时票据仍然有效)。连接采用 TLS 加密。

---

Crate 地址: https://crates.io/crates/sendmer
文档: https://docs.rs/sendmer


## 安装

```
cargo install sendmer
```

## 用法

### 发送端

```
sendmer send <文件或目录>
```

该命令会创建一个临时的 [iroh] 节点,提供指定文件或目录的服务,并输出一个可供接收方使用的 ticket。
提供者会一直运行直到被 `Control-C` 终止;终止后会删除临时目录。

当前实现会在当前目录创建临时目录;未来可能改为系统临时目录或其他位置。

### 接收端

```
sendmer receive <ticket>
```

该命令会下载数据并在**当前目录**创建与源相同名称的文件或目录。

下载流程会先在当前目录创建一个以 `.sendmer-` 开头的临时目录,完成下载并校验后再将文件/目录移动到目标位置;完成后删除临时目录。

所有临时目录均以 `.sendmer-` 开头。

---

开发者指南请见: [DEVELOPMENT.md](DEVELOPMENT.md)

## 示例

### 基本发送

```bash
# 发布目录
sendmer send ./my-folder
```

命令会输出一个 ticket,接收方用该 ticket 执行下载。提供者需保持运行直到接收完成(Ctrl-C 结束)。

### 基本接收

```bash
# 使用 ticket 下载
sendmer receive <ticket>
```

默认将数据下载到当前目录,先写入以 `.sendmer-` 开头的临时目录,完成后再移动到最终位置。

### 关闭进度输出

```bash
sendmer send ./file --no-progress
sendmer receive <ticket> --no-progress
```

### 作为库在 Rust 程序中使用

可以通过调用导出的库函数 `start_share` 和 `download` 在其他 Rust 程序中嵌入 `sendmer` 的功能:

```rust
use sendmer::{start_share, download, SendOptions, ReceiveOptions};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
	// start_share(path, SendOptions { ... }, Some(event_emitter)).await?;
	// download(ticket, ReceiveOptions { ... }, Some(event_emitter)).await?;
	Ok(())
}
```

[img_crates]: https://img.shields.io/crates/v/sendmer.svg
[img_doc]: https://img.shields.io/badge/rust-documentation-blue.svg

[crates]: https://crates.io/crates/sendmer
[doc]: https://docs.rs/sendmer/