void WRestResource::handleRequest(const Http::Request &request, Http::Response &response) { try { auto it = std::find(METHOD_STRINGS.cbegin(), METHOD_STRINGS.cend(), request.method()); auto idx = static_cast<std::size_t>(std::distance(METHOD_STRINGS.cbegin(), it)); if (it == METHOD_STRINGS.cend() || !handlers_[idx]) response.setStatus(405); } catch (Exception e) { response.setStatus(e.status()); } }
// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include <common.cxx> #include <net/http/request.hpp> CASE("A HTTP request can be created from a string") { http::Request r("GET / HTTP/1.1\r\nUser-Agent: IncludeOS/0.9\r\nConnection: close\r\nHost: www.google.com\r\n\r\n"); EXPECT(r.version().to_string() == "HTTP/1.1"); EXPECT(http::method::str(r.method()) == "GET"); } CASE("method() returns the HTTP method for the request") { http::Request r("HEAD / HTTP/1.0\r\nUser-Agent: IncludeOS/0.9\r\nHost: www.google.com\r\n\r\n"); EXPECT(http::method::str(r.method()) == "HEAD"); } CASE("HTTP method can be set for the request") { http::Request r("HEAD / HTTP/1.0\r\nUser-Agent: IncludeOS/0.9\r\nHost: www.google.com\r\n\r\n"); EXPECT(http::method::str(r.method()) == "HEAD"); r.set_method(http::GET); EXPECT(http::method::str(r.method()) == "GET"); }