summary refs log tree commit diff stats
path: root/src/common
diff options
context:
space:
mode:
authorTingPing <tingping@tingping.se>2014-12-28 13:28:19 -0500
committerTingPing <tingping@tingping.se>2014-12-28 13:28:19 -0500
commit9cb73f839ffddb1479f0ee1c8a89acebafd31045 (patch)
tree3b224105778534140d6bf7109d3b6b0c321c44c2 /src/common
parent330e31c70fdf42731ac8cd74b94aaeaf9a01e7fd (diff)
Remove MSProxy support
It's not enabled anywhere, certainly not maintained
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Makefile.am7
-rw-r--r--src/common/common.vcxproj4
-rw-r--r--src/common/common.vcxproj.filters8
-rw-r--r--src/common/hexchat.c16
-rw-r--r--src/common/hexchat.h9
-rw-r--r--src/common/msproxy.c470
-rw-r--r--src/common/msproxy.h262
-rw-r--r--src/common/network.c83
-rw-r--r--src/common/network.h6
-rw-r--r--src/common/server.c53
10 files changed, 8 insertions, 910 deletions
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 744630c4..0cbf650b 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -22,7 +22,6 @@ EXTRA_DIST = \
 	inet.h \
 	make-te.c \
 	modes.h \
-	msproxy.h \
 	network.h \
 	notify.h \
 	outbound.h \
@@ -46,10 +45,6 @@ if USE_OPENSSL
 ssl_c = ssl.c
 endif
 
-if USE_MSPROXY
-msproxy_c = msproxy.c
-endif
-
 if USE_DBUS
 dbusdir = dbus
 libhexchatcommon_a_LIBADD =				\
@@ -64,7 +59,7 @@ endif
 noinst_PROGRAMS = make-te
 
 libhexchatcommon_a_SOURCES = cfgfiles.c chanopt.c ctcp.c dcc.c hexchat.c \
-	history.c ignore.c inbound.c marshal.c modes.c $(msproxy_c) network.c notify.c \
+	history.c ignore.c inbound.c marshal.c modes.c network.c notify.c \
 	outbound.c plugin.c plugin-timer.c proto-irc.c server.c servlist.c \
 	$(ssl_c) text.c tree.c url.c userlist.c util.c
 libhexchatcommon_a_CFLAGS = $(LIBPROXY_CFLAGS)
diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index 02449340..7746a866 100644
--- a/src/common/common.vcxproj
+++ b/src/common/common.vcxproj
@@ -26,7 +26,6 @@
     <ClInclude Include="inet.h" />

     <ClInclude Include="marshal.h" />

     <ClInclude Include="modes.h" />

-    <ClInclude Include="msproxy.h" />

     <ClInclude Include="network.h" />

     <ClInclude Include="notify.h" />

     <ClInclude Include="outbound.h" />

@@ -59,7 +58,6 @@
     <ClCompile Include="inbound.c" />

     <ClCompile Include="marshal.c" />

     <ClCompile Include="modes.c" />

-    <ClCompile Include="msproxy.c" />

     <ClCompile Include="network.c" />

     <ClCompile Include="notify.c" />

     <ClCompile Include="outbound.c" />

@@ -167,4 +165,4 @@ powershell -File "$(SolutionDir)..\win32\version-template.ps1" "$(SolutionDir)..
       ]]></Command>

     </PreBuildEvent>

   </ItemDefinitionGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters
index c2d0ce5d..5039f3d5 100644
--- a/src/common/common.vcxproj.filters
+++ b/src/common/common.vcxproj.filters
@@ -44,9 +44,6 @@
     <ClInclude Include="modes.h">

       <Filter>Header Files</Filter>

     </ClInclude>

-    <ClInclude Include="msproxy.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="network.h">

       <Filter>Header Files</Filter>

     </ClInclude>

@@ -142,9 +139,6 @@
     <ClCompile Include="modes.c">

       <Filter>Source Files</Filter>

     </ClCompile>

-    <ClCompile Include="msproxy.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="network.c">

       <Filter>Source Files</Filter>

     </ClCompile>

@@ -197,4 +191,4 @@
   <ItemGroup>

     <None Include="..\..\win32\config.h.tt" />

   </ItemGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/src/common/hexchat.c b/src/common/hexchat.c
index 767d60ed..37e46ce8 100644
--- a/src/common/hexchat.c
+++ b/src/common/hexchat.c
@@ -55,10 +55,6 @@
 #include <glib-object.h>			/* for g_type_init() */
 #endif
 
-#ifdef USE_MSPROXY
-#include "msproxy.h"
-#endif
-
 #ifdef USE_LIBPROXY
 #include <proxy.h>
 #endif
@@ -360,9 +356,6 @@ static int
 hexchat_misc_checks (void)		/* this gets called every 1/2 second */
 {
 	static int count = 0;
-#ifdef USE_MSPROXY
-	static int count2 = 0;
-#endif
 
 	count++;
 
@@ -378,15 +371,6 @@ hexchat_misc_checks (void)		/* this gets called every 1/2 second */
 		count = 0;
 	}
 
-#ifdef USE_MSPROXY	
-	count2++;
-	if (count2 >= 720)			/* 720 every 6 minutes */
-	{
-		msproxy_keepalive ();
-		count2 = 0;
-	}
-#endif
-
 	return 1;
 }
 
diff --git a/src/common/hexchat.h b/src/common/hexchat.h
index efac3f22..e914da27 100644
--- a/src/common/hexchat.h
+++ b/src/common/hexchat.h
@@ -429,14 +429,6 @@ typedef struct session
 	void (*scrollback_replay_marklast) (struct session *sess);
 } session;
 
