{"id":15424531,"url":"https://github.com/nibanks/msh3","last_synced_at":"2025-04-09T15:10:13.493Z","repository":{"id":38195307,"uuid":"458343547","full_name":"nibanks/msh3","owner":"nibanks","description":"Minimal HTTP/3 library on top of MsQuic","archived":false,"fork":false,"pushed_at":"2025-04-08T12:38:08.000Z","size":422,"stargazers_count":63,"open_issues_count":9,"forks_count":9,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-09T15:10:03.967Z","etag":null,"topics":["c","client","http","networking","server"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nibanks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-11T21:20:35.000Z","updated_at":"2025-04-08T12:38:11.000Z","dependencies_parsed_at":"2023-12-24T14:26:01.231Z","dependency_job_id":"1a896670-e167-462b-9ce8-1664b1d2dfc4","html_url":"https://github.com/nibanks/msh3","commit_stats":{"total_commits":287,"total_committers":7,"mean_commits":41.0,"dds":0.4494773519163763,"last_synced_commit":"ba595031e093b479beaa0f410cb70405bc5fd067"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nibanks%2Fmsh3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nibanks%2Fmsh3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nibanks%2Fmsh3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nibanks%2Fmsh3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nibanks","download_url":"https://codeload.github.com/nibanks/msh3/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248055282,"owners_count":21040157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","client","http","networking","server"],"created_at":"2024-10-01T17:47:23.286Z","updated_at":"2025-04-09T15:10:13.475Z","avatar_url":"https://github.com/nibanks.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# msh3\n\n[![Build](https://github.com/nibanks/msh3/actions/workflows/build.yml/badge.svg)](https://github.com/nibanks/msh3/actions/workflows/build.yml)\n[![](https://img.shields.io/static/v1?label=RFC\u0026message=9114\u0026color=brightgreen)](https://tools.ietf.org/html/rfc9114)\n[![](https://img.shields.io/static/v1?label=RFC\u0026message=9204\u0026color=brightgreen)](https://tools.ietf.org/html/rfc9204)\n\nMinimal HTTP/3 library on top of [microsoft/msquic](https://github.com/microsoft/msquic) and [litespeedtech/ls-qpack](https://github.com/litespeedtech/ls-qpack). Currently supports:\n\n- Sending and receiving request headers and payload.\n- Static qpack encoding.\n- Server validation can be optionally disabled (\"unsecure\" mode).\n\n# API\n\n## Client\n\n```c\nconst MSH3_REQUEST_IF Callbacks = { HeaderReceived, DataReceived, Complete, Shutdown, DataSend };\n\nconst MSH3_HEADER Headers[] = {\n    { \":method\", 7, \"GET\", 3 },\n    { \":path\", 5, Path, strlen(Path) },\n    { \":scheme\", 7, \"https\", 5 },\n    { \":authority\", 10, Host, strlen(Host) },\n    { \"accept\", 6, \"*/*\", 3 },\n};\nconst size_t HeadersCount = sizeof(Headers)/sizeof(MSH3_HEADER);\n\nMSH3_API* Api = MsH3ApiOpen();\nif (Api) {\n    MSH3_CONNECTION* Connection = MsH3ConnectionOpen(Api, Host, Port, Unsecure);\n    if (Connection) {\n        MSH3_REQUEST* Request = MsH3RequestOpen(Connection, \u0026Callbacks, NULL, Headers, HeadersCount, MSH3_REQUEST_FLAG_FIN);\n        if (Request) {\n            // ...\n            MsH3RequestClose(Request);\n        }\n        MsH3ConnectionClose(Connection);\n    }\n    MsH3ApiClose(Api);\n}\n```\n\n## Server\n\n\u003e **TODO** - Add documentation\n\n# Build\n\n```Bash\ngit clone --recursive https://github.com/nibanks/msh3\ncd msh3 \u0026\u0026 mkdir build \u0026\u0026 cd build\n```\n\n### Linux\n```Bash\ncmake -G 'Unix Makefiles' ..\ncmake --build .\n```\n\n### Windows\n```Bash\ncmake -G 'Visual Studio 17 2022' -A x64 ..\ncmake --build .\n```\n\n# Run\n\n```\nmsh3app outlook.office.com\nmsh3app www.cloudflare.com\nmsh3app www.google.com\nmsh3app nghttp2.org:4433\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnibanks%2Fmsh3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnibanks%2Fmsh3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnibanks%2Fmsh3/lists"}