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 }