-struct msproxy_state_t
-{
-	gint32				clientid;
-	gint32				serverid;
-	unsigned char		seq_recv;		/* seq number of last packet recv.	*/
-	unsigned char		seq_sent;		/* seq number of last packet sent.	*/
-};
-
 /* SASL Mechanisms */
 #define MECH_PLAIN 0
 #define MECH_BLOWFISH 1
@@ -494,7 +486,6 @@ typedef struct server
 	int proxy_sok;				/* Additional information for MS Proxy beast */
 	int proxy_sok4;
 	int proxy_sok6;
-	struct msproxy_state_t msp_state;
 	int id;					/* unique ID number (for plugin API) */
 #ifdef USE_OPENSSL
 	SSL_CTX *ctx;
diff --git a/src/common/msproxy.c b/src/common/msproxy.c
deleted file mode 100644
index 5f631c7f..00000000
--- a/src/common/msproxy.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* X-Chat
- * Copyright (C) 1998 Peter Zelezny.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * MS Proxy (ISA server) support is (c) 2006 Pavel Fedin <sonic_amiga@rambler.ru>
- * based on Dante source code
- * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- *      Inferno Nettverk A/S, Norway.  All rights reserved.
- */
-
-/*#define DEBUG_MSPROXY*/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#ifndef WIN32
-#include <unistd.h>
-#endif
-
-#define WANTSOCKET
-#define WANTARPA
-#include "inet.h"
-
-#include "hexchat.h"
-#include "network.h"
-#include "hexchatc.h"
-#include "server.h"
-#include "msproxy.h"
-
-
-#ifdef USE_MSPROXY
-#include <ntlm.h>
-
-static int
-send_msprequest(s, state, request, end)
-	int s;
-	struct msproxy_state_t *state;
-	struct msproxy_request_t *request;
-	char *end;
-{
-	ssize_t w;
-	size_t l;
-
-	request->magic25 = htonl(MSPROXY_VERSION);
-	request->serverack = state->seq_recv;
-	/* don't start incrementing sequence until we are acking packet #2. */
-	request->sequence	= (unsigned char)(request->serverack >= 2 ? state->seq_sent + 1 : 0);
-
-	memcpy(request->RWSP, "RWSP", sizeof(request->RWSP));
-
-	l = end - (char *)request;
-	/* all requests must be atleast MSPROXY_MINLENGTH it seems. */
-	if (l < MSPROXY_MINLENGTH) {
-		bzero(end, (size_t)(MSPROXY_MINLENGTH - l));
-		l = MSPROXY_MINLENGTH;
-	}
-
-	if ((w = send(s, request, l, 0)) != l) {
-#ifdef DEBUG_MSPROXY
-		printf ("send_msprequest(): send() failed (%ld bytes sent instead of %Iu\n", w, l);
-		perror ("Error is");
-#endif
-		return -1;
-	}
-	state->seq_sent = request->sequence;
-
-	return w;
-}
-
-static int
-recv_mspresponse(s, state, response)
-	int s;
-	struct msproxy_state_t *state;
-	struct msproxy_response_t *response;
-{
-	ssize_t r;
-
-	do {
-		if ((r = recv (s, response, sizeof (*response), 0)) < MSPROXY_MINLENGTH) {
-#ifdef DEBUG_MSPROXY
-			printf ("recv_mspresponse(): expected to read atleast %d, read %ld\n", MSPROXY_MINLENGTH, r);
-#endif
-			return -1;
-		}
-		if (state->seq_recv == 0)
-			break; /* not started incrementing yet. */
-#ifdef DEBUG_MSPROXY
-		if (response->sequence == state->seq_recv)
-			printf ("seq_recv: %d, dup response, seqnumber: 0x%x\n", state->seq_recv, response->sequence);
-#endif
-	} while (response->sequence == state->seq_recv);
-
-	state->seq_recv = response->sequence;
-
-	return r;
-}
-
-int
-traverse_msproxy (int sok, char *serverAddr, int port, struct msproxy_state_t *state, netstore *ns_proxy, int csok4, int csok6, int *csok, char bound)
-{
-	struct msproxy_request_t req;
-	struct msproxy_response_t res;
-	char *data, *p;
-	char hostname[NT_MAXNAMELEN];
-	char ntdomain[NT_MAXNAMELEN];
-	char challenge[8];
-	netstore *ns_client;
-	int clientport;
-	guint32 destaddr;
-	guint32 flags;
-
-	if (!prefs.hex_net_proxy_auth || !prefs.hex_net_proxy_user[0] || !prefs.hex_net_proxy_pass[0] )
-		return 1;
-
-	/* MS proxy protocol implementation currently doesn't support IPv6 */
-	destaddr = net_getsockaddr_v4 (ns_proxy);
-	if (!destaddr)
-		return 1;
-
-	state->seq_recv = 0;
-	state->seq_sent = 0;
-
-#ifdef DEBUG_MSPROXY
-	printf ("Connecting to %s:%d via MS proxy\n", serverAddr, port);
-#endif
-
-	gethostname (hostname, NT_MAXNAMELEN);
-	p = strchr (hostname, '.');
-        if (p)
-        	*p = '\0';
-
-	bzero (&req, sizeof(req));
-	req.clientid		= htonl(0x0a000000);	/* Initial client ID is always 0x0a		*/
-	req.command		= htons(MSPROXY_HELLO);	/* HELLO command					*/
-	req.packet.hello.magic5	= htons(0x4b00);	/* Fill in magic values				*/
-	req.packet.hello.magic10	= htons(0x1400);
-	req.packet.hello.magic15	= htons(0x0400);
-	req.packet.hello.magic20	= htons(0x5704);
-	req.packet.hello.magic25	= htons(0x0004);
-	req.packet.hello.magic30	= htons(0x0100);
-	req.packet.hello.magic35	= htons(0x4a02);
-	req.packet.hello.magic40	= htons(0x3000);
-	req.packet.hello.magic45	= htons(0x4400);
-	req.packet.hello.magic50	= htons(0x3900);
-	data = req.packet.hello.data;
-	strcpy (data, prefs.hex_net_proxy_user);		/* Append a username				*/
-	data += strlen (prefs.hex_net_proxy_user)+2;		/* +2 automatically creates second empty string	*/
-	strcpy (data, MSPROXY_EXECUTABLE);		/* Append an application name			*/
-	data += strlen (MSPROXY_EXECUTABLE)+1;
-	strcpy (data, hostname);				/* Append a hostname				*/
-	data += strlen (hostname)+1;
-
-	if (send_msprequest(sok, state, &req, data) == -1)
-		return 1;
-
-	if (recv_mspresponse(sok, state, &res) == -1)
-		return 1;
-
-	if (strcmp(res.RWSP, "RWSP") != 0) {
-#ifdef DEBUG_MSPROXY
-		printf ("Received mailformed packet (no RWSP signature)\n");
-#endif
-		return 1;
-	}
-
-	if (ntohs(res.command) >> 8 != 0x10) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.command = 10??, is %x", ntohs(res.command));
-#endif
-		return 1;
-	}
-
-	state->clientid	= htonl(rand());
-	state->serverid	= res.serverid;
-
-#ifdef DEBUG_MSPROXY
-	printf ("clientid: 0x%x, serverid: 0x%0x\n", state->clientid, state->serverid);
-	printf ("packet #2\n");
-#endif
-
-	/* almost identical. */
-	req.clientid	= state->clientid;
-	req.serverid	= state->serverid;
-
-	if (send_msprequest(sok, state, &req, data) == -1)
-		return 1;
-
-	if (recv_mspresponse(sok, state, &res) == -1)
-		return 1;
-
-	if (res.serverid != state->serverid) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected serverid = 0x%x, is 0x%x\n",state->serverid, res.serverid);
-#endif
-		return 1;
-	}
-
-	if (res.sequence != 0x01) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.sequence = 0x01, is 0x%x\n", res.sequence);
-#endif
-		return 1;
-	}
-
-	if (ntohs(res.command) != MSPROXY_USERINFO_ACK) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.command = 0x%x, is 0x%x\n", MSPROXY_USERINFO_ACK, ntohs(res.command));
-#endif
-		return 1;
-	}
-
-#ifdef DEBUG_MSPROXY
-	printf ("packet #3\n");
-#endif
-
-	bzero(&req, sizeof(req));
-	req.clientid			= state->clientid;
-	req.serverid			= state->serverid;
-	req.command			= htons(MSPROXY_AUTHENTICATE);
-	memcpy(req.packet.auth.NTLMSSP, "NTLMSSP", sizeof("NTLMSSP"));
-	req.packet.auth.bindaddr	= htonl(0x02000000);
-	req.packet.auth.msgtype		= htonl(0x01000000);
-	/* NTLM flags:	0x80000000 Negotiate LAN Manager key
-			0x10000000 Negotiate sign
-			0x04000000 Request target
-			0x02000000 Negotiate OEM
-			0x00800000 Always sign
-			0x00020000 Negotiate NTLM
-	*/
-	req.packet.auth.flags		= htonl(0x06020000);
-
-	if (send_msprequest(sok, state, &req, &req.packet.auth.data) == -1)
-		return 1;
-
-	if (recv_mspresponse(sok, state, &res) == -1)
-		return 1;
-
-	if (res.serverid != state->serverid) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected serverid = 0x%x, is 0x%x\n", state->serverid, res.serverid);
-#endif
-		return 1;
-	}
-
-	if (ntohs(res.command) != MSPROXY_AUTHENTICATE_ACK) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.command = 0x%x, is 0x%x\n", MSPROXY_AUTHENTICATE_ACK, ntohs(res.command));
-#endif
-		return 1;
-	}
-
-	flags = res.packet.auth.flags & htonl(0x00020000);			/* Remember if the server supports NTLM */
-	memcpy(challenge, &res.packet.auth.challenge, sizeof(challenge));
-	memcpy(ntdomain, &res.packet.auth.NTLMSSP[res.packet.auth.target.offset], res.packet.auth.target.len);
-	ntdomain[res.packet.auth.target.len] = 0;
-
-#ifdef DEBUG_MSPROXY
-	printf ("ntdomain: \"%s\"\n", ntdomain);
-	printf ("packet #4\n");
-#endif
-
-	bzero(&req, sizeof(req));
-	req.clientid			= state->clientid;
-	req.serverid			= state->serverid;
-	req.command			= htons(MSPROXY_AUTHENTICATE_2);	/* Authentication response			*/
-	req.packet.auth2.magic3		= htons(0x0200);			/* Something					*/
-	memcpy(req.packet.auth2.NTLMSSP, "NTLMSSP", sizeof("NTLMSSP"));		/* Start of NTLM message				*/
-	req.packet.auth2.msgtype		= htonl(0x03000000);			/* Message type 2				*/
-	req.packet.auth2.flags		= flags | htonl(0x02000000);		/* Choose authentication method			*/
-	data = req.packet.auth2.data;
-	if (flags) {
-		req.packet.auth2.lm_resp.len	= 0;				/* We are here if NTLM is supported,		*/
-		req.packet.auth2.lm_resp.alloc	= 0;				/* Do not fill in insecure LM response		*/
-		req.packet.auth2.lm_resp.offset	= data - req.packet.auth2.NTLMSSP;
-		req.packet.auth2.ntlm_resp.len = 24;				/* Fill in NTLM response security buffer	*/
-		req.packet.auth2.ntlm_resp.alloc = 24;
-		req.packet.auth2.ntlm_resp.offset = data - req.packet.auth2.NTLMSSP;
-		ntlm_smb_nt_encrypt(prefs.hex_net_proxy_pass, challenge, data);		/* Append an NTLM response			*/
-		data += 24;	
-	} else {
-		req.packet.auth2.lm_resp.len	= 24;				/* Fill in LM response security buffer		*/
-		req.packet.auth2.lm_resp.alloc	= 24;
-		req.packet.auth2.lm_resp.offset	= data - req.packet.auth2.NTLMSSP;
-		ntlm_smb_encrypt(prefs.hex_net_proxy_pass, challenge, data);		/* Append an LM response			*/
-		data += 24;
-		req.packet.auth2.ntlm_resp.len = 0;				/* NTLM response is empty			*/
-		req.packet.auth2.ntlm_resp.alloc = 0;
-		req.packet.auth2.ntlm_resp.offset = data - req.packet.auth2.NTLMSSP;
-	}
-	req.packet.auth2.ntdomain_buf.len = strlen(ntdomain);			/* Domain name					*/
-	req.packet.auth2.ntdomain_buf.alloc = req.packet.auth2.ntdomain_buf.len;
-	req.packet.auth2.ntdomain_buf.offset = data - req.packet.auth2.NTLMSSP;
-	strcpy(data, ntdomain);
-	data += req.packet.auth2.ntdomain_buf.len;
-	req.packet.auth2.username_buf.len = strlen(prefs.hex_net_proxy_user);		/* Username					*/
-	req.packet.auth2.username_buf.alloc = req.packet.auth2.username_buf.len;
-	req.packet.auth2.username_buf.offset = data - req.packet.auth2.NTLMSSP;
-	strcpy(data, prefs.hex_net_proxy_user);
-	data += req.packet.auth2.username_buf.len;
-	req.packet.auth2.clienthost_buf.len = strlen(hostname);			/* Hostname					*/
-	req.packet.auth2.clienthost_buf.alloc = req.packet.auth2.clienthost_buf.len;
-	req.packet.auth2.clienthost_buf.offset = data - req.packet.auth2.NTLMSSP;
-	strcpy(data, hostname);
-	data += req.packet.auth2.clienthost_buf.len;
-	req.packet.auth2.sessionkey_buf.len = 0;				/* Session key (we don't use it)		*/
-	req.packet.auth2.sessionkey_buf.alloc = 0;
-	req.packet.auth2.sessionkey_buf.offset = data - req.packet.auth2.NTLMSSP;
-
-	if (send_msprequest(sok, state, &req, data) == -1)
-		return 1;
-
-	if (recv_mspresponse(sok, state, &res) == -1)
-		return 1;
-
-	if (res.serverid != state->serverid) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.serverid = 0x%x, is 0x%x\n", state->serverid, res.serverid);
-#endif
-		return 1;
-	}
-
-	if (res.clientack != 0x01) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.clientack = 0x01, is 0x%x\n", res.clientack);
-#endif
-		return 1;
-	}
-
-	if (ntohs(res.command) >> 8 != 0x47) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.command = 47??, is 0x%x\n", ntohs(res.command));
-#endif
-		return 1;
-	}
-
-	if (ntohs(res.command) ==  MSPROXY_AUTHENTICATE_2_NAK) {
-#ifdef DEBUG_MSPROXY
-		printf ("Authentication failed\n");
-#endif
-		return -1;
-	}
-
-#ifdef DEBUG_MSPROXY
-	printf ("packet #5\n");
-#endif
-
-	bzero(&req, sizeof(req));
-	req.clientid			= state->clientid;
-	req.serverid			= state->serverid;
-	req.command			= htons(MSPROXY_CONNECT);
-	req.packet.connect.magic2	= htons(0x0200);
-	req.packet.connect.magic6	= htons(0x0200);
-	req.packet.connect.destport	= htons(port);
-	req.packet.connect.destaddr	= destaddr;
-	data = req.packet.connect.executable;
-	strcpy(data, MSPROXY_EXECUTABLE);
-	data += strlen(MSPROXY_EXECUTABLE) + 1;
-
-	/*
-	 * need to tell server what port we will connect from, so we bind our sockets.
-	 */
-	ns_client = net_store_new ();
-	if (!bound) {
-		net_store_fill_any (ns_client);
-		net_bind(ns_client, csok4, csok6);
-#ifdef DEBUG_MSPROXY
-		perror ("bind() result");
-#endif
-	}
- 	clientport = net_getsockport(csok4, csok6);
-	if (clientport == -1) {
-#ifdef DEBUG_MSPROXY
-		printf ("Unable to obtain source port\n");
-#endif
-		return 1;
-	}
-	req.packet.connect.srcport = clientport;
-
-	if (send_msprequest(sok, state, &req, data) == -1)
-		return 1;
-
-	if (recv_mspresponse(sok, state, &res) == -1)
-		return 1;
-
-	if (ntohs(res.command) != MSPROXY_CONNECT_ACK) {
-#ifdef DEBUG_MSPROXY
-		printf ("expected res.command = 0x%x, is 0x%x\n",MSPROXY_CONNECT_ACK, ntohs(res.command));
-#endif
-		return 1;
-	}
-
-	net_store_fill_v4 (ns_client, res.packet.connect.clientaddr, res.packet.connect.clientport);
-
-#ifdef DEBUG_MSPROXY
-	printf ("Connecting...\n");
-#endif
-	if (net_connect (ns_client, csok4, csok6, csok) != 0) {
-#ifdef DEBUG_MSPROXY
-		printf ("Failed to connect to port %d\n", htons(res.packet.connect.clientport));
-#endif
-		net_store_destroy (ns_client);
-		return 1;
-	}
-	net_store_destroy (ns_client);
-#ifdef DEBUG_MSPROXY
-	printf ("packet #6\n");
-#endif
-
-	req.clientid	= state->clientid;
-	req.serverid	= state->serverid;
-	req.command	= htons(MSPROXY_USERINFO_ACK);		
-
-	if (send_msprequest(sok, state, &req, req.packet.connack.data) == -1)
-		return 1;
-
-	return 0;
-}
-
-void
-msproxy_keepalive (void)
-{
-	server *serv;
-	GSList *list = serv_list;
-	struct msproxy_request_t req;
-	struct msproxy_response_t res;
-
-	while (list)
-	{
-		serv = list->data;
-		if (serv->connected && (serv->proxy_sok != -1))
-		{
-#ifdef DEBUG_MSPROXY
-			printf ("sending MS proxy keepalive packet\n");
-#endif
-
-			bzero(&req, sizeof(req));
-			req.clientid	= serv->msp_state.clientid;
-			req.serverid	= serv->msp_state.serverid;
-			req.command	= htons(MSPROXY_HELLO);
-			
-			if (send_msprequest(serv->proxy_sok, &serv->msp_state, &req, req.packet.hello.data) == -1)
-				continue;
-
-			recv_mspresponse(serv->proxy_sok, &serv->msp_state, &res);
-
-#ifdef DEBUG_MSPROXY
-			if (ntohs(res.command) != MSPROXY_USERINFO_ACK)
-				printf ("expected res.command = 0x%x, is 0x%x\n", MSPROXY_USERINFO_ACK, ntohs(res.command));
-#endif
-		}
-		list = list->next;
-	}
-}
-
-#endif
diff --git a/src/common/msproxy.h b/src/common/msproxy.h
deleted file mode 100644
index 4371d704..00000000
--- a/src/common/msproxy.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/* X-Chat
- * Copyright (C) 1998 Peter Zelezny.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- *
- * MS Proxy (ISA server) support is (c) 2006 Pavel Fedin <sonic_amiga@rambler.ru>
- * based on Dante source code
- * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- *      Inferno Nettverk A/S, Norway.  All rights reserved.
- */
-
-#ifndef HEXCHAT_MSPROXY_H
-#define HEXCHAT_MSPROXY_H
-
-#include "network.h"
-
-#define MSPROXY_EXECUTABLE 		"hexchat.exe"	/* This probably can be used for access control on the server side */
-
-#define MSPROXY_MINLENGTH		172		/* minimum length of packet.				*/
-#define NT_MAXNAMELEN			17		/* maximum name length (domain etc), comes from NetBIOS */
-#define MSPROXY_VERSION			0x00010200	/* MS Proxy v2 ?					*/
-
-/* Commands / responses */
-#define MSPROXY_HELLO			0x0500	/* packet 1 from client.			*/
-#define MSPROXY_HELLO_ACK		0x1000	/* packet 1 from server.			*/
-
-#define MSPROXY_USERINFO_ACK		0x0400	/* packet 2 from server.			*/
-
-#define MSPROXY_AUTHENTICATE		0x4700	/* authentication request		*/
-#define MSPROXY_AUTHENTICATE_ACK	0x4714	/* authentication challenge		*/
-
-#define MSPROXY_AUTHENTICATE_2		0x4701	/* authentication response		*/
-#define MSPROXY_AUTHENTICATE_2_ACK	0x4715	/* authentication passed		*/
-#define MSPROXY_AUTHENTICATE_2_NAK	0x4716	/* authentication failure		*/
-
-#define MSPROXY_CONNECT			0x071e	/* connect request.			*/
-#define MSPROXY_CONNECT_ACK		0x0703	/* connect request accepted.		*/
-
-#pragma pack(1)
-
-struct ntlm_buffer {
-	guint16	len;
-	guint16	alloc;
-	guint32	offset;
-};
-
-struct msproxy_request_t {
-	guint32					clientid;			/* 1-4							*/
-	guint32					magic25;				/* 5-8							*/
-	guint32					serverid;			/* 9-12							*/
-	unsigned char				serverack;			/* 13: ack of last server packet			*/
-	char					pad10[3];			/* 14-16						*/
-	unsigned char				sequence;			/* 17: sequence # of this packet.			*/
-	char					pad11[7];			/* 18-24						*/
-	char					RWSP[4];			/* 25-28: 0x52,0x57,0x53,0x50				*/
-	char					pad15[8];			/* 29-36						*/
-	guint16					command;				/* 37-38						*/
-
-	/* packet specifics start at 39. */
-	union {
-		struct {
-			char			pad1[18];			/* 39-56						*/
-			guint16			magic3;				/* 57-58						*/
-			char           		pad3[114];			/* 59-172						*/
-			guint16			magic5;				/* 173-174: 0x4b, 0x00					*/
-			char			pad5[2];			/* 175-176						*/
-			guint16			magic10;				/* 177-178: 0x14, 0x00					*/
-			char			pad6[2];			/* 179-180						*/
-			guint16			magic15;				/* 181-182: 0x04, 0x00					*/
-			char			pad10[2];			/* 183-184						*/
-			guint16			magic16;				/* 185-186						*/
-			char			pad11[2];			/* 187-188						*/
-			guint16			magic20;				/* 189-190: 0x57, 0x04					*/
-			guint16			magic25;				/* 191-192: 0x00, 0x04					*/
-			guint16			magic30;				/* 193-194: 0x01, 0x00					*/
-			char			pad20[2];			/* 195-196: 0x4a, 0x02					*/
-			guint16			magic35;				/* 197-198: 0x4a, 0x02					*/
-			char			pad30[10];			/* 199-208						*/
-			guint16			magic40;				/* 209-210: 0x30, 0x00					*/
-			char			pad40[2];			/* 211-212						*/
-			guint16			magic45;				/* 213-214: 0x44, 0x00					*/
-			char			pad45[2];			/* 215-216						*/
-			guint16			magic50;				/* 217-218: 0x39, 0x00					*/
-			char			pad50[2];			/* 219-220						*/
-			char			data[256];			/* 221-EOP: a sequence of NULL-terminated strings:
-											- username;
-											- empty string (just a NULL);
-											- application name;
-											- hostname					*/
-		} hello;
-
-		struct {
-			char			pad1[4];			/* 39-42						*/
-			guint16			magic2;				/* 43-44						*/
-			char			pad10[12];			/* 45-56						*/
-			guint32			bindaddr;			/* 57-60: address to bind.				*/
-			guint16			bindport;			/* 61-62: port to bind.					*/
-			char           		pad15[2];			/* 63-64						*/
-			guint16			magic3;				/* 65-66						*/
-			guint16			boundport;			/* 67-68						*/
-			char           		pad20[104];			/* 69-172						*/
-			char			NTLMSSP[sizeof("NTLMSSP")];	/* 173-180: "NTLMSSP"					*/
-			guint32			msgtype;				/* 181-184: NTLM message type = 1			*/
-			guint32			flags;				/* 185-188: NTLM message flags				*/
-			guint16			magic20;				/* 189-190: 0x28, 0x00					*/
-			char			pad30[2];			/* 191-192						*/
-			guint16			magic25;				/* 193-194: 0x96, 0x82					*/
-			guint16			magic30;				/* 195-196: 0x01, 0x00					*/
-			char			pad40[12];			/* 197-208						*/
-			guint16			magic50;				/* 209-210: 0x30, 0x00					*/
-			char			pad50[6];			/* 211-216						*/
-			guint16			magic55;				/* 217-218: 0x30, 0x00					*/
-			char			pad55[2];			/* 219-220						*/
-			char			data[0];			/* Dummy end marker, no real data required		*/
-		} auth;
-
-		struct {
-			char			pad1[4];			/* 39-42						*/
-			guint16			magic1;				/* 43-44						*/
-			guint32			magic2;				/* 45-48						*/
-			char			pad2[8];			/* 49-56						*/
-			guint16			magic3;				/* 57-58						*/
-			char			pad3[6];			/* 59-64						*/
-			guint16			magic4;				/* 65-66						*/
-			guint16			boundport;			/* 67-68						*/
-			char           		pad4[104];			/* 69-172						*/
-			char			NTLMSSP[sizeof("NTLMSSP")];	/* 173-180: "NTLMSSP"					*/
-			guint32			msgtype;				/* 181-184: NTLM message type = 3			*/
-			struct ntlm_buffer	lm_resp;				/* 185-192: LM response security buffer			*/
-			struct ntlm_buffer	ntlm_resp;			/* 193-200: NTLM response security buffer		*/
-			struct ntlm_buffer	ntdomain_buf;			/* 201-208: domain name security buffer			*/
-			struct ntlm_buffer	username_buf;			/* 209-216: username security buffer			*/
-			struct ntlm_buffer	clienthost_buf;			/* 217-224: hostname security buffer			*/
-			struct ntlm_buffer	sessionkey_buf;			/* 225-232: session key security buffer			*/
-			guint32			flags;				/* 233-236: message flags				*/
-			char			data[1024];			/* 237-EOP: data area					*/
-		} auth2;
-
-		struct {
-			guint16			magic1;				/* 39-40						*/
-			char			pad1[2];			/* 41-42						*/
-			guint16			magic2;				/* 43-44						*/
-			guint32			magic3;				/* 45-48						*/
-			char			pad5[8];			/* 48-56						*/
-			guint16			magic6;				/* 57-58: 0x0200					*/
-			guint16			destport;			/* 59-60						*/
-			guint32			destaddr;			/* 61-64						*/
-			char			pad10[4];			/* 65-68						*/
-			guint16			magic10;				/* 69-70						*/
-			char			pad15[2];			/* 71-72						*/
-			guint16			srcport;			/* 73-74: port client connects from			*/
-			char			pad20[82];			/* 75-156						*/
-			char			executable[256];		/* 76-EOP: application name				*/
-		} connect;
-
-		struct {
-			guint16			magic1;				/* 39-40						*/
-			char			pad5[2];			/* 41-42						*/
-			guint16			magic5;				/* 43-44						*/
-			guint32			magic10;				/* 45-48						*/
-			char			pad10[2];			/* 49-50						*/
-			guint16			magic15;				/* 51-52						*/
-			guint32			magic16;				/* 53-56						*/
-			guint16			magic20;				/* 57-58						*/
-			guint16			clientport;			/* 59-60: forwarded port.				*/
-			guint32			clientaddr;			/* 61-64: forwarded address.				*/
-			guint32			magic30;				/* 65-68						*/
-			guint32			magic35;				/* 69-72						*/
-			guint16			serverport;			/* 73-74: port server will connect to us from.		*/
-			guint16			srcport;			/* 75-76: connect request; port used on client behalf.	*/
-			guint16			boundport;			/* 77-78: bind request; port used on client behalf.	*/
-			guint32			boundaddr;			/* 79-82: addr used on client behalf			*/
-			char			pad30[90];			/* 83-172						*/
-			char			data[0];			/* End marker						*/
-		} connack;
-
-	} packet;
-};
-
-struct msproxy_response_t {
-	guint32					packetid;			/* 1-4							*/
-	guint32					magic5;				/* 5-8							*/
-	guint32             			serverid;			/* 9-12							*/
-	char					clientack;			/* 13: ack of last client packet.			*/
-	char					pad5[3];			/* 14-16						*/
-	unsigned char				sequence;			/* 17: sequence # of this packet.			*/
-	char					pad10[7];			/* 18-24						*/
-	char					RWSP[4];			/* 25-28: 0x52,0x57,0x53,0x50				*/
-	char					pad15[8];			/* 29-36						*/
-	guint16					command;				/* 37-38						*/
-
-	union {
-		struct {
-			char			pad5[18];			/* 39-56						*/
-			guint16			magic20;				/* 57-58: 0x02, 0x00					*/
-			char			pad10[6];			/* 59-64						*/
-			guint16			magic30;				/* 65-66: 0x74, 0x01					*/
-			char			pad15[2];			/* 67-68						*/
-			guint16			magic35;				/* 69-70: 0x0c, 0x00					*/
-			char			pad20[6];			/* 71-76						*/
-			guint16			magic50;				/* 77-78: 0x04, 0x00					*/
-			char			pad30[6];			/* 79-84						*/
-			guint16			magic60;				/* 85-86: 0x65, 0x05					*/
-			char			pad35[2];			/* 87-88						*/
-			guint16			magic65;				/* 89-90: 0x02, 0x00					*/
-			char			pad40[8];			/* 91-98						*/
-			guint16			udpport;			/* 99-100						*/
-			guint32			udpaddr;			/* 101-104						*/
-		} hello;
-
-		struct {
-			char			pad1[6];			/* 39-44						*/
-			guint32			magic10;				/* 45-48						*/
-			char			pad3[10];			/* 49-58						*/
-			guint16			boundport;			/* 59-60: port server bound for us.			*/
-			guint32			boundaddr;			/* 61-64: addr server bound for us.			*/
-			char			pad10[4];			/* 65-68						*/
-			guint16			magic15;				/* 69-70						*/
-			char			pad15[102];			/* 70-172						*/
-			char			NTLMSSP[sizeof("NTLMSSP")];	/* 173-180: "NTLMSSP"					*/
-			guint32			msgtype;				/* 181-184: NTLM message type = 2			*/
-			struct ntlm_buffer	target;				/* 185-192: target security buffer			*/
-			guint32			flags;				/* 193-196: NTLM message flags				*/
-			char			challenge[8];			/* 197-204: NTLM challenge request			*/
-			char			context[8];			/* 205-212: NTLM context				*/
-			char			data[1024];			/* 213-EOP: target information data			*/
-		} auth;
-
-		struct {
-			guint16			magic1;				/* 39-40						*/
-			char			pad5[18];			/* 41-58						*/
-			guint16			clientport;			/* 59-60: forwarded port.				*/
-			guint32			clientaddr;			/* 61-64: forwarded address.				*/
-			guint32			magic10;				/* 65-68						*/
-			guint32			magic15;				/* 69-72						*/
-			guint16			serverport;			/* 73-74: port server will connect to us from.		*/
-			guint16			srcport;			/* 75-76: connect request; port used on client behalf.	*/
-			guint16			boundport;			/* 77-78: bind request; port used on client behalf.	*/
-			guint32			boundaddr;			/* 79-82: addr used on client behalf			*/
-			char			pad10[90];			/* 83-172						*/
-		} connect;
-	} packet;
-};
-
-#pragma pack()
-
-int traverse_msproxy (int sok, char *serverAddr, int port, struct msproxy_state_t *state, netstore *ns_proxy, int csok4, int csok6, int *csok, char bound);
-void msproxy_keepalive (void);
-
-#endif
diff --git a/src/common/network.c b/src/common/network.c
index f5cfce58..c026116e 100644
--- a/src/common/network.c
+++ b/src/common/network.c
@@ -295,87 +295,4 @@ udp_sockets (int *sok4, int *sok6)
 	*sok6 = socket (AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
 }
 
