⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aim.h

📁 oscar message protocol stack
💻 H
📖 第 1 页 / 共 4 页
字号:
	void *data;	time_t addtime;	struct aim_msgcookie_s *next;} aim_msgcookie_t;/* * AIM Session: The main client-data interface.   * */typedef struct aim_session_s {	/* ---- Client Accessible ------------------------ */	/* Our screen name. */	char sn[MAXSNLEN+1];	/*	 * Pointer to anything the client wants to 	 * explicitly associate with this session.	 *	 * This is for use in the callbacks mainly. In any	 * callback, you can access this with sess->aux_data.	 *	 */	void *aux_data;	/* ---- Internal Use Only ------------------------ */	/* Connection information */	aim_conn_t *connlist;	/*	 * Transmit/receive queues.	 *	 * These are only used when you don't use your own lowlevel	 * I/O.  I don't suggest that you use libfaim's internal I/O.	 * Its really bad and the API/event model is quirky at best.	 *  	 */	aim_frame_t *queue_outgoing;	aim_frame_t *queue_incoming; 	/*	 * Tx Enqueuing function.	 *	 * This is how you override the transmit direction of libfaim's	 * internal I/O.  This function will be called whenever it needs	 * to send something.	 *	 */	int (*tx_enqueue)(struct aim_session_s *, aim_frame_t *);	void *modlistv;	struct {		char server[128];		char username[128];		char password[128];	} socksproxy;	bool nonblocking;	int debug;	void (*debugcb)(struct aim_session_s *sess, int level, const char *format, va_list va); /* same as faim_debugging_callback_t */	/*	 * Outstanding snac handling 	 *	 * XXX: Should these be per-connection? -mid	 */	void *snac_hash[FAIM_SNAC_HASH_SIZE];	aim_snacid_t snacid_next;	aim_msgcookie_t *msgcookies;	struct aim_icq_info *icq_info;	struct aim_oft_info *oft_info;	struct aim_authresp_info *authinfo;	struct aim_emailinfo *emailinfo;	struct {		struct aim_userinfo_s *userinfo;		struct userinfo_node *torequest;		struct userinfo_node *requested;		int waiting_for_response;	} locate;	/* Server-stored information (ssi) */	struct {		int received_data;		fu16_t numitems;		struct aim_ssi_item *official;		struct aim_ssi_item *local;		struct aim_ssi_tmp *pending;		time_t timestamp;		int waiting_for_ack;	} ssi;} aim_session_t;/* Valid for calling aim_icq_setstatus() and for aim_userinfo_t->icqinfo.status */#define AIM_ICQ_STATE_NORMAL			0x00000000#define AIM_ICQ_STATE_AWAY				0x00000001#define AIM_ICQ_STATE_DND				0x00000002#define AIM_ICQ_STATE_OUT				0x00000004#define AIM_ICQ_STATE_BUSY				0x00000010#define AIM_ICQ_STATE_CHAT				0x00000020#define AIM_ICQ_STATE_INVISIBLE			0x00000100#define AIM_ICQ_STATE_WEBAWARE			0x00010000#define AIM_ICQ_STATE_HIDEIP			0x00020000#define AIM_ICQ_STATE_BIRTHDAY			0x00080000#define AIM_ICQ_STATE_DIRECTDISABLED	0x00100000#define AIM_ICQ_STATE_ICQHOMEPAGE		0x00200000#define AIM_ICQ_STATE_DIRECTREQUIREAUTH	0x10000000#define AIM_ICQ_STATE_DIRECTCONTACTLIST	0x20000000/* * Get command from connections * * aim_get_commmand() is the libfaim lowlevel I/O in the receive direction. * XXX Make this easily overridable. * */faim_export int aim_get_command(aim_session_t *, aim_conn_t *);/* * Dispatch commands that are in the rx queue. */faim_export void aim_rxdispatch(aim_session_t *);faim_export int aim_debugconn_sendconnect(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_logoff(aim_session_t *);#if !defined(FAIM_INTERNAL) || defined(FAIM_INTERNAL_INSANE)/* the library should never call aim_conn_kill */faim_export void aim_conn_kill(aim_session_t *sess, aim_conn_t **deadconn);#endiftypedef int (*aim_rxcallback_t)(aim_session_t *, aim_frame_t *, ...);/* auth.c */struct aim_clientrelease {	char *name;	fu32_t build;	char *url;	char *info;};struct aim_authresp_info {	char *sn;	fu16_t errorcode;	char *errorurl;	fu16_t regstatus;	char *email;	char *bosip;	fu16_t cookielen;	fu8_t *cookie;	char *chpassurl;	struct aim_clientrelease latestrelease;	struct aim_clientrelease latestbeta;};/* Callback data for redirect. */struct aim_redirect_data {	fu16_t group;	const char *ip;	fu16_t cookielen;	const fu8_t *cookie;	struct { /* group == AIM_CONN_TYPE_CHAT */		fu16_t exchange;		const char *room;		fu16_t instance;	} chat;};faim_export int aim_clientready(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_sendflapver(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_request_login(aim_session_t *sess, aim_conn_t *conn, const char *sn);faim_export int aim_send_login(aim_session_t *, aim_conn_t *, const char *, const char *, struct client_info_s *, const char *key);faim_export void aim_purge_rxqueue(aim_session_t *);faim_export void aim_cleansnacs(aim_session_t *, int maxage);#define AIM_TX_QUEUED    0 /* default */#define AIM_TX_IMMEDIATE 1#define AIM_TX_USER      2faim_export int aim_tx_setenqueue(aim_session_t *sess, int what, int (*func)(aim_session_t *, aim_frame_t *));faim_export int aim_tx_flushqueue(aim_session_t *);faim_export void aim_tx_purgequeue(aim_session_t *);faim_export int aim_conn_setlatency(aim_conn_t *conn, int newval);faim_export int aim_conn_addhandler(aim_session_t *, aim_conn_t *conn, fu16_t family, fu16_t type, aim_rxcallback_t newhandler, fu16_t flags);faim_export int aim_clearhandlers(aim_conn_t *conn);faim_export aim_conn_t *aim_conn_findbygroup(aim_session_t *sess, fu16_t group);faim_export aim_session_t *aim_conn_getsess(aim_conn_t *conn);faim_export void aim_conn_close(aim_conn_t *deadconn);faim_export aim_conn_t *aim_newconn(aim_session_t *, int type, const char *dest);faim_export aim_conn_t *aim_select(aim_session_t *, struct timeval *, int *);faim_export int aim_conn_in_sess(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_conn_isready(aim_conn_t *);faim_export int aim_conn_setstatus(aim_conn_t *, int);faim_export int aim_conn_completeconnect(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_conn_isconnecting(aim_conn_t *conn);typedef void (*faim_debugging_callback_t)(aim_session_t *sess, int level, const char *format, va_list va);faim_export int aim_setdebuggingcb(aim_session_t *sess, faim_debugging_callback_t);faim_export void aim_session_init(aim_session_t *, bool nonblocking, int debuglevel);faim_export void aim_session_kill(aim_session_t *);faim_export void aim_setupproxy(aim_session_t *sess, const char *server, const char *username, const char *password);faim_export aim_conn_t *aim_getconn_type(aim_session_t *, int type);faim_export aim_conn_t *aim_getconn_type_all(aim_session_t *, int type);faim_export aim_conn_t *aim_getconn_fd(aim_session_t *, int fd);/* 0x0001 - service.c */faim_export int aim_srv_setavailmsg(aim_session_t *sess, char *msg);faim_export int aim_srv_setidle(aim_session_t *sess, fu32_t idletime);/* misc.c */#define AIM_VISIBILITYCHANGE_PERMITADD    0x05#define AIM_VISIBILITYCHANGE_PERMITREMOVE 0x06#define AIM_VISIBILITYCHANGE_DENYADD      0x07#define AIM_VISIBILITYCHANGE_DENYREMOVE   0x08#define AIM_PRIVFLAGS_ALLOWIDLE           0x01#define AIM_PRIVFLAGS_ALLOWMEMBERSINCE    0x02#define AIM_WARN_ANON                     0x01faim_export int aim_sendpauseack(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_nop(aim_session_t *, aim_conn_t *);faim_export int aim_flap_nop(aim_session_t *sess, aim_conn_t *conn);faim_export int aim_bos_changevisibility(aim_session_t *, aim_conn_t *, int, const char *);faim_export int aim_bos_setgroupperm(aim_session_t *, aim_conn_t *, fu32_t mask);faim_export int aim_bos_setprivacyflags(aim_session_t *, aim_conn_t *, fu32_t);faim_export int aim_reqpersonalinfo(aim_session_t *, aim_conn_t *);faim_export int aim_reqservice(aim_session_t *, aim_conn_t *, fu16_t);faim_export int aim_bos_reqrights(aim_session_t *, aim_conn_t *);faim_export int aim_setextstatus(aim_session_t *sess, fu32_t status);#define AIM_CLIENTTYPE_UNKNOWN  0x0000#define AIM_CLIENTTYPE_MC       0x0001#define AIM_CLIENTTYPE_WINAIM   0x0002#define AIM_CLIENTTYPE_WINAIM41 0x0003#define AIM_CLIENTTYPE_AOL_TOC  0x0004faim_export fu16_t aim_im_fingerprint(const fu8_t *msghdr, int len);#define AIM_RATE_CODE_CHANGE     0x0001#define AIM_RATE_CODE_WARNING    0x0002#define AIM_RATE_CODE_LIMIT      0x0003#define AIM_RATE_CODE_CLEARLIMIT 0x0004faim_export int aim_ads_requestads(aim_session_t *sess, aim_conn_t *conn);/* im.c */#define AIM_OFT_SUBTYPE_SEND_FILE	0x0001#define AIM_OFT_SUBTYPE_SEND_DIR	0x0002#define AIM_OFT_SUBTYPE_GET_FILE	0x0011#define AIM_OPT_SUBTYPE_GET_LIST	0x0012#define AIM_TRANSFER_DENY_NOTSUPPORTED	0x0000#define AIM_TRANSFER_DENY_DECLINE	0x0001#define AIM_TRANSFER_DENY_NOTACCEPTING	0x0002#define AIM_IMPARAM_FLAG_CHANMSGS_ALLOWED	0x00000001#define AIM_IMPARAM_FLAG_MISSEDCALLS_ENABLED	0x00000002/* This is what the server will give you if you don't set them yourself. */#define AIM_IMPARAM_DEFAULTS { \	0, \	AIM_IMPARAM_FLAG_CHANMSGS_ALLOWED | AIM_IMPARAM_FLAG_MISSEDCALLS_ENABLED, \	512, /* !! Note how small this is. */ \	(99.9)*10, (99.9)*10, \	1000 /* !! And how large this is. */ \}/* This is what most AIM versions use. */#define AIM_IMPARAM_REASONABLE { \	0, \	AIM_IMPARAM_FLAG_CHANMSGS_ALLOWED | AIM_IMPARAM_FLAG_MISSEDCALLS_ENABLED, \	8000, \	(99.9)*10, (99.9)*10, \	0 \}struct aim_icbmparameters {	fu16_t maxchan;	fu32_t flags; /* AIM_IMPARAM_FLAG_ */	fu16_t maxmsglen; /* message size that you will accept */	fu16_t maxsenderwarn; /* this and below are *10 (999=99.9%) */	fu16_t maxrecverwarn;	fu32_t minmsginterval; /* in milliseconds? */};struct aim_chat_roominfo {	fu16_t exchange;	char *name;	fu16_t instance;};#define AIM_IMFLAGS_AWAY				0x0001 /* mark as an autoreply */#define AIM_IMFLAGS_ACK					0x0002 /* request a receipt notice */#define AIM_IMFLAGS_BUDDYREQ			0x0010 /* buddy icon requested */#define AIM_IMFLAGS_HASICON				0x0020 /* already has icon */#define AIM_IMFLAGS_SUBENC_MACINTOSH	0x0040 /* damn that Steve Jobs! */#define AIM_IMFLAGS_CUSTOMFEATURES 		0x0080 /* features field present */#define AIM_IMFLAGS_EXTDATA				0x0100#define AIM_IMFLAGS_X					0x0200#define AIM_IMFLAGS_MULTIPART			0x0400 /* ->mpmsg section valid */#define AIM_IMFLAGS_OFFLINE				0x0800 /* send to offline user */#define AIM_IMFLAGS_TYPINGNOT			0x1000 /* typing notification */#define AIM_CHARSET_ASCII		0x0000#define AIM_CHARSET_UNICODE	0x0002 /* UCS-2BE */#define AIM_CHARSET_CUSTOM	0x0003/* * Multipart message structures. */typedef struct aim_mpmsg_section_s {	fu16_t charset;	fu16_t charsubset;	fu8_t *data;	fu16_t datalen;	struct aim_mpmsg_section_s *next;} aim_mpmsg_section_t;typedef struct aim_mpmsg_s {	int numparts;	aim_mpmsg_section_t *parts;} aim_mpmsg_t;faim_export int aim_mpmsg_init(aim_session_t *sess, aim_mpmsg_t *mpm);faim_export int aim_mpmsg_addraw(aim_session_t *sess, aim_mpmsg_t *mpm, fu16_t charset, fu16_t charsubset, const fu8_t *data, fu16_t datalen);faim_export int aim_mpmsg_addascii(aim_session_t *sess, aim_mpmsg_t *mpm, const char *ascii);faim_export int aim_mpmsg_addunicode(aim_session_t *sess, aim_mpmsg_t *mpm, const fu16_t *unicode, fu16_t unicodelen);faim_export void aim_mpmsg_free(aim_session_t *sess, aim_mpmsg_t *mpm);/* * Arguments to aim_send_im_ext(). * * This is really complicated.  But immensely versatile. * */struct aim_sendimext_args {	/* These are _required_ */	const char *destsn;	fu32_t flags; /* often 0 */	/* Only required if not using multipart messages */	const char *msg;	int msglen;	/* Required if ->msg is not provided */	aim_mpmsg_t *mpmsg;	/* Only used if AIM_IMFLAGS_HASICON is set */	fu32_t iconlen;	time_t iconstamp;	fu32_t iconsum;	/* Only used if AIM_IMFLAGS_CUSTOMFEATURES is set */	fu8_t *features;	fu8_t featureslen;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -