diff options
author | Bjørn Mork <bjorn@mork.no> | 2013-04-05 21:49:51 +0200 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2013-04-05 21:49:51 +0200 |
commit | 968c6d2028cbdd1b4f78a8cfc4b8234a56c607aa (patch) | |
tree | 1bef6f7896d27ef83ab9902db24a5edeae939168 | |
parent | 2aaa064fa2590eef1b259d333088731b5bf6a5d2 (diff) |
fragmentation support
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rwxr-xr-x | scripts/mbim.pl | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/scripts/mbim.pl b/scripts/mbim.pl index efd45cf..9aaf227 100755 --- a/scripts/mbim.pl +++ b/scripts/mbim.pl @@ -1345,6 +1345,7 @@ my %decoder = ( "MSFWID" => \&decode_msfwid, ); +my %frag; sub decode_mbim { my $msg = shift; @@ -1369,6 +1370,18 @@ sub decode_mbim { printf " TotalFragments:\t0x%08x\n", $total; printf " CurrentFragment:\t0x%08x\n", $current; + # cache fragments for later? + if ($total > 1) { + my $key = sprintf "%08x-%d", $type, $tid; + if ($current == 0) { + $frag{$key} = $msg; + } else { + $frag{$key} .= substr($msg, 20); + } + return if ($current < $total - 1); + $msg = delete $frag{$key}; + } + my $uuid = uuid_to_string(substr($msg, 20, 16)); my $service = &uuid_to_service($uuid); print "$service ($uuid)\n"; @@ -1397,6 +1410,18 @@ sub decode_mbim { print " TotalFragments:\t$total\n"; print " CurrentFragment:\t$current\n"; + # cache fragments for later? + if ($total > 1) { + my $key = sprintf "%08x-%d", $type, $tid; + if ($current == 0) { + $frag{$key} = $msg; + } else { + $frag{$key} .= substr($msg, 20); + } + return if ($current < $total - 1); + $msg = delete $frag{$key}; + } + my $uuid = uuid_to_string(substr($msg, 20, 16)); my $service = &uuid_to_service($uuid); print "$service ($uuid)\n"; |