mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
187 lines
3.9 KiB
C
187 lines
3.9 KiB
C
![]() |
/*
|
||
|
gpiPeer.h
|
||
|
GameSpy Presence SDK
|
||
|
Dan "Mr. Pants" Schoenblum
|
||
|
|
||
|
Copyright 1999-2007 GameSpy Industries, Inc
|
||
|
|
||
|
devsupport@gamespy.com
|
||
|
|
||
|
***********************************************************************
|
||
|
Please see the GameSpy Presence SDK documentation for more information
|
||
|
**********************************************************************/
|
||
|
|
||
|
#ifndef _GPIPEER_H_
|
||
|
#define _GPIPEER_H_
|
||
|
|
||
|
//INCLUDES
|
||
|
//////////
|
||
|
#include "gpi.h"
|
||
|
|
||
|
//DEFINES
|
||
|
/////////
|
||
|
// Peer states.
|
||
|
///////////////
|
||
|
#define GPI_PEER_NOT_CONNECTED 100
|
||
|
#define GPI_PEER_GETTING_SIG 101
|
||
|
#define GPI_PEER_GOT_SIG 102
|
||
|
#define GPI_PEER_CONNECTING 103
|
||
|
#define GPI_PEER_WAITING 104
|
||
|
#define GPI_PEER_CONNECTED 105
|
||
|
#define GPI_PEER_DISCONNECTED 106
|
||
|
|
||
|
// Timeout for a peer connection, in milliseconds.
|
||
|
/////////////////////////////////////////////
|
||
|
#define GPI_PEER_TIMEOUT (10 * 1000)
|
||
|
|
||
|
// Timeout for a peer operation, in milliseconds
|
||
|
////////////////////////////////////////////
|
||
|
#define GPI_PEER_OP_TIMEOUT 60000
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
GPI_PEER_OP_STATE_NONE,
|
||
|
GPI_PEER_OP_STATE_REQUESTED,
|
||
|
GPI_PEER_OP_STATE_FINISHED
|
||
|
} GPIPeerOpState;
|
||
|
|
||
|
typedef struct GPITransferID_s * GPITransferID_st;
|
||
|
|
||
|
//TYPES
|
||
|
///////
|
||
|
// A peer message.
|
||
|
//////////////////
|
||
|
typedef struct GPIMessage
|
||
|
{
|
||
|
GPIBuffer buffer;
|
||
|
int type;
|
||
|
int start;
|
||
|
} GPIMessage;
|
||
|
|
||
|
typedef struct _GPIPeerOp
|
||
|
{
|
||
|
GPIPeerOpState state;
|
||
|
void *userData;
|
||
|
GPCallback callback;
|
||
|
struct _GPIPeerOp * next;
|
||
|
int type;
|
||
|
gsi_time timeout;
|
||
|
} GPIPeerOp;
|
||
|
|
||
|
typedef struct _GPIPeerOpQueue
|
||
|
{
|
||
|
GPIPeerOp * opList;
|
||
|
GPIPeerOp * first;
|
||
|
GPIPeerOp * last;
|
||
|
} GPIPeerOpQueue;
|
||
|
|
||
|
// A peer connection.
|
||
|
/////////////////////
|
||
|
typedef struct GPIPeer_s
|
||
|
{
|
||
|
int state;
|
||
|
GPIBool initiated;
|
||
|
//SOCKET sock;
|
||
|
unsigned int ip;
|
||
|
unsigned short port;
|
||
|
GPProfile profile;
|
||
|
time_t timeout;
|
||
|
int nackCount;
|
||
|
GPIBuffer inputBuffer;
|
||
|
GPIBuffer outputBuffer;
|
||
|
DArray messages;
|
||
|
GPIPeerOpQueue peerOpQueue;
|
||
|
struct GPIPeer_s * pnext;
|
||
|
} GPIPeer;
|
||
|
|
||
|
//FUNCTIONS
|
||
|
///////////
|
||
|
GPResult
|
||
|
gpiProcessPeers(
|
||
|
GPConnection * connection
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerGetSig(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerStartConnect(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer
|
||
|
);
|
||
|
|
||
|
// NOTE: use this function when in a gp function
|
||
|
GPIPeer * gpiGetPeerByProfile(const GPConnection * connection,
|
||
|
int profileid);
|
||
|
|
||
|
// NOTE: use this function only when in a UDP layer callback
|
||
|
GPIPeer *gpiGetPeerByAddr(const GPConnection *connection,
|
||
|
unsigned int ip,
|
||
|
unsigned short port);
|
||
|
|
||
|
gsi_bool gpiIsPeerConnected(GPIPeer *peer);
|
||
|
|
||
|
GPIPeer *
|
||
|
gpiAddPeer(
|
||
|
GPConnection * connection,
|
||
|
int profileid,
|
||
|
GPIBool initiate
|
||
|
);
|
||
|
|
||
|
void
|
||
|
gpiDestroyPeer(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer
|
||
|
);
|
||
|
|
||
|
void
|
||
|
gpiRemovePeer(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerAddMessage(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer,
|
||
|
int type,
|
||
|
const char * message
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerStartTransferMessage(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer,
|
||
|
int type,
|
||
|
const struct GPITransferID_s * transferID
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerFinishTransferMessage(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer,
|
||
|
const char * message,
|
||
|
int len
|
||
|
);
|
||
|
|
||
|
GPResult
|
||
|
gpiPeerSendMessages(
|
||
|
GPConnection * connection,
|
||
|
GPIPeer * peer
|
||
|
);
|
||
|
|
||
|
void gpiPeerLeftCallback(unsigned int ip, unsigned short port, GSUdpCloseReason reason, void *userData);
|
||
|
void gpiPeerMessageCallback(unsigned int ip, unsigned short port, unsigned char *message,
|
||
|
unsigned int messageLength, gsi_bool reliable, void *userData);
|
||
|
void gpiPeerAcceptedCallback(unsigned int ip, unsigned short port,
|
||
|
GSUdpErrorCode error, gsi_bool rejected, void *userData);
|
||
|
void gpiPeerPingReplyCallback(unsigned int ip, unsigned short port, unsigned int latency, void *userData);
|
||
|
|
||
|
void gpiPeerAddOp(GPIPeer *peer, GPIPeerOp *operation);
|
||
|
void gpiPeerRemoveOp(GPIPeer *peer, GPIPeerOp *operation);
|
||
|
void gpiCheckTimedOutPeerOperations(GPConnection * connection, GPIPeer * peer);
|
||
|
#endif
|