[Top][All Lists]
[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 );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Ayttm-commits] CVS: ayttm/modules/icq-toc/libtoc libtoc.c,1.4,1.5 libtoc.h,1.3,1.4,
Colin Leroy <address@hidden> <=
- Prev by Date:
[Ayttm-commits] CVS: ayttm/modules/aim-toc aim-toc.c,1.28,1.29
- Next by Date:
[Ayttm-commits] CVS: ayttm/modules/aim-toc/libtoc libtoc.c,1.7,1.8 libtoc.h,1.5,1.6
- Previous by thread:
[Ayttm-commits] CVS: ayttm/modules/aim-toc aim-toc.c,1.28,1.29
- Next by thread:
[Ayttm-commits] CVS: ayttm/modules/aim-toc/libtoc libtoc.c,1.7,1.8 libtoc.h,1.5,1.6
- Index(es):