1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2022 Google LLC 2*cf78ab8cSAndroid Build Coastguard Worker // 3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*cf78ab8cSAndroid Build Coastguard Worker // 7*cf78ab8cSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0 8*cf78ab8cSAndroid Build Coastguard Worker // 9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License. 14*cf78ab8cSAndroid Build Coastguard Worker 15*cf78ab8cSAndroid Build Coastguard Worker use crate::ffi::ClientResponseReadable; 16*cf78ab8cSAndroid Build Coastguard Worker use std::fs::File; 17*cf78ab8cSAndroid Build Coastguard Worker /// Implements handler for pcap operations 18*cf78ab8cSAndroid Build Coastguard Worker use std::io::Write; 19*cf78ab8cSAndroid Build Coastguard Worker use std::path::PathBuf; 20*cf78ab8cSAndroid Build Coastguard Worker use tracing::error; 21*cf78ab8cSAndroid Build Coastguard Worker 22*cf78ab8cSAndroid Build Coastguard Worker pub struct FileHandler { 23*cf78ab8cSAndroid Build Coastguard Worker pub file: File, 24*cf78ab8cSAndroid Build Coastguard Worker pub path: PathBuf, 25*cf78ab8cSAndroid Build Coastguard Worker } 26*cf78ab8cSAndroid Build Coastguard Worker 27*cf78ab8cSAndroid Build Coastguard Worker impl ClientResponseReadable for FileHandler { 28*cf78ab8cSAndroid Build Coastguard Worker // function to handle writing each chunk to file handle_chunk(&self, chunk: &[u8])29*cf78ab8cSAndroid Build Coastguard Worker fn handle_chunk(&self, chunk: &[u8]) { 30*cf78ab8cSAndroid Build Coastguard Worker (&self.file) 31*cf78ab8cSAndroid Build Coastguard Worker .write_all(chunk) 32*cf78ab8cSAndroid Build Coastguard Worker .unwrap_or_else(|_| panic!("Unable to write to file: {}", self.path.display())); 33*cf78ab8cSAndroid Build Coastguard Worker } 34*cf78ab8cSAndroid Build Coastguard Worker // function to handle error response handle_error(&self, error_code: u32, error_message: &str)35*cf78ab8cSAndroid Build Coastguard Worker fn handle_error(&self, error_code: u32, error_message: &str) { 36*cf78ab8cSAndroid Build Coastguard Worker error!( 37*cf78ab8cSAndroid Build Coastguard Worker "Handling error code: {}, msg: {}, on file: {}", 38*cf78ab8cSAndroid Build Coastguard Worker error_code, 39*cf78ab8cSAndroid Build Coastguard Worker error_message, 40*cf78ab8cSAndroid Build Coastguard Worker self.path.display() 41*cf78ab8cSAndroid Build Coastguard Worker ); 42*cf78ab8cSAndroid Build Coastguard Worker } 43*cf78ab8cSAndroid Build Coastguard Worker } 44