Changeset 2

Show
Ignore:
Timestamp:
09/09/06 03:52:05 (3 years ago)
Author:
bradfitz
Message:

works at least a bit.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/Danga/Socket/SSL.pm

    r1 r2  
    1616 
    1717use fields ( 
    18             '_ssl',  # our SSL state 
    19             '_write_when_readable', 
     18            'ssl_state',  # our SSL state 
     19            'ssl_write_when_readable', 
    2020            ); 
    2121 
     
    6666 
    6767    my $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!"); 
    68     $self->{_ssl} = $ssl; 
     68    $self->{ssl_state} = $ssl; 
    6969 
    7070#    Net::SSLeay::set_verify($ssl, Net::SSLeay::VERIFY_PEER(), 0); 
     
    9191sub _danga_socket_writerfunc { 
    9292    my Danga::Socket::SSL $conn = shift; 
    93     my $ssl = $conn->{_ssl}; 
     93    my $ssl = $conn->{ssl_state}; 
    9494    return sub { 
    9595        my ($bref, $to_write, $offset) = @_; 
     
    9797        # unless our event_read has been called, we don't want to try 
    9898        # to do any work now.  and probably we should complain. 
    99         if ($conn->{_write_when_readable}) { 
     99        if ($conn->{ssl_write_when_readable}) { 
    100100            warn "writer func called when we're waiting for readability first.\n"; 
    101101            return 0; 
     
    133133} 
    134134 
     135sub is_ssl { 
     136    my Danga::Socket::SSL $self = shift; 
     137    return $self->{ssl_state} ? 1 : 0; 
     138} 
     139 
    135140# return SSL state object.  more useful as a boolean if conn is in SSL mode. 
    136141sub ssl_state { 
    137142    my Danga::Socket::SSL $self = shift; 
    138     return $self->{_ssl}; 
     143    return $self->{ssl_state}; 
    139144} 
    140145 
     
    144149    my $self = shift; 
    145150 
     151    print "self = $self\n"; 
     152 
    146153    # enable readability, but remember old value so we can pop it back 
    147154    my $prev_readable = ($self->{event_watch} & POLLIN)  ? 1 : 0; 
    148155    $self->watch_read(1); 
    149     $self->{_write_when_readable} = [ $prev_readable ]; 
     156    $self->{ssl_write_when_readable} = [ $prev_readable ]; 
    150157 
    151158    # don't need to push/pop its state because Danga::Socket->write, called later, 
     
    158165sub on_incomplete_write { 
    159166    my $self = shift; 
    160     return if $self->{_write_when_readable}; 
     167    return if $self->{ssl_write_when_readable}; 
    161168    $self->SUPER::on_incomplete_write; 
    162169} 
     
    167174    my $amount = $_[1]; 
    168175 
    169     my $ssl = $self->{_ssl}; 
     176    my $ssl = $self->{ssl_state}; 
    170177    return $self->SUPER::read($amount) unless $ssl; 
    171178 
     
    197204    # we then go back into the write path (by flushing the write 
    198205    # 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; 
    201208        $self->watch_read($ar->[0]);  # restore previous readability state 
    202209        $self->watch_write(1);