Changeset 2
- Timestamp:
- 09/09/06 03:52:05 (3 years ago)
- Files:
-
- 1 modified
-
trunk/lib/Danga/Socket/SSL.pm (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/Danga/Socket/SSL.pm
r1 r2 16 16 17 17 use fields ( 18 ' _ssl', # our SSL state19 ' _write_when_readable',18 'ssl_state', # our SSL state 19 'ssl_write_when_readable', 20 20 ); 21 21 … … 66 66 67 67 my $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!"); 68 $self->{ _ssl} = $ssl;68 $self->{ssl_state} = $ssl; 69 69 70 70 # Net::SSLeay::set_verify($ssl, Net::SSLeay::VERIFY_PEER(), 0); … … 91 91 sub _danga_socket_writerfunc { 92 92 my Danga::Socket::SSL $conn = shift; 93 my $ssl = $conn->{ _ssl};93 my $ssl = $conn->{ssl_state}; 94 94 return sub { 95 95 my ($bref, $to_write, $offset) = @_; … … 97 97 # unless our event_read has been called, we don't want to try 98 98 # to do any work now. and probably we should complain. 99 if ($conn->{ _write_when_readable}) {99 if ($conn->{ssl_write_when_readable}) { 100 100 warn "writer func called when we're waiting for readability first.\n"; 101 101 return 0; … … 133 133 } 134 134 135 sub is_ssl { 136 my Danga::Socket::SSL $self = shift; 137 return $self->{ssl_state} ? 1 : 0; 138 } 139 135 140 # return SSL state object. more useful as a boolean if conn is in SSL mode. 136 141 sub ssl_state { 137 142 my Danga::Socket::SSL $self = shift; 138 return $self->{ _ssl};143 return $self->{ssl_state}; 139 144 } 140 145 … … 144 149 my $self = shift; 145 150 151 print "self = $self\n"; 152 146 153 # enable readability, but remember old value so we can pop it back 147 154 my $prev_readable = ($self->{event_watch} & POLLIN) ? 1 : 0; 148 155 $self->watch_read(1); 149 $self->{ _write_when_readable} = [ $prev_readable ];156 $self->{ssl_write_when_readable} = [ $prev_readable ]; 150 157 151 158 # don't need to push/pop its state because Danga::Socket->write, called later, … … 158 165 sub on_incomplete_write { 159 166 my $self = shift; 160 return if $self->{ _write_when_readable};167 return if $self->{ssl_write_when_readable}; 161 168 $self->SUPER::on_incomplete_write; 162 169 } … … 167 174 my $amount = $_[1]; 168 175 169 my $ssl = $self->{ _ssl};176 my $ssl = $self->{ssl_state}; 170 177 return $self->SUPER::read($amount) unless $ssl; 171 178 … … 197 204 # we then go back into the write path (by flushing the write 198 205 # buffer) and it then does a read on this socket. 199 if (my $ar = $self->{ _write_when_readable}) {200 $self->{ _write_when_readable} = 0;206 if (my $ar = $self->{ssl_write_when_readable}) { 207 $self->{ssl_write_when_readable} = 0; 201 208 $self->watch_read($ar->[0]); # restore previous readability state 202 209 $self->watch_write(1);
