{"record":{"id":"300f541b48d3a3dd","repo":"cloudflare/quiche","slug":"unsupported-http-version-and-datagram-protocol","errorCode":null,"errorMessage":"Unsupported HTTP version and DATAGRAM protocol.","messagePattern":"Unsupported HTTP version and DATAGRAM protocol\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"apps/src/args.rs","lineNumber":97,"sourceCode":"/// --max-active-cids NUM       Maximum number of active Connection IDs.\n/// --enable-active-migration   Enable active connection migration.\n/// --max-field-section-size BYTES  Max size of uncompressed field section.\n/// --qpack-max-table-capacity BYTES  Max capacity of dynamic QPACK decoding.\n/// --qpack-blocked-streams STREAMS  Limit of blocked streams while decoding.\n/// --initial-cwnd-packets      Size of initial congestion window, in packets.\n///\n/// [`Docopt`]: https://docs.rs/docopt/1.1.0/docopt/\nimpl Args for CommonArgs {\n    fn with_docopt(docopt: &docopt::Docopt) -> Self {\n        let args = docopt.parse().unwrap_or_else(|e| e.exit());\n\n        let http_version = args.get_str(\"--http-version\");\n        let dgram_proto = args.get_str(\"--dgram-proto\");\n        let (alpns, dgrams_enabled) = match (http_version, dgram_proto) {\n            (\"HTTP/0.9\", \"none\") => (alpns::HTTP_09.to_vec(), false),\n\n            (\"HTTP/0.9\", _) => {\n                panic!(\"Unsupported HTTP version and DATAGRAM protocol.\")\n            },\n\n            (\"HTTP/3\", \"none\") => (alpns::HTTP_3.to_vec(), false),\n\n            (\"HTTP/3\", \"oneway\") => (alpns::HTTP_3.to_vec(), true),\n\n            (\"all\", \"none\") => (\n                [alpns::HTTP_3.as_slice(), &alpns::HTTP_09]\n                    .concat()\n                    .to_vec(),\n                false,\n            ),\n\n            (..) => panic!(\"Unsupported HTTP version and DATAGRAM protocol.\"),\n        };\n\n        let dgram_count = args.get_str(\"--dgram-count\");\n        let dgram_count = dgram_count.parse::<u64>().unwrap();","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/cloudflare/quiche/blob/9f96daa2c22a4468b0036fb0a0a3894eee6498b8/apps/src/args.rs#L79-L115","documentation":"This panic fires in quiche-client/quiche-server argument parsing when the HTTP version is 'HTTP/0.9' but a DATAGRAM protocol other than 'none' is requested. DATAGRAM support is only wired up for HTTP/3, so the combination is rejected at startup. It is an intentional configuration guard, not a runtime failure.","triggerScenarios":"Running the app binary with --http-version HTTP/0.9 together with --dgram-proto set to anything other than 'none' (e.g. 'oneway').","commonSituations":"Users testing QUIC datagrams against legacy HTTP/0.9 endpoints assume both features compose; the CLI only supports datagrams over HTTP/3.","solutions":["Use --http-version HTTP/3 when passing a non-'none' --dgram-proto value.","Keep --dgram-proto none if you must use HTTP/0.9.","Check apps/src/args.rs for the exact supported (http_version, dgram_proto) combinations."],"exampleFix":"// before\nquiche-client --http-version HTTP/0.9 --dgram-proto oneway https://example.org:4433\n// after\nquiche-client --http-version HTTP/3 --dgram-proto oneway https://example.org:4433","handlingStrategy":"validation","validationCode":"let valid = !matches!(http_version, \"HTTP/0.9\") || dgram_proto == \"none\";\nif !valid { eprintln!(\"datagrams require --http-version HTTP/3\"); std::process::exit(2); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never combine HTTP/0.9 with a non-'none' --dgram-proto.","Wrap common invocations in shell scripts that pin --http-version HTTP/3 for datagram tests."],"tags":["cli","configuration","quiche-apps"],"backgroundTag":"unsupported-enum-value","analyzedSha":"9f96daa2c22a4468b0036fb0a0a3894eee6498b8","analyzedAt":"2026-09-08T11:27:09.536Z","contentChangedAt":"2026-09-08T11:27:09.536Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}