1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
//! Handles PacketPiles.
//!
//! Wraps [`sequoia-openpgp::PacketPile`].
//!
//! [`sequoia-openpgp::PacketPile`]: ../../../sequoia_openpgp/struct.PacketPile.html
use std::slice;
use std::io::{Read, Write};
use libc::{uint8_t, c_char, size_t};
extern crate sequoia_openpgp;
use self::sequoia_openpgp::{
PacketPile,
parse::Parse,
serialize::Serialize,
};
use ::error::Status;
/// Deserializes the OpenPGP message stored in a `std::io::Read`
/// object.
///
/// Although this method is easier to use to parse an OpenPGP
/// message than a `PacketParser` or a `PacketPileParser`, this
/// interface buffers the whole message in memory. Thus, the
/// caller must be certain that the *deserialized* message is not
/// too large.
///
/// Note: this interface *does* buffer the contents of packets.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_from_reader(errp: Option<&mut *mut failure::Error>,
reader: *mut Box<Read>)
-> *mut PacketPile {
ffi_make_fry_from_errp!(errp);
let reader = ffi_param_ref_mut!(reader);
ffi_try_box!(PacketPile::from_reader(reader))
}
/// Deserializes the OpenPGP message stored in the file named by
/// `filename`.
///
/// See `pgp_packet_pile_from_reader` for more details and caveats.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_from_file(errp: Option<&mut *mut failure::Error>,
filename: *const c_char)
-> *mut PacketPile {
ffi_make_fry_from_errp!(errp);
let filename = ffi_param_cstr!(filename).to_string_lossy().into_owned();
ffi_try_box!(PacketPile::from_file(&filename))
}
/// Deserializes the OpenPGP message stored in the provided buffer.
///
/// See `pgp_packet_pile_from_reader` for more details and caveats.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_from_bytes(errp: Option<&mut *mut failure::Error>,
b: *const uint8_t, len: size_t)
-> *mut PacketPile {
ffi_make_fry_from_errp!(errp);
assert!(!b.is_null());
let buf = unsafe {
slice::from_raw_parts(b, len as usize)
};
ffi_try_box!(PacketPile::from_bytes(buf))
}
/// Frees the packet_pile.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_free(packet_pile: Option<&mut PacketPile>)
{
ffi_free!(packet_pile)
}
/// Clones the PacketPile.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_clone(packet_pile: *const PacketPile)
-> *mut PacketPile {
let packet_pile = ffi_param_ref!(packet_pile);
box_raw!(packet_pile.clone())
}
/// Serializes the packet pile.
#[::ffi_catch_abort] #[no_mangle]
pub extern "system" fn pgp_packet_pile_serialize(errp: Option<&mut *mut failure::Error>,
packet_pile: *const PacketPile,
writer: *mut Box<Write>)
-> Status {
ffi_make_fry_from_errp!(errp);
let packet_pile = ffi_param_ref!(packet_pile);
let writer = ffi_param_ref_mut!(writer);
ffi_try_status!(packet_pile.serialize(writer))
}
|