* Copyright (c) 2024 Huawei Device Co., Ltd.
* 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.
*/
#ifndef NET_HTTP_CACHE_REQUEST_H
#define NET_HTTP_CACHE_REQUEST_H
#include <cstring>
#include <iostream>
#include <map>
#include "constant.h"
#include "net_http_utils.h"
namespace OHOS::NetStack::Http {
class HttpCacheRequest {
public:
HttpCacheRequest();
~HttpCacheRequest();
void ParseRequestHeader(const std::map<std::string, std::string> &requestHeader);
void SetRequestTime(const std::string &requestTime);
[[nodiscard]] time_t GetIfModifiedSince() const;
[[nodiscard]] time_t GetRequestTime() const;
[[nodiscard]] time_t GetMaxAgeSeconds() const;
[[nodiscard]] time_t GetMaxStaleSeconds() const;
[[nodiscard]] time_t GetMinFreshSeconds() const;
[[nodiscard]] bool IsNoCache() const;
[[nodiscard]] bool IsNoStore() const;
[[nodiscard]] bool IsNoTransform() const;
[[nodiscard]] bool IsOnlyIfCached() const;
[[nodiscard]] std::string GetIfNoneMatch() const;
private:
void ParseCacheControl(const std::string &cacheControl);
private:
std::string requestTime_;
std::string ifModifiedSince_;
std::string ifNoneMatch_;
std::string maxAge_;
std::string maxStale_;
std::string minFresh_;
bool noCache_ = false;
bool noStore_ = false;
bool noTransform_ = false;
bool onlyIfCached_ = false;
};
class HttpCacheResponse {
public:
HttpCacheResponse();
~HttpCacheResponse();
void ParseCacheResponseHeader(const std::map<std::string, std::string> &cacheResponseHeader);
[[nodiscard]] time_t GetDate() const;
[[nodiscard]] time_t GetExpires() const;
[[nodiscard]] time_t GetLastModified() const;
[[nodiscard]] std::string GetLastModifiedStr() const;
[[nodiscard]] std::string GetDateStr() const;
[[nodiscard]] std::string GetEtag() const;
[[nodiscard]] std::string GetAge() const;
[[nodiscard]] time_t GetAgeSeconds() const;
[[nodiscard]] time_t GetResponseTime() const;
[[nodiscard]] bool IsMustRevalidate() const;
[[nodiscard]] bool IsNoCache() const;
[[nodiscard]] bool IsNoStore() const;
[[nodiscard]] bool IsPublicCache() const;
[[nodiscard]] bool IsPrivateCache() const;
[[nodiscard]] bool IsProxyRevalidate() const;
[[nodiscard]] bool IsNoTransform() const;
[[nodiscard]] time_t GetMaxAgeSeconds() const;
[[nodiscard]] time_t GetSMaxAgeSeconds() const;
[[nodiscard]] ResponseCode GetRespCode() const;
void SetRespCode(ResponseCode respCode);
void SetResponseTime(const std::string &responseTime);
void SetRequestTime(const std::string &requestTime);
[[nodiscard]] time_t GetRequestTime() const;
private:
void ParseCacheControl(const std::string &cacheControl);
std::string date_;
std::string expires_;
std::string lastModified_;
std::string etag_;
std::string age_;
std::string responseTime_;
std::string requestTime_;
bool mustRevalidate_;
bool noCache_;
bool noStore_;
bool publicCache_;
bool privateCache_;
bool proxyRevalidate_;
bool noTransform_;
std::string maxAge_;
std::string sMaxAge_;
ResponseCode respCode_;
};
}
#endif