Changeset e374dee for libfaim/conn.c


Ignore:
Timestamp:
Oct 10, 2003, 5:12:30 PM (18 years ago)
Author:
James M. Kretchmar <kretch@mit.edu>
Branches:
master, barnowl_perlaim, debian, owl, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
fe6f1d3
Parents:
f4d0975
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfaim/conn.c

    r862371b re374dee  
    173173         * This will free ->internal if it necessary...
    174174         */
    175         if ((*deadconn)->type == AIM_CONN_TYPE_RENDEZVOUS)
    176                 aim_conn_kill_rend(sess, *deadconn);
    177         else if ((*deadconn)->type == AIM_CONN_TYPE_CHAT)
     175        if ((*deadconn)->type == AIM_CONN_TYPE_CHAT)
    178176                aim_conn_kill_chat(sess, *deadconn);
    179177
     
    319317faim_export void aim_conn_close(aim_conn_t *deadconn)
    320318{
     319        aim_rxcallback_t userfunc;
    321320
    322321        if (deadconn->fd >= 3)
    323322                close(deadconn->fd);
     323
    324324        deadconn->fd = -1;
     325
     326        if ((userfunc = aim_callhandler(deadconn->sessv, deadconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNDEAD)))
     327                userfunc(deadconn->sessv, NULL, deadconn);
     328
    325329        if (deadconn->handlerlist)
    326330                aim_clearhandlers(deadconn);
    327         if (deadconn->type == AIM_CONN_TYPE_RENDEZVOUS)
    328                 aim_conn_close_rend((aim_session_t *)deadconn->sessv, deadconn);
    329331
    330332        return;
     
    871873        aim_initsnachash(sess);
    872874        sess->msgcookies = NULL;
     875        sess->icq_info = NULL;
     876        sess->oft_info = NULL;
    873877        sess->snacid_next = 0x00000001;
    874878
     
    880884
    881885        sess->ssi.received_data = 0;
     886        sess->ssi.numitems = 0;
     887        sess->ssi.official = NULL;
     888        sess->ssi.local = NULL;
     889        sess->ssi.pending = NULL;
     890        sess->ssi.timestamp = (time_t)0;
    882891        sess->ssi.waiting_for_ack = 0;
    883         sess->ssi.holding_queue = NULL;
    884         sess->ssi.revision = 0;
    885         sess->ssi.items = NULL;
    886         sess->ssi.timestamp = (time_t)0;
    887 
     892
     893        sess->authinfo = NULL;
    888894        sess->emailinfo = NULL;
    889895
     
    920926        aim__registermodule(sess, chatnav_modfirst);
    921927        aim__registermodule(sess, chat_modfirst);
    922         aim__registermodule(sess, newsearch_modfirst);
    923         /* missing 0x10 - 0x12 */
     928        /*      aim__registermodule(sess, odir_modfirst); */ /* kretch */
     929        /*      aim__registermodule(sess, bart_modfirst); */ /* kretch */
     930        /* missing 0x11 - 0x12 */
    924931        aim__registermodule(sess, ssi_modfirst);
    925932        /* missing 0x14 */
     
    992999faim_export int aim_conn_completeconnect(aim_session_t *sess, aim_conn_t *conn)
    9931000{
    994         fd_set fds, wfds;
    995         struct timeval tv;
    996         int res;
    997         int error = ETIMEDOUT;
    998 
    9991001        aim_rxcallback_t userfunc;
    10001002
     
    10051007                return -1;
    10061008
    1007         FD_ZERO(&fds);
    1008         FD_SET(conn->fd, &fds);
    1009         FD_ZERO(&wfds);
    1010         FD_SET(conn->fd, &wfds);
    1011         tv.tv_sec = 0;
    1012         tv.tv_usec = 0;
    1013 
    1014         if ((res = select(conn->fd+1, &fds, &wfds, NULL, &tv)) == -1) {
    1015                 error = errno;
    1016                 aim_conn_close(conn);
    1017                 errno = error;
    1018                 return -1;
    1019         } else if (res == 0) {
    1020                 faimdprintf(sess, 0, "aim_conn_completeconnect: false alarm on %d\n", conn->fd);
    1021                 return 0; /* hasn't really completed yet... */
    1022         }
    1023 
    1024         if (FD_ISSET(conn->fd, &fds) || FD_ISSET(conn->fd, &wfds)) {
    1025                 int len = sizeof(error);
    1026                 if (getsockopt(conn->fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
    1027                         error = errno;
    1028         }
    1029 
    1030         if (error) {
    1031                 aim_conn_close(conn);
    1032                 errno = error;
    1033                 return -1;
    1034         }
    1035         fcntl(conn->fd, F_SETFL, 0); /* XXX should restore original flags */
     1009        fcntl(conn->fd, F_SETFL, 0);
    10361010
    10371011        conn->status &= ~AIM_CONN_STATUS_INPROGRESS;
Note: See TracChangeset for help on using the changeset viewer.