-/* the following functions are used only by MSPROXY and are not
-   proper ipv6 implementations - do not use in new code! */
-
-void
-net_store_fill_any (netstore *ns)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-	if (ai == NULL)
-	{
-		ai = g_new0 (struct addrinfo, 1);
-		ns->ip6_hostent = ai;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	if (sin == NULL)
-	{
-		sin = g_new0 (struct sockaddr_in, 1);
-		ai->ai_addr = (struct sockaddr *)sin;
-	}
-	ai->ai_family = AF_INET;
-	ai->ai_addrlen = sizeof(struct sockaddr_in);
-	sin->sin_family = AF_INET;
-	sin->sin_addr.s_addr = INADDR_ANY;
-	sin->sin_port = 0;
-	ai->ai_next = NULL;
-}
-
-void
-net_store_fill_v4 (netstore *ns, guint32 addr, int port)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-	if (ai == NULL)
-	{
-		ai = g_new0 (struct addrinfo, 1);
-		ns->ip6_hostent = ai;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	if (sin == NULL)
-	{
-		sin = g_new0 (struct sockaddr_in, 1);
-		ai->ai_addr = (struct sockaddr *)sin;
-	}
-	ai->ai_family = AF_INET;
-	ai->ai_addrlen = sizeof(struct sockaddr_in);
-	sin->sin_family = AF_INET;
-	sin->sin_addr.s_addr = addr;
-	sin->sin_port = port;
-	ai->ai_next = NULL;
-}
-
-guint32
-net_getsockaddr_v4 (netstore *ns)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-
-	while (ai->ai_family != AF_INET) {
-		ai = ai->ai_next;
-		if (!ai)
-			return 0;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	return sin->sin_addr.s_addr;
-}
-
-int
-net_getsockport (int sok4, int sok6)
-{
-	struct sockaddr_in addr;
-	int len = sizeof (addr);
-
-	if (getsockname (sok4, (struct sockaddr *)&addr, &len) == -1)
-		return -1;
-	return addr.sin_port;
-}
-
 #endif
