ayttm-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Ayttm-commits] CVS: ayttm/modules/icq-toc/libtoc libtoc.c,1.4,1.5 libt


From: Colin Leroy <address@hidden>
Subject: [Ayttm-commits] CVS: ayttm/modules/icq-toc/libtoc libtoc.c,1.4,1.5 libtoc.h,1.3,1.4
Date: Mon, 24 Mar 2003 04:54:38 -0500

Update of /cvsroot/ayttm/ayttm/modules/icq-toc/libtoc
In directory subversions:/tmp/cvs-serv25056/modules/icq-toc/libtoc

Modified Files:
        libtoc.c libtoc.h 
Log Message:
Implement async connect
Fix status keeping online when login errors happene


Index: libtoc.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/modules/icq-toc/libtoc/libtoc.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- libtoc.c    23 Mar 2003 12:22:43 -0000      1.4
+++ libtoc.c    24 Mar 2003 09:54:36 -0000      1.5
@@ -119,9 +119,11 @@
 void (*icqtoc_complete_file_recieve)( int tag );
 void (*icqtoc_file_offer)( toc_conn * conn, char * nick, char * ip, short port,
                char * cookie, char * filename );
+void (*icqtoc_logged_in)(toc_conn *conn);
 
 
 void (*icqtoc_user_info)(toc_conn  * conn, char * user, char * message );
+static void icqtoc_signon_cb(int fd, int error, void *data);
 
 
 unsigned int get_address(char *hostname)
@@ -135,7 +137,7 @@
        return 0;
 }
 
-static int connect_address(unsigned int addy, unsigned short port)
+static int connect_address(unsigned int addy, unsigned short port, void *cb, 
void *data)
 {
        int fd;
        struct sockaddr_in sin;
@@ -144,17 +146,22 @@
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);
 
-       fd = socket(AF_INET, SOCK_STREAM, 0);
+       if (!cb) {
+               fd = socket(AF_INET, SOCK_STREAM, 0);
 
-       if (fd > -1) 
-       {
-               //quad_addr=strdup(inet_ntoa(sin.sin_addr));
-               if (proxy_connect(fd, (struct sockaddr *)&sin, sizeof(sin)) > 
-1) 
+               if (fd > -1) 
                {
-                       return fd;
+                       //quad_addr=strdup(inet_ntoa(sin.sin_addr));
+                       if (proxy_connect(fd, (struct sockaddr *)&sin, 
sizeof(sin),NULL,NULL) > -1) 
+                       {
+                               return fd;
+                       }
                }
+               return -1;
+       } else {
+               proxy_connect(-1, (struct sockaddr *)&sin, sizeof(sin), cb, 
data);
+               return 1;
        }
-       return -1;
 }
 
 static char char_decode( char c )
@@ -544,7 +551,7 @@
                char * cookie2 = base64_decode(cookie);
                int i;
                
-               for( i = 0; (fd = connect_address( inet_addr(ip), port )) <= 0 
&& i < 10; i++ );
+               for( i = 0; (fd = connect_address( inet_addr(ip), port 
,NULL,NULL)) <= 0 && i < 10; i++ );
 
                
 if(DEBUG)
@@ -1119,7 +1126,7 @@
                {
                        strncpy(url, &buff[i], 1024);
                }
-               fd = connect_address( get_address(conn->server), conn->port);
+               fd = connect_address( get_address(conn->server), 
conn->port,NULL,NULL);
                g_snprintf(http_req, 1024, "GET /%s HTTP/1.0\n\n", url);
                write(fd, http_req, strlen(http_req));
 
@@ -1140,6 +1147,9 @@
        else if(!strcmp(c, "ERROR"))
        {
                icqtoc_error_message(parse_error(buff+6));
+               if (atoi(buff+6) > 979) {
+                       icqtoc_disconnect(conn);
+               }
        }
 
 if(DEBUG)
@@ -1163,29 +1173,14 @@
 
 
 
-toc_conn * icqtoc_signon( char * username, char * password,
+void icqtoc_signon( char * username, char * password,
                    char * server, short port, char * tinfo )
 {
-       fd_set fs;
        toc_conn * conn = g_new0(toc_conn, 1);
-       char *flap_result=NULL;
-
-       /*
-        *     4 byte FLAP version (1)
-        *     2 byte TLV Tag (1)
-        */
-
-       char sflap_header[] = {0,0,0,1,0,1};
-
-       char buff[2048];
-
-
-       char * normalized_username = icq_normalize(username);
-       unsigned short username_length = htons(strlen(normalized_username));
-//     char * c;
-
-       flap_header fh;
 
+       conn->username = strdup(username);
+       conn->password = strdup(password);
+       
         // HACK ALERT begin user info hack
         info=strdup(tinfo);
         // end hack (user info)
@@ -1194,12 +1189,27 @@
        conn->port = port;
 
 
-       conn->fd = connect_address(get_address(server), port);
+       connect_address(get_address(server), port,icqtoc_signon_cb, conn);
+       
+}
 
-       if ( conn->fd <= 0 )
+static void icqtoc_signon_cb(int fd, int error, void *data)
+{
+       fd_set fs;
+       toc_conn *conn = (toc_conn *)data;
+       char *flap_result=NULL;
+       char *norm_username = icq_normalize(conn->username);
+       unsigned short username_length = htons(strlen(norm_username));
+       char sflap_header[] = {0,0,0,1,0,1};
+       char buff[2048];
+       flap_header fh;
+
+       conn->fd=fd;
+       
+       if ( conn->fd < 0 || error)
        {
                g_free(conn);
-               return NULL;
+               icqtoc_logged_in(NULL);
        }
 
        /* Client sends "FLAPON\r\n\r\n" */
@@ -1219,7 +1229,7 @@
        else
        {
                fprintf(stderr, "Error!  get_flap failed\n");
-               return NULL;
+               icqtoc_logged_in(NULL);
        }
 
        buff[10] = 0;
@@ -1230,14 +1240,14 @@
        fh.ast = '*';
        fh.type = 1;
        fh.seq = htons(conn->seq_num++);
-       fh.len = htons((short)(strlen(normalized_username)+8));
+       fh.len = htons((short)(strlen(norm_username)+8));
 
        memcpy(buff, &fh, sizeof(flap_header));
        memcpy(buff+6, sflap_header, 6);
        memcpy(buff+12,&username_length,2);
-       memcpy(buff+14,normalized_username, strlen(normalized_username));
+       memcpy(buff+14,norm_username, strlen(norm_username));
 
-       write(conn->fd, buff, strlen(normalized_username)+14);
+       write(conn->fd, buff, strlen(norm_username)+14);
 
        /* Client sends TOC "toc_signon" message */
 
@@ -1248,18 +1258,16 @@
         */
 
        g_snprintf(buff, 2048, "toc2_signon %s %d %s %s %s \"%s\" 160 %d", 
-                       "login.oscar.aol.com", 29999, normalized_username, 
roast_password(password),
+                       "login.oscar.aol.com", 29999, norm_username, 
roast_password(conn->password),
                        "english-US", REVISION, 
-                       generate_code(normalized_username, password) );
+                       generate_code(norm_username, conn->password) );
 
        send_flap(conn, DATA, buff );
 
 if(DEBUG)
        printf( "toc_signon AFTER %d %d\n", conn->fd, conn->seq_num );
-
-
-       return conn;
-
+       
+       icqtoc_logged_in(conn);
 }
 
 

Index: libtoc.h
===================================================================
RCS file: /cvsroot/ayttm/ayttm/modules/icq-toc/libtoc/libtoc.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- libtoc.h    23 Mar 2003 12:22:43 -0000      1.3
+++ libtoc.h    24 Mar 2003 09:54:36 -0000      1.4
@@ -31,6 +31,8 @@
     void * account;
     char server[255];
     short port;
+    char *username;
+    char *password;
 } toc_conn;
 
 typedef struct _toc_file_conn
@@ -63,9 +65,10 @@
                                      char * cookie, char * filename );
 
 void (*icqtoc_user_info)(toc_conn  * conn, char * user, char * message );
+void (*icqtoc_logged_in)(toc_conn *conn);
 
 void icqtoc_callback( toc_conn * conn );
-toc_conn * icqtoc_signon( char * username, char * password,
+void icqtoc_signon( char * username, char * password,
                char * server, short port, char * info );
 void icqtoc_send_keep_alive( toc_conn * conn );
 void icqtoc_signoff( toc_conn * conn );





reply via email to

[Prev in Thread] Current Thread [Next in Thread]