rust/nfs: convert parser to nom7 functions (NFS v2 records)

pull/6629/head
Pierre Chifflier 4 years ago committed by Victor Julien
parent ea1d03f8e3
commit acb3ec6db1

@ -22,8 +22,8 @@ use crate::nfs::types::*;
use crate::nfs::rpc_records::*; use crate::nfs::rpc_records::*;
use crate::nfs::nfs2_records::*; use crate::nfs::nfs2_records::*;
use nom::IResult; use nom7::IResult;
use nom::number::streaming::be_u32; use nom7::number::streaming::be_u32;
impl NFSState { impl NFSState {
/// complete request record /// complete request record

@ -16,24 +16,22 @@
*/ */
//! Nom parsers for NFSv2 records //! Nom parsers for NFSv2 records
use nom::combinator::rest;
use nom::number::streaming::be_u32;
use crate::nfs::nfs_records::*; use crate::nfs::nfs_records::*;
use nom7::bytes::streaming::take;
use nom7::combinator::rest;
use nom7::number::streaming::be_u32;
use nom7::IResult;
#[derive(Debug,PartialEq)] #[derive(Debug,PartialEq)]
pub struct Nfs2Handle<'a> { pub struct Nfs2Handle<'a> {
pub value: &'a[u8], pub value: &'a[u8],
} }
named!(pub parse_nfs2_handle<Nfs2Handle>, pub fn parse_nfs2_handle(i: &[u8]) -> IResult<&[u8], Nfs2Handle> {
do_parse!( let (i, value) = take(32_usize)(i)?;
handle: take!(32) Ok((i, Nfs2Handle { value }))
>> (
Nfs2Handle {
value:handle,
} }
))
);
#[derive(Debug,PartialEq)] #[derive(Debug,PartialEq)]
pub struct Nfs2RequestLookup<'a> { pub struct Nfs2RequestLookup<'a> {
@ -41,19 +39,17 @@ pub struct Nfs2RequestLookup<'a> {
pub name_vec: Vec<u8>, pub name_vec: Vec<u8>,
} }
named!(pub parse_nfs2_request_lookup<Nfs2RequestLookup>, pub fn parse_nfs2_request_lookup(i: &[u8]) -> IResult<&[u8], Nfs2RequestLookup> {
do_parse!( let (i, handle) = parse_nfs2_handle(i)?;
handle: parse_nfs2_handle let (i, name_len) = be_u32(i)?;
>> name_len: be_u32 let (i, name_contents) = take(name_len as usize)(i)?;
>> name_contents: take!(name_len) let (i, _name_padding) = rest(i)?;
>> _name_padding: rest let req = Nfs2RequestLookup {
>> (
Nfs2RequestLookup {
handle, handle,
name_vec: name_contents.to_vec(), name_vec: name_contents.to_vec(),
};
Ok((i, req))
} }
))
);
#[derive(Debug,PartialEq)] #[derive(Debug,PartialEq)]
pub struct Nfs2RequestRead<'a> { pub struct Nfs2RequestRead<'a> {
@ -61,27 +57,20 @@ pub struct Nfs2RequestRead<'a> {
pub offset: u32, pub offset: u32,
} }
named!(pub parse_nfs2_request_read<Nfs2RequestRead>, pub fn parse_nfs2_request_read(i: &[u8]) -> IResult<&[u8], Nfs2RequestRead> {
do_parse!( let (i, handle) = parse_nfs2_handle(i)?;
handle: parse_nfs2_handle let (i, offset) = be_u32(i)?;
>> offset: be_u32 let (i, _count) = be_u32(i)?;
>> _count: be_u32 let req = Nfs2RequestRead { handle, offset };
>> ( Ok((i, req))
Nfs2RequestRead {
handle,
offset
} }
))
);
named!(pub parse_nfs2_reply_read<NfsReplyRead>, pub fn parse_nfs2_reply_read(i: &[u8]) -> IResult<&[u8], NfsReplyRead> {
do_parse!( let (i, status) = be_u32(i)?;
status: be_u32 let (i, attr_blob) = take(68_usize)(i)?;
>> attr_blob: take!(68) let (i, data_len) = be_u32(i)?;
>> data_len: be_u32 let (i, data_contents) = rest(i)?;
>> data_contents: rest let reply = NfsReplyRead {
>> (
NfsReplyRead {
status, status,
attr_follows: 1, attr_follows: 1,
attr_blob, attr_blob,
@ -89,9 +78,9 @@ named!(pub parse_nfs2_reply_read<NfsReplyRead>,
eof: false, eof: false,
data_len, data_len,
data: data_contents, data: data_contents,
};
Ok((i, reply))
} }
))
);
#[derive(Debug,PartialEq)] #[derive(Debug,PartialEq)]
pub struct Nfs2Attributes<> { pub struct Nfs2Attributes<> {
@ -99,16 +88,11 @@ pub struct Nfs2Attributes<> {
pub asize: u32, pub asize: u32,
} }
named!(pub parse_nfs2_attribs<Nfs2Attributes>, pub fn parse_nfs2_attribs(i: &[u8]) -> IResult<&[u8], Nfs2Attributes> {
do_parse!( let (i, atype) = be_u32(i)?;
atype: be_u32 let (i, _blob1) = take(16_usize)(i)?;
>> _blob1: take!(16) let (i, asize) = be_u32(i)?;
>> asize: be_u32 let (i, _blob2) = take(44_usize)(i)?;
>> _blob2: take!(44) let attrs = Nfs2Attributes { atype, asize };
>> ( Ok((i, attrs))
Nfs2Attributes {
atype,
asize
} }
))
);

@ -24,8 +24,8 @@ use crate::nfs::types::*;
use crate::nfs::rpc_records::*; use crate::nfs::rpc_records::*;
use crate::nfs::nfs3_records::*; use crate::nfs::nfs3_records::*;
use nom::IResult; use nom7::IResult;
use nom::number::streaming::be_u32; use nom7::number::streaming::be_u32;
impl NFSState { impl NFSState {
/// complete NFS3 request record /// complete NFS3 request record

Loading…
Cancel
Save