From 24157c503d28b340cc2acf367f1303756e2b5bd4 Mon Sep 17 00:00:00 2001 From: s00659936 <282229496@qq.com> Date: Wed, 2 Jul 2025 15:45:14 +0800 Subject: [PATCH] repair http permision Signed-off-by: s00659936 <282229496@qq.com> Change-Id: I84605bc8cff935ca233acb89ddc18da4ab023adc --- frameworks/ets/ani/http/src/callback.rs | 33 ++++++++----------- frameworks/ets/ani/http/src/http.rs | 6 +++- .../innerkits/rust/netstack_rs/BUILD.gn | 6 ++++ .../innerkits/rust/netstack_rs/Cargo.toml | 2 ++ .../innerkits/rust/netstack_rs/src/lib.rs | 6 ++++ .../innerkits/rust/netstack_rs/src/request.rs | 5 +++ .../innerkits/rust/netstack_rs/src/wrapper.rs | 16 ++++----- 7 files changed, 45 insertions(+), 29 deletions(-) diff --git a/frameworks/ets/ani/http/src/callback.rs b/frameworks/ets/ani/http/src/callback.rs index 3ab631ca2..6c18d885d 100644 --- a/frameworks/ets/ani/http/src/callback.rs +++ b/frameworks/ets/ani/http/src/callback.rs @@ -49,11 +49,20 @@ impl TaskCallback { impl RequestCallback for TaskCallback { fn on_success(&mut self, response: netstack_rs::response::Response) { - let code = response.status() as i32; - info!("request success: {:?}", code); + if let Some(callback) = self.on_response.take() { + let code = response.status() as i32; + let response = HttpResponse { + result_type: HttpDataType::String, + response_code: ResponseCodeOutput::I32(BoxI32::new(code)), + header: response.headers(), + cookies: String::new(), + performance_timing: PerformanceTiming::new(), + }; + callback.execute_spawn_thread(None, (response,)); + } + if let Some(callback) = self.on_data_end.take() { - info!("on_data_end callback set"); - callback.execute(None, ()); + callback.execute_spawn_thread(None, ()); } } @@ -65,23 +74,9 @@ impl RequestCallback for TaskCallback { fn on_data_receive(&mut self, data: &[u8], mut task: netstack_rs::task::RequestTask) { let headers = task.headers(); - if let Some(callback) = self.on_response.take() { - let response = task.response(); - let code = response.status() as i32; - let response = HttpResponse { - result_type: HttpDataType::String, - response_code: ResponseCodeOutput::I32(BoxI32::new(code)), - header: response.headers(), - cookies: String::new(), - performance_timing: PerformanceTiming::new(), - }; - info!("on_response callback set"); - callback.execute(None, (response,)); - } - if let Some(callback) = self.on_header_receive.as_ref() { info!("on_header_receive callback set"); - callback.execute(None, (headers.clone(),)); + callback.execute_spawn_thread(None, (headers.clone(),)); } } } diff --git a/frameworks/ets/ani/http/src/http.rs b/frameworks/ets/ani/http/src/http.rs index e7a00efbf..476f59ed0 100644 --- a/frameworks/ets/ani/http/src/http.rs +++ b/frameworks/ets/ani/http/src/http.rs @@ -18,7 +18,7 @@ use ani_rs::{ objects::{AniAsyncCallback, AniRef}, AniEnv, }; -use netstack_rs::{request::Request, task::RequestTask}; +use netstack_rs::{request::{has_internet_permission, Request}, task::RequestTask}; use crate::{ bridge::{Cleaner, HttpRequest, HttpRequestOptions, HttpResponseCache}, @@ -64,6 +64,10 @@ pub(crate) fn request( options: Option, ) -> Result<(), BusinessError> { info!("request url :{}", url); + if !has_internet_permission() { + return Err(BusinessError::PERMISSION); + } + let task = unsafe { &mut (*(this.native_ptr as *mut Task)) }; let mut request = Request::::new(); diff --git a/interfaces/innerkits/rust/netstack_rs/BUILD.gn b/interfaces/innerkits/rust/netstack_rs/BUILD.gn index a3ab85caa..2a345ce34 100644 --- a/interfaces/innerkits/rust/netstack_rs/BUILD.gn +++ b/interfaces/innerkits/rust/netstack_rs/BUILD.gn @@ -41,6 +41,7 @@ ohos_static_library("netstack_rs_cxx") { ":netstack_rs_cxx_gen", "//third_party/rust/crates/cxx:cxx_cppdeps", "$NETSTACK_INNERKITS_DIR/http_client:http_client", + "$NETSTACK_DIR/utils:stack_utils_common", ] part_name = "netstack" @@ -62,9 +63,14 @@ ohos_rust_shared_library("netstack_rs") { deps = [ ":netstack_rs_cxx", "../ffrt_rs:ffrt_rs", + "$NETSTACK_DIR/frameworks/ets/ani/common:netstack_common", "//third_party/rust/crates/cxx:lib", ] + external_deps = [ + "hilog:hilog_rust", + ] + part_name = "netstack" subsystem_name = "communication" } \ No newline at end of file diff --git a/interfaces/innerkits/rust/netstack_rs/Cargo.toml b/interfaces/innerkits/rust/netstack_rs/Cargo.toml index 72e201ea5..950e05ecb 100644 --- a/interfaces/innerkits/rust/netstack_rs/Cargo.toml +++ b/interfaces/innerkits/rust/netstack_rs/Cargo.toml @@ -19,3 +19,5 @@ edition = "2021" [dependencies] cxx = "1.0.115" ffrt_rs = { path = "../ffrt_rs" } +hilog_rust = { git = "https://gitee.com/openharmony/hiviewdfx_hilog" } +netstack_common = { path = "../../../../frameworks/ets/ani/common" } diff --git a/interfaces/innerkits/rust/netstack_rs/src/lib.rs b/interfaces/innerkits/rust/netstack_rs/src/lib.rs index 841f3acb6..03ae21dda 100644 --- a/interfaces/innerkits/rust/netstack_rs/src/lib.rs +++ b/interfaces/innerkits/rust/netstack_rs/src/lib.rs @@ -33,3 +33,9 @@ pub mod response; pub mod error; mod wrapper; + +const LOG_LABEL: hilog_rust::HiLogLabel = hilog_rust::HiLogLabel { + log_type: hilog_rust::LogType::LogCore, + domain: 0xD0015B0, + tag: "HttpAni", +}; diff --git a/interfaces/innerkits/rust/netstack_rs/src/request.rs b/interfaces/innerkits/rust/netstack_rs/src/request.rs index 535b85c5d..81500ed55 100644 --- a/interfaces/innerkits/rust/netstack_rs/src/request.rs +++ b/interfaces/innerkits/rust/netstack_rs/src/request.rs @@ -16,6 +16,7 @@ use cxx::{let_cxx_string, UniquePtr}; use crate::error::HttpClientError; use crate::response::Response; use crate::task::RequestTask; +use crate::wrapper; use crate::wrapper::ffi::{HttpClientRequest, NewHttpClientRequest, SetBody}; /// Builder for creating a Request. pub struct Request { @@ -110,3 +111,7 @@ impl Default for Request { Self::new() } } + +pub fn has_internet_permission() -> bool { + wrapper::ffi::HasInternetPermission() +} \ No newline at end of file diff --git a/interfaces/innerkits/rust/netstack_rs/src/wrapper.rs b/interfaces/innerkits/rust/netstack_rs/src/wrapper.rs index 63fd2b680..ed23c2acb 100644 --- a/interfaces/innerkits/rust/netstack_rs/src/wrapper.rs +++ b/interfaces/innerkits/rust/netstack_rs/src/wrapper.rs @@ -18,6 +18,7 @@ use std::sync::{Arc, Mutex, Weak}; use cxx::{let_cxx_string, SharedPtr}; use ffi::{HttpClientRequest, HttpClientTask, NewHttpClientTask, OnCallback}; use ffrt_rs::{ffrt_sleep, ffrt_spawn}; +use netstack_common::debug; use crate::error::{HttpClientError, HttpErrorCode}; use crate::request::RequestCallback; @@ -51,19 +52,12 @@ impl CallbackWrapper { impl CallbackWrapper { fn on_success(&mut self, _request: &HttpClientRequest, response: &ffi::HttpClientResponse) { + debug!("on_success callback is called"); let Some(mut callback) = self.inner.take() else { return; }; let response = Response::from_ffi(response); - if (response.status().clone() as u32 >= 300) || (response.status().clone() as u32) < 200 { - let error = HttpClientError::new( - HttpErrorCode::HttpNoneErr, - (response.status() as u32).to_string(), - ); - callback.on_fail(error); - } else { - callback.on_success(response); - } + callback.on_success(response); } fn on_fail( @@ -251,6 +245,7 @@ pub(crate) mod ffi { include!("http_client_request.h"); include!("wrapper.h"); include!("http_client_task.h"); + include!("netstack_common_utils.h"); #[namespace = "OHOS::NetStack::HttpClient"] type TaskStatus; @@ -293,6 +288,9 @@ pub(crate) mod ffi { fn GetErrorCode(self: &HttpClientError) -> HttpErrorCode; fn GetErrorMessage(self: &HttpClientError) -> &CxxString; + + #[namespace = "OHOS::NetStack::CommonUtils"] + fn HasInternetPermission() -> bool; } #[repr(i32)] -- Gitee