/** * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ /** * This interface deals with multiplayer authentication between players and servers * * NOTE: It is not a good idea to store 'Player' object references outside of Actor classes (and even then, you must be careful); * instead, Player/NetConnection's should be tracked by IP and Port, where possible (see 'AllClientConnections' in WorldInfo) */ interface OnlineAuthInterface dependson(OnlineSubsystem) native; /** Status of an auth session */ enum EAuthStatus { /** The authentication process has not started yet */ AUS_NotStarted, /** Authentication in progress, or about to be started */ AUS_Pending, /** Successfully authenticated */ AUS_Authenticated, /** Authentication has failed */ AUS_Failed }; /** * Base auth session information, common to local and remote auth session tracking */ struct native BaseAuthSession { //@HSL_BEGIN_XBOX var const IpAddr EndPointIP; //@HSL_END_XBOX var const int EndPointPort; // The Port of the client/server is on var const UniqueNetId EndPointUID; // The UID of the client/server on the other end of the auth session // (NOTE: Not verified for AuthSession until AuthStatus is AUS_Authenticated) }; /** * Contains information for an auth session created locally, where we (the local client or server) are being authenticated */ struct native LocalAuthSession extends BaseAuthSession { var const int SessionUID; // Platform-specific UID for the session; used for ending the local half of the session }; /** * Contains information for an auth session created remotely, where we are authenticating the remote client/server */ struct native AuthSession extends BaseAuthSession { var const EAuthStatus AuthStatus; // The current status of the auth session var const int AuthTicketUID; // The UID for tracking platform-specific auth data needed to perform authentication }; /** * Used to check if the auth interface is ready to perform authentication * * @return whether or not the auth interface is ready */ function bool IsReady(); /** * Called when the auth interface is ready to perform authentication */ delegate OnAuthReady(); /** * Sets the delegate used to notify when the auth interface is ready to perform authentication * * @param AuthReadyDelegate The delegate to use for notification */ function AddAuthReadyDelegate(delegate AuthReadyDelegate); /** * Removes the specified delegate from the notification list * * @param AuthReadyDelegate The delegate to remove from the list */ function ClearAuthReadyDelegate(delegate AuthReadyDelegate); /** * Called when the client receives a message from the server, requesting a client auth session * * @param ServerUID The UID of the game server * @param ServerIP The public (external) IP of the game server * @param ServerPort The port of the game server * @param bSecure whether or not the server has anticheat enabled (relevant to OnlineSubsystemSteamworks and VAC) */ //@HSL_BEGIN_XBOX delegate OnClientAuthRequest(UniqueNetId ServerUID, IpAddr ServerIP, int ServerPort, bool bSecure); //@HSL_END_XBOX /** * Sets the delegate used to notify when the client receives a message from the server, requesting a client auth session * * @param ClientAuthRequestDelegate The delegate to use for notifications */ function AddClientAuthRequestDelegate(delegate ClientAuthRequestDelegate); /** * Removes the specified delegate from the notification list * * @param ClientAuthRequestDelegate The delegate to remove from the list */ function ClearClientAuthRequestDelegate(delegate ClientAuthRequestDelegate); /** * Called when the server receives a message from a client, requesting a server auth session * * @param ClientConnection The NetConnection of the client the request came from * @param ClientUID The UID of the client making the request * @param ClientIP The IP of the client making the request * @param ClientPort The port the client is on */ //@HSL_BEGIN_XBOX delegate OnServerAuthRequest(Player ClientConnection, UniqueNetId ClientUID, IpAddr ClientIP, int ClientPort); //@HSL_END_XBOX /** * Sets the delegate used to notify when the server receives a message from a client, requesting a server auth session * * @param ServerAuthRequestDelegate The delegate to use for notifications */ function AddServerAuthRequestDelegate(delegate ServerAuthRequestDelegate); /** * Removes the specified delegate from the notification list * * @param ServerAuthRequestDelegate The delegate to remove from the list */ function ClearServerAuthRequestDelegate(delegate ServerAuthRequestDelegate); /** * Called when the server receives auth data from a client, needed for authentication * * @param ClientUID The UID of the client * @param ClientIP The IP of the client * @param AuthTicketUID The UID used to reference the auth data */ //@HSL_BEGIN_XBOX delegate OnClientAuthResponse(UniqueNetId ClientUID, IpAddr ClientIP, int AuthTicketUID); //@HSL_END_XBOX /** * Sets the delegate used to notify when the server receives a auth data from a client * * @param ClientAuthResponseDelegate The delegate to use for notifications */ function AddClientAuthResponseDelegate(delegate ClientAuthResponseDelegate); /** * Removes the specified delegate from the notification list * * @param ClientAuthResponseDelegate The delegate to remove from the list */ function ClearClientAuthResponseDelegate(delegate ClientAuthResponseDelegate); /** * Called when the client receives auth data from the server, needed for authentication * * @param ServerUID The UID of the server * @param ServerIP The IP of the server * @param AuthTicketUID The UID used to reference the auth data */ //@HSL_BEGIN_XBOX delegate OnServerAuthResponse(UniqueNetId ServerUID, IpAddr ServerIP, int AuthTicketUID); //@HSL_END_XBOX /** * Sets the delegate used to notify when the client receives a auth data from the server * * @param ServerAuthResponseDelegate The delegate to use for notifications */ function AddServerAuthResponseDelegate(delegate ServerAuthResponseDelegate); /** * Removes the specified delegate from the notification list * * @param ServerAuthResponseDelegate The delegate to remove from the list */ function ClearServerAuthResponseDelegate(delegate ServerAuthResponseDelegate); /** * Called on the server, when the authentication result for a client auth session has returned * NOTE: This is the first place, where a clients UID is verified as valid * * @param bSuccess whether or not authentication was successful * @param ClientUID The UID of the client * @param ClientConnection The connection associated with the client (for retrieving auth session data) * @param ExtraInfo Extra information about authentication, e.g. failure reasons */ delegate OnClientAuthComplete(bool bSuccess, UniqueNetId ClientUID, Player ClientConnection, string ExtraInfo); /** * Sets the delegate used to notify when the server receives the authentication result for a client * * @param ClientAuthCompleteDelegate The delegate to use for notifications */ function AddClientAuthCompleteDelegate(delegate ClientAuthCompleteDelegate); /** * Removes the specified delegate from the notification list * * @param ClientAuthCompleteDelegate The delegate to remove from the list */ function ClearClientAuthCompleteDelegate(delegate ClientAuthCompleteDelegate); /** * Called on the client, when the authentication result for the server has returned * * @param bSuccess whether or not authentication was successful * @param ServerUID The UID of the server * @param ServerConnection The connection associated with the server (for retrieving auth session data) * @param ExtraInfo Extra information about authentication, e.g. failure reasons */ delegate OnServerAuthComplete(bool bSuccess, UniqueNetId ServerUID, Player ServerConnection, string ExtraInfo); /** * Sets the delegate used to notify when the client receives the authentication result for the server * * @param ServerAuthCompleteDelegate The delegate to use for notifications */ function AddServerAuthCompleteDelegate(delegate ServerAuthCompleteDelegate); /** * Removes the specified delegate from the notification list * * @param ServerAuthCompleteDelegate The delegate to remove from the list */ function ClearServerAuthCompleteDelegate(delegate ServerAuthCompleteDelegate); /** * Called when the client receives a request from the server, to end an active auth session * * @param ServerConnection The server NetConnection */ delegate OnClientAuthEndSessionRequest(Player ServerConnection); /** * Sets the delegate used to notify when the client receives a request from the server, to end an active auth session * * @param ClientAuthEndSessionRequestDelegate The delegate to use for notifications */ function AddClientAuthEndSessionRequestDelegate(delegate ClientAuthEndSessionRequestDelegate); /** * Removes the specified delegate from the notification list * * @param ClientAuthEndSessionRequestDelegate The delegate to remove from the list */ function ClearClientAuthEndSessionRequestDelegate(delegate ClientAuthEndSessionRequestDelegate); /** * Called when the server receives a server auth retry request from a client * * @param ClientConnection The client NetConnection */ delegate OnServerAuthRetryRequest(Player ClientConnection); /** * Sets the delegate used to notify when the server receives a request from the client, to retry server auth * * @param ServerAuthRetryRequestDelegate The delegate to use for notifications */ function AddServerAuthRetryRequestDelegate(delegate ServerAuthRetryRequestDelegate); /** * Removes the specified delegate from the notification list * * @param ServerAuthRetryRequestDelegate The delegate to remove from the list */ function ClearServerAuthRetryRequestDelegate(delegate ServerAuthRetryRequestDelegate); /** * Called on the server when a clients net connection is closing (so auth sessions can be ended) * * @param ClientConnection The client NetConnection that is closing */ delegate OnClientConnectionClose(Player ClientConnection); /** * Sets the delegate used to notify when the a client net connection is closing * * @param ClientConnectionCloseDelegate The delegate to use for notifications */ function AddClientConnectionCloseDelegate(delegate ClientConnectionCloseDelegate); /** * Removes the specified delegate from the notification list * * @param ClientConnectionCloseDelegate The delegate to remove from the list */ function ClearClientConnectionCloseDelegate(delegate ClientConnectionCloseDelegate); /** * Called on the client when a server net connection is closing (so auth sessions can be ended) * * @param ServerConnection The server NetConnection that is closing */ delegate OnServerConnectionClose(Player ServerConnection); /** * Sets the delegate used to notify when the a server net connection is closing * * @param ServerConnectionCloseDelegate The delegate to use for notifications */ function AddServerConnectionCloseDelegate(delegate ServerConnectionCloseDelegate); /** * Removes the specified delegate from the notification list * * @param ServerConnectionCloseDelegate The delegate to remove from the list */ function ClearServerConnectionCloseDelegate(delegate ServerConnectionCloseDelegate); /** * Sends a client auth request to the specified client * NOTE: It is important to specify the ClientUID from PreLogin * * @param ClientConnection The NetConnection of the client to send the request to * @param ClientUID The UID of the client (as taken from PreLogin) * @return whether or not the request kicked off successfully */ function bool SendClientAuthRequest(Player ClientConnection, UniqueNetId ClientUID); /** * Sends a server auth request to the server * * @param ServerUID The UID of the server * @return whether or not the request kicked off successfully */ function bool SendServerAuthRequest(UniqueNetId ServerUID); /** * Sends the specified auth ticket from the client to the server * * @param AuthTicketUID The UID of the auth ticket, as retrieved by CreateClientAuthSession * @return whether or not the auth ticket was sent successfully */ function bool SendClientAuthResponse(int AuthTicketUID); /** * Sends the specified auth ticket from the server to the client * * @param ClientConnection The NetConnection of the client to send the auth ticket to * @param AuthTicketUID The UID of the auth ticket, as retrieved by CreateServerAuthSession * @return whether or not the auth ticket was sent successfully */ function bool SendServerAuthResponse(Player ClientConnection, int AuthTicketUID); /** * Sends an auth kill request to the specified client * * @param ClientConnection The NetConnection of the client to send the request to * @return whether or not the request was sent successfully */ function bool SendClientAuthEndSessionRequest(Player ClientConnection); /** * Sends a server auth retry request to the server * * @return whether or not the request was sent successfully */ function bool SendServerAuthRetryRequest(); /** * Client auth functions, for authenticating clients with a game server */ /** * Creates a client auth session with the server; the session doesn't start until the auth ticket is verified by the server * NOTE: This must be called clientside * * @param ServerUID The UID of the server * @param ServerIP The external/public IP address of the server * @param ServerPort The port of the server * @param bSecure whether or not the server has cheat protection enabled * @param OutAuthTicketUID Outputs the UID of the auth data, which is used to verify the auth session on the server * @return whether or not the local half of the auth session was kicked off successfully */ //@HSL_BEGIN_XBOX function bool CreateClientAuthSession(UniqueNetId ServerUID, IpAddr ServerIP, int ServerPort, bool bSecure, out int OutAuthTicketUID); //@HSL_END_XBOX /** * Kicks off asynchronous verification and setup of a client auth session, on the server; * auth success/failure is returned through OnClientAuthComplete * * @param ClientUID The UID of the client * @param ClientIP The IP address of the client * @param ClientPort The port the client is on * @param AuthTicketUID The UID for the auth data sent by the client (as obtained through OnClientAuthResponse) * @return whether or not asynchronous verification was kicked off successfully */ //@HSL_BEGIN_XBOX function bool VerifyClientAuthSession(UniqueNetId ClientUID, IpAddr ClientIP, int ClientPort, int AuthTicketUID); //@HSL_END_XBOX /** * Ends the clientside half of a client auth session * NOTE: This call must be matched on the server, with EndRemoteClientAuthSession * * @param ServerUID The UID of the server * @param ServerIP The external (public) IP address of the server * @param ServerPort The port of the server */ //@HSL_BEGIN_XBOX function EndLocalClientAuthSession(UniqueNetId ServerUID, IpAddr ServerIP, int ServerPort); //@HSL_END_XBOX /** * Ends the serverside half of a client auth session * NOTE: This call must be matched on the client, with EndLocalClientAuthSession * * @param ClientUID The UID of the client * @param ClientIP The IP address of the client */ //@HSL_BEGIN_XBOX function EndRemoteClientAuthSession(UniqueNetId ClientUID, IpAddr ClientIP); //@HSL_END_XBOX /** * Ends the clientside halves of all client auth sessions * NOTE: This is the same as iterating AllLocalClientAuthSessions and ending each session with EndLocalClientAuthSession */ function EndAllLocalClientAuthSessions(); /** * Ends the serverside halves of all client auth sessions * NOTE: This is the same as iterating AllClientAuthSessions and ending each session with EndRemoteClientAuthSession */ function EndAllRemoteClientAuthSessions(); /** * Server auth functions, for authenticating the server with clients */ /** * Creates a server auth session with a client; the session doesn't start until the auth ticket is verified by the client * NOTE: This must be called serverside; if using server auth, the server should create a server auth session for every client * * @param ClientUID The UID of the client * @param ClientIP The IP address of the client * @param ClientPort The port of the client * @param OutAuthTicketUID Outputs the UID of the auth data, which is used to verify the auth session on the client * @return whether or not the local half of the auth session was kicked off successfully */ //@HSL_BEGIN_XBOX function bool CreateServerAuthSession(UniqueNetId ClientUID, IpAddr ClientIP, int ClientPort, out int OutAuthTicketUID); //@HSL_END_XBOX /** * Kicks off asynchronous verification and setup of a server auth session, on the client; * auth success/failure is returned through OnServerAuthComplete * * @param ServerUID The UID of the server * @param ServerIP The external/public IP address of the server * @param AuthTicketUID The UID of the auth data sent by the server (as obtained through OnServerAuthResponse) * @return whether or not asynchronous verification was kicked off successfully */ //@HSL_BEGIN_XBOX function bool VerifyServerAuthSession(UniqueNetId ServerUID, IpAddr ServerIP, int AuthTicketUID); //@HSL_END_XBOX /** * Ends the serverside half of a server auth session * NOTE: This call must be matched on the other end, with EndRemoteServerAuthSession * * @param ClientUID The UID of the client * @param ClientIP The IP address of the client */ //@HSL_BEGIN_XBOX function EndLocalServerAuthSession(UniqueNetId ClientUID, IpAddr ClientIP); //@HSL_END_XBOX /** * Ends the clientside half of a server auth session * NOTE: This call must be matched on the other end, with EndLocalServerAuthSession * * @param ServerUID The UID of the server * @param ServerIP The external/public IP address of the server */ //@HSL_BEGIN_XBOX function EndRemoteServerAuthSession(UniqueNetId ServerUID, IpAddr ServerIP); //@HSL_END_XBOX /** * Ends the serverside halves of all server auth sessions * NOTE: This is the same as iterating AllLocalServerAuthSessions and ending each session with EndLocalServerAuthSession */ function EndAllLocalServerAuthSessions(); /** * Ends the clientside halves of all server auth sessions * NOTE: This is the same as iterating AllServerAuthSessions and ending each session with EndRemoteServerAuthSession */ function EndAllRemoteServerAuthSessions(); /** * Auth info access functions */ /** * On a server, iterates all auth sessions for clients connected to the server * NOTE: This iterator is remove-safe; ending a client auth session from within this iterator will not mess up the order of iteration * * @param OutSessionInfo Outputs the currently iterated auth session */ native function iterator AllClientAuthSessions(out AuthSession OutSessionInfo); /** * On a client, iterates all auth sessions we created for a server * NOTE: This iterator is remove-safe; ending a local client auth session from within this iterator will not mess up the order of iteration * * @param OutSessionInfo Outputs the currently iterated auth session */ native function iterator AllLocalClientAuthSessions(out LocalAuthSession OutSessionInfo); /** * On a client, iterates all auth sessions for servers we are connecting/connected to * NOTE: This iterator is remove-safe; ending a server auth session from within this iterator will not mess up the order of iteration * * @param OutSessionInfo Outputs the currently iterated auth session */ native function iterator AllServerAuthSessions(out AuthSession OutSessionInfo); /** * On a server, iterates all auth sessions we created for clients * NOTE: This iterator is remove-safe; ending a local server auth session from within this iterator will not mess up the order of iteration * * @param OutSessionInfo Outputs the currently iterated auth session */ native function iterator AllLocalServerAuthSessions(out LocalAuthSession OutSessionInfo); /** * Finds the active/pending client auth session, for the client associated with the specified NetConnection * * @param ClientConnection The NetConnection associated with the client * @param OutSessionInfo Outputs the auth session info for the client * @return Returns TRUE if a session was found for the client, FALSE otherwise */ function bool FindClientAuthSession(Player ClientConnection, out AuthSession OutSessionInfo); /** * Finds the clientside half of an active/pending client auth session * * @param ServerConnection The NetConnection associated with the server * @param OutSessionInfo Outputs the auth session info for the client * @return Returns TRUE if a session was found for the client, FALSE otherwise */ function bool FindLocalClientAuthSession(Player ServerConnection, out LocalAuthSession OutSessionInfo); /** * Finds the active/pending server auth session, for the specified server connection * * @param ServerConnection The NetConnection associated with the server * @param OutSessionInfo Outputs the auth session info for the server * @return Returns TRUE if a session was found for the server, FALSE otherwise */ function bool FindServerAuthSession(Player ServerConnection, out AuthSession OutSessionInfo); /** * Finds the serverside half of an active/pending server auth session * * @param ClientConnection The NetConnection associated with the client * @param OutSessionInfo Outputs the auth session info for the server * @return Returns TRUE if a session was found for the server, FALSE otherwise */ function bool FindLocalServerAuthSession(Player ClientConnection, out LocalAuthSession OutSessionInfo); /** * Platform specific server information */ /** * If this is a server, retrieves the platform-specific UID of the server; used for authentication (not supported on all platforms) * NOTE: This is primarily used serverside, for listen host authentication * * @param OutServerUID The UID of the server * @return whether or not the server UID was retrieved */ function bool GetServerUniqueId(out UniqueNetId OutServerUID); /** * If this is a server, retrieves the platform-specific IP and port of the server; used for authentication * NOTE: This is primarily used serverside, for listen host authentication * * @param OutServerIP The public IP of the server (or, for platforms which don't support it, the local IP) * @param OutServerPort The port of the server */ //@HSL_BEGIN_XBOX function bool GetServerAddr(out IpAddr OutServerIP, out int OutServerPort); //@HSL_END_XBOX