Properly handle type 0 and 255 without lengths
Use structs
Use named opcodes
Add errors for path traversal and file too big
Properly support transaction IDs (UDP source port)
Only send empty chunk when needed
Send error on write attempt
Don't send unsolicited options (this does limit filesize to 32
Megabytes)
Process ACKs
Resend if needed
Send proper sequence numbers