16 #include <nn/pia/inet/inet_Definitions.h>
20 #include <nn/pia/inet/inet_NexSessionTypes.h>
21 #include <nn/pia/inet/inet_IFacade.h>
23 #include <nn/pia/common/common_AsyncContext.h>
24 #include <nn/pia/common/common_FixedString.h>
25 #include <nn/pia/common/common_InetAddress.h>
26 #include <nn/pia/common/common_SignatureSetting.h>
28 #include <nn/pia/nat/nat_Definitions.h>
30 #include <nn/pia/transport/transport_StationConnectionInfo.h>
33 #pragma diag_suppress 1300
36 #include <OnlineCore/src/Platform/Core/qList.h>
37 #include <OnlineCore/src/Transport/Interface/StationURL.h>
38 #include <RendezVous/Core/src/Client/Credentials.h>
39 #include <RendezVous/Core/src/Common/Constants/NotificationEvents.h>
41 #include <RendezVous/Services/Jugem/Login/src/Client/NgsFacade.h>
42 #include <RendezVous/Services/Jugem/Login/src/Client/NgsBridgeInterface.h>
43 #include <RendezVous/Services/MatchMaking.h>
44 #include <RendezVous/Services/Jugem/Matchmake/src/Client/MatchmakeExtensionClient.h>
45 #include <RendezVous/Services/NATTraversal/src/Client/NATTraversalClient.h>
48 #pragma diag_default 1300
81 class NexNatTraversalClient;
82 class NexNotificationDataJob;
83 class NexNatServerAddressResolveJob;
84 class SocketOutputStream;
85 class SocketInputStream;
88 class NexBlockListJob;
155 static Result ConvertNexStationUrlToStationConnectionInfo(
156 const nn::nex::qList<nn::nex::StationURL>& nexStationUrlList,
179 static void ConvertNexInetAddressToInetAddress(
const nn::nex::InetAddress& nexAddress,
common::InetAddress* pAddress);
191 static void ConvertInetAddressToNexInetAddress(
const common::InetAddress& address, nn::nex::InetAddress* pNexAddress);
207 static void ConvertStationLocationToStationUrlNexList(
208 const nn::nex::qList<transport::StationLocation>& stationLocationList,
209 nn::nex::qList<nn::nex::StationURL>* pStationUrlList);
215 static void ConvertStationUrlToStationLocationNexList(
216 const nn::nex::qList<nn::nex::StationURL>& stationUrlList,
217 nn::nex::qList<transport::StationLocation>* pStationLocationList);
226 static void ConvertNexStringToString(
const nn::nex::String& nexString,
common::String* pString);
244 static Result ConvertNexSignatureKeyToSignatureSetting(
245 const nn::nex::qVector<nn::nex::qByte>& nexSignatureKey,
629 Result StartNatSessionAsync();
640 bool IsStartNatSessionCompleted()
const;
657 Result GetStartNatSessionResult()
const;
672 Result CancelStartNatSessionAsync();
681 void StopNatSession();
687 void CompleteStartNatSession();
695 void Trace(uint64_t flag)
const;
703 bool IsStartedUp()
const
705 return m_IsStartedUp;
714 bool IsStartedNatSession()
const
716 return m_IsStartedNatSession;
723 nat::NatTraverser* GetNatTraverser()
725 return m_pNatTraverser;
732 NexNatRelay* GetNatRelay()
734 return m_pNexNatRelay;
743 nn::nex::MatchmakeExtensionClient* GetMatchMakingClient()
745 return m_pMatchMakingClient;
754 nn::nex::MatchmakeSession* GetMatchmakeSessionPtr()
756 return m_pMatchmakeSession;
765 nn::nex::NgsBridgeInterface* GetNgsInterface()
767 return m_pNgsInterface;
776 uint32_t GetGameServerId()
const
778 return m_GameServerId;
788 void UpdateGatheringID(nn::nex::GatheringID gatheringID);
796 nn::nex::GatheringID GetGatheringID()
const
798 return m_GatheringID;
846 Result SetNatTraversalTimeout(int32_t timeout);
852 int32_t GetNatTraversalTimeout()
const
854 return m_NatTraversalTimeout;
866 Result SetNatTraversalTimeoutEdmExtension(int32_t timeout);
872 int32_t GetNatTraversalTimeoutEdmExtension()
const
874 return m_NatTraversalTimeoutEdmExtension;
899 void SetSuspendBossDaemonOnNATSession(
bool isSuspendBossDaemon)
901 m_IsSuspendBossDaemon = isSuspendBossDaemon;
910 bool IsSuspendBossDaemonOnNATSession()
const
912 return m_IsSuspendBossDaemon;
923 bool RegisterNexNotificationEventHandler4Pia(nn::nex::NotificationEventHandler* pEventHandler);
932 bool UnregisterNexNotificationEventHandler4Pia(nn::nex::NotificationEventHandler* pEventHandler);
937 void SetPersistentGatheringCodeKey();
938 void ClearPersistentGatheringCodeKey();
939 Result SetRelayServiceEnabled(
bool isEnabled);
940 bool IsRelayServiceEnabled()
const;
941 Result UpdateNatServerAddress();
942 void SetIgnoreNatProbeRequest(
bool bIgnore);
943 void NotifyProbeRequest(
const transport::StationLocation& requesterLocation);
944 void NotifyLocalServerConnectionId(
const ServerConnectionId scid);
945 bool IsTraversed(
const transport::StationLocation& targetLocation)
const;
946 bool IsTraversed(ServerConnectionId scid)
const;
947 bool IsProcessingNatDetection()
const;
948 void NotifyLeave(
const transport::StationLocation& targetLocation,
bool isProbeCleanup,
bool isRelayEntryCleanup);
949 bool PrepareNatTraversal(
const transport::StationLocation& targetLocation,
950 const transport::StationConnectionInfo& targetConnectionInfo,
951 common::AsyncContext* pContext,
952 bool isInverseConnection,
953 bool isRelayServerUsed,
955 bool CheckLatestStationLocation(transport::StationLocation& stationLocation);
956 void ResetProbeStatus(
const transport::StationLocation& targetLocation,
bool bInverseConnection);
957 void ReportNatTraversalResult(
const transport::StationLocation& stationLocation, Result result,
bool bReport);
963 virtual uint16_t GetRandomPortRangeMin()
const;
964 virtual uint16_t GetRandomPortRangeMax()
const;
965 virtual uint16_t GetReservedPort()
const;
966 virtual ServerConnectionId GetLocalServerConnectionId()
const;
967 virtual void RelayProbeRequest(
const transport::StationLocation& targetLocation,
const transport::StationLocation& requesterLocation);
968 virtual void UpdateRelayTable();
969 virtual const common::InetAddress& GetRelayServerAddress()
const;
970 virtual bool IsBeginMonitoringDataAvailable()
const;
975 static NexFacade* s_pInstance;
977 static const uint32_t GameServerAccessKeySize = 8;
987 virtual ~NexFacade(
void);
992 NexFacade(
const NexFacade&);
997 NexFacade& operator=(
const NexFacade&);
1003 void suspendBossDaemon();
1004 void resumeBossDaemon();
1007 static void NatTraverserStartupCompletionCallback(Result result,
void* pUserContext);
1008 static void NatServerAddressResolveCompletionCallback(Result result,
void* pUserContext);
1009 void CompletedNatServerAddressResolution();
1010 void CancelCleanupNatServerAddressResolution();
1012 uint32_t m_GameServerId;
1013 common::FixedString<GameServerAccessKeySize> m_GameServerAccessKey;
1014 nn::nex::NgsBridgeInterface* m_pNgsInterface;
1015 nn::nex::GatheringID m_GatheringID;
1017 uint8_t* m_pMatchMakingClientBuffer;
1018 nn::nex::MatchmakeExtensionClient* m_pMatchMakingClient;
1019 nn::nex::MatchmakeSession* m_pMatchmakeSession;
1021 uint8_t* m_pNatTraversalRelayClientBuffer;
1022 nn::nex::NATTraversalRelayClient* m_pNatTraversalRelayClient;
1023 NexNatRelay* m_pNexNatRelay;
1025 nat::NatTraverser* m_pNatTraverser;
1027 common::Socket* m_pSocket;
1028 SocketOutputStream* m_pOutputStream;
1029 SocketInputStream* m_pInputStream;
1032 bool m_IsStartedNatSession;
1033 bool m_IsRelayEnabled;
1035 int32_t m_NatTraversalTimeout;
1036 int32_t m_NatTraversalTimeoutEdmExtension;
1039 bool m_IsSuspendBossDaemon;
1040 int32_t m_NdmInitializeCount;
1043 nn::nex::NotificationEventHandler* m_pNexNotificationEventHandler;
1045 NexNotificationDataJob* m_pNexNotificationDataJob;
1047 uint8_t m_InternalAsyncProcessType;
1048 common::AsyncContext m_InternalAsyncConext;
1050 common::AsyncContext m_NatTraverserStartupCallContext;
1051 common::AsyncContext m_NatServerAddressResolveCallContext;
1052 NexNatServerAddressResolveJob* m_pNexNatServerAddressResolveJob;
1054 nn::nex::StationURL* m_pLocalUrl;
1055 nn::nex::StationURL* m_pUpdatedUrl;
1057 nn::nex::ProtocolCallContext* m_pReplaceURLCallContext;
1059 bool m_IsIgnoredNatProbeRequest;
1060 ServerConnectionId m_LocalServerConnectionId;
1063 NexBlockListJob* m_pNexBlockListJob;