{"owner":"ithewei","repo":"libhv","hasSkills":true,"totalSkillsCount":2,"totalTokensCount":4842,"categories":["project-spec","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["docs/API.md","AGENTS.md"],"skills":{"docs/API.md":"# libhv API Manual\n\n## base\n\n### hplatform.h\n- OS: OS_WIN, OS_UNIX (OS_LINUX, OS_ANDROID, OS_DARWIN ...)\n- ARCH: ARCH_X86, ARCH_X64, ARCH_ARM, ARCH_ARM64\n- COMPILER: COMPILER_MSVC, COMPILER_MINGW, COMPILER_GCC, COMPILER_CLANG\n- BYTE_ORDER: BIG_ENDIAN, LITTLE_ENDIAN\n- stdbool.h: bool, true, false\n- stdint.h: int8_t, int16_t, int32_t, int64_t\n- hv_sleep, hv_msleep, hv_usleep, hv_delay\n- hv_mkdir\n- stricmp, strcasecmp\n\n### hexport.h\n- HV_EXPORT, HV_INLINE\n- HV_SOURCE, HV_STATICLIB, HV_DYNAMICLIB\n- HV_DEPRECATED\n- HV_UNUSED\n- EXTERN_C, BEGIN_EXTERN_C, END_EXTERN_C\n- BEGIN_NAMESPACE, END_NAMESPACE, USING_NAMESPACE\n- DEFAULT\n- ENUM, STRUCT\n- IN, OUT, INOUT\n- OPTIONAL, REQUIRED, REPEATED\n\n### hdef.h\n- ABS, NABS\n- ARRAY_SIZE\n- BITSET, BITCLR, BITGET\n- CR, LF, CRLF\n- FLOAT_EQUAL_ZERO\n- INFINITE\n- IS_ALPHA, IS_DIGIT, IS_ALPHANUM\n- IS_CNTRL, IS_GRAPH\n- IS_HEX\n- IS_LOWER, IS_UPPER\n- LOWER, UPPER\n- MAKEWORD, LOBYTE, HIBYTE\n- MAKELONG, LOWORD, HIWORD\n- MAKEINT64, LOINT, HIINT\n- MAKE_FOURCC\n- MAX, MIN, LIMIT\n- MAX_PATH\n- NULL, TRUE, FALSE\n- SAFE_FREE, SAFE_DELETE, SAFE_DELETE_ARRAY, SAFE_RELEASE\n- STRINGCAT\n- STRINGIFY\n- offsetof, offsetofend\n- container_of\n- prefetch\n- printd, printe\n\n### hatomic.h\n- hatomic_flag_t, hatomic_t\n- hatomic_flag_test_and_set\n- hatomic_flag_clear\n- hatomic_add\n- hatomic_sub\n- hatomic_inc\n- hatomic_dec\n\n### herr.h\n- hv_strerror\n\n### htime.h\n- IS_LEAP_YEAR\n- datetime_t\n- gettick_ms\n- gettimeofday\n- gettimeofday_ms\n- gettimeofday_us\n- gethrtime_us\n- datetime_now\n- datetime_localtime\n- datetime_mktime\n- datetime_past\n- datetime_future\n- duration_fmt\n- datetime_fmt\n- gmtime_fmt\n- days_of_month\n- month_atoi\n- month_itoa\n- weekday_atoi\n- weekday_itoa\n- hv_compile_datetime\n- cron_next_timeout\n\n### hmath.h\n- floor2e\n- ceil2e\n- varint_encode\n- varint_decode\n\n### hbase.h\n- hv_malloc\n- hv_calloc\n- hv_realloc\n- hv_zalloc\n- hv_strncpy\n- hv_strncat\n- hv_strlower\n- hv_strupper\n- hv_strreverse\n- hv_strstartswith\n- hv_strendswith\n- hv_strcontains\n- hv_wildcard_match\n- hv_strnchr\n- hv_strrchr_dot\n- hv_strrchr_dir\n- hv_basename\n- hv_suffixname\n- hv_mkdir_p\n- hv_rmdir_p\n- hv_exists\n- hv_isdir\n- hv_isfile\n- hv_islink\n- hv_filesize\n- get_executable_path\n- get_executable_dir\n- get_executable_file\n- get_run_dir\n- hv_rand\n- hv_random_string\n- hv_getboolean\n- hv_parse_size\n- hv_parse_time\n- hv_parse_url\n\n### hversion.h\n- hv_version\n- hv_compile_version\n- version_atoi\n- version_itoa\n\n### hsysinfo.h\n- get_ncpu\n- get_meminfo\n\n### hproc.h\n- hproc_spawn\n\n### hthread.h\n- hv_getpid\n- hv_gettid\n- HTHREAD_RETTYPE\n- HTHREAD_ROUTINE\n- hthread_create\n- hthread_join\n- class HThread\n\n### hmutex.h\n- hmutex_t\n- hmutex_init\n- hmutex_destroy\n- hmutex_lock\n- hmutex_unlock\n- hspinlock_t\n- hspinlock_init\n- hspinlock_destroy\n- hspinlock_lock\n- hspinlock_unlock\n- hrwlock_t\n- hrwlock_init\n- hrwlock_destroy\n- hrwlock_rdlock\n- hrwlock_rdunlock\n- hrwlock_wrlock\n- hrwlock_wrunlock\n- htimed_mutex_t\n- htimed_mutex_init\n- htimed_mutex_destroy\n- htimed_mutex_lock\n- htimed_mutex_lock_for\n- htimed_mutex_unlock\n- hcondvar_t\n- hcondvar_init\n- hcondvar_destroy\n- hcondvar_wait\n- hcondvar_wait_for\n- hcondvar_signal\n- hcondvar_broadcast\n- hsem_init\n- hsem_destroy\n- hsem_wait\n- hsem_post\n- hsem_timedwait\n- honce_t\n- HONCE_INIT\n- honce\n- class `hv::MutexLock`\n- class `hv::SpinLock`\n- class `hv::RWLock`\n- class `hv::LockGuard`\n- synchronized\n\n### hsocket.h\n- INVALID_SOCKET\n- closesocket\n- blocking\n- nonblocking\n- Bind\n- Listen\n- Connect\n- ConnectNonblock\n- ConnectTimeout\n- ResolveAddr\n- Socketpair\n- socket_errno\n- socket_strerror\n- sockaddr_u\n- sockaddr_ip\n- sockaddr_port\n- sockaddr_set_ip\n- sockaddr_set_port\n- sockaddr_set_ipport\n- sockaddr_len\n- sockaddr_str\n- sockaddr_print\n- SOCKADDR_LEN\n- SOCKADDR_STR\n- SOCKADDR_PRINT\n- tcp_nodelay\n- tcp_nopush\n- tcp_keepalive\n- udp_broadcast\n- ip_v6only\n- so_sndtimeo\n- so_rcvtimeo\n- so_sndbuf\n- so_rcvbuf\n- so_reuseaddr\n- so_reuseport\n- so_linger\n\n### hlog.h\n- default_logger\n- file_logger\n- stderr_logger\n- stdout_logger\n- logger_create\n- logger_destroy\n- logger_enable_color\n- logger_enable_fsync\n- logger_fsync\n- logger_print\n- logger_set_file\n- logger_set_handler\n- logger_set_level\n- logger_set_max_bufsize\n- logger_set_max_filesize\n- logger_set_remain_days\n- logger_set_truncate_percent\n- logger_get_cur_file\n- hlogd, hlogi, hlogw, hloge, hlogf\n- LOGD, LOGI, LOGW, LOGE, LOGF\n\n### hbuf.h\n- hbuf_t\n- offset_buf_t\n- class HBuf\n- class HVLBuf\n- class HRingBuf\n\n### hmain.h\n- main_ctx_init\n- parse_opt\n- parse_opt_long\n- dump_opt_long\n- get_arg\n- get_env\n- setproctitle\n- signal_init\n- signal_handle\n- create_pidfile\n- delete_pidfile\n- getpid_form_pidfile\n- master_workers_run\n\n### hstring.h\n- to_string\n- from_string\n- toupper\n- tolower\n- reverse\n- startswith\n- endswith\n- contains\n- asprintf\n- trim\n- ltrim\n- rtrim\n- trim_pairs\n- split\n- splitKV\n- replace\n- replaceAll\n\n### hfile.h\n- class HFile\n\n### hpath.h\n- exists\n- isdir\n- isfile\n- islink\n- basename\n- dirname\n- filename\n- suffixname\n- join\n\n### hdir.h\n- listdir\n\n### hurl.h\n- HUrl::escape\n- HUrl::unescape\n- HUrl::parse\n- HUrl::dump\n\n### hscope.h\n- defer\n- template ScopeCleanup\n- template ScopeFree\n- template ScopeDelete\n- template ScopeDeleteArray\n- template ScopeRelease\n- template ScopeLock\n\n### ifconfig.h\n- ifconfig\n\n## utils\n### md5.h\n- HV_MD5Init\n- HV_MD5Update\n- HV_MD5Final\n- hv_md5\n- hv_md5_hex\n\n### sha1.h\n- HV_SHA1Init\n- HV_SHA1Update\n- HV_SHA1Final\n- HV_SHA1\n- hv_sha1\n- hv_sha1_hex\n\n### base64.h\n- hv_base64_decode\n- hv_base64_encode\n\n### json.hpp\n- json::parse\n- json::dump\n\n### singleton.h\n- DISABLE_COPY\n- SINGLETON_DECL\n- SINGLETON_IMPL\n\n## event\n\n### hloop.h\n- hloop_create_tcp_client\n- hloop_create_tcp_server\n- hloop_create_udp_client\n- hloop_create_udp_server\n- hloop_create_ssl_client\n- hloop_create_ssl_server\n- hloop_new\n- hloop_free\n- hloop_run\n- hloop_stop\n- hloop_pause\n- hloop_resume\n- hloop_status\n- hloop_pid\n- hloop_tid\n- hloop_now\n- hloop_now_ms\n- hloop_now_us\n- hloop_update_time\n- hloop_set_userdata\n- hloop_userdata\n- hloop_wakeup\n- hloop_post_event\n- hevent_loop\n- hevent_type\n- hevent_id\n- hevent_priority\n- hevent_userdata\n- hevent_set_priority\n- hevent_ser_userdata\n- haccept\n- hconnect\n- hread\n- hwrite\n- hrecv\n- hsend\n- hrecvfrom\n- hsendto\n- hio_add\n- hio_del\n- hio_get\n- hio_detach\n- hio_attach\n- hio_read\n- hio_read_start\n- hio_read_stop\n- hio_read_once\n- hio_read_until\n- hio_read_until_length\n- hio_read_until_delim\n- hio_read_readline\n- hio_read_readstring\n- hio_read_readbytes\n- hio_write\n- hio_close\n- hio_accept\n- hio_connect\n- hloop_create_tcp_proxy_server\n- hloop_create_udp_proxy_server\n- hloop_create_socks5_proxy_server\n- hloop_create_socks5_client\n- hio_fd\n- hio_id\n- hio_type\n- hio_error\n- hio_localaddr\n- hio_peeraddr\n- hio_events\n- hio_revents\n- hio_is_opened\n- hio_is_closed\n- hio_enable_ssl\n- hio_is_ssl\n- hio_get_ssl\n- hio_set_ssl\n- hio_get_ssl_ctx\n- hio_set_ssl_ctx\n- hio_new_ssl_ctx\n- hio_setcb_accept\n- hio_setcb_connect\n- hio_setcb_read\n- hio_setcb_write\n- hio_setcb_close\n- hio_getcb_accept\n- hio_getcb_connect\n- hio_getcb_read\n- hio_getcb_write\n- hio_getcb_close\n- hio_set_type\n- hio_set_localaddr\n- hio_set_peeraddr\n- hio_set_readbuf\n- hio_set_connect_timeout\n- hio_set_close_timeout\n- hio_set_read_timeout\n- hio_set_write_timeout\n- hio_set_keepalive_timeout\n- hio_set_heartbeat\n- hio_set_unpack\n- hio_unset_unpack\n- hio_read_upstream\n- hio_write_upstream\n- hio_close_upstream\n- hio_setup_upstream\n- hio_get_upstream\n- hio_setup_tcp_upstream\n- hio_setup_ssl_upstream\n- hio_setup_udp_upstream\n- hio_create_socket\n- hio_create_pipe\n- hio_context\n- hio_set_context\n- htimer_add\n- htimer_add_period\n- htimer_del\n- htimer_reset\n- hidle_add\n- hidle_del\n- hsignal_add\n- hsignal_del\n\n### nlog.h\n- network_logger\n- nlog_listen\n\n## evpp\n- class Buffer\n- class Channel\n- class Event\n- class EventLoop\n- class EventLoopThread\n- class EventLoopThreadPool\n- class TcpClient\n- class TcpServer\n- class UdpClient\n- class UdpServer\n\n## ssl\n- hssl_ctx_init\n- hssl_ctx_cleanup\n- hssl_ctx_instance\n- hssl_ctx_new\n- hssl_ctx_free\n- hssl_new\n- hssl_free\n- hssl_accept\n- hssl_connnect\n- hssl_read\n- hssl_write\n- hssl_close\n- hssl_set_sni_hostname\n\n## protocol\n\n### dns.h\n- dns_name_decode\n- dns_name_encode\n- dns_pack\n- dns_unpack\n- dns_rr_pack\n- dns_rr_unpack\n- dns_query\n- dns_free\n- nslookup\n\n### ftp.h\n- ftp_command_str\n- ftp_connect\n- ftp_login\n- ftp_exec\n- ftp_upload\n- ftp_download\n- ftp_download_with_cb\n- ftp_quit\n- ftp_status_str\n\n### smtp.h\n- smtp_command_str\n- smtp_status_str\n- smtp_build_command\n- sendmail\n\n### icmp.h\n- ping\n\n## http\n- class HttpMessage\n- class HttpRequest\n- class HttpResponse\n- class HttpParser\n\n### httpdef.h\n- http_content_type_enum\n- http_content_type_enum_by_suffix\n- http_content_type_str\n- http_content_type_str_by_suffix\n- http_content_type_suffix\n- http_errno_description\n- http_errno_name\n- http_method_enum\n- http_method_str\n- http_status_enum\n- http_status_str\n\n### http_content.h\n- parse_query_params\n- parse_json\n- parse_multipart\n- dump_query_params\n- dump_json\n- dump_multipart\n\n### HttpClient.h\n- http_client_new\n- http_client_del\n- http_client_send\n- http_client_send_async\n- http_client_strerror\n- http_client_set_timeout\n- http_client_set_header\n- http_client_del_header\n- http_client_get_header\n- http_client_clear_headers\n- http_client_set_http_proxy\n- http_client_set_https_proxy\n- http_client_add_no_proxy\n- class HttpClient\n\n### requests.h\n- requests::request\n- requests::get\n- requests::post\n- requests::put\n- requests::patch\n- requests::Delete\n- requests::head\n- requests::async\n\n### axios.h\n- axios::axios\n- axios::get\n- axios::post\n- axios::put\n- axios::patch\n- axios::Delete\n- axios::head\n- axios::async\n\n### HttpServer.h\n- http_server_run\n- http_server_stop\n- class HttpService\n- class HttpServer\n\n### WebSocketClient.h\n- class WebSocketClient\n\n### WebSocketServer.h\n- websocket_server_run\n- websocket_server_stop\n- class WebSocketService\n- class WebSocketServer\n\n## mqtt\n- mqtt_client_new\n- mqtt_client_free\n- mqtt_client_run\n- mqtt_client_stop\n- mqtt_client_set_id\n- mqtt_client_set_will\n- mqtt_client_set_auth\n- mqtt_client_set_callback\n- mqtt_client_set_userdata\n- mqtt_client_get_userdata\n- mqtt_client_get_last_error\n- mqtt_client_set_ssl_ctx\n- mqtt_client_new_ssl_ctx\n- mqtt_client_set_reconnect\n- mqtt_client_reconnect\n- mqtt_client_set_connect_timeout\n- mqtt_client_connect\n- mqtt_client_is_connected\n- mqtt_client_disconnect\n- mqtt_client_publish\n- mqtt_client_subscribe\n- mqtt_client_unsubscribe\n- class MqttClient\n\n## other\n- class HThreadPool\n- class HObjectPool\n- class ThreadLocalStorage\n","AGENTS.md":"# AGENTS.md\n\nThis file provides guidance to agents when working with code in this repository.\n\n## Project Overview\n\nlibhv is a cross-platform C/C++ network library providing event-loop with non-blocking IO and timer. Core is C99, high-level wrappers are C++11. Compatible with gcc4.8+, MSVC2015+, clang. Supports Linux, Windows, macOS, Android, iOS, BSD, Solaris.\n\n## Build Commands\n\n### Makefile (primary, Unix)\n```bash\n./configure --with-openssl --with-http --with-mqtt --with-kcp  # configure options\nmake libhv          # build library only (shared + static)\nmake                # build library + examples\nmake examples       # build all example programs\nmake unittest       # compile unit tests\nmake evpp           # build C++ evpp tests (requires libhv built first)\nmake clean          # clean build artifacts\nsudo make install   # install to /usr/local/include/hv and /usr/local/lib\n```\n\n### CMake (cross-platform)\n```bash\nmkdir build && cd build\ncmake .. -DWITH_OPENSSL=ON -DWITH_HTTP=ON -DBUILD_EXAMPLES=ON\ncmake --build .\n# Windows: cmake .. -G \"Visual Studio 17 2022\" -A x64\n```\n\n### Bazel\n```bash\nbazel build libhv\n```\n\n### Package Managers\n```bash\nvcpkg install libhv    # vcpkg\nxrepo install libhv    # xmake\n```\n\n## Testing\n\n```bash\nmake unittest                 # compile all unit tests\nmake run-unittest             # compile and run unit tests (calls scripts/unittest.sh)\nbash scripts/unittest.sh      # run pre-built unit tests\nmake check                    # integration test: builds httpd, runs HTTP checks (scripts/check.sh)\n```\n\nRun a single unit test directly:\n```bash\nbin/rbtree_test    # or any test binary in bin/\n```\n\nRun evpp C++ tests (link against libhv):\n```bash\nmake evpp\nbin/TcpServer_test\nbin/EventLoop_test\n```\n\n## Key Configuration Options\n\nBuild flags via `./configure` or CMake `-D` options (see `config.ini` for defaults):\n\n| Makefile flag | CMake flag | Purpose |\n|---|---|---|\n| `--with-openssl` | `-DWITH_OPENSSL=ON` | SSL/TLS via OpenSSL |\n| `--with-gnutls` | `-DWITH_GNUTLS=ON` | SSL/TLS via GnuTLS |\n| `--with-mbedtls` | `-DWITH_MBEDTLS=ON` | SSL/TLS via mbedTLS |\n| `--with-nghttp2` | `-DWITH_NGHTTP2=ON` | HTTP/2 support |\n| `--with-kcp` | `-DWITH_KCP=ON` | KCP reliable UDP |\n| `--with-mqtt` | `-DWITH_MQTT=ON` | MQTT client |\n| `--with-protocol` | `-DWITH_PROTOCOL=ON` | ICMP, DNS, FTP, SMTP |\n| `--with-evpp` | `-DWITH_EVPP=ON` | C++ wrappers (default: yes) |\n| `--without-evpp` | `-DWITH_EVPP=OFF` | Pure C build, no C++ |\n| `--enable-uds` | `-DENABLE_UDS=ON` | Unix Domain Socket |\n| `--with-io-uring` | `-DWITH_IO_URING=ON` | io_uring event backend (Linux 5.1+) |\n\n## Architecture\n\n```\nApplication / Examples\n    │\n    ├── http/server, http/client   HTTP/WebSocket/gRPC (C++)\n    ├── mqtt/                      MQTT client (C)\n    ├── protocol/                  ICMP, DNS, FTP, SMTP (C)\n    │\n    ├── evpp/                      C++ wrappers: TcpServer, TcpClient, UdpServer, EventLoop\n    │\n    ├── event/                     Core event loop: hloop, hio, htimer\n    │   └── backends: epoll (Linux), kqueue (macOS/BSD), iocp/wepoll (Windows), io_uring (Linux 5.1+), select (fallback)\n    │   └── kcp/                   KCP reliable UDP transport\n    │\n    ├── ssl/                       Unified SSL interface (OpenSSL / GnuTLS / mbedTLS / platform)\n    │\n    ├── base/                      Platform abstraction, sockets, threads, logging, data structures\n    ├── util/                      C utilities (base64, md5, sha1)\n    └── cpputil/                   C++ utilities (string, path, file, json, threadpool, ini parser)\n```\n\n**Layering rules**: `base/` has no dependencies on other modules. `event/` depends on `base/` and `ssl/`. `evpp/` wraps `event/`. `http/` depends on `evpp/`. Higher layers are optional and controlled by build flags.\n\n**Public API entry point**: `hv.h` includes all base headers. Module-specific headers (e.g., `HttpServer.h`, `TcpServer.h`, `mqtt_client.h`) are the primary include for each feature. Installed headers go to `include/hv/`.\n\n**Key types**: `hloop_t` (event loop), `hio_t` (IO handle), `htimer_t` (timer) in the C API. `EventLoop`, `TcpServer`, `TcpClient`, `Channel` in the C++ API. `HttpRequest`, `HttpResponse`, `HttpService` for HTTP.\n\n## Code Style\n\n- **Formatting**: `.clang-format` — LLVM-based, 4-space indent, 160 column limit, pointer right-aligned, `catch`/`else` on new line (custom brace wrapping), no include sorting.\n- **C API naming**: `h` prefix for functions (`hloop_new`, `hio_read`), `_t` suffix for types (`hloop_t`, `hio_t`), UPPERCASE macros (`HV_EXPORT`).\n- **C++ API naming**: PascalCase classes (`EventLoop`, `TcpServer`), `hv` namespace.\n- **File naming**: lowercase with underscores (`.c` for C, `.cpp` for C++).\n- **Platform-specific code**: isolated via `hplatform.h` and `#ifdef` conditional compilation.\n\n## CI\n\nGitHub Actions (`.github/workflows/CI.yml`): builds and tests on Linux (with OpenSSL+nghttp2+KCP+MQTT), Windows (CMake + VS2022), macOS, Android (NDK cross-compile), iOS (Xcode cross-compile). Benchmark workflow runs echo-server throughput and HTTP performance comparisons.\n"},"files":{"docs/API.md":"# libhv API Manual\n\n## base\n\n### hplatform.h\n- OS: OS_WIN, OS_UNIX (OS_LINUX, OS_ANDROID, OS_DARWIN ...)\n- ARCH: ARCH_X86, ARCH_X64, ARCH_ARM, ARCH_ARM64\n- COMPILER: COMPILER_MSVC, COMPILER_MINGW, COMPILER_GCC, COMPILER_CLANG\n- BYTE_ORDER: BIG_ENDIAN, LITTLE_ENDIAN\n- stdbool.h: bool, true, false\n- stdint.h: int8_t, int16_t, int32_t, int64_t\n- hv_sleep, hv_msleep, hv_usleep, hv_delay\n- hv_mkdir\n- stricmp, strcasecmp\n\n### hexport.h\n- HV_EXPORT, HV_INLINE\n- HV_SOURCE, HV_STATICLIB, HV_DYNAMICLIB\n- HV_DEPRECATED\n- HV_UNUSED\n- EXTERN_C, BEGIN_EXTERN_C, END_EXTERN_C\n- BEGIN_NAMESPACE, END_NAMESPACE, USING_NAMESPACE\n- DEFAULT\n- ENUM, STRUCT\n- IN, OUT, INOUT\n- OPTIONAL, REQUIRED, REPEATED\n\n### hdef.h\n- ABS, NABS\n- ARRAY_SIZE\n- BITSET, BITCLR, BITGET\n- CR, LF, CRLF\n- FLOAT_EQUAL_ZERO\n- INFINITE\n- IS_ALPHA, IS_DIGIT, IS_ALPHANUM\n- IS_CNTRL, IS_GRAPH\n- IS_HEX\n- IS_LOWER, IS_UPPER\n- LOWER, UPPER\n- MAKEWORD, LOBYTE, HIBYTE\n- MAKELONG, LOWORD, HIWORD\n- MAKEINT64, LOINT, HIINT\n- MAKE_FOURCC\n- MAX, MIN, LIMIT\n- MAX_PATH\n- NULL, TRUE, FALSE\n- SAFE_FREE, SAFE_DELETE, SAFE_DELETE_ARRAY, SAFE_RELEASE\n- STRINGCAT\n- STRINGIFY\n- offsetof, offsetofend\n- container_of\n- prefetch\n- printd, printe\n\n### hatomic.h\n- hatomic_flag_t, hatomic_t\n- hatomic_flag_test_and_set\n- hatomic_flag_clear\n- hatomic_add\n- hatomic_sub\n- hatomic_inc\n- hatomic_dec\n\n### herr.h\n- hv_strerror\n\n### htime.h\n- IS_LEAP_YEAR\n- datetime_t\n- gettick_ms\n- gettimeofday\n- gettimeofday_ms\n- gettimeofday_us\n- gethrtime_us\n- datetime_now\n- datetime_localtime\n- datetime_mktime\n- datetime_past\n- datetime_future\n- duration_fmt\n- datetime_fmt\n- gmtime_fmt\n- days_of_month\n- month_atoi\n- month_itoa\n- weekday_atoi\n- weekday_itoa\n- hv_compile_datetime\n- cron_next_timeout\n\n### hmath.h\n- floor2e\n- ceil2e\n- varint_encode\n- varint_decode\n\n### hbase.h\n- hv_malloc\n- hv_calloc\n- hv_realloc\n- hv_zalloc\n- hv_strncpy\n- hv_strncat\n- hv_strlower\n- hv_strupper\n- hv_strreverse\n- hv_strstartswith\n- hv_strendswith\n- hv_strcontains\n- hv_wildcard_match\n- hv_strnchr\n- hv_strrchr_dot\n- hv_strrchr_dir\n- hv_basename\n- hv_suffixname\n- hv_mkdir_p\n- hv_rmdir_p\n- hv_exists\n- hv_isdir\n- hv_isfile\n- hv_islink\n- hv_filesize\n- get_executable_path\n- get_executable_dir\n- get_executable_file\n- get_run_dir\n- hv_rand\n- hv_random_string\n- hv_getboolean\n- hv_parse_size\n- hv_parse_time\n- hv_parse_url\n\n### hversion.h\n- hv_version\n- hv_compile_version\n- version_atoi\n- version_itoa\n\n### hsysinfo.h\n- get_ncpu\n- get_meminfo\n\n### hproc.h\n- hproc_spawn\n\n### hthread.h\n- hv_getpid\n- hv_gettid\n- HTHREAD_RETTYPE\n- HTHREAD_ROUTINE\n- hthread_create\n- hthread_join\n- class HThread\n\n### hmutex.h\n- hmutex_t\n- hmutex_init\n- hmutex_destroy\n- hmutex_lock\n- hmutex_unlock\n- hspinlock_t\n- hspinlock_init\n- hspinlock_destroy\n- hspinlock_lock\n- hspinlock_unlock\n- hrwlock_t\n- hrwlock_init\n- hrwlock_destroy\n- hrwlock_rdlock\n- hrwlock_rdunlock\n- hrwlock_wrlock\n- hrwlock_wrunlock\n- htimed_mutex_t\n- htimed_mutex_init\n- htimed_mutex_destroy\n- htimed_mutex_lock\n- htimed_mutex_lock_for\n- htimed_mutex_unlock\n- hcondvar_t\n- hcondvar_init\n- hcondvar_destroy\n- hcondvar_wait\n- hcondvar_wait_for\n- hcondvar_signal\n- hcondvar_broadcast\n- hsem_init\n- hsem_destroy\n- hsem_wait\n- hsem_post\n- hsem_timedwait\n- honce_t\n- HONCE_INIT\n- honce\n- class `hv::MutexLock`\n- class `hv::SpinLock`\n- class `hv::RWLock`\n- class `hv::LockGuard`\n- synchronized\n\n### hsocket.h\n- INVALID_SOCKET\n- closesocket\n- blocking\n- nonblocking\n- Bind\n- Listen\n- Connect\n- ConnectNonblock\n- ConnectTimeout\n- ResolveAddr\n- Socketpair\n- socket_errno\n- socket_strerror\n- sockaddr_u\n- sockaddr_ip\n- sockaddr_port\n- sockaddr_set_ip\n- sockaddr_set_port\n- sockaddr_set_ipport\n- sockaddr_len\n- sockaddr_str\n- sockaddr_print\n- SOCKADDR_LEN\n- SOCKADDR_STR\n- SOCKADDR_PRINT\n- tcp_nodelay\n- tcp_nopush\n- tcp_keepalive\n- udp_broadcast\n- ip_v6only\n- so_sndtimeo\n- so_rcvtimeo\n- so_sndbuf\n- so_rcvbuf\n- so_reuseaddr\n- so_reuseport\n- so_linger\n\n### hlog.h\n- default_logger\n- file_logger\n- stderr_logger\n- stdout_logger\n- logger_create\n- logger_destroy\n- logger_enable_color\n- logger_enable_fsync\n- logger_fsync\n- logger_print\n- logger_set_file\n- logger_set_handler\n- logger_set_level\n- logger_set_max_bufsize\n- logger_set_max_filesize\n- logger_set_remain_days\n- logger_set_truncate_percent\n- logger_get_cur_file\n- hlogd, hlogi, hlogw, hloge, hlogf\n- LOGD, LOGI, LOGW, LOGE, LOGF\n\n### hbuf.h\n- hbuf_t\n- offset_buf_t\n- class HBuf\n- class HVLBuf\n- class HRingBuf\n\n### hmain.h\n- main_ctx_init\n- parse_opt\n- parse_opt_long\n- dump_opt_long\n- get_arg\n- get_env\n- setproctitle\n- signal_init\n- signal_handle\n- create_pidfile\n- delete_pidfile\n- getpid_form_pidfile\n- master_workers_run\n\n### hstring.h\n- to_string\n- from_string\n- toupper\n- tolower\n- reverse\n- startswith\n- endswith\n- contains\n- asprintf\n- trim\n- ltrim\n- rtrim\n- trim_pairs\n- split\n- splitKV\n- replace\n- replaceAll\n\n### hfile.h\n- class HFile\n\n### hpath.h\n- exists\n- isdir\n- isfile\n- islink\n- basename\n- dirname\n- filename\n- suffixname\n- join\n\n### hdir.h\n- listdir\n\n### hurl.h\n- HUrl::escape\n- HUrl::unescape\n- HUrl::parse\n- HUrl::dump\n\n### hscope.h\n- defer\n- template ScopeCleanup\n- template ScopeFree\n- template ScopeDelete\n- template ScopeDeleteArray\n- template ScopeRelease\n- template ScopeLock\n\n### ifconfig.h\n- ifconfig\n\n## utils\n### md5.h\n- HV_MD5Init\n- HV_MD5Update\n- HV_MD5Final\n- hv_md5\n- hv_md5_hex\n\n### sha1.h\n- HV_SHA1Init\n- HV_SHA1Update\n- HV_SHA1Final\n- HV_SHA1\n- hv_sha1\n- hv_sha1_hex\n\n### base64.h\n- hv_base64_decode\n- hv_base64_encode\n\n### json.hpp\n- json::parse\n- json::dump\n\n### singleton.h\n- DISABLE_COPY\n- SINGLETON_DECL\n- SINGLETON_IMPL\n\n## event\n\n### hloop.h\n- hloop_create_tcp_client\n- hloop_create_tcp_server\n- hloop_create_udp_client\n- hloop_create_udp_server\n- hloop_create_ssl_client\n- hloop_create_ssl_server\n- hloop_new\n- hloop_free\n- hloop_run\n- hloop_stop\n- hloop_pause\n- hloop_resume\n- hloop_status\n- hloop_pid\n- hloop_tid\n- hloop_now\n- hloop_now_ms\n- hloop_now_us\n- hloop_update_time\n- hloop_set_userdata\n- hloop_userdata\n- hloop_wakeup\n- hloop_post_event\n- hevent_loop\n- hevent_type\n- hevent_id\n- hevent_priority\n- hevent_userdata\n- hevent_set_priority\n- hevent_ser_userdata\n- haccept\n- hconnect\n- hread\n- hwrite\n- hrecv\n- hsend\n- hrecvfrom\n- hsendto\n- hio_add\n- hio_del\n- hio_get\n- hio_detach\n- hio_attach\n- hio_read\n- hio_read_start\n- hio_read_stop\n- hio_read_once\n- hio_read_until\n- hio_read_until_length\n- hio_read_until_delim\n- hio_read_readline\n- hio_read_readstring\n- hio_read_readbytes\n- hio_write\n- hio_close\n- hio_accept\n- hio_connect\n- hloop_create_tcp_proxy_server\n- hloop_create_udp_proxy_server\n- hloop_create_socks5_proxy_server\n- hloop_create_socks5_client\n- hio_fd\n- hio_id\n- hio_type\n- hio_error\n- hio_localaddr\n- hio_peeraddr\n- hio_events\n- hio_revents\n- hio_is_opened\n- hio_is_closed\n- hio_enable_ssl\n- hio_is_ssl\n- hio_get_ssl\n- hio_set_ssl\n- hio_get_ssl_ctx\n- hio_set_ssl_ctx\n- hio_new_ssl_ctx\n- hio_setcb_accept\n- hio_setcb_connect\n- hio_setcb_read\n- hio_setcb_write\n- hio_setcb_close\n- hio_getcb_accept\n- hio_getcb_connect\n- hio_getcb_read\n- hio_getcb_write\n- hio_getcb_close\n- hio_set_type\n- hio_set_localaddr\n- hio_set_peeraddr\n- hio_set_readbuf\n- hio_set_connect_timeout\n- hio_set_close_timeout\n- hio_set_read_timeout\n- hio_set_write_timeout\n- hio_set_keepalive_timeout\n- hio_set_heartbeat\n- hio_set_unpack\n- hio_unset_unpack\n- hio_read_upstream\n- hio_write_upstream\n- hio_close_upstream\n- hio_setup_upstream\n- hio_get_upstream\n- hio_setup_tcp_upstream\n- hio_setup_ssl_upstream\n- hio_setup_udp_upstream\n- hio_create_socket\n- hio_create_pipe\n- hio_context\n- hio_set_context\n- htimer_add\n- htimer_add_period\n- htimer_del\n- htimer_reset\n- hidle_add\n- hidle_del\n- hsignal_add\n- hsignal_del\n\n### nlog.h\n- network_logger\n- nlog_listen\n\n## evpp\n- class Buffer\n- class Channel\n- class Event\n- class EventLoop\n- class EventLoopThread\n- class EventLoopThreadPool\n- class TcpClient\n- class TcpServer\n- class UdpClient\n- class UdpServer\n\n## ssl\n- hssl_ctx_init\n- hssl_ctx_cleanup\n- hssl_ctx_instance\n- hssl_ctx_new\n- hssl_ctx_free\n- hssl_new\n- hssl_free\n- hssl_accept\n- hssl_connnect\n- hssl_read\n- hssl_write\n- hssl_close\n- hssl_set_sni_hostname\n\n## protocol\n\n### dns.h\n- dns_name_decode\n- dns_name_encode\n- dns_pack\n- dns_unpack\n- dns_rr_pack\n- dns_rr_unpack\n- dns_query\n- dns_free\n- nslookup\n\n### ftp.h\n- ftp_command_str\n- ftp_connect\n- ftp_login\n- ftp_exec\n- ftp_upload\n- ftp_download\n- ftp_download_with_cb\n- ftp_quit\n- ftp_status_str\n\n### smtp.h\n- smtp_command_str\n- smtp_status_str\n- smtp_build_command\n- sendmail\n\n### icmp.h\n- ping\n\n## http\n- class HttpMessage\n- class HttpRequest\n- class HttpResponse\n- class HttpParser\n\n### httpdef.h\n- http_content_type_enum\n- http_content_type_enum_by_suffix\n- http_content_type_str\n- http_content_type_str_by_suffix\n- http_content_type_suffix\n- http_errno_description\n- http_errno_name\n- http_method_enum\n- http_method_str\n- http_status_enum\n- http_status_str\n\n### http_content.h\n- parse_query_params\n- parse_json\n- parse_multipart\n- dump_query_params\n- dump_json\n- dump_multipart\n\n### HttpClient.h\n- http_client_new\n- http_client_del\n- http_client_send\n- http_client_send_async\n- http_client_strerror\n- http_client_set_timeout\n- http_client_set_header\n- http_client_del_header\n- http_client_get_header\n- http_client_clear_headers\n- http_client_set_http_proxy\n- http_client_set_https_proxy\n- http_client_add_no_proxy\n- class HttpClient\n\n### requests.h\n- requests::request\n- requests::get\n- requests::post\n- requests::put\n- requests::patch\n- requests::Delete\n- requests::head\n- requests::async\n\n### axios.h\n- axios::axios\n- axios::get\n- axios::post\n- axios::put\n- axios::patch\n- axios::Delete\n- axios::head\n- axios::async\n\n### HttpServer.h\n- http_server_run\n- http_server_stop\n- class HttpService\n- class HttpServer\n\n### WebSocketClient.h\n- class WebSocketClient\n\n### WebSocketServer.h\n- websocket_server_run\n- websocket_server_stop\n- class WebSocketService\n- class WebSocketServer\n\n## mqtt\n- mqtt_client_new\n- mqtt_client_free\n- mqtt_client_run\n- mqtt_client_stop\n- mqtt_client_set_id\n- mqtt_client_set_will\n- mqtt_client_set_auth\n- mqtt_client_set_callback\n- mqtt_client_set_userdata\n- mqtt_client_get_userdata\n- mqtt_client_get_last_error\n- mqtt_client_set_ssl_ctx\n- mqtt_client_new_ssl_ctx\n- mqtt_client_set_reconnect\n- mqtt_client_reconnect\n- mqtt_client_set_connect_timeout\n- mqtt_client_connect\n- mqtt_client_is_connected\n- mqtt_client_disconnect\n- mqtt_client_publish\n- mqtt_client_subscribe\n- mqtt_client_unsubscribe\n- class MqttClient\n\n## other\n- class HThreadPool\n- class HObjectPool\n- class ThreadLocalStorage\n","AGENTS.md":"# AGENTS.md\n\nThis file provides guidance to agents when working with code in this repository.\n\n## Project Overview\n\nlibhv is a cross-platform C/C++ network library providing event-loop with non-blocking IO and timer. Core is C99, high-level wrappers are C++11. Compatible with gcc4.8+, MSVC2015+, clang. Supports Linux, Windows, macOS, Android, iOS, BSD, Solaris.\n\n## Build Commands\n\n### Makefile (primary, Unix)\n```bash\n./configure --with-openssl --with-http --with-mqtt --with-kcp  # configure options\nmake libhv          # build library only (shared + static)\nmake                # build library + examples\nmake examples       # build all example programs\nmake unittest       # compile unit tests\nmake evpp           # build C++ evpp tests (requires libhv built first)\nmake clean          # clean build artifacts\nsudo make install   # install to /usr/local/include/hv and /usr/local/lib\n```\n\n### CMake (cross-platform)\n```bash\nmkdir build && cd build\ncmake .. -DWITH_OPENSSL=ON -DWITH_HTTP=ON -DBUILD_EXAMPLES=ON\ncmake --build .\n# Windows: cmake .. -G \"Visual Studio 17 2022\" -A x64\n```\n\n### Bazel\n```bash\nbazel build libhv\n```\n\n### Package Managers\n```bash\nvcpkg install libhv    # vcpkg\nxrepo install libhv    # xmake\n```\n\n## Testing\n\n```bash\nmake unittest                 # compile all unit tests\nmake run-unittest             # compile and run unit tests (calls scripts/unittest.sh)\nbash scripts/unittest.sh      # run pre-built unit tests\nmake check                    # integration test: builds httpd, runs HTTP checks (scripts/check.sh)\n```\n\nRun a single unit test directly:\n```bash\nbin/rbtree_test    # or any test binary in bin/\n```\n\nRun evpp C++ tests (link against libhv):\n```bash\nmake evpp\nbin/TcpServer_test\nbin/EventLoop_test\n```\n\n## Key Configuration Options\n\nBuild flags via `./configure` or CMake `-D` options (see `config.ini` for defaults):\n\n| Makefile flag | CMake flag | Purpose |\n|---|---|---|\n| `--with-openssl` | `-DWITH_OPENSSL=ON` | SSL/TLS via OpenSSL |\n| `--with-gnutls` | `-DWITH_GNUTLS=ON` | SSL/TLS via GnuTLS |\n| `--with-mbedtls` | `-DWITH_MBEDTLS=ON` | SSL/TLS via mbedTLS |\n| `--with-nghttp2` | `-DWITH_NGHTTP2=ON` | HTTP/2 support |\n| `--with-kcp` | `-DWITH_KCP=ON` | KCP reliable UDP |\n| `--with-mqtt` | `-DWITH_MQTT=ON` | MQTT client |\n| `--with-protocol` | `-DWITH_PROTOCOL=ON` | ICMP, DNS, FTP, SMTP |\n| `--with-evpp` | `-DWITH_EVPP=ON` | C++ wrappers (default: yes) |\n| `--without-evpp` | `-DWITH_EVPP=OFF` | Pure C build, no C++ |\n| `--enable-uds` | `-DENABLE_UDS=ON` | Unix Domain Socket |\n| `--with-io-uring` | `-DWITH_IO_URING=ON` | io_uring event backend (Linux 5.1+) |\n\n## Architecture\n\n```\nApplication / Examples\n    │\n    ├── http/server, http/client   HTTP/WebSocket/gRPC (C++)\n    ├── mqtt/                      MQTT client (C)\n    ├── protocol/                  ICMP, DNS, FTP, SMTP (C)\n    │\n    ├── evpp/                      C++ wrappers: TcpServer, TcpClient, UdpServer, EventLoop\n    │\n    ├── event/                     Core event loop: hloop, hio, htimer\n    │   └── backends: epoll (Linux), kqueue (macOS/BSD), iocp/wepoll (Windows), io_uring (Linux 5.1+), select (fallback)\n    │   └── kcp/                   KCP reliable UDP transport\n    │\n    ├── ssl/                       Unified SSL interface (OpenSSL / GnuTLS / mbedTLS / platform)\n    │\n    ├── base/                      Platform abstraction, sockets, threads, logging, data structures\n    ├── util/                      C utilities (base64, md5, sha1)\n    └── cpputil/                   C++ utilities (string, path, file, json, threadpool, ini parser)\n```\n\n**Layering rules**: `base/` has no dependencies on other modules. `event/` depends on `base/` and `ssl/`. `evpp/` wraps `event/`. `http/` depends on `evpp/`. Higher layers are optional and controlled by build flags.\n\n**Public API entry point**: `hv.h` includes all base headers. Module-specific headers (e.g., `HttpServer.h`, `TcpServer.h`, `mqtt_client.h`) are the primary include for each feature. Installed headers go to `include/hv/`.\n\n**Key types**: `hloop_t` (event loop), `hio_t` (IO handle), `htimer_t` (timer) in the C API. `EventLoop`, `TcpServer`, `TcpClient`, `Channel` in the C++ API. `HttpRequest`, `HttpResponse`, `HttpService` for HTTP.\n\n## Code Style\n\n- **Formatting**: `.clang-format` — LLVM-based, 4-space indent, 160 column limit, pointer right-aligned, `catch`/`else` on new line (custom brace wrapping), no include sorting.\n- **C API naming**: `h` prefix for functions (`hloop_new`, `hio_read`), `_t` suffix for types (`hloop_t`, `hio_t`), UPPERCASE macros (`HV_EXPORT`).\n- **C++ API naming**: PascalCase classes (`EventLoop`, `TcpServer`), `hv` namespace.\n- **File naming**: lowercase with underscores (`.c` for C, `.cpp` for C++).\n- **Platform-specific code**: isolated via `hplatform.h` and `#ifdef` conditional compilation.\n\n## CI\n\nGitHub Actions (`.github/workflows/CI.yml`): builds and tests on Linux (with OpenSSL+nghttp2+KCP+MQTT), Windows (CMake + VS2022), macOS, Android (NDK cross-compile), iOS (Xcode cross-compile). Benchmark workflow runs echo-server throughput and HTTP performance comparisons.\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/ithewei/libhv/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AGENTS.md\n\nThis file provides guidance to agents when working with code in this repository.\n\n## Project Overview\n\nlibhv is a cross-platform C/C++ network library providing event-loop with non-blocking IO and timer. Core is C99, high-level wrappers are C++11. Compatible with gcc4.8+, MSVC2015+, clang. Supports Linux, Windows, macOS, Android, iOS, BSD, Solaris.\n\n## Build Commands\n\n### Makefile (primary, Unix)\n```bash\n./configure --with-openssl --with-http --with-mqtt --with-kcp  # configure options\nmake libhv          # build library only (shared + static)\nmake                # build library + examples\nmake examples       # build all example programs\nmake unittest       # compile unit tests\nmake evpp           # build C++ evpp tests (requires libhv built first)\nmake clean          # clean build artifacts\nsudo make install   # install to /usr/local/include/hv and /usr/local/lib\n```\n\n### CMake (cross-platform)\n```bash\nmkdir build && cd build\ncmake .. -DWITH_OPENSSL=ON -DWITH_HTTP=ON -DBUILD_EXAMPLES=ON\ncmake --build .\n# Windows: cmake .. -G \"Visual Studio 17 2022\" -A x64\n```\n\n### Bazel\n```bash\nbazel build libhv\n```\n\n### Package Managers\n```bash\nvcpkg install libhv    # vcpkg\nxrepo install libhv    # xmake\n```\n\n## Testing\n\n```bash\nmake unittest                 # compile all unit tests\nmake run-unittest             # compile and run unit tests (calls scripts/unittest.sh)\nbash scripts/unittest.sh      # run pre-built unit tests\nmake check                    # integration test: builds httpd, runs HTTP checks (scripts/check.sh)\n```\n\nRun a single unit test directly:\n```bash\nbin/rbtree_test    # or any test binary in bin/\n```\n\nRun evpp C++ tests (link against libhv):\n```bash\nmake evpp\nbin/TcpServer_test\nbin/EventLoop_test\n```\n\n## Key Configuration Options\n\nBuild flags via `./configure` or CMake `-D` options (see `config.ini` for defaults):\n\n| Makefile flag | CMake flag | Purpose |\n|---|---|---|\n| `--with-openssl` | `-DWITH_OPENSSL=ON` | SSL/TLS via OpenSSL |\n| `--with-gnutls` | `-DWITH_GNUTLS=ON` | SSL/TLS via GnuTLS |\n| `--with-mbedtls` | `-DWITH_MBEDTLS=ON` | SSL/TLS via mbedTLS |\n| `--with-nghttp2` | `-DWITH_NGHTTP2=ON` | HTTP/2 support |\n| `--with-kcp` | `-DWITH_KCP=ON` | KCP reliable UDP |\n| `--with-mqtt` | `-DWITH_MQTT=ON` | MQTT client |\n| `--with-protocol` | `-DWITH_PROTOCOL=ON` | ICMP, DNS, FTP, SMTP |\n| `--with-evpp` | `-DWITH_EVPP=ON` | C++ wrappers (default: yes) |\n| `--without-evpp` | `-DWITH_EVPP=OFF` | Pure C build, no C++ |\n| `--enable-uds` | `-DENABLE_UDS=ON` | Unix Domain Socket |\n| `--with-io-uring` | `-DWITH_IO_URING=ON` | io_uring event backend (Linux 5.1+) |\n\n## Architecture\n\n```\nApplication / Examples\n    │\n    ├── http/server, http/client   HTTP/WebSocket/gRPC (C++)\n    ├── mqtt/                      MQTT client (C)\n    ├── protocol/                  ICMP, DNS, FTP, SMTP (C)\n    │\n    ├── evpp/                      C++ wrappers: TcpServer, TcpClient, UdpServer, EventLoop\n    │\n    ├── event/                     Core event loop: hloop, hio, htimer\n    │   └── backends: epoll (Linux), kqueue (macOS/BSD), iocp/wepoll (Windows), io_uring (Linux 5.1+), select (fallback)\n    │   └── kcp/                   KCP reliable UDP transport\n    │\n    ├── ssl/                       Unified SSL interface (OpenSSL / GnuTLS / mbedTLS / platform)\n    │\n    ├── base/                      Platform abstraction, sockets, threads, logging, data structures\n    ├── util/                      C utilities (base64, md5, sha1)\n    └── cpputil/                   C++ utilities (string, path, file, json, threadpool, ini parser)\n```\n\n**Layering rules**: `base/` has no dependencies on other modules. `event/` depends on `base/` and `ssl/`. `evpp/` wraps `event/`. `http/` depends on `evpp/`. Higher layers are optional and controlled by build flags.\n\n**Public API entry point**: `hv.h` includes all base headers. Module-specific headers (e.g., `HttpServer.h`, `TcpServer.h`, `mqtt_client.h`) are the primary include for each feature. Installed headers go to `include/hv/`.\n\n**Key types**: `hloop_t` (event loop), `hio_t` (IO handle), `htimer_t` (timer) in the C API. `EventLoop`, `TcpServer`, `TcpClient`, `Channel` in the C++ API. `HttpRequest`, `HttpResponse`, `HttpService` for HTTP.\n\n## Code Style\n\n- **Formatting**: `.clang-format` — LLVM-based, 4-space indent, 160 column limit, pointer right-aligned, `catch`/`else` on new line (custom brace wrapping), no include sorting.\n- **C API naming**: `h` prefix for functions (`hloop_new`, `hio_read`), `_t` suffix for types (`hloop_t`, `hio_t`), UPPERCASE macros (`HV_EXPORT`).\n- **C++ API naming**: PascalCase classes (`EventLoop`, `TcpServer`), `hv` namespace.\n- **File naming**: lowercase with underscores (`.c` for C, `.cpp` for C++).\n- **Platform-specific code**: isolated via `hplatform.h` and `#ifdef` conditional compilation.\n\n## CI\n\nGitHub Actions (`.github/workflows/CI.yml`): builds and tests on Linux (with OpenSSL+nghttp2+KCP+MQTT), Windows (CMake + VS2022), macOS, Android (NDK cross-compile), iOS (Xcode cross-compile). Benchmark workflow runs echo-server throughput and HTTP performance comparisons.\n","isInternal":false,"tokens":1444,"sizeBytes":5194},{"name":"API.md","path":"docs/API.md","rawUrl":"https://raw.githubusercontent.com/ithewei/libhv/HEAD/docs/API.md","title":"docs - API Interface Contract & Specifications","category":"project-spec","format":"markdown","content":"# libhv API Manual\n\n## base\n\n### hplatform.h\n- OS: OS_WIN, OS_UNIX (OS_LINUX, OS_ANDROID, OS_DARWIN ...)\n- ARCH: ARCH_X86, ARCH_X64, ARCH_ARM, ARCH_ARM64\n- COMPILER: COMPILER_MSVC, COMPILER_MINGW, COMPILER_GCC, COMPILER_CLANG\n- BYTE_ORDER: BIG_ENDIAN, LITTLE_ENDIAN\n- stdbool.h: bool, true, false\n- stdint.h: int8_t, int16_t, int32_t, int64_t\n- hv_sleep, hv_msleep, hv_usleep, hv_delay\n- hv_mkdir\n- stricmp, strcasecmp\n\n### hexport.h\n- HV_EXPORT, HV_INLINE\n- HV_SOURCE, HV_STATICLIB, HV_DYNAMICLIB\n- HV_DEPRECATED\n- HV_UNUSED\n- EXTERN_C, BEGIN_EXTERN_C, END_EXTERN_C\n- BEGIN_NAMESPACE, END_NAMESPACE, USING_NAMESPACE\n- DEFAULT\n- ENUM, STRUCT\n- IN, OUT, INOUT\n- OPTIONAL, REQUIRED, REPEATED\n\n### hdef.h\n- ABS, NABS\n- ARRAY_SIZE\n- BITSET, BITCLR, BITGET\n- CR, LF, CRLF\n- FLOAT_EQUAL_ZERO\n- INFINITE\n- IS_ALPHA, IS_DIGIT, IS_ALPHANUM\n- IS_CNTRL, IS_GRAPH\n- IS_HEX\n- IS_LOWER, IS_UPPER\n- LOWER, UPPER\n- MAKEWORD, LOBYTE, HIBYTE\n- MAKELONG, LOWORD, HIWORD\n- MAKEINT64, LOINT, HIINT\n- MAKE_FOURCC\n- MAX, MIN, LIMIT\n- MAX_PATH\n- NULL, TRUE, FALSE\n- SAFE_FREE, SAFE_DELETE, SAFE_DELETE_ARRAY, SAFE_RELEASE\n- STRINGCAT\n- STRINGIFY\n- offsetof, offsetofend\n- container_of\n- prefetch\n- printd, printe\n\n### hatomic.h\n- hatomic_flag_t, hatomic_t\n- hatomic_flag_test_and_set\n- hatomic_flag_clear\n- hatomic_add\n- hatomic_sub\n- hatomic_inc\n- hatomic_dec\n\n### herr.h\n- hv_strerror\n\n### htime.h\n- IS_LEAP_YEAR\n- datetime_t\n- gettick_ms\n- gettimeofday\n- gettimeofday_ms\n- gettimeofday_us\n- gethrtime_us\n- datetime_now\n- datetime_localtime\n- datetime_mktime\n- datetime_past\n- datetime_future\n- duration_fmt\n- datetime_fmt\n- gmtime_fmt\n- days_of_month\n- month_atoi\n- month_itoa\n- weekday_atoi\n- weekday_itoa\n- hv_compile_datetime\n- cron_next_timeout\n\n### hmath.h\n- floor2e\n- ceil2e\n- varint_encode\n- varint_decode\n\n### hbase.h\n- hv_malloc\n- hv_calloc\n- hv_realloc\n- hv_zalloc\n- hv_strncpy\n- hv_strncat\n- hv_strlower\n- hv_strupper\n- hv_strreverse\n- hv_strstartswith\n- hv_strendswith\n- hv_strcontains\n- hv_wildcard_match\n- hv_strnchr\n- hv_strrchr_dot\n- hv_strrchr_dir\n- hv_basename\n- hv_suffixname\n- hv_mkdir_p\n- hv_rmdir_p\n- hv_exists\n- hv_isdir\n- hv_isfile\n- hv_islink\n- hv_filesize\n- get_executable_path\n- get_executable_dir\n- get_executable_file\n- get_run_dir\n- hv_rand\n- hv_random_string\n- hv_getboolean\n- hv_parse_size\n- hv_parse_time\n- hv_parse_url\n\n### hversion.h\n- hv_version\n- hv_compile_version\n- version_atoi\n- version_itoa\n\n### hsysinfo.h\n- get_ncpu\n- get_meminfo\n\n### hproc.h\n- hproc_spawn\n\n### hthread.h\n- hv_getpid\n- hv_gettid\n- HTHREAD_RETTYPE\n- HTHREAD_ROUTINE\n- hthread_create\n- hthread_join\n- class HThread\n\n### hmutex.h\n- hmutex_t\n- hmutex_init\n- hmutex_destroy\n- hmutex_lock\n- hmutex_unlock\n- hspinlock_t\n- hspinlock_init\n- hspinlock_destroy\n- hspinlock_lock\n- hspinlock_unlock\n- hrwlock_t\n- hrwlock_init\n- hrwlock_destroy\n- hrwlock_rdlock\n- hrwlock_rdunlock\n- hrwlock_wrlock\n- hrwlock_wrunlock\n- htimed_mutex_t\n- htimed_mutex_init\n- htimed_mutex_destroy\n- htimed_mutex_lock\n- htimed_mutex_lock_for\n- htimed_mutex_unlock\n- hcondvar_t\n- hcondvar_init\n- hcondvar_destroy\n- hcondvar_wait\n- hcondvar_wait_for\n- hcondvar_signal\n- hcondvar_broadcast\n- hsem_init\n- hsem_destroy\n- hsem_wait\n- hsem_post\n- hsem_timedwait\n- honce_t\n- HONCE_INIT\n- honce\n- class `hv::MutexLock`\n- class `hv::SpinLock`\n- class `hv::RWLock`\n- class `hv::LockGuard`\n- synchronized\n\n### hsocket.h\n- INVALID_SOCKET\n- closesocket\n- blocking\n- nonblocking\n- Bind\n- Listen\n- Connect\n- ConnectNonblock\n- ConnectTimeout\n- ResolveAddr\n- Socketpair\n- socket_errno\n- socket_strerror\n- sockaddr_u\n- sockaddr_ip\n- sockaddr_port\n- sockaddr_set_ip\n- sockaddr_set_port\n- sockaddr_set_ipport\n- sockaddr_len\n- sockaddr_str\n- sockaddr_print\n- SOCKADDR_LEN\n- SOCKADDR_STR\n- SOCKADDR_PRINT\n- tcp_nodelay\n- tcp_nopush\n- tcp_keepalive\n- udp_broadcast\n- ip_v6only\n- so_sndtimeo\n- so_rcvtimeo\n- so_sndbuf\n- so_rcvbuf\n- so_reuseaddr\n- so_reuseport\n- so_linger\n\n### hlog.h\n- default_logger\n- file_logger\n- stderr_logger\n- stdout_logger\n- logger_create\n- logger_destroy\n- logger_enable_color\n- logger_enable_fsync\n- logger_fsync\n- logger_print\n- logger_set_file\n- logger_set_handler\n- logger_set_level\n- logger_set_max_bufsize\n- logger_set_max_filesize\n- logger_set_remain_days\n- logger_set_truncate_percent\n- logger_get_cur_file\n- hlogd, hlogi, hlogw, hloge, hlogf\n- LOGD, LOGI, LOGW, LOGE, LOGF\n\n### hbuf.h\n- hbuf_t\n- offset_buf_t\n- class HBuf\n- class HVLBuf\n- class HRingBuf\n\n### hmain.h\n- main_ctx_init\n- parse_opt\n- parse_opt_long\n- dump_opt_long\n- get_arg\n- get_env\n- setproctitle\n- signal_init\n- signal_handle\n- create_pidfile\n- delete_pidfile\n- getpid_form_pidfile\n- master_workers_run\n\n### hstring.h\n- to_string\n- from_string\n- toupper\n- tolower\n- reverse\n- startswith\n- endswith\n- contains\n- asprintf\n- trim\n- ltrim\n- rtrim\n- trim_pairs\n- split\n- splitKV\n- replace\n- replaceAll\n\n### hfile.h\n- class HFile\n\n### hpath.h\n- exists\n- isdir\n- isfile\n- islink\n- basename\n- dirname\n- filename\n- suffixname\n- join\n\n### hdir.h\n- listdir\n\n### hurl.h\n- HUrl::escape\n- HUrl::unescape\n- HUrl::parse\n- HUrl::dump\n\n### hscope.h\n- defer\n- template ScopeCleanup\n- template ScopeFree\n- template ScopeDelete\n- template ScopeDeleteArray\n- template ScopeRelease\n- template ScopeLock\n\n### ifconfig.h\n- ifconfig\n\n## utils\n### md5.h\n- HV_MD5Init\n- HV_MD5Update\n- HV_MD5Final\n- hv_md5\n- hv_md5_hex\n\n### sha1.h\n- HV_SHA1Init\n- HV_SHA1Update\n- HV_SHA1Final\n- HV_SHA1\n- hv_sha1\n- hv_sha1_hex\n\n### base64.h\n- hv_base64_decode\n- hv_base64_encode\n\n### json.hpp\n- json::parse\n- json::dump\n\n### singleton.h\n- DISABLE_COPY\n- SINGLETON_DECL\n- SINGLETON_IMPL\n\n## event\n\n### hloop.h\n- hloop_create_tcp_client\n- hloop_create_tcp_server\n- hloop_create_udp_client\n- hloop_create_udp_server\n- hloop_create_ssl_client\n- hloop_create_ssl_server\n- hloop_new\n- hloop_free\n- hloop_run\n- hloop_stop\n- hloop_pause\n- hloop_resume\n- hloop_status\n- hloop_pid\n- hloop_tid\n- hloop_now\n- hloop_now_ms\n- hloop_now_us\n- hloop_update_time\n- hloop_set_userdata\n- hloop_userdata\n- hloop_wakeup\n- hloop_post_event\n- hevent_loop\n- hevent_type\n- hevent_id\n- hevent_priority\n- hevent_userdata\n- hevent_set_priority\n- hevent_ser_userdata\n- haccept\n- hconnect\n- hread\n- hwrite\n- hrecv\n- hsend\n- hrecvfrom\n- hsendto\n- hio_add\n- hio_del\n- hio_get\n- hio_detach\n- hio_attach\n- hio_read\n- hio_read_start\n- hio_read_stop\n- hio_read_once\n- hio_read_until\n- hio_read_until_length\n- hio_read_until_delim\n- hio_read_readline\n- hio_read_readstring\n- hio_read_readbytes\n- hio_write\n- hio_close\n- hio_accept\n- hio_connect\n- hloop_create_tcp_proxy_server\n- hloop_create_udp_proxy_server\n- hloop_create_socks5_proxy_server\n- hloop_create_socks5_client\n- hio_fd\n- hio_id\n- hio_type\n- hio_error\n- hio_localaddr\n- hio_peeraddr\n- hio_events\n- hio_revents\n- hio_is_opened\n- hio_is_closed\n- hio_enable_ssl\n- hio_is_ssl\n- hio_get_ssl\n- hio_set_ssl\n- hio_get_ssl_ctx\n- hio_set_ssl_ctx\n- hio_new_ssl_ctx\n- hio_setcb_accept\n- hio_setcb_connect\n- hio_setcb_read\n- hio_setcb_write\n- hio_setcb_close\n- hio_getcb_accept\n- hio_getcb_connect\n- hio_getcb_read\n- hio_getcb_write\n- hio_getcb_close\n- hio_set_type\n- hio_set_localaddr\n- hio_set_peeraddr\n- hio_set_readbuf\n- hio_set_connect_timeout\n- hio_set_close_timeout\n- hio_set_read_timeout\n- hio_set_write_timeout\n- hio_set_keepalive_timeout\n- hio_set_heartbeat\n- hio_set_unpack\n- hio_unset_unpack\n- hio_read_upstream\n- hio_write_upstream\n- hio_close_upstream\n- hio_setup_upstream\n- hio_get_upstream\n- hio_setup_tcp_upstream\n- hio_setup_ssl_upstream\n- hio_setup_udp_upstream\n- hio_create_socket\n- hio_create_pipe\n- hio_context\n- hio_set_context\n- htimer_add\n- htimer_add_period\n- htimer_del\n- htimer_reset\n- hidle_add\n- hidle_del\n- hsignal_add\n- hsignal_del\n\n### nlog.h\n- network_logger\n- nlog_listen\n\n## evpp\n- class Buffer\n- class Channel\n- class Event\n- class EventLoop\n- class EventLoopThread\n- class EventLoopThreadPool\n- class TcpClient\n- class TcpServer\n- class UdpClient\n- class UdpServer\n\n## ssl\n- hssl_ctx_init\n- hssl_ctx_cleanup\n- hssl_ctx_instance\n- hssl_ctx_new\n- hssl_ctx_free\n- hssl_new\n- hssl_free\n- hssl_accept\n- hssl_connnect\n- hssl_read\n- hssl_write\n- hssl_close\n- hssl_set_sni_hostname\n\n## protocol\n\n### dns.h\n- dns_name_decode\n- dns_name_encode\n- dns_pack\n- dns_unpack\n- dns_rr_pack\n- dns_rr_unpack\n- dns_query\n- dns_free\n- nslookup\n\n### ftp.h\n- ftp_command_str\n- ftp_connect\n- ftp_login\n- ftp_exec\n- ftp_upload\n- ftp_download\n- ftp_download_with_cb\n- ftp_quit\n- ftp_status_str\n\n### smtp.h\n- smtp_command_str\n- smtp_status_str\n- smtp_build_command\n- sendmail\n\n### icmp.h\n- ping\n\n## http\n- class HttpMessage\n- class HttpRequest\n- class HttpResponse\n- class HttpParser\n\n### httpdef.h\n- http_content_type_enum\n- http_content_type_enum_by_suffix\n- http_content_type_str\n- http_content_type_str_by_suffix\n- http_content_type_suffix\n- http_errno_description\n- http_errno_name\n- http_method_enum\n- http_method_str\n- http_status_enum\n- http_status_str\n\n### http_content.h\n- parse_query_params\n- parse_json\n- parse_multipart\n- dump_query_params\n- dump_json\n- dump_multipart\n\n### HttpClient.h\n- http_client_new\n- http_client_del\n- http_client_send\n- http_client_send_async\n- http_client_strerror\n- http_client_set_timeout\n- http_client_set_header\n- http_client_del_header\n- http_client_get_header\n- http_client_clear_headers\n- http_client_set_http_proxy\n- http_client_set_https_proxy\n- http_client_add_no_proxy\n- class HttpClient\n\n### requests.h\n- requests::request\n- requests::get\n- requests::post\n- requests::put\n- requests::patch\n- requests::Delete\n- requests::head\n- requests::async\n\n### axios.h\n- axios::axios\n- axios::get\n- axios::post\n- axios::put\n- axios::patch\n- axios::Delete\n- axios::head\n- axios::async\n\n### HttpServer.h\n- http_server_run\n- http_server_stop\n- class HttpService\n- class HttpServer\n\n### WebSocketClient.h\n- class WebSocketClient\n\n### WebSocketServer.h\n- websocket_server_run\n- websocket_server_stop\n- class WebSocketService\n- class WebSocketServer\n\n## mqtt\n- mqtt_client_new\n- mqtt_client_free\n- mqtt_client_run\n- mqtt_client_stop\n- mqtt_client_set_id\n- mqtt_client_set_will\n- mqtt_client_set_auth\n- mqtt_client_set_callback\n- mqtt_client_set_userdata\n- mqtt_client_get_userdata\n- mqtt_client_get_last_error\n- mqtt_client_set_ssl_ctx\n- mqtt_client_new_ssl_ctx\n- mqtt_client_set_reconnect\n- mqtt_client_reconnect\n- mqtt_client_set_connect_timeout\n- mqtt_client_connect\n- mqtt_client_is_connected\n- mqtt_client_disconnect\n- mqtt_client_publish\n- mqtt_client_subscribe\n- mqtt_client_unsubscribe\n- class MqttClient\n\n## other\n- class HThreadPool\n- class HObjectPool\n- class ThreadLocalStorage\n","isInternal":false,"tokens":3398,"sizeBytes":10529}],"systemPromptSnippet":"<yakaai_skills repo=\"ithewei/libhv\">\n<!-- File: AGENTS.md (Tokens: ~1444 | Category: root-instruction) -->\n# AGENTS.md\n\nThis file provides guidance to agents when working with code in this repository.\n\n## Project Overview\n\nlibhv is a cross-platform C/C++ network library providing event-loop with non-blocking IO and timer. Core is C99, high-level wrappers are C++11. Compatible with gcc4.8+, MSVC2015+, clang. Supports Linux, Windows, macOS, Android, iOS, BSD, Solaris.\n\n## Build Commands\n\n### Makefile (primary, Unix)\n```bash\n./configure --with-openssl --with-http --with-mqtt --with-kcp  # configure options\nmake libhv          # build library only (shared + static)\nmake                # build library + examples\nmake examples       # build all example programs\nmake unittest       # compile unit tests\nmake evpp           # build C++ evpp tests (requires libhv built first)\nmake clean          # clean build artifacts\nsudo make install   # install to /usr/local/include/hv and /usr/local/lib\n```\n\n### CMake (cross-platform)\n```bash\nmkdir build && cd build\ncmake .. -DWITH_OPENSSL=ON -DWITH_HTTP=ON -DBUILD_EXAMPLES=ON\ncmake --build .\n# Windows: cmake .. -G \"Visual Studio 17 2022\" -A x64\n```\n\n### Bazel\n```bash\nbazel build libhv\n```\n\n### Package Managers\n```bash\nvcpkg install libhv    # vcpkg\nxrepo install libhv    # xmake\n```\n\n## Testing\n\n```bash\nmake unittest                 # compile all unit tests\nmake run-unittest             # compile and run unit tests (calls scripts/unittest.sh)\nbash scripts/unittest.sh      # run pre-built unit tests\nmake check                    # integration test: builds httpd, runs HTTP checks (scripts/check.sh)\n```\n\nRun a single unit test directly:\n```bash\nbin/rbtree_test    # or any test binary in bin/\n```\n\nRun evpp C++ tests (link against libhv):\n```bash\nmake evpp\nbin/TcpServer_test\nbin/EventLoop_test\n```\n\n## Key Configuration Options\n\nBuild flags via `./configure` or CMake `-D` options (see `config.ini` for defaults):\n\n| Makefile flag | CMake flag | Purpose |\n|---|---|---|\n| `--with-openssl` | `-DWITH_OPENSSL=ON` | SSL/TLS via OpenSSL |\n| `--with-gnutls` | `-DWITH_GNUTLS=ON` | SSL/TLS via GnuTLS |\n| `--with-mbedtls` | `-DWITH_MBEDTLS=ON` | SSL/TLS via mbedTLS |\n| `--with-nghttp2` | `-DWITH_NGHTTP2=ON` | HTTP/2 support |\n| `--with-kcp` | `-DWITH_KCP=ON` | KCP reliable UDP |\n| `--with-mqtt` | `-DWITH_MQTT=ON` | MQTT client |\n| `--with-protocol` | `-DWITH_PROTOCOL=ON` | ICMP, DNS, FTP, SMTP |\n| `--with-evpp` | `-DWITH_EVPP=ON` | C++ wrappers (default: yes) |\n| `--without-evpp` | `-DWITH_EVPP=OFF` | Pure C build, no C++ |\n| `--enable-uds` | `-DENABLE_UDS=ON` | Unix Domain Socket |\n| `--with-io-uring` | `-DWITH_IO_URING=ON` | io_uring event backend (Linux 5.1+) |\n\n## Architecture\n\n```\nApplication / Examples\n    │\n    ├── http/server, http/client   HTTP/WebSocket/gRPC (C++)\n    ├── mqtt/                      MQTT client (C)\n    ├── protocol/                  ICMP, DNS, FTP, SMTP (C)\n    │\n    ├── evpp/                      C++ wrappers: TcpServer, TcpClient, UdpServer, EventLoop\n    │\n    ├── event/                     Core event loop: hloop, hio, htimer\n    │   └── backends: epoll (Linux), kqueue (macOS/BSD), iocp/wepoll (Windows), io_uring (Linux 5.1+), select (fallback)\n    │   └── kcp/                   KCP reliable UDP transport\n    │\n    ├── ssl/                       Unified SSL interface (OpenSSL / GnuTLS / mbedTLS / platform)\n    │\n    ├── base/                      Platform abstraction, sockets, threads, logging, data structures\n    ├── util/                      C utilities (base64, md5, sha1)\n    └── cpputil/                   C++ utilities (string, path, file, json, threadpool, ini parser)\n```\n\n**Layering rules**: `base/` has no dependencies on other modules. `event/` depends on `base/` and `ssl/`. `evpp/` wraps `event/`. `http/` depends on `evpp/`. Higher layers are optional and controlled by build flags.\n\n**Public API entry point**: `hv.h` includes all base headers. Module-specific headers (e.g., `HttpServer.h`, `TcpServer.h`, `mqtt_client.h`) are the primary include for each feature. Installed headers go to `include/hv/`.\n\n**Key types**: `hloop_t` (event loop), `hio_t` (IO handle), `htimer_t` (timer) in the C API. `EventLoop`, `TcpServer`, `TcpClient`, `Channel` in the C++ API. `HttpRequest`, `HttpResponse`, `HttpService` for HTTP.\n\n## Code Style\n\n- **Formatting**: `.clang-format` — LLVM-based, 4-space indent, 160 column limit, pointer right-aligned, `catch`/`else` on new line (custom brace wrapping), no include sorting.\n- **C API naming**: `h` prefix for functions (`hloop_new`, `hio_read`), `_t` suffix for types (`hloop_t`, `hio_t`), UPPERCASE macros (`HV_EXPORT`).\n- **C++ API naming**: PascalCase classes (`EventLoop`, `TcpServer`), `hv` namespace.\n- **File naming**: lowercase with underscores (`.c` for C, `.cpp` for C++).\n- **Platform-specific code**: isolated via `hplatform.h` and `#ifdef` conditional compilation.\n\n## CI\n\nGitHub Actions (`.github/workflows/CI.yml`): builds and tests on Linux (with OpenSSL+nghttp2+KCP+MQTT), Windows (CMake + VS2022), macOS, Android (NDK cross-compile), iOS (Xcode cross-compile). Benchmark workflow runs echo-server throughput and HTTP performance comparisons.\n\n<!-- File: docs/API.md (Tokens: ~3398 | Category: project-spec) -->\n# libhv API Manual\n\n## base\n\n### hplatform.h\n- OS: OS_WIN, OS_UNIX (OS_LINUX, OS_ANDROID, OS_DARWIN ...)\n- ARCH: ARCH_X86, ARCH_X64, ARCH_ARM, ARCH_ARM64\n- COMPILER: COMPILER_MSVC, COMPILER_MINGW, COMPILER_GCC, COMPILER_CLANG\n- BYTE_ORDER: BIG_ENDIAN, LITTLE_ENDIAN\n- stdbool.h: bool, true, false\n- stdint.h: int8_t, int16_t, int32_t, int64_t\n- hv_sleep, hv_msleep, hv_usleep, hv_delay\n- hv_mkdir\n- stricmp, strcasecmp\n\n### hexport.h\n- HV_EXPORT, HV_INLINE\n- HV_SOURCE, HV_STATICLIB, HV_DYNAMICLIB\n- HV_DEPRECATED\n- HV_UNUSED\n- EXTERN_C, BEGIN_EXTERN_C, END_EXTERN_C\n- BEGIN_NAMESPACE, END_NAMESPACE, USING_NAMESPACE\n- DEFAULT\n- ENUM, STRUCT\n- IN, OUT, INOUT\n- OPTIONAL, REQUIRED, REPEATED\n\n### hdef.h\n- ABS, NABS\n- ARRAY_SIZE\n- BITSET, BITCLR, BITGET\n- CR, LF, CRLF\n- FLOAT_EQUAL_ZERO\n- INFINITE\n- IS_ALPHA, IS_DIGIT, IS_ALPHANUM\n- IS_CNTRL, IS_GRAPH\n- IS_HEX\n- IS_LOWER, IS_UPPER\n- LOWER, UPPER\n- MAKEWORD, LOBYTE, HIBYTE\n- MAKELONG, LOWORD, HIWORD\n- MAKEINT64, LOINT, HIINT\n- MAKE_FOURCC\n- MAX, MIN, LIMIT\n- MAX_PATH\n- NULL, TRUE, FALSE\n- SAFE_FREE, SAFE_DELETE, SAFE_DELETE_ARRAY, SAFE_RELEASE\n- STRINGCAT\n- STRINGIFY\n- offsetof, offsetofend\n- container_of\n- prefetch\n- printd, printe\n\n### hatomic.h\n- hatomic_flag_t, hatomic_t\n- hatomic_flag_test_and_set\n- hatomic_flag_clear\n- hatomic_add\n- hatomic_sub\n- hatomic_inc\n- hatomic_dec\n\n### herr.h\n- hv_strerror\n\n### htime.h\n- IS_LEAP_YEAR\n- datetime_t\n- gettick_ms\n- gettimeofday\n- gettimeofday_ms\n- gettimeofday_us\n- gethrtime_us\n- datetime_now\n- datetime_localtime\n- datetime_mktime\n- datetime_past\n- datetime_future\n- duration_fmt\n- datetime_fmt\n- gmtime_fmt\n- days_of_month\n- month_atoi\n- month_itoa\n- weekday_atoi\n- weekday_itoa\n- hv_compile_datetime\n- cron_next_timeout\n\n### hmath.h\n- floor2e\n- ceil2e\n- varint_encode\n- varint_decode\n\n### hbase.h\n- hv_malloc\n- hv_calloc\n- hv_realloc\n- hv_zalloc\n- hv_strncpy\n- hv_strncat\n- hv_strlower\n- hv_strupper\n- hv_strreverse\n- hv_strstartswith\n- hv_strendswith\n- hv_strcontains\n- hv_wildcard_match\n- hv_strnchr\n- hv_strrchr_dot\n- hv_strrchr_dir\n- hv_basename\n- hv_suffixname\n- hv_mkdir_p\n- hv_rmdir_p\n- hv_exists\n- hv_isdir\n- hv_isfile\n- hv_islink\n- hv_filesize\n- get_executable_path\n- get_executable_dir\n- get_executable_file\n- get_run_dir\n- hv_rand\n- hv_random_string\n- hv_getboolean\n- hv_parse_size\n- hv_parse_time\n- hv_parse_url\n\n### hversion.h\n- hv_version\n- hv_compile_version\n- version_atoi\n- version_itoa\n\n### hsysinfo.h\n- get_ncpu\n- get_meminfo\n\n### hproc.h\n- hproc_spawn\n\n### hthread.h\n- hv_getpid\n- hv_gettid\n- HTHREAD_RETTYPE\n- HTHREAD_ROUTINE\n- hthread_create\n- hthread_join\n- class HThread\n\n### hmutex.h\n- hmutex_t\n- hmutex_init\n- hmutex_destroy\n- hmutex_lock\n- hmutex_unlock\n- hspinlock_t\n- hspinlock_init\n- hspinlock_destroy\n- hspinlock_lock\n- hspinlock_unlock\n- hrwlock_t\n- hrwlock_init\n- hrwlock_destroy\n- hrwlock_rdlock\n- hrwlock_rdunlock\n- hrwlock_wrlock\n- hrwlock_wrunlock\n- htimed_mutex_t\n- htimed_mutex_init\n- htimed_mutex_destroy\n- htimed_mutex_lock\n- htimed_mutex_lock_for\n- htimed_mutex_unlock\n- hcondvar_t\n- hcondvar_init\n- hcondvar_destroy\n- hcondvar_wait\n- hcondvar_wait_for\n- hcondvar_signal\n- hcondvar_broadcast\n- hsem_init\n- hsem_destroy\n- hsem_wait\n- hsem_post\n- hsem_timedwait\n- honce_t\n- HONCE_INIT\n- honce\n- class `hv::MutexLock`\n- class `hv::SpinLock`\n- class `hv::RWLock`\n- class `hv::LockGuard`\n- synchronized\n\n### hsocket.h\n- INVALID_SOCKET\n- closesocket\n- blocking\n- nonblocking\n- Bind\n- Listen\n- Connect\n- ConnectNonblock\n- ConnectTimeout\n- ResolveAddr\n- Socketpair\n- socket_errno\n- socket_strerror\n- sockaddr_u\n- sockaddr_ip\n- sockaddr_port\n- sockaddr_set_ip\n- sockaddr_set_port\n- sockaddr_set_ipport\n- sockaddr_len\n- sockaddr_str\n- sockaddr_print\n- SOCKADDR_LEN\n- SOCKADDR_STR\n- SOCKADDR_PRINT\n- tcp_nodelay\n- tcp_nopush\n- tcp_keepalive\n- udp_broadcast\n- ip_v6only\n- so_sndtimeo\n- so_rcvtimeo\n- so_sndbuf\n- so_rcvbuf\n- so_reuseaddr\n- so_reuseport\n- so_linger\n\n### hlog.h\n- default_logger\n- file_logger\n- stderr_logger\n- stdout_logger\n- logger_create\n- logger_destroy\n- logger_enable_color\n- logger_enable_fsync\n- logger_fsync\n- logger_print\n- logger_set_file\n- logger_set_handler\n- logger_set_level\n- logger_set_max_bufsize\n- logger_set_max_filesize\n- logger_set_remain_days\n- logger_set_truncate_percent\n- logger_get_cur_file\n- hlogd, hlogi, hlogw, hloge, hlogf\n- LOGD, LOGI, LOGW, LOGE, LOGF\n\n### hbuf.h\n- hbuf_t\n- offset_buf_t\n- class HBuf\n- class HVLBuf\n- class HRingBuf\n\n### hmain.h\n- main_ctx_init\n- parse_opt\n- parse_opt_long\n- dump_opt_long\n- get_arg\n- get_env\n- setproctitle\n- signal_init\n- signal_handle\n- create_pidfile\n- delete_pidfile\n- getpid_form_pidfile\n- master_workers_run\n\n### hstring.h\n- to_string\n- from_string\n- toupper\n- tolower\n- reverse\n- startswith\n- endswith\n- contains\n- asprintf\n- trim\n- ltrim\n- rtrim\n- trim_pairs\n- split\n- splitKV\n- replace\n- replaceAll\n\n### hfile.h\n- class HFile\n\n### hpath.h\n- exists\n- isdir\n- isfile\n- islink\n- basename\n- dirname\n- filename\n- suffixname\n- join\n\n### hdir.h\n- listdir\n\n### hurl.h\n- HUrl::escape\n- HUrl::unescape\n- HUrl::parse\n- HUrl::dump\n\n### hscope.h\n- defer\n- template ScopeCleanup\n- template ScopeFree\n- template ScopeDelete\n- template ScopeDeleteArray\n- template ScopeRelease\n- template ScopeLock\n\n### ifconfig.h\n- ifconfig\n\n## utils\n### md5.h\n- HV_MD5Init\n- HV_MD5Update\n- HV_MD5Final\n- hv_md5\n- hv_md5_hex\n\n### sha1.h\n- HV_SHA1Init\n- HV_SHA1Update\n- HV_SHA1Final\n- HV_SHA1\n- hv_sha1\n- hv_sha1_hex\n\n### base64.h\n- hv_base64_decode\n- hv_base64_encode\n\n### json.hpp\n- json::parse\n- json::dump\n\n### singleton.h\n- DISABLE_COPY\n- SINGLETON_DECL\n- SINGLETON_IMPL\n\n## event\n\n### hloop.h\n- hloop_create_tcp_client\n- hloop_create_tcp_server\n- hloop_create_udp_client\n- hloop_create_udp_server\n- hloop_create_ssl_client\n- hloop_create_ssl_server\n- hloop_new\n- hloop_free\n- hloop_run\n- hloop_stop\n- hloop_pause\n- hloop_resume\n- hloop_status\n- hloop_pid\n- hloop_tid\n- hloop_now\n- hloop_now_ms\n- hloop_now_us\n- hloop_update_time\n- hloop_set_userdata\n- hloop_userdata\n- hloop_wakeup\n- hloop_post_event\n- hevent_loop\n- hevent_type\n- hevent_id\n- hevent_priority\n- hevent_userdata\n- hevent_set_priority\n- hevent_ser_userdata\n- haccept\n- hconnect\n- hread\n- hwrite\n- hrecv\n- hsend\n- hrecvfrom\n- hsendto\n- hio_add\n- hio_del\n- hio_get\n- hio_detach\n- hio_attach\n- hio_read\n- hio_read_start\n- hio_read_stop\n- hio_read_once\n- hio_read_until\n- hio_read_until_length\n- hio_read_until_delim\n- hio_read_readline\n- hio_read_readstring\n- hio_read_readbytes\n- hio_write\n- hio_close\n- hio_accept\n- hio_connect\n- hloop_create_tcp_proxy_server\n- hloop_create_udp_proxy_server\n- hloop_create_socks5_proxy_server\n- hloop_create_socks5_client\n- hio_fd\n- hio_id\n- hio_type\n- hio_error\n- hio_localaddr\n- hio_peeraddr\n- hio_events\n- hio_revents\n- hio_is_opened\n- hio_is_closed\n- hio_enable_ssl\n- hio_is_ssl\n- hio_get_ssl\n- hio_set_ssl\n- hio_get_ssl_ctx\n- hio_set_ssl_ctx\n- hio_new_ssl_ctx\n- hio_setcb_accept\n- hio_setcb_connect\n- hio_setcb_read\n- hio_setcb_write\n- hio_setcb_close\n- hio_getcb_accept\n- hio_getcb_connect\n- hio_getcb_read\n- hio_getcb_write\n- hio_getcb_close\n- hio_set_type\n- hio_set_localaddr\n- hio_set_peeraddr\n- hio_set_readbuf\n- hio_set_connect_timeout\n- hio_set_close_timeout\n- hio_set_read_timeout\n- hio_set_write_timeout\n- hio_set_keepalive_timeout\n- hio_set_heartbeat\n- hio_set_unpack\n- hio_unset_unpack\n- hio_read_upstream\n- hio_write_upstream\n- hio_close_upstream\n- hio_setup_upstream\n- hio_get_upstream\n- hio_setup_tcp_upstream\n- hio_setup_ssl_upstream\n- hio_setup_udp_upstream\n- hio_create_socket\n- hio_create_pipe\n- hio_context\n- hio_set_context\n- htimer_add\n- htimer_add_period\n- htimer_del\n- htimer_reset\n- hidle_add\n- hidle_del\n- hsignal_add\n- hsignal_del\n\n### nlog.h\n- network_logger\n- nlog_listen\n\n## evpp\n- class Buffer\n- class Channel\n- class Event\n- class EventLoop\n- class EventLoopThread\n- class EventLoopThreadPool\n- class TcpClient\n- class TcpServer\n- class UdpClient\n- class UdpServer\n\n## ssl\n- hssl_ctx_init\n- hssl_ctx_cleanup\n- hssl_ctx_instance\n- hssl_ctx_new\n- hssl_ctx_free\n- hssl_new\n- hssl_free\n- hssl_accept\n- hssl_connnect\n- hssl_read\n- hssl_write\n- hssl_close\n- hssl_set_sni_hostname\n\n## protocol\n\n### dns.h\n- dns_name_decode\n- dns_name_encode\n- dns_pack\n- dns_unpack\n- dns_rr_pack\n- dns_rr_unpack\n- dns_query\n- dns_free\n- nslookup\n\n### ftp.h\n- ftp_command_str\n- ftp_connect\n- ftp_login\n- ftp_exec\n- ftp_upload\n- ftp_download\n- ftp_download_with_cb\n- ftp_quit\n- ftp_status_str\n\n### smtp.h\n- smtp_command_str\n- smtp_status_str\n- smtp_build_command\n- sendmail\n\n### icmp.h\n- ping\n\n## http\n- class HttpMessage\n- class HttpRequest\n- class HttpResponse\n- class HttpParser\n\n### httpdef.h\n- http_content_type_enum\n- http_content_type_enum_by_suffix\n- http_content_type_str\n- http_content_type_str_by_suffix\n- http_content_type_suffix\n- http_errno_description\n- http_errno_name\n- http_method_enum\n- http_method_str\n- http_status_enum\n- http_status_str\n\n### http_content.h\n- parse_query_params\n- parse_json\n- parse_multipart\n- dump_query_params\n- dump_json\n- dump_multipart\n\n### HttpClient.h\n- http_client_new\n- http_client_del\n- http_client_send\n- http_client_send_async\n- http_client_strerror\n- http_client_set_timeout\n- http_client_set_header\n- http_client_del_header\n- http_client_get_header\n- http_client_clear_headers\n- http_client_set_http_proxy\n- http_client_set_https_proxy\n- http_client_add_no_proxy\n- class HttpClient\n\n### requests.h\n- requests::request\n- requests::get\n- requests::post\n- requests::put\n- requests::patch\n- requests::Delete\n- requests::head\n- requests::async\n\n### axios.h\n- axios::axios\n- axios::get\n- axios::post\n- axios::put\n- axios::patch\n- axios::Delete\n- axios::head\n- axios::async\n\n### HttpServer.h\n- http_server_run\n- http_server_stop\n- class HttpService\n- class HttpServer\n\n### WebSocketClient.h\n- class WebSocketClient\n\n### WebSocketServer.h\n- websocket_server_run\n- websocket_server_stop\n- class WebSocketService\n- class WebSocketServer\n\n## mqtt\n- mqtt_client_new\n- mqtt_client_free\n- mqtt_client_run\n- mqtt_client_stop\n- mqtt_client_set_id\n- mqtt_client_set_will\n- mqtt_client_set_auth\n- mqtt_client_set_callback\n- mqtt_client_set_userdata\n- mqtt_client_get_userdata\n- mqtt_client_get_last_error\n- mqtt_client_set_ssl_ctx\n- mqtt_client_new_ssl_ctx\n- mqtt_client_set_reconnect\n- mqtt_client_reconnect\n- mqtt_client_set_connect_timeout\n- mqtt_client_connect\n- mqtt_client_is_connected\n- mqtt_client_disconnect\n- mqtt_client_publish\n- mqtt_client_subscribe\n- mqtt_client_unsubscribe\n- class MqttClient\n\n## other\n- class HThreadPool\n- class HObjectPool\n- class ThreadLocalStorage\n</yakaai_skills>"}