1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci */ 15cc290419Sopenharmony_ci//! task 16cc290419Sopenharmony_ci#![allow(missing_docs)] 17cc290419Sopenharmony_ci 18cc290419Sopenharmony_ciuse crate::daemon_lib::{auth, daemon_unity}; 19cc290419Sopenharmony_ci 20cc290419Sopenharmony_ciuse crate::daemon_lib::shell::*; 21cc290419Sopenharmony_ci 22cc290419Sopenharmony_ciuse crate::daemon_lib::daemon_app::{self, AppTaskMap, DaemonAppTask}; 23cc290419Sopenharmony_ciuse crate::daemon_lib::sys_para::*; 24cc290419Sopenharmony_ciuse crate::utils::hdc_log::*; 25cc290419Sopenharmony_ciuse crate::common::forward::{self, ForwardTaskMap, HdcForward}; 26cc290419Sopenharmony_ciuse crate::common::hdcfile::{self, FileTaskMap, HdcFile}; 27cc290419Sopenharmony_ciuse crate::common::jdwp; 28cc290419Sopenharmony_ciuse crate::config::*; 29cc290419Sopenharmony_ciuse crate::transfer; 30cc290419Sopenharmony_ci 31cc290419Sopenharmony_ciuse std::io::{self, Error, ErrorKind}; 32cc290419Sopenharmony_ci 33cc290419Sopenharmony_ciasync fn daemon_shell_task(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 34cc290419Sopenharmony_ci match task_message.command { 35cc290419Sopenharmony_ci HdcCommand::ShellInit => { 36cc290419Sopenharmony_ci let pty_task = PtyTask::new( 37cc290419Sopenharmony_ci session_id, 38cc290419Sopenharmony_ci task_message.channel_id, 39cc290419Sopenharmony_ci None, 40cc290419Sopenharmony_ci HdcCommand::KernelEchoRaw, 41cc290419Sopenharmony_ci ); 42cc290419Sopenharmony_ci PtyMap::put(session_id, task_message.channel_id, pty_task).await; 43cc290419Sopenharmony_ci } 44cc290419Sopenharmony_ci HdcCommand::UnityExecute => { 45cc290419Sopenharmony_ci match String::from_utf8(task_message.payload) { 46cc290419Sopenharmony_ci Ok(cmd_str) => { 47cc290419Sopenharmony_ci let shell_execute_task: ShellExecuteTask = ShellExecuteTask::new( 48cc290419Sopenharmony_ci session_id, 49cc290419Sopenharmony_ci task_message.channel_id, 50cc290419Sopenharmony_ci cmd_str, 51cc290419Sopenharmony_ci HdcCommand::KernelEchoRaw, 52cc290419Sopenharmony_ci ); 53cc290419Sopenharmony_ci 54cc290419Sopenharmony_ci ShellExecuteMap::put(session_id, task_message.channel_id, shell_execute_task).await; 55cc290419Sopenharmony_ci }, 56cc290419Sopenharmony_ci Err(_) => { 57cc290419Sopenharmony_ci crate::common::hdctransfer::echo_client( 58cc290419Sopenharmony_ci session_id, 59cc290419Sopenharmony_ci task_message.channel_id, 60cc290419Sopenharmony_ci "only support utf-8 chars", 61cc290419Sopenharmony_ci MessageLevel::Fail, 62cc290419Sopenharmony_ci ) 63cc290419Sopenharmony_ci .await; 64cc290419Sopenharmony_ci let message = TaskMessage { 65cc290419Sopenharmony_ci channel_id: task_message.channel_id, 66cc290419Sopenharmony_ci command: HdcCommand::KernelChannelClose, 67cc290419Sopenharmony_ci payload: [1].to_vec(), 68cc290419Sopenharmony_ci }; 69cc290419Sopenharmony_ci let _ = daemon_channel_close(message, session_id).await; 70cc290419Sopenharmony_ci return Err(Error::new(ErrorKind::Other, "Get an FromUtf8Error")); 71cc290419Sopenharmony_ci } 72cc290419Sopenharmony_ci } 73cc290419Sopenharmony_ci } 74cc290419Sopenharmony_ci _ => { 75cc290419Sopenharmony_ci let channel_id = task_message.channel_id; 76cc290419Sopenharmony_ci if let Some(pty_task) = PtyMap::get(session_id, channel_id).await { 77cc290419Sopenharmony_ci let _ = &pty_task.tx.send(task_message.payload.clone()).await; 78cc290419Sopenharmony_ci if task_message.payload[..].contains(&0x4_u8) { 79cc290419Sopenharmony_ci PtyMap::del(session_id, channel_id).await; 80cc290419Sopenharmony_ci } 81cc290419Sopenharmony_ci return Ok(()); 82cc290419Sopenharmony_ci } else { 83cc290419Sopenharmony_ci return Err(Error::new(ErrorKind::Other, "invalid channel id")); 84cc290419Sopenharmony_ci } 85cc290419Sopenharmony_ci } 86cc290419Sopenharmony_ci } 87cc290419Sopenharmony_ci Ok(()) 88cc290419Sopenharmony_ci} 89cc290419Sopenharmony_ci 90cc290419Sopenharmony_ciasync fn remove_task(session_id: u32, channel_id: u32) { 91cc290419Sopenharmony_ci jdwp::stop_task(session_id, channel_id).await; 92cc290419Sopenharmony_ci AppTaskMap::remove(session_id, channel_id).await; 93cc290419Sopenharmony_ci FileTaskMap::remove(session_id, channel_id).await; 94cc290419Sopenharmony_ci forward::free_channel_task(session_id, channel_id).await; 95cc290419Sopenharmony_ci // shell & hilog task 96cc290419Sopenharmony_ci if let Some(pty_task) = PtyMap::get(session_id, channel_id).await { 97cc290419Sopenharmony_ci let _ = &pty_task.tx.send(vec![0x04_u8]).await; 98cc290419Sopenharmony_ci PtyMap::del(session_id, channel_id).await; 99cc290419Sopenharmony_ci } 100cc290419Sopenharmony_ci ShellExecuteMap::del(session_id, channel_id).await; 101cc290419Sopenharmony_ci} 102cc290419Sopenharmony_ci 103cc290419Sopenharmony_ciasync fn daemon_channel_close(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 104cc290419Sopenharmony_ci // task stop: 105cc290419Sopenharmony_ci crate::debug!( 106cc290419Sopenharmony_ci "daemon_channel_close session_id {session_id}, channel_id {}", 107cc290419Sopenharmony_ci task_message.channel_id 108cc290419Sopenharmony_ci ); 109cc290419Sopenharmony_ci 110cc290419Sopenharmony_ci remove_task(session_id, task_message.channel_id).await; 111cc290419Sopenharmony_ci 112cc290419Sopenharmony_ci if task_message.payload[0] > 0 { 113cc290419Sopenharmony_ci let message = TaskMessage { 114cc290419Sopenharmony_ci channel_id: task_message.channel_id, 115cc290419Sopenharmony_ci command: HdcCommand::KernelChannelClose, 116cc290419Sopenharmony_ci payload: vec![task_message.payload[0] - 1], 117cc290419Sopenharmony_ci }; 118cc290419Sopenharmony_ci transfer::put(session_id, message).await; 119cc290419Sopenharmony_ci } 120cc290419Sopenharmony_ci Ok(()) 121cc290419Sopenharmony_ci} 122cc290419Sopenharmony_ci 123cc290419Sopenharmony_ciasync fn daemon_file_task(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 124cc290419Sopenharmony_ci match task_message.command { 125cc290419Sopenharmony_ci HdcCommand::AppCheck | HdcCommand::AppUninstall => { 126cc290419Sopenharmony_ci if !AppTaskMap::exsit(session_id, task_message.channel_id).await { 127cc290419Sopenharmony_ci let task = DaemonAppTask::new(session_id, task_message.channel_id); 128cc290419Sopenharmony_ci AppTaskMap::put(session_id, task_message.channel_id, task).await; 129cc290419Sopenharmony_ci } 130cc290419Sopenharmony_ci daemon_app::command_dispatch( 131cc290419Sopenharmony_ci session_id, 132cc290419Sopenharmony_ci task_message.channel_id, 133cc290419Sopenharmony_ci task_message.command, 134cc290419Sopenharmony_ci &task_message.payload, 135cc290419Sopenharmony_ci task_message.payload.len() as u16, 136cc290419Sopenharmony_ci ) 137cc290419Sopenharmony_ci .await; 138cc290419Sopenharmony_ci return Ok(()); 139cc290419Sopenharmony_ci } 140cc290419Sopenharmony_ci HdcCommand::AppBegin | HdcCommand::AppData => { 141cc290419Sopenharmony_ci daemon_app::command_dispatch( 142cc290419Sopenharmony_ci session_id, 143cc290419Sopenharmony_ci task_message.channel_id, 144cc290419Sopenharmony_ci task_message.command, 145cc290419Sopenharmony_ci &task_message.payload, 146cc290419Sopenharmony_ci task_message.payload.len() as u16, 147cc290419Sopenharmony_ci ) 148cc290419Sopenharmony_ci .await; 149cc290419Sopenharmony_ci return Ok(()); 150cc290419Sopenharmony_ci } 151cc290419Sopenharmony_ci HdcCommand::FileMode | HdcCommand::FileCheck | HdcCommand::FileInit => { 152cc290419Sopenharmony_ci if !FileTaskMap::exsit(session_id, task_message.channel_id).await { 153cc290419Sopenharmony_ci let mut task = HdcFile::new(session_id, task_message.channel_id); 154cc290419Sopenharmony_ci task.transfer.server_or_daemon = false; 155cc290419Sopenharmony_ci FileTaskMap::put(session_id, task_message.channel_id, task).await; 156cc290419Sopenharmony_ci } 157cc290419Sopenharmony_ci 158cc290419Sopenharmony_ci hdcfile::command_dispatch( 159cc290419Sopenharmony_ci session_id, 160cc290419Sopenharmony_ci task_message.channel_id, 161cc290419Sopenharmony_ci task_message.command, 162cc290419Sopenharmony_ci &task_message.payload, 163cc290419Sopenharmony_ci task_message.payload.len() as u16, 164cc290419Sopenharmony_ci ) 165cc290419Sopenharmony_ci .await; 166cc290419Sopenharmony_ci return Ok(()); 167cc290419Sopenharmony_ci } 168cc290419Sopenharmony_ci HdcCommand::ForwardInit | HdcCommand::ForwardCheck => { 169cc290419Sopenharmony_ci let mut task = HdcForward::new(session_id, task_message.channel_id, false); 170cc290419Sopenharmony_ci task.transfer.server_or_daemon = false; 171cc290419Sopenharmony_ci ForwardTaskMap::update(session_id, task_message.channel_id, task).await; 172cc290419Sopenharmony_ci forward::command_dispatch( 173cc290419Sopenharmony_ci session_id, 174cc290419Sopenharmony_ci task_message.channel_id, 175cc290419Sopenharmony_ci task_message.command, 176cc290419Sopenharmony_ci &task_message.payload, 177cc290419Sopenharmony_ci task_message.payload.len() as u16, 178cc290419Sopenharmony_ci ) 179cc290419Sopenharmony_ci .await; 180cc290419Sopenharmony_ci return Ok(()); 181cc290419Sopenharmony_ci } 182cc290419Sopenharmony_ci HdcCommand::ForwardCheckResult 183cc290419Sopenharmony_ci | HdcCommand::ForwardActiveSlave 184cc290419Sopenharmony_ci | HdcCommand::ForwardActiveMaster 185cc290419Sopenharmony_ci | HdcCommand::ForwardData 186cc290419Sopenharmony_ci | HdcCommand::ForwardFreeContext => { 187cc290419Sopenharmony_ci forward::command_dispatch( 188cc290419Sopenharmony_ci session_id, 189cc290419Sopenharmony_ci task_message.channel_id, 190cc290419Sopenharmony_ci task_message.command, 191cc290419Sopenharmony_ci &task_message.payload, 192cc290419Sopenharmony_ci task_message.payload.len() as u16, 193cc290419Sopenharmony_ci ) 194cc290419Sopenharmony_ci .await; 195cc290419Sopenharmony_ci return Ok(()); 196cc290419Sopenharmony_ci } 197cc290419Sopenharmony_ci HdcCommand::FileBegin 198cc290419Sopenharmony_ci | HdcCommand::FileData 199cc290419Sopenharmony_ci | HdcCommand::FileFinish 200cc290419Sopenharmony_ci | HdcCommand::DirMode => { 201cc290419Sopenharmony_ci hdcfile::command_dispatch( 202cc290419Sopenharmony_ci session_id, 203cc290419Sopenharmony_ci task_message.channel_id, 204cc290419Sopenharmony_ci task_message.command, 205cc290419Sopenharmony_ci &task_message.payload, 206cc290419Sopenharmony_ci task_message.payload.len() as u16, 207cc290419Sopenharmony_ci ) 208cc290419Sopenharmony_ci .await; 209cc290419Sopenharmony_ci return Ok(()); 210cc290419Sopenharmony_ci } 211cc290419Sopenharmony_ci HdcCommand::UnityRunmode 212cc290419Sopenharmony_ci | HdcCommand::UnityReboot 213cc290419Sopenharmony_ci | HdcCommand::UnityRemount 214cc290419Sopenharmony_ci | HdcCommand::UnityRootrun 215cc290419Sopenharmony_ci | HdcCommand::JdwpList 216cc290419Sopenharmony_ci | HdcCommand::JdwpTrack => { 217cc290419Sopenharmony_ci daemon_unity::command_dispatch( 218cc290419Sopenharmony_ci session_id, 219cc290419Sopenharmony_ci task_message.channel_id, 220cc290419Sopenharmony_ci task_message.command, 221cc290419Sopenharmony_ci &task_message.payload, 222cc290419Sopenharmony_ci task_message.payload.len() as u16, 223cc290419Sopenharmony_ci ) 224cc290419Sopenharmony_ci .await; 225cc290419Sopenharmony_ci return Ok(()); 226cc290419Sopenharmony_ci } 227cc290419Sopenharmony_ci _ => { 228cc290419Sopenharmony_ci crate::error!( 229cc290419Sopenharmony_ci "other tasks, cmd {:?}. session_id {session_id}, channel_id {}", 230cc290419Sopenharmony_ci task_message.command, 231cc290419Sopenharmony_ci task_message.channel_id 232cc290419Sopenharmony_ci ); 233cc290419Sopenharmony_ci } 234cc290419Sopenharmony_ci } 235cc290419Sopenharmony_ci 236cc290419Sopenharmony_ci Ok(()) 237cc290419Sopenharmony_ci} 238cc290419Sopenharmony_ci 239cc290419Sopenharmony_ciasync fn daemon_hilog_task(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 240cc290419Sopenharmony_ci let cmd = if task_message.payload.len() == 1 && task_message.payload[0] == 104 { 241cc290419Sopenharmony_ci // payload is 'h' 242cc290419Sopenharmony_ci "hilog -h" 243cc290419Sopenharmony_ci } else { 244cc290419Sopenharmony_ci // blank or unknown payload, ignore 245cc290419Sopenharmony_ci "hilog" 246cc290419Sopenharmony_ci } 247cc290419Sopenharmony_ci .to_string(); 248cc290419Sopenharmony_ci let pty_task = PtyTask::new( 249cc290419Sopenharmony_ci session_id, 250cc290419Sopenharmony_ci task_message.channel_id, 251cc290419Sopenharmony_ci Some(cmd), 252cc290419Sopenharmony_ci HdcCommand::KernelEchoRaw, 253cc290419Sopenharmony_ci ); 254cc290419Sopenharmony_ci PtyMap::put(session_id, task_message.channel_id, pty_task).await; 255cc290419Sopenharmony_ci Ok(()) 256cc290419Sopenharmony_ci} 257cc290419Sopenharmony_ci 258cc290419Sopenharmony_ciasync fn daemon_bug_report_task(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 259cc290419Sopenharmony_ci let pty_task = PtyTask::new( 260cc290419Sopenharmony_ci session_id, 261cc290419Sopenharmony_ci task_message.channel_id, 262cc290419Sopenharmony_ci Some("hidumper".to_string()), 263cc290419Sopenharmony_ci HdcCommand::UnityBugreportData, 264cc290419Sopenharmony_ci ); 265cc290419Sopenharmony_ci PtyMap::put(session_id, task_message.channel_id, pty_task).await; 266cc290419Sopenharmony_ci Ok(()) 267cc290419Sopenharmony_ci} 268cc290419Sopenharmony_ci 269cc290419Sopenharmony_cifn get_control_permission(param: &str) -> bool { 270cc290419Sopenharmony_ci let (_, control_value) = get_dev_item(param, "_"); 271cc290419Sopenharmony_ci if control_value.trim().to_lowercase() == "false" { 272cc290419Sopenharmony_ci return false; 273cc290419Sopenharmony_ci } 274cc290419Sopenharmony_ci true 275cc290419Sopenharmony_ci} 276cc290419Sopenharmony_ci 277cc290419Sopenharmony_cifn check_control(command: HdcCommand) -> bool { 278cc290419Sopenharmony_ci let mut control_param = ""; 279cc290419Sopenharmony_ci match command { 280cc290419Sopenharmony_ci HdcCommand::UnityRunmode 281cc290419Sopenharmony_ci | HdcCommand::UnityReboot 282cc290419Sopenharmony_ci | HdcCommand::UnityRemount 283cc290419Sopenharmony_ci | HdcCommand::UnityRootrun 284cc290419Sopenharmony_ci | HdcCommand::ShellInit 285cc290419Sopenharmony_ci | HdcCommand::ShellData 286cc290419Sopenharmony_ci | HdcCommand::UnityExecute 287cc290419Sopenharmony_ci | HdcCommand::UnityHilog 288cc290419Sopenharmony_ci | HdcCommand::UnityBugreportInit 289cc290419Sopenharmony_ci | HdcCommand::JdwpList 290cc290419Sopenharmony_ci | HdcCommand::JdwpTrack => { 291cc290419Sopenharmony_ci control_param = ENV_SHELL_CONTROL; 292cc290419Sopenharmony_ci } 293cc290419Sopenharmony_ci HdcCommand::FileInit 294cc290419Sopenharmony_ci | HdcCommand::FileCheck 295cc290419Sopenharmony_ci | HdcCommand::FileData 296cc290419Sopenharmony_ci | HdcCommand::FileBegin 297cc290419Sopenharmony_ci | HdcCommand::FileFinish 298cc290419Sopenharmony_ci | HdcCommand::AppCheck 299cc290419Sopenharmony_ci | HdcCommand::AppData 300cc290419Sopenharmony_ci | HdcCommand::AppUninstall => { 301cc290419Sopenharmony_ci control_param = ENV_FILE_CONTROL; 302cc290419Sopenharmony_ci } 303cc290419Sopenharmony_ci HdcCommand::ForwardInit 304cc290419Sopenharmony_ci | HdcCommand::ForwardCheck 305cc290419Sopenharmony_ci | HdcCommand::ForwardCheckResult 306cc290419Sopenharmony_ci | HdcCommand::ForwardActiveSlave 307cc290419Sopenharmony_ci | HdcCommand::ForwardActiveMaster 308cc290419Sopenharmony_ci | HdcCommand::ForwardData 309cc290419Sopenharmony_ci | HdcCommand::ForwardFreeContext => { 310cc290419Sopenharmony_ci control_param = ENV_FPORT_CONTROL; 311cc290419Sopenharmony_ci } 312cc290419Sopenharmony_ci _ => {} 313cc290419Sopenharmony_ci } 314cc290419Sopenharmony_ci // (_, run_debug) = crate::utils::get_dev_item(param); 315cc290419Sopenharmony_ci if !control_param.is_empty() && !get_control_permission(control_param) { 316cc290419Sopenharmony_ci return false; 317cc290419Sopenharmony_ci } 318cc290419Sopenharmony_ci true 319cc290419Sopenharmony_ci} 320cc290419Sopenharmony_ci 321cc290419Sopenharmony_cipub async fn dispatch_task(task_message: TaskMessage, session_id: u32) -> io::Result<()> { 322cc290419Sopenharmony_ci let cmd = task_message.command; 323cc290419Sopenharmony_ci let special_cmd = 324cc290419Sopenharmony_ci (cmd == HdcCommand::KernelHandshake) || (cmd == HdcCommand::KernelChannelClose); 325cc290419Sopenharmony_ci let auth_ok = auth::AuthStatusMap::get(session_id).await == auth::AuthStatus::Ok; 326cc290419Sopenharmony_ci 327cc290419Sopenharmony_ci if !auth_ok && !special_cmd { 328cc290419Sopenharmony_ci crate::error!("auth status is nok, cannt accept cmd: {}", cmd as u32); 329cc290419Sopenharmony_ci crate::common::hdctransfer::echo_client( 330cc290419Sopenharmony_ci session_id, 331cc290419Sopenharmony_ci task_message.channel_id, 332cc290419Sopenharmony_ci auth::get_auth_msg(session_id).await.as_str(), 333cc290419Sopenharmony_ci MessageLevel::Fail, 334cc290419Sopenharmony_ci ) 335cc290419Sopenharmony_ci .await; 336cc290419Sopenharmony_ci transfer::put( 337cc290419Sopenharmony_ci session_id, 338cc290419Sopenharmony_ci auth::make_channel_close_message(task_message.channel_id).await, 339cc290419Sopenharmony_ci ) 340cc290419Sopenharmony_ci .await; 341cc290419Sopenharmony_ci return Err(Error::new( 342cc290419Sopenharmony_ci ErrorKind::Other, 343cc290419Sopenharmony_ci format!("auth status is nok, cannt accept cmd: {}", cmd as u32), 344cc290419Sopenharmony_ci )); 345cc290419Sopenharmony_ci } 346cc290419Sopenharmony_ci if !check_control(task_message.command) { 347cc290419Sopenharmony_ci crate::common::hdctransfer::echo_client( 348cc290419Sopenharmony_ci session_id, 349cc290419Sopenharmony_ci task_message.channel_id, 350cc290419Sopenharmony_ci "debugging is not allowed", 351cc290419Sopenharmony_ci MessageLevel::Fail, 352cc290419Sopenharmony_ci ) 353cc290419Sopenharmony_ci .await; 354cc290419Sopenharmony_ci crate::common::hdctransfer::transfer_task_finish(task_message.channel_id, session_id).await; 355cc290419Sopenharmony_ci crate::debug!( 356cc290419Sopenharmony_ci "check_permission param false: {}", 357cc290419Sopenharmony_ci task_message.command as u32 358cc290419Sopenharmony_ci ); 359cc290419Sopenharmony_ci 360cc290419Sopenharmony_ci return Ok(()); 361cc290419Sopenharmony_ci } 362cc290419Sopenharmony_ci match task_message.command { 363cc290419Sopenharmony_ci HdcCommand::KernelHandshake => auth::handshake_task(task_message, session_id).await, 364cc290419Sopenharmony_ci HdcCommand::UnityHilog => daemon_hilog_task(task_message, session_id).await, 365cc290419Sopenharmony_ci HdcCommand::UnityBugreportInit => daemon_bug_report_task(task_message, session_id).await, 366cc290419Sopenharmony_ci HdcCommand::ShellInit | HdcCommand::ShellData | HdcCommand::UnityExecute => { 367cc290419Sopenharmony_ci daemon_shell_task(task_message, session_id).await 368cc290419Sopenharmony_ci } 369cc290419Sopenharmony_ci HdcCommand::KernelChannelClose => daemon_channel_close(task_message, session_id).await, 370cc290419Sopenharmony_ci HdcCommand::FileInit 371cc290419Sopenharmony_ci | HdcCommand::FileCheck 372cc290419Sopenharmony_ci | HdcCommand::FileData 373cc290419Sopenharmony_ci | HdcCommand::FileBegin 374cc290419Sopenharmony_ci | HdcCommand::FileFinish 375cc290419Sopenharmony_ci | HdcCommand::FileMode 376cc290419Sopenharmony_ci | HdcCommand::DirMode 377cc290419Sopenharmony_ci | HdcCommand::AppCheck 378cc290419Sopenharmony_ci | HdcCommand::AppData 379cc290419Sopenharmony_ci | HdcCommand::AppUninstall 380cc290419Sopenharmony_ci | HdcCommand::ForwardInit 381cc290419Sopenharmony_ci | HdcCommand::ForwardCheck 382cc290419Sopenharmony_ci | HdcCommand::ForwardCheckResult 383cc290419Sopenharmony_ci | HdcCommand::ForwardActiveSlave 384cc290419Sopenharmony_ci | HdcCommand::ForwardActiveMaster 385cc290419Sopenharmony_ci | HdcCommand::ForwardData 386cc290419Sopenharmony_ci | HdcCommand::ForwardFreeContext 387cc290419Sopenharmony_ci | HdcCommand::UnityRunmode 388cc290419Sopenharmony_ci | HdcCommand::UnityReboot 389cc290419Sopenharmony_ci | HdcCommand::UnityRemount 390cc290419Sopenharmony_ci | HdcCommand::UnityRootrun 391cc290419Sopenharmony_ci | HdcCommand::JdwpList 392cc290419Sopenharmony_ci | HdcCommand::JdwpTrack => daemon_file_task(task_message, session_id).await, 393cc290419Sopenharmony_ci HdcCommand::KernelWakeupSlavetask => Ok(()), 394cc290419Sopenharmony_ci _ => Err(Error::new( 395cc290419Sopenharmony_ci ErrorKind::Other, 396cc290419Sopenharmony_ci format!("unknown command: {}", task_message.command as u32), 397cc290419Sopenharmony_ci )), 398cc290419Sopenharmony_ci } 399cc290419Sopenharmony_ci}