Skip to content

Commit cdd0a17

Browse files
committed
decode/handle openMulti responses
1 parent b053236 commit cdd0a17

File tree

1 file changed

+39
-9
lines changed

1 file changed

+39
-9
lines changed

qdload.pl

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -721,18 +721,48 @@ sub doOpenMulti {
721721
print "Failed openMulti\n";
722722
exit 1;
723723
}
724+
my $haveGoodResponse = 0;
725+
my $haveErrorResponse = 0;
726+
my $haveUnknownResponse = 0;
727+
while ( $response = readPacket( $fd, 2 ) ) {
728+
my @responseBytes = unpack( 'C*', $response );
729+
if ( scalar @responseBytes == 2
730+
&& $responseBytes[0] == 0x1c
731+
&& $responseBytes[1] == 0 )
732+
{
733+
$haveGoodResponse = 1;
734+
}
735+
elsif ( $responseBytes[0] == 0x0e ) {
724736

725-
if ( !( $response = readPacket( $fd, 2.0 ) ) ) {
726-
print "Failed to read response.\n";
727-
exit 1;
728-
}
737+
# msg
738+
my $msg = pack( 'C*',
739+
map { hex }
740+
split( /\s/, serialize( substr( $response, 1 ) ) ) );
741+
$msg =~ tr/\n/ /;
742+
$msg =~ tr/\r/ /;
743+
print "MSG: ", $msg, "\n";
744+
}
745+
elsif ( $responseBytes[0] == 0x0d ) {
729746

730-
my @responseBytes = unpack( 'C*', $response );
731-
if ( scalar @responseBytes != 2
732-
|| $responseBytes[0] != 0x1c
733-
|| $responseBytes[1] != 0 )
747+
# error
748+
$haveErrorResponse = 1;
749+
my $msg = pack( 'C*',
750+
map { hex }
751+
split( /\s/, serialize( substr( $response, 5 ) ) ) );
752+
$msg =~ tr/\n//d;
753+
$msg =~ tr/\r//d;
754+
print "ERROR: ", $msg, "\n";
755+
}
756+
else {
757+
$haveUnknownResponse = 1;
758+
print "Response: ", serialize($response), "\n";
759+
}
760+
}
761+
if ( $haveGoodResponse != 1
762+
|| $haveErrorResponse == 1
763+
|| $haveUnknownResponse == 1 )
734764
{
735-
print "Invalid Response: ", serialize($response), "\n";
765+
print "Invalid openMulti response.\n";
736766
exit 1;
737767
}
738768
}

0 commit comments

Comments
 (0)