From 23e0f153dbb3f6a67532c9835a7fec8bfe13dfe5 Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 3 Jun 2009 15:58:20 +0000 Subject: [PATCH] flush_socket now flushes data through the xml stream parser to prevent the destorying the validity of the stream. now discarding RESULT messages passed to server sessions. git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@1712 9efc2488-bf62-4759-914b-345cdb29e865 --- src/perl/lib/OpenSRF/AppSession.pm | 13 ++++++---- .../lib/OpenSRF/DomainObject/oilsMessage.pm | 6 ++--- .../Transport/SlimJabber/XMPPReader.pm | 26 ++++++------------- 3 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/perl/lib/OpenSRF/AppSession.pm b/src/perl/lib/OpenSRF/AppSession.pm index bf2fb43..851f02c 100644 --- a/src/perl/lib/OpenSRF/AppSession.pm +++ b/src/perl/lib/OpenSRF/AppSession.pm @@ -947,11 +947,14 @@ sub status { $self->session->send( 'STATUS',$msg, $self->threadTrace ); } -sub stream_push { - my $self = shift; - my $msg = shift; - $self->respond( $msg ); -} +# TODO stream_push only works when server sessions can accept RESULT +# messages, which is no longer supported. Create a new OpenSRF message +# type to support client-to-server streams. +#sub stream_push { +# my $self = shift; +# my $msg = shift; +# $self->respond( $msg ); +#} sub respond { my $self = shift; diff --git a/src/perl/lib/OpenSRF/DomainObject/oilsMessage.pm b/src/perl/lib/OpenSRF/DomainObject/oilsMessage.pm index 240089f..ad7ed3b 100644 --- a/src/perl/lib/OpenSRF/DomainObject/oilsMessage.pm +++ b/src/perl/lib/OpenSRF/DomainObject/oilsMessage.pm @@ -221,11 +221,11 @@ sub handler { sub do_server { my( $self, $session, $mtype, $api_level, $tT ) = @_; - # A Server should never receive STATUS messages. If so, we drop them. - # This is to keep STATUS's from dead client sessions from creating new server + # A Server should never receive STATUS or RESULT messages. If so, we drop them. + # This is to keep STATUS/RESULT's from dead client sessions from creating new server # sessions which send mangled session exceptions to backends for messages # that they are not aware of any more. - if( $mtype eq 'STATUS' ) { return 0; } + if( $mtype eq 'STATUS' or $mtype eq 'RESULT' ) { return 0; } if ($mtype eq 'DISCONNECT') { diff --git a/src/perl/lib/OpenSRF/Transport/SlimJabber/XMPPReader.pm b/src/perl/lib/OpenSRF/Transport/SlimJabber/XMPPReader.pm index 1e60f70..7630635 100644 --- a/src/perl/lib/OpenSRF/Transport/SlimJabber/XMPPReader.pm +++ b/src/perl/lib/OpenSRF/Transport/SlimJabber/XMPPReader.pm @@ -321,32 +321,22 @@ sub end_element { } } + +# read all the data on the jabber socket through the +# parser and drop the resulting message sub flush_socket { my $self = shift; - my $socket = $self->socket; - return 0 unless $socket and $socket->connected; - - my $flags = fcntl($socket, F_GETFL, 0); - fcntl($socket, F_SETFL, $flags | O_NONBLOCK); + return 0 unless $self->connected; - while( my $n = sysread( $socket, my $buf, 8192 ) ) { - $logger->debug("flush_socket dropped $n bytes of data"); - $logger->error("flush_socket dropped data on disconnected socket: $buf") - unless($socket->connected); + while ($self->wait(0)) { + # TODO remove this log line + $logger->info("flushing data from socket..."); } - fcntl($socket, F_SETFL, $flags); - return 0 unless $socket->connected; - return 1; + return $self->connected; } - - 1; - - - - -- 2.43.2