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