mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 13:47:58 +03:00
223 lines
5.3 KiB
C
223 lines
5.3 KiB
C
/*
|
|
GameSpy Peer SDK
|
|
Dan "Mr. Pants" Schoenblum
|
|
dan@gamespy.com
|
|
|
|
Copyright 1999-2007 GameSpy Industries, Inc
|
|
|
|
devsupport@gamespy.com
|
|
*/
|
|
|
|
#ifndef _PEERMAIN_H_
|
|
#define _PEERMAIN_H_
|
|
|
|
/*************
|
|
** INCLUDES **
|
|
*************/
|
|
#include "peer.h"
|
|
#include "../darray.h"
|
|
#include "../hashtable.h"
|
|
#include "../pinger/pinger.h"
|
|
#include "../Chat/chatASCII.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#if 0
|
|
piConnection * connection; // This is to fool Visual Assist.
|
|
#endif
|
|
|
|
/************
|
|
** DEFINES **
|
|
************/
|
|
#define PI_ROOM_MAX_LEN 257
|
|
#define PI_NICK_MAX_LEN 64
|
|
#define PI_NAME_MAX_LEN 512
|
|
#define PI_TITLE_MAX_LEN 32
|
|
#define PI_AWAY_MAX_LEN 128
|
|
#define PI_SB_LEN 32 // from sb_internal.h
|
|
|
|
#ifndef PI_CHAT_PING_TIME
|
|
#ifndef _NITRO
|
|
#define PI_CHAT_PING_TIME (5 * 60000)
|
|
#else
|
|
#define PI_CHAT_PING_TIME (20000)
|
|
#endif
|
|
#endif
|
|
|
|
#define PEER_CONNECTION piConnection * connection;\
|
|
assert(peer);\
|
|
connection = (piConnection *)peer;\
|
|
GSI_UNUSED(connection);
|
|
|
|
#define ASSERT_ROOMTYPE(type) assert((type == TitleRoom) || (type == GroupRoom) || (type == StagingRoom))
|
|
#define ASSERT_MESSAGETYPE(type) assert((type == NormalMessage) || (type == ActionMessage) || (type == NoticeMessage))
|
|
|
|
#define ROOM (connection->rooms[roomType])
|
|
#define ROOM_W (connection->rooms_W[roomType])
|
|
#define ROOMS (connection->rooms)
|
|
#define NAME (connection->names[roomType])
|
|
#define NAME_W (connection->names_W[roomType])
|
|
#define NAMES (connection->names)
|
|
#define IN_ROOM (connection->inRoom[roomType])
|
|
#define ENTERING_ROOM (connection->enteringRoom[roomType])
|
|
|
|
#define strzcpy(dest, src, len) { strncpy(dest, src, (len)); (dest)[(len) - 1] = '\0'; }
|
|
#define strzcat(dest, src, len) { strncat(dest, src, (len) - strlen(dest)); (dest)[(len) - 1] = '\0'; }
|
|
|
|
#if defined(_PS3)
|
|
#define PEERCBType void* // Note: ANSI function pointers should int rather than void*
|
|
#else
|
|
#define PEERCBType int // Note: ANSI function pointers should int rather than void*
|
|
#endif
|
|
|
|
/**********
|
|
** TYPES **
|
|
**********/
|
|
typedef struct piConnection
|
|
{
|
|
// Chat.
|
|
////////
|
|
CHAT chat; // The chat connection.
|
|
char nick[PI_NICK_MAX_LEN]; // The local nick.
|
|
PEERBool connecting;
|
|
PEERBool connected;
|
|
peerNickErrorCallback nickErrorCallback;
|
|
gsi_time lastChatPing;
|
|
|
|
// Game.
|
|
////////
|
|
unsigned int publicIP;
|
|
unsigned int privateIP;
|
|
int profileID;
|
|
char title[PI_TITLE_MAX_LEN];
|
|
|
|
#ifdef GSI_UNICODE
|
|
unsigned short title_W[PI_TITLE_MAX_LEN];
|
|
unsigned short nick_W[PI_NICK_MAX_LEN];
|
|
unsigned short names_W[NumRooms][PI_NAME_MAX_LEN];
|
|
unsigned short rooms_W[NumRooms][PI_ROOM_MAX_LEN];
|
|
#endif
|
|
|
|
// Rooms.
|
|
/////////
|
|
char rooms[NumRooms][PI_ROOM_MAX_LEN];
|
|
PEERBool enteringRoom[NumRooms];
|
|
PEERBool inRoom[NumRooms];
|
|
char names[NumRooms][PI_NAME_MAX_LEN];
|
|
int oldFlags[NumRooms];
|
|
int groupID;
|
|
char titleRoomChannel[PI_ROOM_MAX_LEN];
|
|
PEERBool stayInTitleRoom;
|
|
|
|
// Players.
|
|
///////////
|
|
HashTable players;
|
|
int numPlayers[NumRooms];
|
|
PEERBool alwaysRequestPlayerInfo;
|
|
|
|
// Ping.
|
|
////////
|
|
PEERBool doPings;
|
|
int lastPingTimeMod;
|
|
PEERBool pingRoom[NumRooms];
|
|
PEERBool xpingRoom[NumRooms];
|
|
HashTable xpings;
|
|
unsigned int lastXpingSend;
|
|
|
|
// Reporting.
|
|
/////////////
|
|
qr2_t queryReporting;
|
|
char qrSecretKey[64]; // i ripped the length from qr2.c
|
|
PEERBool natNegotiate;
|
|
int reportingOptions;
|
|
int reportingGroupID; // might be different than groupID if left group room after started reporting
|
|
|
|
// Hosting.
|
|
///////////
|
|
PEERBool hosting;
|
|
PEERBool playing;
|
|
int maxPlayers;
|
|
PEERBool passwordedRoom;
|
|
|
|
// Staging room.
|
|
////////////////
|
|
SBServer hostServer;
|
|
PEERBool ready;
|
|
|
|
// SB.
|
|
//////
|
|
char sbName[PI_SB_LEN];
|
|
char sbSecretKey[PI_SB_LEN];
|
|
int sbGameVersion;
|
|
int sbMaxUpdates;
|
|
PEERBool sbInitialized;
|
|
SBServerList gameList;
|
|
SBServerList groupList;
|
|
SBQueryEngine gameEngine;
|
|
peerListingGamesCallback gameListCallback;
|
|
void * gameListParam;
|
|
PEERBool initialGameList;
|
|
struct piOperation * listingGroupsOperation;
|
|
|
|
// ID.
|
|
//////
|
|
int nextID;
|
|
|
|
// Operations.
|
|
//////////////
|
|
DArray operationList;
|
|
int operationsStarted;
|
|
int operationsFinished;
|
|
|
|
// Callbacks.
|
|
/////////////
|
|
PEERCallbacks callbacks;
|
|
DArray callbackList;
|
|
int callbacksQueued;
|
|
int callbacksCalled;
|
|
int callbackDepth;
|
|
|
|
// Away.
|
|
////////
|
|
PEERBool away;
|
|
char awayReason[PI_AWAY_MAX_LEN];
|
|
|
|
// Keys.
|
|
////////
|
|
HashTable globalWatchKeys[NumRooms];
|
|
HashTable roomWatchKeys[NumRooms];
|
|
HashTable globalWatchCache;
|
|
HashTable roomWatchCache[NumRooms];
|
|
|
|
// AutoMatch.
|
|
/////////////
|
|
PEERAutoMatchStatus autoMatchStatus;
|
|
SBServerList autoMatchList;
|
|
SBQueryEngine autoMatchEngine;
|
|
PEERBool autoMatchBrowsing;
|
|
struct piOperation * autoMatchOperation;
|
|
qr2_t autoMatchReporting;
|
|
char * autoMatchFilter;
|
|
PEERBool autoMatchSBFailed;
|
|
PEERBool autoMatchQRFailed;
|
|
|
|
// Misc.
|
|
////////
|
|
PEERBool disconnect;
|
|
PEERBool shutdown;
|
|
} piConnection;
|
|
|
|
void piSendChannelUTM(PEER peer, const char * channel, const char * command, const char * parameters, PEERBool authenticate);
|
|
void piSendPlayerUTM(PEER peer, const char * nick, const char * command, const char * parameters, PEERBool authenticate);
|
|
PEERBool piConnectTitle(PEER peer);
|
|
void piDisconnectTitle(PEER peer);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|