openmohaa/code/gamespy/Chat/chatMain.h
2023-02-04 21:00:01 +01:00

133 lines
3 KiB
C

/*
GameSpy Chat SDK
Dan "Mr. Pants" Schoenblum
dan@gamespy.com
Copyright 1999-2007 GameSpy Industries, Inc
devsupport@gamespy.com
*/
#ifndef _CHATMAIN_H_
#define _CHATMAIN_H_
/*************
** INCLUDES **
*************/
#include "chat.h"
#include "chatSocket.h"
#include "chatHandlers.h"
#include "../hashtable.h"
#include "../darray.h"
#include "../md5.h"
/************
** DEFINES **
************/
#define MAX_NICK 64
#define MAX_CHAT_NICK 21
#define MAX_NAME 128
#define MAX_USER 128
#define MAX_SERVER 128
#define MAX_PARAM 512
#define MAX_SECRETKEY 128
#define MAX_EMAIL 64
#define MAX_PROFILENICK 32
#define MAX_UNIQUENICK 64
#define MAX_PASSWORD 32
#define MAX_AUTHTOKEN 256
#define MAX_PARTNERCHALLENGE 256
#define CONNECTION ciConnection * connection;\
assert(chat != NULL);\
connection = (ciConnection *)chat;\
GSI_UNUSED(connection);
#define CONNECTED if(!connection || !connection->connected) return; //ERRCON
#if 0
ciConnection * connection; // for visual assist
#endif
#define VALID_NICK_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"#$%&'()*+,-./:;<=>?@[]^_`{|}~"
#define CI_DEFAULT_SERVER_ADDRESS "peerchat." GSI_DOMAIN_NAME
#define CI_DEFUILT_SERVER_PORT 6667
/**********
** TYPES **
**********/
typedef enum
{
CINoLogin,
CIUniqueNickLogin,
CIProfileLogin,
CIPreAuthLogin
} CILoginType;
typedef struct ciConnection
{
CHATBool connected;
CHATBool connecting;
CHATBool disconnected;
chatNickErrorCallback nickErrorCallback;
chatFillInUserCallback fillInUserCallback;
chatConnectCallback connectCallback;
void * connectParam;
ciSocket chatSocket;
char nick[MAX_NICK];
char name[MAX_NAME];
char user[MAX_USER];
int namespaceID;
char email[MAX_EMAIL];
char profilenick[MAX_PROFILENICK];
char uniquenick[MAX_UNIQUENICK];
char password[MAX_PASSWORD];
char authtoken[MAX_AUTHTOKEN];
char partnerchallenge[MAX_PARTNERCHALLENGE];
#ifdef GSI_UNICODE
unsigned short nickW[MAX_NICK];
unsigned short userW[MAX_NAME];
#endif
unsigned int IP;
char server[MAX_SERVER];
int port;
chatGlobalCallbacks globalCallbacks;
HashTable channelTable;
DArray enteringChannelList;
ciServerMessageFilter * filterList;
ciServerMessageFilter * lastFilter;
int nextID;
DArray callbackList;
CHATBool quiet;
char secretKey[MAX_SECRETKEY];
CILoginType loginType;
int userID;
int profileID;
} ciConnection;
void ciSendNickAndUser(CHAT chat);
void ciSendNick(CHAT chat);
void ciSendUser(CHAT chat);
void ciSendLogin(CHAT chat);
void ciHandleDisconnect(CHAT chat, const char * reason);
int ciNickIsValid(const char* nick);
void ciNickError(CHAT chat, int type, const char * nick, int numSuggestedNicks, char ** suggestedNicks);
#define strzcpy(dest, src, len) { strncpy(dest, src, (len)); (dest)[(len) - 1] = '\0'; }
#define wcszcpy(dest, src, len) { wcsncpy(dest, src, (len)); (dest)[(len) - 1] = 0; }
#endif