@@ -644,6 +644,9 @@ their headers, trailers, and bodies.</p>
644
644
#### <a name =" output_stream " >` type output-stream ` </a >
645
645
[ ` output-stream ` ] ( #output_stream )
646
646
<p >
647
+ #### <a name =" stream_error " >` type stream-error ` </a >
648
+ [ ` error ` ] ( #error )
649
+ <p >
647
650
#### <a name =" pollable " >` type pollable ` </a >
648
651
[ ` pollable ` ] ( #pollable )
649
652
<p >
@@ -670,16 +673,76 @@ their headers, trailers, and bodies.</p>
670
673
<li ><a name =" scheme.https " ><code >HTTPS</code ></a ></li >
671
674
<li ><a name =" scheme.other " ><code >other</code ></a >: <code >string</code ></li >
672
675
</ul >
673
- <h4 ><a name =" error " ><code >variant error</code ></a ></h4 >
674
- <p >TODO: perhaps better align with HTTP semantics?
675
- This type enumerates the different kinds of errors that may occur when
676
- initially returning a response.</p >
676
+ <h4 ><a name =" dns_error_payload " ><code >record DNS-error-payload</code ></a ></h4 >
677
+ <p >Defines the case payload type for <code >DNS-error</code > above:</p >
678
+ <h5 >Record Fields</h5 >
679
+ <ul >
680
+ <li ><a name =" dns_error_payload.rcode " ><code >rcode</code ></a >: option< ; <code >string</code >> ; </li >
681
+ <li ><a name =" dns_error_payload.info_code " ><code >info-code</code ></a >: option< ; <code >u16</code >> ; </li >
682
+ </ul >
683
+ <h4 ><a name =" tls_alert_received_payload " ><code >record TLS-alert-received-payload</code ></a ></h4 >
684
+ <p >Defines the case payload type for <code >TLS-alert-received</code > above:</p >
685
+ <h5 >Record Fields</h5 >
686
+ <ul >
687
+ <li ><a name =" tls_alert_received_payload.alert_id " ><code >alert-id</code ></a >: option< ; <code >u8</code >> ; </li >
688
+ <li ><a name =" tls_alert_received_payload.alert_message " ><code >alert-message</code ></a >: option< ; <code >string</code >> ; </li >
689
+ </ul >
690
+ <h4 ><a name =" field_size_payload " ><code >record field-size-payload</code ></a ></h4 >
691
+ <p >Defines the case payload type for <code >HTTP-response-{header,trailer}-size</code > above:</p >
692
+ <h5 >Record Fields</h5 >
693
+ <ul >
694
+ <li ><a name =" field_size_payload.field_name " ><code >field-name</code ></a >: option< ; <code >string</code >> ; </li >
695
+ <li ><a name =" field_size_payload.field_size " ><code >field-size</code ></a >: option< ; <code >u32</code >> ; </li >
696
+ </ul >
697
+ <h4 ><a name =" error_code " ><code >variant error-code</code ></a ></h4 >
698
+ <p >These cases are inspired by the IANA HTTP Proxy Error Types:
699
+ https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types </p >
677
700
<h5 >Variant Cases</h5 >
678
701
<ul >
679
- <li ><a name =" error.invalid_url " ><code >invalid-url</code ></a >: <code >string</code ></li >
680
- <li ><a name =" error.timeout_error " ><code >timeout-error</code ></a >: <code >string</code ></li >
681
- <li ><a name =" error.protocol_error " ><code >protocol-error</code ></a >: <code >string</code ></li >
682
- <li ><a name =" error.unexpected_error " ><code >unexpected-error</code ></a >: <code >string</code ></li >
702
+ <li ><a name =" error_code.dns_timeout " ><code >DNS-timeout</code ></a ></li >
703
+ <li ><a name =" error_code.dns_error " ><code >DNS-error</code ></a >: <a href =" #dns_error_payload " ><a href =" #dns_error_payload " ><code >DNS-error-payload</code ></a ></a ></li >
704
+ <li ><a name =" error_code.destination_not_found " ><code >destination-not-found</code ></a ></li >
705
+ <li ><a name =" error_code.destination_unavailable " ><code >destination-unavailable</code ></a ></li >
706
+ <li ><a name =" error_code.destination_ip_prohibited " ><code >destination-IP-prohibited</code ></a ></li >
707
+ <li ><a name =" error_code.destination_ip_unroutable " ><code >destination-IP-unroutable</code ></a ></li >
708
+ <li ><a name =" error_code.connection_refused " ><code >connection-refused</code ></a ></li >
709
+ <li ><a name =" error_code.connection_terminated " ><code >connection-terminated</code ></a ></li >
710
+ <li ><a name =" error_code.connection_timeout " ><code >connection-timeout</code ></a ></li >
711
+ <li ><a name =" error_code.connection_read_timeout " ><code >connection-read-timeout</code ></a ></li >
712
+ <li ><a name =" error_code.connection_write_timeout " ><code >connection-write-timeout</code ></a ></li >
713
+ <li ><a name =" error_code.connection_limit_reached " ><code >connection-limit-reached</code ></a ></li >
714
+ <li ><a name =" error_code.tls_protocol_error " ><code >TLS-protocol-error</code ></a ></li >
715
+ <li ><a name =" error_code.tls_certificate_error " ><code >TLS-certificate-error</code ></a ></li >
716
+ <li ><a name =" error_code.tls_alert_received " ><code >TLS-alert-received</code ></a >: <a href =" #tls_alert_received_payload " ><a href =" #tls_alert_received_payload " ><code >TLS-alert-received-payload</code ></a ></a ></li >
717
+ <li ><a name =" error_code.http_request_denied " ><code >HTTP-request-denied</code ></a ></li >
718
+ <li ><a name =" error_code.http_request_length_required " ><code >HTTP-request-length-required</code ></a ></li >
719
+ <li ><a name =" error_code.http_request_body_size " ><code >HTTP-request-body-size</code ></a >: option< ; <code >u64</code >> ; </li >
720
+ <li ><a name =" error_code.http_request_method_invalid " ><code >HTTP-request-method-invalid</code ></a ></li >
721
+ <li ><a name =" error_code.http_request_uri_invalid " ><code >HTTP-request-URI-invalid</code ></a ></li >
722
+ <li ><a name =" error_code.http_request_uri_too_long " ><code >HTTP-request-URI-too-long</code ></a ></li >
723
+ <li ><a name =" error_code.http_request_header_section_size " ><code >HTTP-request-header-section-size</code ></a >: option< ; <code >u32</code >> ; </li >
724
+ <li ><a name =" error_code.http_request_header_size " ><code >HTTP-request-header-size</code ></a >: option< ; <a href =" #field_size_payload " ><a href =" #field_size_payload " ><code >field-size-payload</code ></a ></a >> ; </li >
725
+ <li ><a name =" error_code.http_request_trailer_section_size " ><code >HTTP-request-trailer-section-size</code ></a >: option< ; <code >u32</code >> ; </li >
726
+ <li ><a name =" error_code.http_request_trailer_size " ><code >HTTP-request-trailer-size</code ></a >: <a href =" #field_size_payload " ><a href =" #field_size_payload " ><code >field-size-payload</code ></a ></a ></li >
727
+ <li ><a name =" error_code.http_response_incomplete " ><code >HTTP-response-incomplete</code ></a ></li >
728
+ <li ><a name =" error_code.http_response_header_section_size " ><code >HTTP-response-header-section-size</code ></a >: option< ; <code >u32</code >> ; </li >
729
+ <li ><a name =" error_code.http_response_header_size " ><code >HTTP-response-header-size</code ></a >: <a href =" #field_size_payload " ><a href =" #field_size_payload " ><code >field-size-payload</code ></a ></a ></li >
730
+ <li ><a name =" error_code.http_response_body_size " ><code >HTTP-response-body-size</code ></a >: option< ; <code >u64</code >> ; </li >
731
+ <li ><a name =" error_code.http_response_trailer_section_size " ><code >HTTP-response-trailer-section-size</code ></a >: option< ; <code >u32</code >> ; </li >
732
+ <li ><a name =" error_code.http_response_trailer_size " ><code >HTTP-response-trailer-size</code ></a >: <a href =" #field_size_payload " ><a href =" #field_size_payload " ><code >field-size-payload</code ></a ></a ></li >
733
+ <li ><a name =" error_code.http_response_transfer_coding " ><code >HTTP-response-transfer-coding</code ></a >: option< ; <code >string</code >> ; </li >
734
+ <li ><a name =" error_code.http_response_content_coding " ><code >HTTP-response-content-coding</code ></a >: option< ; <code >string</code >> ; </li >
735
+ <li ><a name =" error_code.http_response_timeout " ><code >HTTP-response-timeout</code ></a ></li >
736
+ <li ><a name =" error_code.http_upgrade_failed " ><code >HTTP-upgrade-failed</code ></a ></li >
737
+ <li ><a name =" error_code.http_protocol_error " ><code >HTTP-protocol-error</code ></a ></li >
738
+ <li ><a name =" error_code.loop_detected " ><code >loop-detected</code ></a ></li >
739
+ <li ><a name =" error_code.configuration_error " ><code >configuration-error</code ></a ></li >
740
+ <li ><a name =" error_code.internal_error " ><code >internal-error</code ></a >: option< ; <code >string</code >> ; <p >This is a catch-all error for anything that doesn't fit cleanly into a
741
+ more specific case. It also includes an optional string for an
742
+ unstructured description of the error. Users should not depend on the
743
+ string for diagnosing errors, as it's not required to be consistent
744
+ between implementations.
745
+ </li >
683
746
</ul >
684
747
<h4 ><a name =" header_error " ><code >variant header-error</code ></a ></h4 >
685
748
<p >This type enumerates the different kinds of errors that may occur when
@@ -728,6 +791,23 @@ so they are provided as a list of bytes.
728
791
<h4 ><a name =" future_incoming_response " ><code >resource future-incoming-response</code ></a ></h4 >
729
792
<hr />
730
793
<h3 >Functions</h3 >
794
+ <h4 ><a name =" http_error_code " ><code >http-error-code: func</code ></a ></h4 >
795
+ <p >Attempts to extract a http-related <a href =" #error " ><code >error</code ></a > from the stream <a href =" #error " ><code >error</code ></a >
796
+ provided.</p >
797
+ <p >Stream operations which return <a href =" #stream_error.last_operation_failed " ><code >stream-error::last-operation-failed</code ></a > have
798
+ a payload with more information about the operation that failed. This
799
+ payload can be passed through to this function to see if there's
800
+ http-related information about the error to return.</p >
801
+ <p >Note that this function is fallible because not all stream-related errors
802
+ are http-related errors.</p >
803
+ <h5 >Params</h5 >
804
+ <ul >
805
+ <li ><a name =" http_error_code.err " ><code >err</code ></a >: borrow< ; <a href =" #stream_error " ><a href =" #stream_error " ><code >stream-error</code ></a ></a >> ; </li >
806
+ </ul >
807
+ <h5 >Return values</h5 >
808
+ <ul >
809
+ <li ><a name =" http_error_code.0 " ></a > option< ; <a href =" #error_code " ><a href =" #error_code " ><code >error-code</code ></a ></a >> ; </li >
810
+ </ul >
731
811
<h4 ><a name =" constructor_fields " ><code >[constructor]fields: func</code ></a ></h4 >
732
812
<p >Construct an empty HTTP Fields.</p >
733
813
<h5 >Return values</h5 >
@@ -1118,7 +1198,7 @@ implementation determine how to respond with an HTTP error response.</p>
1118
1198
<h5 >Params</h5 >
1119
1199
<ul >
1120
1200
<li ><a name =" static_response_outparam.set.param " ><code >param</code ></a >: own< ; <a href =" #response_outparam " ><a href =" #response_outparam " ><code >response-outparam</code ></a ></a >> ; </li >
1121
- <li ><a name =" static_response_outparam.set.response " ><code >response</code ></a >: result< ; own< ; <a href =" #outgoing_response " ><a href =" #outgoing_response " ><code >outgoing-response</code ></a ></a >> ; , <a href =" #error " ><a href =" #error " ><code >error</code ></a ></a >> ; </li >
1201
+ <li ><a name =" static_response_outparam.set.response " ><code >response</code ></a >: result< ; own< ; <a href =" #outgoing_response " ><a href =" #outgoing_response " ><code >outgoing-response</code ></a ></a >> ; , <a href =" #error_code " ><a href =" #error_code " ><code >error-code </code ></a ></a >> ; </li >
1122
1202
</ul >
1123
1203
<h4 ><a name =" method_incoming_response.status " ><code >[method]incoming-response.status: func</code ></a ></h4 >
1124
1204
<p >Returns the status code from the incoming response.</p >
@@ -1210,7 +1290,7 @@ trailers were present in the body.</p>
1210
1290
</ul >
1211
1291
<h5 >Return values</h5 >
1212
1292
<ul >
1213
- <li ><a name =" method_future_trailers.get.0 " ></a > option< ; result< ; option< ; own< ; <a href =" #trailers " ><a href =" #trailers " ><code >trailers</code ></a ></a >> ;> ; , <a href =" #error " ><a href =" #error " ><code >error</code ></a ></a >> ;> ; </li >
1293
+ <li ><a name =" method_future_trailers.get.0 " ></a > option< ; result< ; option< ; own< ; <a href =" #trailers " ><a href =" #trailers " ><code >trailers</code ></a ></a >> ;> ; , <a href =" #error_code " ><a href =" #error_code " ><code >error-code </code ></a ></a >> ;> ; </li >
1214
1294
</ul >
1215
1295
<h4 ><a name =" constructor_outgoing_response " ><code >[constructor]outgoing-response: func</code ></a ></h4 >
1216
1296
<p >Construct an <a href =" #outgoing_response " ><code >outgoing-response</code ></a >, with a default <a href =" #status_code " ><code >status-code</code ></a > of <code >200</code >.
@@ -1331,7 +1411,7 @@ but those will be reported by the <a href="#incoming_body"><code>incoming-body</
1331
1411
</ul >
1332
1412
<h5 >Return values</h5 >
1333
1413
<ul >
1334
- <li ><a name =" method_future_incoming_response.get.0 " ></a > option< ; result< ; result< ; own< ; <a href =" #incoming_response " ><a href =" #incoming_response " ><code >incoming-response</code ></a ></a >> ; , <a href =" #error " ><a href =" #error " ><code >error</code ></a ></a >> ;> ;> ; </li >
1414
+ <li ><a name =" method_future_incoming_response.get.0 " ></a > option< ; result< ; result< ; own< ; <a href =" #incoming_response " ><a href =" #incoming_response " ><code >incoming-response</code ></a ></a >> ; , <a href =" #error_code " ><a href =" #error_code " ><code >error-code </code ></a ></a >> ;> ;> ; </li >
1335
1415
</ul >
1336
1416
<h2 ><a name =" wasi:http_outgoing_handler " >Import interface wasi:http/outgoing-handler</a ></h2 >
1337
1417
<p >This interface defines a handler of outgoing HTTP Requests. It should be
@@ -1347,8 +1427,8 @@ imported by components which wish to make HTTP Requests.</p>
1347
1427
#### <a name =" future_incoming_response " >` type future-incoming-response ` </a >
1348
1428
[ ` future-incoming-response ` ] ( #future_incoming_response )
1349
1429
<p >
1350
- #### <a name =" error " >` type error ` </a >
1351
- [ ` error ` ] ( #error )
1430
+ #### <a name =" error_code " >` type error-code ` </a >
1431
+ [ ` error-code ` ] ( #error_code )
1352
1432
<p >
1353
1433
----
1354
1434
<h3 >Functions</h3 >
@@ -1368,7 +1448,7 @@ through the <a href="#future_incoming_response"><code>future-incoming-response</
1368
1448
</ul >
1369
1449
<h5 >Return values</h5 >
1370
1450
<ul >
1371
- <li ><a name =" handle.0 " ></a > result< ; own< ; <a href =" #future_incoming_response " ><a href =" #future_incoming_response " ><code >future-incoming-response</code ></a ></a >> ; , <a href =" #error " ><a href =" #error " ><code >error</code ></a ></a >> ; </li >
1451
+ <li ><a name =" handle.0 " ></a > result< ; own< ; <a href =" #future_incoming_response " ><a href =" #future_incoming_response " ><code >future-incoming-response</code ></a ></a >> ; , <a href =" #error_code " ><a href =" #error_code " ><code >error-code </code ></a ></a >> ; </li >
1372
1452
</ul >
1373
1453
<h2 ><a name =" wasi:http_incoming_handler " >Export interface wasi:http/incoming-handler</a ></h2 >
1374
1454
<hr />
0 commit comments