| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /*
- * Copyright 1999-2019 Alibaba Cloud All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * 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 <algorithm>
- #include <alibabacloud/core/HttpMessage.h>
- namespace AlibabaCloud {
- namespace {
- #if defined(WIN32) && defined(_MSC_VER)
- #define strcasecmp _stricmp
- #define strncasecmp _strnicmp
- #else
- #include <strings.h>
- #endif
- std::string KnownHeaderMapper[]{"Accept",
- "Accept-Charset",
- "Accept-Encoding",
- "Accept-Language",
- "Authorization",
- "Connection",
- "Content-Length",
- "Content-MD5",
- "Content-Type",
- "Date",
- "Host",
- "Server",
- "User-Agent"};
- } // namespace
- HttpMessage::HttpMessage() : body_(nullptr), bodySize_(0), headers_() {}
- HttpMessage::HttpMessage(const HttpMessage &other)
- : body_(nullptr), bodySize_(other.bodySize_), headers_(other.headers_) {
- setBody(other.body_, other.bodySize_);
- }
- HttpMessage::HttpMessage(HttpMessage &&other) { *this = std::move(other); }
- HttpMessage &HttpMessage::operator=(const HttpMessage &other) {
- if (this != &other) {
- body_ = nullptr;
- bodySize_ = 0;
- headers_ = other.headers_;
- setBody(other.body_, other.bodySize_);
- }
- return *this;
- }
- HttpMessage &HttpMessage::operator=(HttpMessage &&other) {
- if (this != &other)
- *this = std::move(other);
- return *this;
- }
- void HttpMessage::addHeader(const HeaderNameType &name,
- const HeaderValueType &value) {
- setHeader(name, value);
- }
- void HttpMessage::addHeader(KnownHeader header, const HeaderValueType &value) {
- setHeader(header, value);
- }
- HttpMessage::HeaderValueType
- HttpMessage::header(const HeaderNameType &name) const {
- auto it = headers_.find(name);
- if (it != headers_.end())
- return it->second;
- else
- return std::string();
- }
- HttpMessage::HeaderCollection HttpMessage::headers() const { return headers_; }
- void HttpMessage::removeHeader(const HeaderNameType &name) {
- headers_.erase(name);
- }
- void HttpMessage::removeHeader(KnownHeader header) {
- removeHeader(KnownHeaderMapper[header]);
- }
- void HttpMessage::setHeader(const HeaderNameType &name,
- const HeaderValueType &value) {
- headers_[name] = value;
- }
- void HttpMessage::setHeader(KnownHeader header, const std::string &value) {
- setHeader(KnownHeaderMapper[header], value);
- }
- HttpMessage::~HttpMessage() { setBody(nullptr, 0); }
- const char *HttpMessage::body() const { return body_; }
- size_t HttpMessage::bodySize() const { return bodySize_; }
- bool HttpMessage::hasBody() const { return (bodySize_ != 0); }
- HttpMessage::HeaderValueType HttpMessage::header(KnownHeader header) const {
- return this->header(KnownHeaderMapper[header]);
- }
- void HttpMessage::setBody(const char *data, size_t size) {
- if (body_)
- delete[] body_;
- body_ = nullptr;
- bodySize_ = 0;
- if (size) {
- bodySize_ = size;
- body_ = new char[size + 1];
- std::copy(data, data + size, body_);
- body_[size] = '\0';
- }
- }
- bool HttpMessage::nocaseLess::operator()(const std::string &s1,
- const std::string &s2) const {
- return strcasecmp(s1.c_str(), s2.c_str()) < 0;
- }
- } // namespace AlibabaCloud
|