📄 aim.h
字号:
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 + -