- my ($con, $msg, $err) = @_;
- if (defined $err && $err) {
- cease(1);
- }
- if (defined $msg) {
- my ($sort, $call, $line) = $msg =~ /^(\w)(\S+)\|(.*)$/;
-
- if ($sort eq 'D') {
- my $snl = $mynl;
- my $newsavenl = "";
- $snl = "" if $mode == 0;
- if ($mode == 2 && $line =~ />$/) {
- $newsavenl = $snl;
- $snl = ' ';
- }
- $line =~ s/\n/\r/og if $mode == 1;
- #my $p = qq($line$snl);
- if ($buffered) {
- if (length $outqueue >= 128) {
- print $outqueue;
- $outqueue = "";
- }
- $outqueue .= "$savenl$line$snl";
- $lasttime = time;
- } else {
- print $savenl, $line, $snl;;
- }
- $savenl = $newsavenl;
- } elsif ($sort eq 'M') {
- $mode = $line; # set new mode from cluster
- setmode();
- } elsif ($sort eq 'B') {
- if ($buffered && $outqueue) {
- print $outqueue;
- $outqueue = "";
- }
- $buffered = $line; # set buffered or unbuffered
- } elsif ($sort eq 'Z') { # end, disconnect, go, away .....
- cease(0);
- }
- }
- $lasttime = time;
+ my ($con, $msg, $err) = @_;
+ if (defined $err && $err) {
+ cease(0);
+ }
+ if (defined $msg) {
+ my ($sort, $call, $line) = $msg =~ /^(\w)([^\|]+)\|(.*)$/;
+
+ if ($sort eq 'D') {
+ my $snl = $mynl;
+ my $newsavenl = "";
+ $snl = "" if $mode == 0;
+ $snl = "\r\n" if $mode == 3;
+ $snl = "\n" if $mode == 2;
+ if ($mode == 2 && $line =~ />$/) {
+ $newsavenl = $snl;
+ $snl = ' ';
+ }
+ $line =~ s/\n/\r/og if $mode == 1;
+ #my $p = qq($line$snl);
+ if ($buffered) {
+ if (length $outqueue >= $client_buffer_lth) {
+ print $stdout $outqueue;
+ pop @echo while (@echo > $maxecho);
+ push @echo, $outqueue;
+ $outqueue = "";
+ }
+ $outqueue .= "$savenl$line$snl";
+ $lasttime = time;
+ } else {
+ print $stdout $savenl, $line, $snl;;
+ }
+ $savenl = $newsavenl;
+ } elsif ($sort eq 'M') {
+ $mode = $line; # set new mode from cluster
+ setmode();
+ } elsif ($sort eq 'E') {
+ if ($sort eq 'telnet') {
+ $mode = $line; # set echo mode from cluster
+ my $term = POSIX::Termios->new;
+ $term->getattr(fileno($sock));
+ $term->setiflag( 0 );
+ $term->setoflag( 0 );
+ $term->setattr(fileno($sock), &POSIX::TCSANOW );
+ }
+ } elsif ($sort eq 'I') {
+ ; # ignore echoed I frames
+ } elsif ($sort eq 'B') {
+ if ($buffered && $outqueue) {
+ print $stdout $outqueue;
+ pop @echo while(@echo > $maxecho);
+ push @echo, $outqueue;
+ $outqueue = "";
+ }
+ $buffered = $line; # set buffered or unbuffered
+ } elsif ($sort eq 'Z') { # end, disconnect, go, away .....
+ cease(0);
+ }
+
+ # ******************************************************
+ # ******************************************************
+ # any other sorts that might happen are silently ignored.
+ # ******************************************************
+ # ******************************************************
+ } else {
+ cease(0);
+ }
+ $lasttime = time;