13 releases (3 stable)
Uses new Rust 2024
new 1.5.0-pre2 | May 22, 2025 |
---|---|
1.0.5 | May 21, 2025 |
0.2.0 | May 16, 2025 |
0.1.1 | May 14, 2025 |
#22 in #design
669 downloads per month
24KB
449 lines
The ADTP Protocol
ADTP (Alula's Data Transfer Protocol) NOTE: Encryption is half baked and not reccomended
The Design
Here is a simple ATDP Request
{
"version": "ADTP/1.0",
"uri": "example.com",
"sent": "2025-05-21T11:29:33.136854900+00:00",
"agent": "test/1.0",
"method": "check",
"lang": "us-english",
"cookies": [],
"encryption": "none",
"nonce": "",
"contentType": "none",
"content": []
}
Here is a simple ATDP Response
{
"version": "ADTP/1.0",
"status": "ok",
"sent": "2025-05-21T11:29:33.136854900+00:00",
"agent": "test/1.0",
"language": "us-english",
"cookies": [],
"encryption": "none",
"nonce": "",
"contentType": "text",
"content": []
}
New with RSA Handshake: Ecryption!
---CLIENT--- KEY
---SERVER--- OK CONTENT=RSA_KEY
---CLIENT--- KEY CONTENT=CLIENT_AES_ENCRYPTED_WITH_SERVER_RSA_KEY NONCE=RANDOM_NONCE
---SERVER--- OK NONCE=RANDOM_NONCE
From this point on, all messages are encrypted with the key and a nonce generated for each request/response.
The following methods are avalible for ADTP.
read: functions as get does in HTTP
create: Create new data on the server
update: Update existing data on the server
destroy: Destroy/delete existing data on the server
check: used to check if data exists. if uri is *, this acts as a server health check
auth: used to authorize with a server. authorization is not standardized.
key: used to request the sessions encryption key from the server.
The following status codes are avalible for ADTP
switch-protocols: The server requests to switch protocols. Check content for new protocol.
ok: server has handled your request
pending: server has acknowledged your request. stand by for an ok upon handling.
redirect: content is no longer located at requested location. Check content for new location
denied: Server has denied your request
bad-request: request is malformed.
unauthorized: you are not authorized to view this content
not-found: server could not find the requested content
too-many-requests: server has recieved too many requests from this client
internal-error: server has encountered an internal error.
Here is a rust enum representing all the avalible content types
pub enum ContentType {
/// AAC Audio
#[serde(rename = "aac")]
AAC,
/// AVIF Image
#[serde(rename = "avif")]
AVIF,
/// Audio Video Interleaf
#[serde(rename = "avi")]
AVI,
/// Raw Binary Data
#[serde(rename = "binary")]
Binary,
/// Bitmap Image
#[serde(rename = "bmp")]
BMP,
/// Cascading Style Sheets in UTF-8
#[serde(rename = "css")]
CSS,
/// Comma Seperated Values in UTF-8
#[serde(rename = "csv")]
CSV,
/// Microsoft Word Document
#[serde(rename = "docx")]
DOCX,
/// EPUB Book
#[serde(rename = "epub")]
EPUB,
/// GIF Image
#[serde(rename = "gif")]
GIF,
/// HTML in UTF-8
#[serde(rename = "html")]
HTML,
/// Icon File
#[serde(rename = "ico")]
ICO,
/// JPEG Image File
#[serde(rename = "jpeg")]
JPEG,
/// JavaScript in UTF-8
#[serde(rename = "javascript")]
JavaScript,
/// JavaScript Object Notation in UTF-8
#[serde(rename = "json")]
JSON,
/// Markdown in UTF-8
#[serde(rename = "markdown")]
MarkDown,
/// MIDI
#[serde(rename = "midi")]
MIDI,
/// MP3 Audio
#[serde(rename = "mp3")]
MP3,
/// MP4 Video
#[serde(rename = "mp4")]
MP4,
/// MPEG Video
#[serde(rename = "mpeg")]
MPEG,
/// OpenDocument Presentation
#[serde(rename = "odp")]
ODP,
/// OpenDocument Spreadsheet
#[serde(rename = "ods")]
ODS,
/// OpenDocument Text
#[serde(rename = "odt")]
ODT,
/// Ogg Audio
#[serde(rename = "oga")]
OGA,
/// Ogg Video
#[serde(rename = "ogv")]
OGV,
/// Ogg
#[serde(rename = "ogx")]
OGX,
/// Opus audio in Ogg Container
#[serde(rename = "opus")]
Opus,
/// OpenType Font
#[serde(rename = "otf")]
OTF,
/// PNG Image
#[serde(rename = "png")]
PNG,
/// PDF Document
#[serde(rename = "pdf")]
PDF,
/// PHP Page
#[serde(rename = "php")]
PHP,
/// Microsoft PowerPoint Presentation
#[serde(rename = "pptx")]
PPTX,
/// RAR Archive
#[serde(rename = "rar")]
RAR,
/// SVG Graphics
#[serde(rename = "svg")]
SVG,
/// TAR Archive
#[serde(rename = "tar")]
TAR,
/// TIFF Image
#[serde(rename = "tiff")]
TIFF,
/// TrueType Font
#[serde(rename = "ttf")]
TTF,
/// Plain Text (UTF-8)
#[serde(rename = "text")]
Text,
/// Waveform Audio
#[serde(rename = "wav")]
WAV,
/// Webm Audio
#[serde(rename = "weba")]
WEBA,
/// Webm Video
#[serde(rename = "webm")]
WEBM,
/// Webm Image
#[serde(rename = "webp")]
WEBP,
/// Woff font (WOFF1 or WOFF2)
#[serde(rename = "woff")]
WOFF,
/// Microsoft Excel Spreadsheet
#[serde(rename = "xlsx")]
XLSX,
/// XML (UTF-8)
#[serde(rename = "xml")]
XML,
/// Zip Archive
#[serde(rename = "zip")]
ZIP,
/// 7z archive
#[serde(rename = "7z")]
SevenZ,
#[serde(rename = "none")]
None,
}
Dependencies
~8MB
~150K SLoC