1 /* 2 * Copyright 2018-present Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"). 5 * You may not use this file except in compliance with the License. 6 * A copy of the License is located at 7 * 8 * http://aws.amazon.com/apache2.0 9 * 10 * or in the "license" file accompanying this file. This file is distributed 11 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 * express or implied. See the License for the specific language governing 13 * permissions and limitations under the License. 14 */ 15 16 module aws.http.response; 17 18 import std.string : toLower; 19 20 class Response 21 { 22 // lower-case the name but store the value as is 23 void addHeader(string name, string value) 24 { 25 _headers[name.toLower] = value; 26 } 27 28 void appendBody(string value) 29 { 30 _body ~= value; 31 } 32 33 bool hasHeader(string name) 34 { 35 return (name.toLower in _headers) !is null; 36 } 37 38 string getHeader(string name) 39 { 40 auto p = name.toLower in _headers; 41 assert(p !is null); 42 return *p; 43 } 44 45 ResponseCode getResponseCode() 46 { 47 return _responseCode; 48 } 49 50 void setResponseCode(ResponseCode c) 51 { 52 _responseCode = c; 53 } 54 55 string getContentTpe() 56 { 57 return _headers.get("content-type", ""); 58 } 59 60 string getBody() 61 { 62 return _body; 63 } 64 65 private: 66 ResponseCode _responseCode; 67 string[string] _headers; 68 string _body; 69 string _contentType; 70 }; 71 72 enum ResponseCode 73 { 74 REQUEST_NOT_MADE = -1, 75 CONTINUE = 100, 76 SWITCHING_PROTOCOLS = 101, 77 PROCESSING = 102, 78 OK = 200, 79 CREATED = 201, 80 ACCEPTED = 202, 81 NON_AUTHORITATIVE_INFORMATION = 203, 82 NO_CONTENT = 204, 83 RESET_CONTENT = 205, 84 PARTIAL_CONTENT = 206, 85 MULTI_STATUS = 207, 86 ALREADY_REPORTED = 208, 87 IM_USED = 226, 88 MULTIPLE_CHOICES = 300, 89 MOVED_PERMANENTLY = 301, 90 FOUND = 302, 91 SEE_OTHER = 303, 92 NOT_MODIFIED = 304, 93 USE_PROXY = 305, 94 SWITCH_PROXY = 306, 95 TEMPORARY_REDIRECT = 307, 96 PERMANENT_REDIRECT = 308, 97 BAD_REQUEST = 400, 98 UNAUTHORIZED = 401, 99 PAYMENT_REQUIRED = 402, 100 FORBIDDEN = 403, 101 NOT_FOUND = 404, 102 METHOD_NOT_ALLOWED = 405, 103 NOT_ACCEPTABLE = 406, 104 PROXY_AUTHENTICATION_REQUIRED = 407, 105 REQUEST_TIMEOUT = 408, 106 CONFLICT = 409, 107 GONE = 410, 108 LENGTH_REQUIRED = 411, 109 PRECONDITION_FAILED = 412, 110 REQUEST_ENTITY_TOO_LARGE = 413, 111 REQUEST_URI_TOO_LONG = 414, 112 UNSUPPORTED_MEDIA_TYPE = 415, 113 REQUESTED_RANGE_NOT_SATISFIABLE = 416, 114 EXPECTATION_FAILED = 417, 115 IM_A_TEAPOT = 418, 116 AUTHENTICATION_TIMEOUT = 419, 117 METHOD_FAILURE = 420, 118 UNPROC_ENTITY = 422, 119 LOCKED = 423, 120 FAILED_DEPENDENCY = 424, 121 UPGRADE_REQUIRED = 426, 122 PRECONDITION_REQUIRED = 427, 123 TOO_MANY_REQUESTS = 429, 124 REQUEST_HEADER_FIELDS_TOO_LARGE = 431, 125 LOGIN_TIMEOUT = 440, 126 NO_RESPONSE = 444, 127 RETRY_WITH = 449, 128 BLOCKED = 450, 129 REDIRECT = 451, 130 REQUEST_HEADER_TOO_LARGE = 494, 131 CERT_ERROR = 495, 132 NO_CERT = 496, 133 HTTP_TO_HTTPS = 497, 134 CLIENT_CLOSED_TO_REQUEST = 499, 135 INTERNAL_SERVER_ERROR = 500, 136 NOT_IMPLEMENTED = 501, 137 BAD_GATEWAY = 502, 138 SERVICE_UNAVAILABLE = 503, 139 GATEWAY_TIMEOUT = 504, 140 HTTP_VERSION_NOT_SUPPORTED = 505, 141 VARIANT_ALSO_NEGOTIATES = 506, 142 INSUFFICIENT_STORAGE = 506, 143 LOOP_DETECTED = 508, 144 BANDWIDTH_LIMIT_EXCEEDED = 509, 145 NOT_EXTENDED = 510, 146 NETWORK_AUTHENTICATION_REQUIRED = 511, 147 NETWORK_READ_TIMEOUT = 598, 148 NETWORK_CONNECT_TIMEOUT = 599 149 }