summaryrefslogtreecommitdiff
path: root/Ivy.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy.pm')
-rw-r--r--Ivy.pm21
1 files changed, 17 insertions, 4 deletions
diff --git a/Ivy.pm b/Ivy.pm
index 7d96e63..60efc5c 100644
--- a/Ivy.pm
+++ b/Ivy.pm
@@ -881,6 +881,16 @@ sub bindRegexp ($$$;$$)
# on rajoute le couple $regexp, $cb dans la liste des messages
# qu'on prend
+ # on teste la validité de l'argument
+ if (ref ($cb) ne 'ARRAY') {
+ carp ("Warning binRegexp on $regexp :\nargument 3 (callback) is not correct and will be ignored\n");
+ return ();
+ }
+ if (ref ($cb->[0]) ne 'CODE') {
+ carp ("Warning binRegexp on $regexp :\nargument 3 (callback) is not correct and will be ignored\n");
+ return ();
+ }
+
# on commence par tester si on a un id libere dans le tableau
for ($id=0; $id <= ($#{$self->[recCbList]}+1); $id++) {
last unless (defined $self->[recCbList][$id]) && @{$self->[recCbList][$id]->[1]};
@@ -891,7 +901,6 @@ sub bindRegexp ($$$;$$)
_sendLastRegexpToAllreadyConnected ($self, $id) ;
}
else {
-
# on vire le callback, et on se desabonne de cette regexp
for (my $id=0; $id <= $#{$self->[recCbList]}; $id++) {
@@ -1519,10 +1528,14 @@ sub _getMessages ($$)
# on recupere le couple call back, regexp correspondant
# a l'identifiant et on appelle la fonction avec les parametres
# traites par la regexp
- if (ref ($self->[recCbList][$id]) eq 'ARRAY') {
- my @cb = @{$self->[recCbList][$id]->[1]};
- my $cb = shift @cb;
+# if ((ref ($self->[recCbList][$id]) eq 'ARRAY') &&
+# (my @cb = @{$self->[recCbList][$id]->[1]})) {
+
+
+ if (my @cb = @{$self->[recCbList][$id]->[1]}) {
+ my $cb = shift @cb;
+
# cleaning $sendername with previous \004 used for connection status
# bindRegexp avancé : on envoie une liste nom adresse port au lieu du nom
$senderName = [$senderName, _getHostByAddr ($addr), $peerPort]