XS_RunState (состояние выполнения)
| Значение | Имя | Смысл |
|---|---|---|
| 0 | XS_RUN_STARTING | идёт сборка |
| 1 | XS_RUN_RUNNING | обслуживает запросы |
| 2 | XS_RUN_RELOAD_FAILED | последняя перезагрузка не удалась, старое поколение продолжает обслуживать |
| 3 | XS_RUN_STOPPING | идёт освобождение |
| 4 | XS_RUN_STOPPED | остановлен |
Висит на XS_ServerInfo.State и XS_HostInfo.State; читать его для инспекционных сводок безопасно (чтение значения перечисления не связано с временем жизни заимствований).
XS_ReloadState (семь состояний перезагрузки)
ACCEPTED ──▶ PREPARING ──▶ SUCCEEDED
(принято) (компиляция) (успех)
├──▶ FAILED ошибка компиляции/проверки; старое поколение обслуживает как есть
├──▶ SUPERSEDED перекрыт более новым намерением того же server
└──▶ CANCELLED отменён до подачи
| Значение | Имя | Смысл |
|---|---|---|
| 0 | XS_RELOAD_UNKNOWN | исходное / запрос ничего не нашёл |
| 1 | XS_RELOAD_ACCEPTED | намерение принято (вернулся стабильный ID) |
| 2 | XS_RELOAD_PREPARING | идут снимок и компиляция кандидата |
| 3 | XS_RELOAD_SUCCEEDED | новое поколение опубликовано |
| 4 | XS_RELOAD_FAILED | неудача; причина — в Message |
| 5 | XS_RELOAD_SUPERSEDED | перекрыт новейшим намерением (latest-wins) |
| 6 | XS_RELOAD_CANCELLED | отменён до входа в зону побочных эффектов |
XS_RequestResult (трёхзначный результат запроса)
| Значение | Имя | Семантика |
|---|---|---|
| 0 | XS_OK | полный ответ уже записан; драйвер вычитывает остаток body и продолжает keep-alive |
| 1 | XS_FALLBACK | не обработано: GET/HEAD проваливаются в статический слой, остальное — 404 |
| 2 | XS_TAKEOVER | приложение забирает соединение: pull/Future сами ведут приём-передачу и в конце Close |
XHTTP_METHOD_* (битовые маски HTTP-методов)
Распространённые методы занимают непересекающиеся одиночные биты; ненулевое значение — это и разобранный одиночный метод, и атомарный бит в множестве методов. Комбинационные макросы задают типовые маршрутизационные наборы.
| Значение | Имя | Примечание |
|---|---|---|
| 0x00000000 | XHTTP_METHOD_INVALID | пустое значение или некорректный токен; в множестве естественным образом не совпадает ни с одним методом |
| 0x00000001 | XHTTP_METHOD_OTHER | метод с корректным синтаксисом, но без встроенного класса (метод-расширение) |
| 0x00000002 | XHTTP_METHOD_GET | GET |
| 0x00000004 | XHTTP_METHOD_HEAD | HEAD |
| 0x00000008 | XHTTP_METHOD_POST | POST |
| 0x00000010 | XHTTP_METHOD_PUT | PUT |
| 0x00000020 | XHTTP_METHOD_DELETE | DELETE |
| 0x00000040 | XHTTP_METHOD_CONNECT | CONNECT |
| 0x00000080 | XHTTP_METHOD_OPTIONS | OPTIONS |
| 0x00000100 | XHTTP_METHOD_TRACE | TRACE |
| 0x00000200 | XHTTP_METHOD_PATCH | PATCH |
Комбинационные макросы
/* множество методов типовых CRUD-маршрутов; PUT и PATCH — оба методы обновления */
#define XHTTP_METHOD_CRUD ( GET | POST | PUT | PATCH | DELETE )
/* совпадает с любым встроенным методом или синтаксически корректным методом-расширением */
#define XHTTP_METHOD_ANY ( OTHER | GET | HEAD | POST | PUT | DELETE
| CONNECT | OPTIONS | TRACE | PATCH )
Обратите внимание:
CRUD не содержит HEAD (HEAD читает только метаданные, по семантике — как GET); ANY содержит OTHER и покрывает методы-расширения. Если маршрут зарегистрирован только на GET, запрос HEAD будет отвергнут в слоте метода (405 + Allow: GET) — поведение, проверенное опытным путём в главе 2.