We recently upgraded to 5.7 and client travel has broken for us
To establish our current setup:
We use the common session plugin, lobbies and OSSv2. When a prospective client tries to join a host, it finds the host’s lobby, calls join, which calls InternalTravelToSession, which ends up calling FOnlineServicesEOSGS::GetResolvedConnectString which returns:
//It should look like this: "EOS:0002aeeb5b2d4388a3752dd6d31222ec"
FInternetAddrEOS TempAddr(GetProductUserIdChecked(Lobby->OwnerAccountId));
return TOnlineResult<FGetResolvedConnectString>({ TempAddr.ToString(true) });
It uses that as the travel URL. With the EOS:{id} format, the FURL being created prior to client travel ends up being marked as invalid.
When attached w/ a debugger, I’ve noticed that this function
FURL::FURL( FURL* Base, const TCHAR* TextURL, ETravelType Type )
{
// [...]
// Parse protocol. Don't consider colons that occur after the opening square brace,
// because they are valid characters in an IPv6 address.
if (!bParsedProtocol && FirstColonIdx != INDEX_NONE && FirstColonIdx > 1 &&
((SquareBracketIdx == INDEX_NONE && !bMultipleColons) || (FirstColonIdx < SquareBracketIdx) || (bMultipleColons && URLStr[FirstColonIdx+1] == '/')) &&
(DotIdx == INDEX_NONE || FirstColonIdx < DotIdx))
{
Protocol = URLStr.Left(FirstColonIdx);
URLStr = URLStr.Mid(FirstColonIdx + 1);
}
gets called. The protocol changes from ‘unreal’ to ‘EOS’, which flags the URL as no longer internal, Additionally, URLStr changes from ‘EOS:0002aeeb5b2d4388a3752dd6d31222ec’ to ‘0002aeeb5b2d4388a3752dd6d31222ec’ (stripping out the ‘EOS:’ portion), which causes this section to not get run
// Square bracket indicates an IPv6 address, but IPv6 addresses can contain dots also
// They also typically have multiple colons in them as well.
if (bIsHostnameWithDot || bPotentialIPv6Address || (ColonIdx != INDEX_NONE && ColonIdx == LastColonIdx) || bMultipleColons)
{
// [... This portion sets up the host and map values ...]
}
Because it doesn’t run, the Host and Map parameter aren’t set, remaining empty. From what I can tell, these need to be set or the URL doesn’t get through the UEngine::Browse function correctly.
Is my understanding correct?
Has anyone else experienced any issues w/ 5.7 when using lobbies w/ OSSv2?
FOnlineServicesEOSGS::GetResolvedConnectString used to look like this
//It should look like this: "EOS:0002aeeb5b2d4388a3752dd6d31222ec:GameNetDriver:97"
FString NetDriverName = GetDefault<UNetDriverEOS>()->NetDriverName.ToString();
FInternetAddrEOS TempAddr(GetProductUserIdChecked(Lobby->OwnerAccountId), NetDriverName, GetTypeHash(NetDriverName));
and now looks like this
//It should look like this: "EOS:0002aeeb5b2d4388a3752dd6d31222ec"
FInternetAddrEOS TempAddr(GetProductUserIdChecked(Lobby->OwnerAccountId));
return TOnlineResult<FGetResolvedConnectString>({ TempAddr.ToString(true) });
It’s possible we have some other engine change that broke things, but I can’t think of anything in this flow of code. Is there a missing changelist or some error with how we use the FInternetAddrEOS to get the client to travel?
[Attachment Removed]