ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Transport.pm
(Generate patch)

Comparing AnyEvent-MP/MP/Transport.pm (file contents):
Revision 1.23 by root, Wed Aug 5 22:40:51 2009 UTC vs.
Revision 1.25 by root, Thu Aug 6 10:21:48 2009 UTC

131 { 131 {
132 Scalar::Util::weaken (my $self = $self); 132 Scalar::Util::weaken (my $self = $self);
133 133
134 $arg{secret} = AnyEvent::MP::Base::default_secret () 134 $arg{secret} = AnyEvent::MP::Base::default_secret ()
135 unless exists $arg{secret}; 135 unless exists $arg{secret};
136
137 $arg{timeout} = 30
138 unless exists $arg{timeout};
139
140 my $keepalive = (int $arg{timeout} * 0.75) || 1;
136 141
137 my $secret = $arg{secret}; 142 my $secret = $arg{secret};
138 143
139 if ($secret =~ /-----BEGIN RSA PRIVATE KEY-----.*-----END RSA PRIVATE KEY-----.*-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----/s) { 144 if ($secret =~ /-----BEGIN RSA PRIVATE KEY-----.*-----END RSA PRIVATE KEY-----.*-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----/s) {
140 # assume TLS mode 145 # assume TLS mode
154 autocork => 1, 159 autocork => 1,
155 no_delay => 1, 160 no_delay => 1,
156 on_error => sub { 161 on_error => sub {
157 $self->error ($_[2]); 162 $self->error ($_[2]);
158 }, 163 },
164 timeout => $AnyEvent::MP::Base::CONNECT_TIMEOUT,
159 peername => delete $arg{peername}, 165 peername => delete $arg{peername},
160 ; 166 ;
161 167
162 my $greeting_kv = $self->{greeting} ||= {}; 168 my $greeting_kv = $self->{greeting} ||= {};
169
170 $self->{local_node} = $AnyEvent::MP::Base::NODE;
171
163 $greeting_kv->{"tls"} = "1.0" 172 $greeting_kv->{"tls"} = "1.0" if $arg{tls_ctx};
164 if $arg{tls_ctx};
165 $greeting_kv->{provider} = "AE-$VERSION"; 173 $greeting_kv->{provider} = "AE-$VERSION";
166 $greeting_kv->{peeraddr} = AnyEvent::Socket::format_hostport $self->{peerhost}, $self->{peerport}; 174 $greeting_kv->{peeraddr} = AnyEvent::Socket::format_hostport $self->{peerhost}, $self->{peerport};
167 175 $greeting_kv->{maxidle} = $keepalive;
168 $self->{local_node} = $AnyEvent::MP::Base::NODE;
169 176
170 # send greeting 177 # send greeting
171 my $lgreeting1 = "aemp;$PROTOCOL_VERSION" 178 my $lgreeting1 = "aemp;$PROTOCOL_VERSION"
172 . ";$AnyEvent::MP::Base::UNIQ" 179 . ";$AnyEvent::MP::Base::UNIQ"
173 . ";$AnyEvent::MP::Base::NODE" 180 . ";$self->{local_node}"
174 . ";" . (join ",", @AUTH_RCV) 181 . ";" . (join ",", @AUTH_RCV)
175 . ";" . (join ",", @FRAMINGS) 182 . ";" . (join ",", @FRAMINGS)
176 . (join "", map ";$_=$greeting_kv->{$_}", keys %$greeting_kv); 183 . (join "", map ";$_=$greeting_kv->{$_}", keys %$greeting_kv);
177 184
178 my $lgreeting2 = MIME::Base64::encode_base64 AnyEvent::MP::Base::nonce (33), ""; 185 my $lgreeting2 = MIME::Base64::encode_base64 AnyEvent::MP::Base::nonce (33), "";
265 $self->{s_framing} = $s_framing; 272 $self->{s_framing} = $s_framing;
266 273
267 $hdl->rbuf_max (undef); 274 $hdl->rbuf_max (undef);
268 my $queue = delete $self->{queue}; # we are connected 275 my $queue = delete $self->{queue}; # we are connected
269 276
277 $self->{hdl}->timeout ($self->{remote_greeting}{keepalive} + 5)
278 if $self->{remote_greeting}{keepalive};
279
270 $self->connected; 280 $self->connected;
271 281
272 my $src_node = $self->{node}; 282 my $src_node = $self->{node};
273 283
274 $self->send ($_) 284 $self->send ($_)
304sub connected { 314sub connected {
305 my ($self) = @_; 315 my ($self) = @_;
306 316
307 if (ref $AnyEvent::MP::Base::SLAVE) { 317 if (ref $AnyEvent::MP::Base::SLAVE) {
308 # first connect with a master node 318 # first connect with a master node
319 my $via = $self->{remote_node};
320 $via =~ s/,/!/g;
309 $AnyEvent::MP::Base::NODE .= "\@$self->{remote_node}"; 321 $AnyEvent::MP::Base::NODE .= "\@$via";
310 $AnyEvent::MP::Base::NODE{$AnyEvent::MP::Base::NODE} = $AnyEvent::MP::Base::NODE{""}; 322 $AnyEvent::MP::Base::NODE{$AnyEvent::MP::Base::NODE} = $AnyEvent::MP::Base::NODE{""};
311 $AnyEvent::MP::Base::SLAVE->(); 323 $AnyEvent::MP::Base::SLAVE->();
312 } 324 }
313 325
314 if ($self->{local_node} ne $AnyEvent::MP::Base::NODE) { 326 if ($self->{local_node} ne $AnyEvent::MP::Base::NODE) {
427 439
428=item tls=<major>.<minor> 440=item tls=<major>.<minor>
429 441
430Indicates that the other side supports TLS (version should be 1.0) and 442Indicates that the other side supports TLS (version should be 1.0) and
431wishes to do a TLS handshake. 443wishes to do a TLS handshake.
444
445=item maxidle=<seconds>
446
447The maximum amount of time the node will not sent data, i.e., idle. This
448can be used to close the conenction when no data has been received for a
449too-long time (say, maxidle + 5 seconds).
432 450
433=back 451=back
434 452
435=head3 Second Greeting Line 453=head3 Second Greeting Line
436 454

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines