* Clears out the connection list and kills any connections left.
*
*/
-faim_internal void aim_connrst(struct aim_session_t *sess)
+static void aim_connrst(struct aim_session_t *sess)
{
faim_mutex_init(&sess->connlistlock);
if (sess->connlist) {
* Allocate a new empty connection structure.
*
*/
-faim_internal struct aim_conn_t *aim_conn_getnext(struct aim_session_t *sess)
+static struct aim_conn_t *aim_conn_getnext(struct aim_session_t *sess)
{
struct aim_conn_t *newconn, *cur;
break;
}
faim_mutex_unlock(&sess->connlistlock);
+
+ return cur;
+}
+
+faim_export struct aim_conn_t *aim_getconn_type_all(struct aim_session_t *sess,
+ int type)
+{
+ struct aim_conn_t *cur;
+
+ faim_mutex_lock(&sess->connlistlock);
+ for (cur = sess->connlist; cur; cur = cur->next) {
+ if (cur->type == type)
+ break;
+ }
+ faim_mutex_unlock(&sess->connlistlock);
+
+ return cur;
+}
+
+/* If you pass -1 for the fd, you'll get what you ask for. Gibberish. */
+faim_export struct aim_conn_t *aim_getconn_fd(struct aim_session_t *sess,
+ int fd)
+{
+ struct aim_conn_t *cur;
+
+ faim_mutex_lock(&sess->connlistlock);
+ for (cur = sess->connlist; cur; cur = cur->next) {
+ if (cur->fd == fd)
+ break;
+ }
+ faim_mutex_unlock(&sess->connlistlock);
+
return cur;
}
conn->priv = src->priv;
conn->lastactivity = src->lastactivity;
conn->forcedlatency = src->forcedlatency;
+ conn->sessv = src->sessv;
/* clone handler list */
for (cur = src->handlerlist; cur; cur = cur->next) {
return NULL;
faim_mutex_lock(&connstruct->active);
-
+
+ connstruct->sessv = (void *)sess;
connstruct->type = type;
if (!dest) { /* just allocate a struct */
sess->snac_nextid = 0x00000001;
sess->flags = 0;
- sess->debug = 0;
+ sess->debug = debuglevel;
sess->debugcb = defaultdebugcb;
sess->modlistv = NULL;
/*
* Register all the modules for this session...
*/
+ aim__registermodule(sess, misc_modfirst); /* load the catch-all first */
aim__registermodule(sess, buddylist_modfirst);
aim__registermodule(sess, admin_modfirst);
aim__registermodule(sess, bos_modfirst);
aim__registermodule(sess, search_modfirst);
aim__registermodule(sess, stats_modfirst);
aim__registermodule(sess, auth_modfirst);
+ aim__registermodule(sess, msg_modfirst);
+ aim__registermodule(sess, chatnav_modfirst);
+ aim__registermodule(sess, chat_modfirst);
+ aim__registermodule(sess, locate_modfirst);
+ aim__registermodule(sess, general_modfirst);
return;
}
fd_set fds, wfds;
struct timeval tv;
int res, error = ETIMEDOUT;
- rxcallback_t userfunc;
+ aim_rxcallback_t userfunc;
if (!conn || (conn->fd == -1))
return -1;
return 0;
}
+faim_export struct aim_session_t *aim_conn_getsess(struct aim_conn_t *conn)
+{
+
+ if (!conn)
+ return NULL;
+
+ return (struct aim_session_t *)conn->sessv;
+}
+
/*
* aim_logoff()
*