ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Handle.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Handle.pm (file contents):
Revision 1.236 by root, Sat May 12 23:14:29 2012 UTC vs.
Revision 1.242 by root, Wed Dec 10 04:29:33 2014 UTC

132The peer's numeric host and port (the socket peername) are passed as 132The peer's numeric host and port (the socket peername) are passed as
133parameters, together with a retry callback. At the time it is called the 133parameters, together with a retry callback. At the time it is called the
134read and write queues, EOF status, TLS status and similar properties of 134read and write queues, EOF status, TLS status and similar properties of
135the handle will have been reset. 135the handle will have been reset.
136 136
137It is not allowed to use the read or write queues while the handle object
138is connecting.
139
140If, for some reason, the handle is not acceptable, calling C<$retry> will 137If, for some reason, the handle is not acceptable, calling C<$retry> will
141continue with the next connection target (in case of multi-homed hosts or 138continue with the next connection target (in case of multi-homed hosts or
142SRV records there can be multiple connection endpoints). The C<$retry> 139SRV records there can be multiple connection endpoints). The C<$retry>
143callback can be invoked after the connect callback returns, i.e. one can 140callback can be invoked after the connect callback returns, i.e. one can
144start a handshake and then decide to retry with the next host if the 141start a handshake and then decide to retry with the next host if the
496callback. 493callback.
497 494
498This callback will only be called on TLS shutdowns, not when the 495This callback will only be called on TLS shutdowns, not when the
499underlying handle signals EOF. 496underlying handle signals EOF.
500 497
501=item json => JSON or JSON::XS object 498=item json => L<JSON>, L<JSON::PP> or L<JSON::XS> object
502 499
503This is the json coder object used by the C<json> read and write types. 500This is the json coder object used by the C<json> read and write types.
504 501
505If you don't supply it, then AnyEvent::Handle will create and use a 502If you don't supply it, then AnyEvent::Handle will create and use a
506suitable one (on demand), which will write and expect UTF-8 encoded JSON 503suitable one (on demand), which will write and expect UTF-8 encoded
504JSON texts (either using L<JSON::XS> or L<JSON>). The written texts are
505guaranteed not to contain any newline character.
506
507For security reasons, this encoder will likely I<not> handle numbers and
508strings, only arrays and objects/hashes. The reason is that originally
509JSON was self-delimited, but Dougles Crockford thought it was a splendid
510idea to redefine JSON incompatibly, so this is no longer true.
511
512For protocols that used back-to-back JSON texts, this might lead to
513run-ins, where two or more JSON texts will be interpreted as one JSON
507texts. 514text.
508 515
516For this reason, if the default encoder uses L<JSON::XS>, it will default
517to not allowing anything but arrays and objects/hashes, at least for the
518forseeable future (it will change at some point). This might or might not
519be true for the L<JSON> module, so this might cause a security issue.
520
521If you depend on either behaviour, you should create your own json object
522and pass it in explicitly.
523
524=item cbor => L<CBOR::XS> object
525
526This is the cbor coder object used by the C<cbor> read and write types.
527
528If you don't supply it, then AnyEvent::Handle will create and use a
529suitable one (on demand), which will write CBOR without using extensions,
530if possible.
531
509Note that you are responsible to depend on the JSON module if you want to 532Note that you are responsible to depend on the L<CBOR::XS> module if you
510use this functionality, as AnyEvent does not have a dependency itself. 533want to use this functionality, as AnyEvent does not have a dependency on
534it itself.
511 535
512=back 536=back
513 537
514=cut 538=cut
515 539
1045 1069
1046Encodes the given hash or array reference into a JSON object. Unless you 1070Encodes the given hash or array reference into a JSON object. Unless you
1047provide your own JSON object, this means it will be encoded to JSON text 1071provide your own JSON object, this means it will be encoded to JSON text
1048in UTF-8. 1072in UTF-8.
1049 1073
1074The default encoder might or might not handle every type of JSON value -
1075it might be limited to arrays and objects for security reasons. See the
1076C<json> constructor attribute for more details.
1077
1050JSON objects (and arrays) are self-delimiting, so you can write JSON at 1078JSON objects (and arrays) are self-delimiting, so if you only use arrays
1051one end of a handle and read them at the other end without using any 1079and hashes, you can write JSON at one end of a handle and read them at the
1052additional framing. 1080other end without using any additional framing.
1053 1081
1054The generated JSON text is guaranteed not to contain any newlines: While 1082The JSON text generated by the default encoder is guaranteed not to
1055this module doesn't need delimiters after or between JSON texts to be 1083contain any newlines: While this module doesn't need delimiters after or
1056able to read them, many other languages depend on that. 1084between JSON texts to be able to read them, many other languages depend on
1085them.
1057 1086
1058A simple RPC protocol that interoperates easily with others is to send 1087A simple RPC protocol that interoperates easily with other languages is
1059JSON arrays (or objects, although arrays are usually the better choice as 1088to send JSON arrays (or objects, although arrays are usually the better
1060they mimic how function argument passing works) and a newline after each 1089choice as they mimic how function argument passing works) and a newline
1061JSON text: 1090after each JSON text:
1062 1091
1063 $handle->push_write (json => ["method", "arg1", "arg2"]); # whatever 1092 $handle->push_write (json => ["method", "arg1", "arg2"]); # whatever
1064 $handle->push_write ("\012"); 1093 $handle->push_write ("\012");
1065 1094
1066An AnyEvent::Handle receiver would simply use the C<json> read type and 1095An AnyEvent::Handle receiver would simply use the C<json> read type and
1069 $handle->push_read (json => sub { my $array = $_[1]; ... }); 1098 $handle->push_read (json => sub { my $array = $_[1]; ... });
1070 1099
1071Other languages could read single lines terminated by a newline and pass 1100Other languages could read single lines terminated by a newline and pass
1072this line into their JSON decoder of choice. 1101this line into their JSON decoder of choice.
1073 1102
1103=item cbor => $perl_scalar
1104
1105Encodes the given scalar into a CBOR value. Unless you provide your own
1106L<CBOR::XS> object, this means it will be encoded to a CBOR string not
1107using any extensions, if possible.
1108
1109CBOR values are self-delimiting, so you can write CBOR at one end of
1110a handle and read them at the other end without using any additional
1111framing.
1112
1113A simple nd very very fast RPC protocol that interoperates with
1114other languages is to send CBOR and receive CBOR values (arrays are
1115recommended):
1116
1117 $handle->push_write (cbor => ["method", "arg1", "arg2"]); # whatever
1118
1119An AnyEvent::Handle receiver would simply use the C<cbor> read type:
1120
1121 $handle->push_read (cbor => sub { my $array = $_[1]; ... });
1122
1074=cut 1123=cut
1075 1124
1076sub json_coder() { 1125sub json_coder() {
1077 eval { require JSON::XS; JSON::XS->new->utf8 } 1126 eval { require JSON::XS; JSON::XS->new->utf8 }
1078 || do { require JSON; JSON->new->utf8 } 1127 || do { require JSON::PP; JSON::PP->new->utf8 }
1079} 1128}
1080 1129
1081register_write_type json => sub { 1130register_write_type json => sub {
1082 my ($self, $ref) = @_; 1131 my ($self, $ref) = @_;
1083 1132
1084 my $json = $self->{json} ||= json_coder; 1133 ($self->{json} ||= json_coder)
1085
1086 $json->encode ($ref) 1134 ->encode ($ref)
1135};
1136
1137sub cbor_coder() {
1138 require CBOR::XS;
1139 CBOR::XS->new
1140}
1141
1142register_write_type cbor => sub {
1143 my ($self, $scalar) = @_;
1144
1145 ($self->{cbor} ||= cbor_coder)
1146 ->encode ($scalar)
1087}; 1147};
1088 1148
1089=item storable => $reference 1149=item storable => $reference
1090 1150
1091Freezes the given reference using L<Storable> and writes it to the 1151Freezes the given reference using L<Storable> and writes it to the
1485 1545
1486register_read_type line => sub { 1546register_read_type line => sub {
1487 my ($self, $cb, $eol) = @_; 1547 my ($self, $cb, $eol) = @_;
1488 1548
1489 if (@_ < 3) { 1549 if (@_ < 3) {
1490 # this is more than twice as fast as the generic code below 1550 # this is faster then the generic code below
1491 sub { 1551 sub {
1492 $_[0]{rbuf} =~ s/^([^\015\012]*)(\015?\012)// or return; 1552 (my $pos = index $_[0]{rbuf}, "\012") >= 0
1553 or return;
1493 1554
1555 (my $str = substr $_[0]{rbuf}, 0, $pos + 1, "") =~ s/(\015?\012)\Z// or die;
1494 $cb->($_[0], "$1", "$2"); 1556 $cb->($_[0], $str, "$1");
1495 1 1557 1
1496 } 1558 }
1497 } else { 1559 } else {
1498 $eol = quotemeta $eol unless ref $eol; 1560 $eol = quotemeta $eol unless ref $eol;
1499 $eol = qr|^(.*?)($eol)|s; 1561 $eol = qr|^(.*?)($eol)|s;
1662=item json => $cb->($handle, $hash_or_arrayref) 1724=item json => $cb->($handle, $hash_or_arrayref)
1663 1725
1664Reads a JSON object or array, decodes it and passes it to the 1726Reads a JSON object or array, decodes it and passes it to the
1665callback. When a parse error occurs, an C<EBADMSG> error will be raised. 1727callback. When a parse error occurs, an C<EBADMSG> error will be raised.
1666 1728
1667If a C<json> object was passed to the constructor, then that will be used 1729If a C<json> object was passed to the constructor, then that will be
1668for the final decode, otherwise it will create a JSON coder expecting UTF-8. 1730used for the final decode, otherwise it will create a L<JSON::XS> or
1731L<JSON::PP> coder object expecting UTF-8.
1669 1732
1670This read type uses the incremental parser available with JSON version 1733This read type uses the incremental parser available with JSON version
16712.09 (and JSON::XS version 2.2) and above. You have to provide a 17342.09 (and JSON::XS version 2.2) and above.
1672dependency on your own: this module will load the JSON module, but
1673AnyEvent does not depend on it itself.
1674 1735
1675Since JSON texts are fully self-delimiting, the C<json> read and write 1736Since JSON texts are fully self-delimiting, the C<json> read and write
1676types are an ideal simple RPC protocol: just exchange JSON datagrams. See 1737types are an ideal simple RPC protocol: just exchange JSON datagrams. See
1677the C<json> write type description, above, for an actual example. 1738the C<json> write type description, above, for an actual example.
1678 1739
1682 my ($self, $cb) = @_; 1743 my ($self, $cb) = @_;
1683 1744
1684 my $json = $self->{json} ||= json_coder; 1745 my $json = $self->{json} ||= json_coder;
1685 1746
1686 my $data; 1747 my $data;
1687 my $rbuf = \$self->{rbuf};
1688 1748
1689 sub { 1749 sub {
1690 my $ref = eval { $json->incr_parse ($_[0]{rbuf}) }; 1750 my $ref = eval { $json->incr_parse ($_[0]{rbuf}) };
1691 1751
1692 if ($ref) { 1752 if ($ref) {
1706 1766
1707 () 1767 ()
1708 } else { 1768 } else {
1709 $_[0]{rbuf} = ""; 1769 $_[0]{rbuf} = "";
1710 1770
1771 ()
1772 }
1773 }
1774};
1775
1776=item cbor => $cb->($handle, $scalar)
1777
1778Reads a CBOR value, decodes it and passes it to the callback. When a parse
1779error occurs, an C<EBADMSG> error will be raised.
1780
1781If a L<CBOR::XS> object was passed to the constructor, then that will be
1782used for the final decode, otherwise it will create a CBOR coder without
1783enabling any options.
1784
1785You have to provide a dependency to L<CBOR::XS> on your own: this module
1786will load the L<CBOR::XS> module, but AnyEvent does not depend on it
1787itself.
1788
1789Since CBOR values are fully self-delimiting, the C<cbor> read and write
1790types are an ideal simple RPC protocol: just exchange CBOR datagrams. See
1791the C<cbor> write type description, above, for an actual example.
1792
1793=cut
1794
1795register_read_type cbor => sub {
1796 my ($self, $cb) = @_;
1797
1798 my $cbor = $self->{cbor} ||= cbor_coder;
1799
1800 my $data;
1801
1802 sub {
1803 my (@value) = eval { $cbor->incr_parse ($_[0]{rbuf}) };
1804
1805 if (@value) {
1806 $cb->($_[0], @value);
1807
1808 1
1809 } elsif ($@) {
1810 # error case
1811 $cbor->incr_reset;
1812
1813 $_[0]->_error (Errno::EBADMSG);
1814
1815 ()
1816 } else {
1711 () 1817 ()
1712 } 1818 }
1713 } 1819 }
1714}; 1820};
1715 1821
1972sub _dotls { 2078sub _dotls {
1973 my ($self) = @_; 2079 my ($self) = @_;
1974 2080
1975 my $tmp; 2081 my $tmp;
1976 2082
1977 if (length $self->{_tls_wbuf}) { 2083 while (length $self->{_tls_wbuf}) {
1978 while (($tmp = Net::SSLeay::write ($self->{tls}, $self->{_tls_wbuf})) > 0) { 2084 if (($tmp = Net::SSLeay::write ($self->{tls}, $self->{_tls_wbuf})) <= 0) {
1979 substr $self->{_tls_wbuf}, 0, $tmp, ""; 2085 $tmp = Net::SSLeay::get_error ($self->{tls}, $tmp);
2086
2087 return $self->_tls_error ($tmp)
2088 if $tmp != $ERROR_WANT_READ
2089 && ($tmp != $ERROR_SYSCALL || $!);
2090
2091 last;
1980 } 2092 }
1981 2093
1982 $tmp = Net::SSLeay::get_error ($self->{tls}, $tmp); 2094 substr $self->{_tls_wbuf}, 0, $tmp, "";
1983 return $self->_tls_error ($tmp)
1984 if $tmp != $ERROR_WANT_READ
1985 && ($tmp != $ERROR_SYSCALL || $!);
1986 } 2095 }
1987 2096
1988 while (defined ($tmp = Net::SSLeay::read ($self->{tls}))) { 2097 while (defined ($tmp = Net::SSLeay::read ($self->{tls}))) {
1989 unless (length $tmp) { 2098 unless (length $tmp) {
1990 $self->{_on_starttls} 2099 $self->{_on_starttls}
2004 $self->{_tls_rbuf} .= $tmp; 2113 $self->{_tls_rbuf} .= $tmp;
2005 $self->_drain_rbuf; 2114 $self->_drain_rbuf;
2006 $self->{tls} or return; # tls session might have gone away in callback 2115 $self->{tls} or return; # tls session might have gone away in callback
2007 } 2116 }
2008 2117
2009 $tmp = Net::SSLeay::get_error ($self->{tls}, -1); 2118 $tmp = Net::SSLeay::get_error ($self->{tls}, -1); # -1 is not neccessarily correct, but Net::SSLeay doesn't tell us
2010 return $self->_tls_error ($tmp) 2119 return $self->_tls_error ($tmp)
2011 if $tmp != $ERROR_WANT_READ 2120 if $tmp != $ERROR_WANT_READ
2012 && ($tmp != $ERROR_SYSCALL || $!); 2121 && ($tmp != $ERROR_SYSCALL || $!);
2013 2122
2014 while (length ($tmp = Net::SSLeay::BIO_read ($self->{_wbio}))) { 2123 while (length ($tmp = Net::SSLeay::BIO_read ($self->{_wbio}))) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines