1152
|
1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2 /*
|
|
3 $Id: proxy.c 1162 2000-11-28 02:22:42Z warmenhoven $
|
|
4 $Log$
|
|
5 Revision 1.1 2000/11/28 02:22:42 warmenhoven
|
|
6 icq. whoop de doo
|
|
7
|
|
8 Revision 1.8 2000/05/10 18:51:23 denis
|
|
9 icq_Disconnect() now called before icq_Disconnected callback to
|
|
10 prevent high CPU usage in kicq's "reconnect on disconnect" code.
|
|
11
|
|
12 Revision 1.7 2000/05/03 18:29:15 denis
|
|
13 Callbacks have been moved to the ICQLINK structure.
|
|
14
|
|
15 Revision 1.6 2000/04/05 14:37:02 denis
|
|
16 Applied patch from "Guillaume R." <grs@mail.com> for basic Win32
|
|
17 compatibility.
|
|
18
|
|
19 Revision 1.5 1999/10/07 18:00:59 denis
|
|
20 proxy.h file removed.
|
|
21
|
|
22 Revision 1.4 1999/07/16 12:01:06 denis
|
|
23 ICQLINK support added.
|
|
24
|
|
25 Revision 1.3 1999/07/12 15:13:33 cproch
|
|
26 - added definition of ICQLINK to hold session-specific global variabled
|
|
27 applications which have more than one connection are now possible
|
|
28 - changed nearly every function defintion to support ICQLINK parameter
|
|
29
|
|
30 Revision 1.2 1999/04/14 14:51:42 denis
|
|
31 Switched from icq_Log callback to icq_Fmt function.
|
|
32 Cleanups for "strict" compiling (-ansi -pedantic)
|
|
33
|
|
34 Revision 1.1 1999/03/24 11:37:38 denis
|
|
35 Underscored files with TCP stuff renamed.
|
|
36 TCP stuff cleaned up
|
|
37 Function names changed to corresponding names.
|
|
38 icqlib.c splitted to many small files by subject.
|
|
39 C++ comments changed to ANSI C comments.
|
|
40
|
|
41 */
|
|
42
|
|
43 #ifndef _WIN32
|
|
44 #include <unistd.h>
|
|
45 #endif
|
|
46
|
|
47 #ifdef _WIN32
|
|
48 #include <winsock.h>
|
|
49 #endif
|
|
50
|
|
51 #include <stdlib.h>
|
|
52
|
|
53 #include "util.h"
|
|
54 #include "icqtypes.h"
|
|
55 #include "icq.h"
|
|
56 #include "icqlib.h"
|
|
57
|
|
58 void icq_HandleProxyResponse(ICQLINK *link)
|
|
59 {
|
|
60 int s;
|
|
61 char buf[256];
|
|
62 #ifdef _WIN32
|
|
63 s = recv(link->icq_ProxySok, buf, sizeof(buf), 0);
|
|
64 #else
|
|
65 s = read(link->icq_ProxySok, &buf, sizeof(buf));
|
|
66 #endif
|
|
67 if(s<=0)
|
|
68 {
|
|
69 icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Connection terminated\n");
|
|
70 icq_Disconnect(link);
|
|
71 if(link->icq_Disconnected)
|
|
72 (*link->icq_Disconnected)(link);
|
|
73 }
|
|
74 }
|
|
75
|
|
76 /*******************
|
|
77 SOCKS5 Proxy support
|
|
78 ********************/
|
|
79 void icq_SetProxy(ICQLINK *link, const char *phost, unsigned short pport, int pauth, const char *pname, const char *ppass)
|
|
80 {
|
|
81 if(link->icq_ProxyHost)
|
|
82 free(link->icq_ProxyHost);
|
|
83 if(link->icq_ProxyName)
|
|
84 free(link->icq_ProxyName);
|
|
85 if(link->icq_ProxyPass)
|
|
86 free(link->icq_ProxyPass);
|
|
87 if(strlen(pname)>255)
|
|
88 {
|
|
89 icq_FmtLog(link, ICQ_LOG_ERROR, "[SOCKS] User name greater than 255 chars\n");
|
|
90 link->icq_UseProxy = 0;
|
|
91 return;
|
|
92 }
|
|
93 if(strlen(ppass)>255)
|
|
94 {
|
|
95 icq_FmtLog(link, ICQ_LOG_ERROR, "[SOCKS] User password greater than 255 chars\n");
|
|
96 link->icq_UseProxy = 0;
|
|
97 return;
|
|
98 }
|
|
99 link->icq_UseProxy = 1;
|
|
100 link->icq_ProxyHost = strdup(phost);
|
|
101 link->icq_ProxyPort = pport;
|
|
102 link->icq_ProxyAuth = pauth;
|
|
103 link->icq_ProxyName = strdup(pname);
|
|
104 link->icq_ProxyPass = strdup(ppass);
|
|
105 }
|
|
106
|
|
107 void icq_UnsetProxy(ICQLINK *link)
|
|
108 {
|
|
109 link->icq_UseProxy = 0;
|
|
110 }
|
|
111
|
|
112 int icq_GetProxySok(ICQLINK *link)
|
|
113 {
|
|
114 return link->icq_ProxySok;
|
|
115 }
|