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

Comparing cvsroot/AnyEvent-MP/MP/Transport.pm (file contents):
Revision 1.49 by root, Fri Sep 4 21:01:22 2009 UTC vs.
Revision 1.50 by root, Sat Sep 5 23:06:19 2009 UTC

116 peername => $peername, # for verification 116 peername => $peername, # for verification
117 ; 117 ;
118 118
119=cut 119=cut
120 120
121our @FRAMINGS = qw(json storable); # the framing types we accept and send, in order of preference
122our @AUTH_SND = qw(tls_md6_64_256 hmac_md6_64_256); # auth types we send
123our @AUTH_RCV = (@AUTH_SND, qw(tls_anon cleartext)); # auth types we accept
124
125#AnyEvent::Handle::register_write_type mp_record => sub {
126#};
127
128sub new { 121sub new {
129 my ($class, %arg) = @_; 122 my ($class, %arg) = @_;
130 123
131 my $self = bless \%arg, $class; 124 my $self = bless \%arg, $class;
132 125
133 $self->{queue} = []; 126 $self->{queue} = [];
134 127
135 { 128 {
136 Scalar::Util::weaken (my $self = $self); 129 Scalar::Util::weaken (my $self = $self);
137 130
138 my $config = AnyEvent::MP::Config::config; 131 my $config = $AnyEvent::MP::Kernel::CONFIG;
139 132
140 my $timeout = $self->{timeout} || $config->{monitor_timeout}; 133 my $timeout = $config->{monitor_timeout};
134 my $lframing = $config->{data_format};
135 my $auth_snd = $config->{auth_offer};
136 my $auth_rcv = $config->{auth_accept};
141 137
142 $self->{secret} = $config->{secret} 138 $self->{secret} = $config->{secret}
143 unless exists $self->{secret}; 139 unless exists $self->{secret};
144 140
145 my $secret = $self->{secret}; 141 my $secret = $self->{secret};
178 $greeting_kv->{timeout} = $self->{timeout}; 174 $greeting_kv->{timeout} = $self->{timeout};
179 175
180 # send greeting 176 # send greeting
181 my $lgreeting1 = "aemp;$PROTOCOL_VERSION" 177 my $lgreeting1 = "aemp;$PROTOCOL_VERSION"
182 . ";$self->{local_node}" 178 . ";$self->{local_node}"
183 . ";" . (join ",", @AUTH_RCV) 179 . ";" . (join ",", @$auth_rcv)
184 . ";" . (join ",", @FRAMINGS) 180 . ";" . (join ",", @$lframing)
185 . (join "", map ";$_=$greeting_kv->{$_}", keys %$greeting_kv); 181 . (join "", map ";$_=$greeting_kv->{$_}", keys %$greeting_kv);
186 182
187 my $lgreeting2 = MIME::Base64::encode_base64 AnyEvent::MP::Kernel::nonce (66), ""; 183 my $lgreeting2 = MIME::Base64::encode_base64 AnyEvent::MP::Kernel::nonce (66), "";
188 184
189 $self->{hdl}->push_write ("$lgreeting1\012$lgreeting2\012"); 185 $self->{hdl}->push_write ("$lgreeting1\012$lgreeting2\012");
224 220
225 my $tls = $self->{tls_ctx} && 1 == int $self->{remote_greeting}{tls}; 221 my $tls = $self->{tls_ctx} && 1 == int $self->{remote_greeting}{tls};
226 222
227 my $s_auth; 223 my $s_auth;
228 for my $auth_ (split /,/, $auths) { 224 for my $auth_ (split /,/, $auths) {
229 if (grep $auth_ eq $_, @AUTH_SND and ($auth_ !~ /^tls_/ or $tls)) { 225 if (grep $auth_ eq $_, @$auth_snd and ($auth_ !~ /^tls_/ or $tls)) {
230 $s_auth = $auth_; 226 $s_auth = $auth_;
231 last; 227 last;
232 } 228 }
233 } 229 }
234 230
235 defined $s_auth 231 defined $s_auth
236 or return $self->error ("$auths: no common auth type supported"); 232 or return $self->error ("$auths: no common auth type supported");
237 233
238 my $s_framing; 234 my $s_framing;
239 for my $framing_ (split /,/, $framings) { 235 for my $framing_ (split /,/, $framings) {
240 if (grep $framing_ eq $_, @FRAMINGS) { 236 if (grep $framing_ eq $_, @$lframing) {
241 $s_framing = $framing_; 237 $s_framing = $framing_;
242 last; 238 last;
243 } 239 }
244 } 240 }
245 241
336sub error { 332sub error {
337 my ($self, $msg) = @_; 333 my ($self, $msg) = @_;
338 334
339 delete $self->{keepalive}; 335 delete $self->{keepalive};
340 336
341# $AnyEvent::MP::Kernel::WARN->(9, "$self->{peerhost}:$self->{peerport} $msg");#d# 337 $AnyEvent::MP::Kernel::WARN->(9, "$self->{peerhost}:$self->{peerport} $msg");#d#
342 338
343 $self->{node}->transport_error (transport_error => $self->{node}{id}, $msg) 339 $self->{node}->transport_error (transport_error => $self->{node}{id}, $msg)
344 if $self->{node} && $self->{node}{transport} == $self; 340 if $self->{node} && $self->{node}{transport} == $self;
345 341
346 (delete $self->{release})->() 342 (delete $self->{release})->()

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines