add more debuging,
authorminima <minima>
Fri, 30 Mar 2001 20:13:51 +0000 (20:13 +0000)
committerminima <minima>
Fri, 30 Mar 2001 20:13:51 +0000 (20:13 +0000)
add debug raw mode

Changes
perl/AGWMsg.pm
perl/DXDebug.pm
perl/Msg.pm

diff --git a/Changes b/Changes
index 4e5115106695a43593545a44155edeaa0fb003c5..1e7423bcc920b9e0240316af0837648328bb9caa 100644 (file)
--- a/Changes
+++ b/Changes
@@ -3,6 +3,8 @@
 2. fix the non-blocking problems of connects (and other things in general).
 non-blocking only works for unix implementations at the moment.
 3. add rinit command (sends a PC20)
+4. improve debuging so that stuff is always escaped and a new 'raw' debug 
+mode that shows everything sent and received in glorious hex and characters
 29Mar01=======================================================================
 1. add better tracking of AGW circuits (possibly)
 2. add set and unset/agwmonitor (ing) [for all the notice it seems to take]
index a2a353f42e47c394bc5cb128b6826cbd26dbfe5c..41f23702abd7ab5b79ea6fcd1fa82012867c89ca 100644 (file)
@@ -157,6 +157,9 @@ sub _send
                     return 0; # fail. Message remains in queue ..
                 }
             }
+                       if (isdbg('raw')) {
+                               dbgdump('raw', "send $bytes_written: ", $msg);
+                       }
             $offset         += $bytes_written;
             $bytes_to_write -= $bytes_written;
         }
@@ -183,8 +186,9 @@ sub _rcv {                     # Complement to _send
        if (defined ($bytes_read)) {
                if ($bytes_read > 0) {
                        $inmsg .= $msg;
-#                      $msg =~ s/([\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg; 
-#                      dbg('connll', $msg);
+                       if (isdbg('raw')) {
+                               dbgdump('raw', "read $bytes_read: ", $msg);
+                       }
                } 
        } else {
                if (Msg::_err_will_block($!)) {
index b55d01fcf5ea8de4fa060321e12195468274d8cc..77ad46396406d362e3de927b41ca1a45dadf2261 100644 (file)
@@ -11,7 +11,7 @@ package DXDebug;
 
 require Exporter;
 @ISA = qw(Exporter);
-@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose confess croak cluck cluck);
+@EXPORT = qw(dbginit dbgstore dbg dbgadd dbgsub dbglist dbgdump isdbg dbgclose confess croak cluck cluck);
 
 use strict;
 use vars qw(%dbglevel $fp);
@@ -29,16 +29,16 @@ if (!defined $DB::VERSION) {
        local $^W=0;
        eval qq( sub confess { 
            \$SIG{__DIE__} = 'DEFAULT'; 
-        DXDebug::_store(\$@, Carp::shortmess(\@_));
+        DXDebug::dbgstore(\$@, Carp::shortmess(\@_));
            exit(-1); 
        }
        sub croak { 
                \$SIG{__DIE__} = 'DEFAULT'; 
-        DXDebug::_store(\$@, Carp::longmess(\@_));
+        DXDebug::dbgstore(\$@, Carp::longmess(\@_));
                exit(-1); 
        }
-       sub carp    { DXDebug::_store(Carp::shortmess(\@_)); }
-       sub cluck   { DXDebug::_store(Carp::longmess(\@_)); } 
+       sub carp    { DXDebug::dbgstore(Carp::shortmess(\@_)); }
+       sub cluck   { DXDebug::dbgstore(Carp::longmess(\@_)); } 
        );
 
     CORE::die(Carp::shortmess($@)) if $@;
@@ -49,7 +49,7 @@ if (!defined $DB::VERSION) {
 } 
 
 
-sub _store
+sub dbgstore
 {
        my $t = time; 
        for (@_) {
@@ -58,8 +58,8 @@ sub _store
                for (@l) {
                        my $l = $_;
                        $l =~ s/([\x00\x08\x0B-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;                 
-                       print "$_\n" if defined \*STDOUT;
-                       $fp->writeunix($t, "$t^$_"); 
+                       print "$l\n" if defined \*STDOUT;
+                       $fp->writeunix($t, "$t^$l"); 
                }
        }
 }
@@ -68,8 +68,8 @@ sub dbginit
 {
        # add sig{__DIE__} handling
        if (!defined $DB::VERSION) {
-               $SIG{__WARN__} = sub { _store($@, Carp::shortmess(@_)); };
-               $SIG{__DIE__} = sub { _store($@, Carp::longmess(@_)); };
+               $SIG{__WARN__} = sub { dbgstore($@, Carp::shortmess(@_)); };
+               $SIG{__DIE__} = sub { dbgstore($@, Carp::longmess(@_)); };
        }
 
        $fp = DXLog::new('debug', 'dat', 'd');
@@ -86,13 +86,25 @@ sub dbg
 {
        my $l = shift;
        if ($fp && ($dbglevel{$l} || $l eq 'err')) {
-           my @in = @_;
-               my $t = time;
-               for (@in) {
-                   s/\n$//o;
-                       s/\a//og;   # beeps
-                       print "$_\n" if defined \*STDOUT;
-                       $fp->writeunix($t, "$t^$_");
+           dbgstore(@_);
+       }
+}
+
+sub dbgdump
+{
+       my $l = shift;
+       my $m = shift;
+       if ($fp && ($dbglevel{$l} || $l eq 'err')) {
+               foreach my $l (@_) {
+                       for (my $o = 0; $o < length $l; $o += 16) {
+                               my $c = substr $l, $o, 16;
+                               my $h = unpack "H*", $c;
+                               $c =~ s/[\x00-\x1f\x7f-\xff]/./g;
+                               my $left = 16 - length $c;
+                               $h .= ' ' x (2 * $left) if $left > 0;
+                               dbgstore($m . sprintf("%4d:", $o) . "$h $c");
+                               $m = ' ' x (length $m);
+                       }
                }
        }
 }
index d1f2589b0aabb58d96af1d44a7b6f6b51d459bdf..f1f60edfb6f845e5e04604a41c1a49785380a33f 100644 (file)
@@ -272,7 +272,10 @@ sub _send {
                                        $conn->disconnect;
                     return 0; # fail. Message remains in queue ..
                 }
-            }
+            } elsif (isdbg('raw')) {
+                               my $call = $conn->{call} || 'none';
+                               dbgdump('raw', "$call send $bytes_written: ", $msg);
+                       }
             $offset         += $bytes_written;
             $bytes_to_write -= $bytes_written;
         }
@@ -374,6 +377,10 @@ sub _rcv {                     # Complement to _send
        if (defined ($bytes_read)) {
                if ($bytes_read > 0) {
                        $conn->{msg} .= $msg;
+                       if (isdbg('raw')) {
+                               my $call = $conn->{call} || 'none';
+                               dbgdump('raw', "$call read $bytes_read: ", $msg);
+                       }
                } 
        } else {
                if (_err_will_block($!)) {