11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#ifndef NET_HTTP_FFI_STRUCTS_H
171e934351Sopenharmony_ci#define NET_HTTP_FFI_STRUCTS_H
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include <cstdint>
201e934351Sopenharmony_ci
211e934351Sopenharmony_ci#include "cj_ffi/cj_common_ffi.h"
221e934351Sopenharmony_ci
231e934351Sopenharmony_ci#ifdef __cplusplus
241e934351Sopenharmony_ci#define EXTERN_C_START extern "C" {
251e934351Sopenharmony_ci#define EXTERN_C_END }
261e934351Sopenharmony_ci#else
271e934351Sopenharmony_ci#define EXTERN_C_START
281e934351Sopenharmony_ci#define EXTERN_C_END
291e934351Sopenharmony_ci#endif
301e934351Sopenharmony_ci
311e934351Sopenharmony_ciEXTERN_C_START
321e934351Sopenharmony_ci    struct CHttpProxy {
331e934351Sopenharmony_ci        char* host;
341e934351Sopenharmony_ci        uint16_t port;
351e934351Sopenharmony_ci        char** exclusionList;
361e934351Sopenharmony_ci        int64_t exclusionListSize;
371e934351Sopenharmony_ci    };
381e934351Sopenharmony_ci
391e934351Sopenharmony_ci    struct CMultiFormData {
401e934351Sopenharmony_ci        char* name;
411e934351Sopenharmony_ci        char* contentType;
421e934351Sopenharmony_ci        char* remoteFileName;
431e934351Sopenharmony_ci        CArrUI8 data;
441e934351Sopenharmony_ci        char* filePath;
451e934351Sopenharmony_ci    };
461e934351Sopenharmony_ci
471e934351Sopenharmony_ci    struct CArrMultiFormData {
481e934351Sopenharmony_ci        CMultiFormData* data;
491e934351Sopenharmony_ci        int64_t size;
501e934351Sopenharmony_ci    };
511e934351Sopenharmony_ci
521e934351Sopenharmony_ci    struct CClientCert {
531e934351Sopenharmony_ci        char* certPath;
541e934351Sopenharmony_ci        char* keyPath;
551e934351Sopenharmony_ci        char* certType;
561e934351Sopenharmony_ci        char* keyPassword;
571e934351Sopenharmony_ci    };
581e934351Sopenharmony_ci
591e934351Sopenharmony_ci    struct CPerformanceTiming {
601e934351Sopenharmony_ci        double dnsTiming;
611e934351Sopenharmony_ci        double tcpTiming;
621e934351Sopenharmony_ci        double tlsTiming;
631e934351Sopenharmony_ci        double firstSendTiming;
641e934351Sopenharmony_ci        double firstReceiveTiming;
651e934351Sopenharmony_ci        double totalFinishTiming;
661e934351Sopenharmony_ci        double redirectTiming;
671e934351Sopenharmony_ci        double responseHeaderTiming;
681e934351Sopenharmony_ci        double responseBodyTiming;
691e934351Sopenharmony_ci        double totalTiming;
701e934351Sopenharmony_ci    };
711e934351Sopenharmony_ci
721e934351Sopenharmony_ci    struct CHttpRequestOptions {
731e934351Sopenharmony_ci        char* method;
741e934351Sopenharmony_ci        CArrUI8 extraData;
751e934351Sopenharmony_ci        int32_t expectDataType;
761e934351Sopenharmony_ci        bool usingCache;
771e934351Sopenharmony_ci        uint32_t priority;
781e934351Sopenharmony_ci        CArrString header;
791e934351Sopenharmony_ci        uint32_t readTimeout;
801e934351Sopenharmony_ci        uint32_t connectTimeout;
811e934351Sopenharmony_ci        int32_t usingProtocol;
821e934351Sopenharmony_ci        bool usingDefaultProxy;
831e934351Sopenharmony_ci        CHttpProxy* usingProxy;
841e934351Sopenharmony_ci        char* caPath;
851e934351Sopenharmony_ci        int64_t resumeFrom;
861e934351Sopenharmony_ci        int64_t resumeTo;
871e934351Sopenharmony_ci        CClientCert* clientCert;
881e934351Sopenharmony_ci        char* dnsOverHttps;
891e934351Sopenharmony_ci        CArrString dnsServer;
901e934351Sopenharmony_ci        uint32_t maxLimit;
911e934351Sopenharmony_ci        CArrMultiFormData multiFormDataList;
921e934351Sopenharmony_ci    };
931e934351Sopenharmony_ci
941e934351Sopenharmony_ci    struct CHttpResponse {
951e934351Sopenharmony_ci        int32_t errCode;
961e934351Sopenharmony_ci        char* errMsg;
971e934351Sopenharmony_ci        CArrUI8 result;
981e934351Sopenharmony_ci        int32_t resultType;
991e934351Sopenharmony_ci        uint32_t responseCode;
1001e934351Sopenharmony_ci        CArrString header;
1011e934351Sopenharmony_ci        char* cookies;
1021e934351Sopenharmony_ci        CArrString setCookie;
1031e934351Sopenharmony_ci        CPerformanceTiming performanceTiming;
1041e934351Sopenharmony_ci    };
1051e934351Sopenharmony_ci
1061e934351Sopenharmony_ci    struct CDataReceiveProgressInfo {
1071e934351Sopenharmony_ci        uint32_t receiveSize;
1081e934351Sopenharmony_ci        uint32_t totalSize;
1091e934351Sopenharmony_ci    };
1101e934351Sopenharmony_ci
1111e934351Sopenharmony_ci    struct CDataSendProgressInfo {
1121e934351Sopenharmony_ci        uint32_t sendSize;
1131e934351Sopenharmony_ci        uint32_t totalSize;
1141e934351Sopenharmony_ci    };
1151e934351Sopenharmony_ciEXTERN_C_END
1161e934351Sopenharmony_ci
1171e934351Sopenharmony_ci#endif