summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbustico2007-12-20 16:02:08 +0000
committerbustico2007-12-20 16:02:08 +0000
commitfd2fb7356ddb6b002498b0ad05f5cae3b82e1587 (patch)
treef84eaccbbdf825c31c86b2ada97045d20ee6bfb9
parent782611cd23e92b48c9ed023344b354305d51107d (diff)
downloadivy-perl-fd2fb7356ddb6b002498b0ad05f5cae3b82e1587.zip
ivy-perl-fd2fb7356ddb6b002498b0ad05f5cae3b82e1587.tar.gz
ivy-perl-fd2fb7356ddb6b002498b0ad05f5cae3b82e1587.tar.bz2
ivy-perl-fd2fb7356ddb6b002498b0ad05f5cae3b82e1587.tar.xz
* New upstream version: * fix bug when name resolution fails and we should
revert to ip adress * when etablishing tcp connection as an answer to bonjour msg, use directly adress of udp socket instead of doing 2 useless name resolution
-rw-r--r--Ivy.pm65
-rw-r--r--debian/changelog11
2 files changed, 25 insertions, 51 deletions
diff --git a/Ivy.pm b/Ivy.pm
index cb6c167..6607d68 100644
--- a/Ivy.pm
+++ b/Ivy.pm
@@ -154,7 +154,6 @@ sub _scanConnStatus ($$$@); # verifie les connections effectuees et
sub _inetAdrByName ($$); # transforme une adresse inet native en chaine
# $host:$port
sub _getHostByAddr ($);
-sub _getInetByAddr ($);
sub _toBePruned ($$$);
sub _parseIvyBusParam ($); # prends une adresse de bus de la forme
# 143.196.53,DGAC-CENATLS:2010 et
@@ -306,11 +305,9 @@ my $loopMode;
# liste des bus actifs
my %allBuses = ();
-# cache des nom et des adresse ip retournés par gethostbyaddr pour
-# _getHostByAddr et _getInetByAddr
+# cache des nom retournés par gethostbyaddr pour _getHostByAddr
my %hostNameByAddr = ();
-
my $pingId = 1; # identifiant d'un ping (renvoyé par le pong)
#my $trace;
@@ -1316,7 +1313,6 @@ sub _getBonjour ($)
my $addr = (unpack_sockaddr_in ($inetAddr))[1];
- my $peerInet = _getInetByAddr ($addr);
my $peerName = _getHostByAddr ($addr);
# on force $peerPort a etre vu comme une valeur numerique
@@ -1383,7 +1379,7 @@ sub _getBonjour ($)
}
# ouverture du canal de communication
- my $appSock = IO::Socket::INET->new (PeerAddr => $peerInet,
+ my $appSock = IO::Socket::INET->new (PeerAddr => inet_ntoa ($addr),#$peerName,
PeerPort => $peerPort,
Proto => 'tcp');
@@ -1396,7 +1392,7 @@ sub _getBonjour ($)
binmode ($appSock);
# on cree une entree pour $appSock dans la liste des regexp
- $nameByHandle{$appSock}=_getInetByAddr($addr) .":$peerPort";
+ $nameByHandle{$appSock}=_getHostByAddr($addr) .":$peerPort";
$self->[cnnxion]{"$addr:$peerPort"} = $udpAppName;
$self->[sendRegList]{$appSock} = [];
$self->[sendRegListSrc]{$appSock} = [];
@@ -1465,11 +1461,6 @@ sub _getConnections ($)
sub _getMessages ($$)
{
my ($self, $appSock) = @_;
- unless (defined $appSock) {
- carp "_getMessages : *UN*inititialized appSock, don't do anything\n" if $^W;
- return;
- }
-
my $bufferRef = \$self->[bufRecByCnnx]{$appSock};
my ($addr, $peerPort, $senderName);
my $nlIndex;
@@ -1525,7 +1516,7 @@ sub _getMessages ($$)
# cleaning $sendername with previous \004 used for connection status
# bindRegexp avancé : on envoie une liste nom adresse port au lieu du nom
- $senderName = [$senderName, _getInetByAddr ($addr), $peerPort]
+ $senderName = [$senderName, _getHostByAddr ($addr), $peerPort]
if ($self->[recCbList][$id]->[2] == CALL_BY_REF);
if (ref($cb) ne 'CODE') {
@@ -1547,8 +1538,8 @@ sub _getMessages ($$)
}
} else {
#_sendErrorTo ($appSock, "REEGXP ID $id inconnue");
- carp sprintf ("Warning in Ivy::_getMessages, received an unknown message or double one shot message ".
- "with id $id from %s :\n\"$mess\"", _getHostByAddr ($addr)) if $^W;
+ carp ("Warning in Ivy::_getMessages, received an unknown message or double one shot message ".
+ "with id $id from $senderName :\n\"$mess\"") if $^W;
}
}
@@ -1564,7 +1555,7 @@ sub _getMessages ($$)
# fois pour toute, et ainsi optimiser la vitesse de
# filtrage des messages a envoyer
# print "DBG> REGEXP from $senderName '$id' '$valeurs'\n";
- my $host = _getInetByAddr ($addr);
+ my $host = _getHostByAddr ($addr);
if ($self->_toBePruned ($senderName, $valeurs)) {
&_scanConnStatus ($self, $senderName, 'filtered', "$host:$peerPort" , $valeurs);
next;
@@ -1611,7 +1602,7 @@ sub _getMessages ($$)
$self->[sendRegList]{$appSock}->[$id] = undef ;
my $regexp = $self->[sendRegListSrc]{$appSock}->[$id];
$self->[sendRegListSrc]{$appSock}->[$id] = undef;
- my $host = _getInetByAddr ($addr);
+ my $host = _getHostByAddr ($addr);
&_scanConnStatus ($self, $senderName, 'unsubscribing', "$host:$peerPort" , $regexp);
}
@@ -1630,7 +1621,7 @@ sub _getMessages ($$)
push @{$self->[appliList]{$senderName}}, $appSock;
}
- my $host = _getInetByAddr ($addr);
+ my $host = _getHostByAddr ($addr);
$self->_scanConnStatus ($senderName, "new", "$host:$peerPort", undef);
}
@@ -1643,7 +1634,7 @@ sub _getMessages ($$)
$senderName = $valeurs;
$self->[cnnxion]{"$addr:$peerPort"} = "\004$valeurs";
- $nameByHandle{$appSock}=_getInetByAddr($addr) .":$peerPort";
+ $nameByHandle{$appSock}=_getHostByAddr($addr) .":$peerPort";
}
elsif ($type == DIRECT_MSG) {
@@ -1753,7 +1744,7 @@ sub _inetAdrByName ($$) {
my ($port) = $addrInet =~ /:(.*)/;
my $addr = substr ($addrInet,0,4);
- my $host = _getInetByAddr ($addr);
+ my $host = _getHostByAddr ($addr);
return "$host:$port";
} # end _inetAdrByName
@@ -1764,11 +1755,12 @@ sub _removeFileDescriptor ($$$)
my ($self, $fd, $callBy) = @_;
unless (defined $fd) {
- carp "_removeFileDescriptor : *UN*inititialized fd, don't do anything\n" if $^W;
+# syswrite ($trace, "_removeFileDescriptor : *UN*inititialized fd, don't do anything\n");
return;
}
+
# on s'est deja occupe de lui
return unless exists $self->[sockList]->{$fd};
my $diedAppName = _getNameByFileDes ($self, $fd);
@@ -1779,7 +1771,7 @@ sub _removeFileDescriptor ($$$)
# sinon le select merde salement sur ce coup
my $peerPort = $fd->peerport() ;
if ($peerPort == 0) {
- carp "_removeFileDescriptor : peerport is NULL, don't do anything\n" if $^W;
+# syswrite ($trace, "_removeFileDescriptor : peerport is NULL, don't do anything\n");
return;
}
# syswrite ($trace, sprintf ("_removeFileDescriptor : suppression dans le fdset de %s[%s]:%d\n",
@@ -1818,7 +1810,7 @@ sub _removeFileDescriptor ($$$)
# regexps par canal
my $addr = substr ($addrInet,0,4);
- my $host = _getInetByAddr ($addr);
+ my $host = _getHostByAddr ($addr);
$self->_scanConnStatus ($diedAppName, "died", "$host:$peerPort", undef) ;
} # end _removeFileDescriptor
@@ -2219,26 +2211,6 @@ sub _getNameByFileDes ($$)
}
-sub _getInetByAddr ($)
-{
- my $addr = shift;
-
- unless (defined $addr) {
- warn "_getInetByAddr : no argument\n";
- return "0.0.0.0";
- } elsif ((length ($addr)) != 4) {
- warn "_getInetByAddr : bad argument (len != 4)\n";
- return "BAD_ADDR";
- }
-
-
- $hostNameByAddr{$addr} = [(gethostbyaddr ($addr, AF_INET))[0] || inet_ntoa($addr),
- inet_ntoa($addr)]
- unless exists $hostNameByAddr{$addr};
-
- return $hostNameByAddr{$addr}->[1];
-}
-
sub _getHostByAddr ($)
{
my $addr = shift;
@@ -2247,15 +2219,14 @@ sub _getHostByAddr ($)
warn "_getHostByAddr : no argument\n";
return "EMPTY_ADDR";
} elsif ((length ($addr)) != 4) {
- warn "_getInetByAddr : bad argument (len != 4)\n";
+ warn "_getHostByAddr : bad argument (len != 4)\n";
return "BAD_ADDR";
}
- $hostNameByAddr{$addr} = [(gethostbyaddr ($addr, AF_INET))[0] || inet_ntoa($addr),
- inet_ntoa($addr)]
+ $hostNameByAddr{$addr} = (gethostbyaddr ($addr, AF_INET))[0] || inet_ntoa($addr)
unless exists $hostNameByAddr{$addr};
- return $hostNameByAddr{$addr}->[0];
+ return $hostNameByAddr{$addr};
}
diff --git a/debian/changelog b/debian/changelog
index e8e5101..a879205 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,12 @@
-ivy-perl (4.26) unstable; urgency=low
+ivy-perl (4.25-1) unstable; urgency=low
- * New upstream version: limit use of gethostXXXX family of function
- to be dns/nis failure proof
+ * New upstream version: * fix bug when name resolution fails and we should
+ revert to ip adress
+ * when etablishing tcp connection as an answer
+ to bonjour msg, use directly adress of udp
+ socket instead of doing 2 useless name resolution
- -- Alexandre Bustico <bustico@cena.fr> Fri, 20 Dec 2007 16:22:57 +0200
+ -- Alexandre Bustico <bustico@cena.fr> Fri, 20 Dec 2007 16:55:57 +0200
ivy-perl (4.25) unstable; urgency=low