diff --git a/src/common/network.h b/src/common/network.h
index 6a4dce39..c043702e 100644
--- a/src/common/network.h
+++ b/src/common/network.h
@@ -43,11 +43,5 @@ char *net_resolve (netstore *ns, char *hostname, int port, char **real_host);
 void net_bind (netstore *tobindto, int sok4, int sok6);
 char *net_ip (guint32 addr);
 void net_sockets (int *sok4, int *sok6);
-/* functions for MSPROXY only! */
-void udp_sockets (int *sok4, int *sok6);
-void net_store_fill_any (netstore *ns);
-void net_store_fill_v4 (netstore *ns, guint32 addr, int port);
-guint32 net_getsockaddr_v4 (netstore *ns);
-int net_getsockport(int sok4, int sok6);
 
 #endif
diff --git a/src/common/server.c b/src/common/server.c
index c10b0a3c..2f92a431 100644
--- a/src/common/server.c
+++ b/src/common/server.c
@@ -21,8 +21,6 @@
  *      Inferno Nettverk A/S, Norway.  All rights reserved.
  */
 
-/*#define DEBUG_MSPROXY*/
-
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -63,10 +61,6 @@
 #include "ssl.h"
 #endif
 
-#ifdef USE_MSPROXY
-#include "msproxy.h"
-#endif
-
 #ifdef WIN32
 #include "identd.h"
 #endif
