ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Handle.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Handle.pm (file contents):
Revision 1.112 by root, Wed Jan 21 06:01:35 2009 UTC vs.
Revision 1.115 by root, Tue Feb 10 13:58:49 2009 UTC

767 ) { 767 ) {
768 $self->_error (&Errno::ENOSPC, 1), return; 768 $self->_error (&Errno::ENOSPC, 1), return;
769 } 769 }
770 770
771 while () { 771 while () {
772 $self->{rbuf} .= delete $self->{tls_rbuf} if exists $self->{tls_rbuf};#d#
773
772 my $len = length $self->{rbuf}; 774 my $len = length $self->{rbuf};
773 775
774 if (my $cb = shift @{ $self->{_queue} }) { 776 if (my $cb = shift @{ $self->{_queue} }) {
775 unless ($cb->($self)) { 777 unless ($cb->($self)) {
776 if ($self->{_eof}) { 778 if ($self->{_eof}) {
1172 my $rbuf = \$self->{rbuf}; 1174 my $rbuf = \$self->{rbuf};
1173 1175
1174 my $json = $self->{json} ||= JSON->new->utf8; 1176 my $json = $self->{json} ||= JSON->new->utf8;
1175 1177
1176 sub { 1178 sub {
1177 eval {
1178 my $ref = $json->incr_parse ($self->{rbuf}); 1179 my $ref = eval { $json->incr_parse ($self->{rbuf}) };
1179 1180
1180 if ($ref) { 1181 if ($ref) {
1181 $self->{rbuf} = $json->incr_text; 1182 $self->{rbuf} = $json->incr_text;
1182 $json->incr_text = ""; 1183 $json->incr_text = "";
1183 $cb->($self, $ref); 1184 $cb->($self, $ref);
1184
1185 1
1186 } else {
1187 $self->{rbuf} = "";
1188 ()
1189 }
1190 1185
1191 1 1186 1
1192 } or do { 1187 } elsif ($@) {
1193 # error case 1188 # error case
1194 $json->incr_skip; 1189 $json->incr_skip;
1195 1190
1196 $self->{rbuf} = $json->incr_text; 1191 $self->{rbuf} = $json->incr_text;
1197 $json->incr_text = ""; 1192 $json->incr_text = "";
1198 1193
1199 $self->_error (&Errno::EBADMSG); 1194 $self->_error (&Errno::EBADMSG);
1195
1196 ()
1197 } else {
1198 $self->{rbuf} = "";
1199
1200 ()
1200 }; 1201 }
1201 } 1202 }
1202}; 1203};
1203 1204
1204=item storable => $cb->($handle, $ref) 1205=item storable => $cb->($handle, $ref)
1205 1206
1344 delete $self->{_rw}; 1345 delete $self->{_rw};
1345 $self->{_eof} = 1; 1346 $self->{_eof} = 1;
1346 &_freetls; 1347 &_freetls;
1347 } 1348 }
1348 1349
1349 $self->{rbuf} .= $tmp; 1350 $self->{tls_rbuf} .= $tmp;#d#
1350 $self->_drain_rbuf unless $self->{_in_drain}; 1351 $self->_drain_rbuf unless $self->{_in_drain};
1351 $self->{tls} or return; # tls session might have gone away in callback 1352 $self->{tls} or return; # tls session might have gone away in callback
1352 } 1353 }
1353 1354
1354 $tmp = Net::SSLeay::get_error ($self->{tls}, -1); 1355 $tmp = Net::SSLeay::get_error ($self->{tls}, -1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines