Previous bug report...
Hello everyone.
In my previous mail I blamed my problems on commit
http://h323plus.cvs.sourceforge.net/viewvc/h323plus/h323plus/src/gkclient.cx...
while it seems is due to a combination of that and the previous one:
http://h323plus.cvs.sourceforge.net/viewvc/h323plus/h323plus/src/gkclient.cx...
It seem the endpointdidentifier assignement was removed in the 1.23 rev ( although the comment talks about gatekeeper identifier ) and reinstated conditionalized in 1.24 ( which comment i do not fully understand, seems like a partial revert of the previous one ).
Regards.
Francisco Olarte
I think the bug was fixed here by Jan. Did you test this? http://h323plus.cvs.sourceforge.net/viewvc/h323plus/h323plus/src/gkclient.cx x?r1=1.46&r2=1.47
It will retry until registration can be re-established. The changes you mentioned below were to fix an issue when using alternate Gatekeepers.
Simon
-----Original Message----- From: h323plus-bounces@lists.packetizer.com [mailto:h323plus-bounces@lists.packetizer.com] On Behalf Of Francisco Olarte Sent: 12 November 2013 22:40 To: h323plus Subject: [h323plus] Previous bug report...
Hello everyone.
In my previous mail I blamed my problems on commit
http://h323plus.cvs.sourceforge.net/viewvc/h323plus/h323plus/src/gkclient.cx x?r1=1.23&r2=1.24
while it seems is due to a combination of that and the previous one:
http://h323plus.cvs.sourceforge.net/viewvc/h323plus/h323plus/src/gkclient.cx x?r1=1.22&r2=1.23
It seem the endpointdidentifier assignement was removed in the 1.23 rev ( although the comment talks about gatekeeper identifier ) and reinstated conditionalized in 1.24 ( which comment i do not fully understand, seems like a partial revert of the previous one ).
Regards.
Francisco Olarte
Hi,
what I fixed was a different issue where H323Plus endpoints wouldn't try to re-register. Francisco issue is which endpoint id is used.
I can reproduce the issue Francisco reports with GnuGk when I set AcceptEndpointIdentifier=0. With that setting H323Plus endpoints will keep sending their old endpoint identifier, even if the gatekeeper assigned them a new identifier after a full RRQ.
I believe the change in gkclient.cxx should be reverted so the endpointIdentifier provided by the gatekeeper in RCF should unconditionally be used, not only if the id was empty before.
If there still is an issue with alternate gatekeepers, it should probably be solved differently.
Regards, Jan
Hi:
On Wed, Nov 13, 2013 at 10:58 AM, Jan Willamowius jan@willamowius.de wrote:
what I fixed was a different issue where H323Plus endpoints wouldn't try to re-register. Francisco issue is which endpoint id is used.
Thanks, I was trying to analyze that commit ( which seemed totally unrelated ) when your message popped, that saved me a lot of work.
I can reproduce the issue Francisco reports with GnuGk when I set AcceptEndpointIdentifier=0. With that setting H323Plus endpoints will keep sending their old endpoint identifier, even if the gatekeeper assigned them a new identifier after a full RRQ.
I will then consider this a bug. Presently we have made our gatekeeper resistant to this behaviour by implementing something like your AcceptEndpointIdentifier flag in our gatekeeper, it basically is a one (logical) line modification of H323GateKeeperServer::CreateRegisteredEndpoint in gkserver.cxx ( plus one boolean member and a little logic to set it from our config file ). I've shamelessly copied you idea of controlling it via a flag. In case it is useful for someone our new method is:
H323RegisteredEndPoint * gk_server::CreateRegisteredEndPoint(H323GatekeeperRRQ & request) { return new reg_ep(*this, CSTR(accept_ep_identifier && request.rrq.HasOptionalField(H225_RegistrationRequest::e_endpointIdentifier) ? request.rrq.m_endpointIdentifier.GetValue() : CreateEndPointIdentifier() ) ); }
( gk_server and reg_ep are our derived classed ) I analized the code paths to assert that no endpoint with RRQ endpointIdentifier could be in the gatekeeper when this method is reached, which seemed correct.
I think the same behaviour could be bolted into the standard gkserver.cxx, making it more robust on the presence of undisciplined endpoints, by just adding the flag to it and using the appropiate classes.
With this behaviour our system works with both h32plus v1.18 ( some legacy code we have ), v1.24, v1.25 and v1.25 with patches 1.23&24 reverted in gkclient and with the one I previously sent ( which I'm considering reverting it, as my patch contains an if(!empty) which I think is erroneous, as EndpointIdentifier seems to be defined as
EndpointIdentifier ::= BMPString (SIZE(1..128))
which means it will never be empty, and it should fail on decoding.
I believe the change in gkclient.cxx should be reverted so the endpointIdentifier provided by the gatekeeper in RCF should unconditionally be used, not only if the id was empty before.
FWIW, before modifying my gatekeeper I reverted patches v1.23 & 24 from h323plus 1.25, and it worked fine, the endpoints started working. So presently I'm doubly protected, as my patched h323plus sends the endpointIdentifier received in the LAST RCF, instead of the first, and my gatekeeper uses the endpointIdentifier passed from the endpoint if present.
I think the wording is unclear in the little documents I have, they just says "endpointIdentifier – A gatekeeper assigned terminal identity string; shall be echoed in subsequent RAS messages.", but omits to say what to do if the endpoint has received more than one. Even though, I think the logical thing to do in this protocolos is to always echo the last one.
I'll continue on upgrading all our machines to v1.25, patched, and our gatekeepers to the new release. If you want some test or any other thing, I'll monitor this and try to do what I can.
Francisco Olarte.
participants (3)
-
Francisco Olarte
-
Jan Willamowius
-
Simon Horne