@@ -906,9 +900,6 @@ server_read_child (GIOChannel *source, GIOCondition condition, server *serv)
 	char outbuf[512];
 	char host[100];
 	char ip[100];
-#ifdef USE_MSPROXY
-	char *p;
-#endif
 
 	waitline2 (source, tbuf, sizeof tbuf);
 
@@ -982,23 +973,7 @@ server_read_child (GIOChannel *source, GIOCondition condition, server *serv)
 		break;
 	case '4':						  /* success */
 		waitline2 (source, tbuf, sizeof (tbuf));
-#ifdef USE_MSPROXY
-		serv->sok = strtol (tbuf, &p, 10);
-		if (*p++ == ' ')
-		{
-			serv->proxy_sok = strtol (p, &p, 10);
-			serv->msp_state.clientid = strtol (++p, &p, 10);
-			serv->msp_state.serverid = strtol (++p, &p, 10);
-			serv->msp_state.seq_sent = atoi (++p);
-		} else
-			serv->proxy_sok = -1;
-#ifdef DEBUG_MSPROXY
-		printf ("Parent got main socket: %d, proxy socket: %d\n", serv->sok, serv->proxy_sok);
-		printf ("Client ID 0x%08x server ID 0x%08x seq_sent %d\n", serv->msp_state.clientid, serv->msp_state.serverid, serv->msp_state.seq_sent);
-#endif
-#else
 		serv->sok = atoi (tbuf);
