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 {
#[serde(rename = "aac")]
AAC,
#[serde(rename = "avif")]
AVIF,
#[serde(rename = "avi")]
AVI,
#[serde(rename = "binary")]
Binary,
#[serde(rename = "bmp")]
BMP,
#[serde(rename = "css")]
CSS,
#[serde(rename = "csv")]
CSV,
#[serde(rename = "docx")]
DOCX,
#[serde(rename = "epub")]
EPUB,
#[serde(rename = "gif")]
GIF,
#[serde(rename = "html")]
HTML,
#[serde(rename = "ico")]
ICO,
#[serde(rename = "jpeg")]
JPEG,
#[serde(rename = "javascript")]
JavaScript,
#[serde(rename = "json")]
JSON,
#[serde(rename = "markdown")]
MarkDown,
#[serde(rename = "midi")]
MIDI,
#[serde(rename = "mp3")]
MP3,
#[serde(rename = "mp4")]
MP4,
#[serde(rename = "mpeg")]
MPEG,
#[serde(rename = "odp")]
ODP,
#[serde(rename = "ods")]
ODS,
#[serde(rename = "odt")]
ODT,
#[serde(rename = "oga")]
OGA,
#[serde(rename = "ogv")]
OGV,
#[serde(rename = "ogx")]
OGX,
#[serde(rename = "opus")]
Opus,
#[serde(rename = "otf")]
OTF,
#[serde(rename = "png")]
PNG,
#[serde(rename = "pdf")]
PDF,
#[serde(rename = "php")]
PHP,
#[serde(rename = "pptx")]
PPTX,
#[serde(rename = "rar")]
RAR,
#[serde(rename = "svg")]
SVG,
#[serde(rename = "tar")]
TAR,
#[serde(rename = "tiff")]
TIFF,
#[serde(rename = "ttf")]
TTF,
#[serde(rename = "text")]
Text,
#[serde(rename = "wav")]
WAV,
#[serde(rename = "weba")]
WEBA,
#[serde(rename = "webm")]
WEBM,
#[serde(rename = "webp")]
WEBP,
#[serde(rename = "woff")]
WOFF,
#[serde(rename = "xlsx")]
XLSX,
#[serde(rename = "xml")]
XML,
#[serde(rename = "zip")]
ZIP,
#[serde(rename = "7z")]
SevenZ,
#[serde(rename = "none")]
None,
}