tftp-packet 0.1.0

A library for creating and parsing TFTP packets
Documentation
# TFTP packet parser in Rust

Based on [rfc 1350](https://datatracker.ietf.org/doc/html/rfc1350).

This is a simple library that parses tftp byte packets. See the [docs] for more information.

## The tftp packet

### WRQ/RRQ

| Opcode                | Filename           | 0           | Mode                | 0           |
| --------------------- | ------------------ | ----------- | ------------------- | ----------- |
| 2 bytes               | string             | 1 byte      | string              | 1 byte      |
| `01` or `02` as `u16` | `"file"` as `[u8]` | `0` as `u8` | `"octet"` as `[u8]` | `0` as `u8` |

### DATA

| Opcode        | Block #        | Data                 |
| ------------- | -------------- | -------------------- |
| 2 bytes       | 2 bytes        | 0 - 512 bytes        |
| `03` as `u16` | 1 - x as `u16` | Data Chunk as `[u8]` |

- **Block #**: Increments with each block sent
- **Data**: Transmission terminates automatically if Packet length < 512

### ACK

| Opcode        | Block #        |
| ------------- | -------------- |
| 2 bytes       | 2 bytes        |
| `04` as `u16` | 1 - x as `u16` |

### ERROR

| Opcode        | Error Code   | Error Message     | 0          |
| ------------- | ------------ | ----------------- | ---------- |
| 2 bytes       | 2 bytes      | string            | 1 byte     |
| `05` as `u16` | `x` as `u16` | `"msg"` as `[u8]` | `0`as `u8` |

## Protocol

### WRQ

```mermaid
sequenceDiagram
    participant Client
    participant Server

    Client->>Server: WRQ, TID=69

    Note right of Server: Block #35;: 0
    Server->>Client: ACK, TID=xyz

    loop TID=xyz
        Client-->>Server: DATA
        Server-->>Client: ACK
    end
```