ABI 纪律
结构体即 ABI
布局冻结:新字段只许尾部追加、永不重排改名(xsbase.h 注释明言)。脚本按字段名访问,跨版本二进制兼容。
视图不修改
XS_HostInfo / XS_ServerInfo / XS_HttpReq / XS_StreamConn 均为宿主拥有的视图——读字段安全,写字段未定义。
生命周期
host 视图由其 server lease 保护;HttpReq / StreamConn 视图回调内有效。保存需 Retain(拓扑)或拷贝(请求)。
XS_HostInfo(主机信息,15 字段)
| 字段 | 类型 | 说明 |
|---|---|---|
Enabled | bool | 是否启用 |
Name | const char* | 主机名(server 内唯一) |
Host | const char* | 域名绑定(分号分隔);http/ws 路由键 |
Path | const char* | 资源 / 脚本根(绝对路径) |
DevLang | const char* | c / static / 应用自定 |
DevFile | const char* | 脚本入口路径 |
TlsCA / TlsCert / TlsKey | const char* | host 级证书路径 → SNI 选择器数据源 |
State | XS_RunState | 运行状态(见 枚举参考) |
Runtime | void* | 本代脚本运行时(不透明,勿解引用) |
Server | XS_ServerInfo* | 反向指针:从一个 host 摸到整个拓扑 |
Custom | xvalue* | 本 host 非预设字段的全部内容 |
DevInc / DevLib | const char* | 脚本 include / 库目录(尾部追加字段) |
RuntimeLock | void* | 宿主侧代切换锁(不透明;尾部追加字段) |
XS_ServerInfo(服务信息,20 字段)
| 字段 | 类型 | 说明 |
|---|---|---|
Enabled | bool | 是否启用 |
Class | const char* | "http" | "ws" | "tcp" | "udp" | "custom" | "app" |
Name | const char* | 全局唯一名(xsServerFind 键) |
IP / Port | const char* / uint16 | 明文监听端点 |
TLS / PortTLS / IPTLS | bool / uint16 / const char* | TLS 端点;IPTLS 缺省复用 IP |
Backlog | uint32 | 直通 xrt 监听配置 |
RecvLimit | size_t | 流读上限(直通 xrt) |
DefaultHost | XS_HostInfo* | 恒存在;vhost 未命中时回落 |
HostCount / Hosts | uint32 / XS_HostInfo** | vhost 列表(不含 DefaultHost) |
State | XS_RunState | 运行状态 |
Runtime | void* | 服务级运行时(不透明) |
Engine | struct xnetengine* | 进程级引擎(custom 类应用的起点) |
Custom | xvalue* | 服务级非预设字段 |
Generation | void* | 服务代生命周期拥有者(尾部追加) |
ConfigOwner | void* | 动态配置快照所有者(尾部追加) |
PortBound | uint16 | 实际监听端口(尾部追加):固定端口 = Port;app 类 port:0 自动分配 = OS 分配值(同时回写 Port,端点标识与脚本视图一致);0 = 尚未绑定 |
XS_HttpReq(HTTP 请求视图,6 字段)
typedef struct {
xnetstream* tcp; /* 与 tls 二选一非空 */
xtlsstream* tls; /* 可直接使用 xrt 全套流/发送 API */
const xhttp1head* head; /* 含 MethodCode;字段视图回调内有效 */
xhttp1body* body; /* 分帧状态机:定长 / chunked / 关闭 */
const XS_HostInfo* host;
XS_ServerInfo* server;
} XS_HttpReq;
head 的原始方法与字段视图只在回调内有效(ring buffer 会被复用);body 由 xrtHttp1BodyRead 增量消费。xrt 原生结构(xhttp1head / xhttp1body)的字段见 xrt · http1 参考。
XS_StreamConn(TCP 连接视图,2 字段)
typedef struct XS_StreamConn {
xnetstream* tcp; /* 明文 TCP 传输层 */
xtlsstream* tls; /* TLS 传输层(tcps)*/
} XS_StreamConn;
二选一非空:按非空一侧使用对应发送 API;tcps 下禁止绕过 tls 直写 tcp。连接生命周期由宿主驱动持有(Accept 接管 → 注册表 → Close 析构)——应用不负责 Destroy。
XS_ReloadResult(重载结果,5 字段)
| 字段 | 类型 | 说明 |
|---|---|---|
Id | XS_ReloadId (uint64) | 意图 ID(Submit 返回值) |
State | XS_ReloadState | 七态之一(见 枚举参考) |
Revision | uint64 | 不可变输入快照的内容指纹;无配置输入时含脚本指纹 |
Target[160] | char[] | 目标描述(server / host 名) |
Message[256] | char[] | 结果消息(失败原因) |
这是唯一由应用持有存储的结果结构(栈上接收出参);查询见 xsReloadQuery。