diff options
Diffstat (limited to 'Ivy.pm')
-rw-r--r-- | Ivy.pm | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -1,7 +1,7 @@ # # Ivy, Perl interface # -# Copyright 1997-2008 +# Copyright 1997-2009 # Centre d'Études de la Navigation Aérienne # # Authors: Alexandre Bustico <alexandre.bustico@cena.fr> @@ -361,6 +361,7 @@ use constant appName => $constantIndexer++; use constant messWhenReady => $constantIndexer++; use constant uuid => $constantIndexer++; use constant pongQueue => $constantIndexer++; +use constant readyToSend => $constantIndexer++; ############################################################################# #### METHODES PUBLIQUES ##### @@ -683,6 +684,7 @@ sub new ($%) ($self->[useMulticast], $self->[broadcastPort], $self->[broadcastBuses]) = _parseIvyBusParam ($options{-ivyBus}); + $self->[readyToSend] = 0; return ($self); @@ -1646,8 +1648,11 @@ sub _getMessages ($$) elsif ($type == ENDREGEXP) { # E N D R E G E X P # on envoie le message ready uniquement a celui qui nous - # a envoye le message endregexp - $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + # a envoye le message endregexp, et uniquement si on a + # à la fois envoyé le end regexp, et reçu le endregexp de l'autre + if (++$self->[readyToSend] == 2) { + $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + } # on passe de l'etat Connecte a l'etat Ready $self->[cnnxion]{"$addr:$peerPort"} =~ s/^\004//g; @@ -1762,6 +1767,13 @@ sub _sendWantedRegexp ($$) } # on envoie le message de fin d'envoi de regexps _univSend ($self, $appSock, sprintf (MSG_FMT, ENDREGEXP, 0, "")); + + # on envoie le message ready uniquement a celui qui nous + # a envoye le message endregexp, et uniquement si on a + # à la fois envoyé le end regexp, et reçu le endregexp de l'autre + if (++$self->[readyToSend] == 2) { + $self->_sendMsgTo ($appSock, \$self->[messWhenReady]); + } } # end _sendWantedRegexp ############### METHODE SEND LAST REGEXP TO ALLREADY CONNECTED |