projects
/
zc
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
b5b459f
)
display length, correctly unpack multi-values (e.g. ip+port)
author
Dobrica Pavlinusic
<dpavlin@rot13.org>
Mon, 21 Sep 2020 11:37:32 +0000
(13:37 +0200)
committer
Dobrica Pavlinusic
<dpavlin@rot13.org>
Mon, 21 Sep 2020 11:37:32 +0000
(13:37 +0200)
unpack.pl
patch
|
blob
|
history
diff --git
a/unpack.pl
b/unpack.pl
index
2b93800
..
66f4c33
100755
(executable)
--- a/
unpack.pl
+++ b/
unpack.pl
@@
-82,6
+82,7
@@
while ( $data ) {
my $pack_fmt = $protocol->{$data_id}->{pack_fmt} || die "can't find pack_fmt for data_id $data_id";
my $data_range;
my $pack_fmt = $protocol->{$data_id}->{pack_fmt} || die "can't find pack_fmt for data_id $data_id";
my $data_range;
+ my $data_len;
if ( $data_id == 0x00 ) {
# sequence number
if ( $data_id == 0x00 ) {
# sequence number
@@
-98,7
+99,7
@@
while ( $data ) {
} elsif ( $up_down eq 'up' && ( $function_code == 0x07 || $function_code == 0x08 || $function_code == 0x03 ) ) {
# type B
} elsif ( $up_down eq 'up' && ( $function_code == 0x07 || $function_code == 0x08 || $function_code == 0x03 ) ) {
# type B
-
my
$data_len = unpack('C', substr($data,1,1));
+ $data_len = unpack('C', substr($data,1,1));
$data_range = substr($data,2, $data_len);
$data = substr($data,2 + $data_len);
$data_range = substr($data,2, $data_len);
$data = substr($data,2 + $data_len);
@@
-106,7
+107,7
@@
while ( $data ) {
} elsif ( $up_down eq 'down' && $function_code == 0x06 ) {
# type B
} elsif ( $up_down eq 'down' && $function_code == 0x06 ) {
# type B
-
my
$data_len = unpack('C', substr($data,1,1));
+ $data_len = unpack('C', substr($data,1,1));
$data_range = substr($data,2, $data_len);
$data = substr($data,2 + $data_len);
$data_range = substr($data,2, $data_len);
$data = substr($data,2 + $data_len);
@@
-123,7
+124,9
@@
while ( $data ) {
warn "ERROR unknown function_code = $function_code";
}
warn "ERROR unknown function_code = $function_code";
}
- my $v = unpack($pack_fmt, $data_range);
+ my @v = unpack($pack_fmt, $data_range);
+
+ my $v = join(' ', @v);
if ( $data_id == 0x0c ) {
$v = $v / 100;
if ( $data_id == 0x0c ) {
$v = $v / 100;
@@
-132,7
+135,7
@@
while ( $data ) {
}
my $description = $protocol->{$data_id}->{description} || die "can't find description for data_id $data_id";
}
my $description = $protocol->{$data_id}->{description} || die "can't find description for data_id $data_id";
- print "$up_down | $data_id | $description | v=$v | hex:", unpack('H*', $data_range), " fmt:$pack_fmt | range:",$protocol->{$data_id}->{range}, " | remark:", $protocol->{$data_id}->{remark},"\n";
+ print "$up_down | $data_id
0x",unpack('H*', chr($data_id))," $data_len
| $description | v=$v | hex:", unpack('H*', $data_range), " fmt:$pack_fmt | range:",$protocol->{$data_id}->{range}, " | remark:", $protocol->{$data_id}->{remark},"\n";
}
}