blob: 8b0baea29ff863d2247b7ee4632bacc7df6b0a6a [file]
{
"$schema": "https://github.com/apache/trafficserver/tree/master/tests/tools/lib/replay_schema.json",
"title": "Traffic Server Replay File",
"description": "Data for Traffic Server sessions and transactions. Licensed under Apache V2 https://www.apache.org/licenses/LICENSE-2.0",
"type": "object",
"properties": {
"meta": {
"description": "Metadata for the file.",
"type": "object",
"properties": {
"version": {
"description": "File format version.",
"type": "string"
}
}
},
"sessions": {
"description": "List of sessions",
"type": "array",
"items": {
"title": "Session",
"description": "Session data.",
"type": "object",
"required": [ "transactions" ],
"properties": {
"protocol": {
"description": "The network protocol description of the inbound connection.",
"$ref": "#/definitions/protocol"
},
"connect-time": {
"description": "User Agent connection time.",
"type": "number"
},
"transactions": {
"description": "List of transactions",
"type": "array",
"items": {
"description": "Transaction",
"type": "object",
"required": [ "client-request", "proxy-response" ],
"properties": {
"uuid": {
"description": "UUID to identify this specific transaction.",
"type": "string"
},
"start-time": {
"description": "Start time in epoch format",
"type": "number"
},
"client-request": {
"description": "Request sent by the inbound (downstream) connection.",
"$ref": "#/definitions/request"
},
"proxy-request": {
"description": "Request sent by the proxy.",
"$ref": "#/definitions/request"
},
"server-response": {
"description": "Response from the outbound (upstream) connection.",
"$ref": "#/definitions/response"
},
"proxy-response": {
"description": "Response sent by the proxy.",
"$ref": "#/definitions/response"
}
}
}
}
}
}
}
},
"definitions": {
"encoding": {
"description": "Text encoding format.",
"type": "string",
"enum": ["plain", "uri", "esc_json"]
},
"content": {
"description": "HTTP payload.",
"anyOf" : [
{
"type": "object",
"description": "Explicit payload.",
"required": ["data"],
"properties": {
"encoding": {
"description": "Content data encoding for JSON compatibility.",
"$ref": "#/definitions/encoding"
},
"size": {
"description": "Size of the payload in bytes. This must match the actual size of the 'data' field.",
"type": "number"
},
"data": {
"description": "Content data.",
"type": "string"
}
}
},
{
"type": "object",
"description": "Synthesized payload (only size specified)",
"required": ["size"],
"properties": {
"encoding": {
"description": "Content data encoding for JSON compatibility.",
"$ref": "#/definitions/encoding"
},
"size": {
"description": "Size of the payload in bytes.",
"type": "number"
}
}
}
]
},
"protocol": {
"description": "The characteristics of the lower level protocols.",
"type": "array",
"required": ["name"],
"properties": {
"name": {
"description": "The name of the protocol.",
"type": "string"
},
"version": {
"description": "The version of the protocol.",
"type": "string"
},
"sni": {
"description": "The SNI in the client hello.",
"type": "string"
},
"request-certificate": {
"description": "Whether a certificate should be requested from the proxy.",
"type": "boolean"
},
"verify-mode": {
"description": "The server or client's OpenSSL verify mode against the proxy.",
"type": "boolean"
},
"proxy-verify-mode": {
"description": "The proxy's OpenSSL verify mode against the peer.",
"type": "integer"
},
"proxy-provided-certificate": {
"description": "Whether the proxy provided a cert in the handshake.",
"type": "boolean"
}
}
},
"header-fields": {
"description": "HTTP header fields.",
"type": "object",
"required": ["fields"],
"properties": {
"encoding": {
"description": "Encoding applied to field values.",
"$ref": "#/definitions/encoding"
},
"fields": {
"description": "The field name and value pairs.",
"type": "array",
"items": {
"description": "HTTP field.",
"type": "array",
"prefixItems": [
{
"description": "Name of the field.",
"type": "string"
}, {
"description": "Value of the field.",
"type": "string"
}
]
}
}
}
},
"request": {
"title": "request",
"description": "HTTP request.",
"type": "object",
"required": [ "method", "url" ],
"properties": {
"version": {
"description": "HTTP version",
"type": "string",
"enum": ["0.9", "1.0", "1.1", "2", "3"]
},
"http2": {
"description": "A description of the HTTP/2 properties",
"type": "object",
"required": [ "stream-id" ],
"properties": {
"stream-id": {
"description": "The HTTP/2 stream identifier.",
"type": "integer"
},
"priority": {
"description": "A description of the HTTP/2 properties",
"type": "object",
"required": [ "stream-dependency", "weight" ],
"properties": {
"stream-dependency": {
"description": "The stream this stream depends upon.",
"type": "integer"
},
"weight": {
"description": "The priority weight assigned to the stream dependency.",
"type": "integer"
}
}
}
}
},
"scheme": {
"description": "HTTP scheme (request).",
"type": "string"
},
"method": {
"description": "HTTP method (request)",
"type": "string"
},
"url": {
"description": "URL path, anchor, and parameters.",
"type": "string"
},
"content": {
"description": "Payload for this request",
"$ref": "#/definitions/content"
},
"headers": {
"description": "HTTP header fields.",
"$ref": "#/definitions/header-fields"
},
"protocol": {
"description": "The network protocol description of the connection.",
"$ref": "#/definitions/protocol"
}
}
},
"response": {
"title": "response",
"description": "HTTP response.",
"type": "object",
"required": ["status"],
"properties": {
"version": {
"description": "HTTP version",
"type": "string",
"enum": ["0.9", "1.0", "1.1", "2", "3"]
},
"status": {
"description": "Status code.",
"type": "number"
},
"reason": {
"description": "Reason phrase.",
"type": "string"
},
"content": {
"description": "HTTP Payload",
"$ref": "#/definitions/content"
},
"headers": {
"description": "HTTP header fields.",
"$ref": "#/definitions/header-fields"
}
}
}
}
}