-#endif
 #ifdef USE_IPV6
 		/* close the one we didn't end up using */
 		if (serv->sok == serv->sok4)
@@ -1451,7 +1426,7 @@ traverse_http (int print_fd, int sok, char *serverAddr, int port)
 }
 
 static int
-traverse_proxy (int proxy_type, int print_fd, int sok, char *ip, int port, struct msproxy_state_t *state, netstore *ns_proxy, int csok4, int csok6, int *csok, char bound)
+traverse_proxy (int proxy_type, int print_fd, int sok, char *ip, int port, netstore *ns_proxy, int csok4, int csok6, int *csok, char bound)
 {
 	switch (proxy_type)
 	{
@@ -1463,10 +1438,6 @@ traverse_proxy (int proxy_type, int print_fd, int sok, char *ip, int port, struc
 		return traverse_socks5 (print_fd, sok, ip, port);
 	case 4:
 		return traverse_http (print_fd, sok, ip, port);
-#ifdef USE_MSPROXY
-	case 5:
-		return traverse_msproxy (sok, ip, port, state, ns_proxy, csok4, csok6, csok, bound);
-#endif
 	}
 
 	return 1;
@@ -1622,16 +1593,10 @@ server_child (server * serv)
 		/* connect succeeded */
 		if (proxy_ip)
 		{
-			switch (traverse_proxy (proxy_type, serv->childwrite, psok, proxy_ip, port, &serv->msp_state, ns_proxy, serv->sok4, serv->sok6, &sok, bound))
+			switch (traverse_proxy (proxy_type, serv->childwrite, psok, proxy_ip, port, ns_proxy, serv->sok4, serv->sok6, &sok, bound))
 			{
 			case 0:	/* success */
-#ifdef USE_MSPROXY
-				if (!serv->dont_use_proxy && (proxy_type == 5))
-					g_snprintf (buf, sizeof (buf), "4\n%d %d %d %d %d\n", sok, psok, serv->msp_state.clientid, serv->msp_state.serverid,
-						serv->msp_state.seq_sent);
-				else
-#endif
-					g_snprintf (buf, sizeof (buf), "4\n%d\n", sok);	/* success */
+				g_snprintf (buf, sizeof (buf), "4\n%d\n", sok);	/* success */
 				write (serv->childwrite, buf, strlen (buf));
 				break;
 			case 1:	/* socks traversal failed */
@@ -1761,16 +1726,8 @@ server_connect (server *serv, char *hostname, int port, int no_login)
 
 	/* create both sockets now, drop one later */
 	net_sockets (&serv->sok4, &serv->sok6);
-#ifdef USE_MSPROXY
-	/* In case of MS Proxy we have a separate UDP control connection */
-	if (!serv->dont_use_proxy && (serv->proxy_type == 5))
-		udp_sockets (&serv->proxy_sok4, &serv->proxy_sok6);
-	else
-#endif
-	{
-		serv->proxy_sok4 = -1;
-		serv->proxy_sok6 = -1;
-	}
+	serv->proxy_sok4 = -1;
+	serv->proxy_sok6 = -1;
 
 #ifdef WIN32
 	CloseHandle (CreateThread (NULL, 0,