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