Hard coding the authenticator.Enable (as shown bellow) solves the registration problem. Obviously this is not good - any ideas why authenticator.IsCapability returns the wrong result in the "simple" sample application ?
BOOL H323Gatekeeper::OnReceiveGatekeeperConfirm(const H225_GatekeeperConfirm & gcf) { if (!H225_RAS::OnReceiveGatekeeperConfirm(gcf)) return FALSE;
PINDEX i;
for (i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; if (authenticator.UseGkAndEpIdentifiers()) authenticator.SetRemoteId(gatekeeperIdentifier); }
if (gcf.HasOptionalField(H225_GatekeeperConfirm::e_authenticationMode) && gcf.HasOptionalField(H225_GatekeeperConfirm::e_algorithmOID)) { for (i = 0; i < authenticators.GetSize(); i++) { H235Authenticator & authenticator = authenticators[i]; authenticator.Enable( TRUE /*authenticator.IsCapability(gcf.m_authenticationMode, // <<<< This makes it work
gcf.m_algorithmOID)*/); PTRACE(4,"RAS\tAuthenticator " << authenticator.GetName() << (authenticator.IsActive() ? " ACTIVATED" : " disabled")); } }