ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Handle.pm
Revision: 1.84
Committed: Thu Aug 21 19:13:05 2008 UTC (15 years, 9 months ago) by root
Branch: MAIN
Changes since 1.83: +3 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 elmex 1.1 package AnyEvent::Handle;
2    
3 elmex 1.6 no warnings;
4 root 1.79 use strict qw(subs vars);
5 elmex 1.1
6 root 1.8 use AnyEvent ();
7 root 1.42 use AnyEvent::Util qw(WSAEWOULDBLOCK);
8 root 1.8 use Scalar::Util ();
9     use Carp ();
10     use Fcntl ();
11 root 1.43 use Errno qw(EAGAIN EINTR);
12 elmex 1.1
13     =head1 NAME
14    
15 root 1.22 AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent
16 elmex 1.1
17     =cut
18    
19 root 1.82 our $VERSION = 4.232;
20 elmex 1.1
21     =head1 SYNOPSIS
22    
23     use AnyEvent;
24     use AnyEvent::Handle;
25    
26     my $cv = AnyEvent->condvar;
27    
28 root 1.31 my $handle =
29 elmex 1.2 AnyEvent::Handle->new (
30     fh => \*STDIN,
31     on_eof => sub {
32     $cv->broadcast;
33     },
34     );
35    
36 root 1.31 # send some request line
37     $handle->push_write ("getinfo\015\012");
38    
39     # read the response line
40     $handle->push_read (line => sub {
41     my ($handle, $line) = @_;
42     warn "read line <$line>\n";
43     $cv->send;
44     });
45    
46     $cv->recv;
47 elmex 1.1
48     =head1 DESCRIPTION
49    
50 root 1.8 This module is a helper module to make it easier to do event-based I/O on
51 elmex 1.13 filehandles. For utility functions for doing non-blocking connects and accepts
52     on sockets see L<AnyEvent::Util>.
53 root 1.8
54 root 1.84 The L<AnyEvent::Intro> tutorial contains some well-documented
55     AnyEvent::Handle examples.
56    
57 root 1.8 In the following, when the documentation refers to of "bytes" then this
58     means characters. As sysread and syswrite are used for all I/O, their
59     treatment of characters applies to this module as well.
60 elmex 1.1
61 root 1.8 All callbacks will be invoked with the handle object as their first
62     argument.
63 elmex 1.1
64     =head1 METHODS
65    
66     =over 4
67    
68     =item B<new (%args)>
69    
70 root 1.8 The constructor supports these arguments (all as key => value pairs).
71 elmex 1.1
72     =over 4
73    
74 root 1.8 =item fh => $filehandle [MANDATORY]
75 elmex 1.1
76     The filehandle this L<AnyEvent::Handle> object will operate on.
77    
78 root 1.83 NOTE: The filehandle will be set to non-blocking mode (using
79     C<AnyEvent::Util::fh_nonblocking>) by the constructor and needs to stay in
80     that mode.
81 root 1.8
82 root 1.40 =item on_eof => $cb->($handle)
83 root 1.10
84 root 1.74 Set the callback to be called when an end-of-file condition is detected,
85 root 1.52 i.e. in the case of a socket, when the other side has closed the
86     connection cleanly.
87 root 1.8
88 root 1.82 For sockets, this just means that the other side has stopped sending data,
89     you can still try to write data, and, in fact, one can return from the eof
90     callback and continue writing data, as only the read part has been shut
91     down.
92    
93 root 1.80 While not mandatory, it is I<highly> recommended to set an eof callback,
94 root 1.16 otherwise you might end up with a closed socket while you are still
95     waiting for data.
96    
97 root 1.80 If an EOF condition has been detected but no C<on_eof> callback has been
98     set, then a fatal error will be raised with C<$!> set to <0>.
99    
100 root 1.52 =item on_error => $cb->($handle, $fatal)
101 root 1.10
102 root 1.52 This is the error callback, which is called when, well, some error
103     occured, such as not being able to resolve the hostname, failure to
104     connect or a read error.
105    
106     Some errors are fatal (which is indicated by C<$fatal> being true). On
107 root 1.82 fatal errors the handle object will be shut down and will not be usable
108     (but you are free to look at the current C< ->rbuf >). Examples of fatal
109     errors are an EOF condition with active (but unsatisifable) read watchers
110     (C<EPIPE>) or I/O errors.
111    
112     Non-fatal errors can be retried by simply returning, but it is recommended
113     to simply ignore this parameter and instead abondon the handle object
114     when this callback is invoked. Examples of non-fatal errors are timeouts
115     C<ETIMEDOUT>) or badly-formatted data (C<EBADMSG>).
116 root 1.8
117 root 1.10 On callback entrance, the value of C<$!> contains the operating system
118 root 1.43 error (or C<ENOSPC>, C<EPIPE>, C<ETIMEDOUT> or C<EBADMSG>).
119 root 1.8
120 root 1.10 While not mandatory, it is I<highly> recommended to set this callback, as
121     you will not be notified of errors otherwise. The default simply calls
122 root 1.52 C<croak>.
123 root 1.8
124 root 1.40 =item on_read => $cb->($handle)
125 root 1.8
126     This sets the default read callback, which is called when data arrives
127 root 1.61 and no read request is in the queue (unlike read queue callbacks, this
128     callback will only be called when at least one octet of data is in the
129     read buffer).
130 root 1.8
131     To access (and remove data from) the read buffer, use the C<< ->rbuf >>
132 root 1.40 method or access the C<$handle->{rbuf}> member directly.
133 root 1.8
134     When an EOF condition is detected then AnyEvent::Handle will first try to
135     feed all the remaining data to the queued callbacks and C<on_read> before
136     calling the C<on_eof> callback. If no progress can be made, then a fatal
137     error will be raised (with C<$!> set to C<EPIPE>).
138 elmex 1.1
139 root 1.40 =item on_drain => $cb->($handle)
140 elmex 1.1
141 root 1.8 This sets the callback that is called when the write buffer becomes empty
142     (or when the callback is set and the buffer is empty already).
143 elmex 1.1
144 root 1.8 To append to the write buffer, use the C<< ->push_write >> method.
145 elmex 1.2
146 root 1.69 This callback is useful when you don't want to put all of your write data
147     into the queue at once, for example, when you want to write the contents
148     of some file to the socket you might not want to read the whole file into
149     memory and push it into the queue, but instead only read more data from
150     the file when the write queue becomes empty.
151    
152 root 1.43 =item timeout => $fractional_seconds
153    
154     If non-zero, then this enables an "inactivity" timeout: whenever this many
155     seconds pass without a successful read or write on the underlying file
156     handle, the C<on_timeout> callback will be invoked (and if that one is
157 root 1.45 missing, an C<ETIMEDOUT> error will be raised).
158 root 1.43
159     Note that timeout processing is also active when you currently do not have
160     any outstanding read or write requests: If you plan to keep the connection
161     idle then you should disable the timout temporarily or ignore the timeout
162     in the C<on_timeout> callback.
163    
164     Zero (the default) disables this timeout.
165    
166     =item on_timeout => $cb->($handle)
167    
168     Called whenever the inactivity timeout passes. If you return from this
169     callback, then the timeout will be reset as if some activity had happened,
170     so this condition is not fatal in any way.
171    
172 root 1.8 =item rbuf_max => <bytes>
173 elmex 1.2
174 root 1.8 If defined, then a fatal error will be raised (with C<$!> set to C<ENOSPC>)
175     when the read buffer ever (strictly) exceeds this size. This is useful to
176     avoid denial-of-service attacks.
177 elmex 1.2
178 root 1.8 For example, a server accepting connections from untrusted sources should
179     be configured to accept only so-and-so much data that it cannot act on
180     (for example, when expecting a line, an attacker could send an unlimited
181     amount of data without a callback ever being called as long as the line
182     isn't finished).
183 elmex 1.2
184 root 1.70 =item autocork => <boolean>
185    
186     When disabled (the default), then C<push_write> will try to immediately
187     write the data to the handle if possible. This avoids having to register
188     a write watcher and wait for the next event loop iteration, but can be
189     inefficient if you write multiple small chunks (this disadvantage is
190     usually avoided by your kernel's nagle algorithm, see C<low_delay>).
191    
192     When enabled, then writes will always be queued till the next event loop
193     iteration. This is efficient when you do many small writes per iteration,
194     but less efficient when you do a single write only.
195    
196     =item no_delay => <boolean>
197    
198     When doing small writes on sockets, your operating system kernel might
199     wait a bit for more data before actually sending it out. This is called
200     the Nagle algorithm, and usually it is beneficial.
201    
202     In some situations you want as low a delay as possible, which cna be
203     accomplishd by setting this option to true.
204    
205     The default is your opertaing system's default behaviour, this option
206     explicitly enables or disables it, if possible.
207    
208 root 1.8 =item read_size => <bytes>
209 elmex 1.2
210 root 1.8 The default read block size (the amount of bytes this module will try to read
211 root 1.46 during each (loop iteration). Default: C<8192>.
212 root 1.8
213     =item low_water_mark => <bytes>
214    
215     Sets the amount of bytes (default: C<0>) that make up an "empty" write
216     buffer: If the write reaches this size or gets even samller it is
217     considered empty.
218 elmex 1.2
219 root 1.62 =item linger => <seconds>
220    
221     If non-zero (default: C<3600>), then the destructor of the
222     AnyEvent::Handle object will check wether there is still outstanding write
223     data and will install a watcher that will write out this data. No errors
224     will be reported (this mostly matches how the operating system treats
225     outstanding data at socket close time).
226    
227     This will not work for partial TLS data that could not yet been
228     encoded. This data will be lost.
229    
230 root 1.19 =item tls => "accept" | "connect" | Net::SSLeay::SSL object
231    
232     When this parameter is given, it enables TLS (SSL) mode, that means it
233     will start making tls handshake and will transparently encrypt/decrypt
234     data.
235    
236 root 1.26 TLS mode requires Net::SSLeay to be installed (it will be loaded
237     automatically when you try to create a TLS handle).
238    
239 root 1.19 For the TLS server side, use C<accept>, and for the TLS client side of a
240     connection, use C<connect> mode.
241    
242     You can also provide your own TLS connection object, but you have
243     to make sure that you call either C<Net::SSLeay::set_connect_state>
244     or C<Net::SSLeay::set_accept_state> on it before you pass it to
245     AnyEvent::Handle.
246    
247 root 1.75 See the C<starttls> method if you need to start TLS negotiation later.
248 root 1.26
249 root 1.19 =item tls_ctx => $ssl_ctx
250    
251     Use the given Net::SSLeay::CTX object to create the new TLS connection
252     (unless a connection object was specified directly). If this parameter is
253     missing, then AnyEvent::Handle will use C<AnyEvent::Handle::TLS_CTX>.
254    
255 root 1.40 =item json => JSON or JSON::XS object
256    
257     This is the json coder object used by the C<json> read and write types.
258    
259 root 1.41 If you don't supply it, then AnyEvent::Handle will create and use a
260     suitable one, which will write and expect UTF-8 encoded JSON texts.
261 root 1.40
262     Note that you are responsible to depend on the JSON module if you want to
263     use this functionality, as AnyEvent does not have a dependency itself.
264    
265 root 1.38 =item filter_r => $cb
266    
267     =item filter_w => $cb
268    
269     These exist, but are undocumented at this time.
270    
271 elmex 1.1 =back
272    
273     =cut
274    
275     sub new {
276 root 1.8 my $class = shift;
277    
278     my $self = bless { @_ }, $class;
279    
280     $self->{fh} or Carp::croak "mandatory argument fh is missing";
281    
282     AnyEvent::Util::fh_nonblocking $self->{fh}, 1;
283 elmex 1.1
284 root 1.19 if ($self->{tls}) {
285     require Net::SSLeay;
286     $self->starttls (delete $self->{tls}, delete $self->{tls_ctx});
287     }
288    
289 root 1.44 $self->{_activity} = AnyEvent->now;
290 root 1.43 $self->_timeout;
291 elmex 1.1
292 root 1.70 $self->on_drain (delete $self->{on_drain}) if exists $self->{on_drain};
293     $self->no_delay (delete $self->{no_delay}) if exists $self->{no_delay};
294 root 1.10
295 root 1.66 $self->start_read
296 root 1.67 if $self->{on_read};
297 root 1.66
298 root 1.8 $self
299     }
300 elmex 1.2
301 root 1.8 sub _shutdown {
302     my ($self) = @_;
303 elmex 1.2
304 root 1.46 delete $self->{_tw};
305 root 1.38 delete $self->{_rw};
306     delete $self->{_ww};
307 root 1.8 delete $self->{fh};
308 root 1.52
309     $self->stoptls;
310 root 1.82
311     delete $self->{on_read};
312     delete $self->{_queue};
313 root 1.8 }
314    
315 root 1.52 sub _error {
316     my ($self, $errno, $fatal) = @_;
317 root 1.8
318 root 1.52 $self->_shutdown
319     if $fatal;
320 elmex 1.1
321 root 1.52 $! = $errno;
322 root 1.37
323 root 1.52 if ($self->{on_error}) {
324     $self->{on_error}($self, $fatal);
325     } else {
326     Carp::croak "AnyEvent::Handle uncaught error: $!";
327     }
328 elmex 1.1 }
329    
330 root 1.8 =item $fh = $handle->fh
331 elmex 1.1
332 root 1.22 This method returns the file handle of the L<AnyEvent::Handle> object.
333 elmex 1.1
334     =cut
335    
336 root 1.38 sub fh { $_[0]{fh} }
337 elmex 1.1
338 root 1.8 =item $handle->on_error ($cb)
339 elmex 1.1
340 root 1.8 Replace the current C<on_error> callback (see the C<on_error> constructor argument).
341 elmex 1.1
342 root 1.8 =cut
343    
344     sub on_error {
345     $_[0]{on_error} = $_[1];
346     }
347    
348     =item $handle->on_eof ($cb)
349    
350     Replace the current C<on_eof> callback (see the C<on_eof> constructor argument).
351 elmex 1.1
352     =cut
353    
354 root 1.8 sub on_eof {
355     $_[0]{on_eof} = $_[1];
356     }
357    
358 root 1.43 =item $handle->on_timeout ($cb)
359    
360     Replace the current C<on_timeout> callback, or disables the callback
361     (but not the timeout) if C<$cb> = C<undef>. See C<timeout> constructor
362     argument.
363    
364     =cut
365    
366     sub on_timeout {
367     $_[0]{on_timeout} = $_[1];
368     }
369    
370 root 1.70 =item $handle->autocork ($boolean)
371    
372     Enables or disables the current autocork behaviour (see C<autocork>
373     constructor argument).
374    
375     =cut
376    
377     =item $handle->no_delay ($boolean)
378    
379     Enables or disables the C<no_delay> setting (see constructor argument of
380     the same name for details).
381    
382     =cut
383    
384     sub no_delay {
385     $_[0]{no_delay} = $_[1];
386    
387     eval {
388     local $SIG{__DIE__};
389     setsockopt $_[0]{fh}, &Socket::IPPROTO_TCP, &Socket::TCP_NODELAY, int $_[1];
390     };
391     }
392    
393 root 1.43 #############################################################################
394    
395     =item $handle->timeout ($seconds)
396    
397     Configures (or disables) the inactivity timeout.
398    
399     =cut
400    
401     sub timeout {
402     my ($self, $timeout) = @_;
403    
404     $self->{timeout} = $timeout;
405     $self->_timeout;
406     }
407    
408     # reset the timeout watcher, as neccessary
409     # also check for time-outs
410     sub _timeout {
411     my ($self) = @_;
412    
413     if ($self->{timeout}) {
414 root 1.44 my $NOW = AnyEvent->now;
415 root 1.43
416     # when would the timeout trigger?
417     my $after = $self->{_activity} + $self->{timeout} - $NOW;
418    
419     # now or in the past already?
420     if ($after <= 0) {
421     $self->{_activity} = $NOW;
422    
423     if ($self->{on_timeout}) {
424 root 1.48 $self->{on_timeout}($self);
425 root 1.43 } else {
426 root 1.52 $self->_error (&Errno::ETIMEDOUT);
427 root 1.43 }
428    
429 root 1.56 # callback could have changed timeout value, optimise
430 root 1.43 return unless $self->{timeout};
431    
432     # calculate new after
433     $after = $self->{timeout};
434     }
435    
436     Scalar::Util::weaken $self;
437 root 1.56 return unless $self; # ->error could have destroyed $self
438 root 1.43
439     $self->{_tw} ||= AnyEvent->timer (after => $after, cb => sub {
440     delete $self->{_tw};
441     $self->_timeout;
442     });
443     } else {
444     delete $self->{_tw};
445     }
446     }
447    
448 root 1.9 #############################################################################
449    
450     =back
451    
452     =head2 WRITE QUEUE
453    
454     AnyEvent::Handle manages two queues per handle, one for writing and one
455     for reading.
456    
457     The write queue is very simple: you can add data to its end, and
458     AnyEvent::Handle will automatically try to get rid of it for you.
459    
460 elmex 1.20 When data could be written and the write buffer is shorter then the low
461 root 1.9 water mark, the C<on_drain> callback will be invoked.
462    
463     =over 4
464    
465 root 1.8 =item $handle->on_drain ($cb)
466    
467     Sets the C<on_drain> callback or clears it (see the description of
468     C<on_drain> in the constructor).
469    
470     =cut
471    
472     sub on_drain {
473 elmex 1.1 my ($self, $cb) = @_;
474    
475 root 1.8 $self->{on_drain} = $cb;
476    
477     $cb->($self)
478     if $cb && $self->{low_water_mark} >= length $self->{wbuf};
479     }
480    
481     =item $handle->push_write ($data)
482    
483     Queues the given scalar to be written. You can push as much data as you
484     want (only limited by the available memory), as C<AnyEvent::Handle>
485     buffers it independently of the kernel.
486    
487     =cut
488    
489 root 1.17 sub _drain_wbuf {
490     my ($self) = @_;
491 root 1.8
492 root 1.38 if (!$self->{_ww} && length $self->{wbuf}) {
493 root 1.35
494 root 1.8 Scalar::Util::weaken $self;
495 root 1.35
496 root 1.8 my $cb = sub {
497     my $len = syswrite $self->{fh}, $self->{wbuf};
498    
499 root 1.29 if ($len >= 0) {
500 root 1.8 substr $self->{wbuf}, 0, $len, "";
501    
502 root 1.44 $self->{_activity} = AnyEvent->now;
503 root 1.43
504 root 1.8 $self->{on_drain}($self)
505     if $self->{low_water_mark} >= length $self->{wbuf}
506     && $self->{on_drain};
507    
508 root 1.38 delete $self->{_ww} unless length $self->{wbuf};
509 root 1.42 } elsif ($! != EAGAIN && $! != EINTR && $! != WSAEWOULDBLOCK) {
510 root 1.52 $self->_error ($!, 1);
511 elmex 1.1 }
512 root 1.8 };
513    
514 root 1.35 # try to write data immediately
515 root 1.70 $cb->() unless $self->{autocork};
516 root 1.8
517 root 1.35 # if still data left in wbuf, we need to poll
518 root 1.38 $self->{_ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $cb)
519 root 1.35 if length $self->{wbuf};
520 root 1.8 };
521     }
522    
523 root 1.30 our %WH;
524    
525     sub register_write_type($$) {
526     $WH{$_[0]} = $_[1];
527     }
528    
529 root 1.17 sub push_write {
530     my $self = shift;
531    
532 root 1.29 if (@_ > 1) {
533     my $type = shift;
534    
535     @_ = ($WH{$type} or Carp::croak "unsupported type passed to AnyEvent::Handle::push_write")
536     ->($self, @_);
537     }
538    
539 root 1.17 if ($self->{filter_w}) {
540 root 1.48 $self->{filter_w}($self, \$_[0]);
541 root 1.17 } else {
542     $self->{wbuf} .= $_[0];
543     $self->_drain_wbuf;
544     }
545     }
546    
547 root 1.29 =item $handle->push_write (type => @args)
548    
549     Instead of formatting your data yourself, you can also let this module do
550     the job by specifying a type and type-specific arguments.
551    
552 root 1.30 Predefined types are (if you have ideas for additional types, feel free to
553     drop by and tell us):
554 root 1.29
555     =over 4
556    
557     =item netstring => $string
558    
559     Formats the given value as netstring
560     (http://cr.yp.to/proto/netstrings.txt, this is not a recommendation to use them).
561    
562     =cut
563    
564     register_write_type netstring => sub {
565     my ($self, $string) = @_;
566    
567     sprintf "%d:%s,", (length $string), $string
568     };
569    
570 root 1.61 =item packstring => $format, $data
571    
572     An octet string prefixed with an encoded length. The encoding C<$format>
573     uses the same format as a Perl C<pack> format, but must specify a single
574     integer only (only one of C<cCsSlLqQiInNvVjJw> is allowed, plus an
575     optional C<!>, C<< < >> or C<< > >> modifier).
576    
577     =cut
578    
579     register_write_type packstring => sub {
580     my ($self, $format, $string) = @_;
581    
582 root 1.65 pack "$format/a*", $string
583 root 1.61 };
584    
585 root 1.39 =item json => $array_or_hashref
586    
587 root 1.40 Encodes the given hash or array reference into a JSON object. Unless you
588     provide your own JSON object, this means it will be encoded to JSON text
589     in UTF-8.
590    
591     JSON objects (and arrays) are self-delimiting, so you can write JSON at
592     one end of a handle and read them at the other end without using any
593     additional framing.
594    
595 root 1.41 The generated JSON text is guaranteed not to contain any newlines: While
596     this module doesn't need delimiters after or between JSON texts to be
597     able to read them, many other languages depend on that.
598    
599     A simple RPC protocol that interoperates easily with others is to send
600     JSON arrays (or objects, although arrays are usually the better choice as
601     they mimic how function argument passing works) and a newline after each
602     JSON text:
603    
604     $handle->push_write (json => ["method", "arg1", "arg2"]); # whatever
605     $handle->push_write ("\012");
606    
607     An AnyEvent::Handle receiver would simply use the C<json> read type and
608     rely on the fact that the newline will be skipped as leading whitespace:
609    
610     $handle->push_read (json => sub { my $array = $_[1]; ... });
611    
612     Other languages could read single lines terminated by a newline and pass
613     this line into their JSON decoder of choice.
614    
615 root 1.40 =cut
616    
617     register_write_type json => sub {
618     my ($self, $ref) = @_;
619    
620     require JSON;
621    
622     $self->{json} ? $self->{json}->encode ($ref)
623     : JSON::encode_json ($ref)
624     };
625    
626 root 1.63 =item storable => $reference
627    
628     Freezes the given reference using L<Storable> and writes it to the
629     handle. Uses the C<nfreeze> format.
630    
631     =cut
632    
633     register_write_type storable => sub {
634     my ($self, $ref) = @_;
635    
636     require Storable;
637    
638 root 1.65 pack "w/a*", Storable::nfreeze ($ref)
639 root 1.63 };
640    
641 root 1.53 =back
642    
643 root 1.40 =item AnyEvent::Handle::register_write_type type => $coderef->($handle, @args)
644 root 1.30
645     This function (not method) lets you add your own types to C<push_write>.
646     Whenever the given C<type> is used, C<push_write> will invoke the code
647     reference with the handle object and the remaining arguments.
648 root 1.29
649 root 1.30 The code reference is supposed to return a single octet string that will
650     be appended to the write buffer.
651 root 1.29
652 root 1.30 Note that this is a function, and all types registered this way will be
653     global, so try to use unique names.
654 root 1.29
655 root 1.30 =cut
656 root 1.29
657 root 1.8 #############################################################################
658    
659 root 1.9 =back
660    
661     =head2 READ QUEUE
662    
663     AnyEvent::Handle manages two queues per handle, one for writing and one
664     for reading.
665    
666     The read queue is more complex than the write queue. It can be used in two
667     ways, the "simple" way, using only C<on_read> and the "complex" way, using
668     a queue.
669    
670     In the simple case, you just install an C<on_read> callback and whenever
671     new data arrives, it will be called. You can then remove some data (if
672 root 1.69 enough is there) from the read buffer (C<< $handle->rbuf >>). Or you cna
673     leave the data there if you want to accumulate more (e.g. when only a
674     partial message has been received so far).
675 root 1.9
676     In the more complex case, you want to queue multiple callbacks. In this
677     case, AnyEvent::Handle will call the first queued callback each time new
678 root 1.61 data arrives (also the first time it is queued) and removes it when it has
679     done its job (see C<push_read>, below).
680 root 1.9
681     This way you can, for example, push three line-reads, followed by reading
682     a chunk of data, and AnyEvent::Handle will execute them in order.
683    
684     Example 1: EPP protocol parser. EPP sends 4 byte length info, followed by
685     the specified number of bytes which give an XML datagram.
686    
687     # in the default state, expect some header bytes
688     $handle->on_read (sub {
689     # some data is here, now queue the length-header-read (4 octets)
690 root 1.52 shift->unshift_read (chunk => 4, sub {
691 root 1.9 # header arrived, decode
692     my $len = unpack "N", $_[1];
693    
694     # now read the payload
695 root 1.52 shift->unshift_read (chunk => $len, sub {
696 root 1.9 my $xml = $_[1];
697     # handle xml
698     });
699     });
700     });
701    
702 root 1.69 Example 2: Implement a client for a protocol that replies either with "OK"
703     and another line or "ERROR" for the first request that is sent, and 64
704     bytes for the second request. Due to the availability of a queue, we can
705     just pipeline sending both requests and manipulate the queue as necessary
706     in the callbacks.
707    
708     When the first callback is called and sees an "OK" response, it will
709     C<unshift> another line-read. This line-read will be queued I<before> the
710     64-byte chunk callback.
711 root 1.9
712 root 1.69 # request one, returns either "OK + extra line" or "ERROR"
713 root 1.9 $handle->push_write ("request 1\015\012");
714    
715     # we expect "ERROR" or "OK" as response, so push a line read
716 root 1.52 $handle->push_read (line => sub {
717 root 1.9 # if we got an "OK", we have to _prepend_ another line,
718     # so it will be read before the second request reads its 64 bytes
719     # which are already in the queue when this callback is called
720     # we don't do this in case we got an error
721     if ($_[1] eq "OK") {
722 root 1.52 $_[0]->unshift_read (line => sub {
723 root 1.9 my $response = $_[1];
724     ...
725     });
726     }
727     });
728    
729 root 1.69 # request two, simply returns 64 octets
730 root 1.9 $handle->push_write ("request 2\015\012");
731    
732     # simply read 64 bytes, always
733 root 1.52 $handle->push_read (chunk => 64, sub {
734 root 1.9 my $response = $_[1];
735     ...
736     });
737    
738     =over 4
739    
740 root 1.10 =cut
741    
742 root 1.8 sub _drain_rbuf {
743     my ($self) = @_;
744 elmex 1.1
745 root 1.59 local $self->{_in_drain} = 1;
746    
747 root 1.17 if (
748     defined $self->{rbuf_max}
749     && $self->{rbuf_max} < length $self->{rbuf}
750     ) {
751 root 1.82 $self->_error (&Errno::ENOSPC, 1), return;
752 root 1.17 }
753    
754 root 1.59 while () {
755     my $len = length $self->{rbuf};
756 elmex 1.1
757 root 1.38 if (my $cb = shift @{ $self->{_queue} }) {
758 root 1.29 unless ($cb->($self)) {
759 root 1.38 if ($self->{_eof}) {
760 root 1.10 # no progress can be made (not enough data and no data forthcoming)
761 root 1.82 $self->_error (&Errno::EPIPE, 1), return;
762 root 1.10 }
763    
764 root 1.38 unshift @{ $self->{_queue} }, $cb;
765 root 1.55 last;
766 root 1.8 }
767     } elsif ($self->{on_read}) {
768 root 1.61 last unless $len;
769    
770 root 1.8 $self->{on_read}($self);
771    
772     if (
773 root 1.55 $len == length $self->{rbuf} # if no data has been consumed
774     && !@{ $self->{_queue} } # and the queue is still empty
775     && $self->{on_read} # but we still have on_read
776 root 1.8 ) {
777 root 1.55 # no further data will arrive
778     # so no progress can be made
779 root 1.82 $self->_error (&Errno::EPIPE, 1), return
780 root 1.55 if $self->{_eof};
781    
782     last; # more data might arrive
783 elmex 1.1 }
784 root 1.8 } else {
785     # read side becomes idle
786 root 1.38 delete $self->{_rw};
787 root 1.55 last;
788 root 1.8 }
789     }
790    
791 root 1.80 if ($self->{_eof}) {
792     if ($self->{on_eof}) {
793     $self->{on_eof}($self)
794     } else {
795     $self->_error (0, 1);
796     }
797     }
798 root 1.55
799     # may need to restart read watcher
800     unless ($self->{_rw}) {
801     $self->start_read
802     if $self->{on_read} || @{ $self->{_queue} };
803     }
804 elmex 1.1 }
805    
806 root 1.8 =item $handle->on_read ($cb)
807 elmex 1.1
808 root 1.8 This replaces the currently set C<on_read> callback, or clears it (when
809     the new callback is C<undef>). See the description of C<on_read> in the
810     constructor.
811 elmex 1.1
812 root 1.8 =cut
813    
814     sub on_read {
815     my ($self, $cb) = @_;
816 elmex 1.1
817 root 1.8 $self->{on_read} = $cb;
818 root 1.59 $self->_drain_rbuf if $cb && !$self->{_in_drain};
819 elmex 1.1 }
820    
821 root 1.8 =item $handle->rbuf
822    
823     Returns the read buffer (as a modifiable lvalue).
824 elmex 1.1
825 root 1.8 You can access the read buffer directly as the C<< ->{rbuf} >> member, if
826     you want.
827 elmex 1.1
828 root 1.8 NOTE: The read buffer should only be used or modified if the C<on_read>,
829     C<push_read> or C<unshift_read> methods are used. The other read methods
830     automatically manage the read buffer.
831 elmex 1.1
832     =cut
833    
834 elmex 1.2 sub rbuf : lvalue {
835 root 1.8 $_[0]{rbuf}
836 elmex 1.2 }
837 elmex 1.1
838 root 1.8 =item $handle->push_read ($cb)
839    
840     =item $handle->unshift_read ($cb)
841    
842     Append the given callback to the end of the queue (C<push_read>) or
843     prepend it (C<unshift_read>).
844    
845     The callback is called each time some additional read data arrives.
846 elmex 1.1
847 elmex 1.20 It must check whether enough data is in the read buffer already.
848 elmex 1.1
849 root 1.8 If not enough data is available, it must return the empty list or a false
850     value, in which case it will be called repeatedly until enough data is
851     available (or an error condition is detected).
852    
853     If enough data was available, then the callback must remove all data it is
854     interested in (which can be none at all) and return a true value. After returning
855     true, it will be removed from the queue.
856 elmex 1.1
857     =cut
858    
859 root 1.30 our %RH;
860    
861     sub register_read_type($$) {
862     $RH{$_[0]} = $_[1];
863     }
864    
865 root 1.8 sub push_read {
866 root 1.28 my $self = shift;
867     my $cb = pop;
868    
869     if (@_) {
870     my $type = shift;
871    
872     $cb = ($RH{$type} or Carp::croak "unsupported type passed to AnyEvent::Handle::push_read")
873     ->($self, $cb, @_);
874     }
875 elmex 1.1
876 root 1.38 push @{ $self->{_queue} }, $cb;
877 root 1.59 $self->_drain_rbuf unless $self->{_in_drain};
878 elmex 1.1 }
879    
880 root 1.8 sub unshift_read {
881 root 1.28 my $self = shift;
882     my $cb = pop;
883    
884     if (@_) {
885     my $type = shift;
886    
887     $cb = ($RH{$type} or Carp::croak "unsupported type passed to AnyEvent::Handle::unshift_read")
888     ->($self, $cb, @_);
889     }
890    
891 root 1.8
892 root 1.38 unshift @{ $self->{_queue} }, $cb;
893 root 1.59 $self->_drain_rbuf unless $self->{_in_drain};
894 root 1.8 }
895 elmex 1.1
896 root 1.28 =item $handle->push_read (type => @args, $cb)
897 elmex 1.1
898 root 1.28 =item $handle->unshift_read (type => @args, $cb)
899 elmex 1.1
900 root 1.28 Instead of providing a callback that parses the data itself you can chose
901     between a number of predefined parsing formats, for chunks of data, lines
902     etc.
903 elmex 1.1
904 root 1.30 Predefined types are (if you have ideas for additional types, feel free to
905     drop by and tell us):
906 root 1.28
907     =over 4
908    
909 root 1.40 =item chunk => $octets, $cb->($handle, $data)
910 root 1.28
911     Invoke the callback only once C<$octets> bytes have been read. Pass the
912     data read to the callback. The callback will never be called with less
913     data.
914    
915     Example: read 2 bytes.
916    
917     $handle->push_read (chunk => 2, sub {
918     warn "yay ", unpack "H*", $_[1];
919     });
920 elmex 1.1
921     =cut
922    
923 root 1.28 register_read_type chunk => sub {
924     my ($self, $cb, $len) = @_;
925 elmex 1.1
926 root 1.8 sub {
927     $len <= length $_[0]{rbuf} or return;
928 elmex 1.12 $cb->($_[0], substr $_[0]{rbuf}, 0, $len, "");
929 root 1.8 1
930     }
931 root 1.28 };
932 root 1.8
933 root 1.40 =item line => [$eol, ]$cb->($handle, $line, $eol)
934 elmex 1.1
935 root 1.8 The callback will be called only once a full line (including the end of
936     line marker, C<$eol>) has been read. This line (excluding the end of line
937     marker) will be passed to the callback as second argument (C<$line>), and
938     the end of line marker as the third argument (C<$eol>).
939 elmex 1.1
940 root 1.8 The end of line marker, C<$eol>, can be either a string, in which case it
941     will be interpreted as a fixed record end marker, or it can be a regex
942     object (e.g. created by C<qr>), in which case it is interpreted as a
943     regular expression.
944 elmex 1.1
945 root 1.8 The end of line marker argument C<$eol> is optional, if it is missing (NOT
946     undef), then C<qr|\015?\012|> is used (which is good for most internet
947     protocols).
948 elmex 1.1
949 root 1.8 Partial lines at the end of the stream will never be returned, as they are
950     not marked by the end of line marker.
951 elmex 1.1
952 root 1.8 =cut
953 elmex 1.1
954 root 1.28 register_read_type line => sub {
955     my ($self, $cb, $eol) = @_;
956 elmex 1.1
957 root 1.76 if (@_ < 3) {
958     # this is more than twice as fast as the generic code below
959     sub {
960     $_[0]{rbuf} =~ s/^([^\015\012]*)(\015?\012)// or return;
961 elmex 1.1
962 root 1.76 $cb->($_[0], $1, $2);
963     1
964     }
965     } else {
966     $eol = quotemeta $eol unless ref $eol;
967     $eol = qr|^(.*?)($eol)|s;
968    
969     sub {
970     $_[0]{rbuf} =~ s/$eol// or return;
971 elmex 1.1
972 root 1.76 $cb->($_[0], $1, $2);
973     1
974     }
975 root 1.8 }
976 root 1.28 };
977 elmex 1.1
978 root 1.40 =item regex => $accept[, $reject[, $skip], $cb->($handle, $data)
979 root 1.36
980     Makes a regex match against the regex object C<$accept> and returns
981     everything up to and including the match.
982    
983     Example: read a single line terminated by '\n'.
984    
985     $handle->push_read (regex => qr<\n>, sub { ... });
986    
987     If C<$reject> is given and not undef, then it determines when the data is
988     to be rejected: it is matched against the data when the C<$accept> regex
989     does not match and generates an C<EBADMSG> error when it matches. This is
990     useful to quickly reject wrong data (to avoid waiting for a timeout or a
991     receive buffer overflow).
992    
993     Example: expect a single decimal number followed by whitespace, reject
994     anything else (not the use of an anchor).
995    
996     $handle->push_read (regex => qr<^[0-9]+\s>, qr<[^0-9]>, sub { ... });
997    
998     If C<$skip> is given and not C<undef>, then it will be matched against
999     the receive buffer when neither C<$accept> nor C<$reject> match,
1000     and everything preceding and including the match will be accepted
1001     unconditionally. This is useful to skip large amounts of data that you
1002     know cannot be matched, so that the C<$accept> or C<$reject> regex do not
1003     have to start matching from the beginning. This is purely an optimisation
1004     and is usually worth only when you expect more than a few kilobytes.
1005    
1006     Example: expect a http header, which ends at C<\015\012\015\012>. Since we
1007     expect the header to be very large (it isn't in practise, but...), we use
1008     a skip regex to skip initial portions. The skip regex is tricky in that
1009     it only accepts something not ending in either \015 or \012, as these are
1010     required for the accept regex.
1011    
1012     $handle->push_read (regex =>
1013     qr<\015\012\015\012>,
1014     undef, # no reject
1015     qr<^.*[^\015\012]>,
1016     sub { ... });
1017    
1018     =cut
1019    
1020     register_read_type regex => sub {
1021     my ($self, $cb, $accept, $reject, $skip) = @_;
1022    
1023     my $data;
1024     my $rbuf = \$self->{rbuf};
1025    
1026     sub {
1027     # accept
1028     if ($$rbuf =~ $accept) {
1029     $data .= substr $$rbuf, 0, $+[0], "";
1030     $cb->($self, $data);
1031     return 1;
1032     }
1033    
1034     # reject
1035     if ($reject && $$rbuf =~ $reject) {
1036 root 1.52 $self->_error (&Errno::EBADMSG);
1037 root 1.36 }
1038    
1039     # skip
1040     if ($skip && $$rbuf =~ $skip) {
1041     $data .= substr $$rbuf, 0, $+[0], "";
1042     }
1043    
1044     ()
1045     }
1046     };
1047    
1048 root 1.61 =item netstring => $cb->($handle, $string)
1049    
1050     A netstring (http://cr.yp.to/proto/netstrings.txt, this is not an endorsement).
1051    
1052     Throws an error with C<$!> set to EBADMSG on format violations.
1053    
1054     =cut
1055    
1056     register_read_type netstring => sub {
1057     my ($self, $cb) = @_;
1058    
1059     sub {
1060     unless ($_[0]{rbuf} =~ s/^(0|[1-9][0-9]*)://) {
1061     if ($_[0]{rbuf} =~ /[^0-9]/) {
1062     $self->_error (&Errno::EBADMSG);
1063     }
1064     return;
1065     }
1066    
1067     my $len = $1;
1068    
1069     $self->unshift_read (chunk => $len, sub {
1070     my $string = $_[1];
1071     $_[0]->unshift_read (chunk => 1, sub {
1072     if ($_[1] eq ",") {
1073     $cb->($_[0], $string);
1074     } else {
1075     $self->_error (&Errno::EBADMSG);
1076     }
1077     });
1078     });
1079    
1080     1
1081     }
1082     };
1083    
1084     =item packstring => $format, $cb->($handle, $string)
1085    
1086     An octet string prefixed with an encoded length. The encoding C<$format>
1087     uses the same format as a Perl C<pack> format, but must specify a single
1088     integer only (only one of C<cCsSlLqQiInNvVjJw> is allowed, plus an
1089     optional C<!>, C<< < >> or C<< > >> modifier).
1090    
1091     DNS over TCP uses a prefix of C<n>, EPP uses a prefix of C<N>.
1092    
1093     Example: read a block of data prefixed by its length in BER-encoded
1094     format (very efficient).
1095    
1096     $handle->push_read (packstring => "w", sub {
1097     my ($handle, $data) = @_;
1098     });
1099    
1100     =cut
1101    
1102     register_read_type packstring => sub {
1103     my ($self, $cb, $format) = @_;
1104    
1105     sub {
1106     # when we can use 5.10 we can use ".", but for 5.8 we use the re-pack method
1107 root 1.76 defined (my $len = eval { unpack $format, $_[0]{rbuf} })
1108 root 1.61 or return;
1109    
1110 root 1.77 $format = length pack $format, $len;
1111 root 1.61
1112 root 1.77 # bypass unshift if we already have the remaining chunk
1113     if ($format + $len <= length $_[0]{rbuf}) {
1114     my $data = substr $_[0]{rbuf}, $format, $len;
1115     substr $_[0]{rbuf}, 0, $format + $len, "";
1116     $cb->($_[0], $data);
1117     } else {
1118     # remove prefix
1119     substr $_[0]{rbuf}, 0, $format, "";
1120    
1121     # read remaining chunk
1122     $_[0]->unshift_read (chunk => $len, $cb);
1123     }
1124 root 1.61
1125     1
1126     }
1127     };
1128    
1129 root 1.40 =item json => $cb->($handle, $hash_or_arrayref)
1130    
1131     Reads a JSON object or array, decodes it and passes it to the callback.
1132    
1133     If a C<json> object was passed to the constructor, then that will be used
1134     for the final decode, otherwise it will create a JSON coder expecting UTF-8.
1135    
1136     This read type uses the incremental parser available with JSON version
1137     2.09 (and JSON::XS version 2.2) and above. You have to provide a
1138     dependency on your own: this module will load the JSON module, but
1139     AnyEvent does not depend on it itself.
1140    
1141     Since JSON texts are fully self-delimiting, the C<json> read and write
1142 root 1.41 types are an ideal simple RPC protocol: just exchange JSON datagrams. See
1143     the C<json> write type description, above, for an actual example.
1144 root 1.40
1145     =cut
1146    
1147     register_read_type json => sub {
1148 root 1.63 my ($self, $cb) = @_;
1149 root 1.40
1150     require JSON;
1151    
1152     my $data;
1153     my $rbuf = \$self->{rbuf};
1154    
1155 root 1.41 my $json = $self->{json} ||= JSON->new->utf8;
1156 root 1.40
1157     sub {
1158     my $ref = $json->incr_parse ($self->{rbuf});
1159    
1160     if ($ref) {
1161     $self->{rbuf} = $json->incr_text;
1162     $json->incr_text = "";
1163     $cb->($self, $ref);
1164    
1165     1
1166     } else {
1167     $self->{rbuf} = "";
1168     ()
1169     }
1170     }
1171     };
1172    
1173 root 1.63 =item storable => $cb->($handle, $ref)
1174    
1175     Deserialises a L<Storable> frozen representation as written by the
1176     C<storable> write type (BER-encoded length prefix followed by nfreeze'd
1177     data).
1178    
1179     Raises C<EBADMSG> error if the data could not be decoded.
1180    
1181     =cut
1182    
1183     register_read_type storable => sub {
1184     my ($self, $cb) = @_;
1185    
1186     require Storable;
1187    
1188     sub {
1189     # when we can use 5.10 we can use ".", but for 5.8 we use the re-pack method
1190 root 1.76 defined (my $len = eval { unpack "w", $_[0]{rbuf} })
1191 root 1.63 or return;
1192    
1193 root 1.77 my $format = length pack "w", $len;
1194 root 1.63
1195 root 1.77 # bypass unshift if we already have the remaining chunk
1196     if ($format + $len <= length $_[0]{rbuf}) {
1197     my $data = substr $_[0]{rbuf}, $format, $len;
1198     substr $_[0]{rbuf}, 0, $format + $len, "";
1199     $cb->($_[0], Storable::thaw ($data));
1200     } else {
1201     # remove prefix
1202     substr $_[0]{rbuf}, 0, $format, "";
1203    
1204     # read remaining chunk
1205     $_[0]->unshift_read (chunk => $len, sub {
1206     if (my $ref = eval { Storable::thaw ($_[1]) }) {
1207     $cb->($_[0], $ref);
1208     } else {
1209     $self->_error (&Errno::EBADMSG);
1210     }
1211     });
1212     }
1213    
1214     1
1215 root 1.63 }
1216     };
1217    
1218 root 1.28 =back
1219    
1220 root 1.40 =item AnyEvent::Handle::register_read_type type => $coderef->($handle, $cb, @args)
1221 root 1.30
1222     This function (not method) lets you add your own types to C<push_read>.
1223    
1224     Whenever the given C<type> is used, C<push_read> will invoke the code
1225     reference with the handle object, the callback and the remaining
1226     arguments.
1227    
1228     The code reference is supposed to return a callback (usually a closure)
1229     that works as a plain read callback (see C<< ->push_read ($cb) >>).
1230    
1231     It should invoke the passed callback when it is done reading (remember to
1232 root 1.40 pass C<$handle> as first argument as all other callbacks do that).
1233 root 1.30
1234     Note that this is a function, and all types registered this way will be
1235     global, so try to use unique names.
1236    
1237     For examples, see the source of this module (F<perldoc -m AnyEvent::Handle>,
1238     search for C<register_read_type>)).
1239    
1240 root 1.10 =item $handle->stop_read
1241    
1242     =item $handle->start_read
1243    
1244 root 1.18 In rare cases you actually do not want to read anything from the
1245 root 1.58 socket. In this case you can call C<stop_read>. Neither C<on_read> nor
1246 root 1.22 any queued callbacks will be executed then. To start reading again, call
1247 root 1.10 C<start_read>.
1248    
1249 root 1.56 Note that AnyEvent::Handle will automatically C<start_read> for you when
1250     you change the C<on_read> callback or push/unshift a read callback, and it
1251     will automatically C<stop_read> for you when neither C<on_read> is set nor
1252     there are any read requests in the queue.
1253    
1254 root 1.10 =cut
1255    
1256     sub stop_read {
1257     my ($self) = @_;
1258 elmex 1.1
1259 root 1.38 delete $self->{_rw};
1260 root 1.8 }
1261 elmex 1.1
1262 root 1.10 sub start_read {
1263     my ($self) = @_;
1264    
1265 root 1.38 unless ($self->{_rw} || $self->{_eof}) {
1266 root 1.10 Scalar::Util::weaken $self;
1267    
1268 root 1.38 $self->{_rw} = AnyEvent->io (fh => $self->{fh}, poll => "r", cb => sub {
1269 root 1.17 my $rbuf = $self->{filter_r} ? \my $buf : \$self->{rbuf};
1270     my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf;
1271 root 1.10
1272     if ($len > 0) {
1273 root 1.44 $self->{_activity} = AnyEvent->now;
1274 root 1.43
1275 root 1.17 $self->{filter_r}
1276 root 1.48 ? $self->{filter_r}($self, $rbuf)
1277 root 1.59 : $self->{_in_drain} || $self->_drain_rbuf;
1278 root 1.10
1279     } elsif (defined $len) {
1280 root 1.38 delete $self->{_rw};
1281     $self->{_eof} = 1;
1282 root 1.59 $self->_drain_rbuf unless $self->{_in_drain};
1283 root 1.10
1284 root 1.42 } elsif ($! != EAGAIN && $! != EINTR && $! != WSAEWOULDBLOCK) {
1285 root 1.52 return $self->_error ($!, 1);
1286 root 1.10 }
1287     });
1288     }
1289 elmex 1.1 }
1290    
1291 root 1.19 sub _dotls {
1292     my ($self) = @_;
1293    
1294 root 1.56 my $buf;
1295    
1296 root 1.38 if (length $self->{_tls_wbuf}) {
1297     while ((my $len = Net::SSLeay::write ($self->{tls}, $self->{_tls_wbuf})) > 0) {
1298     substr $self->{_tls_wbuf}, 0, $len, "";
1299 root 1.22 }
1300 root 1.19 }
1301    
1302 root 1.56 if (length ($buf = Net::SSLeay::BIO_read ($self->{_wbio}))) {
1303 root 1.19 $self->{wbuf} .= $buf;
1304     $self->_drain_wbuf;
1305     }
1306    
1307 root 1.56 while (defined ($buf = Net::SSLeay::read ($self->{tls}))) {
1308     if (length $buf) {
1309     $self->{rbuf} .= $buf;
1310 root 1.59 $self->_drain_rbuf unless $self->{_in_drain};
1311 root 1.56 } else {
1312     # let's treat SSL-eof as we treat normal EOF
1313     $self->{_eof} = 1;
1314     $self->_shutdown;
1315     return;
1316     }
1317 root 1.23 }
1318    
1319 root 1.24 my $err = Net::SSLeay::get_error ($self->{tls}, -1);
1320    
1321     if ($err!= Net::SSLeay::ERROR_WANT_READ ()) {
1322 root 1.23 if ($err == Net::SSLeay::ERROR_SYSCALL ()) {
1323 root 1.52 return $self->_error ($!, 1);
1324 root 1.23 } elsif ($err == Net::SSLeay::ERROR_SSL ()) {
1325 root 1.52 return $self->_error (&Errno::EIO, 1);
1326 root 1.19 }
1327 root 1.23
1328     # all others are fine for our purposes
1329 root 1.19 }
1330     }
1331    
1332 root 1.25 =item $handle->starttls ($tls[, $tls_ctx])
1333    
1334     Instead of starting TLS negotiation immediately when the AnyEvent::Handle
1335     object is created, you can also do that at a later time by calling
1336     C<starttls>.
1337    
1338     The first argument is the same as the C<tls> constructor argument (either
1339     C<"connect">, C<"accept"> or an existing Net::SSLeay object).
1340    
1341     The second argument is the optional C<Net::SSLeay::CTX> object that is
1342     used when AnyEvent::Handle has to create its own TLS connection object.
1343    
1344 root 1.38 The TLS connection object will end up in C<< $handle->{tls} >> after this
1345     call and can be used or changed to your liking. Note that the handshake
1346     might have already started when this function returns.
1347    
1348 root 1.25 =cut
1349    
1350 root 1.19 sub starttls {
1351     my ($self, $ssl, $ctx) = @_;
1352    
1353 root 1.25 $self->stoptls;
1354    
1355 root 1.19 if ($ssl eq "accept") {
1356     $ssl = Net::SSLeay::new ($ctx || TLS_CTX ());
1357     Net::SSLeay::set_accept_state ($ssl);
1358     } elsif ($ssl eq "connect") {
1359     $ssl = Net::SSLeay::new ($ctx || TLS_CTX ());
1360     Net::SSLeay::set_connect_state ($ssl);
1361     }
1362    
1363     $self->{tls} = $ssl;
1364    
1365 root 1.21 # basically, this is deep magic (because SSL_read should have the same issues)
1366     # but the openssl maintainers basically said: "trust us, it just works".
1367     # (unfortunately, we have to hardcode constants because the abysmally misdesigned
1368     # and mismaintained ssleay-module doesn't even offer them).
1369 root 1.27 # http://www.mail-archive.com/openssl-dev@openssl.org/msg22420.html
1370 root 1.21 Net::SSLeay::CTX_set_mode ($self->{tls},
1371 root 1.34 (eval { local $SIG{__DIE__}; Net::SSLeay::MODE_ENABLE_PARTIAL_WRITE () } || 1)
1372     | (eval { local $SIG{__DIE__}; Net::SSLeay::MODE_ACCEPT_MOVING_WRITE_BUFFER () } || 2));
1373 root 1.21
1374 root 1.38 $self->{_rbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ());
1375     $self->{_wbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ());
1376 root 1.19
1377 root 1.38 Net::SSLeay::set_bio ($ssl, $self->{_rbio}, $self->{_wbio});
1378 root 1.19
1379     $self->{filter_w} = sub {
1380 root 1.38 $_[0]{_tls_wbuf} .= ${$_[1]};
1381 root 1.19 &_dotls;
1382     };
1383     $self->{filter_r} = sub {
1384 root 1.38 Net::SSLeay::BIO_write ($_[0]{_rbio}, ${$_[1]});
1385 root 1.19 &_dotls;
1386     };
1387     }
1388    
1389 root 1.25 =item $handle->stoptls
1390    
1391     Destroys the SSL connection, if any. Partial read or write data will be
1392     lost.
1393    
1394     =cut
1395    
1396     sub stoptls {
1397     my ($self) = @_;
1398    
1399     Net::SSLeay::free (delete $self->{tls}) if $self->{tls};
1400 root 1.38
1401     delete $self->{_rbio};
1402     delete $self->{_wbio};
1403     delete $self->{_tls_wbuf};
1404 root 1.25 delete $self->{filter_r};
1405     delete $self->{filter_w};
1406     }
1407    
1408 root 1.19 sub DESTROY {
1409     my $self = shift;
1410    
1411 root 1.25 $self->stoptls;
1412 root 1.62
1413     my $linger = exists $self->{linger} ? $self->{linger} : 3600;
1414    
1415     if ($linger && length $self->{wbuf}) {
1416     my $fh = delete $self->{fh};
1417     my $wbuf = delete $self->{wbuf};
1418    
1419     my @linger;
1420    
1421     push @linger, AnyEvent->io (fh => $fh, poll => "w", cb => sub {
1422     my $len = syswrite $fh, $wbuf, length $wbuf;
1423    
1424     if ($len > 0) {
1425     substr $wbuf, 0, $len, "";
1426     } else {
1427     @linger = (); # end
1428     }
1429     });
1430     push @linger, AnyEvent->timer (after => $linger, cb => sub {
1431     @linger = ();
1432     });
1433     }
1434 root 1.19 }
1435    
1436     =item AnyEvent::Handle::TLS_CTX
1437    
1438     This function creates and returns the Net::SSLeay::CTX object used by
1439     default for TLS mode.
1440    
1441     The context is created like this:
1442    
1443     Net::SSLeay::load_error_strings;
1444     Net::SSLeay::SSLeay_add_ssl_algorithms;
1445     Net::SSLeay::randomize;
1446    
1447     my $CTX = Net::SSLeay::CTX_new;
1448    
1449     Net::SSLeay::CTX_set_options $CTX, Net::SSLeay::OP_ALL
1450    
1451     =cut
1452    
1453     our $TLS_CTX;
1454    
1455     sub TLS_CTX() {
1456     $TLS_CTX || do {
1457     require Net::SSLeay;
1458    
1459     Net::SSLeay::load_error_strings ();
1460     Net::SSLeay::SSLeay_add_ssl_algorithms ();
1461     Net::SSLeay::randomize ();
1462    
1463     $TLS_CTX = Net::SSLeay::CTX_new ();
1464    
1465     Net::SSLeay::CTX_set_options ($TLS_CTX, Net::SSLeay::OP_ALL ());
1466    
1467     $TLS_CTX
1468     }
1469     }
1470    
1471 elmex 1.1 =back
1472    
1473 root 1.38 =head1 SUBCLASSING AnyEvent::Handle
1474    
1475     In many cases, you might want to subclass AnyEvent::Handle.
1476    
1477     To make this easier, a given version of AnyEvent::Handle uses these
1478     conventions:
1479    
1480     =over 4
1481    
1482     =item * all constructor arguments become object members.
1483    
1484     At least initially, when you pass a C<tls>-argument to the constructor it
1485 root 1.75 will end up in C<< $handle->{tls} >>. Those members might be changed or
1486 root 1.38 mutated later on (for example C<tls> will hold the TLS connection object).
1487    
1488     =item * other object member names are prefixed with an C<_>.
1489    
1490     All object members not explicitly documented (internal use) are prefixed
1491     with an underscore character, so the remaining non-C<_>-namespace is free
1492     for use for subclasses.
1493    
1494     =item * all members not documented here and not prefixed with an underscore
1495     are free to use in subclasses.
1496    
1497     Of course, new versions of AnyEvent::Handle may introduce more "public"
1498     member variables, but thats just life, at least it is documented.
1499    
1500     =back
1501    
1502 elmex 1.1 =head1 AUTHOR
1503    
1504 root 1.8 Robin Redeker C<< <elmex at ta-sa.org> >>, Marc Lehmann <schmorp@schmorp.de>.
1505 elmex 1.1
1506     =cut
1507    
1508     1; # End of AnyEvent::Handle