From: mid Date: Fri, 9 Feb 2001 22:35:14 +0000 (+0000) Subject: - Fri Feb 9 22:31:22 UTC 2001 X-Git-Tag: rel_0_99_2~75 X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/commitdiff_plain/b8c79ca7b4152e23512fe24eeef52ae3d4cda417 - Fri Feb 9 22:31:22 UTC 2001 - Add aim_tx_setenqueue(). --- diff --git a/CHANGES b/CHANGES index b46ed5b..fe46a5d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ No release numbers ------------------ + - Fri Feb 9 22:31:22 UTC 2001 + - Add aim_tx_setenqueue(). + - Thu Feb 8 20:12:39 UTC 2001 - Let TLV functions out of aim.h if FAIM_NEED_TLV is defined. diff --git a/aim_conn.c b/aim_conn.c index 944708e..d8a8e21 100644 --- a/aim_conn.c +++ b/aim_conn.c @@ -739,7 +739,7 @@ faim_export void aim_session_init(struct aim_session_t *sess, unsigned long flag * This must always be set. Default to the queue-based * version for back-compatibility. */ - sess->tx_enqueue = &aim_tx_enqueue__queuebased; + aim_tx_setenqueue(sess, AIM_TX_QUEUED, NULL); return; } diff --git a/aim_txqueue.c b/aim_txqueue.c index 3a12757..23ef74f 100644 --- a/aim_txqueue.c +++ b/aim_txqueue.c @@ -75,8 +75,7 @@ faim_internal struct command_tx_struct *aim_tx_new(unsigned char framing, int ch * that is, when sess->tx_enqueue is set to &aim_tx_enqueue__queuebased. * */ -faim_internal int aim_tx_enqueue__queuebased(struct aim_session_t *sess, - struct command_tx_struct *newpacket) +static int aim_tx_enqueue__queuebased(struct aim_session_t *sess, struct command_tx_struct *newpacket) { struct command_tx_struct *cur; @@ -127,7 +126,7 @@ faim_internal int aim_tx_enqueue__queuebased(struct aim_session_t *sess, * right here. * */ -faim_internal int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct command_tx_struct *newpacket) +static int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct command_tx_struct *newpacket) { if (newpacket->conn == NULL) { faimdprintf(1, "aim_tx_enqueue: ERROR: packet has no connection\n"); @@ -152,6 +151,25 @@ faim_internal int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct c return 0; } +faim_export int aim_tx_setenqueue(struct aim_session_t *sess, int what, int (*func)(struct aim_session_t *, struct command_tx_struct *)) +{ + if (!sess) + return -1; + + if (what == AIM_TX_QUEUED) + sess->tx_enqueue = &aim_tx_enqueue__queuebased; + else if (what == AIM_TX_IMMEDIATE) + sess->tx_enqueue = &aim_tx_enqueue__immediate; + else if (what == AIM_TX_USER) { + if (!func) + return -1; + sess->tx_enqueue = func; + } else + return -1; /* unknown action */ + + return 0; +} + faim_internal int aim_tx_enqueue(struct aim_session_t *sess, struct command_tx_struct *command) { /* diff --git a/faim/aim.h b/faim/aim.h index b884dba..7d22437 100644 --- a/faim/aim.h +++ b/faim/aim.h @@ -478,14 +478,17 @@ faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct faim_internal int aim_tx_sendframe(struct aim_session_t *sess, struct command_tx_struct *cur); faim_internal unsigned int aim_get_next_txseqnum(struct aim_conn_t *); faim_internal struct command_tx_struct *aim_tx_new(unsigned char framing, int chan, struct aim_conn_t *conn, int datalen); -faim_internal int aim_tx_enqueue__queuebased(struct aim_session_t *, struct command_tx_struct *); -faim_internal int aim_tx_enqueue__immediate(struct aim_session_t *, struct command_tx_struct *); faim_internal int aim_tx_enqueue(struct aim_session_t *, struct command_tx_struct *); faim_internal int aim_tx_printqueue(struct aim_session_t *); faim_internal int aim_parse_hostonline(struct aim_session_t *sess, struct command_rx_struct *command, ...); faim_internal int aim_parse_hostversions(struct aim_session_t *sess, struct command_rx_struct *command, ...); #endif /* FAIM_INTERNAL */ +#define AIM_TX_QUEUED 0 /* default */ +#define AIM_TX_IMMEDIATE 1 +#define AIM_TX_USER 2 +faim_export int aim_tx_setenqueue(struct aim_session_t *sess, int what, int (*func)(struct aim_session_t *, struct command_tx_struct *)); + faim_export int aim_tx_flushqueue(struct aim_session_t *); faim_export void aim_tx_purgequeue(struct aim_session_t *);