Chat-O-Matic/libs/libimcomm/imcomm.h

312 lines
6.4 KiB
C

/** _
** (_)_ __ __ ___ _ __ _ __
** | | ' \/ _/ _ \ ' \| ' \
** |_|_|_|_\__\___/_|_|_|_|_|_|
**
** Copyright (C) 2003-2005, Claudio Leite
** All rights reserved.
**
** Please see the file 'COPYING' for licensing information.
**/
#ifndef IMCOMM_H
#define IMCOMM_H
#ifdef PLAN9
#define _POSIX_SOURCE
#define _BSD_EXTENSION
#define _POSIX_EXTENSION
#include <errno.h>
/**
** On 386, this is correct. This may not be
** correct on other architectures.
**/
#define uint32_t unsigned long
#define uint16_t unsigned short
#define uint8_t unsigned char
#define int32_t long
#endif
#include <stdio.h>
#include <stdlib.h>
#ifdef _MSC_VER
#define snprintf _snprintf
#else
#include <unistd.h>
#endif
#if defined(WATCOM_WIN32) || defined(_MSC_VER)
#define __MINGW32__ /* works for now */
#endif
#ifdef MACINTOSH_CLASSIC
#include <Types.h>
#include <MacTCP.h>
#include <AddressXlation.h>
#include <time.h>
#else
#ifndef __MINGW32__
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#ifndef __BEOS__
#include <arpa/inet.h>
#endif
#include <netdb.h>
#else
#include <winsock.h>
#ifdef _MSC_VER
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
#else
#include <stdint.h>
#endif
#include <time.h>
#endif
#endif
#ifdef __BEOS__
#include <inttypes.h>
#endif
#define MD5_LOGIN
#ifdef MACINTOSH_CLASSIC
typedef void fd_set;
typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
char *strdup(char *);
char *strcasecmp(char *, char *);
void mactcp_close(void *handle);
OSErr mactcp_recv(void *handle, char *inbuf, size_t len);
#endif
#ifdef __AMIGA__
#define uint32_t u_int32_t
#define uint16_t u_int16_t
#define uint8_t u_int8_t
#endif
/*
* Read the whole packet at once rather than one byte at a time.
*
* This is necessary for DOS, but all other platforms seem to be OK with reading
* one byte at a time.
*
* UPDATED 0.80: I'm making this the default. I have yet to see an instance
* where this is unacceptable, but yet I've seen plenty of occasions where
* not having it slows old machines down considerably.
*
* Full packet may be frustrating on slow connections?
*/
#define FULL_PACKET_AT_ONCE
#ifndef __DJGPP__
#define IMCOMM_KEEPALIVE
#endif
#define NO_AUTO_IDLE
#ifdef linux
#include <time.h>
#endif
#if defined(__APPLE__) || defined(linux)
#include <stdint.h>
#endif
#include <string.h>
#include <ctype.h>
#define HOST_BIG_ENDIAN 0
#define HOST_LITTLE_ENDIAN 1
#ifdef __DJGPP__
#ifndef __dj_stdint__h_
typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
#endif
#endif
typedef int IMCOMM_RET;
#define IMCOMM_RET_ERROR -1
#define IMCOMM_RET_OK 1
#define NUM_CALLBACKS 11
enum {
IMCOMM_IM_SIGNON,
IMCOMM_IM_SIGNOFF,
IMCOMM_IM_BUDDYAWAY,
IMCOMM_IM_BUDDYUNAWAY,
IMCOMM_IM_IDLEINFO,
IMCOMM_IM_INCOMING,
IMCOMM_IM_PROFILE,
IMCOMM_IM_AWAYMSG,
IMCOMM_ERROR,
IMCOMM_FORMATTED_SN,
IMCOMM_HANDLE_DELETED
};
enum {
PROXY_TYPE_NONE,
PROXY_TYPE_HTTPS,
PROXY_TYPE_SOCKS5
};
enum {
PROXY_ERROR_AUTH,
PROXY_ERROR_CONNECT,
PROXY_ERROR_PROXYCONNECT,
PROXY_ERROR_UNKNOWN
};
enum {
IMCOMM_ERROR_DISCONNECTED,
IMCOMM_STATUS_CONNECTED,
IMCOMM_ERROR_INVALID_LOGIN,
IMCOMM_ERROR_OTHER_SIGNON,
IMCOMM_STATUS_AUTHDONE,
IMCOMM_RATE_LIMIT_WARN,
IMCOMM_WARN_PAUSE,
IMCOMM_WARN_UNPAUSE,
IMCOMM_STATUS_MIGRATIONDONE,
IMCOMM_ERROR_USER_OFFLINE,
IMCOMM_ERROR_PROXY
};
#ifdef SEND_QUEUES
typedef struct IMCommSendQ {
unsigned char *data;
size_t len;
int updateidle;
uint8_t channel;
struct IMCommSendQ *next;
} send_q;
#endif
typedef struct IMComm {
#ifdef MACINTOSH_CLASSIC
StreamPtr s;
int readable;
#endif
#ifdef __MINGW32__
WSADATA wsadata;
SOCKET socket;
#else
int socket;
#endif
#ifdef MD5_LOGIN
char *sn;
char *pw;
#endif
int proxymode;
char *proxyserver;
uint16_t proxyport;
uint16_t oscarport;
unsigned char header[6];
uint8_t header_pos;
unsigned char *data;
uint16_t data_pos;
uint16_t data_len;
int connected;
int srv_pause;
int to_delete;
uint16_t seqnum;
uint32_t snacreq;
uint16_t max_profile_len;
uint16_t max_capabilities;
uint16_t max_buddylist_size;
uint16_t max_num_watchers;
uint16_t max_online_notifications;
uint16_t max_message_size;
uint16_t max_sender_warning;
uint16_t max_receiver_warning;
uint16_t max_message_interval;
uint16_t max_visible_list_size;
uint16_t max_invisible_list_size;
/* void (*callbacks[NUM_CALLBACKS]) (void *,...); */
void (*callbacks[NUM_CALLBACKS]) ();
struct IMComm_Families *families;
int num_families;
struct IMComm_BuddyList *buddylist;
struct IMComm_BuddyList *buddies_online;
int isidle;
int isaway;
int isinvisible;
long last_operation_time;
unsigned char *profile_str;
unsigned char *away_msg;
#ifdef IMCOMM_KEEPALIVE
long last_keepalive_time;
#endif
#ifdef SEND_QUEUES
send_q *s_queue;
#endif
int ischild;
void *parent;
uint8_t *icondata;
uint16_t iconlen;
} IMCOMM;
typedef struct IMComm_Families {
uint16_t family;
struct IMComm_Families *next;
} IMCOMM_FAMILIES;
typedef struct IMComm_BuddyList {
char *sn;
char *formattedsn;
unsigned long idletime;
unsigned long onlinetime;
uint16_t ssi_id;
uint16_t group_id;
int isaway;
struct IMComm_BuddyList *next;
} IMCOMM_BUDDYLIST;
typedef struct IMComm_Handles {
IMCOMM *handle;
struct IMComm_Handles *next;
} IMCOMM_HANDLES;
typedef struct TLVList {
uint16_t type;
uint16_t len;
uint8_t *value;
struct TLVList *next;
} TLVLIST;
typedef struct IMComm_Packet {
unsigned char *data;
size_t len;
size_t offset;
} pkt_t;
struct MultiPacket {
int init;
uint8_t channel;
unsigned char *packet;
size_t len;
int updateidle;
struct MultiPacket *next;
};
#include "protos.h"
#include "byteswap.h"
#endif