Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
188 lines
7.3 KiB
C++
188 lines
7.3 KiB
C++
#ifndef _GG_AUTH_SERVER_H_
|
|
#define _GG_AUTH_SERVER_H_
|
|
|
|
#if !defined(_WIN32) && !defined(_WIN64)
|
|
#include <stdint.h>
|
|
|
|
// 64비트 리눅스에서 사용할 데이터 타입 선언 - Coded By HS_Soul [2007.12.28]
|
|
typedef int32_t INT32, *PINT32;
|
|
typedef uint32_t UINT32, *PUINT32;
|
|
typedef int64_t INT64, *PINT64;
|
|
typedef uint64_t UINT64, *PUINT64;
|
|
|
|
typedef intptr_t INT_PTR;
|
|
typedef uintptr_t UINT_PTR;
|
|
#endif
|
|
|
|
#ifdef _EXPORT_DLL
|
|
#define GGAUTHS_API extern "C" __declspec(dllexport)
|
|
#define GGAUTHS_EXPORT __declspec(dllexport)
|
|
#define __CDECL __cdecl
|
|
#else
|
|
#define GGAUTHS_API extern "C"
|
|
//#define GGAUTHS_API <== ggsrv_cpp_c.h 에서 활성화. extern "C" 는 c 컴파일러가 인식못함.
|
|
#define GGAUTHS_EXPORT
|
|
#define __CDECL
|
|
#endif
|
|
|
|
#ifndef ERROR_SUCCESS
|
|
#define ERROR_SUCCESS 0 //일반적인 성공
|
|
#endif
|
|
#define NPGG_INFO_SUCCESS 0 //GetInfo() func success.
|
|
#define NPGG_INFO_ERROR_NOTENOUGHFMEMORY 1 //Need more memory
|
|
#define ERROR_GGAUTH_FAIL_MEM_ALLOC 1 //CS인증 모듈 로딩시 메모리 부족
|
|
#define ERROR_GGAUTH_FAIL_LOAD_DLL 2 //CS인증 모듈(*.dll, *.so) 로딩 실패
|
|
#define ERROR_GGAUTH_FAIL_GET_PROC 3 //CS인증 모듈의 export 함수 설정 실패
|
|
#define ERROR_GGAUTH_FAIL_BEFORE_INIT 4 //비정상 동작 <- critical error
|
|
#define ERROR_GGAUTH_FAIL_LOAD_CFG 5 //서버인증 모듈 설정 파일 로딩 실패.
|
|
#define ERROR_GGAUTH_INVALID_PARAM 10 // 함수 호출시 잘못된 인자값을 넘겼을 경우
|
|
#define ERROR_GGAUTH_NO_REPLY 11 // 응답없음. GetAuthQuery() 가 CheckAuthAnswer()하기전에 두번 불려지면 같은에러 발생
|
|
#define ERROR_GGAUTH_INVALID_PROTOCOL_VERSION 12 // CS인증 모듈 프로토콜 번호(ggauth##.dll) 틀림
|
|
#define ERROR_GGAUTH_INVALID_REPLY 13 // 응답값 틀림.
|
|
#define ERROR_GGAUTH_INVALID_GAMEGUARD_VER 14 //게임가드 버젼검사. 라이브러리 2.5에서 추가됨(cs인증모듈 50번 이상)
|
|
#define ERROR_GGAUTH_SETSTATE_ERROR 20 // SetCSAuthState() 호출 시 m_CSAuthState가 NULL이거나..
|
|
// m_PrtcTemp가 NULL 인 경우 (pProtocolHead 를 찾을 수 없는 경우...)
|
|
#define ERROR_GGAUTH_INVALID_GAMEMON_VER 101 //
|
|
#define ERROR_GGAUTH_INVALID_GAMEMON_VER_CODE 102 //
|
|
|
|
#define ERROR_GGAUTH_RETRY_QUERY 200
|
|
|
|
#define NPGG_CHECKUPDATED_VERIFIED 0 //csa.CheckUpdated() 함수 리턴값. 현재 버전 사용자
|
|
#define NPGG_CHECKUPDATED_NOTREADY 1 //csa.CheckUpdated() 함수 리턴값. 버전검사를 하기 전. 버전에 대한 정보가 없음.
|
|
#define NPGG_CHECKUPDATED_HIGH 2 //csa.CheckUpdated() 함수 리턴값. 현재 버전보다 높은 사용자
|
|
#define NPGG_CHECKUPDATED_LOW 3 //csa.CheckUpdated() 함수 리턴값. 현재 버전보다 낮은 사용자
|
|
|
|
#define NPLOG_DEBUG 0x00000001 // 디버깅 메세지
|
|
#define NPLOG_ERROR 0x00000002 // 에러 메세지
|
|
|
|
#define NPLOG_ENABLE_DEBUG 0x00000001 // 디버깅 메세지 생성함
|
|
#define NPLOG_ENABLE_ERROR 0x00000002 // 에러 메세지 생성함
|
|
|
|
// << DATA structure >>
|
|
// gameguard auth data
|
|
typedef struct _GG_AUTH_DATA
|
|
{
|
|
UINT32 dwIndex;
|
|
UINT32 dwValue1;
|
|
UINT32 dwValue2;
|
|
UINT32 dwValue3;
|
|
} GG_AUTH_DATA, *PGG_AUTH_DATA;
|
|
|
|
// gameguard version data
|
|
typedef struct _GG_VERSION
|
|
{
|
|
UINT32 dwGGVer;
|
|
unsigned short wYear;
|
|
unsigned short wMonth;
|
|
unsigned short wDay;
|
|
unsigned short wNum;
|
|
} GG_VERSION, *PGG_VERSION;
|
|
|
|
// Data for Server <-> Server (프로토콜 버전, 게임가드 내부버전, Flag)
|
|
typedef struct _GG_CSAUTH_STATE
|
|
{
|
|
UINT32 m_PrtcVersion;
|
|
UINT32 m_GGVersion;
|
|
UINT32 m_UserFlag;
|
|
} GG_CSAUTH_STATE, *PGG_CSAUTH_STATE;
|
|
|
|
typedef struct _GG_AUTH_PROTOCOL *PGG_AUTH_PROTOCOL;
|
|
|
|
GGAUTHS_API UINT32 __CDECL InitGameguardAuth(char* sGGPath, UINT32 dwNumActive, int useTimer, int useLog);
|
|
GGAUTHS_API void __CDECL CleanupGameguardAuth();
|
|
GGAUTHS_API UINT32 __CDECL GGAuthUpdateTimer(); //useTimer 가 true 일 경우 호출.
|
|
GGAUTHS_API UINT32 __CDECL AddAuthProtocol(char* sDllName);
|
|
GGAUTHS_API UINT32 __CDECL SetGGVerLimit(UINT32 nLimitVer); //버전 상한선을 제한한다.
|
|
GGAUTHS_API UINT32 __CDECL SetUpdateCondition(int nTimeLimit, int nCondition); //업데이트 조건을 설정한다.
|
|
GGAUTHS_API UINT32 __CDECL CheckCSAuth(bool bCheck); // 전역 인증 기능 On/Off 를 위한 함수
|
|
GGAUTHS_API int ModuleInfo(char* dest, int length);
|
|
GGAUTHS_API void NpLog(int mode, char* msg); // referenced by
|
|
/*
|
|
{
|
|
if(mode & (NPLOG_DEBUG | NPLOG_ERROR)) // for examples
|
|
#ifdef WIN32
|
|
OutputDebugString(msg);
|
|
#else
|
|
printf(msg);
|
|
#endif
|
|
};
|
|
*/
|
|
|
|
typedef struct _GG_UPREPORT
|
|
{
|
|
UINT32 dwBefore; // Before version
|
|
UINT32 dwNext; // Now version
|
|
int nType; // Update type 1 : gameguard version, 2 : protocol num
|
|
} GG_UPREPORT, *PGG_UPREPORT;
|
|
|
|
GGAUTHS_API void GGAuthUpdateCallback(PGG_UPREPORT report); // referenced by
|
|
/*
|
|
{
|
|
printf("GGAuth version update [%s] : [%ld] -> [%ld] \n", // for examples
|
|
report->nType==1?"GameGuard Ver":"Protocol Num",
|
|
report->dwBefore,
|
|
report->dwNext);
|
|
};
|
|
*/
|
|
|
|
// Class CSAuth2
|
|
class GGAUTHS_EXPORT CCSAuth2
|
|
{
|
|
public:
|
|
// Constructor
|
|
CCSAuth2();
|
|
|
|
// Destructor
|
|
~CCSAuth2();
|
|
|
|
protected:
|
|
bool m_bAuth;
|
|
PGG_AUTH_PROTOCOL m_pProtocol;
|
|
UINT32 m_bPrtcRef;
|
|
UINT32 m_dwUserFlag;
|
|
GG_VERSION m_GGVer; //게임가드 버젼
|
|
GG_AUTH_DATA m_AuthQueryTmp; //m_AuthQuery 값을 백업해둔다.
|
|
|
|
public:
|
|
GG_AUTH_DATA m_AuthQuery;
|
|
GG_AUTH_DATA m_AuthAnswer;
|
|
|
|
void Init();
|
|
UINT32 GetAuthQuery();
|
|
UINT32 CheckAuthAnswer();
|
|
UINT32 CheckUserCSAuth(bool bCheck);
|
|
inline void InitCSAuthState(PGG_CSAUTH_STATE m_CSAuthState) { memset(m_CSAuthState, 0, sizeof(GG_CSAUTH_STATE)); };
|
|
UINT32 GetCSAuthState(PGG_CSAUTH_STATE m_CSAuthState);
|
|
UINT32 SetCSAuthState(PGG_CSAUTH_STATE m_CSAuthState);
|
|
UINT32 SetSecretOrder();
|
|
void Close();
|
|
int Info(char* dest, int length); // protocol information
|
|
int CheckUpdated(); //현재 사용자의 업데이트 여부를 확인한다.
|
|
};
|
|
|
|
// C type CSAuth2
|
|
typedef void* LPGGAUTH;
|
|
|
|
GGAUTHS_API LPGGAUTH __CDECL GGAuthCreateUser(); // CCSAuth2()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthDeleteUser(LPGGAUTH pGGAuth); // ~CCSAuth2()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthInitUser(LPGGAUTH pGGAuth); // Init()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthCloseUser(LPGGAUTH pGGAuth); // Close()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthGetQuery(LPGGAUTH pGGAuth, PGG_AUTH_DATA pAuthData); // GetAuthQuery()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthCheckAnswer(LPGGAUTH pGGAuth, PGG_AUTH_DATA pAuthData); // CheckAuthAnswer()
|
|
GGAUTHS_API int __CDECL GGAuthCheckUpdated(LPGGAUTH pGGAuth); // CheckAuthAnswer()
|
|
GGAUTHS_API int __CDECL GGAuthUserInfo(LPGGAUTH pGGAuth, char* dest, int length); // CheckAuthAnswer()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthGetState(LPGGAUTH pGGAuth, PGG_CSAUTH_STATE pAuthState); // GetCSAuthState()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthSetState(LPGGAUTH pGGAuth, PGG_CSAUTH_STATE pAuthState); // SetCSAuthState()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthSetSecureOrder(LPGGAUTH pGGAuth); // SetSecureOrder()
|
|
GGAUTHS_API UINT32 __CDECL GGAuthCheckUserCSAuth(LPGGAUTH pGGAuth, bool bCheck); // CheckCSAuth()
|
|
|
|
#define NPGG_USER_AUTH_QUERY 0x00000001 //GGAuthGetUserValue() 의 전달 플래그 Query
|
|
#define NPGG_USER_AUTH_ANSWER 0x00000002 //GGAuthGetUserValue() 의 전달 플래그 Answer
|
|
#define NPGG_USER_AUTH_INDEX 0x00000010 //GGAuthGetUserValue() 의 전달 플래그 index
|
|
#define NPGG_USER_AUTH_VALUE1 0x00000020 //GGAuthGetUserValue() 의 전달 플래그 Value1
|
|
#define NPGG_USER_AUTH_VALUE2 0x00000040 //GGAuthGetUserValue() 의 전달 플래그 Value2
|
|
#define NPGG_USER_AUTH_VALUE3 0x00000080 //GGAuthGetUserValue() 의 전달 플래그 Value3
|
|
GGAUTHS_API UINT32 __CDECL GGAuthGetUserValue(LPGGAUTH pGGAuth, int type);
|
|
#endif
|
|
|