plugins/icq/icqlib.c

Sun, 28 Jan 2001 01:52:27 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Sun, 28 Jan 2001 01:52:27 +0000
changeset 1432
ab10a52f94a7
parent 1309
dccfec27ffd4
child 1467
6dd0f7f6e93d
permissions
-rw-r--r--

[gaim-migrate @ 1442]
icqlib 1.1.5

1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 /*
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
3 $Id: icqlib.c 1442 2001-01-28 01:52:27Z warmenhoven $
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 $Log$
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
5 Revision 1.3 2001/01/28 01:52:27 warmenhoven
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
6 icqlib 1.1.5
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
7
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
8 Revision 1.49 2001/01/17 01:29:17 bills
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
9 Rework chat and file session interfaces; implement socket notifications.
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
10
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
11 Revision 1.48 2001/01/15 06:20:24 denis
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
12 Cleanup.
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
13
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
14 Revision 1.47 2000/12/19 21:29:51 bills
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
15 actually return the link in icq_ICQLINKNew
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
16
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
17 Revision 1.46 2000/12/19 06:00:07 bills
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
18 moved members from ICQLINK to ICQLINK_private struct
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
19
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
20 Revision 1.45 2000/11/02 07:29:07 denis
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
21 Ability to disable TCP protocol has been added.
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 Revision 1.44 2000/07/24 03:10:08 bills
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 added support for real nickname during TCP transactions like file and
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 chat, instead of using Bill all the time (hmm, where'd I get that from? :)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27 Revision 1.43 2000/07/09 22:05:11 bills
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 removed unnecessary functions
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
29 */
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #include "icqlib.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 #include <stdlib.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 #ifndef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #include <unistd.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 #include <time.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 #ifdef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 #include <winsock.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 #else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 #include <netdb.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #include <sys/socket.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 #include <sys/stat.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 #ifndef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 #include <sys/time.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 #include <netinet/in.h>
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 #include "util.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 #include "icqtypes.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 #include "icq.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 #include "udp.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 #include "tcp.h"
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60 #include "queue.h"
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
61 #include "socketmanager.h"
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 int icq_Russian = FALSE;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 BYTE icq_LogLevel = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
66 void (*icq_SocketNotify)(int socket, int type, int status);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
67
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 DWORD icq_SendMessage(ICQLINK *link, DWORD uin, const char *text, BYTE thruSrv)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70 if(thruSrv==ICQ_SEND_THRUSERVER)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 return icq_UDPSendMessage(link, uin, text);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 else if(thruSrv==ICQ_SEND_DIRECT)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 return icq_TCPSendMessage(link, uin, text);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 else if(thruSrv==ICQ_SEND_BESTWAY)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 icq_ContactItem *pcontact=icq_ContactFind(link, uin);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 if(pcontact)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 if(pcontact->tcp_flag == 0x04)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 return icq_TCPSendMessage(link, uin, text);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 return icq_UDPSendMessage(link, uin, text);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 return icq_UDPSendMessage(link, uin, text);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89 return 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 DWORD icq_SendURL(ICQLINK *link, DWORD uin, const char *url, const char *descr, BYTE thruSrv)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 if(thruSrv==ICQ_SEND_THRUSERVER)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 return icq_UDPSendURL(link, uin, url, descr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 else if(thruSrv==ICQ_SEND_DIRECT)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 return icq_TCPSendURL(link, uin, descr, url);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 else if(thruSrv==ICQ_SEND_BESTWAY)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 icq_ContactItem *pcontact=icq_ContactFind(link, uin);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 if(pcontact)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 if(pcontact->tcp_flag == 0x04)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 return icq_TCPSendURL(link, uin, descr, url);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 return icq_UDPSendURL(link, uin, url, descr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110 return icq_UDPSendURL(link, uin, url, descr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 return 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
116 ICQLINK *icq_ICQLINKNew(DWORD uin, const char *password, const char *nick,
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
117 unsigned char useTCP)
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
119 ICQLINK *link = (ICQLINK*)malloc(sizeof(ICQLINK));
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
120 link->d = (ICQLINK_private*)malloc(sizeof(ICQLINK_private));
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
121
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 srand(time(0L));
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
123 /* initialize icq_SocketList on first call */
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
124 if (!icq_SocketList)
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
125 icq_SocketList = list_new();
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 /* Initialize all callbacks */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128 link->icq_Logged = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 link->icq_Disconnected = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 link->icq_RecvMessage = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 link->icq_RecvURL = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 link->icq_RecvWebPager = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 link->icq_RecvMailExpress = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 link->icq_RecvChatReq = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135 link->icq_RecvFileReq = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136 link->icq_RecvAdded = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137 link->icq_RecvAuthReq = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 link->icq_UserFound = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139 link->icq_SearchDone = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 link->icq_UserOnline = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 link->icq_UserOffline = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142 link->icq_UserStatusUpdate = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 link->icq_InfoReply = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 link->icq_ExtInfoReply = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 link->icq_WrongPassword = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 link->icq_InvalidUIN = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 link->icq_Log = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 link->icq_SrvAck = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 link->icq_RequestNotify = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150 link->icq_NewUIN = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 link->icq_SetTimeout = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 link->icq_MetaUserFound = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153 link->icq_MetaUserInfo = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 link->icq_MetaUserWork = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155 link->icq_MetaUserMore = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 link->icq_MetaUserAbout = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 link->icq_MetaUserInterests = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 link->icq_MetaUserAffiliations = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159 link->icq_MetaUserHomePageCategory = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 /* General stuff */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 link->icq_Uin = uin;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163 link->icq_Password = strdup(password);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 link->icq_Nick = strdup(nick);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165 link->icq_OurIP = -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 link->icq_OurPort = 0;
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
167 link->d->icq_ContactList = list_new();
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 link->icq_Status = -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170 /* UDP stuff */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 link->icq_UDPSok = -1;
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
172 memset(link->d->icq_UDPServMess, FALSE, sizeof(link->d->icq_UDPServMess));
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
173 link->d->icq_UDPSeqNum1 = 0;
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
174 link->d->icq_UDPSeqNum2 = 0;
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
175 link->d->icq_UDPSession = 0;
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 icq_UDPQueueNew(link);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
178 /* TCP stuff */
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 icq_TCPInit(link);
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
180 link->icq_UseTCP = useTCP;
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 /* Proxy stuff */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 link->icq_UseProxy = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 link->icq_ProxyHost = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 link->icq_ProxyIP = -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 link->icq_ProxyPort = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 link->icq_ProxyAuth = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 link->icq_ProxyName = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 link->icq_ProxyPass = 0L;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 link->icq_ProxySok = -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 link->icq_ProxyOurPort = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 link->icq_ProxyDestIP = -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 link->icq_ProxyDestPort = 0;
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
194
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
195 return link;
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
198 void icq_ICQLINKDelete(ICQLINK *link)
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 icq_TCPDone(link);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 if(link->icq_Password)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 free(link->icq_Password);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 if(link->icq_Nick)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 free(link->icq_Nick);
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
205 if(link->d->icq_ContactList)
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
206 list_delete(link->d->icq_ContactList, icq_ContactDelete);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 icq_UDPQueueDelete(link);
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
208 free(link->d);
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
209 free(link);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 /******************************
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 Main function connects gets icq_Uin
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 and icq_Password and logins in and sits
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 in a loop waiting for server responses.
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 *******************************/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 void icq_Main(ICQLINK *link)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
219 icq_SocketPoll();
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222 /**********************************
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 Connects to hostname on port port
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 hostname can be DNS or nnn.nnn.nnn.nnn
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 write out messages to the FD aux
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 ***********************************/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 int icq_Connect(ICQLINK *link, const char *hostname, int port)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229 char buf[1024]; /*, un = 1;*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 /* char tmpbuf[256], our_host[256]*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
231 int conct, res;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232 unsigned int length;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
233 struct sockaddr_in sin, prsin; /* used to store inet addr stuff */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 struct hostent *host_struct; /* used in DNS llokup */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
236 /* create the unconnected socket*/
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
237 link->icq_UDPSok = icq_SocketNew(AF_INET, SOCK_DGRAM, 0);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
238
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
239 if(link->icq_UDPSok == -1)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
241 icq_FmtLog(link, ICQ_LOG_FATAL, "Socket creation failed\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244 icq_FmtLog(link, ICQ_LOG_MESSAGE, "Socket created attempting to connect\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245 sin.sin_addr.s_addr = INADDR_ANY;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
246 sin.sin_family = AF_INET; /* we're using the inet not appletalk*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 sin.sin_port = 0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248 if(bind(link->icq_UDPSok, (struct sockaddr*)&sin, sizeof(struct sockaddr))<0)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 icq_FmtLog(link, ICQ_LOG_FATAL, "Can't bind socket to free port\n");
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
251 icq_SocketDelete(link->icq_UDPSok);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
252 link->icq_UDPSok = -1;
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
254 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
255 length = sizeof(sin);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256 getsockname(link->icq_UDPSok, (struct sockaddr*)&sin, &length);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257 link->icq_ProxyOurPort = ntohs(sin.sin_port);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
258 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 icq_FmtLog(link, ICQ_LOG_MESSAGE, "[SOCKS] Trying to use SOCKS5 proxy\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 prsin.sin_addr.s_addr = inet_addr(link->icq_ProxyHost);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262 if(prsin.sin_addr.s_addr == (unsigned long)-1) /* name isn't n.n.n.n so must be DNS */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264 host_struct = gethostbyname(link->icq_ProxyHost);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265 if(host_struct == 0L)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
266 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
267 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Can't find hostname: %s\n", link->icq_ProxyHost);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270 prsin.sin_addr = *((struct in_addr*)host_struct->h_addr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272 link->icq_ProxyIP = ntohl(prsin.sin_addr.s_addr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273 prsin.sin_family = AF_INET; /* we're using the inet not appletalk*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
274 prsin.sin_port = htons(link->icq_ProxyPort); /* port */
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
275
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
276 /* create the unconnected socket*/
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
277 link->icq_ProxySok = icq_SocketNew(AF_INET, SOCK_STREAM, 0);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
278
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279 if(link->icq_ProxySok == -1)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Socket creation failed\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
282 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284 icq_FmtLog(link, ICQ_LOG_MESSAGE, "[SOCKS] Socket created attempting to connect\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285 conct = connect(link->icq_ProxySok, (struct sockaddr *) &prsin, sizeof(prsin));
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286 if(conct == -1) /* did we connect ?*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
287 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Connection refused\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
289 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 buf[0] = 5; /* protocol version */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
292 buf[1] = 1; /* number of methods */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293 if(!strlen(link->icq_ProxyName) || !strlen(link->icq_ProxyPass) || !link->icq_ProxyAuth)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294 buf[2] = 0; /* no authorization required */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
296 buf[2] = 2; /* method username/password */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297 #ifdef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
298 send(link->icq_ProxySok, buf, 3, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
299 res = recv(link->icq_ProxySok, buf, 2, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
300 #else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
301 write(link->icq_ProxySok, buf, 3);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
302 res = read(link->icq_ProxySok, buf, 2);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 if(strlen(link->icq_ProxyName) && strlen(link->icq_ProxyPass) && link->icq_ProxyAuth)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
305 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 if(res != 2 || buf[0] != 5 || buf[1] != 2) /* username/password authentication*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Authentication method incorrect\n");
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
309 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 buf[0] = 1; /* version of subnegotiation */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 buf[1] = strlen(link->icq_ProxyName);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
314 memcpy(&buf[2], link->icq_ProxyName, buf[1]);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
315 buf[2+buf[1]] = strlen(link->icq_ProxyPass);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 memcpy(&buf[3+buf[1]], link->icq_ProxyPass, buf[2+buf[1]]);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317 #ifdef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
318 send(link->icq_ProxySok, buf, buf[1]+buf[2+buf[1]]+3, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
319 res = recv(link->icq_ProxySok, buf, 2, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
320 #else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
321 write(link->icq_ProxySok, buf, buf[1]+buf[2+buf[1]]+3);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
322 res = read(link->icq_ProxySok, buf, 2);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
323 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324 if(res != 2 || buf[0] != 1 || buf[1] != 0)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
325 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
326 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Authorization failure\n");
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
327 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
328 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
329 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
330 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
331 else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333 if(res != 2 || buf[0] != 5 || buf[1] != 0) /* no authentication required */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
334 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
335 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Authentication method incorrect\n");
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
336 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
339 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
340 buf[0] = 5; /* protocol version */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
341 buf[1] = 3; /* command UDP associate */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
342 buf[2] = 0; /* reserved */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
343 buf[3] = 1; /* address type IP v4 */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
344 buf[4] = (char)0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345 buf[5] = (char)0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346 buf[6] = (char)0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 buf[7] = (char)0;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
348 *(unsigned short*)&buf[8] = htons(link->icq_ProxyOurPort);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
349 /* memcpy(&buf[8], &link->icq_ProxyOurPort, 2); */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350 #ifdef _WIN32
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
351 send(link->icq_ProxySok, buf, 10, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
352 res = recv(link->icq_ProxySok, buf, 10, 0);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
353 #else
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
354 write(link->icq_ProxySok, buf, 10);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
355 res = read(link->icq_ProxySok, buf, 10);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
356 #endif
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
357 if(res != 10 || buf[0] != 5 || buf[1] != 0)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
358 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
359 switch(buf[1])
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 case 1:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
362 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] General SOCKS server failure\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
364 case 2:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
365 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Connection not allowed by ruleset\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
366 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367 case 3:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
368 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Network unreachable\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
369 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370 case 4:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
371 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Host unreachable\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
372 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
373 case 5:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
374 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Connection refused\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
375 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
376 case 6:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
377 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] TTL expired\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
378 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
379 case 7:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
380 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Command not supported\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
381 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
382 case 8:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
383 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Address type not supported\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
384 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
385 default:
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
386 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Unknown SOCKS server failure\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
387 break;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388 }
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
389 icq_SocketDelete(link->icq_ProxySok);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
390 link->icq_ProxySok = -1;
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
392 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
393 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
394 sin.sin_addr.s_addr = inet_addr(hostname); /* checks for n.n.n.n notation */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
395 if(sin.sin_addr.s_addr == (unsigned long)-1) /* name isn't n.n.n.n so must be DNS */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
396 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
397 host_struct = gethostbyname(hostname);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
398 if(host_struct == 0L)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
399 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 icq_FmtLog(link, ICQ_LOG_FATAL, "Can't find hostname: %s\n", hostname);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
402 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
403 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
406 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 sin.sin_addr = *((struct in_addr *)host_struct->h_addr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
408 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
409 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
410 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
411 link->icq_ProxyDestIP = ntohl(sin.sin_addr.s_addr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
412 memcpy(&sin.sin_addr.s_addr, &buf[4], 4);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
413 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
414 sin.sin_family = AF_INET; /* we're using the inet not appletalk*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
415 sin.sin_port = htons(port); /* port */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
417 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
418 link->icq_ProxyDestPort = port;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
419 memcpy(&sin.sin_port, &buf[8], 2);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
420 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
421 conct = connect(link->icq_UDPSok, (struct sockaddr*)&sin, sizeof(sin));
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
422 if(conct == -1) /* did we connect ?*/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
423 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
424 icq_FmtLog(link, ICQ_LOG_FATAL, "Connection refused\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
425 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
426 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
427 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
428 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
429 return -1;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
430 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 length = sizeof(sin) ;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
432 getsockname(link->icq_UDPSok, (struct sockaddr*)&sin, &length);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
433 link->icq_OurIP = ntohl(sin.sin_addr.s_addr);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434 link->icq_OurPort = ntohs(sin.sin_port);
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
435
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
436 /* sockets are ready to receive data - install handlers */
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
437 icq_SocketSetHandler(link->icq_UDPSok, ICQ_SOCKET_READ,
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
438 icq_HandleServerResponse, link);
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
439 if (link->icq_UseProxy)
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
440 icq_SocketSetHandler(link->icq_ProxySok, ICQ_SOCKET_READ,
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
441 icq_HandleProxyResponse, link);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
442 return link->icq_UDPSok;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
443 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
444
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
445 void icq_Disconnect(ICQLINK *link)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
447 icq_SocketDelete(link->icq_UDPSok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
448 if(link->icq_UseProxy)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
449 {
1432
ab10a52f94a7 [gaim-migrate @ 1442]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1309
diff changeset
450 icq_SocketDelete(link->icq_ProxySok);
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 icq_UDPQueueFree(link);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
453 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
454
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455 /*
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
456 void icq_InitNewUser(const char *hostname, DWORD port)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
457 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
458 srv_net_icq_pak pak;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
459 int s;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
460 struct timeval tv;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461 fd_set readfds;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
462
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
463 icq_Connect(hostname, port);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464 if((icq_UDPSok == -1) || (icq_UDPSok == 0))
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
465 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
466 printf("Couldn't establish connection\n");
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
467 exit(1);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
468 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
469 icq_RegNewUser(icq_Password);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
470 for(;;)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
471 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
472 tv.tv_sec = 2;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473 tv.tv_usec = 500000;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
474
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
475 FD_ZERO(&readfds);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
476 FD_SET(icq_UDPSok, &readfds);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
477
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
478 select(icq_UDPSok+1, &readfds, 0L, 0L, &tv);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
479
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
480 if(FD_ISSET(icq_UDPSok, &readfds))
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
481 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
482 s = icq_UDPSockRead(icq_UDPSok, &pak.head, sizeof(pak));
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
483 if(icqtohs(pak.head.cmd) == SRV_NEW_UIN)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
484 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
485 icq_Uin = icqtohl(&pak.data[2]);
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
486 return;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
487 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
488 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
489 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
490 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
491 */
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
492
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
493 /************************
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
494 icq_UDPServMess functions
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
495 *************************/
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
496 BOOL icq_GetServMess(ICQLINK *link, WORD num)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
497 {
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
498 return ((link->d->icq_UDPServMess[num/8] & (1 << (num%8))) >> (num%8));
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
499 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
500
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
501 void icq_SetServMess(ICQLINK *link, WORD num)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
502 {
1309
dccfec27ffd4 [gaim-migrate @ 1319]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1152
diff changeset
503 link->d->icq_UDPServMess[num/8] |= (1 << (num%8));
1152
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
504 }
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
505
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
506 int icq_GetSok(ICQLINK *link)
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
507 {
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
508 return link->icq_UDPSok;
e94e29686ded [gaim-migrate @ 1162]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
509 }

mercurial