HTTP C API
Заголовок duckonet_http324.h расширяет HTTP API дополнительными структурами и функциями. Layout существующих записей не меняется. Новые записи используют версию 1 и точный размер по контракту dn_record.
| Функция | Назначение |
|---|---|
dn_session_http_capabilities324(session, output) | Возвращает маску возможностей: upload=1, фазовые таймауты=2, IDNA/IPv6=4. |
dn_request_compile_http324(session, spec, hop, options, extra, output, error) | Компилирует запрос с прежними параметрами и дополнительной dn_http_options324. |
dn_request_upload_feed324(request, data, written) | Принимает не больше 64 KiB. DN_PENDING принимает ноль байт. |
dn_request_upload_finish324(request, producer_status) | Отмечает EOF (DN_OK) либо ошибку producer. |
dn_request_upload_info_copy324(request, output) | Копирует состояние в dn_http_upload_info324. |
dn_request_upload_wait324(request, minimum_room, wait_ms, output) | Ограниченно ждёт место и копирует состояние. |
dn_http_url_normalize324(input, output, capacity, required) | Канонизирует UTF-8 HTTP URL. При малом буфере возвращает DN_E_BUFFER_SMALL без частичной строки; required содержит размер результата. |
dn_http_options324 содержит prefix, connect_timeout_ms, read_timeout_ms, upload_length, upload_limit_bytes, flags, reserved. Ноль фазового таймаута отключает дополнительный предел. Флаги DN_HTTP324_UPLOAD=1 и DN_HTTP324_LENGTH_KNOWN=2 обозначают поток и известную длину; reserved=0.
dn_http_upload_info324 содержит prefix, bytes_fed, bytes_read, queued_bytes, maximum_queued_bytes, ready, eof, terminal, timeout_reason. Причины: NONE=0, TOTAL=1, CONNECT=2, READ=3. Счётчики подачи не подтверждают получение сервером.
Подача не вызывает пользовательский код. Она использует прежнее владение request/session, допуск и правила закрытия. Один handle нельзя освобождать, пока другой поток выполняет над ним вызов. После EOF или ошибки дождитесь terminal outcome и завершите существующие барьеры; сами по себе finish и cancel не подтверждают освобождение ресурсов.
Общие правила тел, адресов и времени приведены в руководстве HTTP.
Настройки соединения
Для прямого управления TransportConfig принимает те же network, tls, rate_limit; передавайте его существующему механизму компиляции транспорта и создания сессии. Не нужно вручную собирать C-структуры при работе через Python.
C API предоставляет dn_session_create_network331, dn_session_network_capabilities331, dn_response_socket_info331. Схемы их аргументов и размеры записей находятся в публичном duckonet_network331.h. Записи настроек имеют префикс размера/версии и не меняют layout остальных структур и функций. Фабрика принимает неизменяемые настройки соединения вместе с прежними engine/profile/transport/cookie-параметрами; getter возможностей возвращает битовую маску, getter сокета копирует наблюдение ответа в запись вызывающего кода.
Необязательные возможности проверяются по фактически загруженному runtime. Прежние вызовы продолжают использовать прежний путь. Новая опция со старым несовместимым runtime вызывает ошибку поддержки до чтения PEM-файлов и обращения к целевому серверу; сам факт наличия Python-класса не добавляет отсутствующую возможность нативной библиотеке.
На открытом HttpClient свойство capabilities.connection_options содержит поддержанные группы dns, bind, tcp, mtls, spki_pins, rate_limit; capabilities.socket_diagnostics сообщает о поддержке наблюдения сокета, capabilities.http3_socks_udp — SOCKS5 UDP. Эти сведения не отменяют ограничений конкретной комбинации настроек, профиля, ОС и прокси. Socks5UDPProxy.validate() и TransportConfig.validate() проверяют форму своей конфигурации; они не подключаются к серверу и не подтверждают сетевую доступность.