Some XAPI daemon uses a *.forwarded unix domain socket to receive “forwarded” requests from XAPI. It uses a different interface than XML-RPC over HTTP, and can be a bit confusing at first stance.
Through this socket, XAPI forwards the request from a host using a JSON-serialized HTTP Request from the XAPI internal http library, it is defined as such :
name | type | description |
---|---|---|
m | string |
HTTP method name |
uri | string |
HTTP route |
query | Map<string, string> |
HTTP Query strings (parameters) |
version | string |
HTTP library version (1.1) |
frame | bool |
HTTP frame policy |
transfer_encoding | string? |
|
accept | string? |
HTTP Accept header |
content_length | int64? |
HTTP Content-Length header |
auth | List<string> |
HTTP Auth header |
cookie | Map<string, string> |
HTTP cookies |
task | string? |
|
subtask_of | string? |
|
content_type | string? |
HTTP Content-Type header |
host | string? |
HTTP Host header |
user_agent | string? |
HTTP User-Agent header |
close | bool |
HTTP close policy |
additional_headers | Map<string, string> |
Additionnal HTTP headers |
body | string? |
HTTP Request body |
traceparent | string? |
Example request
{
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,
image/webp,*/*;q=0.8",
"additional_headers": {
"STUNNEL_PROXY": "TCP6 ...",
"accept-encoding": "gzip, deflate, br"
},
"auth": [],
"close": true,
"cookie": {},
"frame": false,
"m": "Get",
"query": {
"host": "true",
"interval": "1",
"kind": "gauge",
"start": "1687352958"
},
"uri": "/rrd_updates",
"user_agent": "",
"version": "1.1"
}
This request is sent through a Unix Domain Socket message (using sendmsg/recvmsg, check recv(2) for more information).
This message contains a auxiliary data (CMSG) that contains a file descriptor, this file descriptor is used to provide send the response.
The response is a regular HTTP response sent through the file descriptor.