MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / download_debug_info

Function download_debug_info

plugins/dwarf/dwarf_import/src/helpers.rs:424–496  ·  view source on GitHub ↗
(
    build_id: &str,
    view: &BinaryView,
)

Source from the content-addressed store, hash-verified

422}
423
424pub(crate) fn download_debug_info(
425 build_id: &str,
426 view: &BinaryView,
427) -> Result<Ref<BinaryView>, String> {
428 let mut settings_query_opts = QueryOptions::new_with_view(view);
429 let settings = Settings::new();
430 let debug_server_urls =
431 settings.get_string_list_with_opts("network.debuginfodServers", &mut settings_query_opts);
432
433 for debug_server_url in debug_server_urls.iter() {
434 let artifact_url = format!("{}/buildid/{}/debuginfo", debug_server_url, build_id);
435
436 // Download from remote
437 let (tx, rx) = mpsc::channel();
438 let write = move |data: &[u8]| -> usize {
439 if tx.send(Vec::from(data)).is_ok() {
440 data.len()
441 } else {
442 0
443 }
444 };
445
446 let dp = DownloadProvider::try_default().map_err(|_| "No default download provider")?;
447 let mut inst = dp
448 .create_instance()
449 .map_err(|_| "Couldn't create download instance")?;
450 let result = inst
451 .perform_custom_request(
452 "GET",
453 artifact_url,
454 HashMap::<String, String>::new(),
455 DownloadInstanceInputOutputCallbacks {
456 read: None,
457 write: Some(Box::new(write)),
458 progress: None,
459 },
460 )
461 .map_err(|e| e.to_string())?;
462 if result.status_code != 200 {
463 continue;
464 }
465
466 let mut expected_length = None;
467 for (k, v) in result.headers.iter() {
468 if k.to_lowercase() == "content-length" {
469 expected_length = Some(usize::from_str(v).map_err(|e| e.to_string())?);
470 }
471 }
472
473 let mut data = vec![];
474 while let Ok(packet) = rx.try_recv() {
475 data.extend(packet.into_iter());
476 }
477
478 if let Some(length) = expected_length {
479 if data.len() != length {
480 return Err(format!(
481 "Bad length: expected {} got {}",

Callers 1

Calls 8

load_viewFunction · 0.85
iterMethod · 0.45
lenMethod · 0.45
create_instanceMethod · 0.45
into_iterMethod · 0.45
derefMethod · 0.45

Tested by

no test coverage detected