14d6c458bSopenharmony_ci /* 24d6c458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License. 54d6c458bSopenharmony_ci * You may obtain a copy of the License at 64d6c458bSopenharmony_ci * 74d6c458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d6c458bSopenharmony_ci * 94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and 134d6c458bSopenharmony_ci * limitations under the License. 144d6c458bSopenharmony_ci */ 154d6c458bSopenharmony_ci#include "native_module_uri.h" 164d6c458bSopenharmony_ci 174d6c458bSopenharmony_ci#include "js_uri.h" 184d6c458bSopenharmony_ci#include "securec.h" 194d6c458bSopenharmony_ci#include "tools/log.h" 204d6c458bSopenharmony_ci#include "napi/native_api.h" 214d6c458bSopenharmony_ci#include "napi/native_node_api.h" 224d6c458bSopenharmony_ci 234d6c458bSopenharmony_ciextern const char _binary_js_uri_js_start[]; 244d6c458bSopenharmony_ciextern const char _binary_js_uri_js_end[]; 254d6c458bSopenharmony_ciextern const char _binary_uri_abc_start[]; 264d6c458bSopenharmony_ciextern const char _binary_uri_abc_end[]; 274d6c458bSopenharmony_ci 284d6c458bSopenharmony_cinamespace OHOS::Uri { 294d6c458bSopenharmony_ci static napi_value UriConstructor(napi_env env, napi_callback_info info) 304d6c458bSopenharmony_ci { 314d6c458bSopenharmony_ci napi_value thisVar = nullptr; 324d6c458bSopenharmony_ci void *data = nullptr; 334d6c458bSopenharmony_ci size_t argc = 1; 344d6c458bSopenharmony_ci napi_value argv[1] = { 0 }; 354d6c458bSopenharmony_ci Uri *object = nullptr; 364d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, &data)); 374d6c458bSopenharmony_ci napi_valuetype valuetype; 384d6c458bSopenharmony_ci NAPI_CALL(env, napi_typeof(env, argv[0], &valuetype)); 394d6c458bSopenharmony_ci if (valuetype == napi_string) { 404d6c458bSopenharmony_ci std::string type = ""; 414d6c458bSopenharmony_ci size_t typelen = 0; 424d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], nullptr, 0, &typelen)); 434d6c458bSopenharmony_ci type.resize(typelen); 444d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], type.data(), typelen + 1, &typelen)); 454d6c458bSopenharmony_ci object = new (std::nothrow) Uri(type); 464d6c458bSopenharmony_ci if (object == nullptr) { 474d6c458bSopenharmony_ci HILOG_ERROR("UriConstructor:: object is nullptr"); 484d6c458bSopenharmony_ci return nullptr; 494d6c458bSopenharmony_ci } 504d6c458bSopenharmony_ci } 514d6c458bSopenharmony_ci NAPI_CALL(env, napi_wrap(env, thisVar, object, 524d6c458bSopenharmony_ci [](napi_env environment, void *data, void *hint) { 534d6c458bSopenharmony_ci auto obj = reinterpret_cast<Uri*>(data); 544d6c458bSopenharmony_ci if (obj != nullptr) { 554d6c458bSopenharmony_ci delete obj; 564d6c458bSopenharmony_ci } 574d6c458bSopenharmony_ci }, nullptr, nullptr)); 584d6c458bSopenharmony_ci return thisVar; 594d6c458bSopenharmony_ci } 604d6c458bSopenharmony_ci 614d6c458bSopenharmony_ci static napi_value Normalize(napi_env env, napi_callback_info info) 624d6c458bSopenharmony_ci { 634d6c458bSopenharmony_ci napi_value thisVar = nullptr; 644d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 654d6c458bSopenharmony_ci Uri *muri = nullptr; 664d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 674d6c458bSopenharmony_ci std::string normalizeUri = muri->Normalize(); 684d6c458bSopenharmony_ci napi_value result = nullptr; 694d6c458bSopenharmony_ci size_t tempLen = normalizeUri.size(); 704d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, normalizeUri.c_str(), tempLen, &result)); 714d6c458bSopenharmony_ci return result; 724d6c458bSopenharmony_ci } 734d6c458bSopenharmony_ci 744d6c458bSopenharmony_ci static napi_value Equals(napi_env env, napi_callback_info info) 754d6c458bSopenharmony_ci { 764d6c458bSopenharmony_ci napi_value thisVar = nullptr; 774d6c458bSopenharmony_ci napi_value result = nullptr; 784d6c458bSopenharmony_ci size_t argc = 1; 794d6c458bSopenharmony_ci napi_value argv[1] = { 0 }; 804d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr)); 814d6c458bSopenharmony_ci 824d6c458bSopenharmony_ci Uri *muri = nullptr; 834d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 844d6c458bSopenharmony_ci Uri *other = nullptr; 854d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, argv[0], reinterpret_cast<void**>(&other))); 864d6c458bSopenharmony_ci 874d6c458bSopenharmony_ci bool flag = muri->Equals(*other); 884d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 894d6c458bSopenharmony_ci return result; 904d6c458bSopenharmony_ci } 914d6c458bSopenharmony_ci 924d6c458bSopenharmony_ci static napi_value IsAbsolute(napi_env env, napi_callback_info info) 934d6c458bSopenharmony_ci { 944d6c458bSopenharmony_ci napi_value thisVar = nullptr; 954d6c458bSopenharmony_ci napi_value result = nullptr; 964d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 974d6c458bSopenharmony_ci Uri *muri = nullptr; 984d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 994d6c458bSopenharmony_ci bool flag = muri->IsAbsolute(); 1004d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 1014d6c458bSopenharmony_ci return result; 1024d6c458bSopenharmony_ci } 1034d6c458bSopenharmony_ci 1044d6c458bSopenharmony_ci static napi_value IsFailed(napi_env env, napi_callback_info info) 1054d6c458bSopenharmony_ci { 1064d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1074d6c458bSopenharmony_ci napi_value result = nullptr; 1084d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1094d6c458bSopenharmony_ci Uri *muri = nullptr; 1104d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1114d6c458bSopenharmony_ci std::string temp = muri->IsFailed(); 1124d6c458bSopenharmony_ci size_t templen = temp.size(); 1134d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 1144d6c458bSopenharmony_ci return result; 1154d6c458bSopenharmony_ci } 1164d6c458bSopenharmony_ci 1174d6c458bSopenharmony_ci static napi_value UriToString(napi_env env, napi_callback_info info) 1184d6c458bSopenharmony_ci { 1194d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1204d6c458bSopenharmony_ci napi_value result = nullptr; 1214d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1224d6c458bSopenharmony_ci Uri *muri = nullptr; 1234d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1244d6c458bSopenharmony_ci std::string temp = muri->ToString(); 1254d6c458bSopenharmony_ci size_t templen = temp.size(); 1264d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 1274d6c458bSopenharmony_ci return result; 1284d6c458bSopenharmony_ci } 1294d6c458bSopenharmony_ci 1304d6c458bSopenharmony_ci static napi_value IsRelative(napi_env env, napi_callback_info info) 1314d6c458bSopenharmony_ci { 1324d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1334d6c458bSopenharmony_ci napi_value result = nullptr; 1344d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1354d6c458bSopenharmony_ci Uri *muri = nullptr; 1364d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1374d6c458bSopenharmony_ci bool flag = muri->IsRelative(); 1384d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 1394d6c458bSopenharmony_ci return result; 1404d6c458bSopenharmony_ci } 1414d6c458bSopenharmony_ci 1424d6c458bSopenharmony_ci static napi_value IsOpaque(napi_env env, napi_callback_info info) 1434d6c458bSopenharmony_ci { 1444d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1454d6c458bSopenharmony_ci napi_value result = nullptr; 1464d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1474d6c458bSopenharmony_ci Uri *muri = nullptr; 1484d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1494d6c458bSopenharmony_ci bool flag = muri->IsOpaque(); 1504d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 1514d6c458bSopenharmony_ci return result; 1524d6c458bSopenharmony_ci } 1534d6c458bSopenharmony_ci 1544d6c458bSopenharmony_ci static napi_value IsHierarchical(napi_env env, napi_callback_info info) 1554d6c458bSopenharmony_ci { 1564d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1574d6c458bSopenharmony_ci napi_value result = nullptr; 1584d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 1594d6c458bSopenharmony_ci Uri *muri = nullptr; 1604d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1614d6c458bSopenharmony_ci bool flag = muri->IsHierarchical(); 1624d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_boolean(env, flag, &result)); 1634d6c458bSopenharmony_ci return result; 1644d6c458bSopenharmony_ci } 1654d6c458bSopenharmony_ci 1664d6c458bSopenharmony_ci static napi_value AddQueryValue(napi_env env, napi_callback_info info) 1674d6c458bSopenharmony_ci { 1684d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1694d6c458bSopenharmony_ci napi_value result = nullptr; 1704d6c458bSopenharmony_ci size_t argc = 2; 1714d6c458bSopenharmony_ci napi_value argv[2] = { nullptr }; 1724d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr)); 1734d6c458bSopenharmony_ci Uri *muri = nullptr; 1744d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 1754d6c458bSopenharmony_ci std::string key = ""; 1764d6c458bSopenharmony_ci size_t keyLen = 0; 1774d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], nullptr, 0, &keyLen)); 1784d6c458bSopenharmony_ci key.resize(keyLen); 1794d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], key.data(), keyLen + 1, &keyLen)); 1804d6c458bSopenharmony_ci std::string value = ""; 1814d6c458bSopenharmony_ci size_t valueLen = 0; 1824d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[1], nullptr, 0, &valueLen)); 1834d6c458bSopenharmony_ci value.resize(valueLen); 1844d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[1], value.data(), valueLen + 1, &valueLen)); 1854d6c458bSopenharmony_ci std::string temp = muri->AddQueryValue(key, value); 1864d6c458bSopenharmony_ci if (temp.empty()) { 1874d6c458bSopenharmony_ci napi_get_null(env, &result); 1884d6c458bSopenharmony_ci return result; 1894d6c458bSopenharmony_ci } 1904d6c458bSopenharmony_ci size_t templen = temp.size(); 1914d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 1924d6c458bSopenharmony_ci return result; 1934d6c458bSopenharmony_ci } 1944d6c458bSopenharmony_ci 1954d6c458bSopenharmony_ci static napi_value AddSegment(napi_env env, napi_callback_info info) 1964d6c458bSopenharmony_ci { 1974d6c458bSopenharmony_ci napi_value thisVar = nullptr; 1984d6c458bSopenharmony_ci napi_value result = nullptr; 1994d6c458bSopenharmony_ci size_t argc = 1; 2004d6c458bSopenharmony_ci napi_value argv[1] = { nullptr }; 2014d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr)); 2024d6c458bSopenharmony_ci Uri *muri = nullptr; 2034d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2044d6c458bSopenharmony_ci std::string segment = ""; 2054d6c458bSopenharmony_ci size_t segmentLen = 0; 2064d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], nullptr, 0, &segmentLen)); 2074d6c458bSopenharmony_ci segment.resize(segmentLen); 2084d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_value_string_utf8(env, argv[0], segment.data(), segmentLen + 1, &segmentLen)); 2094d6c458bSopenharmony_ci std::string temp = muri->AddSegment(segment); 2104d6c458bSopenharmony_ci if (temp.empty()) { 2114d6c458bSopenharmony_ci napi_get_null(env, &result); 2124d6c458bSopenharmony_ci return result; 2134d6c458bSopenharmony_ci } 2144d6c458bSopenharmony_ci size_t tempLen = temp.size(); 2154d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), tempLen, &result)); 2164d6c458bSopenharmony_ci return result; 2174d6c458bSopenharmony_ci } 2184d6c458bSopenharmony_ci 2194d6c458bSopenharmony_ci static napi_value GetSegment(napi_env env, napi_callback_info info) 2204d6c458bSopenharmony_ci { 2214d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2224d6c458bSopenharmony_ci napi_value result = nullptr; 2234d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2244d6c458bSopenharmony_ci Uri *muri = nullptr; 2254d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2264d6c458bSopenharmony_ci std::vector<std::string> temp = muri->GetSegment(); 2274d6c458bSopenharmony_ci if (temp.empty()) { 2284d6c458bSopenharmony_ci napi_get_null(env, &result); 2294d6c458bSopenharmony_ci return result; 2304d6c458bSopenharmony_ci } 2314d6c458bSopenharmony_ci napi_value segment = nullptr; 2324d6c458bSopenharmony_ci napi_create_array(env, &result); 2334d6c458bSopenharmony_ci size_t size = temp.size(); 2344d6c458bSopenharmony_ci for (size_t i = 0; i < size; i++) { 2354d6c458bSopenharmony_ci napi_create_string_utf8(env, temp[i].c_str(), temp[i].length(), &segment); 2364d6c458bSopenharmony_ci napi_set_element(env, result, i, segment); 2374d6c458bSopenharmony_ci } 2384d6c458bSopenharmony_ci return result; 2394d6c458bSopenharmony_ci } 2404d6c458bSopenharmony_ci 2414d6c458bSopenharmony_ci static napi_value GetScheme(napi_env env, napi_callback_info info) 2424d6c458bSopenharmony_ci { 2434d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2444d6c458bSopenharmony_ci napi_value result = nullptr; 2454d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2464d6c458bSopenharmony_ci Uri *muri = nullptr; 2474d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2484d6c458bSopenharmony_ci std::string temp = muri->GetScheme(); 2494d6c458bSopenharmony_ci if (temp.empty()) { 2504d6c458bSopenharmony_ci napi_get_null(env, &result); 2514d6c458bSopenharmony_ci return result; 2524d6c458bSopenharmony_ci } 2534d6c458bSopenharmony_ci size_t templen = temp.size(); 2544d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 2554d6c458bSopenharmony_ci return result; 2564d6c458bSopenharmony_ci } 2574d6c458bSopenharmony_ci 2584d6c458bSopenharmony_ci static napi_value GetAuthority(napi_env env, napi_callback_info info) 2594d6c458bSopenharmony_ci { 2604d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2614d6c458bSopenharmony_ci napi_value result = nullptr; 2624d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2634d6c458bSopenharmony_ci Uri *muri = nullptr; 2644d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2654d6c458bSopenharmony_ci std::string temp = muri->GetAuthority(); 2664d6c458bSopenharmony_ci if (temp.empty()) { 2674d6c458bSopenharmony_ci napi_get_null(env, &result); 2684d6c458bSopenharmony_ci return result; 2694d6c458bSopenharmony_ci } 2704d6c458bSopenharmony_ci size_t templen = temp.size(); 2714d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 2724d6c458bSopenharmony_ci return result; 2734d6c458bSopenharmony_ci } 2744d6c458bSopenharmony_ci 2754d6c458bSopenharmony_ci static napi_value GetSsp(napi_env env, napi_callback_info info) 2764d6c458bSopenharmony_ci { 2774d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2784d6c458bSopenharmony_ci napi_value result = nullptr; 2794d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2804d6c458bSopenharmony_ci Uri *muri = nullptr; 2814d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2824d6c458bSopenharmony_ci std::string temp = muri->GetSsp(); 2834d6c458bSopenharmony_ci size_t templen = temp.size(); 2844d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 2854d6c458bSopenharmony_ci return result; 2864d6c458bSopenharmony_ci } 2874d6c458bSopenharmony_ci 2884d6c458bSopenharmony_ci static napi_value GetUserinfo(napi_env env, napi_callback_info info) 2894d6c458bSopenharmony_ci { 2904d6c458bSopenharmony_ci napi_value thisVar = nullptr; 2914d6c458bSopenharmony_ci napi_value result = nullptr; 2924d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 2934d6c458bSopenharmony_ci Uri *muri = nullptr; 2944d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 2954d6c458bSopenharmony_ci std::string temp = muri->GetUserinfo(); 2964d6c458bSopenharmony_ci if (temp.empty()) { 2974d6c458bSopenharmony_ci napi_get_null(env, &result); 2984d6c458bSopenharmony_ci return result; 2994d6c458bSopenharmony_ci } 3004d6c458bSopenharmony_ci size_t templen = temp.size(); 3014d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3024d6c458bSopenharmony_ci return result; 3034d6c458bSopenharmony_ci } 3044d6c458bSopenharmony_ci 3054d6c458bSopenharmony_ci static napi_value GetHost(napi_env env, napi_callback_info info) 3064d6c458bSopenharmony_ci { 3074d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3084d6c458bSopenharmony_ci napi_value result = nullptr; 3094d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3104d6c458bSopenharmony_ci Uri *muri = nullptr; 3114d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3124d6c458bSopenharmony_ci std::string temp = muri->GetHost(); 3134d6c458bSopenharmony_ci if (temp.empty()) { 3144d6c458bSopenharmony_ci napi_get_null(env, &result); 3154d6c458bSopenharmony_ci return result; 3164d6c458bSopenharmony_ci } 3174d6c458bSopenharmony_ci size_t templen = temp.size(); 3184d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3194d6c458bSopenharmony_ci return result; 3204d6c458bSopenharmony_ci } 3214d6c458bSopenharmony_ci 3224d6c458bSopenharmony_ci static napi_value GetPort(napi_env env, napi_callback_info info) 3234d6c458bSopenharmony_ci { 3244d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3254d6c458bSopenharmony_ci napi_value result = nullptr; 3264d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3274d6c458bSopenharmony_ci Uri *muri = nullptr; 3284d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3294d6c458bSopenharmony_ci std::string temp = muri->GetPort(); 3304d6c458bSopenharmony_ci size_t templen = temp.size(); 3314d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3324d6c458bSopenharmony_ci return result; 3334d6c458bSopenharmony_ci } 3344d6c458bSopenharmony_ci 3354d6c458bSopenharmony_ci static napi_value GetPath(napi_env env, napi_callback_info info) 3364d6c458bSopenharmony_ci { 3374d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3384d6c458bSopenharmony_ci napi_value result = nullptr; 3394d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3404d6c458bSopenharmony_ci Uri *muri = nullptr; 3414d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3424d6c458bSopenharmony_ci std::string temp = muri->GetPath(); 3434d6c458bSopenharmony_ci if (temp.empty()) { 3444d6c458bSopenharmony_ci napi_get_null(env, &result); 3454d6c458bSopenharmony_ci return result; 3464d6c458bSopenharmony_ci } 3474d6c458bSopenharmony_ci size_t templen = temp.size(); 3484d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3494d6c458bSopenharmony_ci return result; 3504d6c458bSopenharmony_ci } 3514d6c458bSopenharmony_ci 3524d6c458bSopenharmony_ci static napi_value GetQuery(napi_env env, napi_callback_info info) 3534d6c458bSopenharmony_ci { 3544d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3554d6c458bSopenharmony_ci napi_value result = nullptr; 3564d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3574d6c458bSopenharmony_ci Uri *muri = nullptr; 3584d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3594d6c458bSopenharmony_ci std::string temp = muri->GetQuery(); 3604d6c458bSopenharmony_ci if (temp.empty()) { 3614d6c458bSopenharmony_ci napi_get_null(env, &result); 3624d6c458bSopenharmony_ci return result; 3634d6c458bSopenharmony_ci } 3644d6c458bSopenharmony_ci size_t templen = temp.size(); 3654d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3664d6c458bSopenharmony_ci return result; 3674d6c458bSopenharmony_ci } 3684d6c458bSopenharmony_ci 3694d6c458bSopenharmony_ci static napi_value GetFragment(napi_env env, napi_callback_info info) 3704d6c458bSopenharmony_ci { 3714d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3724d6c458bSopenharmony_ci napi_value result = nullptr; 3734d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3744d6c458bSopenharmony_ci Uri *muri = nullptr; 3754d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3764d6c458bSopenharmony_ci std::string temp = muri->GetFragment(); 3774d6c458bSopenharmony_ci if (temp.empty()) { 3784d6c458bSopenharmony_ci napi_get_null(env, &result); 3794d6c458bSopenharmony_ci return result; 3804d6c458bSopenharmony_ci } 3814d6c458bSopenharmony_ci size_t templen = temp.size(); 3824d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), templen, &result)); 3834d6c458bSopenharmony_ci return result; 3844d6c458bSopenharmony_ci } 3854d6c458bSopenharmony_ci 3864d6c458bSopenharmony_ci static napi_value ClearQuery(napi_env env, napi_callback_info info) 3874d6c458bSopenharmony_ci { 3884d6c458bSopenharmony_ci napi_value thisVar = nullptr; 3894d6c458bSopenharmony_ci napi_value result = nullptr; 3904d6c458bSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr)); 3914d6c458bSopenharmony_ci Uri *muri = nullptr; 3924d6c458bSopenharmony_ci NAPI_CALL(env, napi_unwrap(env, thisVar, reinterpret_cast<void**>(&muri))); 3934d6c458bSopenharmony_ci std::string temp = muri->ClearQuery(); 3944d6c458bSopenharmony_ci if (temp.empty()) { 3954d6c458bSopenharmony_ci napi_get_null(env, &result); 3964d6c458bSopenharmony_ci return result; 3974d6c458bSopenharmony_ci } 3984d6c458bSopenharmony_ci size_t tempLen = temp.size(); 3994d6c458bSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, temp.c_str(), tempLen, &result)); 4004d6c458bSopenharmony_ci return result; 4014d6c458bSopenharmony_ci } 4024d6c458bSopenharmony_ci 4034d6c458bSopenharmony_ci napi_value UriInit(napi_env env, napi_value exports) 4044d6c458bSopenharmony_ci { 4054d6c458bSopenharmony_ci const char *uriClassName = "uri"; 4064d6c458bSopenharmony_ci napi_value uriClass = nullptr; 4074d6c458bSopenharmony_ci napi_property_descriptor uriDesc[] = { 4084d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("normalize", Normalize), 4094d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("equals", Equals), 4104d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("checkIsAbsolute", IsAbsolute), 4114d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("toString", UriToString), 4124d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("checkIsRelative", IsRelative), 4134d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("checkIsOpaque", IsOpaque), 4144d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("checkIsHierarchical", IsHierarchical), 4154d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("addQueryValue", AddQueryValue), 4164d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("getSegment", GetSegment), 4174d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("addSegment", AddSegment), 4184d6c458bSopenharmony_ci DECLARE_NAPI_FUNCTION("clearQuery", ClearQuery), 4194d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("scheme", GetScheme), 4204d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("authority", GetAuthority), 4214d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("ssp", GetSsp), 4224d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("userInfo", GetUserinfo), 4234d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("host", GetHost), 4244d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("port", GetPort), 4254d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("path", GetPath), 4264d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("query", GetQuery), 4274d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("fragment", GetFragment), 4284d6c458bSopenharmony_ci DECLARE_NAPI_GETTER("isFailed", IsFailed), 4294d6c458bSopenharmony_ci }; 4304d6c458bSopenharmony_ci NAPI_CALL(env, napi_define_class(env, uriClassName, strlen(uriClassName), UriConstructor, 4314d6c458bSopenharmony_ci nullptr, sizeof(uriDesc) / sizeof(uriDesc[0]), uriDesc, &uriClass)); 4324d6c458bSopenharmony_ci napi_property_descriptor desc[] = { 4334d6c458bSopenharmony_ci DECLARE_NAPI_PROPERTY("Uri", uriClass) 4344d6c458bSopenharmony_ci }; 4354d6c458bSopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 4364d6c458bSopenharmony_ci return exports; 4374d6c458bSopenharmony_ci } 4384d6c458bSopenharmony_ci 4394d6c458bSopenharmony_ci extern "C" 4404d6c458bSopenharmony_ci __attribute__((visibility("default"))) void NAPI_uri_GetJSCode(const char **buf, int *bufLen) 4414d6c458bSopenharmony_ci { 4424d6c458bSopenharmony_ci if (buf != nullptr) { 4434d6c458bSopenharmony_ci *buf = _binary_js_uri_js_start; 4444d6c458bSopenharmony_ci } 4454d6c458bSopenharmony_ci if (bufLen != nullptr) { 4464d6c458bSopenharmony_ci *bufLen = _binary_js_uri_js_end - _binary_js_uri_js_start; 4474d6c458bSopenharmony_ci } 4484d6c458bSopenharmony_ci } 4494d6c458bSopenharmony_ci extern "C" 4504d6c458bSopenharmony_ci __attribute__((visibility("default"))) void NAPI_uri_GetABCCode(const char** buf, int* buflen) 4514d6c458bSopenharmony_ci { 4524d6c458bSopenharmony_ci if (buf != nullptr) { 4534d6c458bSopenharmony_ci *buf = _binary_uri_abc_start; 4544d6c458bSopenharmony_ci } 4554d6c458bSopenharmony_ci if (buflen != nullptr) { 4564d6c458bSopenharmony_ci *buflen = _binary_uri_abc_end - _binary_uri_abc_start; 4574d6c458bSopenharmony_ci } 4584d6c458bSopenharmony_ci } 4594d6c458bSopenharmony_ci 4604d6c458bSopenharmony_ci static napi_module_with_js UriModule = { 4614d6c458bSopenharmony_ci .nm_version = 1, 4624d6c458bSopenharmony_ci .nm_flags = 0, 4634d6c458bSopenharmony_ci .nm_filename = nullptr, 4644d6c458bSopenharmony_ci .nm_register_func = UriInit, 4654d6c458bSopenharmony_ci .nm_modname = "uri", 4664d6c458bSopenharmony_ci .nm_priv = reinterpret_cast<void*>(0), 4674d6c458bSopenharmony_ci .nm_get_abc_code = NAPI_uri_GetABCCode, 4684d6c458bSopenharmony_ci .nm_get_js_code = NAPI_uri_GetJSCode, 4694d6c458bSopenharmony_ci }; 4704d6c458bSopenharmony_ci extern "C" __attribute__((constructor)) void UriRegisterModule() 4714d6c458bSopenharmony_ci { 4724d6c458bSopenharmony_ci napi_module_with_js_register(&UriModule); 4734d6c458bSopenharmony_ci } 4744d6c458bSopenharmony_ci} // namespace OHOS::Uri 475