From 64a3651b3ece1a1e3195f20e37247f929d179f61 Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Wed, 14 Sep 2011 10:57:17 +0200
Subject: Remove old ssl implementation and deprecated function ssl:peercert/1

---
 lib/ssl/Makefile                            |    4 +-
 lib/ssl/c_src/Makefile                      |   26 -
 lib/ssl/c_src/Makefile.dist                 |   33 -
 lib/ssl/c_src/Makefile.in                   |  211 ---
 lib/ssl/c_src/Makefile.win32                |  147 ---
 lib/ssl/c_src/Makefile.win32.dist           |   45 -
 lib/ssl/c_src/debuglog.c                    |  251 ----
 lib/ssl/c_src/debuglog.h                    |   50 -
 lib/ssl/c_src/esock.c                       | 1904 ---------------------------
 lib/ssl/c_src/esock.h                       |  273 ----
 lib/ssl/c_src/esock_openssl.c               | 1213 -----------------
 lib/ssl/c_src/esock_osio.c                  |  328 -----
 lib/ssl/c_src/esock_osio.h                  |   34 -
 lib/ssl/c_src/esock_poll.c                  |  222 ----
 lib/ssl/c_src/esock_poll.h                  |   60 -
 lib/ssl/c_src/esock_posix_str.c             |  642 ---------
 lib/ssl/c_src/esock_posix_str.h             |   28 -
 lib/ssl/c_src/esock_ssl.h                   |  110 --
 lib/ssl/c_src/esock_utils.c                 |  150 ---
 lib/ssl/c_src/esock_utils.h                 |   32 -
 lib/ssl/c_src/esock_winsock.h               |   36 -
 lib/ssl/doc/src/Makefile                    |    4 +-
 lib/ssl/doc/src/old_ssl.xml                 |  709 ----------
 lib/ssl/doc/src/refman.xml                  |    5 +-
 lib/ssl/doc/src/ssl.xml                     |    8 +-
 lib/ssl/src/Makefile                        |    7 +-
 lib/ssl/src/inet_ssl_dist.erl               |  453 -------
 lib/ssl/src/ssl.app.src                     |    7 +-
 lib/ssl/src/ssl.erl                         |  366 +----
 lib/ssl/src/ssl_broker.erl                  | 1188 -----------------
 lib/ssl/src/ssl_broker_int.hrl              |   38 -
 lib/ssl/src/ssl_broker_sup.erl              |   46 -
 lib/ssl/src/ssl_connection.erl              |    1 -
 lib/ssl/src/ssl_int.hrl                     |   99 --
 lib/ssl/src/ssl_internal.hrl                |    3 +
 lib/ssl/src/ssl_prim.erl                    |  173 ---
 lib/ssl/src/ssl_server.erl                  | 1378 -------------------
 lib/ssl/src/ssl_sup.erl                     |    7 +-
 lib/ssl/test/Makefile                       |   13 +-
 lib/ssl/test/old_ssl_active_SUITE.erl       |  395 ------
 lib/ssl/test/old_ssl_active_once_SUITE.erl  |  417 ------
 lib/ssl/test/old_ssl_dist_SUITE.erl         |  617 ---------
 lib/ssl/test/old_ssl_misc_SUITE.erl         |  117 --
 lib/ssl/test/old_ssl_passive_SUITE.erl      |  382 ------
 lib/ssl/test/old_ssl_peer_cert_SUITE.erl    |  191 ---
 lib/ssl/test/old_ssl_protocol_SUITE.erl     |  185 ---
 lib/ssl/test/old_ssl_verify_SUITE.erl       |  153 ---
 lib/ssl/test/old_transport_accept_SUITE.erl |  258 ----
 lib/ssl/test/ssl.cover                      |   19 +-
 lib/ssl/test/ssl_basic_SUITE.erl            |   48 +-
 lib/ssl/test/ssl_test_MACHINE.erl           |  940 -------------
 lib/ssl/test/ssl_test_MACHINE.hrl           |   39 -
 52 files changed, 79 insertions(+), 13986 deletions(-)
 delete mode 100644 lib/ssl/c_src/Makefile
 delete mode 100644 lib/ssl/c_src/Makefile.dist
 delete mode 100644 lib/ssl/c_src/Makefile.in
 delete mode 100644 lib/ssl/c_src/Makefile.win32
 delete mode 100644 lib/ssl/c_src/Makefile.win32.dist
 delete mode 100644 lib/ssl/c_src/debuglog.c
 delete mode 100644 lib/ssl/c_src/debuglog.h
 delete mode 100644 lib/ssl/c_src/esock.c
 delete mode 100644 lib/ssl/c_src/esock.h
 delete mode 100644 lib/ssl/c_src/esock_openssl.c
 delete mode 100644 lib/ssl/c_src/esock_osio.c
 delete mode 100644 lib/ssl/c_src/esock_osio.h
 delete mode 100644 lib/ssl/c_src/esock_poll.c
 delete mode 100644 lib/ssl/c_src/esock_poll.h
 delete mode 100644 lib/ssl/c_src/esock_posix_str.c
 delete mode 100644 lib/ssl/c_src/esock_posix_str.h
 delete mode 100644 lib/ssl/c_src/esock_ssl.h
 delete mode 100644 lib/ssl/c_src/esock_utils.c
 delete mode 100644 lib/ssl/c_src/esock_utils.h
 delete mode 100644 lib/ssl/c_src/esock_winsock.h
 delete mode 100644 lib/ssl/doc/src/old_ssl.xml
 delete mode 100644 lib/ssl/src/inet_ssl_dist.erl
 delete mode 100644 lib/ssl/src/ssl_broker.erl
 delete mode 100644 lib/ssl/src/ssl_broker_int.hrl
 delete mode 100644 lib/ssl/src/ssl_broker_sup.erl
 delete mode 100644 lib/ssl/src/ssl_int.hrl
 delete mode 100644 lib/ssl/src/ssl_prim.erl
 delete mode 100644 lib/ssl/src/ssl_server.erl
 delete mode 100644 lib/ssl/test/old_ssl_active_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_active_once_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_dist_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_misc_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_passive_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_peer_cert_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_protocol_SUITE.erl
 delete mode 100644 lib/ssl/test/old_ssl_verify_SUITE.erl
 delete mode 100644 lib/ssl/test/old_transport_accept_SUITE.erl
 delete mode 100644 lib/ssl/test/ssl_test_MACHINE.erl
 delete mode 100644 lib/ssl/test/ssl_test_MACHINE.hrl

(limited to 'lib')

diff --git a/lib/ssl/Makefile b/lib/ssl/Makefile
index daad7dc3e6..a7a95004a6 100644
--- a/lib/ssl/Makefile
+++ b/lib/ssl/Makefile
@@ -1,7 +1,7 @@
 #
 # %CopyrightBegin%
 #
-# Copyright Ericsson AB 1999-2010. All Rights Reserved.
+# Copyright Ericsson AB 1999-2011. All Rights Reserved.
 #
 # The contents of this file are subject to the Erlang Public License,
 # Version 1.1, (the "License"); you may not use this file except in
@@ -25,7 +25,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
 # Macros
 #
 
-SUB_DIRECTORIES = src c_src doc/src examples/certs examples/src
+SUB_DIRECTORIES = src  doc/src examples/certs examples/src
 
 include vsn.mk
 VSN = $(SSL_VSN)
diff --git a/lib/ssl/c_src/Makefile b/lib/ssl/c_src/Makefile
deleted file mode 100644
index 52d9140153..0000000000
--- a/lib/ssl/c_src/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# %CopyrightBegin%
-# 
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
-# 
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-# 
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-# 
-# %CopyrightEnd%
-#
-
-#
-
-#
-# Invoke with GNU make or clearmake -C gnu.
-#
-
-include $(ERL_TOP)/make/run_make.mk
diff --git a/lib/ssl/c_src/Makefile.dist b/lib/ssl/c_src/Makefile.dist
deleted file mode 100644
index 2468468921..0000000000
--- a/lib/ssl/c_src/Makefile.dist
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# %CopyrightBegin%
-# 
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
-# 
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-# 
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-# 
-# %CopyrightEnd%
-#
-
-# Makefile for SSL on Unix
-# 
-# Placed in obj directory. 
-#
-CC = gcc
-	
-BINDIR = %BINDIR%
-LIBS = %LIBS%
-SSL_LIBDIR = %SSL_LIBDIR% 
-OBJS = %OBJS%
-
-$(BINDIR)/ssl_esock: $(OBJS)
-	$(CC) -L$(SSL_LIBDIR) -Wl,-R$(SSL_LIBDIR) -o $@ $^ \
-		$(LIBS) -lssl -lcrypto
diff --git a/lib/ssl/c_src/Makefile.in b/lib/ssl/c_src/Makefile.in
deleted file mode 100644
index a894e6dcd7..0000000000
--- a/lib/ssl/c_src/Makefile.in
+++ /dev/null
@@ -1,211 +0,0 @@
-#
-# %CopyrightBegin%
-#
-# Copyright Ericsson AB 1999-2011. All Rights Reserved.
-#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-#
-# %CopyrightEnd%
-#
-
-#
-# Makefile only for Unix and Win32/Cygwin.
-# 
-
-include $(ERL_TOP)/make/target.mk
-include $(ERL_TOP)/make/$(TARGET)/otp.mk
-# ----------------------------------------------------
-# SSL locations and include options from configure
-# ----------------------------------------------------
-SSL_LIBDIR = @SSL_LIBDIR@
-SSL_INCLUDE = @SSL_INCLUDE@
-SSL_CRYPTO_LIBNAME = @SSL_CRYPTO_LIBNAME@
-SSL_SSL_LIBNAME = @SSL_SSL_LIBNAME@
-
-# ----------------------------------------------------
-# Application version
-# ----------------------------------------------------
-include ../vsn.mk
-VSN=$(SSL_VSN)
-
-# ----------------------------------------------------
-# Commands 
-# ----------------------------------------------------
-CC = @CC@
-LD = @LD@
-SHELL = /bin/sh
-LIBS = @LIBS@
-PLAIN_CFLAGS = @CFLAGS@
-
-# ----------------------------------------------------
-# Includes and libs
-# ----------------------------------------------------
-
-ALL_CFLAGS = @WFLAGS@ @CFLAGS@ @DEFS@ $(TYPE_FLAGS)
-TARGET = @host@
-
-ifeq ($(TYPE),debug)
-TYPEMARKER = .debug
-TYPE_FLAGS = -g -DDEBUG @DEBUG_FLAGS@
-else
-TYPEMARKER =
-TYPE_FLAGS = -O2
-endif
-
-PRIVDIR = ../priv
-BINDIR = $(PRIVDIR)/bin/$(TARGET)
-OBJDIR = $(PRIVDIR)/obj/$(TARGET)
-
-# ----------------------------------------------------
-# File suffixes
-# ----------------------------------------------------
-exe = @EXEEXT@
-obj = .@OBJEXT@
-
-# ----------------------------------------------------
-# Release directory specification
-# ----------------------------------------------------
-RELSYSDIR = $(RELEASE_PATH)/lib/ssl-$(VSN)
-
-# ----------------------------------------------------
-# Common Macros
-# ----------------------------------------------------
-OBJS = 	$(OBJDIR)/esock$(obj) \
-	$(OBJDIR)/debuglog$(obj) \
-	$(OBJDIR)/esock_poll$(obj) \
-	$(OBJDIR)/esock_osio$(obj) \
-	$(OBJDIR)/esock_utils$(obj) \
-	$(OBJDIR)/esock_posix_str$(obj) \
-	$(OBJDIR)/esock_openssl$(obj)
-
-PORT_PROGRAM = $(BINDIR)/ssl_esock$(exe)
-
-SKIP_BUILDING_BINARIES := false
-
-# Try to be BC for R10
-ifeq ($(findstring @SSL_,@SSL_DYNAMIC_ONLY@),@SSL_)
-DYNAMIC_CRYPTO_LIB=yes
-else
-DYNAMIC_CRYPTO_LIB=@SSL_DYNAMIC_ONLY@
-endif
-
-
-ifeq ($(DYNAMIC_CRYPTO_LIB),yes)
-
-ifneq ($(findstring win32,$(TARGET)),win32)
-SSL_MAKEFILE = $(OBJDIR)/Makefile
-else
-SSL_MAKEFILE =
-endif
-
-CC_R_FLAG=@CFLAG_RUNTIME_LIBRARY_PATH@
-
-ifeq ($(findstring @,$(CC_R_FLAG)),@)
-# Old erts configure used which hasn't replaced @CFLAG_RUNTIME_LIBRARY_PATH@;
-# we try our best here instead...
-
-ifeq ($(findstring darwin,$(TARGET)),darwin)	# darwin: no flag
-CC_R_FLAG =
-else
-ifeq ($(findstring osf,$(TARGET)),osf)		# osf1: -Wl,-rpath,
-CC_R_FLAG = -Wl,-rpath,
-else						# Default: -Wl,-R
-CC_R_FLAG = -Wl,-R
-endif
-endif
-endif
-
-ifeq ($(strip $(CC_R_FLAG)),)
-CC_R_OPT =
-else
-CC_R_OPT = $(CC_R_FLAG)$(SSL_LIBDIR)
-endif
-
-SSL_CC_RUNTIME_LIBRARY_PATH=@SSL_CC_RUNTIME_LIBRARY_PATH@
-# Sigh...
-ifeq ($(findstring @,$(SSL_CC_RUNTIME_LIBRARY_PATH)),@)
-SSL_CC_RUNTIME_LIBRARY_PATH = $(CC_R_OPT)
-endif
-
-SSL_LINK_LIB=-L$(SSL_LIBDIR) -l$(SSL_SSL_LIBNAME) -l$(SSL_CRYPTO_LIBNAME)
-else 
-# not dynamic crypto lib (default from R11B-5)
-NEED_KERBEROS=@SSL_LINK_WITH_KERBEROS@
-NEED_ZLIB=@SSL_LINK_WITH_ZLIB@
-SSL_MAKEFILE =
-CC_R_OPT =
-SSL_CC_RUNTIME_LIBRARY_PATH=
-SSL_LINK_LIB = $(SSL_LIBDIR)/lib$(SSL_SSL_LIBNAME).a $(SSL_LIBDIR)/lib$(SSL_CRYPTO_LIBNAME).a 
-ifeq ($(NEED_KERBEROS),yes)
-SSL_LINK_LIB += @STATIC_KERBEROS_LIBS@
-endif
-ifeq ($(NEED_ZLIB),yes)
-SSL_LINK_LIB += @STATIC_ZLIB_LIBS@
-endif
-endif
-
-# ----------------------------------------------------
-# Targets
-# ----------------------------------------------------
-
-_create_dirs := $(shell mkdir -p $(OBJDIR) $(BINDIR))
-
-debug opt: $(OBJS) $(PORT_PROGRAM) $(SSL_MAKEFILE)
-
-$(OBJDIR)/esock_openssl$(obj):	esock_openssl.c
-	$(CC) -c -o $@ $(ALL_CFLAGS) $(SSL_INCLUDE) $<
-
-$(OBJDIR)/%$(obj): %.c
-	$(CC) -c -o $@ $(ALL_CFLAGS) $<
-
-# Unix
-$(BINDIR)/ssl_esock: $(OBJS)
-	$(CC) $(PLAIN_CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) $(SSL_CC_RUNTIME_LIBRARY_PATH) $(SSL_LINK_LIB)
-
-# Win32/Cygwin
-$(BINDIR)/ssl_esock.exe: $(OBJS)
-	$(LD) $(SSL_CC_RUNTIME_LIBRARY_PATH) -L$(SSL_LIBDIR) -o $@ $^ -lwsock32 -l$(SSL_CRYPTO_LIBNAME) -l$(SSL_SSL_LIBNAME)
-
-# Unix only, and only when linking statically
-$(SSL_MAKEFILE):
-	sed 	-e "s;%BINDIR%;../../bin/$(TARGET);" \
-		-e "s;%SSL_LIBDIR%;$(SSL_LIBDIR);" \
-		-e "s;%OBJS;$(OBJS);" \
-		-e "s;%LIBS%;$(LIBS);" ./Makefile.dist \
-		> $(OBJDIR)/Makefile
-
-
-clean:
-	rm -f $(PORT_PROGRAM) $(OBJS) core *~ $(SSL_MAKEFILE)
-
-docs:
-
-# ----------------------------------------------------
-# Release Target
-# ---------------------------------------------------- 
-include $(ERL_TOP)/make/otp_release_targets.mk
-
-release_spec: opt
-	$(INSTALL_DIR) $(RELSYSDIR)/priv/bin
-	$(INSTALL_PROGRAM) $(PORT_PROGRAM) $(RELSYSDIR)/priv/bin
-ifneq ($(SSL_MAKEFILE),)
-	$(INSTALL_DIR) $(RELSYSDIR)/priv/obj
-	$(INSTALL_DATA) $(OBJS) $(RELSYSDIR)/priv/obj
-	sed 	-e "s;%BINDIR%;../bin;" \
-		-e "s;%SSL_LIBDIR%;$(SSL_LIBDIR);" \
-		-e "s;%OBJS;$(OBJS);" \
-		-e "s;%LIBS%;$(LIBS);" ./Makefile.dist \
-		> $(RELSYSDIR)/priv/obj/Makefile
-endif
-
-release_docs_spec:
-
diff --git a/lib/ssl/c_src/Makefile.win32 b/lib/ssl/c_src/Makefile.win32
deleted file mode 100644
index 668cd2a28d..0000000000
--- a/lib/ssl/c_src/Makefile.win32
+++ /dev/null
@@ -1,147 +0,0 @@
-#
-# %CopyrightBegin%
-# 
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
-# 
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-# 
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-# 
-# %CopyrightEnd%
-#
-
-#
-# SSL - Makefile for Windows NT
-#
-# It is assumed that the following environment variables have been set:
-#
-# INCLUDE       X:\MSDEV\INCLUDE
-# LIB           X:\MSDEV\LIB
-#
-# so that standard include files, and the socket library can be found.
-#
-# When ssl_esock.exe is run, the PATH environment variable must contain
-# the name of a directory that contains ssleay32.dll and libeay32.dll,
-# and windows socket dll.
-#
-
-# Roots
-!ifndef OPENSSL_ROOT
-!	error "Makefile.win32: ssl: OPENSSL_ROOT not set"
-!endif
-
-TARGET = win32
-
-BINDIR = ..\priv\bin\$(TARGET)
-OBJDIR = ..\priv\obj\$(TARGET)
-
-!if !exist($(BINDIR)) 
-!	if [mkdir $(BINDIR)]
-!	error "SSL: cannot create BINDIR"
-!	endif
-!endif
-
-!if !exist($(OBJDIR))
-!	if [mkdir $(OBJDIR)]
-!	error "SSL: cannot create OBJDIR"
-!	endif
-!endif
-
-# Includes
-#
-OPENSSL_INCLUDE = $(OPENSSL_ROOT)\inc32
-
-INCLUDES = /I. /I$(OPENSSL_INCLUDE)
-
-# Libraries
-#
-OPENSSL_LIBDIR = $(OPENSSL_ROOT)\out32dll
-OPENSSL_LIBS = \
-	$(OPENSSL_LIBDIR)\ssleay32.lib \
-	$(OPENSSL_LIBDIR)\libeay32.lib 
-
-!ifdef ESOCK_WINSOCK2
-WINSOCK_LIB = ws2_32.lib 
-DEFS = -DESOCK_WINSOCK2
-!else
-WINSOCK_LIB = wsock32.lib
-!endif	
-
-# Compiler options
-# 
-# NOTE: Size of fd_set is set in esock_winsock.h but can be overridden
-# with a -D option here.
-#
-OPTS = /MDd /G5 /Ox /O2 /Ob2 /Z7
-DEFS = -D__WIN32__ -DWIN32 $(DEFS)
-CFLAGS = $(INCLUDES) /nologo $(OPTS) $(DEFS)
-
-# Object files
-#
-SSL_BASE_OBJS = \
-	$(OBJDIR)\esock.obj \
-	$(OBJDIR)\debuglog.obj \
-	$(OBJDIR)\esock_poll$(obj) \
-	$(OBJDIR)\esock_osio.obj \
-	$(OBJDIR)\esock_utils.obj \
-	$(OBJDIR)\esock_posix_str.obj
-
-OPENSSL_OBJS = \
-	$(OBJDIR)\esock_openssl.obj
-
-#
-# Targets
-#
-
-all:	$(SSL_BASE_OBJS) $(OPENSSL_OBJS) $(BINDIR)\ssl_esock.exe
-
-clean: 
-	del $(BINDIR)\*.exe
-	del $(OBJDIR)\*.obj
-
-# Inference rule .c.obj:
-#
-{.}.c{$(OBJDIR)}.obj:
-	$(CC) $(CFLAGS) /c /Fo$@ $(*B).c
-
-# Binary
-#
-$(BINDIR)\ssl_esock.exe:	$(SSL_BASE_OBJS) $(OPENSSL_OBJS)
-	$(CC) /nologo  $(SSL_BASE_OBJS) $(OPENSSL_OBJS) $(OPENSSL_LIBS) \
-		$(WINSOCK_LIB) /Fe$(BINDIR)\ssl_esock.exe
-
-
-
-# Dependencies
-#
-$(OBJDIR)\esock.o:	esock.h debuglog.h esock_ssl.h esock_osio.h \
-			esock_utils.h esock_winsock.h
-$(OBJDIR)\debuglog.o:	debuglog.h esock_ssl.h esock_utils.h
-$(OBJDIR)\esock_osio.o:	esock_osio.h esock.h debuglog.h esock_utils.h \
-			esock_winsock.h
-$(OBJDIR)\esock_utils.o:	esock_utils.h
-$(OBJDIR)\esock_posix_str.o:	esock_posix_str.h esock_winsock.h
-
-$(OBJDIR)\esock_openssl.o: 	esock.h esock_ssl.h debuglog.h esock_utils.h \
-		                $(OPENSSL_INCLUDE)\crypto.h \
-		                $(OPENSSL_INCLUDE)\ssl.h \
-				$(OPENSSL_INCLUDE)\err.h
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/ssl/c_src/Makefile.win32.dist b/lib/ssl/c_src/Makefile.win32.dist
deleted file mode 100644
index 8510c44e08..0000000000
--- a/lib/ssl/c_src/Makefile.win32.dist
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# %CopyrightBegin%
-# 
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
-# 
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-# 
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
-# 
-# %CopyrightEnd%
-#
-	
-# Makefile.win32.dist for SSL
-# 
-# To be placed in obj directory. 
-#
-
-CC = cl
-
-BINDIR = %BINDIR%
-
-OPENSSL_LIBS = \
-	$(BINDIR)\ssleay32.lib \
-	$(BINDIR)\libeay32.lib 
-
-WINSOCK_LIB = ws2_32.lib 
-
-SSL_BASE_OBJS = esock.obj debuglog.obj esock_osio.obj esock_utils.obj \
-	        esock_posix_str.obj
-
-OPENSSL_OBJS = esock_openssl.obj
-
-$(BINDIR)\ssl_esock.exe:	$(SSL_BASE_OBJS) $(OPENSSL_OBJS)
-	$(CC) /nologo  $(SSL_BASE_OBJS) $(OPENSSL_OBJS) $(OPENSSL_LIBS) \
-		$(WINSOCK_LIB) /Fe$(BINDIR)\ssl_esock.exe
-
-
-
diff --git a/lib/ssl/c_src/debuglog.c b/lib/ssl/c_src/debuglog.c
deleted file mode 100644
index e2e55df4b2..0000000000
--- a/lib/ssl/c_src/debuglog.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose: Various routines for debug printouts and logs.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include "debuglog.h"
-#include "esock_utils.h"
-
-#ifndef __WIN32__
-static char tr_format_buf[256];
-static char *tr_format(const char *format);
-static int vfprintclistf(FILE *fp, const char *format, va_list args);
-#endif
-
-int debug = 0;
-int debugmsg = 0;
-FILE *ssllogfp = NULL;
-FILE *__locallogfp = NULL;
-
-void open_ssllog(char *path)
-{
-    ssllogfp = openlog(path);
-}
-
-void close_ssllog(void)
-{
-    if (ssllogfp)
-	closelog(ssllogfp);
-}
-
-FILE *openlog(char *s)
-{
-    FILE *fp;
-    time_t t = time(NULL);
-
-    if ((fp = fopen(s, "a"))) {
-	setbuf(fp, NULL);
-	fprintf(fp, "===== Opened [%s] %s", s, ctime(&t));
-    }
-    return fp;
-}
-
-void closelog(FILE *fp)
-{
-    time_t t = time(NULL);
-
-    if (fp) {
-	fprintf(fp, "Closed %s", ctime(&t));
-	fclose(fp);
-    }
-}
-
-int __debugprintf(const char *format, ...)
-{
-    va_list args;
-    int ret;
-#ifndef __WIN32__
-    char *newformat;
-
-    va_start(args, format);
-    newformat = tr_format(format);
-    ret = vfprintf(stderr, newformat, args);
-    if (newformat != format && newformat != tr_format_buf)
-	esock_free(newformat);
-#else
-    va_start(args, format);
-    ret = vfprintf(stderr, format, args);
-#endif
-    va_end(args);
-    if (ssllogfp) { 
-        va_start(args, format);
-	vfprintf(ssllogfp, format, args);
-        va_end(args);
-    }
-    return ret;
-}
-
-int __debugprintclistf(const char *format, ...)
-{
-    va_list args;
-    int ret;
-#ifndef __WIN32__
-    char *newformat;
-
-    va_start(args, format);
-    newformat = tr_format(format);
-    ret = vfprintclistf(stderr, newformat, args);
-    if (newformat != format && newformat != tr_format_buf)
-	esock_free(newformat);
-#else
-    va_start(args, format);
-    ret = vfprintclistf(stderr, format, args);
-#endif
-    if (ssllogfp) 
-	vfprintclistf(ssllogfp, format, args);
-    va_end(args);
-    return ret;
-}
-
-int __debuglogf(const char *format, ...)
-{
-    va_list args;
-    int ret;
-
-    va_start(args, format);
-    ret = vfprintf(__locallogfp, format, args);
-    va_end(args);
-    return ret;
-}
-
-#ifndef __WIN32__
-
-/* Insert `\r' before each `\n' i format */
-static char *tr_format(const char *format)
-{
-    char *newformat, *s, *t;
-    int len;
-
-    len = strlen(format);
-    if ((newformat = (len > 127) ? esock_malloc(len) : tr_format_buf)) {
-	for (s = (char *)format, t = newformat; *s; *t++ = *s++)
-	    if (*s == '\n') 
-		*t++ = '\r';
-	*t = '\0';
-    } else
-	newformat = (char *)format;
-    return newformat;
-}
-
-#endif
-
-/* This function is for printing arrays of characters with formats
- * %FPa or %FPb, where F and P are the ordinary specifiers for 
- * field width and precision, respectively. 
- * 
- * The conversion specifier `a' implies hex-string output, while 
- * the `b' specifier provides character output (for non-printable
- * characters a `.' is written.
- *
- * The F specifier contains the width for each character. The 
- * P specifier tells how many characters to print.
- *
- * Example: Suppose we have a function myprintf(char *format, ...)
- * that calls our vfprintclistf(), and that
- *
- * char buf[] = "h\r\n";
- * len = 3;
- *
- * Then 
- *
- * myprintf("%.2b", buf)         prints     "h."
- * myprintf("%2.3b", buf)        prints     "h . . "
- * myprintf("%3.*a", len, buf)   prints     "68 0d 0a"
- *  
- */
-
-static int vfprintclistf(FILE *fp, const char *format, va_list args)
-{
-
-    int i, len, width, prec, written = 0;
-    char *s, *prevs, *fstart;
-    unsigned char *buf;
-
-    if (!format || !*format)
-	return 0;
-    
-    /* %{[0-9]*|\*}{.{[0-9]*|\*}{a|b} */
-
-    prevs = (char *)format;	/* format is const */
-    s = strchr(format, '%');
-    while (s && *s) {
-	if (s - prevs > 0)
-	    written += fprintf(fp, "%.*s", s - prevs, prevs);
-	width = prec = 0;
-	fstart = s;
-	s++;
-	if (*s != '%') {	/* otherwise it is not a format */
-	    if (*s == '*') {	/* width in arg */
-		s++;
-		width = va_arg(args, int);
-	    } else if ((len = strspn(s, "0123456789"))) { /* const width */
-		width = atoi(s);
-		s += len;
-	    } else 
-		width = 0;
-	    if (*s == '.') {	/* precision specified */
-		s++;
-		if (*s == '*') { /* precision in arg */
-		    s++;
-		    prec = va_arg(args, int);
-		} else if ((len = strspn(s, "0123456789"))) { /* const prec */
-		    prec = atoi(s);
-		    s += len;
-		} else		/* no precision value, defaults to zero */
-		    prec = 0;
-	    }  else
-		prec = 0;	/* no precision defaults to zero */
-	    if (*s == 'a' || *s == 'b') { /* only valid specifiers */
-		buf = va_arg(args, unsigned char *);
-		if (*s == 'a') {
-		    for (i = 0; i < prec; i++) 
-			written += fprintf(fp, "%*.2x", width, buf[i]);
-		}else if (*s == 'b') {
-		    for (i = 0; i < prec; i++) {
-			if (isprint(buf[i]))
-			    written += fprintf(fp, "%*c", width, buf[i]);
-			else
-			    written += fprintf(fp, "%*c", width, '.');
-		    }
-		}
-	    } else {
-		fprintf(stderr, "fprintclistf: format \"%s\" invalid.\n", 
-			format);
-		va_end(args);
-		return written;
-	    }
-	}
-	s++;
-	/* Now s points to the next character after the format */
-	prevs = s;
-	s = strchr(s, '%');
-    }
-    if (format + strlen(format) + 1 - prevs > 0)
-	written += fprintf(fp, "%s", prevs);
-    return written;
-}
-
diff --git a/lib/ssl/c_src/debuglog.h b/lib/ssl/c_src/debuglog.h
deleted file mode 100644
index 5699e6b495..0000000000
--- a/lib/ssl/c_src/debuglog.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*<copyright>
- * <year>1998-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose:  Debug functions and macros.
- *
- */
-
-#ifndef __DEBUGLOG_H_
-#define __DEBUGLOG_H_
-
-#include <stdio.h>
-#include "esock_ssl.h"
-
-#define DEBUGF(x)  if (debug) __debugprintf x;
-#define DEBUGMSGF(x)  if (debugmsg) __debugprintclistf x;
-#define LOGF(fp, x) if (fp) { __locallogfp = fp; __debuglogf x; }
-#define SSLDEBUGF()  if (debug) { esock_ssl_print_errors_fp(stderr); \
-    if (ssllogfp) esock_ssl_print_errors_fp(ssllogfp); }
-
-int  debug;
-int  debugmsg;
-FILE *ssllogfp;
-FILE *__locallogfp;
-
-void open_ssllog(char *path);
-void close_ssllog(void);
-FILE *openlog(char *);
-void closelog(FILE *);
-int __debugprintf(const char *, ...);
-int __debugprintclistf(const char *, ...);
-int __debuglogf(const char *, ...);
-
-#endif
diff --git a/lib/ssl/c_src/esock.c b/lib/ssl/c_src/esock.c
deleted file mode 100644
index 78d08f7c29..0000000000
--- a/lib/ssl/c_src/esock.c
+++ /dev/null
@@ -1,1904 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-
-/*
- * Purpose:  Implementation of Secure Socket Layer (SSL).
- *
- * This is an "SSL proxy" for Erlang in the form of a port
- * program. 
- *
- * The implementation has borrowed somewhat from the original
- * implementation of `socket' by Claes Wikstr�m, and the former
- * implementation of `ssl_socket' by Helen Ariyan.
- *
- * All I/O is now non-blocking. 
- *
- * When a connection (cp) is in the state JOINED we have the following
- * picture:
- *
- *            proxy->fd                          fd
- *               |                               |
- *  proxy->eof   |  -------->  wq  ----------->  |   bp 
- *               |                               |
- *  Erlang       |                               |   SSL
- *               |                               |
- *  proxy->bp    |  <------ proxy->wq ---------  |   eof
- *               |                               |
- * 
- * We read from Erlang (proxy->fd) and write to SSL (fd); and read from 
- * SSL (fd) and write to Erlang (proxy->fd).  
- *
- * The variables bp (broken pipe) and eof (end of file) take the
- * values 0 and 1.
- *
- * What has been read and cannot be immediately written is put in a
- * write queue (wq). A wq is emptied before reads are continued, which
- * means that at most one chunk that is read can be in a wq.
- *
- * The proxy-to-ssl part of a cp is valid iff 
- *
- *         !bp && (wq.len > 0 || !proxy->eof).
- *
- * The ssl-to-proxy part of a cp is valid iff 
- *
- *         !proxy->bp && (proxy->wq.len > 0 || !eof). 
- *
- * The connection is valid if any of the above parts are valid, i.e.
- * invalid if both parts are invalid.
- *
- * Every SELECT_TIMEOUT second we try to write to those file
- * descriptors that have non-empty wq's (the only way to detect that a
- * far end has gone away is to write to it).
- *
- * STATE TRANSITIONS
- *
- * Below (*) means that the corresponding file descriptor is published
- * (i.e. kwown outside this port program) when the state is entered,
- * and thus cannot be closed without synchronization with the
- * ssl_server.
- *
- * Listen:
- *
- * STATE_NONE ---> (*) PASSIVE_LISTENING <---> ACTIVE_LISTENING
- *
- * Accept:
- *
- * STATE_NONE ---> SSL_ACCEPT ---> (*) CONNECTED ---> JOINED ---> 
- *  ---> SSL_SHUTDOWN ---> DEFUNCT
- *
- * Connect:
- *
- * STATE_NONE ---> (*) WAIT_CONNECT ---> SSL_CONNECT ---> CONNECTED ---> 
- *  ---> JOINED ---> SSL_SHUTDOWN ---> DEFUNCT
- * 
- * In states where file descriptors has been published, and where
- * something goes wrong, the state of the connection is set to
- * DEFUNCT. A connection in such a state can only be closed by a CLOSE
- * message from Erlang (a reception of such a message is registered in
- * cp->closed). The possible states are: WAIT_CONNECT, SSL_CONNECT,
- * CONNECTED, JOINED, and SSL_SHUTDOWN.
- *
- * A connection in state SSL_ACCEPT can be closed and removed without
- * synchronization.
- *
- */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef __WIN32__
-#include "esock_winsock.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <errno.h>
-
-#ifdef __WIN32__
-#include <process.h>
-#else
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/time.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#endif
-
-#ifndef INADDR_NONE
-#define INADDR_NONE 0xffffffff  /* Should be in <netinet/in.h>.  */
-#endif
-
-#include "esock.h"
-#include "debuglog.h"
-#include "esock_utils.h"
-#include "esock_ssl.h"
-#include "esock_osio.h"
-#include "esock_posix_str.h"
-#include "esock_poll.h"
-
-#define MAJOR_VERSION   2
-#define MINOR_VERSION   0
-#define MAXREPLYBUF	256
-#define RWBUFLEN	(32*1024)
-#define IS_CLIENT       0
-#define IS_SERVER       1
-#define SELECT_TIMEOUT  2	/* seconds */
-
-#define psx_errstr()	esock_posix_str(sock_errno())
-#define ssl_errstr()	esock_ssl_errstr
-
-#define PROXY_TO_SSL_VALID(cp) (!(cp)->bp && \
-				((cp)->wq.len > 0 || !(cp)->proxy->eof))
-
-#define SSL_TO_PROXY_VALID(cp) (!(cp)->proxy->bp && \
-				((cp)->proxy->wq.len > 0 || !(cp)->eof))
-
-#define JOINED_STATE_INVALID(cp) (!(PROXY_TO_SSL_VALID(cp)) && \
-				!(SSL_TO_PROXY_VALID(cp)))
-static int loop(void);
-static int set_poll_conns(Connection *cp, EsockPoll *ep, int verbose);
-static Connection *next_polled_conn(Connection *cp, Connection **cpnext,
-				    EsockPoll *ep, int set_wq_fds);
-
-static void leave_joined_state(Connection *cp);
-static void do_shutdown(Connection *cp);
-static void close_and_remove_connection(Connection *cp);
-static int reply(int cmd, char *fmt, ...);
-static int input(char *fmt, ...);
-static int put_pars(unsigned char *buf, char *fmt, va_list args);
-static int get_pars(unsigned char *buf, char *fmt, va_list args);
-static FD do_connect(char *lipstring, int lport, char *fipstring, int fport);
-static FD do_listen(char *ipstring, int lport, int backlog, int *aport);
-static FD do_accept(FD listensock, struct sockaddr *saddr, int *len);
-static void print_connections(void);
-static void dump_connections(void);
-static int check_num_sock_fds(FD fd); 
-static void safe_close(FD fd);
-static Connection *new_connection(int state, FD fd);
-static Connection *get_connection(FD fd);
-static void remove_connection(Connection *conn);
-static Proxy *get_proxy_by_peerport(int port);
-static Proxy *new_proxy(FD fd);
-static void remove_proxy(Proxy *proxy);
-static void ensure_write_queue(WriteQueue *wq, int size);
-static void clean_up(void);
-
-static Connection  *connections = NULL;
-static int num_sock_fds;	/* On UNIX all file descriptors */
-static Proxy *proxies = NULL;
-static int proxy_listensock = INVALID_FD;
-static int proxy_listenport = 0;
-static int proxy_backlog = 128;
-static int proxysock_last_err = 0;
-static int proxysock_err_cnt = 0;
-static char rwbuf[RWBUFLEN];
-static unsigned char *ebuf = NULL; /* Set by read_ctrl() */
-
-static char *connstr[] = {
-    "STATE_NONE", 
-    "ACTIVE_LISTENING",
-    "PASSIVE_LISTENING",
-    "CONNECTED",
-    "WAIT_CONNECT",
-    "SSL_CONNECT",
-    "SSL_ACCEPT",
-    "TRANSPORT_ACCEPT",
-    "JOINED",
-    "SSL_SHUTDOWN",
-    "DEFUNCT"
-};
-
-static char *originstr[] = {
-    "listen",
-    "accept",
-    "connect"
-};
-
-int main(int argc, char **argv) 
-{
-    char *logfile = NULL;
-    int i;
-    esock_version *vsn;
-    char *ciphers; 
-#ifdef __WIN32__
-    int pid;
-    WORD version;
-    WSADATA wsa_data;
-
-    set_binary_mode();
-    setvbuf(stderr, NULL, _IONBF, 0);
-    /* Two sockets for the stdin socket pipe (local thread). */
-    num_sock_fds = 2;		
-#else
-    pid_t pid;
-    num_sock_fds = 3;		/* 0, 1, 2 */
-#endif
-
-    pid = getpid();
-    i = 1;
-    while (i < argc) {
-	if (strcmp(argv[i], "-d") == 0) {
-	    debug = 1;
-	    i++;
-	} else if (strcmp(argv[i], "-dm") == 0) {
-	    debugmsg = 1;
-	    i++;
-	} else if (strcmp(argv[i], "-pp") == 0) {
-	    i++;
-	    proxy_listenport = atoi(argv[i]);
-	    i++;
-	} else if (strcmp(argv[i], "-pb") == 0) {
-	    i++;
-	    proxy_backlog = atoi(argv[i]);
-	    i++;
-	} else if (strcmp(argv[i], "-pv") == 0) {
-	    i++;
-	    protocol_version = atoi(argv[i]);
-	    i++;
-	} else if (strcmp(argv[i], "-dd") == 0) {
-	    i++;
-	    logfile = esock_malloc(strlen(argv[i]) + 64);
-	    sprintf(logfile, "%s/ssl_esock.%d.log", argv[i], (int)pid);
-	    i++;
-	} else if (strcmp(argv[i], "-ersa") == 0) {
-	    ephemeral_rsa = 1;
-	    i++;
-	} else if (strcmp(argv[i], "-edh") == 0) {
-	    ephemeral_dh = 1;
-	    i++;
-	}
-    }
-    if (debug || debugmsg) {
-	DEBUGF(("Starting ssl_esock\n"));
-	if (logfile) {
-	    open_ssllog(logfile);
-#ifndef __WIN32__
-	    num_sock_fds++;
-#endif
-	}
-	atexit(close_ssllog);
-	DEBUGF(("pid = %d\n", getpid()));
-    }
-    if (esock_ssl_init() < 0) {
-	fprintf(stderr, "esock: Could not do esock_ssl_init\n");
-	exit(EXIT_FAILURE);
-    }
-
-    atexit(esock_ssl_finish);
-
-#ifdef __WIN32__
-    /* Start Windows' sockets */
-    version = MAKEWORD(MAJOR_VERSION, MINOR_VERSION);
-    if (WSAStartup(version, &wsa_data) != 0) {
-	fprintf(stderr, "esock: Could not start up Windows' sockets\n");
-	exit(EXIT_FAILURE);
-    }
-    atexit((void (*)(void))WSACleanup);
-    if (LOBYTE(wsa_data.wVersion) < MAJOR_VERSION ||
-	(LOBYTE(wsa_data.wVersion) == MAJOR_VERSION && 
-	 HIBYTE(wsa_data.wVersion) < MINOR_VERSION)) {
-	fprintf(stderr, "esock: Windows socket version error. "
-		"Requested version:"
-		"%d.%d, version found: %d.%d\n", MAJOR_VERSION, 
-		MINOR_VERSION, LOBYTE(wsa_data.wVersion), 
-		HIBYTE(wsa_data.wVersion));
-	exit(EXIT_FAILURE);
-    }
-    DEBUGF(("Using Windows socket version: %d.%d\n", 
-	   LOBYTE(wsa_data.wVersion), HIBYTE(wsa_data.wVersion)));
-    DEBUGF(("Maximum number of sockets available: %d\n", 
-	    wsa_data.iMaxSockets));
- 
-    if (esock_osio_init() < 0) {
-	fprintf(stderr, "esock: Could not init osio\n");
-	exit(EXIT_FAILURE);
-    }
-    atexit(esock_osio_finish);
-#endif
-
-    /* Create the local proxy listen socket and set it to non-blocking */
-    proxy_listensock = do_listen("127.0.0.1", proxy_listenport, 
-				 proxy_backlog, &proxy_listenport);
-    if (proxy_listensock == INVALID_FD) {
-	fprintf(stderr, "esock: Cannot create local listen socket\n");
-	exit(EXIT_FAILURE);
-    }
-    SET_NONBLOCKING(proxy_listensock);
-    DEBUGF(("Local proxy listen socket: fd = %d, port = %d\n", 
-	   proxy_listensock, proxy_listenport));
-
-    vsn = esock_ssl_version();
-    ciphers = esock_ssl_ciphers();
-
-    /* Report: port number of the local proxy listen socket, the native
-     * os pid, the compile and lib versions of the ssl library, and 
-     * the list of available ciphers. */
-    reply(ESOCK_PROXY_PORT_REP, "24sss", proxy_listenport, (int)pid, 
-	  vsn->compile_version, vsn->lib_version, ciphers);
-
-    atexit(clean_up);
-
-    loop();
-
-    if (logfile) 
-	esock_free(logfile);
-    exit(EXIT_SUCCESS);
-}
-
-
-/*
- * Local functions
- *
- */
-
-static int loop(void)
-{
-    EsockPoll pollfd;
-    FD fd, msgsock, listensock, connectsock, proxysock;
-    int cc, wc, fport, lport, pport, length, backlog, intref, op;
-    int value;
-    char *lipstring, *fipstring;
-    char *flags;
-    char *protocol_vsn, *cipher;
-    unsigned char *cert, *bin;
-    int certlen, binlen;
-    struct sockaddr_in iserv_addr;
-    int sret = 1;
-    Connection *cp, *cpnext, *newcp;
-    Proxy *pp;
-    time_t last_time = 0, now = 0;
-    int set_wq_fds;
-
-    esock_poll_init(&pollfd);
-
-    while(1) {
-	esock_poll_zero(&pollfd);
-	esock_poll_fd_set_read(&pollfd, proxy_listensock);
-	esock_poll_fd_set_read(&pollfd, local_read_fd);
-
-	set_wq_fds = 0;
-
-	if (sret)		/* sret == 1 the first time. */
-	    DEBUGF(("==========LOOP=============\n"));
-
-	cc = set_poll_conns(connections, &pollfd, sret) + 1;
-
-	if (sret) {
-	    print_connections();
-	    DEBUGF(("Before poll/select: %d descriptor%s (total %d)\n",
-		    cc, (cc == 1) ? "" : "s", num_sock_fds));
-	}
-
-	sret = esock_poll(&pollfd, SELECT_TIMEOUT);
-	if (sret < 0) {
-	    DEBUGF(("select/poll error: %s\n", psx_errstr()));
-	    continue;
-	}
-	
-	time(&now);
-	if (now >= last_time + SELECT_TIMEOUT) {
-	    set_wq_fds = 1;
-	    last_time = now;
-	}
-	/*
-	 * First accept as many connections as possible on the
-	 * proxy listen socket. We record the peer port, which
-	 * is later used as a reference for joining a proxy 
-	 * connection with a network connection.
-	 */
-
-	if (esock_poll_fd_isset_read(&pollfd, proxy_listensock)) {
-	    while (1) {
-		length = sizeof(iserv_addr);
-		proxysock = do_accept(proxy_listensock, 
-				      (struct sockaddr *)&iserv_addr, 
-				      (int*)&length);
-		if(proxysock == INVALID_FD) {
-		    if (sock_errno() != ERRNO_BLOCK) {
-			/* We can here for example get the error
-			 * EMFILE, i.e. no more file descriptors
-			 * available, but we do not have any specific
-			 * connection to report the error to.  We
-			 * increment the error counter and saves the
-			 * last err.  
-			 */
-			proxysock_err_cnt++;
-			proxysock_last_err = sock_errno();
-			DEBUGF(("accept error (proxy_listensock): %s\n", 
-				psx_errstr()));
-		    }
-		    break;
-		} else {
-		    /* Get peer port number */
-/* 		    length = sizeof(iserv_addr); */
-/* 		    if (getpeername(proxysock, (struct sockaddr *)&iserv_addr,  */
-/* 				    &length) < 0) { */
-/* 			DEBUGF(("Can't get peername of proxy socket")); */
-/* 			safe_close(proxysock); */
-/* 		    } else { */
-			/* Add to pending proxy connections */
-			SET_NONBLOCKING(proxysock);
-			pp = new_proxy(proxysock);
-			pp->peer_port = ntohs(iserv_addr.sin_port);
-			DEBUGF(("-----------------------------------\n"));
-			DEBUGF(("[PROXY_LISTEN_SOCK] conn accepted: "
-				"proxyfd = %d, "
-			       "peer port = %d\n", proxysock, pp->peer_port));
-/* 		    } */
-		}
-	    }
-	}
-
-	/* 
-	 * Read control messages from Erlang
-	 */
-	if (esock_poll_fd_isset_read(&pollfd, local_read_fd)) {  
-	    cc = read_ctrl(&ebuf);
-	    if ( cc < 0 ) {
-		DEBUGF(("Read loop -1 or 0\n"));
-		return -1;
-	    } else if (cc == 0) {  /* not eof  */
-		DEBUGF(("GOT empty string \n"));
-
-	    } else {
-
-		switch((int)*ebuf) {
-
-		case ESOCK_SET_SEED_CMD:
-		    /* 
-		     * ebuf = {cmd(1), binary(N) }
-		     */
-		    input("b", &binlen, &bin);
-		    DEBUGF(("[SET_SEED_CMD]\n"));
-		    esock_ssl_seed(bin, binlen);
-		    /* no reply */
-		    break;
-
-		case ESOCK_GETPEERNAME_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    DEBUGF(("[GETPEERNAME_CMD] fd = %d\n", fd)); 
-		    cp = get_connection(fd);
-		    length = sizeof(iserv_addr);
-		    if (!cp) {
-			sock_set_errno(ERRNO_NOTSOCK);
-			reply(ESOCK_GETPEERNAME_ERR, "4s", fd, psx_errstr());
-		    } else if (getpeername(fd, 
-					   (struct sockaddr *) &iserv_addr, 
-					   &length) < 0) {
-			reply(ESOCK_GETPEERNAME_ERR, "4s", fd, psx_errstr());
-		    } else {
-			/*
-			 * reply  = {cmd(1), fd(4), port(2), 
-			 * 	    ipstring(N), 0(1)}
-			 */
-			reply(ESOCK_GETPEERNAME_REP, "42s", fd, 
-			      ntohs(iserv_addr.sin_port), 
-			      inet_ntoa(iserv_addr.sin_addr));
-		    }
-		    break;
-
-		case ESOCK_GETSOCKNAME_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    DEBUGF(("[GETSOCKNAME_CMD] fd = %d\n", fd)); 
-		    cp = get_connection(fd);
-		    length = sizeof(iserv_addr);
-		    if (!cp) {
-			sock_set_errno(ERRNO_NOTSOCK);
-			reply(ESOCK_GETSOCKNAME_ERR, "4s", fd, psx_errstr());
-		    } else if (getsockname(fd, 
-					   (struct sockaddr *)&iserv_addr, 
-					   &length) < 0) {
-			reply(ESOCK_GETSOCKNAME_ERR, "4s", fd, psx_errstr());
-		    } else {
-			/*
-			 * reply  = {cmd(1), fd(4), port(2), 
-			 * 	    ipstring(N), 0(1)}
-			 */
-			reply(ESOCK_GETSOCKNAME_REP, "42s", fd, 
-			      ntohs(iserv_addr.sin_port),
-			      inet_ntoa(iserv_addr.sin_addr));
-		    }
-		    break;
-
-		case ESOCK_GETCONNINFO_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    DEBUGF(("[GETCONNINFO_CMD] fd = %d\n", fd)); 
-		    cp = get_connection(fd);
-		    if (!cp) {
-			sock_set_errno(ERRNO_NOTSOCK);
-			reply(ESOCK_GETCONNINFO_ERR, "4s", fd, psx_errstr());
-		    } else {
-			if (esock_ssl_getprotocol_version(cp,
-							  &protocol_vsn) < 0)
-			    reply(ESOCK_GETCONNINFO_ERR, "4s", fd, psx_errstr());
-			else if (esock_ssl_getcipher(cp, &cipher) < 0)
-			    reply(ESOCK_GETCONNINFO_ERR, "4s", fd, psx_errstr());
-			else
-			/*
-			 * reply  = {cmd(1), fd(4), protocol(N), 0(1),
-			 * 	    cipher(N), 0(1)}
-			 */
-			    reply(ESOCK_GETCONNINFO_REP, "4ss", fd, 
-				  protocol_vsn, cipher);
-		    }
-		    break;
-
-		case ESOCK_GETPEERCERT_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    DEBUGF(("[GETPEERCERT_CMD] fd = %d\n", fd)); 
-		    cp = get_connection(fd);
-		    if (!cp) {
-			sock_set_errno(ERRNO_NOTSOCK);
-			reply(ESOCK_GETPEERCERT_ERR, "4s", fd, psx_errstr());
-		    } else {
-			if ((certlen = esock_ssl_getpeercert(cp, &cert)) < 0)
-			    reply(ESOCK_GETPEERCERT_ERR, "4s", fd, psx_errstr());
-			else {
-			    /*
-			     * reply  = {cmd(1), fd(4), certlen(4), cert(N)}
-			     */
-			    reply(ESOCK_GETPEERCERT_REP, "4b", fd, 
-				  certlen, cert);
-			    esock_free(cert);
-			}
-		    }
-		    break;
-
-		case ESOCK_CONNECT_CMD:
-		    /* 
-		     * ebuf = {cmd(1), intref(4), 
-		     * 	       lport(2), lipstring(N), 0(1),  -- local
-		     *         fport(2), fipstring(N), 0(1),  -- foreign
-		     * 	       flags(N), 0(1)}
-		     */
-		    input("42s2ss", &intref, &lport, &lipstring, 
-			  &fport, &fipstring, &flags);
-		    DEBUGF(("[CONNECT_CMD] intref = %d, "
-			    "lipstring = %s lport = %d, "
-			    "fipstring = %s fport = %d, "
-			    "flags = %s\n", intref, lipstring, lport,
-			    fipstring, fport, flags));
-		    connectsock = do_connect(lipstring, lport, 
-					     fipstring, fport);
-		    if(connectsock == INVALID_FD) {
-			reply(ESOCK_CONNECT_SYNC_ERR, "4s", intref, psx_errstr());
-			break;
-		    }
-		    DEBUGF(("  fd = %d\n", connectsock));
-		    cp = new_connection(ESOCK_WAIT_CONNECT, connectsock);
-		    cp->origin = ORIG_CONNECT;
-		    length = strlen(flags);
-		    cp->flags = esock_malloc(length + 1);
-		    strcpy(cp->flags, flags);
-		    DEBUGF(("-> WAIT_CONNECT fd = %d\n", connectsock));
-		    /* Publish connectsock */
-		    reply(ESOCK_CONNECT_WAIT_REP, "44", intref, connectsock);
-		    break;
-		    
-		case ESOCK_TERMINATE_CMD:
-		    /* 
-		     * ebuf = {cmd(1)}
-		     */
-		    exit(EXIT_SUCCESS);
-		    break;
-
-		case ESOCK_CLOSE_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    if ((cp = get_connection(fd))) {
-			DEBUGF(("%s[CLOSE_CMD]: fd = %d\n", 
-				connstr[cp->state], fd));
-			if (cp->proxy)
-			    cp->proxy->bp = 1;
-			switch (cp->state) {
-			case ESOCK_JOINED:
-			    cp->close = 1;
-			    if (JOINED_STATE_INVALID(cp))
-				leave_joined_state(cp);
-			    break;
-			case ESOCK_SSL_SHUTDOWN:
-			    cp->close = 1;
-			    DEBUGF(("  close flag set\n"));
-			    break;
-			default:
-			    DEBUGF(("-> (removal)\n"));
-			    close_and_remove_connection(cp);
-			}
-		    } else 
-			DEBUGF(("[CLOSE_CMD]: ERROR: fd = %d not found\n", fd));
-		    break;
-
-		case ESOCK_SET_SOCKOPT_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4), op(1), on(1)}
-		     */
-		    input("411", &fd, &op, &value);
-		    switch(op) {
-		    case ESOCK_SET_TCP_NODELAY:
-			if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, 
-				      (void *)&value, sizeof(value)) < 0) {
-			    DEBUGF(("Error: setsockopt TCP_NODELAY\n"));
-			    reply(ESOCK_IOCTL_ERR, "4s", fd, psx_errstr());
-			} else {
-			    reply(ESOCK_IOCTL_OK, "4", fd);
-			}
-			break;
-		    default:
-			DEBUGF(("Error: set_sock_opt - Not implemented\n"));
-			sock_set_errno(ERRNO_OPNOTSUPP);
-			reply(ESOCK_IOCTL_ERR, "4", fd, psx_errstr());
-			break;
-		    }
-		    break;
-
-		case ESOCK_LISTEN_CMD:
-		    /* 
-		     * ebuf = {cmd(1), intref(4), lport(2), ipstring(N), 0(1),
-		     * 	       backlog(2), flags(N), 0(1)}
-		     */
-		    input("42s2s", &intref, &lport, &lipstring, &backlog,
-			  &flags);
-		    DEBUGF(("[LISTEN_CMD] intref = %d, port = %d, "
-			   "ipstring = %s, backlog = %d, flags = %s\n", 
-			   intref, lport, lipstring, backlog, flags));
-		    
-		    listensock = do_listen(lipstring, lport, backlog, &lport);
-		    if(listensock == INVALID_FD) {
-			reply(ESOCK_LISTEN_SYNC_ERR, "4s", intref, psx_errstr());
-			break;
-		    }
-		    cp = new_connection(ESOCK_PASSIVE_LISTENING, listensock);
-		    /* Flags may be an empty string */
-		    length = strlen(flags);
-		    cp->flags = esock_malloc(length + 1);
-		    strcpy(cp->flags, flags);
-
-		    cp->origin = ORIG_LISTEN;
-		    if (esock_ssl_listen_init(cp) < 0) {
-			DEBUGF(("esock_ssl_listen_init() failed.\n"));
-			reply(ESOCK_LISTEN_SYNC_ERR, "4s", intref, 
-			      ssl_errstr());
-			close_and_remove_connection(cp);
-			break;
-		    }
-		    DEBUGF(("-> PASSIVE_LISTENING (fd = %d)\n", listensock));
-		    /* Publish listensock */
-		    reply(ESOCK_LISTEN_REP, "442", intref, listensock,
-			  ntohs(iserv_addr.sin_port));
-		    break;
-
-		case ESOCK_TRANSPORT_ACCEPT_CMD:
-		    /* 
-		     * ebuf =  { op(1), fd(4), flags(N), 0(1)} 
-		     */
-		    input("4s", &fd, &flags);
-		    DEBUGF(("[TRANSPORT_ACCEPT_CMD] listenfd = %d, flags = %s\n", fd, 
-			   flags));
-		    cp = get_connection(fd);
-		    if (cp) {
-			 /* We store the flags in the listen socket's 
-			  * connection, and overwrite previous flags.
-			  */
-			if ((length = strlen(flags)) > 0) {
-			    if (cp->flags)
-				cp->flags = esock_realloc(cp->flags, 
-							  length + 1);
-			    else
-				cp->flags = esock_malloc(length + 1);
-			    strcpy(cp->flags, flags);
-			}
-			if (cp->flags && cp->flags[0] != '\0') {
-			    cp->acceptors++;
-			    cp->state = ESOCK_ACTIVE_LISTENING; 
-			    DEBUGF(("-> ACTIVE_LISTENING\n"));
-			    break;
-			}
-			DEBUGF(("ERROR: flags empty\n"));
-		    }
-		    reply(ESOCK_TRANSPORT_ACCEPT_ERR, "4s", fd, "ebadf");
-		    break;
-
-		case ESOCK_SSL_ACCEPT_CMD:
-		    input("4s", &fd, &flags);
-		    DEBUGF(("[SSL_ACCEPT_CMD] fd = %d, flags = %s\n", fd, flags));
-		    cp = get_connection(fd);
-		    if (cp)
-			cp->state = ESOCK_SSL_ACCEPT;
-		    //reply(ESOCK_SSL_ACCEPT_REP, "4", fd);
-		    break;
-
-		case ESOCK_NOACCEPT_CMD:
-		    /* 
-		     * ebuf = {cmd(1), fd(4)}
-		     */
-		    input("4", &fd);
-		    DEBUGF(("[NOACCEPT_CMD] listenfd = %d\n", fd));
-		    cp = get_connection(fd);
-		    if (cp && (--cp->acceptors <= 0)) {
-			cp->acceptors = 0;
-			cp->state = ESOCK_PASSIVE_LISTENING;
-			esock_poll_clear_event(&pollfd, fd);
-			DEBUGF(("-> PASSIVE_LISTENING\n"));
-		    }
-		    break;
-
-		case ESOCK_PROXY_JOIN_CMD:
-		    /*
-		     * ebuf = {cmd(1), fd(4), portnum(2)}
-		     *
-		     * fd      - file descriptor of a connection in state
-		     *           CONNECTED
-		     * portnum - port number of the Erlang proxy peer 
-		     */
-		    input("42", &fd, &pport);
-		    cp = get_connection(fd);
-		    pp = get_proxy_by_peerport(pport);
-		    if (cp && cp->state == ESOCK_CONNECTED && pp) {
-			DEBUGF(("CONNECTED[PROXY_JOIN_CMD] fd = %d "
-				"portnum = %d\n", fd, pport));
-			cp->proxy = pp;
-			pp->conn = cp;
-			reply(ESOCK_PROXY_JOIN_REP, "4", fd);
-			cp->state = ESOCK_JOINED;
-			DEBUGF(("-> JOINED\n"));
-			break;
-		    }
-		    if (!cp) {
-			DEBUGF(("[PROXY_JOIN_CMD] ERROR: No connection "
-				"having fd = %d\n", fd));
-			reply(ESOCK_PROXY_JOIN_ERR, "4s", fd, "ebadsocket");
-		    } else if (cp->state != ESOCK_CONNECTED) {
-			DEBUGF(("%s[PROXY_JOIN_CMD] ERROR: Bad state: "
-			       "fd = %d\n", connstr[cp->state], cp->fd));
-			reply(ESOCK_PROXY_JOIN_ERR, "4s", fd, "ebadstate");
-		    } else {
-			DEBUGF(("ERROR: No proxy: fd = %d, pport = %d\n",
-			       fd, pport));
-			if (proxysock_err_cnt > 0) {
-			    proxysock_err_cnt--;
-			    reply(ESOCK_PROXY_JOIN_ERR, "4s", fd, 
-				  esock_posix_str(proxysock_last_err));
-			} else {
-			    reply(ESOCK_PROXY_JOIN_ERR, "4s", fd, 
-				  "enoproxysocket");
-			}
-			cp->state = ESOCK_DEFUNCT;
-		    }
-		    break;
-
-		case ESOCK_DUMP_STATE_CMD:
-		    dump_connections();
-		  break;
- 
-                case ESOCK_SET_DEBUG_CMD:
-                  /* 
-                   * ebuf = {cmd(1), debug(1)}
-                   */
-                  input("1", &debug);
-                  break;
-		  
-		case ESOCK_SET_DEBUGMSG_CMD:
-                  /* 
-                   * ebuf = {cmd(1), debugmsg(1)}
-                   */
-                  input("1", &debugmsg);
-                  break;
-		  
-		default:
-		    fprintf(stderr, "esock: default value in loop %c\n", 
-			    *ebuf);
-		    exit(EXIT_FAILURE);
-		    break;
-		}
-	    }
-	}
-
-	/* Go through all connections that have their file descriptors
-           set. */
-
-	/* Note: We may remove the current connection (cp). Thus we
-	 * must be careful not to read cp->next after cp has been
-	 * removed.  */
-	for (cp = next_polled_conn(connections, &cpnext, &pollfd, set_wq_fds); 
-	     cp != NULL; 
-	     cp = next_polled_conn(cpnext, &cpnext, &pollfd, set_wq_fds)
-	     ) {
-
-	    switch(cp->state) {
-
-	    case ESOCK_PASSIVE_LISTENING:
-		DEBUGF(("-----------------------------------\n"));
-		fprintf(stderr, "esock: Got connect request while PASSIVE\n");
-		exit(EXIT_FAILURE);
-		break;
-		
-	    case ESOCK_ACTIVE_LISTENING:
-		/* new connect from network */
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("ACTIVE_LISTENING - trying to accept on %d\n", 
-		       cp->fd));
-		length = sizeof(iserv_addr);
-		msgsock = do_accept(cp->fd, (struct sockaddr*)&iserv_addr, 
-				    (int*)&length);
-		if(msgsock == INVALID_FD)  {
-		    DEBUGF(("accept error: %s\n", psx_errstr()));
-		    reply(ESOCK_TRANSPORT_ACCEPT_ERR, "4s", cp->fd, psx_errstr());
-		    break;
-		}
-		SET_NONBLOCKING(msgsock);
-		if (--cp->acceptors <= 0) {
-		    cp->acceptors = 0;
-		    cp->state = ESOCK_PASSIVE_LISTENING;
-		    DEBUGF(("-> PASSIVE_LISTENING\n"));
-		}
-		DEBUGF(("server accepted connection on fd %d\n", msgsock));
-		newcp = new_connection(ESOCK_TRANSPORT_ACCEPT, msgsock);
-		newcp->origin = ORIG_ACCEPT;
-		reply(ESOCK_TRANSPORT_ACCEPT_REP, "44", cp->fd, msgsock);
-		newcp->listen_fd = cp->fd; /* Needed for ESOCK_ACCEPT_ERR  */
-		length = strlen(cp->flags);
-		/* XXX new flags are not needed */
-		newcp->flags = esock_malloc(length + 1);
-		strcpy(newcp->flags, cp->flags); /* XXX Why? */
-		if (esock_ssl_accept_init(newcp, cp->opaque) < 0) {
-		    cp->errstr = ssl_errstr();
-		    break;
-		}
-		newcp->ssl_want = ESOCK_SSL_WANT_READ;
-		break;
-
-	    case ESOCK_SSL_ACCEPT:
-		/* SSL accept handshake. msgsock is *not* published yet. */
-		msgsock = cp->fd;
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("SSL_ACCEPT fd = %d\n", msgsock));
-		if (cp->errstr != NULL) { /* this means we got an error in ssl_accept_init */
-		    /* N.B.: The *listen fd* is reported. */
-		    reply(ESOCK_SSL_ACCEPT_ERR, "4s", msgsock, cp->errstr);
-		    close_and_remove_connection(cp);
-		    break;
-		}
-		if (esock_ssl_accept(cp) < 0) {
-		    if (sock_errno() != ERRNO_BLOCK) {
-			/* Handshake failed. */
-			reply(ESOCK_SSL_ACCEPT_ERR, "4s", msgsock,
-			      ssl_errstr());
-			DEBUGF(("ERROR: handshake: %s\n", ssl_errstr()));
-			close_and_remove_connection(cp);
-		    }
-		} else {
-		    /* SSL handshake successful: publish */
-		    reply(ESOCK_SSL_ACCEPT_REP, "4", msgsock);
-		    DEBUGF(("-> CONNECTED\n"));
-		    DEBUGF((" Session was %sreused.\n", 
-			    (esock_ssl_session_reused(cp)) ? "" : "NOT "));
-		    cp->state = ESOCK_CONNECTED;
-		}
-		break;
-
-	    case ESOCK_CONNECTED:
-		/* Should not happen. We do not read or write until
-		   the connection is in state JOINED. */
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("CONNECTED: Error: should not happen. fd = %d\n", 
-			cp->fd));
-		break;
-
-	    case ESOCK_JOINED:
-		/* 
-		 * Reading from Proxy, writing to SSL 
-		 */
-		if (esock_poll_fd_isset_write(&pollfd, cp->fd)) {
-		    /* If there is a write queue, write to ssl only */
-		    if (cp->wq.len > 0) { 
-			/* The write retry semantics of SSL_write in
-			 * the OpenSSL package is strange. Partial
-			 * writes never occur, only complete writes or
-			 * failures.  A failure, however, still
-			 * consumes all data written, although not all
-			 * encrypted data could be written to the
-			 * underlying socket. To retry a write we have
-			 * to provide the same buf and length as in
-			 * the original call, in our case rwbuf and
-			 * the original buffer length. Hence the
-			 * strange memcpy(). Note that wq.offset will
-			 * always be zero when we use OpenSSL.  
-			 */
-			DEBUGF(("-----------------------------------\n"));
-			DEBUGF(("JOINED: writing to ssl "
-				"fd = %d, from write queue only, wc = %d\n", 
-				cp->fd, cp->wq.len - cp->wq.offset));
-			memcpy(rwbuf, cp->wq.buf, cp->wq.len - cp->wq.offset);
-
-			/* esock_ssl_write sets cp->eof, cp->bp when return
-			 * value is zero */
-			wc = esock_ssl_write(cp, rwbuf, 
-					     cp->wq.len - cp->wq.offset);
-			if (wc < 0) {
-			    if (sock_errno() != ERRNO_BLOCK) {
-				/* Assume broken SSL pipe */
-				DEBUGF(("broken SSL pipe\n"));
-				cp->bp = 1;
-				shutdown(cp->proxy->fd, SHUTDOWN_READ);
-				cp->proxy->eof = 1;
-				if (JOINED_STATE_INVALID(cp)) {
-				    leave_joined_state(cp);
-				    break;
-				}
-			    }
-			} else if (wc == 0) {
-			    /* SSL broken pipe */
-			    DEBUGF(("broken SSL pipe\n"));
-			    cp->bp = 1;
-			    shutdown(cp->proxy->fd, SHUTDOWN_READ);
-			    cp->proxy->eof = 1;
-			    if (JOINED_STATE_INVALID(cp)) {
-				leave_joined_state(cp);
-				break;
-			    }
-			} else {
-			    cp->wq.offset += wc;
-			    if (cp->wq.offset == cp->wq.len)
-				cp->wq.len = 0;
-			}
-		    }
-		} else if (esock_poll_fd_isset_read(&pollfd, cp->proxy->fd)) {
-		    /* Read from proxy and write to SSL */
-		    DEBUGF(("-----------------------------------\n"));
-		    DEBUGF(("JOINED: reading from proxy, "
-			   "proxyfd = %d\n", cp->proxy->fd));
-		    cc = sock_read(cp->proxy->fd, rwbuf, RWBUFLEN); 
-		    DEBUGF(("read from proxyfd = %d, cc = %d\n", 
-			   cp->proxy->fd, cc));
-		    if (cc > 0) {
-			/* esock_ssl_write sets cp->eof, cp->bp when return
-			 * value is zero */
-			wc = esock_ssl_write(cp, rwbuf, cc);
-			if (wc < 0) {
-			    if (sock_errno() != ERRNO_BLOCK) {
-				/* Assume broken pipe */
-				DEBUGF(("broken SSL pipe\n"));
-				cp->bp = 1;
-				shutdown(cp->proxy->fd, SHUTDOWN_READ);
-				cp->proxy->eof = 1;
-				if (JOINED_STATE_INVALID(cp)) {
-				    leave_joined_state(cp);
-				    break;
-				}
-			    } else {
-				/* add to write queue */
-				DEBUGF(("adding all to write queue "
-					"%d bytes\n", cc));
-				ensure_write_queue(&cp->wq, cc);
-				memcpy(cp->wq.buf, rwbuf, cc);
-				cp->wq.len = cc;
-				cp->wq.offset = 0;
-			    }
-			} else if (wc == 0) {
-				/* Broken SSL pipe */
-				DEBUGF(("broken SSL pipe\n"));
-				cp->bp = 1;
-				shutdown(cp->proxy->fd, SHUTDOWN_READ);
-				cp->proxy->eof = 1;
-				if (JOINED_STATE_INVALID(cp)) {
-				    leave_joined_state(cp);
-				    break;
-				}
-			} else if (wc < cc) {
-			    /* add remainder to write queue */
-			    DEBUGF(("adding remainder to write queue "
-				    "%d bytes\n", cc - wc));
-			    ensure_write_queue(&cp->wq, cc - wc);
-			    memcpy(cp->wq.buf, rwbuf + wc, cc - wc);
-			    cp->wq.len = cc - wc;
-			    cp->wq.offset = 0;
-			} 
-		    } else {
-			/* EOF proxy or error */
-		       DEBUGF(("proxy eof or error %d\n", errno));
-			cp->proxy->eof = 1;
-			if (cp->wq.len == 0) {
-			    esock_ssl_shutdown(cp);
-			    cp->bp = 1;
-			}
-			if (JOINED_STATE_INVALID(cp)) {
-			    leave_joined_state(cp);
-			    break;
-			}
-		    }
-		}
-		/* 
-		 * Reading from SSL, writing to proxy 
-		 */
-		if (esock_poll_fd_isset_write(&pollfd, cp->proxy->fd)) {
-		    /* If there is a write queue, write to proxy only */
-		    if (cp->proxy->wq.len > 0) {
-			DEBUGF(("-----------------------------------\n"));
-			DEBUGF(("JOINED: writing to proxyfd = %d, "
-				"from write queue only, wc = %d\n", 
-				cp->proxy->fd, cp->proxy->wq.len - 
-				cp->proxy->wq.offset));
-			wc = sock_write(cp->proxy->fd, cp->proxy->wq.buf + 
-					cp->proxy->wq.offset,
-					cp->proxy->wq.len - 
-					cp->proxy->wq.offset);
-			if (wc < 0) {
-			    if (sock_errno() != ERRNO_BLOCK) {
-				/* Assume broken pipe */
-				DEBUGF(("broken proxy pipe\n"));
-				cp->proxy->bp = 1;
-				/* There is no SSL shutdown for read */
-				cp->eof = 1;
-				if (JOINED_STATE_INVALID(cp)) {
-				    leave_joined_state(cp);
-				    break;
-				}
-			    }
-			} else {
-			    cp->proxy->wq.offset += wc;
-			    if (cp->proxy->wq.offset == cp->proxy->wq.len)
-				cp->proxy->wq.len = 0;
-			}
-		    }
-		} else if (esock_poll_fd_isset_read(&pollfd, cp->fd)) {
-		    /* Read from SSL and write to proxy */
-		    DEBUGF(("-----------------------------------\n"));
-		    DEBUGF(("JOINED: read from ssl fd = %d\n",
-			   cp->fd));
-		    cc = esock_ssl_read(cp, rwbuf, RWBUFLEN);
-		    DEBUGF(("read from fd = %d, cc = %d\n", cp->fd, cc));
-		    if (cc > 0) {
-			wc = sock_write(cp->proxy->fd, rwbuf, cc);
-			if (wc < 0) {
-			    if (sock_errno() != ERRNO_BLOCK) {
-				DEBUGF(("broken proxy pipe\n"));
-				/* Assume broken pipe */
-				cp->proxy->bp = 1;
-				/* There is no SSL shutdown for read */
-				cp->eof = 1;
-				if (JOINED_STATE_INVALID(cp)) {
-				    leave_joined_state(cp);
-				    break;
-				}
-			    } else {
-				/* add all to write queue */
-				DEBUGF(("adding to write queue %d bytes\n", 
-					cc));
-				ensure_write_queue(&cp->proxy->wq, cc);
-				memcpy(cp->proxy->wq.buf, rwbuf, cc);
-				cp->proxy->wq.len = cc;
-				cp->proxy->wq.offset = 0;
-			    }
-			} else if (wc < cc) {
-			    /* add to write queue */
-			    DEBUGF(("adding to write queue %d bytes\n",
-				    cc - wc));
-			    ensure_write_queue(&cp->proxy->wq, cc - wc);
-			    memcpy(cp->proxy->wq.buf, rwbuf + wc, cc - wc);
-			    cp->proxy->wq.len = cc - wc;
-			    cp->proxy->wq.offset = 0;
-			} 
-		    } else if (cc == 0) {
-			/* SSL eof */
-			DEBUGF(("SSL eof\n"));
-			cp->eof = 1;
-			if (cp->proxy->wq.len == 0) {
-			    shutdown(cp->proxy->fd, SHUTDOWN_WRITE);
-			    cp->proxy->bp = 1;
-			}
-			if (JOINED_STATE_INVALID(cp)) {
-			    leave_joined_state(cp);
-			    break;
-			}
-		    } else {
-			/* This may very well happen when reading from SSL. */
-			DEBUGF(("NOTE: readmask set, cc < 0,  fd = %d, "
-				"is ok\n", cp->fd));
-		    }
-		}
-		break;
-
-	    case ESOCK_SSL_SHUTDOWN:
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("SSL_SHUTDOWN: fd = %d\n", cp->fd));
-		do_shutdown(cp);
-		break;
-
-	    case ESOCK_DEFUNCT:
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("DEFUNCT: ERROR: should not happen. fd = %d\n", 
-			cp->fd));
-		break;
-
-	    case ESOCK_WAIT_CONNECT:
-		/* New connection shows up */
-		connectsock = cp->fd;/* Is published */
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("WAIT_CONNECT fd = %d\n", connectsock));
-
-		/* If the connection did succeed it's possible to
-		 * fetch the peer name (UNIX); or failure shows in
-		 * exceptmask (WIN32). Sorry for the mess below, but
-		 * we have to have balanced paren's in #ifdefs in
-		 * order not to confuse Emacs' indentation.  */
-		length = sizeof(iserv_addr);
-		if (
-#ifdef __WIN32__
-		    esock_poll_fd_isset_exception(&pollfd, connectsock)
-#else
-		    getpeername(connectsock, (struct sockaddr *)&iserv_addr, 
-				&length) < 0
-#endif
-		    ) {
-		    sock_set_errno(ERRNO_CONNREFUSED);
-		    DEBUGF(("connect error: %s\n", psx_errstr()));
-		    reply(ESOCK_CONNECT_ERR, "4s", connectsock, psx_errstr());
-		    cp->state = ESOCK_DEFUNCT;
-		    break;
-		}
-		if (esock_ssl_connect_init(cp) < 0) {
-		    DEBUGF(("esock_ssl_connect_init() failed\n"));
-		    reply(ESOCK_CONNECT_ERR, "4s", connectsock, ssl_errstr());
-		    cp->state = ESOCK_DEFUNCT;
-		    break;
-		}
-		DEBUGF(("-> SSL_CONNECT\n"));
-		cp->state = ESOCK_SSL_CONNECT;
-		cp->ssl_want = ESOCK_SSL_WANT_WRITE;
-		break;
-
-	    case ESOCK_SSL_CONNECT:
-		/* SSL connect handshake. connectsock is published. */
-		connectsock = cp->fd;
-		DEBUGF(("-----------------------------------\n"));
-		DEBUGF(("SSL_CONNECT fd = %d\n", connectsock));
-		if (esock_ssl_connect(cp) < 0) {
-		    if (sock_errno() != ERRNO_BLOCK) {
-			/* Handshake failed */
-			DEBUGF(("ERROR: handshake: %s\n", ssl_errstr()));
-			reply(ESOCK_CONNECT_ERR, "4s", connectsock,
-			      ssl_errstr());
-			cp->state = ESOCK_DEFUNCT;
-		    }
-		} else {
-		    /* SSL connect handshake successful */
-		    DEBUGF(("-> CONNECTED\n"));
-		    reply(ESOCK_CONNECT_REP, "4", connectsock);
-		    cp->state = ESOCK_CONNECTED;
-		}
-		break;
-
-	    default:
-		DEBUGF(("ERROR: Connection in unknown state.\n"));
-	    }
-	}
-   }
-}
-
-static int set_poll_conns(Connection *cp, EsockPoll *ep, int verbose)
-{
-    int i = 0;
-    
-    if (verbose)
-	DEBUGF(("MASKS SET FOR FD: "));
-    while (cp) {
-	switch (cp->state) {
-	case ESOCK_ACTIVE_LISTENING:
-	    if (verbose)
-		DEBUGF(("%d (read) ", cp->fd));
-	    esock_poll_fd_set_read(ep, cp->fd);
-	    break;
-	case ESOCK_WAIT_CONNECT:
-	    if (verbose)
-		DEBUGF(("%d (write) ", cp->fd));
-	    esock_poll_fd_set_write(ep, cp->fd);
-#ifdef __WIN32__
-	    esock_poll_fd_set_exception(ep, cp->fd); /* Failure shows in exceptions */
-#endif
-	    break;
-	case ESOCK_SSL_CONNECT:
-	case ESOCK_SSL_ACCEPT:
-	    if (cp->ssl_want == ESOCK_SSL_WANT_READ) {
-		if (verbose)
-		    DEBUGF(("%d (read) ", cp->fd));
-		esock_poll_fd_set_read(ep, cp->fd);
-	    } else if (cp->ssl_want == ESOCK_SSL_WANT_WRITE) {
-		if (verbose)
-		    DEBUGF(("%d (write) ", cp->fd));
-		esock_poll_fd_set_write(ep, cp->fd);
-	    }
-	    break;
-	case ESOCK_JOINED:
-	    if (!cp->bp) {
-		if (cp->wq.len) {
-		    if (verbose)
-			DEBUGF(("%d (write) ", cp->fd));
-		    esock_poll_fd_set_write(ep, cp->fd);
-		} else if (!cp->proxy->eof) {
-		    if (verbose)
-			DEBUGF(("%d (read) ", cp->proxy->fd));
-		    esock_poll_fd_set_read(ep, cp->proxy->fd);
-		}
-	    }
-	    if (!cp->proxy->bp) {
-		if (cp->proxy->wq.len) {
-		    if (verbose)
-			DEBUGF(("%d (write) ", cp->proxy->fd));
-		    esock_poll_fd_set_write(ep, cp->proxy->fd);
-		} else if (!cp->eof) {
-		    if (verbose)
-			DEBUGF(("%d (read) ", cp->fd));
-		    esock_poll_fd_set_read(ep, cp->fd);
-		}
-	    }
-	    break;
-	case ESOCK_SSL_SHUTDOWN:
-	    if (cp->ssl_want == ESOCK_SSL_WANT_READ) {
-		if (verbose)
-		    DEBUGF(("%d (read) ", cp->fd));
-		esock_poll_fd_set_read(ep, cp->fd);
-	    } else if (cp->ssl_want == ESOCK_SSL_WANT_WRITE) {
-		if (verbose)
-		    DEBUGF(("%d (write) ", cp->fd));
-		esock_poll_fd_set_write(ep, cp->fd);
-	    }
-	    break;
-	default:
-	    break;
-	}
-	i++;
-	cp = cp->next;
-    }
-    if (verbose)
-	DEBUGF(("\n"));
-    return i;
-}
-
-
-static Connection *next_polled_conn(Connection *cp, Connection **cpnext,
-				    EsockPoll *ep, int set_wq_fds)
-{
-    while(cp) {
-	if (esock_poll_fd_isset_read(ep, cp->fd) ||
-	    (cp->proxy && esock_poll_fd_isset_read(ep, cp->proxy->fd)) ||
-	    (esock_poll_fd_isset_write(ep, cp->fd)) ||
-	    (cp->proxy && esock_poll_fd_isset_write(ep, cp->proxy->fd))
-#ifdef __WIN32__
-	    || esock_poll_fd_isset_exception(ep, cp->fd) /* Connect failure in WIN32 */
-#endif
-	    || (set_wq_fds && (cp->wq.len || 
-			       (cp->proxy && cp->proxy->wq.len)))
-	    || cp->errstr != NULL) {
-	    *cpnext = cp->next;
-	    return cp;
-	}
-	cp = cp->next;
-    }
-    *cpnext = NULL;
-    return NULL;
-}
-
-static void leave_joined_state(Connection *cp)
-{
-    shutdown(cp->proxy->fd, SHUTDOWN_ALL);
-    if (((cp->bp || cp->eof) && cp->clean) ||
-	(!cp->bp && !cp->eof)) {
-	DEBUGF(("-> SSL_SHUTDOWN\n"));
-	cp->state = ESOCK_SSL_SHUTDOWN;
-	cp->ssl_want = ESOCK_SSL_WANT_WRITE;
-	do_shutdown(cp);
-    } else if (cp->close) {
-	DEBUGF(("-> (removal)\n"));
-	close_and_remove_connection(cp);
-    } else {
-	DEBUGF(("-> DEFUNCT\n"));
-	cp->state = ESOCK_DEFUNCT;
-    }
-}
-
-/* We are always in state SHUTDOWN here */
-static void do_shutdown(Connection *cp)
-{
-    int ret;
-
-    ret = esock_ssl_shutdown(cp); 
-    if (ret < 0) {
-	if (sock_errno() == ERRNO_BLOCK) {
-	    return;
-	} else {
-	    /* Something is wrong -- close and remove or move to DEFUNCT */
-	    DEBUGF(("Error in SSL shutdown\n"));
-	    if (cp->close) {
-		DEBUGF(("-> (removal)\n"));
-		close_and_remove_connection(cp);
-	    } else {
-		DEBUGF(("-> DEFUNCT\n"));
-		cp->state = ESOCK_DEFUNCT;
-	    }
-	}
-    } else if (ret == 0) {
-	/* `close_notify' has been sent. Wait for reception of
-           same. */
-	return; 
-    } else if (ret == 1) {
-	/* `close_notify' has been sent, and received. */
-	if (cp->close) {
-	    DEBUGF(("-> (removal)\n"));
-	    close_and_remove_connection(cp);
-	} else {
-	    DEBUGF(("-> DEFUNCT\n"));
-	    cp->state = ESOCK_DEFUNCT;
-	}
-    }
-}
-
-static void close_and_remove_connection(Connection *cp)
-{
-    safe_close(cp->fd);
-    remove_connection(cp);
-}
-
-static int reply(int cmd, char *fmt, ...)
-{
-    static unsigned char replybuf[MAXREPLYBUF];
-    unsigned char *buf = replybuf;
-    va_list args;
-    int len;
-
-    va_start(args, fmt);
-    len = put_pars(NULL, fmt, args);
-    va_end(args);
-    len++;
-    if (len > sizeof(replybuf))
-	buf = esock_malloc(len);
-
-    PUT_INT8(cmd, buf);
-    va_start(args, fmt);
-    (void) put_pars(buf + 1, fmt, args);
-    va_end(args);
-    write_ctrl(buf, len);
-    if (buf != replybuf)
-	esock_free(buf);
-    return len;
-}
-
-static int input(char *fmt, ...)
-{
-    va_list args;
-    int len;
-
-    va_start(args, fmt);
-    len = get_pars(ebuf + 1, fmt, args);
-    va_end(args);
-    return len + 1;
-}
-
-static int put_pars(unsigned char *buf, char *fmt, va_list args)
-{
-    char *s, *str, *bin;
-    int val, len, pos = 0;
-
-    s = fmt;
-    while (*s) {
-	switch (*s) {
-	case '1':
-	    val = va_arg(args, int);
-	    if (buf)
-		PUT_INT8(val, buf + pos);
-	    pos++;
-	    break;
-	case '2':
-	    val = va_arg(args, int);
-	    if (buf)
-		PUT_INT16(val, buf + pos);
-	    pos += 2;
-	    break;
-	case '4':
-	    val = va_arg(args, int);
-	    if (buf)
-		PUT_INT32(val, buf + pos);
-	    pos += 4;
-	    break;
-	case 's':		/* string */
-	    str = va_arg(args, char *);
-	    if (buf)
-		strcpy((char *)(buf + pos), str);
-	    pos += strlen(str) + 1;
-	    break;
-	case 'b':		/* binary */
-	    len = va_arg(args, int);
-	    if (buf)
-		PUT_INT32(len, buf + pos);
-	    pos += 4;
-	    bin = va_arg(args, char *);
-	    if (buf)
-		memcpy(buf + pos, bin, len);
-	    pos += len;
-	    break;
-	default:
-	    fprintf(stderr, "esock: Invalid format character: %c\n", *s);
-	    exit(EXIT_FAILURE);
-	    break;
-	}
-	s++;
-    }
-    return pos;
-}
-
-
-static int get_pars(unsigned char *buf, char *fmt, va_list args)
-{
-    int *ip;
-    char *s, **strp, **bin;
-    int pos = 0;
-
-    s = fmt;
-    while (*s) {
-	switch (*s) {
-	case '1':
-	    ip = va_arg(args, int *);
-	    *ip = GET_INT8(buf + pos);
-	    pos++;
-	    break;
-	case '2':
-	    ip = va_arg(args, int *);
-	    *ip = GET_INT16(buf + pos);
-	    pos += 2;
-	    break;
-	case '4':
-	    ip = va_arg(args, int *);
-	    *ip = GET_INT32(buf + pos);
-	    pos += 4;
-	    break;
-	case 's':
-	    strp = va_arg(args, char **);
-	    *strp = (char *)(buf + pos);
-	    pos += strlen(*strp) + 1;
-	    break;
-	case 'b':
-	    ip = va_arg(args, int *);
-	    *ip = GET_INT32(buf + pos);
-	    pos += 4;
-	    bin = va_arg(args, char **);
-	    *bin = (char *)(buf + pos);
-	    pos += *ip;
-	    break;
-	default:
-	    fprintf(stderr, "esock: Invalid format character: %c\n", *s);
-	    exit(EXIT_FAILURE);
-	    break;
-	}
-	s++;
-    }
-    return pos;
-}
-
-static FD do_connect(char *lipstring, int lport, char *fipstring, int fport)
-{
-    struct sockaddr_in sock_addr;
-    long inaddr;
-    FD fd;
-   
-    if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_FD) {
-	DEBUGF(("Error calling socket()\n"));
-	return fd;
-    }
-    if (check_num_sock_fds(fd) < 0) 
-	return INVALID_FD;
-    DEBUGF(("  fd = %d\n", fd));
-
-    /* local */
-    if ((inaddr = inet_addr(lipstring)) == INADDR_NONE) {
-	DEBUGF(("Error in inet_addr(): lipstring = %s\n", lipstring));
-	safe_close(fd);
-	sock_set_errno(ERRNO_ADDRNOTAVAIL);
-	return INVALID_FD;
-    }
-    memset(&sock_addr, 0, sizeof(sock_addr));
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = inaddr;
-    sock_addr.sin_port = htons(lport);
-    if(bind(fd, (struct sockaddr*) &sock_addr, sizeof(sock_addr)) < 0) {
-	DEBUGF(("Error in bind()\n"));
-	safe_close(fd);
-	/* XXX Set error code for bind error */
-	return INVALID_FD;
-    }
-
-    /* foreign */
-    if ((inaddr = inet_addr(fipstring)) == INADDR_NONE) {
-	DEBUGF(("Error in inet_addr(): fipstring = %s\n", fipstring));
-	safe_close(fd);
-	sock_set_errno(ERRNO_ADDRNOTAVAIL);
-	return INVALID_FD;
-    }
-    memset(&sock_addr, 0, sizeof(sock_addr));
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = inaddr;
-    sock_addr.sin_port = htons(fport);
-
-    SET_NONBLOCKING(fd);
-
-    if(connect(fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)) < 0) {
-	if (sock_errno() != ERRNO_PROGRESS && /* UNIX */
-	    sock_errno() != ERRNO_BLOCK) { /* WIN32 */
-	    DEBUGF(("Error in connect()\n"));
-	    safe_close(fd);
-	    return INVALID_FD;
-	}
-    }
-    return fd;
-}
-
-static FD do_listen(char *ipstring, int lport, int backlog, int *aport)
-{
-    static int one = 1;		/* Type must be int, not long */
-    struct sockaddr_in sock_addr;
-    long inaddr;
-    int length;
-    FD fd;
-    
-    if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_FD) {
-	DEBUGF(("Error calling socket()\n"));
-	return fd;
-    }
-    if (check_num_sock_fds(fd) < 0) 
-	return INVALID_FD;
-    DEBUGF(("  fd = %d\n", fd));
-    if ((inaddr = inet_addr(ipstring)) == INADDR_NONE) {
-	DEBUGF(("Error in inet_addr(): ipstring = %s\n", ipstring));
-	safe_close(fd);
-	sock_set_errno(ERRNO_ADDRNOTAVAIL);
-	return INVALID_FD;
-    }
-    memset(&sock_addr, 0, sizeof(sock_addr));
-    sock_addr.sin_family = AF_INET;
-    sock_addr.sin_addr.s_addr = inaddr;
-    sock_addr.sin_port = htons(lport);
-
-    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(one));
-
-    if(bind(fd, (struct sockaddr*) &sock_addr, sizeof(sock_addr)) < 0) {
-	DEBUGF(("Error in bind()\n"));
-	safe_close(fd);
-	return INVALID_FD;
-    }
-    if (listen(fd, backlog) < 0) {
-	DEBUGF(("Error in listen()\n"));
-	safe_close(fd);
-	return INVALID_FD;
-    }
-    /* find out assigned local port number */
-    length = sizeof(sock_addr);
-    if (getsockname(fd, (struct sockaddr *)&sock_addr, &length) < 0) {
-	DEBUGF(("Error in getsockname()\n"));
-	safe_close(fd);
-	return INVALID_FD;
-    }
-    if (aport)
-	*aport = ntohs(sock_addr.sin_port);
-    return fd;
-}
-
-static FD do_accept(FD listensock, struct sockaddr *saddr, int *len)
-{
-    FD fd;
-
-    if ((fd = accept(listensock, saddr, len)) == INVALID_FD) {
-	DEBUGF(("Error calling accept()\n"));
-	return fd;
-    }
-    if (check_num_sock_fds(fd) < 0) 
-	return INVALID_FD;
-    return fd;
-}
-
-static Connection *new_connection(int state, FD fd)
-{
-    Connection *cp;
-    
-    if (!(cp = esock_malloc(sizeof(Connection))))
-	return NULL;
-    cp->state = state;
-    cp->acceptors = 0;
-    cp->fd = fd;
-    cp->listen_fd = INVALID_FD;
-    cp->proxy = NULL;
-    cp->opaque = NULL;
-    cp->ssl_want = 0;
-    cp->eof = 0;
-    cp->bp = 0;
-    cp->clean = 0;		/* XXX Used? */
-    cp->close = 0;
-    cp->origin = -1;
-    cp->flags = NULL;
-    cp->logfp = NULL;
-    cp->wq.size = 0;
-    cp->wq.buf = NULL;
-    cp->wq.len = 0;
-    cp->wq.offset = 0;
-    cp->next = connections;
-    cp->errstr = NULL;
-    connections = cp;
-    return cp;
-}
-
-
-static void print_connections(void)
-{
-    if (debug) {
-	Connection *cp = connections;
-	DEBUGF(("CONNECTIONS:\n"));
-	while (cp) {
-	    if (cp->state == ESOCK_JOINED) {
-		DEBUGF((" - %s [%8p] (origin = %s)\n"
-			"       (fd = %d, eof = %d, wq = %d, bp = %d)\n"
-			"       (proxyfd = %d, eof = %d, wq = %d, bp = %d)\n", 
-		       connstr[cp->state], cp, originstr[cp->origin],
-			cp->fd, cp->eof, cp->wq.len, cp->bp,
-			cp->proxy->fd, cp->proxy->eof, cp->proxy->wq.len, 
-			cp->proxy->bp));
-	    } else if (cp->state == ESOCK_ACTIVE_LISTENING) {
-		DEBUGF((" - %s [%8p] (fd = %d, acceptors = %d)\n", 
-		       connstr[cp->state], cp, cp->fd, cp->acceptors));
-	    } else {
- 		DEBUGF((" - %s [%8p] (fd = %d)\n", connstr[cp->state], cp, 
-		       cp->fd));
-	    }
-	    cp= cp->next;
-	}
-    }
-}
-
-static void dump_connections(void)
-{
-    Connection *cp = connections;
-    Proxy      *pp = proxies;
-    time_t t = time(NULL);
-    int length = 0;
-    struct sockaddr_in iserv_addr;
-
-    __debugprintf("CONNECTIONS %s", ctime(&t));
-    while (cp) {
-	if (cp->state == ESOCK_JOINED) {
-	    __debugprintf(" - %s [%8p] (origin = %s)\n"
-			  "       (fd = %d, eof = %d, wq = %d, bp = %d), close = %d\n"
-			  "       (proxyfd = %d, eof = %d, wq = %d, bp = %d)\n", 
-			  connstr[cp->state], cp, originstr[cp->origin],
-			  cp->fd, cp->eof, cp->wq.len, cp->bp, cp->close,
-			  cp->proxy->fd, cp->proxy->eof, cp->proxy->wq.len, 
-			  cp->proxy->bp);
-	} else if (cp->state == ESOCK_ACTIVE_LISTENING) {
-	    __debugprintf(" - %s [%8p] (fd = %d, acceptors = %d)\n", 
-			  connstr[cp->state], cp, cp->fd, cp->acceptors);
-	} else {
-	    __debugprintf(" - %s [%8p] (fd = %d)\n", connstr[cp->state], cp, 
-			  cp->fd);
-	}
-	length = sizeof(iserv_addr);
-	if ((cp->state == ESOCK_ACTIVE_LISTENING) ||
-	    (cp->state == ESOCK_PASSIVE_LISTENING)) {
-	    getsockname(cp->fd, (struct sockaddr *) &iserv_addr, &length);
-	    __debugprintf("       (ip = %s, port = %d)\n",
-			  inet_ntoa(iserv_addr.sin_addr),
-			  ntohs(iserv_addr.sin_port));
-	}
-	else {
-	    getsockname(cp->fd, (struct sockaddr *) &iserv_addr, &length);
-	    __debugprintf("       (local_ip = %s, local_port = %d)\n",
-			  inet_ntoa(iserv_addr.sin_addr),
-			  ntohs(iserv_addr.sin_port));
-	    length = sizeof(iserv_addr);
-	    getpeername(cp->fd, (struct sockaddr *) &iserv_addr, &length);
-	    __debugprintf("       (remote_ip = %s, remote_port = %d)\n",
-			  inet_ntoa(iserv_addr.sin_addr),
-			  ntohs(iserv_addr.sin_port));
-	}
-	cp=cp->next;
-    }
-  
-    __debugprintf("PROXIES\n");
-    while (pp) {
-	__debugprintf(" - fd = %d [%8p] (external_fd = %d, peer_port = %d,"
-		      " eof = %d)\n", pp->fd, pp, pp->conn->fd, pp->peer_port,
-		      pp->eof);
-    
-	pp= pp->next;
-    }
-}
-
-static Connection *get_connection(FD fd)
-{
-    Connection *cp = connections;
-    
-    while(cp) {
-	if(cp->fd == fd)
-	    return cp;
-	cp = cp->next;
-    }
-    return NULL;
-}
-
-/* 
- * Remove a connection from the list of connection, close the proxy
- * socket and free all resources. The main socket (fd) is *not* 
- * closed here, because the closing of that socket has to be synchronized
- * with the Erlang process controlling this port program.
- */
-static void remove_connection(Connection *conn)
-{
-    Connection **prev = &connections;
-    Connection *cp = connections; 
-    
-    while (cp) {
-	if(cp == conn) {
-	    DEBUGF(("remove_connection: fd = %d\n", cp->fd));
-	    esock_ssl_free(cp);	/* frees cp->opaque only */
-	    esock_free(cp->flags);
-	    closelog(cp->logfp); /* XXX num_sock_fds */
-	    esock_free(cp->wq.buf);
-	    if (cp->proxy) {
-		safe_close(cp->proxy->fd);
-		remove_proxy(cp->proxy);
-	    }
-	    *prev = cp->next;
-	    esock_free(cp);
-	    return;
-	}
-	prev = &cp->next;
-	cp = cp->next;
-    }
-}
-
-static Proxy *get_proxy_by_peerport(int port)
-{
-    Proxy *p = proxies;
-
-    while(p) {
-	if (p->peer_port == port)
-	    return p;
-	p = p->next;
-    }
-    return NULL;
-}
-
-static Proxy *new_proxy(FD fd)
-{
-    Proxy *p;
-
-    if (!(p = esock_malloc(sizeof(Proxy))))
-	return NULL;
-
-    p->fd = fd;
-    p->peer_port = -1;
-    p->eof = 0;
-    p->bp = 0;
-    p->conn = NULL;
-    p->wq.size = 0;
-    p->wq.buf = NULL;
-    p->wq.len = 0;
-    p->wq.offset = 0;
-    p->next = proxies;
-    proxies = p;
-    return p;
-}
-
-static void remove_proxy(Proxy *proxy)
-{
-    Proxy *p = proxies, **pp = &proxies;
-
-    while(p) {
-	if (p == proxy) {
-	    DEBUGF(("remove_proxyfd = %d\n", p->fd));
-	    esock_free(p->wq.buf);
-	    *pp = p->next;
-	    esock_free(p);
-	    return;
-	}
-	pp = &p->next;
-	p = p->next;
-    }
-}
-
-static int check_num_sock_fds(FD fd) 
-{
-    num_sock_fds++;		/* fd is valid */
-#ifdef USE_SELECT
-    if (num_sock_fds > FD_SETSIZE) {
-	num_sock_fds--;
-	sock_set_errno(ERRNO_MFILE);
-	safe_close(fd);
-	return -1;
-    }
-#endif
-    return 0;
-}
-
-static void safe_close(FD fd)
-{
-    int err;
-
-    err = sock_errno();
-    DEBUGF(("safe_close fd = %d\n", fd));
-    if (sock_close(fd) < 0) {
-	DEBUGF(("safe_close failed\n"));
-    } else {
-	num_sock_fds--;
-    }
-    sock_set_errno(err);
-}
-
-static void clean_up(void)
-{
-    Connection *cp, *cpnext;
-    Proxy *pp, *ppnext;
-
-    cp = connections;
-    while (cp) {
-	safe_close(cp->fd);
-	cpnext = cp->next;
-	remove_connection(cp);
-	cp = cpnext;
-    }
-    
-    pp = proxies;
-    while (pp) {
-	safe_close(pp->fd);
-	ppnext = pp->next;
-	remove_proxy(pp);
-	pp = ppnext;
-    }
-}
-
-static void ensure_write_queue(WriteQueue *wq, int size)
-{
-    if (wq->size < size) {
-	wq->buf = esock_realloc(wq->buf, size);
-	wq->size = size;
-    }
-}
-
-
-
-
-
-
-
diff --git a/lib/ssl/c_src/esock.h b/lib/ssl/c_src/esock.h
deleted file mode 100644
index 16c9faa530..0000000000
--- a/lib/ssl/c_src/esock.h
+++ /dev/null
@@ -1,273 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose:  Implementation of Secure Socket Layer (SSL).
- *
- */
-
-#ifndef ESOCK_H
-#define ESOCK_H
-
-#ifdef __WIN32__
-#include "esock_winsock.h"
-#endif
-#include <stdio.h>
-
-#ifdef __WIN32__
-#define INVALID_FD			INVALID_SOCKET
-
-#define sock_read(fd, buf, len)		recv((fd), (buf), (len), 0)
-#define sock_write(fd, buf, len)	send((fd), (buf), (len), 0)
-#define sock_close(fd)			closesocket(fd)
-#define sock_errno()			WSAGetLastError()
-#define sock_set_errno(err)		WSASetLastError(err)
-
-#define ERRNO_NONE			0
-#define ERRNO_BLOCK			WSAEWOULDBLOCK
-#define ERRNO_CONNREFUSED		WSAECONNREFUSED
-#define ERRNO_PROGRESS			WSAEINPROGRESS
-#define ERRNO_PROTONOSUPPORT		WSAEPROTONOSUPPORT
-#define ERRNO_INVAL			WSAEINVAL
-#define ERRNO_ADDRNOTAVAIL		WSAEADDRNOTAVAIL
-#define ERRNO_NOTSOCK			WSAENOTSOCK
-#define ERRNO_OPNOTSUPP			WSAEOPNOTSUPP
-#define ERRNO_MFILE			WSAEMFILE
-#define SET_BLOCKING(fd)	    do { \
-    					unsigned long zeroval = 0; \
-    					ioctlsocket((fd), FIONBIO, &zeroval); \
-				       } while (0)
-#define SET_NONBLOCKING(fd)	    do { \
-    					unsigned long oneval = 1; \
-    					ioctlsocket((fd), FIONBIO, &oneval); \
-				       } while (0)
-#else
-#define INVALID_FD			(-1)
-
-#define sock_read(fd, buf, len)		read((fd), (buf), (len))
-#define sock_write(fd, buf, len)	write((fd), (buf), (len))
-#define sock_close(fd)			close(fd)
-#define sock_errno()			errno
-#define sock_set_errno(err)		do {errno = (err);} while(0)
-
-#define ERRNO_NONE			0
-#define ERRNO_BLOCK			EAGAIN
-#define ERRNO_CONNREFUSED		ECONNREFUSED
-#define ERRNO_PROGRESS			EINPROGRESS
-#define ERRNO_PROTONOSUPPORT		EPROTONOSUPPORT
-#define ERRNO_INVAL			EINVAL
-#define ERRNO_ADDRNOTAVAIL		EADDRNOTAVAIL
-#define ERRNO_NOTSOCK			ENOTSOCK
-#define ERRNO_OPNOTSUPP			EOPNOTSUPP
-#define ERRNO_MFILE			EMFILE
-#define SET_BLOCKING(fd)        	fcntl((fd), F_SETFL, \
-                                      	fcntl((fd), F_GETFL, 0) & ~O_NONBLOCK)
-#define SET_NONBLOCKING(fd)     	fcntl((fd), F_SETFL, \
-                                      	fcntl((fd), F_GETFL, 0) | O_NONBLOCK)
-#endif
-
-#define GET_INT8(s)    ((s)[0])
-#define GET_INT16(s)   (((s)[0] << 8) | (s)[1])
-#define GET_INT32(s)   (((s)[0] << 24) | ((s)[1] << 16) | \
-			((s)[2] << 8) | (s)[3])
-
-#define PUT_INT8(x, s)  do { (s)[0] = x; } while(0)
-#define PUT_INT16(x, s) do { (s)[0] = ((x) >> 8) & 0xff; \
-			     (s)[1] = ((x) & 0xff); } while(0)
-#define PUT_INT32(x, s) do { (s)[0] = ((x) >> 24) & 0xff; \
-			     (s)[1] = ((x) >> 16) & 0xff; \
-			     (s)[2] = ((x) >> 8) & 0xff; \
-			     (s)[3] = (x) & 0xff; } while(0)
-
-/* type for Connections */
-#define ESOCK_STATE_NONE	0
-#define ESOCK_ACTIVE_LISTENING 	1
-#define ESOCK_PASSIVE_LISTENING 2
-#define ESOCK_CONNECTED		3
-#define ESOCK_WAIT_CONNECT	4
-#define ESOCK_SSL_CONNECT	5
-#define ESOCK_SSL_ACCEPT	6
-#define ESOCK_TRANSPORT_ACCEPT  7
-#define ESOCK_JOINED		8
-#define ESOCK_SSL_SHUTDOWN	9
-#define ESOCK_DEFUNCT	       10
-
-#ifdef __WIN32__
-    typedef SOCKET FD;
-#else
-    typedef int FD;
-#endif
-
-/* For the shutdown(fd, how) call */
-#ifdef __WIN32__
-#define SHUTDOWN_READ  SD_RECEIVE
-#define SHUTDOWN_WRITE SD_SEND
-#define SHUTDOWN_ALL   SD_BOTH
-#else
-#define SHUTDOWN_READ  0
-#define SHUTDOWN_WRITE 1
-#define SHUTDOWN_ALL   2
-#endif
-
-#define ORIG_LISTEN  0
-#define ORIG_ACCEPT  1
-#define ORIG_CONNECT 2
- 
-typedef struct {
-    int size;			/* Total size of buf */
-    unsigned char *buf;
-    int len;			/* Current number of bytes in buf */
-    int offset;			/* Bytes already written  */
-} WriteQueue;
-
-typedef struct _proxy Proxy;
-
-typedef struct Connection {
-    FD fd;
-    FD listen_fd;		/* Needed for async listen error */
-    unsigned char state;
-    int acceptors;		/* Count acceptors for listen socket */
-    Proxy *proxy;
-    void *opaque;		/* Any suitable ssl structure */
-    int ssl_want;		/* read/write flags */
-    int eof;			/* end of file (read) */
-    int bp;			/* broken pipe (write) */
-    int clean;			/* Clean SSL shutdown initiated */
-    int close;			/* Close if set */
-    int origin;			/* listen, accept or connect */
-    int encrypted;		/* 1 = SSL encrypted, 0 = normal, unencrypted tcp */
-    char *flags;		/* ssl parameters */
-    FILE *logfp;		/* connection log file (not used) */
-    WriteQueue wq;
-    struct Connection* next;
-    const char* errstr; 	/* only used to report errors from ssl_accept_init in SSL_ACCEPT */
-} Connection;
-
-struct _proxy {
-    FD fd;
-    int peer_port;
-    int eof;			/* end of file (read) */
-    int bp;			/* broken pipe (write) */
-    Connection *conn;
-    WriteQueue wq;
-    Proxy *next;
-};
-
-/* Commands, replies, and error responses */
-
-#define ESOCK_CONNECT_CMD	1
-#define ESOCK_CONNECT_WAIT_REP	2
-#define ESOCK_CONNECT_REP	3
-#define ESOCK_CONNECT_ERR	4
-
-#define ESOCK_TERMINATE_CMD	5
-#define ESOCK_CLOSE_CMD	        6
-
-#define ESOCK_LISTEN_CMD	7
-#define ESOCK_LISTEN_REP	8
-#define ESOCK_LISTEN_ERR	9
-
-#define ESOCK_TRANSPORT_ACCEPT_CMD 10
-#define ESOCK_NOACCEPT_CMD      11
-#define ESOCK_TRANSPORT_ACCEPT_REP 12
-#define ESOCK_TRANSPORT_ACCEPT_ERR 13
-
-#define ESOCK_FROMNET_CLOSE_REP 14
-
-#define ESOCK_CONNECT_SYNC_ERR	15
-#define ESOCK_LISTEN_SYNC_ERR	16
-
-#define ESOCK_PROXY_PORT_REP    23
-#define ESOCK_PROXY_JOIN_CMD	24
-#define ESOCK_PROXY_JOIN_REP	25
-#define ESOCK_PROXY_JOIN_ERR	26
-
-#define ESOCK_SET_SOCKOPT_CMD   27
-#define ESOCK_IOCTL_OK          28
-#define ESOCK_IOCTL_ERR		29
-
-#define ESOCK_GETPEERNAME_CMD   30
-#define ESOCK_GETPEERNAME_REP   31
-#define ESOCK_GETPEERNAME_ERR   32
-
-#define ESOCK_GETSOCKNAME_CMD   33
-#define ESOCK_GETSOCKNAME_REP   34
-#define ESOCK_GETSOCKNAME_ERR   35
-
-#define ESOCK_GETPEERCERT_CMD   36
-#define ESOCK_GETPEERCERT_REP   37
-#define ESOCK_GETPEERCERT_ERR   38
-
-#define ESOCK_GETVERSION_CMD    39
-#define ESOCK_GETVERSION_REP    40
-
-#define ESOCK_SET_SEED_CMD      41
-
-#define ESOCK_GETCONNINFO_CMD   42
-#define ESOCK_GETCONNINFO_REP   43
-#define ESOCK_GETCONNINFO_ERR   44
-
-#define ESOCK_SSL_ACCEPT_CMD     45
-#define ESOCK_SSL_ACCEPT_REP     46
-#define ESOCK_SSL_ACCEPT_ERR     47
-
-#define ESOCK_DUMP_STATE_CMD      48
-#define ESOCK_SET_DEBUG_CMD       49
-#define ESOCK_SET_DEBUGMSG_CMD    50
-
-
-/* Option codes  for ESOCK_SET_SOCKOPT_CMD */
-#define ESOCK_SET_TCP_NODELAY	1
-
-/* SSL want to read or write */
-#define ESOCK_SSL_WANT_READ	1
-#define ESOCK_SSL_WANT_WRITE	2
-
-/* Protocol version according to ssl_server */
-#define ESOCK_SSLv2		1
-#define ESOCK_SSLv3		2
-#define ESOCK_TLSv1		4
-
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/ssl/c_src/esock_openssl.c b/lib/ssl/c_src/esock_openssl.c
deleted file mode 100644
index 0bc42958f0..0000000000
--- a/lib/ssl/c_src/esock_openssl.c
+++ /dev/null
@@ -1,1213 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose: Adaptions for the OpenSSL package.
- *
- * This file implements the functions defined in esock_ssl.h for
- * the OpenSSL package. 
- *
- * The following holds true for non-blockling I/O:
- *
- *   Function		Return values
- *   -------- 		-------------
- *   SSL_accept()       success: 1, failure: =<0
- *   SSL_connect()      success: 1, failure: =<0
- *   SSL_read()         success: >0, eof: 0, failure: <0 
- *   SSL_write()	success: > 0, failure: =<0 
- *   SSL_shutdown()	success: 1, not finished: 0
- *
- * If the return value of any of the above functions is `ret' and the
- * ssl connection is `ssl', the call
- *
- * 	ssl_error = SSL_get_error(ssl, ret);
- *
- * returns one of the following eight values:
- *
- *   SSL_ERROR_NONE			ret > 0
- *   SSL_ERROR_ZERO_RETURN		ret = 0
- *   SSL_ERROR_WANT_READ		ret < 0 and ssl wants to read
- *   SSL_ERROR_WANT_WRITE		ret < 0 and ssl wants to write
- *   SSL_ERROR_SYSCALL			ret < 0  or ret = 0
- *   SSL_ERROR_SSL			if there was an ssl internal error
- *   SSL_ERROR_WANT_X509_LOOKUP		ret < 0 and ssl wants x509 lookup 
- *   SSL_ERROR_WANT_CONNECT		ret < 0 and ssl wants connect
- *
- * It is the case that SSL_read() sometimes returns -1, even when the 
- * underlying file descriptor is ready for reading.
- * 
- * Also, sometimes we may have SSL_ERROR_SSL in SSL_accept() and SSL_connect()
- * when a retry should be done.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#ifndef __WIN32__
-# include <fcntl.h>
-# include <unistd.h>
-#endif
-
-#include "esock.h"
-#include "esock_ssl.h"
-#include "debuglog.h"
-#include "esock_utils.h"
-#include "esock_posix_str.h"
-
-#include <openssl/crypto.h>
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-
-int ephemeral_rsa = 0;
-int ephemeral_dh = 0;		/* XXX Not used yet */
-int protocol_version = 0;
-
-char *esock_ssl_errstr = "";
-
-#define FLAGSBUFSIZE		512
-#define X509BUFSIZE		256
-#define DEFAULT_VERIFY_DEPTH	1
-
-#define SET_WANT(cp, ssl_error) \
-    switch((ssl_error)) { \
-    case SSL_ERROR_WANT_READ: \
-	(cp)->ssl_want = ESOCK_SSL_WANT_READ; \
-	break; \
-    case SSL_ERROR_WANT_WRITE: \
-	(cp)->ssl_want = ESOCK_SSL_WANT_WRITE; \
-	break; \
-    default: \
-    (cp)->ssl_want = 0; \
-	break; \
-    }
-
-#define RESET_ERRSTR() \
-    esock_ssl_errstr = "";
-
-#define MAYBE_SET_ERRSTR(s) \
-    if (!esock_ssl_errstr[0]) \
-	esock_ssl_errstr = (s);
-
-typedef struct {
-    int code;
-    char *text;
-} err_entry;
-
-typedef struct {
-    SSL_CTX *ctx;
-    char *passwd;
-    int verify_depth;
-} callback_data;
-
-static char *ssl_error_str(int error);
-static void end_ssl_call(int ret, Connection *cp, int ssl_error);
-static void check_shutdown(Connection *cp);
-static int set_ssl_parameters(Connection *cp, SSL_CTX *ctx);
-static int verify_callback(int ok, X509_STORE_CTX *ctx);
-static int passwd_callback(char *buf, int num, int rwflag, void *userdata);
-static void info_callback(const SSL *ssl, int where, int ret);
-static void callback_data_free(void *parent, void *ptr, 
-			       CRYPTO_EX_DATA *ad, 
-			       int idx, long arg1, void *argp);
-static RSA *tmp_rsa_callback(SSL *ssl, int is_export, int keylen);
-static void restrict_protocols(SSL_CTX *ctx);
-
-static err_entry errs[] = {    
-    {SSL_ERROR_NONE, "SSL_ERROR_NONE"},
-    {SSL_ERROR_ZERO_RETURN, "SSL_ERROR_ZERO_RETURN"}, 
-    {SSL_ERROR_WANT_READ, "SSL_ERROR_WANT_READ"}, 
-    {SSL_ERROR_WANT_WRITE, "SSL_ERROR_WANT_WRITE"}, 
-    {SSL_ERROR_SYSCALL, "SSL_ERROR_SYSCALL"},
-    {SSL_ERROR_SSL, "SSL_ERROR_SSL"},
-    {SSL_ERROR_WANT_X509_LOOKUP, "SSL_ERROR_WANT_X509_LOOKUP"},
-    {SSL_ERROR_WANT_CONNECT, "SSL_ERROR_WANT_CONNECT"}
-};
-
-static SSL_METHOD *method;	/* for listen and connect init */
-static char x509_buf[X509BUFSIZE]; /* for verify_callback */
-static int callback_data_index = -1; /* for ctx ex_data */
-static unsigned char randvec[1024]; /* XXX */
-
-#if defined(__WIN32__) || OPEN_MAX > 256
-# define FOPEN_WORKAROUND(var, expr) var = (expr)
-# define VOID_FOPEN_WORKAROUND(expr) expr
-#else
-/*
- * This is an ugly workaround. On Solaris, fopen() will return NULL if
- * it gets a file descriptor > 255. To avoid that, we'll make sure that
- * there is always one low-numbered file descriptor available when
- * fopen() is called.
- */
-static int reserved_fd;		/* Reserve a low-numbered file descriptor */
-# define USE_FOPEN_WORKAROUND 1
-
-# define FOPEN_WORKAROUND(var, expr)		\
-do {						\
-   close(reserved_fd);				\
-   var = (expr);				\
-   reserved_fd = open("/dev/null", O_RDONLY);	\
-} while (0)
-
-# define VOID_FOPEN_WORKAROUND(expr)		\
-do {						\
-   close(reserved_fd);				\
-   expr;					\
-   reserved_fd = open("/dev/null", O_RDONLY);	\
-} while (0)
-#endif
-
-esock_version *esock_ssl_version(void)
-{
-    static esock_version vsn;
-
-    vsn.compile_version = OPENSSL_VERSION_TEXT;
-    vsn.lib_version = SSLeay_version(SSLEAY_VERSION);
-    return &vsn;
-}
-
-char *esock_ssl_ciphers(void)
-{
-    SSL_CTX *ctx;
-    SSL *ssl;
-    char *ciphers;
-    const char *cp;
-    int i = 0, used = 0, len, incr = 1024;
-
-    if (!(ctx = SSL_CTX_new(method)))
-	return NULL;
-    restrict_protocols(ctx);
-    if (!(ssl = SSL_new(ctx))) {
-	SSL_CTX_free(ctx);
-	return NULL;
-    }
-
-    ciphers = esock_malloc(incr);
-    len = incr;
-    *ciphers = '\0';
-
-    while (1) {
-	if (!(cp = SSL_get_cipher_list(ssl, i)))
-	    break;
-	if (i > 0) {
-	    if (used == len) {
-		len += incr;
-		ciphers = esock_realloc(ciphers, len); 
-	    }
-	    strcat(ciphers, ":");
-	    used++;
-	}
-	if (strlen(cp) + used >= len) {
-	    len += incr;
-	    ciphers = esock_realloc(ciphers, len); 
-	}
-	strcat(ciphers, cp);
-	used += strlen(cp);
-	i++;
-    }
-    SSL_free(ssl);
-    SSL_CTX_free(ctx);
-    return ciphers;
-}
-
-void  esock_ssl_seed(void *buf, int len) 
-{
-    RAND_seed(buf, len);
-
-    /* XXX Maybe we should call RAND_status() and check if we have got
-     * enough randomness. 
-     */
-}
-
-int esock_ssl_init(void)
-{
-    method = SSLv23_method();	/* SSLv2, SSLv3 and TLSv1, may be restricted
-				 in listen and connect */
-    SSL_load_error_strings();
-    SSL_library_init();
-    esock_ssl_seed(randvec, sizeof(randvec));
-    callback_data_index = SSL_CTX_get_ex_new_index(0, "callback_data", 
-						 NULL, NULL, 
-						 callback_data_free);
-#ifdef USE_FOPEN_WORKAROUND
-    reserved_fd = open("/dev/null", O_RDONLY);
-    DEBUGF(("init: reserved_fd=%d\r\n", reserved_fd));
-#endif
-    return 0;
-}
-
-
-void esock_ssl_finish(void)
-{
-    /* Nothing */
-}
-
-
-void esock_ssl_free(Connection *cp)
-{
-    SSL *ssl = cp->opaque;
-    SSL_CTX *ctx;
-
-    if (ssl) {
-	ctx = SSL_get_SSL_CTX(ssl);
-	SSL_free(ssl);
-	if (cp->origin != ORIG_ACCEPT)
-	    SSL_CTX_free(ctx);
-	cp->opaque = NULL;
-    }
-}
-
-
-/*
- * Print SSL specific errors.
- */
-void esock_ssl_print_errors_fp(FILE *fp)
-{
-    ERR_print_errors_fp(fp);
-}
-
-
-int esock_ssl_accept_init(Connection *cp, void *listenssl)
-{
-    SSL_CTX *listenctx;
-    SSL *ssl;
-
-    RESET_ERRSTR();
-    MAYBE_SET_ERRSTR("esslacceptinit");
-
-    if(!listenssl) {
-	DEBUGF(("esock_ssl_accept_init: listenssl null\n"));
-	return -1;
-    }
-    if (!(listenctx = SSL_get_SSL_CTX(listenssl))) {
-	DEBUGF(("esock_ssl_accept_init: SSL_get_SSL_CTX\n"));
-	return -1;
-    }
-    if (!(ssl = cp->opaque = SSL_new(listenctx))) {
-	DEBUGF(("esock_ssl_accept_init: SSL_new(listenctx)\n"));
-	return -1;
-    }
-    SSL_set_fd(ssl, cp->fd);
-    return 0;
-
-}
-
-
-int esock_ssl_connect_init(Connection *cp)
-{
-    SSL_CTX *ctx;
-    SSL *ssl;
-
-    RESET_ERRSTR();
-    MAYBE_SET_ERRSTR("esslconnectinit");
-
-    if (!(ctx = SSL_CTX_new(method)))
-	return -1;
-    if (set_ssl_parameters(cp, ctx) < 0) {
-	SSL_CTX_free(ctx);
-	return -1;
-    }
-    restrict_protocols(ctx);
-    if (!(ssl = cp->opaque = SSL_new(ctx))) {
-	SSL_CTX_free(ctx);
-	return -1;
-    }
-    SSL_set_fd(ssl, cp->fd);
-    return 0;
-}
-
-
-int esock_ssl_listen_init(Connection *cp)
-{
-    SSL_CTX *ctx;
-    SSL *ssl;
-
-    RESET_ERRSTR();
-    MAYBE_SET_ERRSTR("essllisteninit");
-
-    if (!(ctx = SSL_CTX_new(method)))
-	return -1;
-    if (set_ssl_parameters(cp, ctx) < 0) {
-	SSL_CTX_free(ctx);
-	return -1;
-    }
-    restrict_protocols(ctx);
-
-    /* The allocation of ctx is for setting ssl parameters, so that
-     * accepts can inherit them. We allocate ssl to be able to
-     * refer to it via cp->opaque, but will not be used otherwise.
-     */
-    if (!(ssl = cp->opaque = SSL_new(ctx))) {
-	SSL_CTX_free(ctx);
-	return -1;
-    }
-    /* Set callback for temporary ephemeral RSA key generation.
-    * Note: for servers only. */
-    SSL_CTX_set_tmp_rsa_callback(ctx, tmp_rsa_callback);
-    return 0;
-}
-
-/* 
- * esock_ssl_accept(Connection *cp)
- *
- */
-int esock_ssl_accept(Connection *cp)
-{
-    int ret, ssl_error;
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-
-    DEBUGF(("esock_ssl_accept: calling SSL_accept fd = %d\n"
-	    "  state before: %s\n", cp->fd, SSL_state_string(ssl)));
-    ret = SSL_accept(ssl);
-    DEBUGF(("  sock_errno %d errno %d \n", sock_errno(), errno));
-    ssl_error = SSL_get_error(ssl, ret);
-    DEBUGF(("  SSL_accept = %d\n"
-	    "  ssl_error: %s\n"
-	    "  state after: %s\n", 
-	    ret, ssl_error_str(ssl_error), SSL_state_string(ssl)));
-    DEBUGF(("    ret %d os error %s\n", ret, strerror(errno)));
-    if (ret > 0)
-	return ret;
-    else if (ret == 0) {
-	const char* f; int l; unsigned int e;
-	while ((e = ERR_get_error_line(&f, &l))) {
-	    DEBUGF(("    error %s:%d  %s\n", f, l, ssl_error_str(e)));
-	}
-	/* permanent accept error */
-	sock_set_errno(ERRNO_NONE);
-	MAYBE_SET_ERRSTR("esslaccept");
-	return -1;
-    }
-    end_ssl_call(ret, cp, ssl_error);
-    return ret;
-}
-
-/* 
- * esock_ssl_connect(Connection *cp)
- *
- */
-int esock_ssl_connect(Connection *cp)
-{
-    int ret, ssl_error;
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-
-    DEBUGF(("esock_ssl_connect: calling SSL_connect fd = %d\n"
-	    "  state before: %s\n", cp->fd, SSL_state_string(ssl)));
-    ret = SSL_connect(ssl);
-    ssl_error = SSL_get_error(ssl, ret);
-    DEBUGF(("  SSL_connect() = %d\n"
-	    "  ssl_error: %s\n"
-	    "  state after: %s\n", 
-	    ret, ssl_error_str(ssl_error), SSL_state_string(ssl)));
-    if (ret > 0)
-	return ret;
-    else if (ret == 0) {
-	/* permanent connect error */
-	sock_set_errno(ERRNO_NONE);
-	MAYBE_SET_ERRSTR("esslconnect");
-	return -1;
-    }
-    end_ssl_call(ret, cp, ssl_error);
-    return ret;
-}
-
-
-int esock_ssl_session_reused(Connection *cp)
-{
-    SSL *ssl = cp->opaque;
-
-    return SSL_session_reused(ssl);
-}
-
-
-/* esock_ssl_read(Connection *cp, char *buf, int len)
- *
- * Read at most `len' chars into `buf'. Returns number of chars
- * read ( > 0), or 0 at EOF, or -1 on error. Sets cp->eof, cp->bp if
- * appropriate. 
- */
-
-int esock_ssl_read(Connection *cp, char *buf, int len)
-{
-    int ret, ssl_error;
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-    DEBUGF(("esock_ssl_read: calling SSL_read fd = %d\n"
-	    "  state before: %s\n", cp->fd, SSL_state_string(ssl)));
-
-    ret = SSL_read(ssl, buf, len);
-    ssl_error = SSL_get_error(ssl, ret);
-
-    DEBUGF(("  SSL_read = %d\n"
-	    "  ssl_error: %s\n"
-	    "  state after: %s\n", 
-	    ret, ssl_error_str(ssl_error), SSL_state_string(ssl)));
-
-    if (ssl_error == SSL_ERROR_NONE) {
-	DEBUGMSGF(("message (hex) : [%3.*a]\n", ret, buf));
-	DEBUGMSGF(("message (char): [%3.*b]\n", ret, buf));
-    }
-    if (ret > 0)
-	return ret;
-    if (ret == 0) {
-	check_shutdown(cp);
-	return ret;
-    } 
-    end_ssl_call(ret, cp, ssl_error);
-    return ret;
-}
-
-/* 
- * esock_ssl_write(Connection *cp, char *buf, int len)
- *
- * Writes at most `len' chars from `buf'. Returns number of chars
- * written, or -1 on error.
- */
-int esock_ssl_write(Connection *cp, char *buf, int len)
-{
-    int ret, ssl_error;
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-    DEBUGF(("esock_ssl_write: calling SSL_write fd = %d\n"
-	    "  state before: %s\n", cp->fd, SSL_state_string(ssl)));
-    ret = SSL_write(ssl, buf, len);
-    ssl_error = SSL_get_error(ssl, ret);
-    DEBUGF(("  SSL_write = %d\n"
-	    "  ssl_error: %s\n"
-	    "  state after: %s\n", 
-	    ret, ssl_error_str(ssl_error), SSL_state_string(ssl)));
-    if (ssl_error == SSL_ERROR_NONE) {
-	DEBUGMSGF(("message (hex) : [%3.*a]\n", ret, buf));
-	DEBUGMSGF(("message (char): [%3.*b]\n", ret, buf));
-    }
-    if (ret > 0)
-	return ret;
-    if (ret == 0) {
-	check_shutdown(cp);
-	return ret;
-    } 
-    end_ssl_call(ret, cp, ssl_error);
-    return ret;
-}
-
-
-int esock_ssl_shutdown(Connection *cp)
-{
-    int ret, ssl_error;
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-    DEBUGF(("esock_ssl_shutdown: calling SSL_shutdown fd = %d\n"
-    "  state before: %s\n",  cp->fd, SSL_state_string(ssl)));
-    ret = SSL_shutdown(ssl);
-    ssl_error = SSL_get_error(ssl, ret);
-    DEBUGF(("  SSL_shutdown = %d\n"
-	    "  ssl_error: %s\n"
-	    "  state after: %s\n",
-	    ret, ssl_error_str(ssl_error), SSL_state_string(ssl)));
-    if (ret >= 0) {
-	check_shutdown(cp);
-	return ret;
-    }
-    end_ssl_call(ret, cp, ssl_error);
-    return ret;
-}
-
-
-/* Returns total number of bytes in DER encoded cert pointed to by
- * *buf, which is allocated by this function, unless return < 0.  
- * XXX X509_free ??
- */
-int esock_ssl_getpeercert(Connection *cp, unsigned char **buf)
-{
-    int len;
-    SSL *ssl = cp->opaque;
-    X509 *x509;
-    unsigned char *tmp;
-
-    RESET_ERRSTR();
-    if((x509 = SSL_get_peer_certificate(ssl)) == NULL) {
-	MAYBE_SET_ERRSTR("enopeercert"); /* XXX doc */
-	return -1;
-    }
-    
-    if ((len = i2d_X509(x509, NULL)) <= 0) {
-	MAYBE_SET_ERRSTR("epeercert");
-	return -1;
-    }
-
-    tmp = *buf = esock_malloc(len);
-
-    /* We must use a temporary value here, since i2d_X509(X509 *x,
-     * unsigned char **out) increments *out.  
-     */
-    if (i2d_X509(x509, &tmp) < 0) {
-	esock_free(tmp);
-	MAYBE_SET_ERRSTR("epeercert");
-	return -1;
-    }
-    return len;
-}
-
-/* Returns total number of bytes in chain of certs. Each cert begins
- * with a 4-bytes length. The last cert is ended with 4-bytes of
- * zeros. The result is returned in *buf, which is allocated unless
- * the return value is < 0.  
- * XXX X509_free ? sk_X509_free ? 
- * XXX X509_free is reference counting.
- */
-int esock_ssl_getpeercertchain(Connection *cp, unsigned char **buf)
-{
-    SSL *ssl = cp->opaque;
-    STACK_OF(X509) *x509_stack;
-    X509 *x509;
-    int num, i, totlen, pos, *der_len;
-    unsigned char *vbuf;
-
-    RESET_ERRSTR();
-    if((x509_stack = SSL_get_peer_cert_chain(ssl)) == NULL) {
-	MAYBE_SET_ERRSTR("enopeercertchain"); /* XXX doc */
-	return -1;
-    }
-    
-    num = sk_X509_num(x509_stack);
-    der_len = esock_malloc(num * sizeof(int));
-    totlen = 0;
-
-    for (i = 0; i < num; i++) {
-	x509 = sk_X509_value(x509_stack, i);
-	totlen += 4;
-	if ((der_len[i] = i2d_X509(x509, NULL)) < 0) {
-	    MAYBE_SET_ERRSTR("epeercertchain");
-	    esock_free(der_len);
-	    return -1;
-	}
-	totlen += der_len[i];
-    }
-    totlen += 4;
-
-    vbuf = *buf = esock_malloc(totlen);
-    pos = 0;
-
-    for (i = 0; i < num; i++) {
-	x509 = sk_X509_value(x509_stack, i);
-	PUT_INT32(der_len[i], vbuf);
-	vbuf += 4;
-	/* Note: i2d_X509 increments vbuf */
-	if (i2d_X509(x509, &vbuf) < 0) {
-	    MAYBE_SET_ERRSTR("epeercertchain");
-	    esock_free(*buf);
-	    esock_free(der_len);
-	    return -1;
-	}
-    }
-    esock_free(der_len);
-    return totlen;
-}
-
-
-int esock_ssl_getprotocol_version(Connection *cp, char **buf)
-{
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-    if (!ssl) {
-	MAYBE_SET_ERRSTR("enoent");
-	return -1;
-    }
-    *buf = (char *) SSL_get_version(ssl);
-
-    return 0;
-}
-
-
-int esock_ssl_getcipher(Connection *cp, char **buf)
-{
-    SSL *ssl = cp->opaque;
-
-    RESET_ERRSTR();
-    if (!ssl) {
-	MAYBE_SET_ERRSTR("enoent");
-	return -1;
-    }
-    *buf = (char *) SSL_get_cipher(ssl);
-
-    return 0;
-}
-
-/* Local functions */
-
-static char *ssl_error_str(int ssl_error)
-{
-    int i;
-    static char buf[128];
-
-    for (i = 0; i < sizeof(errs)/sizeof(err_entry); i ++) {
-	if (ssl_error == errs[i].code)
-	    return errs[i].text;
-    }
-    sprintf(buf, "esock_openssl: SSL_error unknown: %d", ssl_error);
-    return buf;
-}
-
-void end_ssl_call(int ret, Connection *cp, int ssl_error)
-{
-    SET_WANT(cp, ssl_error);
-    switch (ssl_error) {
-    case SSL_ERROR_SYSCALL:
-	/* Typically sock_errno() is equal to ERRNO_BLOCK */
-	MAYBE_SET_ERRSTR(esock_posix_str(sock_errno()));
-	break;
-    case SSL_ERROR_SSL:
-	sock_set_errno(ERRNO_NONE);
-	MAYBE_SET_ERRSTR("esslerrssl");
-	break;
-    case SSL_ERROR_WANT_X509_LOOKUP:
-	SSLDEBUGF();
-	sock_set_errno(ERRNO_NONE);
-	MAYBE_SET_ERRSTR("ex509lookup");
-	break;
-    case SSL_ERROR_WANT_CONNECT:
-	SSLDEBUGF();
-	sock_set_errno(ERRNO_NONE);
-	MAYBE_SET_ERRSTR("ewantconnect");
-	break;
-    default:
-	break;
-    }
-}
-
-void check_shutdown(Connection *cp) 
-{
-    int sd_mode;
-    SSL *ssl = cp->opaque;
-
-    sd_mode = SSL_get_shutdown(ssl);
-    if (sd_mode & SSL_RECEIVED_SHUTDOWN)
-	cp->eof = 1;
-    if (sd_mode & SSL_SENT_SHUTDOWN) {
-	DEBUGF(("check_shutdown SSL_SENT_SHUTDOWN\n"));
-	cp->bp = 1;
-    }
-}
-
-/* 
- * set_ssl_parameters
- *
- * Set ssl parameters from connection structure. Only called for
- * listen and connect. 
- *
- * Note: The -cacertdir option is not documented.
- */
-static int set_ssl_parameters(Connection *cp, SSL_CTX *ctx)
-{
-    char *cacertfile = NULL, *cacertdir = NULL, *certfile = NULL;
-    char *keyfile = NULL, *ciphers = NULL, *password = NULL;
-    int verify = 0, verify_depth = DEFAULT_VERIFY_DEPTH, verify_mode;
-    int i, argc;
-    char **argv;
-    callback_data *cb_data;
-
-    RESET_ERRSTR();
-
-    argc = esock_build_argv(cp->flags, &argv);
-
-    DEBUGF(("Argv:\n"));
-    for (i = 0; i < argc; i++) {
-	DEBUGF(("%d:  %s\n", i, argv[i]));
-    }
-
-    for (i = 0; i < argc; i++) {
-	if (strcmp(argv[i], "-verify") == 0) {
-	    verify = atoi(argv[++i]);
-	} else if (strcmp(argv[i], "-depth") == 0) {
-	    verify_depth = atoi(argv[++i]);
-	} else if (strcmp(argv[i], "-log") == 0) {
-	    /* XXX  ignored: logging per connection not supported */
-	    i++;
-	} else if (strcmp(argv[i], "-certfile") == 0) {
-	    certfile = argv[++i];
-	} else if (strcmp(argv[i], "-keyfile") == 0) {
-	    keyfile = argv[++i];
-	} else if (strcmp(argv[i], "-password") == 0) {
-	    password = argv[++i];
-	} else if (strcmp(argv[i], "-cacertfile") == 0) {
-	    cacertfile = argv[++i];
-	} else if (strcmp(argv[i], "-cacertdir") == 0) {
-	    cacertdir = argv[++i];
-	} else if (strcmp(argv[i], "-d") == 0) {
-	    /* XXX  ignored: debug per connection not supported */
-	    i++;
-	} else if (strcmp(argv[i], "-ciphers") == 0) {
-	    ciphers = argv[++i];
-	} else {
-	    /* XXX Error: now ignored */
-	}
-    }
-    DEBUGF(("set_ssl_parameters: all arguments read\n"));
-
-    if (cp->origin == ORIG_LISTEN && !certfile) {
-	DEBUGF(("ERROR: Server must have certificate\n"));
-	MAYBE_SET_ERRSTR("enoservercert");
-	goto err_end;
-    }
-
-    /* Define callback data */
-    /* XXX Check for NULL */
-    cb_data = esock_malloc(sizeof(callback_data));
-    cb_data->ctx = ctx;
-    if (password) {
-	cb_data->passwd = esock_malloc(strlen(password) + 1);
-	strcpy(cb_data->passwd, password);
-    } else
-	cb_data->passwd = NULL;
-    cb_data->verify_depth = verify_depth;
-    SSL_CTX_set_ex_data(ctx, callback_data_index, cb_data);
-
-    /* password callback */
-    SSL_CTX_set_default_passwd_cb(ctx, passwd_callback);
-    SSL_CTX_set_default_passwd_cb_userdata(ctx, cb_data);
-
-    /* Set location for "trusted" certificates */
-    if (cacertfile || cacertdir) {
-	int res;
-	DEBUGF(("set_ssl_parameters: SSL_CTX_load_verify_locations\n"));
-	FOPEN_WORKAROUND(res, SSL_CTX_load_verify_locations(ctx, cacertfile,
-							    cacertdir));
-	if (!res) {
-	    DEBUGF(("ERROR: Cannot load verify locations\n"));
-	    MAYBE_SET_ERRSTR("ecacertfile");
-	    goto err_end;
-	}
-    } else {
-	int res;
-	DEBUGF(("set_ssl_parameters: SSL_CTX_set_default_verify_paths\n"));
-	FOPEN_WORKAROUND(res, SSL_CTX_set_default_verify_paths(ctx));
-	if (!res) {
-	    DEBUGF(("ERROR: Cannot set default verify paths\n"));
-	    MAYBE_SET_ERRSTR("ecacertfile");
-	    goto err_end;
-	}
-    }
-
-    /* For a server the following sets the list of CA distinguished
-     * names that it sends to its client when it requests the
-     * certificate from the client.  
-     * XXX The names of certs in cacertdir ignored.  
-     */
-    if (cp->origin == ORIG_LISTEN && cacertfile) {
-	DEBUGF(("set_ssl_parameters: SSL_CTX_set_client_CA_list\n"));
-	VOID_FOPEN_WORKAROUND(SSL_CTX_set_client_CA_list(ctx,
-			           SSL_load_client_CA_file(cacertfile)));
-	if (!SSL_CTX_get_client_CA_list(ctx)) {
-	    DEBUGF(("ERROR: Cannot set client CA list\n"));
-	    MAYBE_SET_ERRSTR("ecacertfile");
-	    goto err_end;
-	}
-    }
-
-    /* Use certificate file if key file has not been set. */
-    if (!keyfile)
-	keyfile = certfile;
-
-    if (certfile) {
-	int res;
-	DEBUGF(("set_ssl_parameters: SSL_CTX_use_certificate_file\n"));
-	FOPEN_WORKAROUND(res, SSL_CTX_use_certificate_file(ctx, certfile,
-							   SSL_FILETYPE_PEM));
-	if (res <= 0) {
-	    DEBUGF(("ERROR: Cannot set certificate file\n"));
-	    MAYBE_SET_ERRSTR("ecertfile");
-	    goto err_end;
-	}
-    }
-    if (keyfile) { 
-	int res;
-	DEBUGF(("set_ssl_parameters: SSL_CTX_use_PrivateKey_file\n"));
-	FOPEN_WORKAROUND(res, SSL_CTX_use_PrivateKey_file(ctx, keyfile, 
-					SSL_FILETYPE_PEM));
-	if (res <= 0) {
-	    DEBUGF(("ERROR: Cannot set private key file\n"));
-	    MAYBE_SET_ERRSTR("ekeyfile");
-	    goto err_end;
-	}
-    }
-    if(certfile && keyfile) {
-	DEBUGF(("set_ssl_parameters: SSL_CTX_check_private_key\n"));
-	if (!SSL_CTX_check_private_key(ctx)) {
-	    DEBUGF(("ERROR: Private key does not match the certificate\n")); 
-	    MAYBE_SET_ERRSTR("ekeymismatch");
-	    goto err_end;
-	}
-    }    
-
-    /* Ciphers */
-    if (ciphers) {
-	DEBUGF(("set_ssl_parameters: SSL_CTX_set_cipher_list\n"));
-	if (!SSL_CTX_set_cipher_list(ctx, ciphers)) {
-	    DEBUGF(("ERROR: Cannot set cipher list\n"));
-	    MAYBE_SET_ERRSTR("ecipher");
-	    goto err_end;
-	}
-    }
-
-    /* Verify depth */
-    DEBUGF(("set_ssl_parameters: SSL_CTX_set_verify_depth (depth = %d)\n", 
-	    verify_depth)); 
-    SSL_CTX_set_verify_depth(ctx, verify_depth);
-
-    /* Verify mode and callback */
-    /* XXX Why precisely these modes? */
-    switch (verify) {
-    case 0:
-	verify_mode = SSL_VERIFY_NONE;
-	break;
-    case 1:
-	verify_mode = SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;
-	break;
-    case 2:
-	verify_mode = SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE|
-	    SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
-	break;
-    default:
-	verify_mode = SSL_VERIFY_NONE;
-    }
-    DEBUGF(("set_ssl_parameters: SSL_CTX_set_verify (verify = %d)\n", 
-	    verify)); 
-    SSL_CTX_set_verify(ctx, verify_mode, verify_callback);
-
-    /* Session id context. Should be an option really. */
-    if (cp->origin == ORIG_LISTEN) {
-	unsigned char *sid = "Erlang/OTP/ssl";
-	SSL_CTX_set_session_id_context(ctx, sid, strlen(sid));
-    }
-
-    /* info callback */
-    if (debug) 
-	SSL_CTX_set_info_callback(ctx, info_callback);
-
-    DEBUGF(("set_ssl_parameters: done\n"));
-    /* Free arg list */
-    for (i = 0; argv[i]; i++)
-	esock_free(argv[i]);
-    esock_free(argv);
-    return 0;
-
- err_end:
-    DEBUGF(("set_ssl_parameters: error\n"));
-    /* Free arg list */
-    for (i = 0; argv[i]; i++)
-	esock_free(argv[i]);
-    esock_free(argv);
-    return -1;
-}
-
-/* Call back functions */
-
-static int verify_callback(int ok, X509_STORE_CTX *x509_ctx)
-{
-    X509 *cert;
-    int cert_err, depth;
-    SSL *ssl;
-    SSL_CTX *ctx;
-    callback_data *cb_data;
-
-    cert = X509_STORE_CTX_get_current_cert(x509_ctx);
-    cert_err = X509_STORE_CTX_get_error(x509_ctx);
-    depth = X509_STORE_CTX_get_error_depth(x509_ctx);
-
-    ssl = X509_STORE_CTX_get_ex_data(x509_ctx, 
-				     SSL_get_ex_data_X509_STORE_CTX_idx());
-    ctx = SSL_get_SSL_CTX(ssl);
-    cb_data = SSL_CTX_get_ex_data(ctx, callback_data_index);
-
-    X509_NAME_oneline(X509_get_subject_name(cert), x509_buf, sizeof(x509_buf));
-    DEBUGF(("  +vfy: depth = %d\n", depth));
-    DEBUGF(("        subject = %s\n", x509_buf));
-    X509_NAME_oneline(X509_get_issuer_name(cert),  x509_buf, sizeof(x509_buf));
-    DEBUGF(("        issuer = %s\n", x509_buf));
-
-    if (!ok) {
-	DEBUGF(("  +vfy: error = %d [%s]\n", cert_err,
-		X509_verify_cert_error_string(cert_err)));
-	if (depth >= cb_data->verify_depth) 
-	    ok = 1;
-    }
-
-    switch (cert_err) {
-    case X509_V_OK:
-    case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
-	ok = 1;
-	break;
-    case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
-    case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
-	MAYBE_SET_ERRSTR("enoissuercert");
-	break;
-    case X509_V_ERR_CERT_HAS_EXPIRED:
-	MAYBE_SET_ERRSTR("epeercertexpired");
-	break;
-    case X509_V_ERR_CERT_NOT_YET_VALID:
-    case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
-    case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
-	MAYBE_SET_ERRSTR("epeercertinvalid");
-	break;
-    case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
-	MAYBE_SET_ERRSTR("eselfsignedcert");
-	break;
-    case X509_V_ERR_CERT_CHAIN_TOO_LONG:
-	MAYBE_SET_ERRSTR("echaintoolong");
-	break;
-    default:
-	MAYBE_SET_ERRSTR("epeercert");
-	break;
-    }
-    DEBUGF(("  +vfy: return = %d\n",ok));
-    return ok;
-}
-
-static int passwd_callback(char *buf, int num, int rwflag, void *userdata)
-{
-    callback_data *cb_data = userdata;
-    int len;
-
-    if (cb_data && cb_data->passwd) {
-	DEBUGF(("  +passwd: %s\n", cb_data->passwd));
-	strncpy(buf, cb_data->passwd, num);
-	len = strlen(cb_data->passwd);
-	return len;
-    }
-    DEBUGF(("  +passwd: ERROR: No password set.\n"));
-    return 0;
-}
-
-static void info_callback(const SSL *ssl, int where, int ret)
-{
-    char *str;
-
-    if (where & SSL_CB_LOOP) {
-	DEBUGF(("  info: %s\n",SSL_state_string_long(ssl)));
-    } else if (where & SSL_CB_ALERT) {
-	str = (where & SSL_CB_READ) ? "read" : "write";
-	DEBUGF(("  info: SSL3 alert %s:%s:%s\n", str, 
-		SSL_alert_type_string_long(ret),
-		SSL_alert_desc_string_long(ret)));
-    } else if (where & SSL_CB_EXIT) {
-	if (ret == 0) {
-	    DEBUGF(("  info: failed in %s\n", SSL_state_string_long(ssl)));
-	} else if (ret < 0) {
-	    DEBUGF(("  info: error in %s\n", SSL_state_string_long(ssl)));
-	}
-    }
-}
-
-/* This function is called whenever an SSL_CTX *ctx structure is
- * freed. 
-*/
-static void callback_data_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, 
-			       int idx, long arg1, void *argp)
-{
-    callback_data *cb_data = ptr;
-    
-    if (cb_data) {
-	if (cb_data->passwd) 
-	    esock_free(cb_data->passwd);
-	esock_free(cb_data);
-    }
-}
-
-static RSA *tmp_rsa_callback(SSL *ssl, int is_export, int keylen)
-{
-    static RSA *rsa512 = NULL;
-    static RSA *rsa1024 = NULL;
-
-    switch (keylen) {
-    case 512:
-	if (!rsa512)
-	    rsa512 = RSA_generate_key(keylen, RSA_F4, NULL, NULL);
-	return rsa512;
-	break;
-    case 1024:
-	if (!rsa1024)
-	    rsa1024 = RSA_generate_key(keylen, RSA_F4, NULL, NULL);
-	return rsa1024;
-	break;
-    default:
-	if (rsa1024)
-	    return rsa1024;
-	if (rsa512)
-	    return rsa512;
-	rsa512 = RSA_generate_key(keylen, RSA_F4, NULL, NULL);
-	return rsa512;
-    }
-}
-
-/* Restrict protocols (SSLv2, SSLv3, TLSv1) */
-static void restrict_protocols(SSL_CTX *ctx)
-{
-    long options = 0;
-
-    if (protocol_version) {
-	if ((protocol_version & ESOCK_SSLv2) == 0) 
-	    options |= SSL_OP_NO_SSLv2;
-	if ((protocol_version & ESOCK_SSLv3) == 0) 
-	    options |= SSL_OP_NO_SSLv3;
-	if ((protocol_version & ESOCK_TLSv1) == 0) 
-	    options |= SSL_OP_NO_TLSv1;
-	SSL_CTX_set_options(ctx, options);
-    }
-}
-
-
-static unsigned char randvec [] = {
-    181, 177, 237, 240, 107, 24, 43, 148, 
-    105, 4, 248, 13, 199, 255, 23, 58, 
-    71, 181, 57, 151, 156, 25, 165, 7, 
-    73, 80, 80, 231, 70, 110, 96, 162, 
-    24, 205, 178, 178, 67, 122, 210, 180, 
-    92, 6, 156, 182, 84, 159, 85, 6, 
-    175, 66, 165, 167, 137, 34, 179, 237, 
-    77, 90, 87, 185, 21, 106, 92, 115, 
-    137, 65, 233, 42, 164, 153, 208, 133, 
-    160, 172, 129, 202, 46, 220, 98, 66, 
-    115, 66, 46, 28, 226, 200, 140, 145, 
-    207, 194, 58, 71, 56, 203, 113, 34, 
-    221, 116, 63, 114, 188, 210, 45, 238, 
-    200, 123, 35, 150, 2, 78, 160, 22, 
-    226, 167, 162, 10, 182, 75, 109, 97, 
-    86, 252, 93, 125, 117, 214, 220, 37, 
-    105, 160, 56, 158, 97, 57, 22, 14, 
-    73, 169, 111, 190, 222, 176, 14, 82, 
-    111, 42, 87, 90, 136, 236, 22, 209, 
-    156, 207, 40, 251, 88, 141, 51, 211, 
-    31, 158, 153, 91, 119, 83, 255, 60, 
-    55, 94, 5, 115, 119, 210, 224, 185, 
-    163, 163, 5, 3, 197, 106, 110, 206, 
-    109, 132, 50, 190, 177, 133, 175, 129, 
-    225, 161, 156, 244, 77, 150, 99, 38, 
-    17, 111, 46, 230, 152, 64, 50, 164, 
-    19, 78, 3, 164, 169, 175, 104, 97, 
-    103, 158, 91, 168, 186, 191, 73, 88, 
-    118, 112, 41, 188, 219, 0, 198, 209, 
-    206, 7, 5, 169, 127, 180, 80, 74, 
-    124, 4, 4, 108, 197, 67, 204, 29, 
-    101, 95, 174, 147, 64, 163, 89, 160, 
-    10, 5, 56, 134, 209, 69, 209, 55, 
-    214, 136, 45, 212, 113, 85, 159, 133, 
-    141, 249, 75, 40, 175, 91, 142, 13, 
-    179, 179, 51, 0, 136, 63, 148, 175, 
-    103, 162, 8, 214, 4, 24, 59, 71, 
-    9, 185, 48, 127, 159, 165, 8, 8, 
-    135, 151, 92, 214, 132, 151, 204, 169, 
-    24, 112, 229, 59, 236, 81, 238, 64, 
-    150, 196, 97, 213, 140, 159, 20, 24, 
-    79, 210, 191, 53, 130, 33, 157, 87, 
-    16, 180, 175, 217, 56, 123, 115, 196, 
-    130, 6, 155, 37, 220, 80, 232, 129, 
-    240, 57, 199, 249, 196, 152, 28, 111, 
-    124, 192, 59, 46, 29, 21, 178, 51, 
-    156, 17, 248, 61, 254, 80, 201, 131, 
-    203, 59, 227, 191, 71, 121, 134, 181, 
-    55, 79, 130, 225, 246, 36, 179, 224, 
-    189, 243, 200, 75, 73, 41, 251, 41, 
-    71, 251, 78, 146, 99, 101, 104, 69, 
-    18, 122, 65, 24, 232, 84, 246, 242, 
-    209, 18, 241, 114, 3, 65, 177, 99, 
-    49, 99, 215, 59, 9, 175, 195, 11, 
-    25, 46, 43, 120, 109, 179, 159, 250, 
-    239, 246, 135, 78, 2, 238, 214, 237, 
-    64, 170, 50, 44, 68, 67, 111, 232, 
-    225, 230, 224, 124, 76, 32, 52, 158, 
-    151, 54, 184, 135, 122, 66, 211, 215, 
-    121, 90, 124, 158, 55, 73, 116, 137, 
-    240, 15, 38, 31, 183, 86, 93, 49, 
-    148, 184, 125, 250, 155, 216, 84, 246, 
-    27, 172, 141, 54, 80, 158, 227, 254, 
-    189, 164, 238, 229, 68, 26, 231, 11, 
-    198, 222, 15, 141, 98, 8, 124, 219, 
-    60, 125, 170, 213, 114, 24, 189, 65, 
-    80, 186, 71, 126, 223, 153, 20, 141, 
-    110, 73, 173, 218, 214, 63, 205, 177, 
-    132, 115, 184, 28, 122, 232, 210, 72, 
-    237, 41, 93, 17, 152, 95, 242, 138, 
-    79, 98, 47, 197, 36, 17, 137, 230, 
-    15, 73, 193, 1, 181, 123, 0, 186, 
-    185, 135, 142, 200, 139, 78, 57, 145, 
-    191, 32, 98, 250, 113, 188, 71, 32, 
-    205, 81, 219, 99, 60, 87, 42, 95, 
-    249, 252, 121, 125, 246, 230, 74, 162, 
-    73, 59, 179, 142, 178, 47, 163, 161, 
-    236, 14, 123, 219, 18, 6, 102, 140, 
-    215, 210, 76, 9, 119, 147, 252, 63, 
-    13, 51, 161, 172, 180, 116, 212, 129, 
-    116, 237, 38, 64, 213, 222, 35, 14, 
-    183, 237, 78, 204, 250, 250, 5, 41, 
-    142, 5, 207, 154, 65, 183, 108, 82, 
-    1, 43, 149, 233, 89, 195, 25, 233, 
-    4, 34, 19, 122, 16, 58, 121, 5, 
-    118, 168, 22, 213, 49, 226, 163, 169, 
-    21, 78, 179, 232, 125, 216, 198, 147, 
-    245, 196, 199, 138, 185, 167, 179, 82, 
-    175, 53, 6, 162, 5, 141, 180, 212, 
-    95, 201, 234, 169, 111, 175, 138, 197, 
-    177, 246, 154, 41, 185, 201, 134, 187, 
-    88, 99, 231, 23, 190, 36, 72, 174, 
-    244, 185, 205, 50, 230, 226, 210, 119, 
-    175, 107, 109, 244, 12, 122, 84, 51, 
-    146, 95, 68, 74, 76, 212, 221, 103, 
-    244, 71, 63, 133, 149, 233, 48, 3, 
-    176, 168, 6, 98, 88, 226, 120, 190, 
-    205, 249, 38, 157, 205, 148, 250, 203, 
-    147, 62, 195, 229, 219, 109, 177, 119, 
-    120, 43, 165, 99, 253, 210, 180, 32, 
-    227, 180, 174, 64, 156, 139, 251, 53, 
-    205, 132, 210, 208, 3, 199, 115, 64, 
-    59, 27, 249, 164, 224, 191, 124, 241, 
-    142, 10, 19, 120, 227, 46, 174, 231, 
-    48, 65, 41, 56, 51, 38, 185, 95, 
-    250, 182, 100, 40, 196, 124, 173, 119, 
-    162, 148, 170, 34, 51, 68, 175, 60, 
-    242, 201, 225, 34, 146, 157, 159, 0, 
-    144, 148, 82, 72, 149, 53, 201, 10, 
-    248, 206, 154, 126, 33, 153, 56, 48, 
-    5, 90, 194, 22, 251, 173, 211, 202, 
-    203, 253, 112, 147, 188, 200, 142, 206, 
-    206, 175, 233, 76, 93, 104, 125, 41, 
-    64, 145, 202, 53, 130, 251, 23, 90, 
-    28, 199, 13, 128, 185, 154, 53, 194, 
-    195, 55, 80, 56, 151, 216, 195, 138, 
-    7, 170, 143, 236, 74, 141, 229, 174, 
-    32, 165, 131, 68, 174, 104, 35, 143, 
-    183, 41, 80, 191, 120, 79, 166, 240, 
-    123, 55, 60, 2, 128, 56, 4, 199, 
-    122, 85, 90, 76, 246, 29, 13, 6, 
-    126, 229, 14, 203, 244, 73, 121, 42, 
-    169, 35, 44, 202, 18, 69, 153, 120, 
-    141, 77, 124, 191, 215, 18, 115, 187, 
-    108, 246, 135, 151, 225, 192, 50, 89, 
-    128, 45, 39, 253, 149, 234, 203, 84, 
-    51, 174, 15, 237, 17, 57, 76, 81, 
-    39, 107, 40, 36, 22, 52, 92, 39};
diff --git a/lib/ssl/c_src/esock_osio.c b/lib/ssl/c_src/esock_osio.c
deleted file mode 100644
index 41c5271c16..0000000000
--- a/lib/ssl/c_src/esock_osio.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose:  Std filedescriptors, break handler
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef __WIN32__
-#include "esock_winsock.h"
-#include <process.h>
-#include <io.h>
-#include <fcntl.h>
-#else
-#include <unistd.h>
-#include <signal.h>  
-#endif 
-
-#include "esock.h"
-#include "debuglog.h"
-#include "esock_utils.h"
-#include "esock_osio.h"
-
-#ifdef __WIN32__
-#define write	_write
-#define read	_read
-#define LOCALHOSTADDR	"127.0.0.1"
-#define LOCBUFSIZE      1024
-#endif
-
-#define PACKET_SIZE	4
-#define EBUFSIZE	256
-
-FD local_read_fd = 0;
-
-static int inc_rbuf(int size);
-static void free_rbuf(void);
-static int read_fill(unsigned char *buf, int len);
-#ifdef __WIN32__
-static int create_local_thread(void);
-static DWORD WINAPI local_thread(LPVOID lpvParam);
-static BOOL WINAPI signal_handler(DWORD ctrl);
-#endif
-
-static unsigned char *rbuf = NULL;
-static int rbuf_malloced = 0;
-#ifdef __WIN32__
-static unsigned long one = 1, zero = 0;
-static int local_portno;
-static char *local_buf;
-#endif
-
-int set_break_handler(void) 
-{
-#ifndef __WIN32__
-    struct sigaction act;
-
-    /* Ignore SIGPIPE signal */
-    sigemptyset(&act.sa_mask);
-    act.sa_flags = 0;
-    act.sa_handler = SIG_IGN;
-    sigaction(SIGPIPE, &act, NULL);
-    return 0;
-#else 
-    SetConsoleCtrlHandler(signal_handler, TRUE);
-    return 0;
-#endif
-}
-
-
-#ifdef __WIN32__
-
-int set_binary_mode(void)
-{
-    _setmode(0, _O_BINARY);
-    _setmode(1, _O_BINARY);
-    return 0;
-}
-
-int esock_osio_init(void)
-{
-    return create_local_thread();
-}
-
-void esock_osio_finish(void)
-{
-    sock_close(local_read_fd);
-}
-
-#endif
-
-int read_ctrl(unsigned char **ebufp)
-{
-    int tbh, cc;
-    unsigned char *mbuf;
-
-    if (inc_rbuf(EBUFSIZE) < 0) {
-	fprintf(stderr, "read_ctrl: cannot alloc rbuf\n");
-	return -1;
-    }
-    cc = read_fill(rbuf, PACKET_SIZE);
-    if (cc < 0) {
-	free_rbuf();
-	return -1;
-    }
-    if (cc == 0) {
-	free_rbuf();
-	return -1;		/* XXX 0 ?? */
-    }
-    tbh = GET_INT32(rbuf);
-
-    if (tbh > rbuf_malloced - 4) {
-	if (inc_rbuf(tbh + 4) < 0)
-	    return -1;
-    }
-    
-    mbuf = rbuf + PACKET_SIZE;
-    cc = read_fill(mbuf, tbh);
-    DEBUGF(("-----------------------------------\n"));
-    DEBUGF(("read_ctrl: cc = %d\n", cc));
-    if(cc > 0) {
-	DEBUGMSGF(("message (hex) : [%3.*a]\n", cc, mbuf));
-	DEBUGMSGF(("message (char): [%3.*b]\n", cc, mbuf));
-    }
-    *ebufp = mbuf;
-    return cc;
-}
-
-int write_ctrl(unsigned char *buf, int len)
-{
-    unsigned char lb[4];
-
-    PUT_INT32(len, lb);
-    DEBUGF(("write_ctrl: len = %d\n", len));
-    DEBUGMSGF(("message (hex) : [%3.*a] [%3.*a]\n", PACKET_SIZE, lb, 
-	       len, buf));
-    DEBUGMSGF(("message (char): [%3.*b] [%3.*b]\n", PACKET_SIZE, lb, 
-	       len, buf));
-
-    if (write(1, lb, PACKET_SIZE) != PACKET_SIZE) { /* XXX */
-	fprintf(stderr, "write_ctrl: Bad write \n");
-	return -1;
-    }
-    if (write(1, buf, len) != len) { /* XXX */
-	fprintf(stderr, "write_ctrl: Bad write \n");
-	return -1;
-    }
-    return len;
-}
-
-
-/* 
- * Local functions
- *
- */
-
-static int inc_rbuf(int size)
-{
-    unsigned char *nbuf;
-
-    if (rbuf_malloced >= size)
-	return 0;
-    if (rbuf != NULL)		
-	nbuf = esock_realloc(rbuf, size);
-    else
-	nbuf = esock_malloc(size);
-    if(nbuf != NULL) {
-	rbuf = nbuf;
-	rbuf_malloced = size;
-	return 0;
-    }
-    return -1;
-}
-
-static void free_rbuf(void) 
-{
-    if (rbuf != NULL) {
-	esock_free(rbuf);
-	rbuf = NULL;
-	rbuf_malloced = 0;
-    }
-}
-
-/* Fill buffer, return buffer length, 0 for EOF, < 0 for error. */
-
-static int read_fill(unsigned char *buf, int len)
-{
-    int i, got = 0;
-  
-    do {
-	if ((i = sock_read(local_read_fd, buf+got, len-got)) <= 0)
-	    return i;
-	got += i;
-    } while (got < len);
-    return len;
-}
-
-
-#ifdef __WIN32__
-
-/* 
- * This routine creates a local thread, which reads from standard input
- * and writes to a socket. 
- */
-
-static int create_local_thread(void)
-{
-    struct sockaddr_in iserv_addr;
-    SOCKET tmpsock;
-    int length;
-    unsigned threadaddr;
-
-    local_buf = esock_malloc(LOCBUFSIZE);
-    if ((tmpsock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
- 	fprintf(stderr, "create_local_thread could not create socket.\n");
-	return -1;
-    }
-    memset(&iserv_addr, 0, sizeof(iserv_addr));
-    iserv_addr.sin_family = AF_INET;
-    iserv_addr.sin_addr.s_addr = inet_addr(LOCALHOSTADDR);
-    iserv_addr.sin_port = htons(0); /* Have any port */
-
-    if (bind(tmpsock, (struct sockaddr *) &iserv_addr, 
-	     sizeof(iserv_addr)) < 0) {
-	fprintf(stderr, "create_local_thread could not bind.\n");
-	closesocket(tmpsock);
-	return -1;
-    }
-    listen(tmpsock, 1);
-    length = sizeof(iserv_addr);
-    if (getsockname(tmpsock, (struct sockaddr *) &iserv_addr, &length) < 0) {
-	fprintf(stderr, "create_local_thread could not getsockname.\n");
-	closesocket(tmpsock);
-	return -1;
-    }
-    local_portno = ntohs(iserv_addr.sin_port);
-
-    if (_beginthreadex(NULL, 0, local_thread, NULL, 0, &threadaddr) == 0) {
-	fprintf(stderr, "create_local_thread could not _beginthreadex().\n");
-	closesocket(tmpsock);
-	return -1;
-    }
-    local_read_fd = accept(tmpsock, (struct sockaddr *) NULL, (int *) NULL);
-    if (local_read_fd == INVALID_FD) {
-	fprintf(stderr, "create_local_thread could not accept.\n");
-	closesocket(tmpsock);
-	return -1;
-    }
-    closesocket(tmpsock);
-    return 0;
-}
-
-static DWORD WINAPI local_thread(LPVOID lpvParam)
-{
-    SOCKET sock;
-    struct hostent *host;
-    char hostname[64];
-    struct sockaddr_in iserv_addr;
-    unsigned long addr;
-    int len;
-    HANDLE thread;
-
-    sock = socket(AF_INET, SOCK_STREAM, 0);
-    memset(&iserv_addr, 0, sizeof(struct sockaddr_in));
-    iserv_addr.sin_family = AF_INET;
-    iserv_addr.sin_addr.s_addr = inet_addr(LOCALHOSTADDR);
-    iserv_addr.sin_port = htons(local_portno);
-    if(connect(sock, (struct sockaddr*)&iserv_addr, sizeof iserv_addr) == 
-       SOCKET_ERROR) {
-	fprintf(stderr, "local_thread thread could not connect\n");
-	closesocket(sock);
-	return 0;
-    }
-    setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
-
-    /* read from 0 and write to sock */
-    while (1) {
-	if ((len = read(0, local_buf, LOCBUFSIZE)) <= 0) {
-	    closesocket(sock);
-	    close(0);
-	    return 0;
-	}
-	if (send(sock, local_buf, len, 0) != len ) {
-	    closesocket(sock);
-	    close(0);
-	    return 0;
-	}
-    }
-    return 0;
-}
-
-/* Signal handler */
-
-static BOOL WINAPI signal_handler(DWORD ctrl)
-{
-    switch (ctrl) {
-    case CTRL_C_EVENT:
-    case CTRL_BREAK_EVENT:
-	break;
-    case CTRL_LOGOFF_EVENT:
-	if (!getenv("ERLSRV_SERVICE_NAME"))
-	    return FALSE;
-	break;
-    default:
-	exit(1);
-    }
-    return TRUE;
-}
-
-#endif
diff --git a/lib/ssl/c_src/esock_osio.h b/lib/ssl/c_src/esock_osio.h
deleted file mode 100644
index 8742c3b05b..0000000000
--- a/lib/ssl/c_src/esock_osio.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  %CopyrightBegin%
- *  
- *  Copyright Ericsson AB 1999-2009. All Rights Reserved.
- *  
- *  The contents of this file are subject to the Erlang Public License,
- *  Version 1.1, (the "License"); you may not use this file except in
- *  compliance with the License. You should have received a copy of the
- *  Erlang Public License along with this software. If not, it can be
- *  retrieved online at http://www.erlang.org/.
- *  
- *  Software distributed under the License is distributed on an "AS IS"
- *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- *  the License for the specific language governing rights and limitations
- *  under the License.
- *  
- *  %CopyrightEnd%
- */
-
-#ifndef ESOCK_OSIO_H
-#define ESOCK_OSIO_H
-
-extern FD local_read_fd;
-
-#ifdef __WIN32__
-int set_binary_mode(void);
-int esock_osio_init(void);
-void esock_osio_finish(void);
-#endif
-int set_break_handler(void);
-int read_ctrl(unsigned char **ebufp);
-int write_ctrl(unsigned char *buf, int len);
-
-#endif
diff --git a/lib/ssl/c_src/esock_poll.c b/lib/ssl/c_src/esock_poll.c
deleted file mode 100644
index e982eba881..0000000000
--- a/lib/ssl/c_src/esock_poll.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*<copyright>
- * <year>2005-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-
-/*
- * Purpose: Hide poll() and select() behind an API so that we
- * can use either one.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef __WIN32__
-#include "esock_winsock.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <errno.h>
-
-#ifdef __WIN32__
-#include <process.h>
-#else
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/time.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#endif
-
-#include "esock.h"
-#include "esock_ssl.h"
-#include "esock_utils.h"
-#include "esock_poll.h"
-#include "debuglog.h"
-
-#if !defined(USE_SELECT)
-
-/* At least on FreeBSD, we need POLLRDNORM for normal files, not POLLIN. */
-/* Whether this is a bug in FreeBSD, I don't know. */
-#ifdef POLLRDNORM
-#define POLL_INPUT	(POLLIN | POLLRDNORM)
-#else
-#define POLL_INPUT	POLLIN
-#endif
-
-static void poll_fd_set(EsockPoll *ep, FD fd, short events)
-{
-    int i, j;
-    int prev_num_fds = ep->num_fds;
-
-    if (ep->num_fds <= fd) {
-	ep->num_fds = fd + 64;
-	ep->fd_to_poll = (int *) esock_realloc(ep->fd_to_poll,
-					       ep->num_fds*sizeof(int));
-	for (j = prev_num_fds; j < ep->num_fds; j++)
-	    ep->fd_to_poll[j] = -1;
-    }
-    i = ep->fd_to_poll[fd];
-    if (i > 0 && i < ep->active && ep->fds[i].fd == fd) {
-	/* Already present in poll array */
-	ep->fds[i].events |= events;
-    } else {
-	/* Append to poll array */
-	if (ep->active >= ep->allocated) {
-	    ep->allocated *= 2;
-	    ep->fds = (struct pollfd *)
-		esock_realloc(ep->fds, ep->allocated*sizeof(struct pollfd));
-	}
-	ep->fd_to_poll[fd] = ep->active;
-	ep->fds[ep->active].fd = fd;
-	ep->fds[ep->active].events = events;
-	ep->fds[ep->active].revents = 0;
-	ep->active++;
-    }
-}
-
-static int poll_is_set(EsockPoll *ep, FD fd, short mask)
-{
-    if (fd >= ep->num_fds) {
-	return 0;
-    } else {
-	int i = ep->fd_to_poll[fd];
-	return 0 <= i && i < ep->active && ep->fds[i].fd == fd &&
-	    (ep->fds[i].revents & mask) != 0;
-    }
-}
-
-#endif
-
-void esock_poll_init(EsockPoll *ep)
-{
-#ifdef USE_SELECT
-    /* Nothing to do here */
-#else
-    ep->allocated = 2;
-    ep->fds = (struct pollfd *) esock_malloc(ep->allocated*sizeof(struct pollfd));
-    ep->num_fds = 1;
-    ep->fd_to_poll = esock_malloc(ep->num_fds*sizeof(int));
-#endif    
-}
-
-void esock_poll_zero(EsockPoll *ep)
-{
-#ifdef USE_SELECT
-    FD_ZERO(&ep->readmask);
-    FD_ZERO(&ep->writemask);
-    FD_ZERO(&ep->exceptmask);
-#else
-    int i;
-
-    for (i = 0; i < ep->num_fds; i++)
-	ep->fd_to_poll[i] = -1;
-    ep->active = 0;
-#endif    
-}
-
-void esock_poll_fd_set_read(EsockPoll *ep, FD fd)
-{
-#ifdef USE_SELECT
-    FD_SET(fd, &ep->readmask);
-#else
-    poll_fd_set(ep, fd, POLL_INPUT);
-#endif    
-}
-
-void esock_poll_fd_set_write(EsockPoll *ep, FD fd)
-{
-#ifdef USE_SELECT
-    FD_SET(fd, &ep->writemask);
-#else
-    poll_fd_set(ep, fd, POLLOUT);
-#endif    
-}
-
-int esock_poll_fd_isset_read(EsockPoll *ep, FD fd)
-{
-#ifdef USE_SELECT
-    return FD_ISSET(fd, &ep->readmask);
-#else
-    return poll_is_set(ep, fd, (POLL_INPUT|POLLHUP|POLLERR|POLLNVAL));
-#endif    
-}
-
-int esock_poll_fd_isset_write(EsockPoll *ep, FD fd)
-{
-#ifdef USE_SELECT
-    return FD_ISSET(fd, &ep->writemask);
-#else
-    return poll_is_set(ep, fd, (POLLOUT|POLLHUP|POLLERR|POLLNVAL));
-#endif    
-}
-
-#ifdef __WIN32__
-void esock_poll_fd_set_exception(EsockPoll *ep, FD fd)
-{
-    FD_SET(fd, &ep->exceptmask);
-}
-
-int esock_poll_fd_isset_exception(EsockPoll *ep, FD fd)
-{
-    return FD_ISSET(fd, &ep->exceptmask);
-}
-#endif
-
-int esock_poll(EsockPoll *ep, int seconds)
-{
-    int sret;
-
-#ifdef USE_SELECT
-    struct timeval tv;
-
-    tv.tv_sec = seconds;
-    tv.tv_usec = 0;
-    sret = select(FD_SETSIZE, &ep->readmask, &ep->writemask, &ep->exceptmask, &tv);
-    if (sret == 0) {
-	FD_ZERO(&ep->readmask);
-	FD_ZERO(&ep->writemask);
-	FD_ZERO(&ep->exceptmask);
-    }
-#else
-    sret = poll(ep->fds, ep->active, 1000*seconds);
-#endif
-    return sret;
-}
-
-void esock_poll_clear_event(EsockPoll* ep, FD fd)
-{
-#ifdef USE_SELECT
-    FD_CLR(fd, &ep->readmask);
-    FD_CLR(fd, &ep->writemask);
-    FD_CLR(fd, &ep->exceptmask);
-#else
-    int i = ep->fd_to_poll[fd];
-    if (i > 0 && ep->fds[i].fd == fd)
-	ep->fds[i].revents = 0;
-#endif
-}
diff --git a/lib/ssl/c_src/esock_poll.h b/lib/ssl/c_src/esock_poll.h
deleted file mode 100644
index 639976dfa9..0000000000
--- a/lib/ssl/c_src/esock_poll.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*<copyright>
- * <year>2005-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-#ifndef ESOCK_POLL_SELECT_H
-#define ESOCK_POLL_SELECT_H
-
-#if !defined(USE_SELECT)
-#include <poll.h>
-#endif
-
-typedef struct esock_poll {
-#ifdef USE_SELECT
-    fd_set readmask;
-    fd_set writemask;
-    fd_set exceptmask;
-#else
-    int* fd_to_poll;		/* Map from fd to index into poll
-				 * descriptor array.
-				 */
-    int num_fds;		/* Number of entries in fd_to_poll. */
-    struct pollfd* fds;		/* Array of poll descriptors. */
-    int allocated;		/* Allocated number of fds. */
-    int active;			/* Active number of fds */
-#endif
-} EsockPoll;
-
-void esock_poll_init(EsockPoll *ep);
-void esock_poll_zero(EsockPoll *ep);
-
-void esock_poll_fd_set_read(EsockPoll *ep, FD fd);
-void esock_poll_fd_set_write(EsockPoll *ep, FD fd);
-
-void esock_poll_clear_event(EsockPoll *ep, FD fd);
-
-int esock_poll_fd_isset_read(EsockPoll *ep, FD fd);
-int esock_poll_fd_isset_write(EsockPoll *ep, FD fd);
-
-#ifdef __WIN32__
-void esock_poll_fd_set_exception(EsockPoll *ep, FD fd);
-int esock_poll_fd_isset_exception(EsockPoll *ep, FD fd);
-#endif
-
-int esock_poll(EsockPoll *ep, int seconds);
-#endif
diff --git a/lib/ssl/c_src/esock_posix_str.c b/lib/ssl/c_src/esock_posix_str.c
deleted file mode 100644
index 31062baaaf..0000000000
--- a/lib/ssl/c_src/esock_posix_str.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * %ExternalCopyright%
- */
-
-/* 
- * Original: tclPosixStr.c --
- *
- *	This file contains procedures that generate strings
- *	corresponding to various POSIX-related codes, such
- *	as errno and signals.
- *
- * Copyright (c) 1991-1994 The Regents of the University of California.
- * Copyright (c) 1994-1996 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclPosixStr.c 1.32 96/10/10 10:09:42
- */
-
-/* Copy of erl_posix_str.c */
-
-#ifdef __WIN32__
-#include "esock_winsock.h"
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include "esock_posix_str.h"
-
-/*
- *----------------------------------------------------------------------
- *
- * esock_posix_str --
- *
- *	Return a textual identifier for the given errno value.
- *
- * Results:
- *	This procedure returns a machine-readable textual identifier
- *	that corresponds to the current errno value (e.g. "eperm").
- *	The identifier is the same as the #define name in errno.h,
- *	except that it is in lowercase.
- *
- *----------------------------------------------------------------------
- */
-
-static char errstrbuf[32];
-
-char *esock_posix_str(int error)
-{
-    switch (error) {
-#ifdef E2BIG
-    case E2BIG: return "e2big";
-#endif
-#ifdef EACCES
-    case EACCES: return "eacces";
-#endif
-#ifdef EADDRINUSE
-    case EADDRINUSE: return "eaddrinuse";
-#endif
-#ifdef EADDRNOTAVAIL
-    case EADDRNOTAVAIL: return "eaddrnotavail";
-#endif
-#ifdef EADV
-    case EADV: return "eadv";
-#endif
-#ifdef EAFNOSUPPORT
-    case EAFNOSUPPORT: return "eafnosupport";
-#endif
-#ifdef EAGAIN
-    case EAGAIN: return "eagain";
-#endif
-#ifdef EALIGN
-    case EALIGN: return "ealign";
-#endif
-#if defined(EALREADY) && (!defined(EBUSY) || (EALREADY != EBUSY ))
-    case EALREADY: return "ealready";
-#endif
-#ifdef EBADE
-    case EBADE: return "ebade";
-#endif
-#ifdef EBADF
-    case EBADF: return "ebadf";
-#endif
-#ifdef EBADFD
-    case EBADFD: return "ebadfd";
-#endif
-#ifdef EBADMSG
-    case EBADMSG: return "ebadmsg";
-#endif
-#ifdef EBADR
-    case EBADR: return "ebadr";
-#endif
-#ifdef EBADRPC
-    case EBADRPC: return "ebadrpc";
-#endif
-#ifdef EBADRQC
-    case EBADRQC: return "ebadrqc";
-#endif
-#ifdef EBADSLT
-    case EBADSLT: return "ebadslt";
-#endif
-#ifdef EBFONT
-    case EBFONT: return "ebfont";
-#endif
-#ifdef EBUSY
-    case EBUSY: return "ebusy";
-#endif
-#ifdef ECHILD
-    case ECHILD: return "echild";
-#endif
-#ifdef ECHRNG
-    case ECHRNG: return "echrng";
-#endif
-#ifdef ECOMM
-    case ECOMM: return "ecomm";
-#endif
-#ifdef ECONNABORTED
-    case ECONNABORTED: return "econnaborted";
-#endif
-#ifdef ECONNREFUSED
-    case ECONNREFUSED: return "econnrefused";
-#endif
-#ifdef ECONNRESET
-    case ECONNRESET: return "econnreset";
-#endif
-#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
-    case EDEADLK: return "edeadlk";
-#endif
-#if defined(EDEADLOCK) && (!defined(EDEADLK) || (EDEADLOCK != EDEADLK))
-    case EDEADLOCK: return "edeadlock";
-#endif
-#ifdef EDESTADDRREQ
-    case EDESTADDRREQ: return "edestaddrreq";
-#endif
-#ifdef EDIRTY
-    case EDIRTY: return "edirty";
-#endif
-#ifdef EDOM
-    case EDOM: return "edom";
-#endif
-#ifdef EDOTDOT
-    case EDOTDOT: return "edotdot";
-#endif
-#ifdef EDQUOT
-    case EDQUOT: return "edquot";
-#endif
-#ifdef EDUPPKG
-    case EDUPPKG: return "eduppkg";
-#endif
-#ifdef EEXIST
-    case EEXIST: return "eexist";
-#endif
-#ifdef EFAULT
-    case EFAULT: return "efault";
-#endif
-#ifdef EFBIG
-    case EFBIG: return "efbig";
-#endif
-#ifdef EHOSTDOWN
-    case EHOSTDOWN: return "ehostdown";
-#endif
-#ifdef EHOSTUNREACH
-    case EHOSTUNREACH: return "ehostunreach";
-#endif
-#if defined(EIDRM) && (!defined(EINPROGRESS) || (EIDRM != EINPROGRESS))
-    case EIDRM: return "eidrm";
-#endif
-#ifdef EINIT
-    case EINIT: return "einit";
-#endif
-#ifdef EINPROGRESS
-    case EINPROGRESS: return "einprogress";
-#endif
-#ifdef EINTR
-    case EINTR: return "eintr";
-#endif
-#ifdef EINVAL
-    case EINVAL: return "einval";
-#endif
-#ifdef EIO
-    case EIO: return "eio";
-#endif
-#ifdef EISCONN
-    case EISCONN: return "eisconn";
-#endif
-#ifdef EISDIR
-    case EISDIR: return "eisdir";
-#endif
-#ifdef EISNAME
-    case EISNAM: return "eisnam";
-#endif
-#ifdef ELBIN
-    case ELBIN: return "elbin";
-#endif
-#ifdef EL2HLT
-    case EL2HLT: return "el2hlt";
-#endif
-#ifdef EL2NSYNC
-    case EL2NSYNC: return "el2nsync";
-#endif
-#ifdef EL3HLT
-    case EL3HLT: return "el3hlt";
-#endif
-#ifdef EL3RST
-    case EL3RST: return "el3rst";
-#endif
-#ifdef ELIBACC
-    case ELIBACC: return "elibacc";
-#endif
-#ifdef ELIBBAD
-    case ELIBBAD: return "elibbad";
-#endif
-#ifdef ELIBEXEC
-    case ELIBEXEC: return "elibexec";
-#endif
-#ifdef ELIBMAX
-    case ELIBMAX: return "elibmax";
-#endif
-#ifdef ELIBSCN
-    case ELIBSCN: return "elibscn";
-#endif
-#ifdef ELNRNG
-    case ELNRNG: return "elnrng";
-#endif
-#if defined(ELOOP) && (!defined(ENOENT) || (ELOOP != ENOENT))
-    case ELOOP: return "eloop";
-#endif
-#ifdef EMFILE
-    case EMFILE: return "emfile";
-#endif
-#ifdef EMLINK
-    case EMLINK: return "emlink";
-#endif
-#ifdef EMSGSIZE
-    case EMSGSIZE: return "emsgsize";
-#endif
-#ifdef EMULTIHOP
-    case EMULTIHOP: return "emultihop";
-#endif
-#ifdef ENAMETOOLONG
-    case ENAMETOOLONG: return "enametoolong";
-#endif
-#ifdef ENAVAIL
-    case ENAVAIL: return "enavail";
-#endif
-#ifdef ENET
-    case ENET: return "enet";
-#endif
-#ifdef ENETDOWN
-    case ENETDOWN: return "enetdown";
-#endif
-#ifdef ENETRESET
-    case ENETRESET: return "enetreset";
-#endif
-#ifdef ENETUNREACH
-    case ENETUNREACH: return "enetunreach";
-#endif
-#ifdef ENFILE
-    case ENFILE: return "enfile";
-#endif
-#ifdef ENOANO
-    case ENOANO: return "enoano";
-#endif
-#if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
-    case ENOBUFS: return "enobufs";
-#endif
-#ifdef ENOCSI
-    case ENOCSI: return "enocsi";
-#endif
-#if defined(ENODATA) && (!defined(ECONNREFUSED) || (ENODATA != ECONNREFUSED))
-    case ENODATA: return "enodata";
-#endif
-#ifdef ENODEV
-    case ENODEV: return "enodev";
-#endif
-#ifdef ENOENT
-    case ENOENT: return "enoent";
-#endif
-#ifdef ENOEXEC
-    case ENOEXEC: return "enoexec";
-#endif
-#ifdef ENOLCK
-    case ENOLCK: return "enolck";
-#endif
-#ifdef ENOLINK
-    case ENOLINK: return "enolink";
-#endif
-#ifdef ENOMEM
-    case ENOMEM: return "enomem";
-#endif
-#ifdef ENOMSG
-    case ENOMSG: return "enomsg";
-#endif
-#ifdef ENONET
-    case ENONET: return "enonet";
-#endif
-#ifdef ENOPKG
-    case ENOPKG: return "enopkg";
-#endif
-#ifdef ENOPROTOOPT
-    case ENOPROTOOPT: return "enoprotoopt";
-#endif
-#ifdef ENOSPC
-    case ENOSPC: return "enospc";
-#endif
-#if defined(ENOSR) && (!defined(ENAMETOOLONG) || (ENAMETOOLONG != ENOSR))
-    case ENOSR: return "enosr";
-#endif
-#if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR))
-    case ENOSTR: return "enostr";
-#endif
-#ifdef ENOSYM
-    case ENOSYM: return "enosym";
-#endif
-#ifdef ENOSYS
-    case ENOSYS: return "enosys";
-#endif
-#ifdef ENOTBLK
-    case ENOTBLK: return "enotblk";
-#endif
-#ifdef ENOTCONN
-    case ENOTCONN: return "enotconn";
-#endif
-#ifdef ENOTDIR
-    case ENOTDIR: return "enotdir";
-#endif
-#if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST))
-    case ENOTEMPTY: return "enotempty";
-#endif
-#ifdef ENOTNAM
-    case ENOTNAM: return "enotnam";
-#endif
-#ifdef ENOTSOCK
-    case ENOTSOCK: return "enotsock";
-#endif
-#ifdef ENOTSUP
-    case ENOTSUP: return "enotsup";
-#endif
-#ifdef ENOTTY
-    case ENOTTY: return "enotty";
-#endif
-#ifdef ENOTUNIQ
-    case ENOTUNIQ: return "enotuniq";
-#endif
-#ifdef ENXIO
-    case ENXIO: return "enxio";
-#endif
-#if defined(EOPNOTSUPP) && (!defined(ENOTSUP) || EOPNOTSUPP != ENOTSUP)
-    case EOPNOTSUPP: return "eopnotsupp";
-#endif
-#ifdef EPERM
-    case EPERM: return "eperm";
-#endif
-#if defined(EPFNOSUPPORT) && (!defined(ENOLCK) || (ENOLCK != EPFNOSUPPORT))
-    case EPFNOSUPPORT: return "epfnosupport";
-#endif
-#ifdef EPIPE
-    case EPIPE: return "epipe";
-#endif
-#ifdef EPROCLIM
-    case EPROCLIM: return "eproclim";
-#endif
-#ifdef EPROCUNAVAIL
-    case EPROCUNAVAIL: return "eprocunavail";
-#endif
-#ifdef EPROGMISMATCH
-    case EPROGMISMATCH: return "eprogmismatch";
-#endif
-#ifdef EPROGUNAVAIL
-    case EPROGUNAVAIL: return "eprogunavail";
-#endif
-#ifdef EPROTO
-    case EPROTO: return "eproto";
-#endif
-#ifdef EPROTONOSUPPORT
-    case EPROTONOSUPPORT: return "eprotonosupport";
-#endif
-#ifdef EPROTOTYPE
-    case EPROTOTYPE: return "eprototype";
-#endif
-#ifdef ERANGE
-    case ERANGE: return "erange";
-#endif
-#if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
-    case EREFUSED: return "erefused";
-#endif
-#ifdef EREMCHG
-    case EREMCHG: return "eremchg";
-#endif
-#ifdef EREMDEV
-    case EREMDEV: return "eremdev";
-#endif
-#ifdef EREMOTE
-    case EREMOTE: return "eremote";
-#endif
-#ifdef EREMOTEIO
-    case EREMOTEIO: return "eremoteio";
-#endif
-#ifdef EREMOTERELEASE
-    case EREMOTERELEASE: return "eremoterelease";
-#endif
-#ifdef EROFS
-    case EROFS: return "erofs";
-#endif
-#ifdef ERPCMISMATCH
-    case ERPCMISMATCH: return "erpcmismatch";
-#endif
-#ifdef ERREMOTE
-    case ERREMOTE: return "erremote";
-#endif
-#ifdef ESHUTDOWN
-    case ESHUTDOWN: return "eshutdown";
-#endif
-#ifdef ESOCKTNOSUPPORT
-    case ESOCKTNOSUPPORT: return "esocktnosupport";
-#endif
-#ifdef ESPIPE
-    case ESPIPE: return "espipe";
-#endif
-#ifdef ESRCH
-    case ESRCH: return "esrch";
-#endif
-#ifdef ESRMNT
-    case ESRMNT: return "esrmnt";
-#endif
-#ifdef ESTALE
-    case ESTALE: return "estale";
-#endif
-#ifdef ESUCCESS
-    case ESUCCESS: return "esuccess";
-#endif
-#if defined(ETIME) && (!defined(ELOOP) || (ETIME != ELOOP))
-    case ETIME: return "etime";
-#endif
-#if defined(ETIMEDOUT) && (!defined(ENOSTR) || (ETIMEDOUT != ENOSTR))
-    case ETIMEDOUT: return "etimedout";
-#endif
-#ifdef ETOOMANYREFS
-    case ETOOMANYREFS: return "etoomanyrefs";
-#endif
-#ifdef ETXTBSY
-    case ETXTBSY: return "etxtbsy";
-#endif
-#ifdef EUCLEAN
-    case EUCLEAN: return "euclean";
-#endif
-#ifdef EUNATCH
-    case EUNATCH: return "eunatch";
-#endif
-#ifdef EUSERS
-    case EUSERS: return "eusers";
-#endif
-#ifdef EVERSION
-    case EVERSION: return "eversion";
-#endif
-#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
-    case EWOULDBLOCK: return "ewouldblock";
-#endif
-#ifdef EXDEV
-    case EXDEV: return "exdev";
-#endif
-#ifdef EXFULL
-    case EXFULL: return "exfull";
-#endif
-#ifdef WSAEINTR
-    case WSAEINTR: return "eintr";
-#endif
-#ifdef WSAEBADF
-    case WSAEBADF: return "ebadf";
-#endif
-#ifdef WSAEACCES
-    case WSAEACCES: return "eacces";
-#endif
-#ifdef WSAEFAULT
-    case WSAEFAULT: return "efault";
-#endif
-#ifdef WSAEINVAL
-    case WSAEINVAL: return "einval";
-#endif
-#ifdef WSAEMFILE
-    case WSAEMFILE: return "emfile";
-#endif
-#ifdef WSAEWOULDBLOCK  
-    case WSAEWOULDBLOCK: return "ewouldblock";
-#endif
-#ifdef WSAEINPROGRESS  
-    case WSAEINPROGRESS: return "einprogress";
-#endif
-#ifdef WSAEALREADY     
-    case WSAEALREADY: return "ealready";
-#endif
-#ifdef WSAENOTSOCK     
-    case WSAENOTSOCK: return "enotsock";
-#endif
-#ifdef WSAEDESTADDRREQ 
-    case WSAEDESTADDRREQ: return "edestaddrreq";
-#endif
-#ifdef WSAEMSGSIZE     
-    case WSAEMSGSIZE: return "emsgsize";
-#endif
-#ifdef WSAEPROTOTYPE   
-    case WSAEPROTOTYPE: return "eprototype";
-#endif
-#ifdef WSAENOPROTOOPT  
-    case WSAENOPROTOOPT: return "enoprotoopt";
-#endif
-#ifdef WSAEPROTONOSUPPORT
-    case WSAEPROTONOSUPPORT: return "eprotonosupport";
-#endif
-#ifdef WSAESOCKTNOSUPPORT
-    case WSAESOCKTNOSUPPORT: return "esocktnosupport";
-#endif
-#ifdef WSAEOPNOTSUPP   
-    case WSAEOPNOTSUPP: return "eopnotsupp";
-#endif
-#ifdef WSAEPFNOSUPPORT 
-    case WSAEPFNOSUPPORT: return "epfnosupport";
-#endif
-#ifdef WSAEAFNOSUPPORT 
-    case WSAEAFNOSUPPORT: return "eafnosupport";
-#endif
-#ifdef WSAEADDRINUSE   
-    case WSAEADDRINUSE: return "eaddrinuse";
-#endif
-#ifdef WSAEADDRNOTAVAIL
-    case WSAEADDRNOTAVAIL: return "eaddrnotavail";
-#endif
-#ifdef WSAENETDOWN    
-    case WSAENETDOWN: return "enetdown";
-#endif
-#ifdef WSAENETUNREACH 
-    case WSAENETUNREACH: return "enetunreach";
-#endif
-#ifdef WSAENETRESET   
-    case WSAENETRESET: return "enetreset";
-#endif
-#ifdef WSAECONNABORTED
-    case WSAECONNABORTED: return "econnaborted";
-#endif
-#ifdef WSAECONNRESET  
-    case WSAECONNRESET: return "econnreset";
-#endif
-#ifdef WSAENOBUFS     
-    case WSAENOBUFS: return "enobufs";
-#endif
-#ifdef WSAEISCONN     
-    case WSAEISCONN: return "eisconn";
-#endif
-#ifdef WSAENOTCONN    
-    case WSAENOTCONN: return "enotconn";
-#endif
-#ifdef WSAESHUTDOWN   
-    case WSAESHUTDOWN: return "eshutdown";
-#endif
-#ifdef WSAETOOMANYREFS
-    case WSAETOOMANYREFS: return "etoomanyrefs";
-#endif
-#ifdef WSAETIMEDOUT   
-    case WSAETIMEDOUT: return "etimedout";
-#endif
-#ifdef WSAECONNREFUSED
-    case WSAECONNREFUSED: return "econnrefused";
-#endif
-#ifdef WSAELOOP
-    case WSAELOOP: return "eloop";
-#endif
-#ifdef WSAENAMETOOLONG
-    case WSAENAMETOOLONG: return "enametoolong";
-#endif
-#ifdef WSAEHOSTDOWN
-    case WSAEHOSTDOWN: return "ehostdown";
-#endif
-#ifdef WSAEHOSTUNREACH
-    case WSAEHOSTUNREACH: return "ehostunreach";
-#endif
-#ifdef WSAENOTEMPTY
-    case WSAENOTEMPTY: return "enotempty";
-#endif
-#ifdef WSAEPROCLIM
-    case WSAEPROCLIM: return "eproclim";
-#endif
-#ifdef WSAEUSERS
-    case WSAEUSERS: return "eusers";
-#endif
-#ifdef WSAEDQUOT
-    case WSAEDQUOT: return "edquot";
-#endif
-#ifdef WSAESTALE
-    case WSAESTALE: return "estale";
-#endif
-#ifdef WSAEREMOTE
-    case WSAEREMOTE: return "eremote";
-#endif
-#ifdef WSASYSNOTREADY
-    case WSASYSNOTREADY: return "sysnotready";
-#endif
-#ifdef WSAVERNOTSUPPORTED
-    case WSAVERNOTSUPPORTED: return "vernotsupported";
-#endif
-#ifdef WSANOTINITIALISED
-    case WSANOTINITIALISED: return "notinitialised";
-#endif
-#ifdef WSAEDISCON
-    case WSAEDISCON: return "ediscon";
-#endif
-#ifdef WSAENOMORE
-    case WSAENOMORE: return "enomore";
-#endif
-#ifdef WSAECANCELLED
-    case WSAECANCELLED: return "ecancelled";
-#endif
-#ifdef WSAEINVALIDPROCTABLE
-    case WSAEINVALIDPROCTABLE: return "einvalidproctable";
-#endif
-#ifdef WSAEINVALIDPROVIDER
-    case WSAEINVALIDPROVIDER: return "einvalidprovider";
-#endif
-#ifdef WSAEPROVIDERFAILEDINIT
-    case WSAEPROVIDERFAILEDINIT: return "eproviderfailedinit";
-#endif
-#ifdef WSASYSCALLFAILURE
-    case WSASYSCALLFAILURE: return "syscallfailure";
-#endif
-#ifdef WSASERVICE_NOT_FOUND
-    case WSASERVICE_NOT_FOUND: return "service_not_found";
-#endif
-#ifdef WSATYPE_NOT_FOUND
-    case WSATYPE_NOT_FOUND: return "type_not_found";
-#endif
-#ifdef WSA_E_NO_MORE
-    case WSA_E_NO_MORE: return "e_no_more";
-#endif
-#ifdef WSA_E_CANCELLED
-    case WSA_E_CANCELLED: return "e_cancelled";
-#endif
-    default:
-	sprintf(errstrbuf, "unknown:%d", error); 
-	return errstrbuf;
-    }
-}
-
diff --git a/lib/ssl/c_src/esock_posix_str.h b/lib/ssl/c_src/esock_posix_str.h
deleted file mode 100644
index 53916c888a..0000000000
--- a/lib/ssl/c_src/esock_posix_str.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  %CopyrightBegin%
- *  
- *  Copyright Ericsson AB 1999-2009. All Rights Reserved.
- *  
- *  The contents of this file are subject to the Erlang Public License,
- *  Version 1.1, (the "License"); you may not use this file except in
- *  compliance with the License. You should have received a copy of the
- *  Erlang Public License along with this software. If not, it can be
- *  retrieved online at http://www.erlang.org/.
- *  
- *  Software distributed under the License is distributed on an "AS IS"
- *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- *  the License for the specific language governing rights and limitations
- *  under the License.
- *  
- *  %CopyrightEnd%
- */
-
-/* esock_posix_str.h */
-
-#ifndef ESOCK_POSIX_STR_H
-#define ESOCK_POSIX_STR_H
-
-char *esock_posix_str(int error);
-
-#endif
-
diff --git a/lib/ssl/c_src/esock_ssl.h b/lib/ssl/c_src/esock_ssl.h
deleted file mode 100644
index 535e9a6491..0000000000
--- a/lib/ssl/c_src/esock_ssl.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*<copyright>
- * <year>1999-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose: Header file for adaptions to various SSL packages.
- */
-
-#ifndef ESOCK_SSL_H
-#define ESOCK_SSL_H
-
-#include <sys/types.h>
-#include <stdio.h>
-#include "esock.h"
-
-typedef struct {
-    const char *compile_version;/* version of OpenSSL when compiling esock */
-    const char *lib_version;	/* version of OpenSSL in library */
-} esock_version;
-
-/* Variables to be set by certain functions (see below) */
-char *esock_ssl_errstr;
-
-/* Ephemeral RSA and DH */
-int ephemeral_rsa, ephemeral_dh;
-
-/* Protocol version (sslv2, sslv3, tlsv1) */
-int protocol_version;
-
-/* version info */
-esock_version *esock_ssl_version(void);
-
-/* ciphers info */
-char *esock_ssl_ciphers(void);
-
-/* seeding */
-void esock_ssl_seed(void *buf, int len);
-
-/* Initialization and finalization of SSL */
-
-int esock_ssl_init(void);
-void esock_ssl_finish(void);
-
-/* Freeing of SSL resources for a connection */
-
-void esock_ssl_free(Connection *cp);
-
-/* Print error diagnostics to a file pointer */
-
-void esock_ssl_print_errors_fp(FILE *fp);
-
-/* All functions below have to return >= 0 on success, and < 0 on 
- * failure. 
- * 
- * If the return indicates a failure (return value < 0) and the failure
- * is temporary the error context (sock_errno()/sock_set_errno()) must
- * be set to ERRNO_BLOCK. 
- *
- * If the failure is permanent, the error context must be set to something
- * else than ERRNO_BLOCK, and `esock_ssl_errstr' must be set to point to
- * short diagnostic string describing the error.
- */
-
-int esock_ssl_accept_init(Connection *cp, void *listenssl);
-int esock_ssl_connect_init(Connection *cp);
-int esock_ssl_listen_init(Connection *cp);
-
-/* All functions below may involve non-blocking I/O with a temporary
- * failure.  Hence they have to have the error context set to
- * ERRNO_BLOCK, or else have esock_ssl_errstr set to point to a
- * diagnostic string, in case the return value is < 0. If the return
- * value is 0, cp->eof and cp->bp are set, if appropritate.
- */
-
-int esock_ssl_accept(Connection *cp);
-int esock_ssl_connect(Connection *cp);
-
-int esock_ssl_read(Connection *cp, char *buf, int len);
-int esock_ssl_write(Connection *cp, char *buf, int len);
-
-int esock_ssl_shutdown(Connection *cp);
-
-/* Peer certificate */
-
-int esock_ssl_getpeercert(Connection *cp, unsigned char **buf);
-int esock_ssl_getpeercertchain(Connection *cp, unsigned char **buf);
-
-/* Sessions */
-int esock_ssl_session_reused(Connection *cp);
-
-/* Protocol version and cipher of established connection */
-int esock_ssl_getprotocol_version(Connection *cp, char **buf);
-int esock_ssl_getcipher(Connection *cp, char **buf);
-
-#endif
diff --git a/lib/ssl/c_src/esock_utils.c b/lib/ssl/c_src/esock_utils.c
deleted file mode 100644
index 0098a4f5f6..0000000000
--- a/lib/ssl/c_src/esock_utils.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *  %CopyrightBegin%
- *  
- *  Copyright Ericsson AB 1999-2009. All Rights Reserved.
- *  
- *  The contents of this file are subject to the Erlang Public License,
- *  Version 1.1, (the "License"); you may not use this file except in
- *  compliance with the License. You should have received a copy of the
- *  Erlang Public License along with this software. If not, it can be
- *  retrieved online at http://www.erlang.org/.
- *  
- *  Software distributed under the License is distributed on an "AS IS"
- *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- *  the License for the specific language governing rights and limitations
- *  under the License.
- *  
- *  %CopyrightEnd%
- */
-
-/*
- * Purpose: Safe memory allocation and other utilities.
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "esock_utils.h"
-
-static char *strtok_quote(char *s1, const char *s2);
-
-
-void *esock_malloc(size_t size)
-{
-    void *p;
-
-    p = malloc(size);
-    if (!p) {
-	fprintf(stderr, "esock_malloc: cannot alloc %d bytes\n", size);
-	exit(EXIT_FAILURE);
-    }
-    return p;
-}
-
-void *esock_realloc(void *p, size_t size)
-{
-    void *np;
-
-    np = realloc(p, size);
-    if (!np) {
-	fprintf(stderr, "esock_realloc: cannot realloc %d bytes\n", size);
-	exit(EXIT_FAILURE);
-    }
-    return np;
-}
-
-void esock_free(void *p)
-{
-    free(p);
-}
-
-/* Builds an argv array from cmd. Spaces and tabs within double quotes
- * are not considered delimiters. Double quotes are removed.
- * 
- * The return value is argc, and the pointer to char ** is set. argc 
- * is non-negative, argv[0], ..., argv[argc - 1] are pointers to
- * strings, and argv[argc] == NULL.  All argv[0], ..., argv[argc - 1]
- * must be freed by the user, and also the argv pointer itself. 
- *
- * Example: cmd = abc"/program files/"olle nisse, results in 
- * argv[0] = abc/program files/olle, argv[1] = nisse, argc = 2.
- *
- */
-int esock_build_argv(char *cmd, char ***argvp)
-{
-    int argvsize = 10, argc = 0;
-    char *args, *tokp, *argp;
-    char **argv;
-
-    argv = esock_malloc(argvsize * sizeof(char *));
-    args = esock_malloc(strlen(cmd) + 1);
-    strcpy(args, cmd);
-    tokp = strtok_quote(args, " \t");
-    while (tokp != NULL) {
-	if (argc + 1 >= argvsize) {
-	    argvsize += 10;
-	    argv = esock_realloc(argv, argvsize * sizeof(char *));
-	}
-	argp = esock_malloc(strlen(tokp) + 1);
-	strcpy(argp, tokp);
-	argv[argc++] = argp;
-	tokp = strtok_quote(NULL, " \t");
-    }
-    esock_free(args);
-    argv[argc] = NULL;
-    *argvp = argv;
-    return argc;
-}
-
-/* strtok_quote
- * Works as strtok, but characters within pairs of double quotes are not 
- * considered as delimiters. Quotes are removed.
- */
-static char *strtok_quote(char *s1, const char *s2)
-{
-    static char *last;
-    char *s, *t, *u;
-
-    s = (s1) ? s1 : last;
-    if (!s) 
-	return last = NULL;
-
-    while (*s != '"' && *s != '\0' && strchr(s2, *s))
-	s++;
-    t = s;
-
-    while (1) {
-	if (*t == '"') {
-	    t++;
-	    while (*t != '"' && *t != '\0')
-		t++;
-	    if (*t == '\0') {
-		last = NULL;
-		goto end;
-	    }
-	    t++;
-	}
-	while(*t != '"' && *t != '\0' && !strchr(s2, *t))
-	    t++;
-	if (*t == '\0') {
-	    last = NULL;
-	    goto end;
-	} else if (*t != '"') {
-	    *t = '\0';
-	    last = t + 1;
-	    goto end;
-	}
-    }
-end:
-    /* Remove quotes */
-    u = t = s;
-    while (*u) {
-	if (*u == '"')
-	    u++;
-	else 
-	    *t++ = *u++;
-    }
-    *t = '\0';
-    return s;
-}
-
diff --git a/lib/ssl/c_src/esock_utils.h b/lib/ssl/c_src/esock_utils.h
deleted file mode 100644
index 99ed6c23e3..0000000000
--- a/lib/ssl/c_src/esock_utils.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  %CopyrightBegin%
- *  
- *  Copyright Ericsson AB 1999-2009. All Rights Reserved.
- *  
- *  The contents of this file are subject to the Erlang Public License,
- *  Version 1.1, (the "License"); you may not use this file except in
- *  compliance with the License. You should have received a copy of the
- *  Erlang Public License along with this software. If not, it can be
- *  retrieved online at http://www.erlang.org/.
- *  
- *  Software distributed under the License is distributed on an "AS IS"
- *  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- *  the License for the specific language governing rights and limitations
- *  under the License.
- *  
- *  %CopyrightEnd%
- */
-
-#ifndef ESOCK_UTILS_H
-#define ESOCK_UTILS_H
-
-#include <stdlib.h>
-
-void *esock_malloc(size_t size);
-void *esock_realloc(void *p, size_t size);
-void esock_free(void *p);
-int esock_build_argv(char *cmd, char ***argvp);
-
-#endif
-
-
diff --git a/lib/ssl/c_src/esock_winsock.h b/lib/ssl/c_src/esock_winsock.h
deleted file mode 100644
index 069782a18d..0000000000
--- a/lib/ssl/c_src/esock_winsock.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*<copyright>
- * <year>2003-2008</year>
- * <holder>Ericsson AB, All Rights Reserved</holder>
- *</copyright>
- *<legalnotice>
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Initial Developer of the Original Code is Ericsson AB.
- *</legalnotice>
- */
-/*
- * Purpose:  Control winsock version and setting of FD_SETSIZE.
- *
- */
-
-/* Maybe set FD_SETSIZE */
-
-#ifdef ESOCK_WINSOCK2
-#include <winsock2.h>
-#else
-#include <winsock.h>
-/* These are defined in winsock2.h but not in winsock.h */
-#define SD_RECEIVE      0x00
-#define SD_SEND         0x01
-#define SD_BOTH         0x02
-#endif
-
diff --git a/lib/ssl/doc/src/Makefile b/lib/ssl/doc/src/Makefile
index 3119d37af0..5d808d6727 100644
--- a/lib/ssl/doc/src/Makefile
+++ b/lib/ssl/doc/src/Makefile
@@ -1,7 +1,7 @@
 #
 # %CopyrightBegin%
 #
-# Copyright Ericsson AB 1999-2010. All Rights Reserved.
+# Copyright Ericsson AB 1999-2011. All Rights Reserved.
 #
 # The contents of this file are subject to the Erlang Public License,
 # Version 1.1, (the "License"); you may not use this file except in
@@ -37,7 +37,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
 # Target Specs
 # ----------------------------------------------------
 XML_APPLICATION_FILES = refman.xml
-XML_REF3_FILES = ssl.xml old_ssl.xml ssl_session_cache_api.xml
+XML_REF3_FILES = ssl.xml ssl_session_cache_api.xml
 XML_REF6_FILES = ssl_app.xml
 
 XML_PART_FILES = release_notes.xml usersguide.xml
diff --git a/lib/ssl/doc/src/old_ssl.xml b/lib/ssl/doc/src/old_ssl.xml
deleted file mode 100644
index 0d2e1afdbd..0000000000
--- a/lib/ssl/doc/src/old_ssl.xml
+++ /dev/null
@@ -1,709 +0,0 @@
-<?xml version="1.0" encoding="latin1" ?>
-<!DOCTYPE erlref SYSTEM "erlref.dtd">
-
-<erlref>
-  <header>
-    <copyright>
-      <year>1999</year><year>2010</year>
-      <holder>Ericsson AB. All Rights Reserved.</holder>
-    </copyright>
-    <legalnotice>
-      The contents of this file are subject to the Erlang Public License,
-      Version 1.1, (the "License"); you may not use this file except in
-      compliance with the License. You should have received a copy of the
-      Erlang Public License along with this software. If not, it can be
-      retrieved online at http://www.erlang.org/.
-
-      Software distributed under the License is distributed on an "AS IS"
-      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-      the License for the specific language governing rights and limitations
-      under the License.
-
-    </legalnotice>
-
-    <title>ssl</title>
-    <prepared>Peter H&ouml;gfeldt</prepared>
-    <responsible>Peter H&ouml;gfeldt</responsible>
-    <docno></docno>
-    <approved>Peter H&ouml;gfeldt</approved>
-    <checked></checked>
-    <date>2003-03-25</date>
-    <rev>D</rev>
-    <file>old_ssl.xml</file>
-  </header>
-  <module>old_ssl</module>
-  <modulesummary>Interface Functions for Secure Socket Layer</modulesummary>
-  <description>
-    <p>This module contains interface functions to the Secure Socket Layer.</p>
-  </description>
-
-  <section>
-    <title>General</title>
-
-    <p>This manual page describes functions that are defined
-      in the ssl module and represents the old ssl implementation
-      that coexists with the new one until it has been
-      totally phased out. </p>
-
-   <p>The old implementation can be
-      accessed by providing the option {ssl_imp, old} to the
-      ssl:connect and ssl:listen functions.</p>
-      
-    <p>The reader is advised to also read the <c>ssl(6)</c> manual page
-      describing the SSL application.
-      </p>
-    <warning>
-      <p>It is strongly advised to seed the random generator after
-        the ssl application has been started (see <c>seed/1</c>
-        below), and before any connections are established. Although
-        the port program interfacing to the ssl libraries does a
-        "random" seeding of its own in order to make everything work
-        properly, that seeding is by no means random for the world
-        since it has a constant value which is known to everyone
-        reading the source code of the port program.</p>
-    </warning>
-  </section>
-
-  <section>
-    <title>Common data types</title>
-    <p>The following datatypes are used in the functions below:
-      </p>
-    <list type="bulleted">
-      <item>
-        <p><c>options() = [option()]</c></p>
-      </item>
-      <item>
-        <p><c>option() = socketoption() | ssloption()</c></p>
-      </item>
-      <item>
-        <p><c>socketoption() = {mode, list} | {mode, binary} |  binary | {packet, packettype()} | {header, integer()} | {nodelay, boolean()} | {active, activetype()} |  {backlog, integer()} | {ip, ipaddress()} | {port, integer()}</c></p>
-      </item>
-      <item>
-        <p><c>ssloption() = {verify, code()} | {depth, depth()} |  {certfile, path()} | {keyfile, path()} | {password, string()} | {cacertfile, path()} | {ciphers, string()}</c></p>
-      </item>
-      <item>
-        <p><c>packettype()</c>  (see inet(3))</p>
-      </item>
-      <item>
-        <p><c>activetype()</c>  (see inet(3))</p>
-      </item>
-      <item>
-        <p><c>reason() = atom() | {atom(), string()}</c></p>
-      </item>
-      <item>
-        <p><c>bytes() = [byte()]</c></p>
-      </item>
-      <item>
-        <p><c>string() = [byte()]</c></p>
-      </item>
-      <item>
-        <p><c>byte() = 0 | 1 | 2 | ... | 255</c></p>
-      </item>
-      <item>
-        <p><c>code() = 0 | 1 | 2</c></p>
-      </item>
-      <item>
-        <p><c>depth() = byte()</c></p>
-      </item>
-      <item>
-        <p><c>address() = hostname() | ipstring() | ipaddress()</c></p>
-      </item>
-      <item>
-        <p><c>ipaddress() = ipstring() | iptuple()</c></p>
-      </item>
-      <item>
-        <p><c>hostname() = string()</c></p>
-      </item>
-      <item>
-        <p><c>ipstring() = string()</c></p>
-      </item>
-      <item>
-        <p><c>iptuple() = {byte(), byte(), byte(), byte()}</c></p>
-      </item>
-      <item>
-        <p><c>sslsocket()</c></p>
-      </item>
-      <item>
-        <p><c>protocol() = sslv2 | sslv3 | tlsv1</c></p>
-      </item>
-      <item>
-        <p><c></c></p>
-      </item>
-    </list>
-    <p>The socket option <c>{backlog, integer()}</c> is for
-      <c>listen/2</c> only, and the option <c>{port, integer()}</c>
-      is for <c>connect/3/4</c> only. 
-      </p>
-    <p>The following socket options are set by default: <c>{mode, list}</c>, <c>{packet, 0}</c>, <c>{header, 0}</c>, <c>{nodelay, false}</c>, <c>{active, true}</c>, <c>{backlog, 5}</c>,
-      <c>{ip, {0,0,0,0}}</c>, and <c>{port, 0}</c>.
-      </p>
-    <p>Note that the options <c>{mode, binary}</c> and <c>binary</c>
-      are equivalent. Similarly <c>{mode, list}</c> and the absence of
-      option <c>binary</c> are equivalent. 
-      </p>
-    <p>The ssl options are for setting specific SSL parameters as follows:
-      </p>
-    <list type="bulleted">
-      <item>
-        <p><c>{verify, code()}</c> Specifies type of verification:
-          0 = do not verify peer; 1 = verify peer, 2 = verify peer,
-          fail if no peer certificate.  The default value is 0.
-          </p>
-      </item>
-      <item>
-        <p><c>{depth, depth()}</c> Specifies the maximum
-          verification depth, i.e. how far in a chain of certificates
-          the verification process can proceed before the verification
-          is considered to fail. 
-          </p>
-        <p>Peer certificate = 0, CA certificate = 1, higher level CA
-          certificate = 2, etc.  The value 2 thus means that a chain
-          can at most contain peer cert, CA cert, next CA cert, and an
-          additional CA cert.
-          </p>
-        <p>The default value is 1.
-          </p>
-      </item>
-      <item>
-        <p><c>{certfile, path()}</c> Path to a file containing the
-          user's certificate.
-          chain of PEM encoded certificates.</p>
-      </item>
-      <item>
-        <p><c>{keyfile, path()}</c> Path to file containing user's
-          private PEM encoded key.</p>
-      </item>
-      <item>
-        <p><c>{password, string()}</c> String containing the user's
-          password. Only used if the private keyfile is password protected.</p>
-      </item>
-      <item>
-        <p><c>{cacertfile, path()}</c> Path to file containing PEM encoded
-          CA certificates (trusted certificates used for verifying a peer
-          certificate).</p>
-      </item>
-      <item>
-        <p><c>{ciphers, string()}</c> String of ciphers as a colon
-          separated list of ciphers. The function <c>ciphers/0</c> can
-          be used to find all available ciphers.</p>
-      </item>
-    </list>
-    <p>The type <c>sslsocket()</c> is opaque to the user.
-      </p>
-    <p>The owner of a socket is the one that created it by a call to
-      <c>transport_accept/[1,2]</c>,  <c>connect/[3,4]</c>,
-      or <c>listen/2</c>.
-      </p>
-    <p>When a socket is in active mode (the default), data from the
-      socket is delivered to the owner of the socket in the form of
-      messages:
-      </p>
-    <list type="bulleted">
-      <item>
-        <p><c>{ssl, Socket, Data}</c></p>
-      </item>
-      <item>
-        <p><c>{ssl_closed, Socket}</c></p>
-      </item>
-      <item>
-        <p><c>{ssl_error, Socket, Reason}</c></p>
-      </item>
-    </list>
-    <p>A <c>Timeout</c> argument specifies a timeout in milliseconds. The 
-      default value for a <c>Timeout</c> argument is <c>infinity</c>.
-      </p>
-    <p>Functions listed below may return the value <c>{error, closed}</c>, which only indicates that the SSL socket is
-      considered closed for the operation in question. It is for
-      instance possible to have <c>{error, closed}</c> returned from
-      an call to <c>send/2</c>, and a subsequent call to <c>recv/3</c>
-      returning <c>{ok, Data}</c>.
-      </p>
-    <p>Hence a return value of <c>{error, closed}</c> must not be
-      interpreted as if the socket was completely closed. On the
-      contrary, in order to free all resources occupied by an SSL
-      socket, <c>close/1</c> must be called, or else the process owning
-      the socket has to terminate.
-      </p>
-    <p>For each SSL socket there is an Erlang process representing the
-      socket.  When a socket is opened, that process links to the
-      calling client process.  Implementations that want to detect
-      abnormal exits from the socket process by receiving <c>{'EXIT', Pid, Reason}</c> messages, should use the function <c>pid/1</c>
-      to retrieve the process identifier from the socket, in order to
-      be able to match exit messages properly.</p>
-  </section>
-  <funcs>
-    <func>
-      <name>ciphers() -> {ok, string()} | {error, enotstarted}</name>
-      <fsummary>Get supported ciphers.</fsummary>
-      <desc>
-        <p>Returns a string consisting of colon separated cipher
-          designations that are supported by the current SSL library
-          implementation.
-          </p>
-        <p>The SSL application has to be started to return the string
-          of ciphers.</p>
-      </desc>
-    </func>
-    <func>
-      <name>close(Socket) -> ok | {error, Reason}</name>
-      <fsummary>Close a socket returned by <c>transport_accept/[1,2]</c>, <c>connect/3/4</c>, or <c>listen/2</c>.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-      </type>
-      <desc>
-	<p>Closes a socket returned by <c>transport_accept/[1,2]</c>,
-	<c>connect/[3,4]</c>, or <c>listen/2</c></p>
-      </desc>
-    </func>
-    <func>
-      <name>connect(Address, Port, Options) -> {ok, Socket} | {error, Reason}</name>
-      <name>connect(Address, Port, Options, Timeout) -> {ok, Socket} | {error, Reason}</name>
-      <fsummary>Connect to <c>Port</c>at <c>Address</c>.</fsummary>
-      <type>
-        <v>Address = address()</v>
-        <v>Port = integer()</v>
-        <v>Options = [connect_option()]</v>
-        <v>connect_option() = {mode, list} | {mode, binary} | binary | {packet, packettype()} | {header, integer()} | {nodelay, boolean()} | {active, activetype()} | {ip, ipaddress()} | {port, integer()} | {verify, code()} | {depth, depth()} | {certfile, path()} | {keyfile, path()} | {password, string()} | {cacertfile, path()} | {ciphers, string()}</v>
-        <v>Timeout = integer()</v>
-        <v>Socket = sslsocket()</v>
-      </type>
-      <desc>
-        <p>Connects to <c>Port</c> at <c>Address</c>. If the optional 
-          <c>Timeout</c> argument is specified, and a connection could not
-          be established within the given time, <c>{error, timeout}</c> is
-          returned. The default value for <c>Timeout</c> is <c>infinity</c>.
-          </p>
-        <p>The <c>ip</c> and <c>port</c> options are for binding to a 
-          particular <em>local</em> address and port, respectively.</p>
-      </desc>
-    </func>
-    <func>
-      <name>connection_info(Socket) -> {ok, {Protocol, Cipher}} | {error, Reason}</name>
-      <fsummary>Get current protocol version and cipher.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Protocol = protocol()</v>
-        <v>Cipher = string()</v>
-      </type>
-      <desc>
-        <p>Gets the chosen protocol version and cipher for an established
-          connection (accepted och connected). </p>
-      </desc>
-    </func>
-    <func>
-      <name>controlling_process(Socket, NewOwner) -> ok | {error, Reason}</name>
-      <fsummary>Assign a new controlling process to the socket.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>NewOwner = pid()</v>
-      </type>
-      <desc>
-        <p>Assigns a new controlling process to <c>Socket</c>. A controlling
-          process is the owner of a socket, and receives all messages from
-          the socket.</p>
-      </desc>
-    </func>
-    <func>
-      <name>format_error(ErrorCode) -> string()</name>
-      <fsummary>Return an error string.</fsummary>
-      <type>
-        <v>ErrorCode = term()</v>
-      </type>
-      <desc>
-        <p>Returns a diagnostic string describing an error.</p>
-      </desc>
-    </func>
-    <func>
-      <name>getopts(Socket, OptionsTags) -> {ok, Options} | {error, Reason}</name>
-      <fsummary>Get options set for socket</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>OptionTags = [optiontag()]()</v>
-      </type>
-      <desc>
-        <p>Returns the options the tags of which are <c>OptionTags</c> for
-          for the socket <c>Socket</c>. </p>
-      </desc>
-    </func>
-    <func>
-      <name>listen(Port, Options) -> {ok, ListenSocket} | {error, Reason}</name>
-      <fsummary>Set up a socket to listen on a port on the local host.</fsummary>
-      <type>
-        <v>Port = integer()</v>
-        <v>Options = [listen_option()]</v>
-        <v>listen_option() = {mode, list} | {mode, binary} | binary | {packet, packettype()} | {header, integer()} | {active, activetype()} | {backlog, integer()} | {ip, ipaddress()} | {verify, code()} | {depth, depth()} | {certfile, path()} | {keyfile, path()} | {password, string()} | {cacertfile, path()} | {ciphers, string()}</v>
-        <v>ListenSocket = sslsocket()</v>
-      </type>
-      <desc>
-        <p>Sets up a socket to listen on port <c>Port</c> at the local host.
-          If <c>Port</c> is zero, <c>listen/2</c> picks an available port
-          number (use <c>port/1</c> to retrieve it).
-          </p>
-        <p>The listen queue size defaults to 5. If a different value is 
-          wanted, the option <c>{backlog, Size}</c> should be added to the 
-          list of options.
-          </p>
-        <p>An empty <c>Options</c> list is considered an error, and
-          <c>{error, enooptions}</c> is returned.
-          </p>
-        <p>The returned <c>ListenSocket</c> can only be used in calls to 
-          <c>transport_accept/[1,2]</c>.</p>
-      </desc>
-    </func>
-    <func>
-      <name>peercert(Socket) -> {ok, Cert} |  {error, Reason}</name>
-      <fsummary>Return the peer certificate.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Cert = binary()()</v>
-        <v>Subject = term()()</v>
-      </type>
-      <desc>
-	<p>Returns the DER encoded peer certificate, the certificate can be decoded with
-	  <c>public_key:pkix_decode_cert/2</c>.
-	</p>
-      </desc>
-    </func>
-    <func>
-      <name>peername(Socket) -> {ok, {Address, Port}} | {error, Reason}</name>
-      <fsummary>Return peer address and port.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Address = ipaddress()</v>
-        <v>Port = integer()</v>
-      </type>
-      <desc>
-        <p>Returns the address and port number of the peer.</p>
-      </desc>
-    </func>
-    <func>
-      <name>pid(Socket) -> pid()</name>
-      <fsummary>Return the pid of the socket process.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-      </type>
-      <desc>
-        <p>Returns the pid of the socket process. The returned pid should
-          only be used for receiving exit messages.</p>
-      </desc>
-    </func>
-    <func>
-      <name>recv(Socket, Length) -> {ok, Data} | {error, Reason}</name>
-      <name>recv(Socket, Length, Timeout) -> {ok, Data} | {error, Reason}</name>
-      <fsummary>Receive data on socket.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Length = integer() >= 0</v>
-        <v>Timeout = integer()</v>
-        <v>Data = bytes() | binary()</v>
-      </type>
-      <desc>
-        <p>Receives data on socket <c>Socket</c> when the socket is in
-          passive mode, i.e. when the option <c>{active, false}</c>
-          has been specified.
-          </p>
-        <p>A notable return value is <c>{error, closed}</c> which
-          indicates that the socket is closed.
-          </p>
-        <p>A positive value of the <c>Length</c> argument is only
-          valid when the socket is in raw mode (option <c>{packet, 0}</c> is set, and the option <c>binary</c> is <em>not</em>
-          set); otherwise it should be set to 0, whence all available
-          bytes are returned.
-          </p>
-        <p>If the optional <c>Timeout</c> parameter is specified, and
-          no data was available within the given time, <c>{error, timeout}</c> is returned. The default value for
-          <c>Timeout</c> is <c>infinity</c>.</p>
-      </desc>
-    </func>
-    <func>
-      <name>seed(Data) -> ok | {error, Reason}</name>
-      <fsummary>Seed the ssl random generator.</fsummary>
-      <type>
-        <v>Data = iolist() | binary()</v>
-      </type>
-      <desc>
-        <p>Seeds the ssl random generator.
-          </p>
-        <p>It is strongly advised to seed the random generator after
-          the ssl application has been started, and before any
-          connections are established. Although the port program
-          interfacing to the OpenSSL libraries does a "random" seeding
-          of its own in order to make everything work properly, that
-          seeding is by no means random for the world since it has a 
-          constant value which is known to everyone reading the source
-          code of the seeding. 
-          </p>
-        <p>A notable return value is <c>{error, edata}}</c> indicating that
-          <c>Data</c> was not a binary nor an iolist.</p>
-      </desc>
-    </func>
-    <func>
-      <name>send(Socket, Data) -> ok | {error, Reason}</name>
-      <fsummary>Write data to a socket.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Data = iolist() | binary()</v>
-      </type>
-      <desc>
-        <p>Writes <c>Data</c> to <c>Socket</c>. </p>
-        <p>A notable return value is <c>{error, closed}</c> indicating that
-          the socket is closed.</p>
-      </desc>
-    </func>
-    <func>
-      <name>setopts(Socket, Options) -> ok | {error, Reason}</name>
-      <fsummary>Set socket options.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Options = [socketoption]()</v>
-      </type>
-      <desc>
-        <p>Sets options according to <c>Options</c> for the socket 
-          <c>Socket</c>. </p>
-      </desc>
-    </func>
-    <func>
-      <name>ssl_accept(Socket) -> ok | {error, Reason}</name>
-      <name>ssl_accept(Socket, Timeout) -> ok | {error, Reason}</name>
-      <fsummary>Perform server-side SSL handshake and key exchange</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Timeout = integer()</v>
-        <v>Reason = atom()</v>
-      </type>
-      <desc>
-        <p>The <c>ssl_accept</c> function establish the SSL connection
-          on the server side. It should be called directly after
-          <c>transport_accept</c>, in the spawned server-loop.</p>
-        <p>Note that the ssl connection is not complete until <c>ssl_accept</c>
-          has returned <c>true</c>, and if an error is returned, the socket
-          is unavailable and for instance <c>close/1</c> will crash.</p>
-      </desc>
-    </func>
-    <func>
-      <name>sockname(Socket) -> {ok, {Address, Port}} | {error, Reason}</name>
-      <fsummary>Return the local address and port.</fsummary>
-      <type>
-        <v>Socket = sslsocket()</v>
-        <v>Address = ipaddress()</v>
-        <v>Port = integer()</v>
-      </type>
-      <desc>
-        <p>Returns the local address and port number of the socket
-          <c>Socket</c>.</p>
-      </desc>
-    </func>
-    <func>
-      <name>transport_accept(Socket) -> {ok, NewSocket} | {error, Reason}</name>
-      <name>transport_accept(Socket, Timeout) -> {ok, NewSocket} | {error, Reason}</name>
-      <fsummary>Accept an incoming connection and prepare for <c>ssl_accept</c></fsummary>
-      <type>
-        <v>Socket = NewSocket = sslsocket()</v>
-        <v>Timeout = integer()</v>
-        <v>Reason = atom()</v>
-      </type>
-      <desc>
-        <p>Accepts an incoming connection request on a listen socket.
-          <c>ListenSocket</c> must be a socket returned from <c>listen/2</c>.
-          The socket returned should be passed to <c>ssl_accept</c> to
-          complete ssl handshaking and establishing the connection.</p>
-        <warning>
-          <p>The socket returned can only be used with <c>ssl_accept</c>,
-            no traffic can be sent or received before that call.</p>
-        </warning>
-        <p>The accepted socket inherits the options set for <c>ListenSocket</c>
-          in <c>listen/2</c>.</p>
-        <p>The default value for <c>Timeout</c> is <c>infinity</c>. If 
-          <c>Timeout</c> is specified, and no connection is accepted within
-          the given time, <c>{error, timeout}</c> is returned.</p>
-      </desc>
-    </func>
-    <func>
-      <name>version() -> {ok, {SSLVsn, CompVsn, LibVsn}}</name>
-      <fsummary>Return the version of SSL.</fsummary>
-      <type>
-        <v>SSLVsn = CompVsn = LibVsn = string()()</v>
-      </type>
-      <desc>
-        <p>Returns the SSL application version (<c>SSLVsn</c>), the library
-          version used when compiling the SSL application port program
-          (<c>CompVsn</c>), and the actual library version used when
-          dynamically linking in runtime (<c>LibVsn</c>).
-          </p>
-        <p>If the SSL application has not been started, <c>CompVsn</c> and
-          <c>LibVsn</c> are empty strings.
-          </p>
-      </desc>
-    </func>
-  </funcs>
-
-  <section>
-    <title>ERRORS</title>
-    <p>The possible error reasons and the corresponding diagnostic strings 
-      returned by <c>format_error/1</c> are either the same as those defined
-      in the <c>inet(3)</c> reference manual, or as follows:
-      </p>
-    <taglist>
-      <tag><c>closed</c></tag>
-      <item>
-        <p>Connection closed for the operation in question.
-          </p>
-      </item>
-      <tag><c>ebadsocket</c></tag>
-      <item>
-        <p>Connection not found (internal error).
-          </p>
-      </item>
-      <tag><c>ebadstate</c></tag>
-      <item>
-        <p>Connection not in connect state (internal error).
-          </p>
-      </item>
-      <tag><c>ebrokertype</c></tag>
-      <item>
-        <p>Wrong broker type (internal error).
-          </p>
-      </item>
-      <tag><c>ecacertfile</c></tag>
-      <item>
-        <p>Own CA certificate file is invalid.
-          </p>
-      </item>
-      <tag><c>ecertfile</c></tag>
-      <item>
-        <p>Own certificate file is invalid.
-          </p>
-      </item>
-      <tag><c>echaintoolong</c></tag>
-      <item>
-        <p>The chain of certificates provided by peer is too long.
-          </p>
-      </item>
-      <tag><c>ecipher</c></tag>
-      <item>
-        <p>Own list of specified ciphers is invalid.
-          </p>
-      </item>
-      <tag><c>ekeyfile</c></tag>
-      <item>
-        <p>Own private key file is invalid.
-          </p>
-      </item>
-      <tag><c>ekeymismatch</c></tag>
-      <item>
-        <p>Own private key does not match own certificate.
-          </p>
-      </item>
-      <tag><c>enoissuercert</c></tag>
-      <item>
-        <p>Cannot find certificate of issuer of certificate provided
-          by peer.
-          </p>
-      </item>
-      <tag><c>enoservercert</c></tag>
-      <item>
-        <p>Attempt to do accept without having set own certificate.
-          </p>
-      </item>
-      <tag><c>enotlistener</c></tag>
-      <item>
-        <p>Attempt to accept on a non-listening socket.
-          </p>
-      </item>
-      <tag><c>enoproxysocket</c></tag>
-      <item>
-        <p>No proxy socket found (internal error).
-          </p>
-      </item>
-      <tag><c>enooptions</c></tag>
-      <item>
-        <p>The list of options is empty.
-          </p>
-      </item>
-      <tag><c>enotstarted</c></tag>
-      <item>
-        <p>The SSL application has not been started.
-          </p>
-      </item>
-      <tag><c>eoptions</c></tag>
-      <item>
-        <p>Invalid list of options.
-          </p>
-      </item>
-      <tag><c>epeercert</c></tag>
-      <item>
-        <p>Certificate provided by peer is in error.
-          </p>
-      </item>
-      <tag><c>epeercertexpired</c></tag>
-      <item>
-        <p>Certificate provided by peer has expired.
-          </p>
-      </item>
-      <tag><c>epeercertinvalid</c></tag>
-      <item>
-        <p>Certificate provided by peer is invalid.
-          </p>
-      </item>
-      <tag><c>eselfsignedcert</c></tag>
-      <item>
-        <p>Certificate provided by peer is self signed.
-          </p>
-      </item>
-      <tag><c>esslaccept</c></tag>
-      <item>
-        <p>Server SSL handshake procedure between client and server failed.
-          </p>
-      </item>
-      <tag><c>esslconnect</c></tag>
-      <item>
-        <p>Client SSL handshake procedure between client and server failed.
-          </p>
-      </item>
-      <tag><c>esslerrssl</c></tag>
-      <item>
-        <p>SSL protocol failure. Typically because of a fatal alert 
-          from peer.
-          </p>
-      </item>
-      <tag><c>ewantconnect</c></tag>
-      <item>
-        <p>Protocol wants to connect, which is not supported in
-          this version of the SSL application.
-          </p>
-      </item>
-      <tag><c>ex509lookup</c></tag>
-      <item>
-        <p>Protocol wants X.509 lookup, which is not supported in
-          this version of the SSL application.
-          </p>
-      </item>
-      <tag><c>{badcall, Call}</c></tag>
-      <item>
-        <p>Call not recognized for current mode (active or passive) and
-          state of socket.
-          </p>
-      </item>
-      <tag><c>{badcast, Cast}</c></tag>
-      <item>
-        <p>Call not recognized for current mode (active or passive) and
-          state of socket. 
-          </p>
-      </item>
-      <tag><c>{badinfo, Info}</c></tag>
-      <item>
-        <p>Call not recognized for current mode (active or passive) and
-          state of socket.
-          </p>
-      </item>
-    </taglist>
-  </section>
-
-  <section>
-    <title>SEE ALSO</title>
-    <p>gen_tcp(3), inet(3) public_key(3) </p>
-  </section>
-  
-</erlref>
-
-
diff --git a/lib/ssl/doc/src/refman.xml b/lib/ssl/doc/src/refman.xml
index 68f84660f3..011819e82b 100644
--- a/lib/ssl/doc/src/refman.xml
+++ b/lib/ssl/doc/src/refman.xml
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="iso-8859-1" ?>
 <!DOCTYPE application SYSTEM "application.dtd">
 
 <application xmlns:xi="http://www.w3.org/2001/XInclude">
   <header>
     <copyright>
-      <year>1999</year><year>2010</year>
+      <year>1999</year><year>2011</year>
       <holder>Ericsson AB. All Rights Reserved.</holder>
     </copyright>
     <legalnotice>
@@ -45,7 +45,6 @@
   </description>
   <xi:include href="ssl_app.xml"/>
   <xi:include href="ssl.xml"/>
-  <xi:include href="old_ssl.xml"/>
   <xi:include href="ssl_session_cache_api.xml"/>
 </application>
 
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index 0c4c8796be..66d2644b76 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -121,8 +121,6 @@
    <p> <c>hash() = md5 | sha
     </c></p>
 
-    <p><c>ssl_imp() = new | old - default is new.</c></p>
-    
   </section>
 
   <section>
@@ -177,9 +175,9 @@
       by the peer also.
       </item>
 
-      <tag>{ssl_imp, ssl_imp()}</tag>
-      <item>Specify which ssl implementation you want to use. Defaults to
-      new.
+      <tag>{ssl_imp, new | old}</tag>
+      <item>No longer has any meaning as the old implementation has
+      been removed, it will be ignored.
       </item>
 
       <tag>{secure_renegotiate, boolean()}</tag>
diff --git a/lib/ssl/src/Makefile b/lib/ssl/src/Makefile
index 9c40d4ea53..dc69b53b28 100644
--- a/lib/ssl/src/Makefile
+++ b/lib/ssl/src/Makefile
@@ -41,13 +41,8 @@ MODULES= \
 	ssl \
 	ssl_alert \
 	ssl_app \
-	ssl_broker \
-	ssl_broker_sup \
 	ssl_dist_sup\
-	ssl_server \
 	ssl_sup \
-	ssl_prim \
-	inet_ssl_dist \
 	inet_tls_dist \
 	ssl_certificate\
 	ssl_certificate_db\
@@ -67,7 +62,7 @@ MODULES= \
 	ssl_tls_dist_proxy
 
 INTERNAL_HRL_FILES = \
-	 ssl_int.hrl ssl_broker_int.hrl ssl_debug.hrl \
+	 ssl_debug.hrl \
 	 ssl_alert.hrl ssl_cipher.hrl ssl_handshake.hrl ssl_internal.hrl \
 	 ssl_record.hrl
 
diff --git a/lib/ssl/src/inet_ssl_dist.erl b/lib/ssl/src/inet_ssl_dist.erl
deleted file mode 100644
index 42a03a4879..0000000000
--- a/lib/ssl/src/inet_ssl_dist.erl
+++ /dev/null
@@ -1,453 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(inet_ssl_dist).
-
-%% Handles the connection setup phase with other Erlang nodes.
-
--export([childspecs/0, listen/1, accept/1, accept_connection/5,
-	 setup/5, close/1, select/1, is_node_name/1]).
-
-%% internal exports
-
--export([accept_loop/2,do_accept/6,do_setup/6, getstat/1,tick/1]).
-
--import(error_logger,[error_msg/2]).
-
--include_lib("kernel/include/net_address.hrl").
-
--define(to_port(Socket, Data, Opts),
-	case ssl_prim:send(Socket, Data, Opts) of
-	    {error, closed} ->
-		self() ! {ssl_closed, Socket},
-	        {error, closed};
-	    R ->
-	        R
-        end).
-
--include_lib("kernel/include/dist.hrl").
--include_lib("kernel/include/dist_util.hrl").
-
-%% -------------------------------------------------------------
-%% This function should return a valid childspec, so that 
-%% the primitive ssl_server gets supervised
-%% -------------------------------------------------------------
-childspecs() ->
-    {ok, [{ssl_server_prim,{ssl_server, start_link_prim, []},
-	  permanent, 2000, worker, [ssl_server]}]}.
-
-
-%% ------------------------------------------------------------
-%%  Select this protocol based on node name
-%%  select(Node) => Bool
-%% ------------------------------------------------------------
-
-select(Node) ->
-    case split_node(atom_to_list(Node), $@, []) of
-	[_,_Host] -> true;
-	_ -> false
-    end.
-
-%% ------------------------------------------------------------
-%% Create the listen socket, i.e. the port that this erlang
-%% node is accessible through.
-%% ------------------------------------------------------------
-
-listen(Name) ->
-    case ssl_prim:listen(0, [{active, false}, {packet,4}] ++ 
-			 get_ssl_options(server)) of
-	{ok, Socket} ->
-	    TcpAddress = get_tcp_address(Socket),
-	    {_,Port} = TcpAddress#net_address.address,
-	    {ok, Creation} = erl_epmd:register_node(Name, Port),
-	    {ok, {Socket, TcpAddress, Creation}};
-	Error ->
-	    Error
-    end.
-
-%% ------------------------------------------------------------
-%% Accepts new connection attempts from other Erlang nodes.
-%% ------------------------------------------------------------
-
-accept(Listen) ->
-    spawn_link(?MODULE, accept_loop, [self(), Listen]).
-
-accept_loop(Kernel, Listen) ->
-    process_flag(priority, max),
-    case ssl_prim:accept(Listen) of
-	{ok, Socket} ->
-	    Kernel ! {accept,self(),Socket,inet,ssl},
-	    controller(Kernel, Socket),
-	    accept_loop(Kernel, Listen);
-	Error ->
-	    exit(Error)
-    end.
-
-controller(Kernel, Socket) ->
-    receive
-	{Kernel, controller, Pid} ->
-	    flush_controller(Pid, Socket),
-	    ssl_prim:controlling_process(Socket, Pid),
-	    flush_controller(Pid, Socket),
-	    Pid ! {self(), controller};
-	{Kernel, unsupported_protocol} ->
-	    exit(unsupported_protocol)
-    end.
-
-flush_controller(Pid, Socket) ->
-    receive
-	{ssl, Socket, Data} ->
-	    Pid ! {ssl, Socket, Data},
-	    flush_controller(Pid, Socket);
-	{ssl_closed, Socket} ->
-	    Pid ! {ssl_closed, Socket},
-	    flush_controller(Pid, Socket)
-    after 0 ->
-	    ok
-    end.
-
-%% ------------------------------------------------------------
-%% Accepts a new connection attempt from another Erlang node.
-%% Performs the handshake with the other side.
-%% ------------------------------------------------------------
-
-accept_connection(AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
-    spawn_link(?MODULE, do_accept,
-	       [self(), AcceptPid, Socket, MyNode,
-		Allowed, SetupTime]).
-
-%% Suppress dialyzer warning, we do not really care about old ssl code
-%% as we intend to remove it.
--spec(do_accept(_,_,_,_,_,_) -> no_return()).
-do_accept(Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
-    process_flag(priority, max),
-    receive
-	{AcceptPid, controller} ->
-	    Timer = dist_util:start_timer(SetupTime),
-	    case check_ip(Socket) of
-		true ->
-		    HSData = #hs_data{
-		      kernel_pid = Kernel,
-		      this_node = MyNode,
-		      socket = Socket,
-		      timer = Timer,
-		      this_flags = 0,
-		      allowed = Allowed,
-		      f_send = fun(S,D) -> ssl_prim:send(S,D) end,
-		      f_recv = fun(S,N,T) -> ssl_prim:recv(S,N,T) 
-			       end,
-		      f_setopts_pre_nodeup = 
-		      fun(S) ->
-			      ssl_prim:setopts(S, 
-					       [{active, false}])
-		      end,
-		      f_setopts_post_nodeup = 
-		      fun(S) ->
-			      ssl_prim:setopts(S, 
-					       [{deliver, port},
-						{active, true}])
-		      end,
-		      f_getll = fun(S) ->
-					ssl_prim:getll(S)
-				end,
-		      f_address = fun get_remote_id/2,
-		      mf_tick = fun ?MODULE:tick/1,
-		      mf_getstat = fun ?MODULE:getstat/1
-		     },
-		    dist_util:handshake_other_started(HSData);
-		{false,IP} ->
-		    error_msg("** Connection attempt from "
-			      "disallowed IP ~w ** ~n", [IP]),
-		    ?shutdown(no_node)
-	    end
-    end.
-
-%% ------------------------------------------------------------
-%% Get remote information about a Socket.
-%% ------------------------------------------------------------
-
-get_remote_id(Socket, Node) ->
-    {ok, Address} = ssl_prim:peername(Socket),
-    [_, Host] = split_node(atom_to_list(Node), $@, []),
-    #net_address {
-		  address = Address,
-		  host = Host,
-		  protocol = ssl,
-		  family = inet }.
-
-%% ------------------------------------------------------------
-%% Setup a new connection to another Erlang node.
-%% Performs the handshake with the other side.
-%% ------------------------------------------------------------
-
-setup(Node, Type, MyNode, LongOrShortNames,SetupTime) ->
-    spawn_link(?MODULE, do_setup, [self(),
-				   Node,
-				   Type,
-				   MyNode,
-				   LongOrShortNames,
-				   SetupTime]).
-
-%% Suppress dialyzer warning, we do not really care about old ssl code
-%% as we intend to remove it.
--spec(do_setup(_,_,_,_,_,_) -> no_return()).
-do_setup(Kernel, Node, Type, MyNode, LongOrShortNames,SetupTime) ->
-    process_flag(priority, max),
-    ?trace("~p~n",[{inet_ssl_dist,self(),setup,Node}]),
-    [Name, Address] = splitnode(Node, LongOrShortNames),
-    case inet:getaddr(Address, inet) of
-	{ok, Ip} ->
-	    Timer = dist_util:start_timer(SetupTime),
-	    case erl_epmd:port_please(Name, Ip) of
-		{port, TcpPort, Version} ->
-		    ?trace("port_please(~p) -> version ~p~n", 
-			   [Node,Version]),
-		    dist_util:reset_timer(Timer),
-		    case ssl_prim:connect(Ip, TcpPort, 
-					  [{active, false}, 
-					   {packet,4}] ++ 
-					  get_ssl_options(client)) of
-			{ok, Socket} ->
-			    HSData = #hs_data{
-			      kernel_pid = Kernel,
-			      other_node = Node,
-			      this_node = MyNode,
-			      socket = Socket,
-			      timer = Timer,
-			      this_flags = 0,
-			      other_version = Version,
-			      f_send = fun(S,D) -> 
-					       ssl_prim:send(S,D) 
-				       end,
-			      f_recv = fun(S,N,T) -> 
-					       ssl_prim:recv(S,N,T) 
-				       end,
-			      f_setopts_pre_nodeup = 
-			      fun(S) ->
-				      ssl_prim:setopts
-					(S, 
-					 [{active, false}])
-			      end,
-			      f_setopts_post_nodeup = 
-			      fun(S) ->
-				      ssl_prim:setopts
-					(S, 
-					 [{deliver, port},{active, true}])
-			      end,
-			      f_getll = fun(S) ->
-						ssl_prim:getll(S)
-					end,
-			      f_address = 
-			      fun(_,_) ->
-				      #net_address {
-				   address = {Ip,TcpPort},
-				   host = Address,
-				   protocol = ssl,
-				   family = inet}
-			      end,
-			      mf_tick = fun ?MODULE:tick/1,
-			      mf_getstat = fun ?MODULE:getstat/1,
-			      request_type = Type
-			     },
-			    dist_util:handshake_we_started(HSData);
-			_ ->
-			    %% Other Node may have closed since 
-			    %% port_please !
-			    ?trace("other node (~p) "
-				   "closed since port_please.~n", 
-				   [Node]),
-			    ?shutdown(Node)
-		    end;
-		_ ->
-		    ?trace("port_please (~p) "
-			   "failed.~n", [Node]),
-		    ?shutdown(Node)
-	    end;
-	_Other ->
-	    ?trace("inet_getaddr(~p) "
-		   "failed (~p).~n", [Node,Other]),
-	    ?shutdown(Node)
-    end.
-
-%%
-%% Close a socket.
-%%
-close(Socket) ->
-    ssl_prim:close(Socket).
-
-
-%% If Node is illegal terminate the connection setup!!
-splitnode(Node, LongOrShortNames) ->
-    case split_node(atom_to_list(Node), $@, []) of
-	[Name|Tail] when Tail =/= [] ->
-	    Host = lists:append(Tail),
-	    case split_node(Host, $., []) of
-		[_] when LongOrShortNames == longnames ->
-		    error_msg("** System running to use "
-			      "fully qualified "
-			      "hostnames **~n"
-			      "** Hostname ~s is illegal **~n",
-			      [Host]),
-		    ?shutdown(Node);
-		[_, _ | _] when LongOrShortNames == shortnames ->
-		    error_msg("** System NOT running to use fully qualified "
-			      "hostnames **~n"
-			      "** Hostname ~s is illegal **~n",
-			      [Host]),
-		    ?shutdown(Node);
-		_ ->
-		    [Name, Host]
-	    end;
-	[_] ->
-	    error_msg("** Nodename ~p illegal, no '@' character **~n",
-		      [Node]),
-	    ?shutdown(Node);
-	_ ->
-	    error_msg("** Nodename ~p illegal **~n", [Node]),
-	    ?shutdown(Node)
-    end.
-
-split_node([Chr|T], Chr, Ack) -> [lists:reverse(Ack)|split_node(T, Chr, [])];
-split_node([H|T], Chr, Ack)   -> split_node(T, Chr, [H|Ack]);
-split_node([], _, Ack)        -> [lists:reverse(Ack)].
-
-%% ------------------------------------------------------------
-%% Fetch local information about a Socket.
-%% ------------------------------------------------------------
-get_tcp_address(Socket) ->
-    {ok, Address} = ssl_prim:sockname(Socket),
-    {ok, Host} = inet:gethostname(),
-    #net_address {
-		  address = Address,
-		  host = Host,
-		  protocol = ssl,
-		  family = inet
-		 }.
-
-%% ------------------------------------------------------------
-%% Do only accept new connection attempts from nodes at our
-%% own LAN, if the check_ip environment parameter is true.
-%% ------------------------------------------------------------
-check_ip(Socket) ->
-    case application:get_env(check_ip) of
-	{ok, true} ->
-	    case get_ifs(Socket) of
-		{ok, IFs, IP} ->
-		    check_ip(IFs, IP);
-		_ ->
-		    ?shutdown(no_node)
-	    end;
-	_ ->
-	    true
-    end.
-
-get_ifs(Socket) ->
-    case ssl_prim:peername(Socket) of
-	{ok, {IP, _}} ->
-	    case ssl_prim:getif(Socket) of
-		{ok, IFs} -> {ok, IFs, IP};
-		Error     -> Error
-	    end;
-	Error ->
-	    Error
-    end.
-
-check_ip([{OwnIP, _, Netmask}|IFs], PeerIP) ->
-    case {mask(Netmask, PeerIP), mask(Netmask, OwnIP)} of
-	{M, M} -> true;
-	_      -> check_ip(IFs, PeerIP)
-    end;
-check_ip([], PeerIP) ->
-    {false, PeerIP}.
-    
-mask({M1,M2,M3,M4}, {IP1,IP2,IP3,IP4}) ->
-    {M1 band IP1,
-     M2 band IP2,
-     M3 band IP3,
-     M4 band IP4}.
-
-is_node_name(Node) when is_atom(Node) ->
-    case split_node(atom_to_list(Node), $@, []) of
-	[_, _Host] -> true;
-	_ -> false
-    end;
-is_node_name(_Node) ->
-    false.
-tick(Sock) ->
-    ?to_port(Sock,[],[force]).
-getstat(Socket) ->
-    case ssl_prim:getstat(Socket, [recv_cnt, send_cnt, send_pend]) of
-	{ok, Stat} ->
-	    split_stat(Stat,0,0,0);
-	Error ->
-	    Error
-    end.
-
-split_stat([{recv_cnt, R}|Stat], _, W, P) ->
-    split_stat(Stat, R, W, P);
-split_stat([{send_cnt, W}|Stat], R, _, P) ->
-    split_stat(Stat, R, W, P);
-split_stat([{send_pend, P}|Stat], R, W, _) ->
-    split_stat(Stat, R, W, P);
-split_stat([], R, W, P) ->
-    {ok, R, W, P}.
-
-
-get_ssl_options(Type) ->
-    case init:get_argument(ssl_dist_opt) of
-	{ok, Args} ->
-	    ssl_options(Type, Args);
-	_ ->
-	    []
-    end.
-
-ssl_options(_,[]) ->
-    [];
-ssl_options(server, [["server_certfile", Value]|T]) ->
-    [{certfile, Value} | ssl_options(server,T)];
-ssl_options(client, [["client_certfile", Value]|T]) ->
-    [{certfile, Value} | ssl_options(client,T)];
-ssl_options(server, [["server_cacertfile", Value]|T]) ->
-    [{cacertfile, Value} | ssl_options(server,T)];
-ssl_options(server, [["server_keyfile", Value]|T]) ->
-    [{keyfile, Value} | ssl_options(server,T)];
-ssl_options(Type, [["client_certfile", _Value]|T]) ->
-    ssl_options(Type,T);
-ssl_options(Type, [["server_certfile", _Value]|T]) ->
-    ssl_options(Type,T);
-ssl_options(Type, [[Item, Value]|T]) ->
-    [{atomize(Item),fixup(Value)} | ssl_options(Type,T)];
-ssl_options(Type, [[Item,Value |T1]|T2]) ->
-    ssl_options(atomize(Type),[[Item,Value],T1|T2]);
-ssl_options(_,_) ->
-    exit(malformed_ssl_dist_opt).
-    
-fixup(Value) ->
-    case catch list_to_integer(Value) of
-	{'EXIT',_} ->
-	    Value;
-	Int ->
-	    Int
-    end.
-
-atomize(List) when is_list(List) ->
-    list_to_atom(List);
-atomize(Atom) when is_atom(Atom) ->
-    Atom.
diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src
index afe19da900..13d5eaf4d7 100644
--- a/lib/ssl/src/ssl.app.src
+++ b/lib/ssl/src/ssl.app.src
@@ -4,14 +4,9 @@
     {modules, [ssl,
 	       ssl_app,
 	       ssl_sup,
-	       ssl_server,
-	       ssl_broker,
-	       ssl_broker_sup,
-	       ssl_prim,
 	       inet_tls_dist,
 	       ssl_tls_dist_proxy,
 	       ssl_dist_sup,
-	       inet_ssl_dist,
 	       ssl_tls1,
 	       ssl_ssl3,
 	       ssl_ssl2,
@@ -29,7 +24,7 @@
 	       ssl_certificate,
 	       ssl_alert
 	       ]},
-    {registered, [ssl_sup, ssl_server, ssl_broker_sup]},
+    {registered, [ssl_sup, ssl_manager]},
     {applications, [crypto, public_key, kernel, stdlib]},
     {env, []},
     {mod, {ssl_app, []}}]}.
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 55510e41e9..f812231c71 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -25,18 +25,18 @@
 
 -export([start/0, start/1, stop/0, transport_accept/1,
 	 transport_accept/2, ssl_accept/1, ssl_accept/2, ssl_accept/3,
-	 ciphers/0, cipher_suites/0, cipher_suites/1, close/1, shutdown/2,
+	 cipher_suites/0, cipher_suites/1, close/1, shutdown/2,
 	 connect/3, connect/2, connect/4, connection_info/1,
-	 controlling_process/2, listen/2, pid/1, peername/1, recv/2, recv/3,
-	 send/2, getopts/2, setopts/2, seed/1, sockname/1, peercert/1,
-	 peercert/2, version/0, versions/0, session_info/1, format_error/1,
+	 controlling_process/2, listen/2, pid/1, peername/1, recv/2,
+	 recv/3, send/2, getopts/2, setopts/2, sockname/1,
+	 versions/0, session_info/1, format_error/1,
 	 renegotiate/1]).
 
 %% Should be deprecated as soon as old ssl is removed
-%%-deprecated({pid, 1, next_major_release}).
--deprecated({peercert, 2, next_major_release}).
+-deprecated({pid, 1, next_major_release}).
+%-deprecated({peercert, 2, next_major_release}).
 
--include("ssl_int.hrl").
+%%-include("ssl_int.hrl").
 -include("ssl_internal.hrl").
 -include("ssl_record.hrl").
 -include("ssl_cipher.hrl").
@@ -134,20 +134,13 @@ connect(Socket, SslOptions0, Timeout) when is_port(Socket) ->
 connect(Host, Port, Options) ->
     connect(Host, Port, Options, infinity).
 
-connect(Host, Port, Options0, Timeout) ->
-    case proplists:get_value(ssl_imp, Options0, new) of
-        new ->
-            new_connect(Host, Port, Options0, Timeout);
-        old ->
-	    %% Allow the option reuseaddr to be present
-	    %% so that new and old ssl can be run by the same
-	    %% code, however the option will be ignored by old ssl
-	    %% that hardcodes reuseaddr to true in its portprogram.
-	    Options1 = proplists:delete(reuseaddr, Options0),
-	    Options  = proplists:delete(ssl_imp, Options1),
-            old_connect(Host, Port, Options, Timeout);
-	Value ->
-	    {error, {eoptions, {ssl_imp, Value}}}
+connect(Host, Port, Options, Timeout) ->
+    try handle_options(Options, client) of
+	{ok, Config} ->
+	    do_connect(Host,Port,Config,Timeout)
+    catch
+	throw:Error ->
+	    Error
     end.
 
 %%--------------------------------------------------------------------
@@ -159,21 +152,19 @@ connect(Host, Port, Options0, Timeout) ->
 listen(_Port, []) ->
     {error, enooptions};
 listen(Port, Options0) ->
-    case proplists:get_value(ssl_imp, Options0, new) of
-	new ->
-	    new_listen(Port, Options0);
-	old ->
-	    %% Allow the option reuseaddr to be present
-	    %% so that new and old ssl can be run by the same
-	    %% code, however the option will be ignored by old ssl
-	    %% that hardcodes reuseaddr to true in its portprogram.
-	    Options1 = proplists:delete(reuseaddr, Options0),
-	    Options  = proplists:delete(ssl_imp, Options1),
-	    old_listen(Port, Options);
-	Value ->
-	    {error, {eoptions, {ssl_imp, Value}}}
+    try
+	{ok, Config} = handle_options(Options0, server),
+	#config{cb={CbModule, _, _, _},inet_user=Options} = Config,
+	case CbModule:listen(Port, Options) of
+	    {ok, ListenSocket} ->
+		{ok, #sslsocket{pid = {ListenSocket, Config}, fd = new_ssl}};
+	    Err = {error, _} ->
+		Err
+	end
+    catch
+	Error = {error, _} ->
+	    Error
     end.
-
 %%--------------------------------------------------------------------
 -spec transport_accept(#sslsocket{}) -> {ok, #sslsocket{}} |
 					{error, reason()}.
@@ -185,8 +176,7 @@ listen(Port, Options0) ->
 transport_accept(ListenSocket) ->
     transport_accept(ListenSocket, infinity).
 
-transport_accept(#sslsocket{pid = {ListenSocket, #config{cb=CbInfo, ssl=SslOpts}},
-                            fd = new_ssl}, Timeout) ->
+transport_accept(#sslsocket{pid = {ListenSocket, #config{cb=CbInfo, ssl=SslOpts}}}, Timeout) ->
     
     %% The setopt could have been invoked on the listen socket
     %% and options should be inherited.
@@ -208,12 +198,7 @@ transport_accept(#sslsocket{pid = {ListenSocket, #config{cb=CbInfo, ssl=SslOpts}
 	    end;
 	{error, Reason} ->
 	    {error, Reason}
-    end;
-
-transport_accept(#sslsocket{} = ListenSocket, Timeout) ->
-    ensure_old_ssl_started(),
-    {ok, Pid} = ssl_broker:start_broker(acceptor),
-    ssl_broker:transport_accept(Pid, ListenSocket, Timeout).
+    end.
 
 %%--------------------------------------------------------------------
 -spec ssl_accept(#sslsocket{}) -> ok | {error, reason()}.
@@ -227,16 +212,11 @@ transport_accept(#sslsocket{} = ListenSocket, Timeout) ->
 ssl_accept(ListenSocket) ->
     ssl_accept(ListenSocket, infinity).
 
-ssl_accept(#sslsocket{fd = new_ssl} = Socket, Timeout) ->
+ssl_accept(#sslsocket{} = Socket, Timeout) ->
     ssl_connection:handshake(Socket, Timeout);
     
 ssl_accept(ListenSocket, SslOptions)  when is_port(ListenSocket) -> 
-    ssl_accept(ListenSocket, SslOptions, infinity);
-
-%% Old ssl
-ssl_accept(#sslsocket{} = Socket, Timeout)  ->
-    ensure_old_ssl_started(),
-    ssl_broker:ssl_accept(Socket, Timeout).
+    ssl_accept(ListenSocket, SslOptions, infinity).
 
 ssl_accept(Socket, SslOptions, Timeout) when is_port(Socket) -> 
     EmulatedOptions = emulated_options(),
@@ -257,25 +237,18 @@ ssl_accept(Socket, SslOptions, Timeout) when is_port(Socket) ->
 %%
 %% Description: Close an ssl connection
 %%--------------------------------------------------------------------  
-close(#sslsocket{pid = {ListenSocket, #config{cb={CbMod,_, _, _}}}, fd = new_ssl}) ->
+close(#sslsocket{pid = {ListenSocket, #config{cb={CbMod,_, _, _}}}}) ->
     CbMod:close(ListenSocket);
-close(#sslsocket{pid = Pid, fd = new_ssl}) ->
-    ssl_connection:close(Pid);
-close(Socket = #sslsocket{}) ->
-    ensure_old_ssl_started(),
-    ssl_broker:close(Socket).
+close(#sslsocket{pid = Pid}) ->
+    ssl_connection:close(Pid).
 
 %%--------------------------------------------------------------------
 -spec send(#sslsocket{}, iodata()) -> ok | {error, reason()}.
 %% 
 %% Description: Sends data over the ssl connection
 %%--------------------------------------------------------------------
-send(#sslsocket{pid = Pid, fd = new_ssl}, Data) ->
-    ssl_connection:send(Pid, Data);
-
-send(#sslsocket{} = Socket, Data) -> 
-    ensure_old_ssl_started(),
-    ssl_broker:send(Socket, Data).
+send(#sslsocket{pid = Pid}, Data) ->
+    ssl_connection:send(Pid, Data).
 
 %%--------------------------------------------------------------------
 -spec recv(#sslsocket{}, integer()) -> {ok, binary()| list()} | {error, reason()}.
@@ -286,11 +259,7 @@ send(#sslsocket{} = Socket, Data) ->
 recv(Socket, Length) ->
     recv(Socket, Length, infinity).
 recv(#sslsocket{pid = Pid, fd = new_ssl}, Length, Timeout) ->
-    ssl_connection:recv(Pid, Length, Timeout);
-
-recv(Socket = #sslsocket{}, Length, Timeout) ->
-    ensure_old_ssl_started(),
-    ssl_broker:recv(Socket, Length, Timeout).
+    ssl_connection:recv(Pid, Length, Timeout).
 
 %%--------------------------------------------------------------------
 -spec controlling_process(#sslsocket{}, pid()) -> ok | {error, reason()}.
@@ -298,13 +267,8 @@ recv(Socket = #sslsocket{}, Length, Timeout) ->
 %% Description: Changes process that receives the messages when active = true
 %% or once. 
 %%--------------------------------------------------------------------
-controlling_process(#sslsocket{pid = Pid, fd = new_ssl}, NewOwner) 
-  when is_pid(Pid) ->
-    ssl_connection:new_user(Pid, NewOwner);
-
-controlling_process(Socket, NewOwner) when is_pid(NewOwner) ->
-    ensure_old_ssl_started(),
-    ssl_broker:controlling_process(Socket, NewOwner).
+controlling_process(#sslsocket{pid = Pid}, NewOwner) when is_pid(Pid) ->
+    ssl_connection:new_user(Pid, NewOwner).
 
 %%--------------------------------------------------------------------
 -spec connection_info(#sslsocket{}) -> 	{ok, {tls_atom_version(), erl_cipher_suite()}} | 
@@ -312,80 +276,16 @@ controlling_process(Socket, NewOwner) when is_pid(NewOwner) ->
 %%
 %% Description: Returns ssl protocol and cipher used for the connection
 %%--------------------------------------------------------------------
-connection_info(#sslsocket{pid = Pid, fd = new_ssl}) ->
-    ssl_connection:info(Pid);
-
-connection_info(#sslsocket{} = Socket) -> 
-    ensure_old_ssl_started(),
-    ssl_broker:connection_info(Socket).
-
-%%--------------------------------------------------------------------
--spec peercert(#sslsocket{}) ->{ok, der_cert()} | {error, reason()}.
-%%
-%% Description: Returns the peercert.
-%%--------------------------------------------------------------------
-peercert(Socket) ->
-    peercert(Socket, []).
-
-peercert(#sslsocket{pid = Pid, fd = new_ssl}, Opts) ->
-    case ssl_connection:peer_certificate(Pid) of
-	{ok, undefined} ->
-	    {error, no_peercert};
-        {ok, BinCert} ->
-	    decode_peercert(BinCert, Opts);
-        {error, Reason}  ->
-            {error, Reason}
-    end;
-
-peercert(#sslsocket{} = Socket, Opts) ->
-    ensure_old_ssl_started(),
-    case ssl_broker:peercert(Socket) of
-        {ok, Bin} ->
-	    decode_peercert(Bin, Opts);
-        {error, Reason}  ->
-            {error, Reason}
-    end.
-
-
-decode_peercert(BinCert, Opts) ->
-    PKOpts = [case Opt of ssl -> otp; pkix -> plain end || 
-		 Opt <- Opts, Opt =:= ssl orelse Opt =:= pkix],
-    case PKOpts of
-	[Opt] ->
-	    select_part(Opt, public_key:pkix_decode_cert(BinCert, Opt), Opts);
-	[] ->
-	    {ok, BinCert}
-    end.
-
-select_part(otp, Cert, Opts) ->
-    case lists:member(subject, Opts) of 
-	true ->
-	    TBS = Cert#'OTPCertificate'.tbsCertificate,
-	    {ok, TBS#'OTPTBSCertificate'.subject};
-	false ->
-	    {ok, Cert}
-    end;
-
-select_part(plain, Cert, Opts) ->
-    case lists:member(subject, Opts) of 
-	true ->
-	    TBS = Cert#'Certificate'.tbsCertificate,
-	    {ok,  TBS#'TBSCertificate'.subject};
-	false ->
-	    {ok, Cert}
-    end.
+connection_info(#sslsocket{pid = Pid}) ->
+    ssl_connection:info(Pid).
 
 %%--------------------------------------------------------------------
 -spec peername(#sslsocket{}) -> {ok, {inet:ip_address(), inet:port_number()}} | {error, reason()}.
 %%
 %% Description: same as inet:peername/1.
 %%--------------------------------------------------------------------
-peername(#sslsocket{fd = new_ssl, pid = Pid}) ->
-    ssl_connection:peername(Pid);
-
-peername(#sslsocket{} = Socket) ->
-    ensure_old_ssl_started(),
-    ssl_broker:peername(Socket).
+peername(#sslsocket{pid = Pid}) ->
+    ssl_connection:peername(Pid).
 
 %%--------------------------------------------------------------------
 -spec cipher_suites() -> [erl_cipher_suite()].
@@ -410,9 +310,9 @@ cipher_suites(openssl) ->
 %% 
 %% Description: Gets options
 %%--------------------------------------------------------------------
-getopts(#sslsocket{fd = new_ssl, pid = Pid}, OptionTags) when is_pid(Pid), is_list(OptionTags) ->
+getopts(#sslsocket{pid = Pid}, OptionTags) when is_pid(Pid), is_list(OptionTags) ->
     ssl_connection:get_opts(Pid, OptionTags);
-getopts(#sslsocket{fd = new_ssl, pid = {ListenSocket, _}}, OptionTags) when is_list(OptionTags) ->
+getopts(#sslsocket{pid = {ListenSocket, _}}, OptionTags) when is_list(OptionTags) ->
     try inet:getopts(ListenSocket, OptionTags) of
 	{ok, _} = Result ->
 	    Result;
@@ -422,18 +322,15 @@ getopts(#sslsocket{fd = new_ssl, pid = {ListenSocket, _}}, OptionTags) when is_l
 	_:_ ->
 	    {error, {eoptions, {inet_options, OptionTags}}}
     end;
-getopts(#sslsocket{fd = new_ssl}, OptionTags) ->
-    {error, {eoptions, {inet_options, OptionTags}}};
-getopts(#sslsocket{} = Socket, OptionTags) ->
-    ensure_old_ssl_started(),
-    ssl_broker:getopts(Socket, OptionTags).
+getopts(#sslsocket{}, OptionTags) ->
+    {error, {eoptions, {inet_options, OptionTags}}}.
 
 %%--------------------------------------------------------------------
 -spec setopts(#sslsocket{},  [gen_tcp:option()]) -> ok | {error, reason()}.
 %% 
 %% Description: Sets options
 %%--------------------------------------------------------------------
-setopts(#sslsocket{fd = new_ssl, pid = Pid}, Options0) when is_pid(Pid), is_list(Options0)  ->
+setopts(#sslsocket{pid = Pid}, Options0) when is_pid(Pid), is_list(Options0)  ->
     try proplists:expand([{binary, [{mode, binary}]},
 			  {list, [{mode, list}]}], Options0) of
 	Options ->
@@ -443,7 +340,7 @@ setopts(#sslsocket{fd = new_ssl, pid = Pid}, Options0) when is_pid(Pid), is_list
 	    {error, {eoptions, {not_a_proplist, Options0}}}
     end;
 
-setopts(#sslsocket{fd = new_ssl, pid = {ListenSocket, _}}, Options) when is_list(Options) ->
+setopts(#sslsocket{pid = {ListenSocket, _}}, Options) when is_list(Options) ->
     try inet:setopts(ListenSocket, Options) of
 	ok ->
 	    ok;
@@ -453,20 +350,17 @@ setopts(#sslsocket{fd = new_ssl, pid = {ListenSocket, _}}, Options) when is_list
 	_:Error ->
 	    {error, {eoptions, {inet_options, Options, Error}}}
     end;
-setopts(#sslsocket{fd = new_ssl}, Options) ->
-    {error, {eoptions,{not_a_proplist, Options}}};
-setopts(#sslsocket{} = Socket, Options) ->
-    ensure_old_ssl_started(),
-    ssl_broker:setopts(Socket, Options).
+setopts(#sslsocket{}, Options) ->
+    {error, {eoptions,{not_a_proplist, Options}}}.
 
 %%---------------------------------------------------------------
 -spec shutdown(#sslsocket{}, read | write | read_write) ->  ok | {error, reason()}.
 %%		      
 %% Description: Same as gen_tcp:shutdown/2
 %%--------------------------------------------------------------------
-shutdown(#sslsocket{pid = {ListenSocket, #config{cb={CbMod,_, _, _}}}, fd = new_ssl}, How) ->
+shutdown(#sslsocket{pid = {ListenSocket, #config{cb={CbMod,_, _, _}}}}, How) ->
     CbMod:shutdown(ListenSocket, How);
-shutdown(#sslsocket{pid = Pid, fd = new_ssl}, How) ->
+shutdown(#sslsocket{pid = Pid}, How) ->
     ssl_connection:shutdown(Pid, How).
 
 %%--------------------------------------------------------------------
@@ -474,25 +368,11 @@ shutdown(#sslsocket{pid = Pid, fd = new_ssl}, How) ->
 %%		     
 %% Description: Same as inet:sockname/1
 %%--------------------------------------------------------------------
-sockname(#sslsocket{fd = new_ssl, pid = {ListenSocket, _}}) ->
+sockname(#sslsocket{pid = {ListenSocket, _}}) ->
     inet:sockname(ListenSocket);
 
-sockname(#sslsocket{fd = new_ssl, pid = Pid}) ->
-    ssl_connection:sockname(Pid);
-
-sockname(#sslsocket{} = Socket) ->
-    ensure_old_ssl_started(),
-    ssl_broker:sockname(Socket).
-
-%%---------------------------------------------------------------
--spec seed(term()) ->term().
-%% 
-%% Description: Only used by old ssl.
-%%--------------------------------------------------------------------
-%% TODO: crypto:seed ?
-seed(Data) ->
-    ensure_old_ssl_started(),
-    ssl_server:seed(Data).
+sockname(#sslsocket{pid = Pid}) ->
+    ssl_connection:sockname(Pid).
 
 %%---------------------------------------------------------------
 -spec session_info(#sslsocket{}) -> {ok, list()} | {error, reason()}.
@@ -548,63 +428,6 @@ format_error(esslconnect) ->
 format_error({eoptions, Options}) ->
     lists:flatten(io_lib:format("Error in options list: ~p~n", [Options]));
 
-%%%%%%%%%%%%  START OLD SSL format_error %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-format_error(ebadsocket) ->
-    "Connection not found (internal error).";
-format_error(ebadstate) ->
-    "Connection not in connect state (internal error).";
-format_error(ebrokertype) ->
-    "Wrong broker type (internal error).";
-format_error(echaintoolong) ->
-    "The chain of certificates provided by peer is too long.";
-format_error(ecipher) ->
-    "Own list of specified ciphers is invalid.";
-format_error(ekeymismatch) ->
-    "Own private key does not match own certificate.";
-format_error(enoissuercert) ->
-    "Cannot find certificate of issuer of certificate provided by peer.";
-format_error(enoservercert) ->
-    "Attempt to do accept without having set own certificate.";
-format_error(enotlistener) ->
-    "Attempt to accept on a non-listening socket.";
-format_error(enoproxysocket) ->
-    "No proxy socket found (internal error or max number of file "
-        "descriptors exceeded).";
-format_error(enooptions) ->
-    "List of options is empty.";
-format_error(enotstarted) ->
-    "The SSL application has not been started.";
-format_error(eoptions) ->
-    "Invalid list of options.";
-format_error(epeercert) ->
-    "Certificate provided by peer is in error.";
-format_error(epeercertexpired) ->
-    "Certificate provided by peer has expired.";
-format_error(epeercertinvalid) ->
-    "Certificate provided by peer is invalid.";
-format_error(eselfsignedcert) ->
-    "Certificate provided by peer is self signed.";
-format_error(esslerrssl) ->
-    "SSL protocol failure. Typically because of a fatal alert from peer.";
-format_error(ewantconnect) ->
-    "Protocol wants to connect, which is not supported in this "
-        "version of the SSL application.";
-format_error(ex509lookup) ->
-    "Protocol wants X.509 lookup, which is not supported in this "
-        "version of the SSL application.";
-format_error({badcall, _Call}) ->
-    "Call not recognized for current mode (active or passive) and state "
-        "of socket.";
-format_error({badcast, _Cast}) ->
-    "Call not recognized for current mode (active or passive) and state "
-        "of socket.";
-
-format_error({badinfo, _Info}) ->
-    "Call not recognized for current mode (active or passive) and state "
-        "of socket.";
-
-%%%%%%%%%%%%%%%%%% END OLD SSL format_error %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 format_error(Error) ->
     case (catch inet:format_error(Error)) of
         "unkknown POSIX" ++ _ ->
@@ -618,16 +441,7 @@ format_error(Error) ->
 %%%--------------------------------------------------------------
 %%% Internal functions
 %%%--------------------------------------------------------------------
-new_connect(Address, Port, Options, Timeout) when is_list(Options) ->
-    try handle_options(Options, client) of
-	{ok, Config} ->
-	    do_new_connect(Address,Port,Config,Timeout)
-    catch 
-	throw:Error ->
-	    Error
-    end.
-
-do_new_connect(Address, Port,
+do_connect(Address, Port,
 	       #config{cb=CbInfo, inet_user=UserOpts, ssl=SslOpts,
 		       emulated=EmOpts,inet_ssl=SocketOpts},
 	       Timeout) ->
@@ -647,35 +461,9 @@ do_new_connect(Address, Port,
 	    {error, {eoptions, {inet_options, UserOpts}}}
     end.
 
-old_connect(Address, Port, Options, Timeout) ->
-    ensure_old_ssl_started(),
-    {ok, Pid} = ssl_broker:start_broker(connector),
-    ssl_broker:connect(Pid, Address, Port, Options, Timeout).
-
-new_listen(Port, Options0) ->
-    try 
-	{ok, Config} = handle_options(Options0, server),
-	#config{cb={CbModule, _, _, _},inet_user=Options} = Config,
-	case CbModule:listen(Port, Options) of
-	    {ok, ListenSocket} ->
-		{ok, #sslsocket{pid = {ListenSocket, Config}, fd = new_ssl}};
-	    Err = {error, _} ->
-		Err
-	end
-    catch 
-	Error = {error, _} ->
-	    Error
-    end.
-	    
-old_listen(Port, Options) ->
-    ensure_old_ssl_started(),
-    {ok, Pid} = ssl_broker:start_broker(listener),
-    ssl_broker:listen(Pid, Port, Options).
-
 handle_options(Opts0, _Role) ->
     Opts = proplists:expand([{binary, [{mode, binary}]},
 			     {list, [{mode, list}]}], Opts0),
-    
     ReuseSessionFun = fun(_, _, _, _) -> true end,
 
     DefaultVerifyNoneFun =
@@ -769,8 +557,6 @@ handle_option(OptionName, Opts, Default) ->
 
 validate_option(versions, Versions)  ->
     validate_versions(Versions, Versions);
-validate_option(ssl_imp, Value) when Value == new; Value == old ->
-    Value;
 validate_option(verify, Value) 
   when Value == verify_none; Value == verify_peer ->
     Value;
@@ -913,7 +699,6 @@ emulated_options() ->
 
 internal_inet_values() ->
     [{packet_size,0},{packet, 0},{header, 0},{active, false},{mode,binary}].
-    %%[{packet, ssl},{header, 0},{active, false},{mode,binary}].
 
 socket_options(InetValues) ->
     #socket_options{
@@ -974,47 +759,14 @@ cipher_suites(Version, Ciphers0)  ->
 
 no_format(Error) ->    
     lists:flatten(io_lib:format("No format string for error: \"~p\" available.", [Error])).
-
-%% Start old ssl port program if needed.
-ensure_old_ssl_started() ->
-    case whereis(ssl_server) of
-	undefined ->
-	    (catch supervisor:start_child(ssl_sup, 
-				   {ssl_server, {ssl_server, start_link, []},
-				    permanent, 2000, worker, [ssl_server]}));
-	_ ->
-	    ok
-    end.
-
-%%%%%%%%%%%%%%%% Deprecated %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-ciphers() -> 
-    ensure_old_ssl_started(),
-    case (catch ssl_server:ciphers()) of
-        {'EXIT', _} ->
-            {error, enotstarted};
-        Res = {ok, _}  ->
-            Res
-    end.
-
-version() -> 
-    ensure_old_ssl_started(),
-    SSLVsn = ?VSN,
-    {CompVsn, LibVsn} = case (catch ssl_server:version()) of
-                            {'EXIT', _} ->
-                                {"", ""};
-                            {ok, Vsns}  ->
-                                Vsns
-                        end,
-    {ok, {SSLVsn, CompVsn, LibVsn}}.
-
                                 
 %% Only used to remove exit messages from old ssl
 %% First is a nonsense clause to provide some
 %% backward compability for orber that uses this
 %% function in a none recommended way, but will
 %% work correctly if a valid pid is returned.
+%% Deprcated to be removed in r16
 pid(#sslsocket{fd = new_ssl}) ->
-    whereis(ssl_connection_sup);
+     whereis(ssl_connection_sup);
 pid(#sslsocket{pid = Pid}) ->
-    Pid.
+     Pid.
diff --git a/lib/ssl/src/ssl_broker.erl b/lib/ssl/src/ssl_broker.erl
deleted file mode 100644
index 7ef88baf2b..0000000000
--- a/lib/ssl/src/ssl_broker.erl
+++ /dev/null
@@ -1,1188 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-
-%%% Purpose : SSL broker
-
--module(ssl_broker).
--behaviour(gen_server).
-
-%% This module implements brokers for ssl. A broker is either a connector, 
-%% an acceptor, or a listener. All brokers are children to ssl_broker_sup,
-%% to which they are linked. Each broker is also linked to ssl_server, and
-%% to its client.
-%%
-%% The purpose of the broker is to set up SSL connections through calls to
-%% ssl_server and gen_tcp. All control information goes to the server,
-%% while all data is exchanged directly between gen_tcp and the port program
-%% of the ssl_server.
-%%
-%% A broker is created by a call to start_broker/3 (do *not* use start_link/4
-%% - it is for ssl_broker_sup to call that one), and then call listen/3, 
-%% accept/4, or connect/5. 
-%%
-%% The following table shows all functions dependency on status, active 
-%% mode etc.
-%%
-%% Permitted status transitions: 
-%%
-%%		nil	->	open 
-%%		open	->	closing | closed (termination)
-%%		closing	->	closed (termination)
-%%
-%% We are rather sloppy about nil, and consider open/closing == !closed,
-%% open/closing/closed === any  etc.
-%%
-%%
-%%	function/	 valid			mode		new
-%%	message		 status					state
-%%								
-%%	calls							
-%%	-----							
-%%	recv		 open			passive		ditto
-%%	send		 open			any		ditto
-%%	transport_accept nil			any		open
-%%      ssl_accept       nil                    any             open
-%%	connect		 nil			any		open
-%%	listen		 nil			any		open
-%%	peername	 open/closing		any		ditto
-%%	setopts		 open/closing		any		ditto
-%%	getopts		 open/closing		any		ditto
-%%	sockname	 open/closing		any		ditto
-%%	peercert	 open/closing		any		ditto
-%%	inhibit		 any			any		ditto
-%%	release		 any			any		ditto
-%%	close		 any			any		closed (1)
-%%
-%%	info							
-%%	----							
-%%	tcp		 open			active		ditto
-%%	tcp_closed	 open | closing		active		closing
-%%	tcp_error	 open | closing		active		closing
-%%
-%%	(1) We just terminate.
-%%
-%% TODO
-%%
-%% XXX Timeouts are not checked (integer or infinity).
-%%
-%% XXX The collector thing is not gen_server compliant.
-%%
-%% NOTE: There are three different "modes": (a) passive or active mode,
-%% specified as {active, bool()}, and (b) list or binary mode, specified 
-%% as {mode, list | binary}, and (c) encrypted or clear mode
-%%
-
--include("ssl_int.hrl").
-
-%% External exports 
-
--export([start_broker/1, start_broker/2, start_link/3,
-	 transport_accept/3, ssl_accept/2,
-	 close/1, connect/5, connection_info/1, controlling_process/2,
-	 listen/3, recv/3, send/2, getopts/2, getopts/3, setopts/2,
-	 sockname/1, peername/1, peercert/1]).
-
--export([listen_prim/5, connect_prim/8,
-	 transport_accept_prim/5, ssl_accept_prim/6]).
-
-%% Internal exports 
-
--export([init/1, handle_call/3, handle_cast/2, handle_info/2,
-	 code_change/3, terminate/2, collector_init/1]).
-
--include("ssl_broker_int.hrl").
-
-%% start_broker(Type) -> {ok, Pid} | {error, Reason}
-%% start_broker(Type, GenOpts) -> {ok, Pid} | {error, Reason}
-%%            Type = accept | connect | listen
-%%            GenOpts = /standard gen_server options/
-%%
-%% This is the function to be called from the interface module ssl.erl.
-%% Links to the caller.
-%%
-start_broker(Type) ->
-    start_broker(Type, []).
-
-start_broker(Type, GenOpts) ->
-    case lists:member(Type, [listener, acceptor, connector]) of
-	true ->
-	    case supervisor:start_child(ssl_broker_sup, 
-					[self(), Type, GenOpts]) of
-		{ok, Pid} ->
-		    link(Pid),
-		    {ok, Pid};
-		{error, Reason} ->
-		    {error, Reason}
-	    end;
-	false  ->
-	    {error, ebrokertype}
-    end.
-
-%% start_link(Client, Type, GenOpts) -> {ok, Pid} | {error, Reason}
-%%	      
-%%	Type = accept | connect | listen
-%%	GenOpts = /standard gen_server options/
-%%
-%% This function is called by ssl_broker_sup and must *not* be called
-%% from an interface module (ssl.erl).
-
-start_link(Client, Type, GenOpts) ->
-    gen_server:start_link(?MODULE, [Client, Type], GenOpts).
-
-
-%% accept(Pid, ListenSocket, Timeout) -> {ok, Socket} | {error, Reason}
-%%  
-%% Types:   Pid = pid() of acceptor
-%%          ListenSocket = Socket = sslsocket()
-%% 	    Timeout = timeout()
-%%
-%% accept(Pid, ListenSocket, Timeout) 
-%%   when is_pid(Pid), is_record(ListenSocket, sslsocket) ->
-%%     Req = {accept, self(), ListenSocket, Timeout},
-%%     gen_server:call(Pid, Req, infinity).
-
-%% transport_accept(Pid, ListenSocket, Timeout) -> {ok, Socket} | 
-%% 						   {error, Reason}
-%%  
-%% Types:   Pid = pid() of acceptor
-%%          ListenSocket = Socket = sslsocket()
-%% 	    Timeout = timeout()
-%%
-transport_accept(Pid, #sslsocket{} = ListenSocket, Timeout) when is_pid(Pid) ->
-     Req = {transport_accept, self(), ListenSocket, Timeout},
-     gen_server:call(Pid, Req, infinity).
-
-%% ssl_accept(Pid, Socket, Timeout) -> {ok, Socket} | {error, Reason}
-%%
-%% Types:   Pid = pid() of acceptor
-%%          ListenSocket = Socket = sslsocket()
-%% 	    Timeout = timeout()
-%%
-ssl_accept(#sslsocket{pid = Pid} = Socket, Timeout) ->
-    Req = {ssl_accept, self(), Socket, Timeout},
-    gen_server:call(Pid, Req, infinity).
-
-%% close(Socket) -> ok | {error, Reason}
-%%  
-%% Types:   Socket = sslsocket() | pid()
-%%
-close(#sslsocket{pid = Pid}) ->
-    close(Pid);
-close(Pid) when is_pid(Pid) ->
-    gen_server:call(Pid, {close, self()}, infinity).
-
-%% connect(Pid, Address, Port, Opts, Timeout) -> {ok, Socket} | {error, Reason}
-%%  
-%% Types:   Pid = pid() of connector
-%%          Address  = string() | {byte(), byte(), byte(), byte()}
-%%          Port = int()
-%%          Opts = options()
-%% 	    Timeout = timeout()
-%%          Socket = sslsocket()
-%%
-connect(Pid, Address, Port, Opts, Timeout) when is_pid(Pid), is_list(Opts) ->
-    case are_connect_opts(Opts) of
-	true ->
-	    Req = {connect, self(), Address, Port, Opts, Timeout},
-	    gen_server:call(Pid, Req, infinity);
-	false  ->
-	    {error, eoptions}
-    end.
-
-%%
-%% connection_info(Socket) -> {ok, {Protocol, Cipher} | {error, Reason}
-%%
-connection_info(#sslsocket{pid = Pid}) ->
-    Req = {connection_info, self()},
-    gen_server:call(Pid, Req, infinity).
-
-%% controlling_process(Socket, NewOwner) -> ok | {error, Reason}
-
-controlling_process(#sslsocket{pid = Pid}, NewOwner) when is_pid(NewOwner) ->
-    case gen_server:call(Pid, {inhibit_msgs, self()}, infinity) of
-	ok ->
-	    transfer_messages(Pid, NewOwner),
-	    gen_server:call(Pid, {release_msgs, self(), NewOwner}, infinity);
-	Error ->
-	    Error
-    end.
-
-%% listen(Pid, Port, Opts) -> {ok, ListenSocket} | {error, Reason}
-%%  
-%% Types:   Pid = pid() of listener
-%%          Port = int()
-%%          Opts = options()
-%%          ListenSocket = sslsocket()
-%%
-listen(Pid, Port, Opts) when is_pid(Pid) ->
-    case are_listen_opts(Opts) of
-	true ->
-	    Req = {listen, self(), Port, Opts}, 
-	    gen_server:call(Pid, Req, infinity);
-	false  ->
-	    {error, eoptions}
-    end.
-
-
-%%
-%% peername(Socket) -> {ok, {Address, Port}} | {error, Reason}
-%%
-peername(#sslsocket{pid = Pid}) ->
-    Req = {peername, self()},
-    gen_server:call(Pid, Req, infinity).
-
-
-%% recv(Socket, Length, Timeout) -> {ok, Data} | {error, Reason}
-%%
-%% Types:   Socket = sslsocket()
-%%          Length = Timeout = integer()
-%%          Data = bytes() | binary()
-%%
-recv(#sslsocket{pid = Pid}, Length, Timeout) ->
-    Req = {recv, self(), Length, Timeout}, 
-    gen_server:call(Pid, Req, infinity).
-
-
-%% send(Socket, Data) -> ok | {error, Reason}
-%%  
-%% Types:   Socket = sslsocket()
-%%
-send(#sslsocket{pid = Pid}, Data) ->
-    gen_server:call(Pid, {send, self(), Data}, infinity).
-
-
-%% getopts(Socket, OptTags) -> {ok, Opts} | {error, einval}
-%%  
-%% Types:	Pid = pid() of broker
-%%  		Timeout = timeout()
-%%		OptTags = option_tags()
-%%		Opts = options()
-%%
-getopts(Socket, OptTags) ->
-    getopts(Socket, OptTags, infinity).
-
-getopts(#sslsocket{pid = Pid}, OptTags, Timeout) when is_list(OptTags) ->
-    Req = {getopts, self(), OptTags}, 
-    gen_server:call(Pid, Req, Timeout).
-
-
-%%
-%% setopts(Socket, Opts) -> ok | {error, Reason}
-%%
-setopts(#sslsocket{pid = Pid}, Opts) ->
-    Req = {setopts, self(), Opts},
-    gen_server:call(Pid, Req, infinity).
-
-%%
-%% sockname(Socket) -> {ok, {Address, Port}} | {error, Reason}
-%%
-sockname(#sslsocket{pid = Pid}) ->
-    Req = {sockname, self()},
-    gen_server:call(Pid, Req, infinity).
-
-
-%%
-%% peercert(Socket) -> {ok, Cert} | {error, Reason}
-%%
-peercert(#sslsocket{pid = Pid}) ->
-    Req = {peercert, self()},
-    gen_server:call(Pid, Req, infinity).
-
-%%
-%%  INIT
-%%
-
-%% init
-%%
-init([Client, Type]) ->
-    process_flag(trap_exit, true),
-    link(Client),
-    Debug = case application:get_env(ssl, edebug) of
-		{ok, true} -> 
-		    true;
-		_ ->
-		    case application:get_env(ssl, debug) of
-			{ok, true} ->
-			    true;
-			_  ->
-			    os:getenv("ERL_SSL_DEBUG") =/= false
-		    end
-	    end,
-    Server = whereis(ssl_server),
-    if 
-	is_pid(Server) ->
-	    link(Server),
-	    debug1(Debug, Type, "in start, client = ~w", [Client]),
-	    {ok, #st{brokertype = Type, server = Server, client = Client,
-		     collector = Client, debug = Debug}};
-	true  ->
-	    {stop, no_ssl_server}
-    end.
-
-
-%%
-%% HANDLE CALL
-%%
-
-%% recv - passive mode
-%%
-handle_call({recv, Client, Length, Timeout}, _From,
-	    #st{active = false, proxysock = Proxysock, status = Status} = St) ->
-    debug(St, "recv: client = ~w~n", [Client]),
-    if 
-	Status =/= open ->
- 	    {reply, {error, closed}, St};
-	true ->
-	    case gen_tcp:recv(Proxysock, Length, Timeout) of
-		{ok, Data} ->
-		    {reply, {ok, Data}, St};
-		{error, timeout} ->
-		    {reply, {error, timeout}, St};
-		{error, Reason} ->
-		    {reply, {error, Reason}, St#st{status = closing}}
-	    end
-    end;
-
-%% send
-%% 
-handle_call({send, Client, Data}, _From, St) ->
-    debug(St, "send: client = ~w~n", [Client]),
-    if 
-	St#st.status =/= open ->
- 	    {reply, {error, closed}, St};
-	true ->
-	    case gen_tcp:send(St#st.proxysock, Data) of
-		ok ->
-		    {reply, ok, St};
-		{error, _Reason} ->
-		    {reply, {error, closed}, St#st{status = closing}}
-	    end
-    end;
-
-%% transport_accept 
-%% 
-%% Client = pid of client 
-%% ListenSocket = sslsocket()
-%%
-handle_call({transport_accept, Client, ListenSocket, Timeout}, _From, St) ->
-    debug(St, "transport_accept: client = ~w, listensocket = ~w~n", 
-	  [Client, ListenSocket]),
-    case getopts(ListenSocket, tcp_listen_opt_tags(), ?DEF_TIMEOUT) of 
-	{ok, LOpts} ->
-	    case transport_accept_prim(
-		   ssl_server, ListenSocket#sslsocket.fd, LOpts, Timeout, St) of
-		{ok, ThisSocket, NSt} ->
-		    {reply, {ok, ThisSocket}, NSt};
-		{error, Reason, St} ->
-		    What = what(Reason),
-		    {stop, normal, {error, What}, St}
-	    end;
-	{error, Reason} ->
-	    What = what(Reason),
-	    {stop, normal, {error, What}, St}
-    end;
-
-%% ssl_accept 
-%% 
-%% Client = pid of client 
-%% ListenSocket = sslsocket()
-%%
-handle_call({ssl_accept, Client, Socket, Timeout}, _From, St) ->
-    debug(St, "ssl_accept: client = ~w, socket = ~w~n", [Client, Socket]),
-    case ssl_accept_prim(ssl_server, gen_tcp, Client, St#st.opts, Timeout, St#st{thissock=Socket}) of
-	{ok, Socket, NSt} ->
-	    {reply, ok, NSt};
-	{error, Reason, St} ->
-	    What = what(Reason),
-	    {stop, normal, {error, What}, St}
-    end;
-
-%% connect
-%%
-%% Client = client pid
-%% Address = hostname | ipstring | IP
-%% Port = integer()
-%% Opts = options()
-%%
-handle_call({connect, Client, Address, Port, Opts, Timeout}, _From, St) ->
-    debug(St, "connect: client = ~w, address = ~p, port = ~w~n",
-	  [Client, Address, Port]),
-    case connect_prim(ssl_server, gen_tcp, Client, Address, Port, Opts, 
-		      Timeout, St) of
-	{ok, Res, NSt} ->
-	    {reply, {ok, Res}, NSt};
-	{error, Reason, NSt} ->
-	    What = what(Reason),
-	    {stop, normal, {error, What}, NSt}
-    end;
-
-%% connection_info
-%%
-handle_call({connection_info, Client}, _From, St) ->
-    debug(St, "connection_info: client = ~w~n", [Client]),
-    Reply = ssl_server:connection_info(St#st.fd),
-    {reply, Reply, St};
-
-%% close from client
-%%
-handle_call({close, Client}, _From, St) ->
-    debug(St, "close: client = ~w~n", [Client]),
-    %% Terminate
-    {stop, normal, ok, St#st{status = closed}};
-
-%% listen
-%% 
-%% Client = pid of client
-%% Port = int()
-%% Opts = options()
-%%
-handle_call({listen, Client, Port, Opts}, _From, St) ->
-    debug(St, "listen: client = ~w, port = ~w~n",
-	  [Client, Port]),
-    case listen_prim(ssl_server, Client, Port, Opts, St) of
-	{ok, Res, NSt} ->
-	    {reply, {ok, Res}, NSt};
-	{error, Reason, NSt} ->
-	    What = what(Reason),
-	    {stop, normal, {error, What}, NSt}
-    end;
-
-%% peername
-%%
-handle_call({peername, Client}, _From, St) ->
-    debug(St, "peername: client = ~w~n", [Client]),
-    Reply = case ssl_server:peername(St#st.fd) of
-		{ok, {Address, Port}} ->
-		    {ok, At} = inet_parse:ipv4_address(Address),
-		    {ok, {At, Port}};
-		Error ->
-		    Error
-	    end,
-    {reply, Reply, St};
-
-%% setopts
-%%
-handle_call({setopts, Client, Opts0}, _From, St0) ->
-    debug(St0, "setopts: client = ~w~n", [Client]),
-    OptsOK = case St0#st.brokertype of
-		 listener ->
-		     are_opts(fun is_tcp_listen_opt/1, Opts0);
-		 acceptor ->
-		     are_opts(fun is_tcp_accept_opt/1, Opts0);
-		 connector ->
-		     are_opts(fun is_tcp_connect_opt/1, Opts0)
-	     end,
-    if 
-	OptsOK =:= false ->
-	    {reply, {error, eoptions}, St0};
-	true ->
-	    Opts1 = lists:keydelete(nodelay, 1, Opts0),
-	    case inet:setopts(St0#st.proxysock, Opts1) of
-		ok ->
-		    Opts2 = replace_opts(Opts1, St0#st.opts),
-		    Active = get_active(Opts2),
-		    St2 = St0#st{opts = Opts2, 
-				 active = Active},
-		    case get_nodelay(Opts0) of
-			empty ->
-			    {reply, ok, St2};
-			Bool ->
-			    case setnodelay(ssl_server, St0, Bool) of
-				ok ->
-				    Opts3 = replace_opts([{nodelay, Bool}],
-							 Opts2),
-				    St3 = St0#st{opts = Opts3, 
-						 active = Active},
-				    {reply, ok, St3};
-				{error, Reason} ->
-				    {reply, {error, Reason}, St2}
-			    end
-		    end;
-		{error, Reason} ->
-		    {reply, {error, Reason}, St0}
-	    end
-    end;
-
-%% sockname
-%%
-handle_call({sockname, Client}, _From, St) ->
-    debug(St, "sockname: client = ~w~n", [Client]),
-    Reply = case ssl_server:sockname(St#st.fd) of
-		{ok, {Address, Port}} ->
-		    {ok, At} = inet_parse:ipv4_address(Address),
-		    {ok, {At, Port}};
-		Error ->
-		    Error
-	    end,
-    {reply, Reply, St};
-
-%% peercert
-%%
-handle_call({peercert, Client}, _From, St) ->
-    debug(St, "peercert: client = ~w~n", [Client]),
-    Reply = ssl_server:peercert(St#st.fd),
-    {reply, Reply, St};
-
-%% inhibit msgs
-%%
-handle_call({inhibit_msgs, Client}, _From, #st{client = Client} = St) ->
-    debug(St, "inhibit_msgs: client = ~w~n", [Client]),
-    {ok, Collector} = start_collector(),
-    {reply, ok, St#st{collector = Collector}};
-
-%% release msgs
-%%
-handle_call({release_msgs, Client, NewClient}, _From,
-	    #st{client = Client, collector = Collector} = St) ->
-    debug(St, "release_msgs: client = ~w~n", [Client]),
-    unlink(Client),
-    link(NewClient),
-    release_collector(Collector, NewClient),
-    NSt = St#st{client = NewClient, collector = NewClient},
-    {reply, ok, NSt};
-
-%% getopts
-%%
-handle_call({getopts, Client, OptTags}, _From, St) ->
-    debug(St, "getopts: client = ~w~n", [Client]),
-    Reply = case are_opt_tags(St#st.brokertype, OptTags) of
-		true ->
-		    {ok, extract_opts(OptTags, St#st.opts)};
-		_ ->
-		    {error, einval}
-	    end,
-    {reply, Reply, St};
-
-%% bad call
-%%
-handle_call(Request, _From, St) ->
-    debug(St, "++++ ssl_broker: bad call: ~w~n", [Request]),
-    {reply, {error, {badcall, Request}}, St}.
-
-%%
-%% HANDLE CAST
-%%
-
-handle_cast(Request, St) ->
-    debug(St, "++++ ssl_broker: bad cast: ~w~n", [Request]),
-    {stop, {error, {badcast, Request}}, St}.
-
-%% 
-%% HANDLE INFO
-%%
-
-%% tcp - active mode
-%%
-%% The collector is different from client only during change of
-%% controlling process.
-%%
-handle_info({tcp, Socket, Data},
-	    #st{active = Active, collector = Collector, status = open,
-		proxysock = Socket, thissock = Thissock} = St) 
-  when Active =/= false ->
-    debug(St, "tcp: socket = ~w~n", [Socket]),
-    Msg = {ssl, Thissock, Data},
-    Collector ! Msg,
-    if
-	Active =:= once -> 
-	    {noreply, St#st{active = false}};
-	true -> 
-	    {noreply, St}
-    end;
-
-%% tcp_closed - from proxy socket, active mode
-%%
-%%
-handle_info({tcp_closed, Socket},
-	    #st{active = Active, collector = Collector,
-		proxysock = Socket, thissock = Thissock} = St) 
-  when Active =/= false ->
-    debug(St, "tcp_closed: socket = ~w~n", [Socket]),
-    Msg = {ssl_closed, Thissock},
-    Collector ! Msg,
-    if
-	Active =:= once -> 
-	    {noreply, St#st{status = closing, active = false}};
-	true ->
-	    {noreply, St#st{status = closing}}
-    end;
-
-%% tcp_error - from proxy socket, active mode
-%%
-%%
-handle_info({tcp_error, Socket, Reason},
-	    #st{active = Active, collector = Collector,
-		proxysock = Socket} = St) 
-  when Active =/= false ->
-    debug(St, "tcp_error: socket = ~w, reason = ~w~n", [Socket, Reason]),
-    Msg = {ssl_error, Socket, Reason},
-    Collector ! Msg,
-    if
-	Active =:= once -> 
-	    {noreply, St#st{status = closing, active = false}};
-	true ->
-	    {noreply, St#st{status = closing}}
-    end;
-
-%% EXIT - from client
-%% 
-%%
-handle_info({'EXIT', Client, Reason}, #st{client = Client} = St) ->
-    debug(St, "exit client: client = ~w, reason = ~w~n", [Client, Reason]),
-    {stop, normal, St#st{status = closed}};	% do not make noise
-
-%% EXIT - from server
-%%
-%%
-handle_info({'EXIT', Server, Reason}, #st{server = Server} = St) ->
-    debug(St, "exit server: reason = ~w~n", [Reason]),
-    {stop, Reason, St};
-
-%% handle info catch all
-%%
-handle_info(Info, St) ->
-    debug(St, " bad info: ~w~n", [Info]),
-    {stop, {error, {badinfo, Info}}, St}.
-
-
-%% terminate
-%%
-%% 
-terminate(Reason, St) ->
-    debug(St, "in terminate reason: ~w, state: ~w~n", [Reason, St]),
-    ok.
-
-%% code_change
-%%
-%%
-code_change(_OldVsn, State, _Extra) ->
-    {ok, State}.
-
-%%
-%% Primitive interface
-%%
-listen_prim(ServerName, Client, Port, Opts, St) ->
-    LOpts = get_tcp_listen_opts(Opts),
-    SSLOpts = get_ssl_opts(Opts),
-    FlagStr =mk_ssl_optstr(SSLOpts),
-    BackLog = get_backlog(LOpts),
-    IP = get_ip(LOpts),
-    case ssl_server:listen_prim(ServerName, IP, Port, FlagStr, BackLog) of
-	{ok, ListenFd, _Port0} ->
-	    ThisSocket = #sslsocket{fd = ListenFd, pid = self()},
-	    StOpts = add_default_tcp_listen_opts(LOpts) ++
-		add_default_ssl_opts(SSLOpts),
-	    NSt = St#st{fd = ListenFd, 
-			active = get_active(LOpts), % irrelevant for listen
-			opts = StOpts,
-			thissock = ThisSocket, 
-			status = open},
-	    debug(St, "listen: ok: client = ~w, listenfd = ~w~n", 
-		  [Client, ListenFd]),
-	    {ok, ThisSocket, NSt};
-	{error, Reason} ->
-	    {error, Reason, St}
-    end.
-
-connect_prim(ServerName, TcpModule, Client, FAddress, FPort, Opts, 
-	     Timeout, St) ->
-    COpts = get_tcp_connect_opts(Opts),
-    SSLOpts = get_ssl_opts(Opts),
-    FlagStr = mk_ssl_optstr(SSLOpts),
-    case inet:getaddr(FAddress, inet) of
-	{ok, FIP} ->
-	    %% Timeout is gen_server timeout - hence catch
-	    LIP = get_ip(COpts),
-	    LPort = get_port(COpts),
-	    case (catch ssl_server:connect_prim(ServerName, 
-						LIP, LPort, FIP, FPort, 
-						FlagStr, Timeout)) of
-		{ok, Fd, ProxyPort} ->
-		    case connect_proxy(ServerName, TcpModule, Fd, 
-				       ProxyPort, COpts, Timeout) of
-			{ok, Socket} ->
-			    ThisSocket = #sslsocket{fd = Fd, pid = self()}, 
-			    StOpts = add_default_tcp_connect_opts(COpts) ++
-				add_default_ssl_opts(SSLOpts),
-			    NSt = St#st{fd = Fd, 
-					active = get_active(COpts),
-					opts = StOpts,
-					thissock = ThisSocket, 
-					proxysock = Socket, 
-					status = open},
-			    case get_nodelay(COpts) of
-				true -> setnodelay(ServerName, NSt, true);
-				_ -> ok
-			    end,
-			    debug(St, "connect: ok: client = ~w, fd = ~w~n",
-				  [Client, Fd]),
-			    {ok, ThisSocket, NSt};
-			{error, Reason} ->
-			    {error, Reason, St}
-		    end;
-		{'EXIT', Reason} ->
-		    {error, Reason, St};
-		{error, Reason} ->
-		    {error, Reason, St}
-	    end;
-	{error, Reason} ->
-	    {error, Reason, St}
-    end.
-
-transport_accept_prim(ServerName, ListenFd, LOpts, Timeout, St) -> 
-    AOpts = get_tcp_accept_opts(LOpts),
-    FlagStr = "",
-    %% Timeout is gen_server timeout - hence catch.
-    case (catch ssl_server:transport_accept_prim(ServerName, ListenFd,
-						 FlagStr, Timeout)) of 
-	{ok, Fd, ProxyPort} ->
-	    ThisSocket = #sslsocket{fd = Fd, pid = self()}, 
-	    NSt = St#st{fd = Fd, 
-			active = get_active(AOpts),
-			opts = AOpts,
-			thissock = ThisSocket,
-			proxyport = ProxyPort,
-			encrypted = false},
-	    debug(St, "transport_accept: ok: fd = ~w~n", [Fd]),
-	    {ok, ThisSocket, NSt};
-	{'EXIT', Reason} ->
-	    debug(St, "transport_accept: EXIT: Reason = ~w~n", [Reason]),
-	    {error, Reason, St};
-	{error, Reason} ->
-	    debug(St, "transport_accept: error: Reason = ~w~n", [Reason]),
-	    {error, Reason, St}
-    end.
-
-ssl_accept_prim(ServerName, TcpModule, Client, LOpts, Timeout, St) -> 
-    FlagStr = [],
-    SSLOpts = [],
-    AOpts = get_tcp_accept_opts(LOpts),
-    %% Timeout is gen_server timeout - hence catch.
-    debug(St, "ssl_accept_prim: self() ~w Client ~w~n", [self(), Client]),
-    Socket = St#st.thissock,
-    Fd = Socket#sslsocket.fd,
-    A = (catch ssl_server:ssl_accept_prim(ServerName, Fd, FlagStr, Timeout)),
-    debug(St, "ssl_accept_prim: ~w~n", [A]),
-    case A of 
-	ok ->
-	    B = connect_proxy(ServerName, TcpModule, Fd, 
-			       St#st.proxyport, AOpts, Timeout),
-	    debug(St, "ssl_accept_prim: connect_proxy ~w~n", [B]),
-	    case B of
-		{ok, Socket2} ->
-		    StOpts = add_default_tcp_accept_opts(AOpts) ++
-			add_default_ssl_opts(SSLOpts),
-		    NSt = St#st{opts = StOpts,
-				proxysock = Socket2,
-				encrypted = true,
-				status = open},
-		    case get_nodelay(AOpts) of
-			true -> setnodelay(ServerName, NSt, true);
-			_ -> ok
-		    end,
-		    debug(St, "transport_accept: ok: client = ~w, fd = ~w~n",
-			  [Client, Fd]),
-		    {ok, St#st.thissock, NSt};
-		{error, Reason} ->
-		    {error, Reason, St}
-	    end;
-	{'EXIT', Reason} ->
-	    {error, Reason, St};
-	{error, Reason} ->
-	    {error, Reason, St}
-    end.
-
-
-%%
-%% LOCAL FUNCTIONS
-%%
-
-%% 
-%% connect_proxy(Fd, ProxyPort, TOpts, Timeout) -> {ok, Socket} | 
-%%						   {error, Reason}
-%%
-connect_proxy(ServerName, TcpModule, Fd, ProxyPort, TOpts, Timeout) ->
-    case TcpModule:connect({127, 0, 0, 1}, ProxyPort, TOpts, Timeout) of
-	{ok, Socket} ->
-	    {ok, Port} = inet:port(Socket),
-	    A = ssl_server:proxy_join_prim(ServerName, Fd, Port),
-	    case A of
-		ok ->
-		    {ok, Socket};
-		Error ->
-		    Error
-	    end;
-	Error ->
-	    Error
-    end.
-
-
-setnodelay(ServerName, St, Bool) ->
-    case ssl_server:setnodelay_prim(ServerName, St#st.fd, Bool) of
-	ok ->
-	    case inet:setopts(St#st.proxysock, [{nodelay, Bool}]) of
-		ok ->
-		    ok;
-		{error, Reason} ->
-		    {error, Reason}
-	    end;
-	{error, Reason} ->
-	    {error, Reason}
-    end.
-
-%%
-%% start_collector()
-%%
-%% A collector is a little process that keeps messages during change of
-%% controlling process. 
-%% XXX This is not gen_server compliant :-(.
-%%
-start_collector() ->
-    Pid = spawn_link(?MODULE, collector_init, [self()]),
-    {ok, Pid}.
-
-%%
-%% release_collector(Collector, NewOwner)
-%%
-release_collector(Collector, NewOwner) ->
-    Collector ! {release, self(), NewOwner},
-    receive
-	%% Reap collector
-	{'EXIT', Collector, normal} ->
-	    ok
-    end.
-
-%%
-%% collector_init(Broker) -> void()
-%%
-collector_init(Broker) ->
-    receive
-	{release, Broker, NewOwner} ->
-	    transfer_messages(Broker, NewOwner)
-    end.
-
-%% 
-%% transfer_messages(Pid, NewOwner) -> void()
-%%
-transfer_messages(Pid, NewOwner) ->    
-    receive
-	{ssl, Sock, Data} ->
-	    NewOwner ! {ssl, Sock, Data},
-	    transfer_messages(Pid, NewOwner);
-	{ssl_closed, Sock} ->
-	    NewOwner ! {ssl_closed, Sock},
-	    transfer_messages(Pid, NewOwner);
-	{ssl_error, Sock, Reason} ->
-	    NewOwner ! {ssl_error, Sock, Reason},
-	    transfer_messages(Pid, NewOwner)
-    after 0 ->
-	    ok
-    end.
-
-%%
-%% debug(St, Format, Args) -> void() - printouts
-%%
-debug(St, Format, Args) ->
-    debug1(St#st.debug, St#st.brokertype, Format, Args).
-
-debug1(true, Type, Format0, Args) ->
-    {_MS, S, MiS} = erlang:now(),
-    Secs = S rem 100, 
-    MiSecs = MiS div 1000,
-    Format = "++++ ~3..0w:~3..0w ssl_broker (~w)[~w]: " ++ Format0, 
-    io:format(Format, [Secs, MiSecs, self(), Type| Args]);
-debug1(_, _, _, _) ->
-    ok.
-
-%%
-%% what(Reason) -> What
-%% 
-what(Reason) when is_atom(Reason) ->
-    Reason;
-what({'EXIT', Reason}) ->
-    what(Reason);
-what({What, _Where}) when is_atom(What) ->
-    What;
-what(Reason) ->
-    Reason.
-
-
-%%
-%% OPTIONS
-%%
-%% Note that `accept' has no options when invoked, but get all its options
-%% by inheritance from `listen'. 
-%%
-
-are_opt_tags(listener, OptTags) ->
-    is_subset(OptTags, listen_opt_tags());
-are_opt_tags(acceptor, OptTags) ->
-    is_subset(OptTags, accept_opt_tags());
-are_opt_tags(connector, OptTags) ->
-    is_subset(OptTags, connect_opt_tags()).
-
-listen_opt_tags() ->				
-    tcp_listen_opt_tags() ++ ssl_opt_tags().
-
-accept_opt_tags() ->
-    tcp_gen_opt_tags().
-
-connect_opt_tags() ->
-    tcp_gen_opt_tags() ++ ssl_opt_tags().
-
-tcp_listen_opt_tags() ->				
-    tcp_gen_opt_tags() ++ tcp_listen_only_opt_tags().
-
-tcp_gen_opt_tags() ->
-    %% All except `reuseaddr' and `deliver'.	
-    [nodelay, active, packet, mode, header].	
-
-tcp_listen_only_opt_tags() ->
-    [ip, backlog].
-
-ssl_opt_tags() ->
-    %% XXX Should remove cachetimeout.
-    [verify, depth, certfile, password, cacertfile, ciphers, cachetimeout].
-
-%% Options
-
-%%
-%% are_*_opts(Opts) -> boolean()
-%%
-are_connect_opts(Opts) ->
-    are_opts(fun is_connect_opt/1, Opts).
-
-are_listen_opts(Opts) ->
-    are_opts(fun is_listen_opt/1, Opts).
-
-are_opts(F, Opts) ->
-    lists:all(F, transform_opts(Opts)).
-
-%%
-%% get_*_opts(Opts) -> Value
-%%
-get_tcp_accept_opts(Opts) ->
-    [O || O <- transform_opts(Opts), is_tcp_accept_opt(O)].
-
-get_tcp_connect_opts(Opts) ->
-    [O || O <- transform_opts(Opts), is_tcp_connect_opt(O)].
-
-get_tcp_listen_opts(Opts) ->
-    [O || O <- transform_opts(Opts), is_tcp_listen_opt(O)].
-
-get_ssl_opts(Opts) ->
-    [O || O <- transform_opts(Opts), is_ssl_opt(O)].
-
-get_active(Opts) ->
-    get_tagged_opt(active, Opts, true).
-
-get_backlog(Opts) ->
-    get_tagged_opt(backlog, Opts, ?DEF_BACKLOG).
-
-get_ip(Opts) ->
-    get_tagged_opt(ip, Opts, {0, 0, 0, 0}).
-
-get_port(Opts) ->
-    get_tagged_opt(port, Opts, 0).
-
-get_nodelay(Opts) ->
-    get_tagged_opt(nodelay, Opts, empty).
-
-%%
-%% add_default_*_opts(Opts) -> NOpts
-%%
-
-add_default_tcp_accept_opts(Opts) ->
-    add_default_opts(Opts, default_tcp_accept_opts()).
-
-add_default_tcp_connect_opts(Opts) ->
-    add_default_opts(Opts, default_tcp_connect_opts()).
-
-add_default_tcp_listen_opts(Opts) ->
-    add_default_opts(Opts, default_tcp_listen_opts()).
-
-add_default_ssl_opts(Opts) ->
-    add_default_opts(Opts, default_ssl_opts()).
-
-add_default_opts(Opts, DefOpts) ->
-    TOpts = transform_opts(Opts),
-    TOpts ++ [DP || {DTag, _DVal} = DP <- DefOpts,
-		    not lists:keymember(DTag, 1, TOpts)].
-
-default_tcp_accept_opts() ->
-    [O || O <- default_opts(), is_tcp_accept_opt(O)].
-
-default_tcp_connect_opts() ->
-    [O || O <- default_opts(), is_tcp_connect_opt(O)].
-
-default_tcp_listen_opts() ->
-    [O || O <- default_opts(), is_tcp_listen_opt(O)].
-
-default_ssl_opts() ->
-    [O || O <- default_opts(), is_ssl_opt(O)].
-
-default_opts() ->
-    [{mode, list}, {packet, 0}, {nodelay, false}, {active, true},
-     {backlog, ?DEF_BACKLOG}, {ip, {0, 0, 0, 0}},
-     {verify, 0}, {depth, 1}].
-
-
-%% Transform from old to new options, and also from old gen_tcp
-%% options to new ones. All returned options are tagged options.
-%%
-transform_opts(Opts) ->
-    lists:flatmap(fun transform_opt/1, Opts).
-
-transform_opt(binary) -> 	[{mode, binary}];
-transform_opt(list) -> 		[{mode, list}];
-transform_opt({packet, raw}) ->	[{packet, 0}];
-transform_opt(raw) -> 		[];
-transform_opt(Opt) -> 		[Opt].
-
-%% NOTE: The is_*_opt/1 functions must be applied on transformed options
-%% only.
-
-is_connect_opt(Opt) ->
-    is_tcp_connect_opt(Opt) or is_ssl_opt(Opt).
-
-is_listen_opt(Opt) ->
-    is_tcp_listen_opt(Opt) or is_ssl_opt(Opt).
-
-is_tcp_accept_opt(Opt) ->
-    is_tcp_gen_opt(Opt).
-
-is_tcp_connect_opt(Opt) ->
-    is_tcp_gen_opt(Opt) or is_tcp_connect_only_opt(Opt).
-
-is_tcp_listen_opt(Opt) ->
-    is_tcp_gen_opt(Opt) or is_tcp_listen_only_opt(Opt).
-
-%% General options supported by gen_tcp: All except `reuseaddr' and
-%% `deliver'.
-is_tcp_gen_opt({mode, list}) -> true;
-is_tcp_gen_opt({mode, binary}) -> true;
-is_tcp_gen_opt({header, Sz}) when is_integer(Sz), 0 =< Sz -> true; 
-is_tcp_gen_opt({packet, Sz}) when is_integer(Sz), 0 =< Sz, Sz =< 4-> true;
-is_tcp_gen_opt({packet, sunrm}) -> true;
-is_tcp_gen_opt({packet, asn1}) -> true;
-is_tcp_gen_opt({packet, cdr}) -> true;
-is_tcp_gen_opt({packet, fcgi}) -> true;
-is_tcp_gen_opt({packet, line}) -> true;
-is_tcp_gen_opt({packet, tpkt}) -> true;
-is_tcp_gen_opt({packet, http}) -> true;
-is_tcp_gen_opt({packet, httph}) -> true;
-is_tcp_gen_opt({nodelay, true}) -> true;
-is_tcp_gen_opt({nodelay, false}) -> true;
-is_tcp_gen_opt({active, true}) -> true;
-is_tcp_gen_opt({active, false}) -> true;
-is_tcp_gen_opt({active, once}) -> true;
-is_tcp_gen_opt({keepalive, true}) -> true;
-is_tcp_gen_opt({keepalive, false}) -> true;
-is_tcp_gen_opt({ip, Addr}) -> is_ip_address(Addr);
-is_tcp_gen_opt(_Opt) -> false.
-
-is_tcp_listen_only_opt({backlog, Size}) when is_integer(Size), 0 =< Size -> 
-    true;
-is_tcp_listen_only_opt({reuseaddr, Bool}) when is_boolean(Bool) ->
-    true;
-is_tcp_listen_only_opt(_Opt) -> false.
-
-is_tcp_connect_only_opt({port, Port}) when is_integer(Port), 0 =< Port -> true;
-is_tcp_connect_only_opt(_Opt) -> false.
-
-%% SSL options
-
-is_ssl_opt({verify, Code}) when 0 =< Code, Code =< 2 -> true;
-is_ssl_opt({depth, Depth}) when 0 =< Depth -> true;
-is_ssl_opt({certfile, String}) -> is_string(String);
-is_ssl_opt({keyfile, String}) -> is_string(String);
-is_ssl_opt({password, String}) -> is_string(String);
-is_ssl_opt({cacertfile, String}) -> is_string(String);
-is_ssl_opt({ciphers, String}) -> is_string(String);
-is_ssl_opt({cachetimeout, Timeout}) when Timeout >= 0 -> true;
-is_ssl_opt(_Opt) -> false.
-
-%% Various types
-is_string(String) when is_list(String) ->
-    lists:all(fun (C) when is_integer(C), 0 =< C, C =< 255 -> true; 
-		  (_C) -> false end, 
-	      String);
-is_string(_) ->
-    false.
-
-is_ip_address(Addr) when tuple_size(Addr) =:= 4 ->
-    is_string(tuple_to_list(Addr));
-is_ip_address(Addr) when is_list(Addr) ->
-    is_string(Addr);
-is_ip_address(_) ->
-    false.
-
-get_tagged_opt(Tag, Opts, Default) ->
-    case lists:keysearch(Tag, 1, Opts) of
-	{value, {_, Value}} ->
-	    Value;
-	_Other ->
-	    Default
-    end.
-
-%%
-%%  mk_ssl_optstr(Opts) -> string()
-%%
-%%  Makes a "command line" string of SSL options
-%%
-mk_ssl_optstr(Opts) ->
-    lists:flatten([mk_one_ssl_optstr(O) || O <- Opts]).
-
-mk_one_ssl_optstr({verify, Code}) ->
-    [" -verify ", integer_to_list(Code)];
-mk_one_ssl_optstr({depth, Depth}) ->
-    [" -depth ", integer_to_list(Depth)];
-mk_one_ssl_optstr({certfile, String}) -> 
-    [" -certfile ", String];
-mk_one_ssl_optstr({keyfile, String}) -> 
-    [" -keyfile ", String];
-mk_one_ssl_optstr({password, String}) -> 
-    [" -password ", String];
-mk_one_ssl_optstr({cacertfile, String}) ->
-    [" -cacertfile ", String];
-mk_one_ssl_optstr({ciphers, String}) -> 
-    [" -ciphers ", String];
-mk_one_ssl_optstr({cachetimeout, Timeout}) ->
-    [" -cachetimeout ", integer_to_list(Timeout)];
-mk_one_ssl_optstr(_) ->
-    "".
-
-extract_opts(OptTags, Opts) ->
-    [O || O = {Tag,_} <- Opts, lists:member(Tag, OptTags)].
-
-replace_opts(NOpts, Opts) ->
-    lists:foldl(fun({Key, Val}, Acc) -> 
-			lists:keyreplace(Key, 1, Acc, {Key, Val});
-		   %% XXX Check. Patch from Chandrashekhar Mullaparthi.
-		   (binary, Acc) ->
-			lists:keyreplace(mode, 1, Acc, {mode, binary})
-		end,
-		Opts, NOpts).
-
-%% Misc
-
-is_subset(A, B) ->
-    [] =:= A -- B.
diff --git a/lib/ssl/src/ssl_broker_int.hrl b/lib/ssl/src/ssl_broker_int.hrl
deleted file mode 100644
index b791485725..0000000000
--- a/lib/ssl/src/ssl_broker_int.hrl
+++ /dev/null
@@ -1,38 +0,0 @@
-%%
-%% %CopyrightBegin%
-%% 
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%% 
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%% 
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%% 
-%% %CopyrightEnd%
-%%
-
-%%
-
-%% Purpose: record definitions shared between ssl_prim.erl and ssl_broker.erl
-
--record(st, {brokertype = nil,	% connector | listener | acceptor
-	     server = nil, 	% pid of ssl_server
-	     client = nil, 	% client pid
-	     collector = nil, 	% client pid, or collector during change of 
-	     			% controlling process
-	     fd = nil, 		% fd of "external" socket in port program
-	     active = true, 	% true | false | once
-	     opts = [], 	% options
-	     thissock = nil,    % this sslsocket
-	     proxysock = nil, 	% local proxy socket within Erlang
-	     proxyport = nil,   % local port for proxy within Erlang
-	     status = nil,	% open | closing | closed 
-	     encrypted = false, %
-	     debug = false	%
-	    }).
diff --git a/lib/ssl/src/ssl_broker_sup.erl b/lib/ssl/src/ssl_broker_sup.erl
deleted file mode 100644
index 6d56a5fcf6..0000000000
--- a/lib/ssl/src/ssl_broker_sup.erl
+++ /dev/null
@@ -1,46 +0,0 @@
-%%
-%% %CopyrightBegin%
-%% 
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%% 
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%% 
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%% 
-%% %CopyrightEnd%
-%%
-
-%%
-
-%%% Purpose : Supervisor for brokers
-
--module(ssl_broker_sup).
-
--behaviour(supervisor).
-
--export([start_link/0]).
-
-%% supervisor callbacks
--export([init/1]).
-
-start_link() ->
-    supervisor:start_link({local, ssl_broker_sup}, ssl_broker_sup,
-			  []).
-
-init([]) ->
-    {ok, {{simple_one_for_one, 10, 3600}, 
-	  [{ssl_broker,
-	    {ssl_broker, start_link, []},
-	    temporary,
-	    100,
-	    worker,
-	    [ssl_broker]}
-	  ]}}.
-
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl
index 049354c19b..41afd2044c 100644
--- a/lib/ssl/src/ssl_connection.erl
+++ b/lib/ssl/src/ssl_connection.erl
@@ -34,7 +34,6 @@
 -include("ssl_record.hrl").
 -include("ssl_cipher.hrl"). 
 -include("ssl_internal.hrl").
--include("ssl_int.hrl").
 -include_lib("public_key/include/public_key.hrl"). 
 
 %% Internal application API
diff --git a/lib/ssl/src/ssl_int.hrl b/lib/ssl/src/ssl_int.hrl
deleted file mode 100644
index 3686deffce..0000000000
--- a/lib/ssl/src/ssl_int.hrl
+++ /dev/null
@@ -1,99 +0,0 @@
-%%
-%% %CopyrightBegin%
-%% 
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%% 
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%% 
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%% 
-%% %CopyrightEnd%
-%%
-
-%%
-
-%% op codes commands are in capital and reply codes in lower case 
-
--define(CONNECT,	1).
--define(CONNECT_WAIT,	2).
--define(CONNECT_REP,	3).
--define(CONNECT_ERR,	4).
-
--define(TERMINATE,	5).
--define(CLOSE,		6).
-
--define(LISTEN,		7).
--define(LISTEN_REP,	8).
--define(LISTEN_ERR,	9).
-
--define(TRANSPORT_ACCEPT, 10).
--define(NOACCEPT,	11).
--define(TRANSPORT_ACCEPT_REP, 12).
--define(TRANSPORT_ACCEPT_ERR, 13).
-
--define(FROMNET_CLOSE,	14).
-
--define(CONNECT_SYNC_ERR, 15).
--define(LISTEN_SYNC_ERR, 16).
-
--define(PROXY_PORT,	23).
--define(PROXY_JOIN,	24).
--define(PROXY_JOIN_REP,	25).
--define(PROXY_JOIN_ERR,	26).
-
--define(SET_SOCK_OPT,	27).
--define(IOCTL_OK,	28).
--define(IOCTL_ERR,	29).
-
--define(GETPEERNAME,	30).
--define(GETPEERNAME_REP, 31).
--define(GETPEERNAME_ERR, 32).
-
--define(GETSOCKNAME,	33).
--define(GETSOCKNAME_REP, 34).
--define(GETSOCKNAME_ERR, 35).
-
--define(GETPEERCERT,	36).
--define(GETPEERCERT_REP, 37).
--define(GETPEERCERT_ERR, 38).
-
--define(GETVERSION, 39).
--define(GETVERSION_REP, 40).
-
--define(SET_SEED, 41).
-
--define(GETCONNINFO, 42).
--define(GETCONNINFO_REP, 43).
--define(GETCONNINFO_ERR, 44).
-
--define(SSL_ACCEPT, 45).
--define(SSL_ACCEPT_REP, 46).
--define(SSL_ACCEPT_ERR, 47).
-
--define(DUMP_CMD,       48).
--define(DEBUG_CMD,      49).
--define(DEBUGMSG_CMD,   50).
-
-%% --------------
-
--define(SSLv2, 1).
--define(SSLv3, 2).
--define(TLSv1, 4).
-
-
-%% Set socket options codes  'SET_SOCK_OPT' 
--define(SET_TCP_NODELAY, 1).
-
--define(DEF_BACKLOG, 128).
-
--define(DEF_TIMEOUT, 10000).
-
--record(sslsocket, { fd = nil, pid = nil}).
-
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 483e06067c..18cfcdcd68 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -24,6 +24,9 @@
 
 -include_lib("public_key/include/public_key.hrl"). 
 
+%% Looks like it does for backwards compatibility reasons
+-record(sslsocket, {fd = nil, pid = nil}).
+
 -type reason()            :: term().
 -type reply()             :: term().
 -type msg()               :: term().
diff --git a/lib/ssl/src/ssl_prim.erl b/lib/ssl/src/ssl_prim.erl
deleted file mode 100644
index e3140a89d1..0000000000
--- a/lib/ssl/src/ssl_prim.erl
+++ /dev/null
@@ -1,173 +0,0 @@
-%%
-%% %CopyrightBegin%
-%% 
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%% 
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%% 
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%% 
-%% %CopyrightEnd%
-%%
-
-%%
-
-%% Purpose: Primitive interface to SSL, without broker process (used by 
-%% SSL distribution).
-
--module(ssl_prim).
-
--export([listen/2, connect/3, accept/1, close/1, send/2, send/3, recv/2, recv/3,
-	 getll/1, getstat/2, setopts/2, controlling_process/2, peername/1,
-	 sockname/1, getif/1]).
-
--include("ssl_int.hrl").
--include("ssl_broker_int.hrl").
-
-%-define(filter(Call), filter((catch Call))).
--define(filter(Call), filter(Call)).
-
-listen(Port, Opts) ->
-    St = newstate(listener),
-    ?filter(ssl_broker:listen_prim(ssl_server_prim, self(), Port, nonactive(Opts), St)).
-
-connect(Address, Port, Opts) ->
-    St = newstate(connector),
-    ?filter(ssl_broker:connect_prim(ssl_server_prim, inet_tcp, self(), Address, 
-				    Port, nonactive(Opts), infinity, St)).
-
-accept(#st{} = ListenSt0) ->
-    case transport_accept(ListenSt0) of
-	{ok, ListenSt1} ->
-	    ssl_accept(ListenSt0, ListenSt1);
-	Error ->
-	    Error
-    end.
-
-transport_accept(#st{opts = ListenOpts, thissock = ListenSocket}) ->
-    NewSt = newstate(acceptor),
-    ListenFd = ListenSocket#sslsocket.fd,
-    ?filter(ssl_broker:transport_accept_prim(ssl_server_prim, ListenFd,
-					     ListenOpts, infinity, NewSt)).
-
-ssl_accept(#st{opts = LOpts}, ListenSt1) ->
-    ?filter(ssl_broker:ssl_accept_prim(ssl_server_prim, gen_tcp, self(),
-				       LOpts, infinity, ListenSt1)).
-
-close(#st{fd = Fd}) when is_integer(Fd) ->
-    ssl_server:close_prim(ssl_server_prim, Fd),
-    ok;
-close(_) ->
-    ok.
-
-send(St, Data) ->
-    send(St, Data, []).
-
-send(#st{proxysock = Proxysock, status = open}, Data, Opts) ->
-    case inet_tcp:send(Proxysock, Data, Opts) of
-	ok ->
-	    ok;
-	{error, _} ->
-	    {error, closed}
-    end;
-send(#st{}, _Data, _Opts) ->
-    {error, closed}.
-
-recv(St, Length) ->
-    recv(St, Length, infinity).
-
-recv(#st{proxysock = Proxysock, status = open}, Length, Tmo) ->
-    inet_tcp:recv(Proxysock, Length, Tmo);
-recv(#st{}, _Length, _Tmo) ->
-    {error, closed}.
-
-getll(#st{proxysock = Proxysock, status = open})  ->
-    inet:getll(Proxysock);
-getll(#st{}) ->
-    {error, closed}.
-
-getstat(#st{proxysock = Proxysock, status = open}, Opts) ->
-    inet:getstat(Proxysock, Opts);
-getstat(#st{}, _Opts) ->
-    {error, closed}.
-
-setopts(#st{proxysock = Proxysock, status = open}, Opts) ->
-    case remove_supported(Opts) of
-	[] ->
-	    inet:setopts(Proxysock, Opts);
-	_ ->
-	    {error, enotsup}
-    end;
-setopts(#st{}, _Opts) ->
-    {error, closed}.
-
-
-controlling_process(#st{proxysock = Proxysock, status = open}, Pid)
-  when is_pid(Pid) ->
-    inet_tcp:controlling_process(Proxysock, Pid);
-controlling_process(#st{}, Pid) when is_pid(Pid) ->
-    {error, closed}.
-
-peername(#st{fd = Fd, status = open}) ->
-    case ssl_server:peername_prim(ssl_server_prim, Fd) of
-	{ok, {Address, Port}} ->
-	    {ok, At} = inet_parse:ipv4_address(Address),
-	    {ok, {At, Port}};
-	Error ->
-	    Error
-    end;
-peername(#st{}) ->
-    {error, closed}.
-
-sockname(#st{fd = Fd, status = open}) ->
-    case ssl_server:sockname_prim(ssl_server_prim, Fd) of
-	{ok, {Address, Port}} ->
-	    {ok, At} = inet_parse:ipv4_address(Address),
-	    {ok, {At, Port}};
-	Error ->
-	    Error
-    end;
-sockname(#st{}) ->
-    {error, closed}.
-
-getif(#st{proxysock = Proxysock, status = open}) ->
-    inet:getif(Proxysock);
-getif(#st{}) ->
-    {error, closed}.
-
-remove_supported([{active, _}|T]) ->
-    remove_supported(T);
-remove_supported([{packet,_}|T]) ->
-    remove_supported(T);
-remove_supported([{deliver,_}|T]) ->
-    remove_supported(T);
-remove_supported([H|T]) ->
-    [H | remove_supported(T)];
-remove_supported([]) ->
-    [].
-
-filter(Result) ->
-    case Result of
-	{ok, _Sock,St} ->
-	    {ok, St};
-        {error, Reason, _St} ->
-	    {error,Reason}
-    end.
-
-nonactive([{active,_}|T]) ->
-    nonactive(T);
-nonactive([H|T]) ->
-    [H | nonactive(T)];
-nonactive([]) ->
-    [{active, false}].
-
-newstate(Type) ->
-   #st{brokertype = Type, server = whereis(ssl_server_prim),
-       client = undefined, collector = undefined, debug = false}. 
diff --git a/lib/ssl/src/ssl_server.erl b/lib/ssl/src/ssl_server.erl
deleted file mode 100644
index b66e20a397..0000000000
--- a/lib/ssl/src/ssl_server.erl
+++ /dev/null
@@ -1,1378 +0,0 @@
-%%
-%% %CopyrightBegin%
-%% 
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%% 
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%% 
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%% 
-%% %CopyrightEnd%
-%%
-
-%%
-
-%%% Purpose : SSL server
-
-%%
-%% TODO
-%%
-%% XXX The ip option in listen is not general enough. It is assumed
-%%     to be a tuple, which is not always the case.
-
--module(ssl_server).
--behaviour(gen_server).
-
-%% External exports 
--export([start_link/0]).  
-
--export([transport_accept/2, transport_accept/3, ssl_accept/2, ssl_accept/3,
-	 ciphers/0, connect/5, connect/6,
-	 connection_info/1, close/1, listen/3, listen/4, peercert/1,
-	 peername/1, proxy_join/2, seed/1, setnodelay/2, sockname/1,
-	 version/0]).
-
--export([start_link_prim/0]).
--export([ssl_accept_prim/4, transport_accept_prim/4,
-	 connect_prim/7, close_prim/2, 
-	 listen_prim/5, proxy_join_prim/3, peername_prim/2, setnodelay_prim/3, 
-	 sockname_prim/2]).
-
--export([dump/0, dump/1]).
--export([enable_debug/0, disable_debug/0, set_debug/1]).
--export([enable_debugmsg/0, disable_debugmsg/0, set_debugmsg/1]).
-
-%% gen_server callbacks
--export([init/1, handle_call/3, handle_cast/2, handle_info/2, 
-	 code_change/3, terminate/2]).
-
--include("ssl_int.hrl").
-
--record(st, {
-	  port = [],			% port() of port program
-	  progpid = [],			% OS pid of port program
-	  debug = false,		% debug printout flag
-	  cons = [], 			% All brokers except pending accepts
-	  paccepts = [], 		% Pending accept brokers
-	  proxylsport = [], 		% proxy listen socket port
-	  intref = 0,			% internal reference counter
-	  compvsn = "",			% ssl compile library version
-	  libvsn = "",			% ssl library version
-	  ciphers = []			% available ciphers
-	 }).
-
-
-%% In all functions below IP is a four tuple, e.g. {192, 236, 52, 7}. 
-%% Port, Fd and ListenFd are integers; Flags is a string of characters.
-%%
-%% The prefixes F and L mean foreign and local, respectively. 
-%% Example: FIP (IP address for foreign end).
-
-%%
-%% start_link() -> {ok, Pid} | {error, Reason}
-%%
-start_link() ->
-    gen_server:start_link({local, ssl_server}, ssl_server, [], []).
-
-start_link_prim() ->
-    gen_server:start_link({local, ssl_server_prim}, ssl_server, [], []).
-
-%%
-%% transport_accept(ListenFd, Flags) -> {ok, Fd, ProxyLLPort} |
-%%			      {error, Reason}
-%%
-transport_accept(ListenFd, Flags) ->
-    transport_accept(ListenFd, Flags, infinity).
-transport_accept(ListenFd, Flags, Timeout) ->
-    transport_accept_prim(ssl_server,ListenFd, Flags, Timeout).
-
-transport_accept_prim(ServerName, ListenFd, Flags, Timeout) ->
-    Req = {transport_accept, self(), ListenFd, Flags}, 
-    gen_server:call(ServerName, Req, Timeout).
-
-%%
-%% ssl_accept(ListenFd, Flags) -> {ok, Fd, ProxyLLPort} |
-%%			      {error, Reason}
-%%
-ssl_accept(ListenFd, Flags) ->
-    ssl_accept(ListenFd, Flags, infinity).
-ssl_accept(ListenFd, Flags, Timeout) ->
-    ssl_accept_prim(ssl_server, ListenFd, Flags, Timeout).
-
-ssl_accept_prim(ServerName, Fd, Flags, Timeout) ->
-    Req = {ssl_accept, Fd, Flags}, 
-    gen_server:call(ServerName, Req, Timeout).
-
-%%
-%% ciphers() -> {ok, Ciphers} 
-%%
-ciphers() ->
-    gen_server:call(ssl_server, ciphers, infinity).
-
-%%
-%% close(Fd) -> ok
-%%
-close(Fd) -> 
-    close_prim(ssl_server, Fd).
-close_prim(ServerName, Fd) -> 
-    gen_server:call(ServerName, {close, self(), Fd}, infinity),
-    ok.
-
-%%
-%% connect(LIP, LPort, FIP, FPort, Flags) -> {ok, Fd, ProxyLFPort} |
-%%					 {error, Reason}
-%%
-connect(LIP, LPort, FIP, FPort, Flags) ->
-    connect(LIP, LPort, FIP, FPort, Flags, infinity).
-connect(LIP, LPort, FIP, FPort, Flags, Timeout) ->
-    connect_prim(ssl_server, LIP, LPort, FIP, FPort, Flags, Timeout).
-
-connect_prim(ServerName, LIP, LPort, FIP, FPort, Flags, Timeout) ->
-    Req = {connect, self(), LIP, LPort, FIP, FPort, Flags},
-    gen_server:call(ServerName, Req, Timeout).
-
-%%
-%% connection_info(Fd) -> {ok, {Protocol, Cipher}} | {error, Reason}
-%%
-connection_info(Fd) ->
-    Req = {connection_info, self(), Fd},
-    gen_server:call(ssl_server, Req, infinity).
-  
-%%
-%% listen(IP, LPort, Flags), 
-%% listen(IP, LPort, Flags, BackLog) -> {ok, ListenFd, LPort0} | 
-%%                                    {error, Reason}
-%%
-listen(IP, LPort, Flags) ->
-    listen(IP, LPort, Flags, ?DEF_BACKLOG).
-listen(IP, LPort, Flags, BackLog) ->
-    listen_prim(ssl_server, IP, LPort, Flags, BackLog).
-listen_prim(ServerName, IP, LPort, Flags, BackLog) ->
-    Req = {listen, self(), IP, LPort, Flags, BackLog},
-    gen_server:call(ServerName, Req, infinity).
-
-%%
-%% peercert(Fd) -> {ok, Cert} | {error, Reason}
-%%
-peercert(Fd) ->
-    Req = {peercert, self(), Fd},
-    gen_server:call(ssl_server, Req, infinity).
-
-%%
-%% peername(Fd) -> {ok, {Address, Port}} | {error, Reason}
-%%
-peername(Fd) ->
-    peername_prim(ssl_server, Fd).
-peername_prim(ServerName, Fd) ->
-    Req = {peername, self(), Fd},
-    gen_server:call(ServerName, Req, infinity).
-
-%%
-%% proxy_join(Fd, LPort) -> ok | {error, Reason}
-%%
-proxy_join(Fd, LPort) ->
-    proxy_join_prim(ssl_server, Fd, LPort).
-proxy_join_prim(ServerName, Fd, LPort) ->
-    Req = {proxy_join, self(), Fd, LPort},
-    gen_server:call(ServerName, Req, infinity).
-
-%%
-%%  seed(Data)
-%%
-seed(Data) ->
-    Req = {seed, Data},
-    gen_server:call(ssl_server, Req, infinity).
-    
-%%
-%%  set_nodelay(Fd, Boolean)
-%%
-setnodelay(Fd, Boolean) ->
-    setnodelay_prim(ssl_server, Fd, Boolean).
-setnodelay_prim(ServerName, Fd, Boolean) ->
-    Req = {setnodelay, self(), Fd, Boolean},
-    gen_server:call(ServerName, Req, infinity).
-    
-%%
-%% sockname(Fd) -> {ok, {Address, Port}} | {error, Reason}
-%%
-sockname(Fd) ->
-    sockname_prim(ssl_server, Fd).
-sockname_prim(ServerName, Fd) ->
-    Req = {sockname, self(), Fd},
-    gen_server:call(ServerName, Req, infinity).
-
-%%
-%% version() -> {ok, {CompVsn, LibVsn}} 
-%%
-version() ->
-    gen_server:call(ssl_server, version, infinity).
-
-
-enable_debug() ->
-    set_debug(true).
-
-disable_debug() ->
-    set_debug(false).
-
-set_debug(Bool) ->
-    set_debug(Bool, infinity).
-
-set_debug(Bool, Timeout) when is_boolean(Bool) ->
-    Req = {set_debug, Bool, self()},
-    gen_server:call(ssl_server, Req, Timeout).
-                
-enable_debugmsg() ->
-    set_debugmsg(true).
-
-disable_debugmsg() ->
-    set_debugmsg(false).
-
-set_debugmsg(Bool) ->
-    set_debugmsg(Bool, infinity).
-
-set_debugmsg(Bool, Timeout) when is_boolean(Bool) ->
-    Req = {set_debugmsg, Bool, self()},
-    gen_server:call(ssl_server, Req, Timeout).
-
-dump() ->
-    dump(infinity).
-
-dump(Timeout) ->
-    Req = {dump, self()}, 
-    gen_server:call(ssl_server, Req, Timeout).
-
-%%
-%% init
-%%
-init([]) ->
-    Debug = case application:get_env(ssl, edebug) of
-		{ok, true} -> 
-		    true;
-		_ ->
-		    case application:get_env(ssl, debug) of
-			{ok, true} ->
-			    true;
-			_  ->
-			    os:getenv("ERL_SSL_DEBUG") =/= false
-		    end
-	    end,
-    ProgDir = 
-	case init:get_argument(ssl_portprogram_dir) of
-	    {ok, [[D]]} ->
-		D;
-	    _ ->
-		find_priv_bin()
-	end,
-    {Program, Flags} = mk_cmd_line("ssl_esock"),
-    Cmd = filename:join(ProgDir, Program) ++ " " ++ Flags,
-    debug1(Debug, " start, Cmd =  ~s~n", [Cmd]), 
-    case (catch open_port({spawn, Cmd}, [binary, {packet, 4}])) of
-	Port when is_port(Port) ->
-	    process_flag(trap_exit, true), 
-	    receive 
-		{Port, {data, Bin}} ->
-		    {ProxyLLPort, ProgPid, CompVsn, LibVsn, Ciphers} = 
-			decode_msg(Bin, [int16, int32, string, string, 
-					 string]), 
-		    debug1(Debug, "port program pid = ~w~n", 
-			   [ProgPid]), 
-		    {ok, #st{port = Port, 
-			     proxylsport = ProxyLLPort,
-			     progpid = ProgPid, 
-			     debug = Debug, 
-			     compvsn = CompVsn, 
-			     libvsn = LibVsn,
-			     ciphers = Ciphers}};
-		{'EXIT', Port, Reason} ->
-		    {stop, Reason}
-	    end;
-	{'EXIT', Reason} ->
-	    {stop, Reason}
-    end.
-
-%%
-%% transport_accept
-%%
-handle_call({transport_accept, Broker, ListenFd, Flags}, From, St) ->
-    debug(St, "transport_accept: broker = ~w, listenfd = ~w~n", 
-	  [Broker, ListenFd]),
-    case get_by_fd(ListenFd, St#st.cons) of
-	{ok, {ListenFd, _, _}} ->
-	    send_cmd(St#st.port, ?TRANSPORT_ACCEPT, [int32(ListenFd), Flags, 0]),
-	    PAccepts = add({ListenFd, Broker, From}, St#st.paccepts),
-	    %%
-	    %% We reply when we get TRANSPORT_ACCEPT_REP or ASYNC_ACCEPT_ERR
-	    %% 
-	    {noreply, St#st{paccepts = PAccepts}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% ssl_accept
-%%
-handle_call({ssl_accept, Fd, Flags}, From, St) ->
-    case replace_from_by_fd(Fd, St#st.cons, From) of
-	{ok, _, Cons} = _Rep ->
-	    send_cmd(St#st.port, ?SSL_ACCEPT, [int32(Fd), Flags, 0]),
-	    %% We reply when we get SSL_ACCEPT_REP or ASYNC_ACCEPT_ERR
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% version
-%%
-handle_call(ciphers, From, St) ->
-    debug(St, "ciphers: from = ~w~n", [From]),
-    {reply, {ok, St#st.ciphers}, St};
-
-%%
-%% connect
-%%
-handle_call({connect, Broker, LIP, LPort, FIP, FPort, Flags}, From, St) ->
-    debug(St, "connect: broker = ~w, ip = ~w, "
-	  "sport = ~w~n", [Broker, FIP, FPort]),
-    Port = St#st.port,
-    LIPStr = ip_to_string(LIP),
-    FIPStr = ip_to_string(FIP),
-    IntRef = new_intref(St),
-    send_cmd(Port, ?CONNECT, [int32(IntRef),
-			      int16(LPort), LIPStr, 0,
-			      int16(FPort), FIPStr, 0,
-			      Flags, 0]),
-    Cons = add({{intref, IntRef}, Broker, From}, St#st.cons),
-    %% We reply when we have got CONNECT_SYNC_ERR, or CONNECT_WAIT 
-    %% and CONNECT_REP, or CONNECT_ERR.
-    {noreply, St#st{cons = Cons, intref = IntRef}};
-
-%%
-%% connection_info
-%%
-handle_call({connection_info, Broker, Fd}, From, St) ->
-    debug(St, "connection_info: broker = ~w, fd = ~w~n",
-	  [Broker, Fd]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of
-	{ok, _, Cons} ->
-	    send_cmd(St#st.port, ?GETCONNINFO, [int32(Fd)]),
-	    %% We reply when we get GETCONNINFO_REP or GETCONNINFO_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% close
-%%
-handle_call({close, Broker, Fd}, _From, St) ->
-    debug(St, "close: broker = ~w, fd = ~w~n",
-	  [Broker, Fd]),
-    #st{port = Port, cons = Cons0, paccepts = PAccepts0} = St,
-    case delete_by_fd(Fd, Cons0) of
-	%% Must match Broker pid; fd may be reused already.
-	{ok, {Fd, Broker, _}, Cons} ->
-	    send_cmd(Port, ?CLOSE, int32(Fd)),
-	    %% If Fd is a listen socket fd, there might be pending
-	    %% accepts for that fd.
-	    case delete_all_by_fd(Fd, PAccepts0) of
-		{ok, DelAccepts, RemAccepts} ->
-		    %% Reply {error, closed} to all pending accepts
-		    lists:foreach(fun({_, _, AccFrom}) ->
-					  gen_server:reply(AccFrom,
-							   {error, closed})
-				  end, DelAccepts),
-		    {reply, ok,
-		     St#st{cons = Cons, paccepts = RemAccepts}};
-		_ ->
-		    {reply, ok, St#st{cons = Cons}}
-	    end;
-	_ ->
-	    {reply, ok, St}
-    end;
-
-%%
-%% listen
-%%
-handle_call({listen, Broker, IP, LPort, Flags, BackLog}, From, St) ->
-    debug(St, "listen: broker = ~w, IP = ~w, "
-	  "sport = ~w~n", [Broker, IP, LPort]),
-    Port = St#st.port,
-    IPStr = ip_to_string(IP),
-    IntRef = new_intref(St),
-    send_cmd(Port, ?LISTEN, [int32(IntRef), int16(LPort), IPStr, 0,
-			     int16(BackLog), Flags, 0]),
-    Cons = add({{intref, IntRef}, Broker, From}, St#st.cons),
-    %% We reply when we have got LISTEN_REP.
-    {noreply, St#st{cons = Cons, intref = IntRef}};
-
-%%
-%% peercert
-%%
-handle_call({peercert, Broker, Fd}, From, St) ->
-    debug(St, "peercert: broker = ~w, fd = ~w~n",
-	  [Broker, Fd]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of 
-	{ok, _, Cons} ->
-	    send_cmd(St#st.port, ?GETPEERCERT, [int32(Fd)]),
-	    %% We reply when we get GETPEERCERT_REP or GETPEERCERT_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-
-%%
-%% peername
-%%
-handle_call({peername, Broker, Fd}, From, St) ->
-    debug(St, "peername: broker = ~w, fd = ~w~n",
-	  [Broker, Fd]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of 
-	{ok, _, Cons} ->
-	    send_cmd(St#st.port, ?GETPEERNAME, [int32(Fd)]),
-	    %% We reply when we get GETPEERNAME_REP or GETPEERNAME_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% proxy join
-%%
-handle_call({proxy_join, Broker, Fd, LPort}, From, St) ->
-    debug(St, "proxy_join: broker = ~w, fd = ~w, "
-	  "sport = ~w~n", [Broker, Fd, LPort]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of 
-	{ok, _, Cons} ->
-	    send_cmd(St#st.port, ?PROXY_JOIN, [int32(Fd), 
-						     int16(LPort)]), 
-	    %% We reply when we get PROXY_JOIN_REP, or PROXY_JOIN_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% seed
-%%
-handle_call({seed, Data}, _From, St) when is_binary(Data) ->
-    send_cmd(St#st.port, ?SET_SEED, [int32(byte_size(Data)), Data]),
-    {reply, ok, St};
-
-handle_call({seed, Data}, From, St) ->
-    case catch list_to_binary(Data) of
-	{'EXIT', _} ->
-	    {reply, {error, edata}, St};
-	Bin  ->
-	    handle_call({seed, Bin}, From, St)
-    end;
-
-%%
-%% setnodelay
-%%
-handle_call({setnodelay, Broker, Fd, Boolean}, From, St) ->
-    debug(St, "setnodelay: broker = ~w, fd = ~w, "
-	  "boolean = ~w~n", [Broker, Fd, Boolean]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of 
-	{ok, _, Cons} ->
-	    Val = if Boolean == true -> 1; true -> 0 end,
-	    send_cmd(St#st.port, ?SET_SOCK_OPT, 
-		     [int32(Fd), ?SET_TCP_NODELAY, Val]),
-	    %% We reply when we get IOCTL_OK or IOCTL_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% sockname
-%%
-handle_call({sockname, Broker, Fd}, From, St) ->
-    debug(St, "sockname: broker = ~w, fd = ~w~n",
-	  [Broker, Fd]),
-    case replace_from_by_fd(Fd, St#st.cons, From) of 
-	{ok, _, Cons} ->
-	    send_cmd(St#st.port, ?GETSOCKNAME, [int32(Fd)]),
-	    %% We reply when we get GETSOCKNAME_REP or GETSOCKNAME_ERR.
-	    {noreply, St#st{cons = Cons}};
-	_Other ->
-	    {reply, {error, ebadf}, St}
-    end;
-
-%%
-%% version
-%%
-handle_call(version, From, St) ->
-    debug(St, "version: from = ~w~n", [From]),
-    {reply, {ok, {St#st.compvsn, St#st.libvsn}}, St};
-
-%%
-%% dump
-%%
-handle_call({dump, Broker}, _From, St) ->
-    debug(St, "dump: broker = ~w", [Broker]),
-    Port = St#st.port,
-    send_cmd(Port, ?DUMP_CMD, []),
-    {reply, ok, St};
-
-%%
-%% set_debug
-%%
-handle_call({set_debug, Bool, Broker}, _From, St) ->
-    debug(St, "set_debug: broker = ~w", [Broker]),
-   Value = case Bool of 
-                true ->
-                    1;
-                false ->
-                    0
-            end,
-    Port = St#st.port,
-    send_cmd(Port, ?DEBUG_CMD, [Value]),
-    {reply, ok, St};
-
-%%
-%% set_debugmsg
-%%
-handle_call({set_debugmsg, Bool, Broker}, _From, St) ->
-    debug(St, "set_debugmsg: broker = ~w", [Broker]),
-    Value = case Bool of 
-                true ->
-                    1;
-                false ->
-                    0
-            end,
-    Port = St#st.port,
-    send_cmd(Port, ?DEBUGMSG_CMD, [Value]),
-    {reply, ok, St};
-
-handle_call(Request, _From, St) ->
-    debug(St, "unexpected call: ~w~n", [Request]),
-    Reply = {error, {badcall, Request}},
-    {reply, Reply, St}.
-
-%%
-%% handle_cast(Msg, St)
-%%
-
-
-handle_cast(Msg, St) ->
-    debug(St, "unexpected cast: ~w~n", [Msg]),
-    {noreply, St}.
-
-%%
-%% handle_info(Info, St)
-%%
-
-%% Data from port
-%%
-handle_info({Port, {data, Bin}},
-	    #st{cons = StCons, paccepts = Paccepts,
-		port = Port, proxylsport = Proxylsport} = St) 
-  when is_binary(Bin) ->
-    %% io:format("++++ ssl_server got from port: ~w~n", [Bin]),
-    <<OpCode:8, _/binary>> = Bin,
-    case OpCode of
-	%%
-	%% transport_accept
-	%%
-	?TRANSPORT_ACCEPT_ERR when byte_size(Bin) >= 5 ->
-	    {ListenFd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "transport_accept_err: listenfd = ~w, "
-		  "reason = ~w~n", [ListenFd, Reason]),
-	    case delete_last_by_fd(ListenFd, Paccepts) of
-		{ok, {_, _, From}, PAccepts} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{paccepts = PAccepts}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?TRANSPORT_ACCEPT_REP when byte_size(Bin) >= 9 ->
-	    {ListenFd, Fd} = decode_msg(Bin, [int32, int32]),
-	    debug(St, "transport_accept_rep: listenfd = ~w, "
-		  "fd = ~w~n", [ListenFd, Fd]),
-	    case delete_last_by_fd(ListenFd, Paccepts) of
-		{ok, {_, Broker, From}, PAccepts} ->
-		    Reply = {ok, Fd, Proxylsport},
-		    gen_server:reply(From, Reply),
-		    debug(St, "transport_accept_rep: From = ~w\n", [From]),
-		    Cons = add({Fd, Broker, From}, StCons),
-		    {noreply, St#st{cons = Cons, paccepts = PAccepts}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	
-	%%
-	%% ssl_accept
-	%%
-	?SSL_ACCEPT_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "ssl_accept_err: listenfd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    %% JC: remove this?
-	    case delete_last_by_fd(Fd, StCons) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?SSL_ACCEPT_REP when byte_size(Bin) >= 5 ->
-	    Fd = decode_msg(Bin, [int32]),
-	    debug(St, "ssl_accept_rep: Fd = ~w\n", [Fd]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, ok),
-		    {noreply, St#st{cons = Cons}};
-		_ ->
-		    {noreply, St}
-	    end;
-
-	%%
-	%% connect
-	%%
-	?CONNECT_SYNC_ERR when byte_size(Bin) >= 5 ->
-	    {IntRef, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "connect_sync_err: intref = ~w, "
-		  "reason = ~w~n", [IntRef, Reason]),
-	    case delete_by_intref(IntRef, StCons) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    {noreply, St}
-	    end;
-	?CONNECT_WAIT when byte_size(Bin) >= 9 ->  
-	    {IntRef, Fd} = decode_msg(Bin, [int32, int32]),
-	    debug(St, "connect_wait: intref = ~w, "
-		  "fd = ~w~n", [IntRef, Fd]),
-	    case replace_fd_by_intref(IntRef, StCons, Fd) of
-		{ok, _, Cons} ->
-		    %% We reply when we get CONNECT_REP or CONNECT_ERR
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% We have a new Fd which must be closed
-		    send_cmd(Port, ?CLOSE, int32(Fd)),
-		    {noreply, St}
-	    end;
-	?CONNECT_REP when byte_size(Bin) >= 5 ->  
-	    %% after CONNECT_WAIT
-	    Fd = decode_msg(Bin, [int32]),
-	    debug(St, "connect_rep: fd = ~w~n", [Fd]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, Fd, Proxylsport}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    {noreply, St}
-	    end;
-	?CONNECT_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "connect_err: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case delete_by_fd(Fd, StCons) of
-		{ok, {_, _, From}, Cons} ->
-		    %% Fd not yet published - hence close ourselves
-		    send_cmd(Port, ?CLOSE, int32(Fd)),
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% connection_info
-	%%
-	?GETCONNINFO_REP when byte_size(Bin) >= 5 ->
-	    {Fd, Protocol, Cipher} = decode_msg(Bin, [int32, string, string]),
-	    debug(St, "connection_info_rep: fd = ~w, "
-		  "protcol = ~p, ip = ~p~n", [Fd, Protocol, Cipher]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, {protocol_name(Protocol),
-						 Cipher}}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?GETCONNINFO_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "connection_info_err: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% listen
-	%%
-	?LISTEN_SYNC_ERR when byte_size(Bin) >= 5 ->
-	    {IntRef, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "listen_sync_err: intref = ~w, "
-		  "reason = ~w~n", [IntRef, Reason]),
-	    case delete_by_intref(IntRef, StCons) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    {noreply, St}
-	    end;
-	?LISTEN_REP when byte_size(Bin) >= 11 ->  
-	    {IntRef, ListenFd, LPort} = decode_msg(Bin, [int32, int32, int16]),
-	    debug(St, "listen_rep: intref = ~w, "
-		  "listenfd = ~w, sport = ~w~n", [IntRef, ListenFd, LPort]),
-	    case replace_fd_from_by_intref(IntRef, StCons, ListenFd, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, ListenFd, LPort}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% ListenFd has to be closed.
-		    send_cmd(Port, ?CLOSE, int32(ListenFd)),
-		    {noreply, St}
-	    end;
-
-	%%
-	%% proxy join
-	%%
-	?PROXY_JOIN_REP when byte_size(Bin) >= 5 -> 
-	    Fd = decode_msg(Bin, [int32]),
-	    debug(St, "proxy_join_rep: fd = ~w~n",
-		  [Fd]),
-	    case get_by_fd(Fd, StCons) of
-		{ok, {_, _, From}} ->
-		    gen_server:reply(From, ok),
-		    {noreply, St};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?PROXY_JOIN_ERR when byte_size(Bin) >= 5 -> 
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "proxy_join_rep: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case delete_by_fd(Fd, StCons) of
-		{ok, {_, _, From}, Cons} ->
-		    case Reason of
-			enoproxysocket ->	
-			    send_cmd(Port, ?CLOSE, int32(Fd));
-			_ ->
-			    ok
-			    %% Must not close Fd since it is published
-		    end,
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% peername
-	%%
-	?GETPEERNAME_REP when byte_size(Bin) >= 5 ->
-	    {Fd, LPort, IPString} = decode_msg(Bin, [int32, int16, string]),
-	    debug(St, "getpeername_rep: fd = ~w, "
-		  "sport = ~w, ip = ~p~n", [Fd, LPort, IPString]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, {IPString, LPort}}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?GETPEERNAME_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "getpeername_err: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% ioctl
-	%%
-	?IOCTL_OK when byte_size(Bin) >= 5 ->
-	    Fd = decode_msg(Bin, [int32]),
-	    debug(St, "ioctl_ok: fd = ~w~n",
-		  [Fd]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, ok),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?IOCTL_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "ioctl_err: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% sockname
-	%%
-	?GETSOCKNAME_REP when byte_size(Bin) >= 5 ->
-	    {Fd, LPort, IPString} = decode_msg(Bin, [int32, int16, string]),
-	    debug(St, "getsockname_rep: fd = ~w, "
-		  "sport = ~w, ip = ~p~n", [Fd, LPort, IPString]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, {IPString, LPort}}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?GETSOCKNAME_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "getsockname_err: fd = ~w, "
-		  "reason = ~w~n", [Fd, Reason]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-
-	%%
-	%% peercert
-	%%
-	?GETPEERCERT_REP when byte_size(Bin) >= 5 ->
-	    {Fd, Cert} = decode_msg(Bin, [int32, bin]),
-	    debug(St, "getpeercert_rep: fd = ~w~n", [Fd]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {ok, Cert}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end;
-	?GETPEERCERT_ERR when byte_size(Bin) >= 5 ->
-	    {Fd, Reason} = decode_msg(Bin, [int32, atom]),
-	    debug(St, "getpeercert_err: fd = ~w, reason = ~w~n", 
-		  [Fd, Reason]),
-	    case replace_from_by_fd(Fd, StCons, []) of
-		{ok, {_, _, From}, Cons} ->
-		    gen_server:reply(From, {error, Reason}),
-		    {noreply, St#st{cons = Cons}};
-		_Other ->
-		    %% Already closed
-		    {noreply, St}
-	    end
-    end;
-
-%%
-%% EXIT
-%%
-handle_info({'EXIT', Pid, Reason}, St) when is_pid(Pid) ->
-    debug(St, "exit pid = ~w, "
-	  "reason = ~w~n", [Pid, Reason]),
-    case delete_by_pid(Pid, St#st.cons) of
-	{ok, {{intref, _}, Pid, _}, Cons} ->
-	    {noreply, St#st{cons = Cons}};
-	{ok, {Fd, Pid, _}, Cons} ->
-	    send_cmd(St#st.port, ?CLOSE, int32(Fd)), 
-	    %% If Fd is a listen socket fd, there might be pending
-	    %% accepts for that fd.
-	    case delete_all_by_fd(Fd, St#st.paccepts) of
-		{ok, DelAccepts, RemAccepts} ->
-		    %% Reply {error, closed} to all pending accepts.
-		    lists:foreach(fun({_, _, From}) ->
-					  gen_server:reply(From, 
-							   {error, closed}) 
-				  end, DelAccepts),
-		    {noreply, 
-		     St#st{cons = Cons, paccepts = RemAccepts}};
-		_ ->
-		    {noreply, St#st{cons = Cons}}
-	    end;
-	_ ->
-	    case delete_by_pid(Pid, St#st.paccepts) of
-		{ok, {ListenFd, _, _}, PAccepts} ->
-		    %% decrement ref count in port program
-		    send_cmd(St#st.port, ?NOACCEPT, int32(ListenFd)),
-		    {noreply, St#st{paccepts = PAccepts}};
-		_ ->
-		    {noreply, St}
-	    end
-    end;
-
-%%
-%% 'badsig' means bad message to port. Port program is unaffected.
-%%
-handle_info({'EXIT', Port, badsig}, #st{port = Port} = St) ->
-    debug(St, "badsig!!!~n", []),
-    {noreply, St};
-
-handle_info({'EXIT', Port, Reason}, #st{port = Port} = St) ->
-    {stop, Reason, St};
-
-handle_info(Info, St) ->
-    debug(St, "unexpected info: ~w~n", [Info]),
-    {noreply, St}.
-
-%%
-%% terminate(Reason, St) -> any
-%%
-terminate(_Reason, _St) ->
-    ok.
-
-%% 
-%% code_change(OldVsn, St, Extra) -> {ok, NSt}
-%%
-code_change(_OldVsn, St, _Extra) ->
-    {ok, St}.
-
-%%%----------------------------------------------------------------------
-%%% Internal functions
-%%%----------------------------------------------------------------------
-
-%%
-%% Send binary command to sock
-%%
-send_cmd(Port, Cmd, Args) ->
-    Port ! {self(), {command, [Cmd| Args]}}.
-
-%%
-%% add(Descr, Cons) -> NCons
-%%
-add(D, L) -> 
-    [D| L].
-
-%%
-%% get_by_fd(Fd, Cons) -> {ok, Descr} | not_found
-%%
-get_by_fd(Fd, Cons) ->
-    get_by_pos(Fd, 1, Cons).
-
-%%
-%% delete_by_fd(Fd, Cons) -> {ok, OldDesc, NewCons} | not_found.
-%%
-delete_by_fd(Fd, Cons) ->
-    delete_by_pos(Fd, 1, Cons).
-
-%%
-%% delete_all_by_fd(Fd, Cons) -> {ok, DelCons, RemCons} | not_found.
-%%
-delete_all_by_fd(Fd, Cons) ->
-    delete_all_by_pos(Fd, 1, Cons).
-
-%%
-%% delete_by_intref(IntRef, Cons) -> {ok, OldDesc, NewCons} | not_found.
-%%
-delete_by_intref(IntRef, Cons) ->
-    delete_by_pos({intref, IntRef}, 1, Cons).
-
-%%
-%% delete_by_pid(Pid, Cons) -> {ok, OldDesc, NewCons} | not_found.
-%%
-delete_by_pid(Pid, Cons) ->
-    delete_by_pos(Pid, 2, Cons).
-
-%%
-%% delete_last_by_fd(Fd, Cons) -> {ok, OldDesc, NCons} | not_found
-%%
-delete_last_by_fd(Fd, Cons) ->
-    case dlbf(Fd, Cons) of 
-	{X, L} ->
-	    {ok, X, L};
-	_Other  ->
-	    not_found
-    end.
-
-dlbf(Fd, [H]) -> 
-    last_elem(Fd, H, []);
-dlbf(Fd, [H|T]) ->
-    case dlbf(Fd, T) of
-	{X, L} -> 
-	    {X, [H|L]};
-	L -> 
-	    last_elem(Fd, H, L)
-    end;
-dlbf(_Fd, []) ->  
-    [].
-
-last_elem(Fd, H, L) when element(1, H) == Fd ->
-    {H, L};
-last_elem(_, H, L) ->
-    [H|L].
-
-
-%%
-%% replace_from_by_fd(Fd, Cons, From) -> {ok, OldDesc, NewList} | not_found
-%%
-replace_from_by_fd(Fd, Cons, From) ->
-    replace_posn_by_pos(Fd, 1, Cons, [{From, 3}]).
-
-%%
-%% replace_fd_by_intref(IntRef, Cons, Fd) -> {ok, OldDesc, NewList} | not_f.
-%%
-replace_fd_by_intref(IntRef, Cons, Fd) ->
-    replace_posn_by_pos({intref, IntRef}, 1, Cons, [{Fd, 1}]).
-
-%%
-%% replace_fd_from_by_intref(IntRef, Cons, NFd, From) -> 
-%%					{ok, OldDesc, NewList} |  not_found
-%%
-replace_fd_from_by_intref(IntRef, Cons, NFd, From) ->
-    replace_posn_by_pos({intref, IntRef}, 1, Cons, [{NFd, 1}, {From, 3}]).
-
-
-%%
-%% All *_by_pos functions
-%%
-
-get_by_pos(Key, Pos, [H|_]) when element(Pos, H) == Key -> 
-    {ok, H};
-get_by_pos(Key, Pos, [_|T]) -> 
-    get_by_pos(Key, Pos, T);
-get_by_pos(_, _, []) -> 
-    not_found.
-
-delete_by_pos(Key, Pos, Cons) ->
-    case delete_by_pos1(Key, Pos, {not_found, Cons}) of
-	{not_found, _} ->
-	    not_found;
-	{ODesc, NCons} ->
-	    {ok, ODesc, NCons}
-    end.
-delete_by_pos1(Key, Pos, {_R, [H|T]}) when element(Pos, H) == Key ->
-    {H, T};
-delete_by_pos1(Key, Pos, {R, [H|T]}) ->
-    {R0, T0} = delete_by_pos1(Key, Pos, {R, T}),
-    {R0, [H| T0]};
-delete_by_pos1(_, _, {R, []}) ->
-    {R, []}.
-
-delete_all_by_pos(Key, Pos, Cons) ->
-    case lists:foldl(fun(H, {Ds, Rs}) when element(Pos, H) == Key ->
-			     {[H|Ds], Rs};
-			(H, {Ds, Rs}) ->
-			     {Ds, [H|Rs]} 
-		     end, {[], []}, Cons) of
-	{[], _} ->
-	    not_found;
-	{DelCons, RemCons} ->
-	    {ok, DelCons, RemCons}
-    end.
-
-replace_posn_by_pos(Key, Pos, Cons, Repls) ->
-    replace_posn_by_pos1(Key, Pos, Cons, Repls, []).
-
-replace_posn_by_pos1(Key, Pos, [H0| T], Repls, Acc)
-  when element(Pos, H0) =:= Key ->
-    H = lists:foldl(fun({Val, VPos}, Tuple) -> 
-			    setelement(VPos, Tuple, Val) 
-		    end, H0, Repls), 
-    {ok, H0, lists:reverse(Acc, [H| T])};
-replace_posn_by_pos1(Key, Pos, [H|T], Repls, Acc) ->
-    replace_posn_by_pos1(Key, Pos, T, Repls, [H| Acc]);
-replace_posn_by_pos1(_, _, [], _, _) ->
-    not_found.
-
-%%
-%% Binary/integer conversions
-%%
-int16(I) ->
-    %%[(I bsr 8) band 255, I band 255].
-    <<I:16>>.
-
-int32(I) -> 
-    %%     [(I bsr 24) band 255,
-    %%      (I bsr 16) band 255,
-    %%      (I bsr  8) band 255,
-    %%      I band 255].
-    <<I:32>>.
-
-%% decode_msg(Bin, Format) -> Tuple | integer() | atom() | string() | 
-%%				list of binaries()
-%%
-%% Decode message from binary
-%% Format = [spec()]
-%% spec() = int16 | int32 | string | atom | bin | bins
-%%
-%% Notice:  The first byte (op code) of the binary message is removed.
-%% Notice:  bins returns a *list* of binaries. 
-%%  
-decode_msg(<<_, Bin/binary>>, Format) ->
-    Dec = dec(Format, Bin),
-    case Dec of
-	[Dec1] -> Dec1;
-	_  -> list_to_tuple(Dec)
-    end.
-
-dec([], _) ->
-    [];
-dec([int16| F], <<N:16, Bin/binary>>) ->
-    [N| dec(F, Bin)];
-dec([int32| F], <<N:32, Bin/binary>>) ->
-    [N| dec(F, Bin)];
-dec([string| F], Bin0) ->
-    {Cs, Bin1} = dec_string(Bin0),
-    [Cs| dec(F, Bin1)];
-dec([atom|F], Bin0) ->
-    {Cs, Bin1} = dec_string(Bin0),
-    [list_to_atom(Cs)| dec(F, Bin1)];
-
-dec([bin|F], Bin) ->
-    {Bin1, Bin2} = dec_bin(Bin),
-    [Bin1| dec(F, Bin2)].
-
-%% NOTE: This clause is not actually used yet.
-%% dec([bins|F], <<N:32, Bin0/binary>>) ->
-%%     {Bins, Bin1} = dec_bins(N, Bin0),
-%%     [Bins| dec(F, Bin1)].
-
-dec_string(Bin) ->
-    dec_string(Bin, []).
-
-dec_string(<<0, Bin/binary>>, RCs) ->
-    {lists:reverse(RCs), Bin};
-dec_string(<<C, Bin/binary>>, RCs) ->
-    dec_string(Bin, [C| RCs]).
-
-dec_bin(<<L:32, Bin0/binary>>) ->
-    <<Bin1:L/binary, Bin2/binary>> = Bin0,
-    {Bin1, Bin2}.
-
-%% dec_bins(N, Bin) ->
-%%     dec_bins(N, Bin, []).
-
-%% dec_bins(0, Bin, Acc) ->
-%%     {lists:reverse(Acc), Bin};
-%% dec_bins(N, Bin0, Acc) when N > 0 ->
-%%     {Bin1, Bin2} = dec_bin(Bin0),
-%%     dec_bins(N - 1, Bin2, [Bin1| Acc]).
-
-%%
-%% new_intref
-%%
-new_intref(St) ->
-    (St#st.intref + 1) band 16#ffffffff.
-
-%%
-%% {Program, Flags} = mk_cmd_line(DefaultProgram)
-%%
-mk_cmd_line(Default) ->
-    {port_program(Default), 
-     lists:flatten([debug_flag(), " ", debug_port_flag(), " ",
-		    debugdir_flag(), " ", 
-		    msgdebug_flag(), " ", proxylsport_flag(), " ", 
-		    proxybacklog_flag(), " ", ephemeral_rsa_flag(), " ",
-		    ephemeral_dh_flag(), " ",
-		    protocol_version_flag(), " "])}.
-
-port_program(Default) ->
-    case application:get_env(ssl, port_program) of
-	{ok, Program} when is_list(Program) ->
-	    Program;
-	_Other ->
-	    Default
-    end.
-
-%%
-%% As this server may be started by the distribution, it is not safe to assume 
-%% a working code server, neither a working file server.
-%% I try to utilize the most primitive interfaces available to determine
-%% the directory of the port_program.
-%%
-find_priv_bin() ->
-    PrivDir = case (catch code:priv_dir(ssl)) of
-		  {'EXIT', _} ->
-		      %% Code server probably not startet yet
-		      {ok, P} = erl_prim_loader:get_path(),
-		      ModuleFile = atom_to_list(?MODULE) ++ extension(),
-		      Pd = (catch lists:foldl
-			    (fun(X,Acc) ->
-				     M = filename:join([X, ModuleFile]),
-				     %% The file server probably not started
-				     %% either, has to use raw interface.
-				     case file:raw_read_file_info(M) of 
-					 {ok,_} -> 
-					     %% Found our own module in the
-					     %% path, lets bail out with
-					     %% the priv_dir of this directory
-					     Y = filename:split(X),
-					     throw(filename:join
-						   (lists:sublist
-						    (Y,length(Y) - 1) 
-						    ++ ["priv"])); 
-					 _ -> 
-					     Acc 
-				     end 
-			     end,
-			     false,P)),
-		      case Pd of
-			  false ->
-			      exit(ssl_priv_dir_indeterminate);
-			  _ ->
-			      Pd
-		      end;
-		  Dir ->
-		      Dir
-	      end,
-    filename:join([PrivDir, "bin"]).
-
-extension() ->
-    %% erlang:info(machine) returns machine name as text in all uppercase
-    "." ++ string:to_lower(erlang:system_info(machine)).
-
-debug_flag() ->
-    case os:getenv("ERL_SSL_DEBUG") of
-	false ->
-	    get_env(debug, "-d");
-	_ ->
-	    "-d"
-    end.
-
-debug_port_flag() ->
-    case os:getenv("ERL_SSL_DEBUGPORT") of
-	false ->
-	    get_env(debug, "-d");
-	_ ->
-	    "-d"
-    end.
-
-msgdebug_flag() ->
-    case os:getenv("ERL_SSL_MSGDEBUG") of
-	false ->
-	    get_env(msgdebug, "-dm");
-	_  ->
-	    "-dm"
-    end.
-
-proxylsport_flag() ->
-    case application:get_env(ssl, proxylsport) of
-	{ok, PortNum} ->
-	    "-pp " ++ integer_to_list(PortNum);
-	_Other ->
-	    ""
-    end.
-
-proxybacklog_flag() ->
-    case application:get_env(ssl, proxylsbacklog) of
-	{ok, Size} ->
-	    "-pb " ++ integer_to_list(Size);
-	_Other ->
-	    ""
-    end.
-
-debugdir_flag() ->
-    case os:getenv("ERL_SSL_DEBUG") of
-	false ->
-	    case application:get_env(ssl, debugdir) of
-		{ok, Dir} when is_list(Dir) ->
-		    "-dd " ++ Dir;
-		_Other ->
-		    ""
-	    end;
-	_  ->
-	    "-dd ./"
-    end.
-    
-ephemeral_rsa_flag() ->
-    case application:get_env(ssl, ephemeral_rsa) of
-	{ok, true} ->
-	    "-ersa ";
-	_Other ->
-	    ""
-    end.
-
-ephemeral_dh_flag() ->
-    case application:get_env(ssl, ephemeral_dh) of
-	{ok, true} ->
-	    "-edh ";
-	_Other ->
-	    ""
-    end.
-
-protocol_version_flag() ->
-    case application:get_env(ssl, protocol_version) of
-	{ok, []} ->
-	    "";
-	{ok, Vsns} when is_list(Vsns) ->
-	    case transform_vsns(Vsns) of
-		N when (N > 0) ->
-		    "-pv " ++ integer_to_list(N);
-		_ ->
-		    ""
-	    end;
-	_Other ->
-	    ""
-    end.
-
-transform_vsns(Vsns) ->
-    transform_vsns(Vsns, 0).
-
-transform_vsns([sslv2| Vsns], I) ->
-    transform_vsns(Vsns, I bor ?SSLv2);
-transform_vsns([sslv3| Vsns], I) ->
-    transform_vsns(Vsns, I bor ?SSLv3);
-transform_vsns([tlsv1| Vsns], I) ->
-    transform_vsns(Vsns, I bor ?TLSv1);
-transform_vsns([_ | Vsns], I) ->
-    transform_vsns(Vsns, I);
-transform_vsns([], I) ->
-    I.
-
-protocol_name("SSLv2") -> sslv2;
-protocol_name("SSLv3") -> sslv3;
-protocol_name("TLSv1") -> tlsv1.
-
-get_env(Key, Val) ->
-    case application:get_env(ssl, Key) of
-	{ok, true} ->
-	    Val;
-	_Other ->
-	    ""
-    end.
-
-ip_to_string({A,B,C,D}) ->
-    [integer_to_list(A),$.,integer_to_list(B),$.,
-     integer_to_list(C),$.,integer_to_list(D)].
-
-debug(St, Format, Args) ->
-    debug1(St#st.debug, Format, Args).
-
-debug1(true, Format0, Args) ->
-    {_MS, S, MiS} = erlang:now(),
-    Secs = S rem 100, 
-    MiSecs = MiS div 1000,
-    Format = "++++ ~3..0w:~3..0w ssl_server (~w): " ++ Format0, 
-    io:format(Format, [Secs, MiSecs, self()| Args]);
-debug1(_, _, _) ->
-    ok.
diff --git a/lib/ssl/src/ssl_sup.erl b/lib/ssl/src/ssl_sup.erl
index a008682b89..cb10b1362a 100644
--- a/lib/ssl/src/ssl_sup.erl
+++ b/lib/ssl/src/ssl_sup.erl
@@ -51,16 +51,15 @@ init([]) ->
 
     %% Does not start any port programs so it does matter
     %% so much if it is not used!
-    Child2 = {ssl_broker_sup, {ssl_broker_sup, start_link, []},
-	      permanent, 2000, supervisor, [ssl_broker_sup]},
+    %% Child2 = {ssl_broker_sup, {ssl_broker_sup, start_link, []},
+    %% 	      permanent, 2000, supervisor, [ssl_broker_sup]},
 
 
     %% New ssl
     SessionCertManager = session_and_cert_manager_child_spec(),
     ConnetionManager = connection_manager_child_spec(),
 
-    {ok, {{one_for_all, 10, 3600}, [Child2, SessionCertManager,
-				    ConnetionManager]}}.
+    {ok, {{one_for_all, 10, 3600}, [SessionCertManager, ConnetionManager]}}.
 
 
 manager_opts() ->
diff --git a/lib/ssl/test/Makefile b/lib/ssl/test/Makefile
index 45a401aa68..232e307a03 100644
--- a/lib/ssl/test/Makefile
+++ b/lib/ssl/test/Makefile
@@ -42,26 +42,15 @@ MODULES = \
 	ssl_to_openssl_SUITE \
 	ssl_session_cache_SUITE	\
 	ssl_dist_SUITE \
-	ssl_test_MACHINE \
-	old_ssl_active_SUITE \
-	old_ssl_active_once_SUITE \
-	old_ssl_passive_SUITE \
-        old_ssl_verify_SUITE \
-	old_ssl_peer_cert_SUITE \
-	old_ssl_misc_SUITE \
-	old_ssl_protocol_SUITE \
-	old_transport_accept_SUITE \
-	old_ssl_dist_SUITE \
 	make_certs\
 	erl_make_certs
 
 
 ERL_FILES = $(MODULES:%=%.erl)
 
-HRL_FILES = ssl_test_MACHINE.hrl 
+HRL_FILES =
 
 HRL_FILES_SRC = \
-	ssl_int.hrl \
 	ssl_internal.hrl\
 	ssl_alert.hrl \
 	ssl_handshake.hrl \
diff --git a/lib/ssl/test/old_ssl_active_SUITE.erl b/lib/ssl/test/old_ssl_active_SUITE.erl
deleted file mode 100644
index 52ff0bcc5d..0000000000
--- a/lib/ssl/test/old_ssl_active_SUITE.erl
+++ /dev/null
@@ -1,395 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_active_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 cinit_return_chkclose/1,
-	 sinit_return_chkclose/1,
-	 cinit_big_return_chkclose/1,
-	 sinit_big_return_chkclose/1,
-	 cinit_big_echo_chkclose/1,
-	 cinit_huge_echo_chkclose/1,
-	 sinit_big_echo_chkclose/1,
-	 cinit_few_echo_chkclose/1,
-	 cinit_many_echo_chkclose/1,
-	 cinit_cnocert/1
-	]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
-
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
--define(MANYCONNS, ssl_test_MACHINE:many_conns()).
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [cinit_return_chkclose, sinit_return_chkclose,
-     cinit_big_return_chkclose, sinit_big_return_chkclose,
-     cinit_big_echo_chkclose, cinit_huge_echo_chkclose,
-     sinit_big_echo_chkclose, cinit_few_echo_chkclose,
-     cinit_many_echo_chkclose, cinit_cnocert].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains, and record the number of available "
-	"file descriptors";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-    case os:type() of
-	{unix, _} ->
-	    ?line io:format("Max fd value: ~s", [os:cmd("ulimit -n")]);
-	_ ->
-	    ok
-    end, 
-    %% XXX Also record: Erlang/SSL version, version of OpenSSL, 
-    %% operating system, version of OTP, Erts, kernel and stdlib. 
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto!"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-cinit_return_chkclose(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_return_chkclose(suite) ->
-    [];
-cinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-sinit_return_chkclose(doc) ->
-    "Server sends 1000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_return_chkclose(suite) ->
-    [];
-sinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, [{ssl_imp, old}|SsslOpts]},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize},
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, [{ssl_imp, old}|CsslOpts]},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-cinit_big_return_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_big_return_chkclose(suite) ->
-    [];
-cinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-sinit_big_return_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_big_return_chkclose(suite) ->
-    [];
-sinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-cinit_big_echo_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that echoes them back "
-	"and closes. Client waits for close. Both have certs.";
-cinit_big_echo_chkclose(suite) ->
-    [];
-cinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-cinit_huge_echo_chkclose(doc) ->
-    "Client sends 500000 bytes to server, that echoes them back "
-	"and closes. Client waits for close. Both have certs.";
-cinit_huge_echo_chkclose(suite) ->
-    [];
-cinit_huge_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 500000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-sinit_big_echo_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that echoes them back "
-	"and closes. Server waits for close. Both have certs.";
-sinit_big_echo_chkclose(suite) ->
-    [];
-sinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {echo, DataSize},
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-
-%% This case is repeated several times.
-
-cinit_few_echo_chkclose(X) -> cinit_many_echo_chkclose(X, 7).
-
-cinit_many_echo_chkclose(X) -> cinit_many_echo_chkclose(X, ?MANYCONNS).
-
-cinit_many_echo_chkclose(doc, _NConns) ->
-    "N client sends 10000 bytes to server, that echoes them back "
-	"and closes. Clients wait for close. All have certs.";
-cinit_many_echo_chkclose(suite, _NConns) ->
-    [];
-cinit_many_echo_chkclose(Config, NConns) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 10000, LPort = 3456,
-    Timeout = 80000,
-
-    io:format("~w connections", [NConns]),
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-
-cinit_cnocert(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Client has no cert, "
-	"but server has.";
-cinit_cnocert(suite) ->
-    [];
-cinit_cnocert(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3457,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE, 
-			    Config).
-
-
diff --git a/lib/ssl/test/old_ssl_active_once_SUITE.erl b/lib/ssl/test/old_ssl_active_once_SUITE.erl
deleted file mode 100644
index c7beadb301..0000000000
--- a/lib/ssl/test/old_ssl_active_once_SUITE.erl
+++ /dev/null
@@ -1,417 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_active_once_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 server_accept_timeout/1,
-	 cinit_return_chkclose/1,
-	 sinit_return_chkclose/1,
-	 cinit_big_return_chkclose/1,
-	 sinit_big_return_chkclose/1,
-	 cinit_big_echo_chkclose/1,
-	 cinit_huge_echo_chkclose/1,
-	 sinit_big_echo_chkclose/1,
-	 cinit_few_echo_chkclose/1,
-	 cinit_many_echo_chkclose/1,
-	 cinit_cnocert/1
-	]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
--define(MANYCONNS, ssl_test_MACHINE:many_conns()).
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [server_accept_timeout, cinit_return_chkclose,
-     sinit_return_chkclose, cinit_big_return_chkclose,
-     sinit_big_return_chkclose, cinit_big_echo_chkclose,
-     cinit_huge_echo_chkclose, sinit_big_echo_chkclose,
-     cinit_few_echo_chkclose, cinit_many_echo_chkclose,
-     cinit_cnocert].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-server_accept_timeout(doc) ->
-    "Server has one pending accept with timeout. Checks that return "
-	"value is {error, timeout}.";
-server_accept_timeout(suite) ->
-    [];
-server_accept_timeout(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    Timeout = 40000, NConns = 1,
-    AccTimeout = 3000,
-
-    ?line {ok, {_, SsslOpts}} = mk_ssl_cert_opts(Config),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, AccTimeout}, 
-	     accept_timeout],
-    ?line test_server_only(NConns, LCmds, ACmds, Timeout, ?MODULE,
-			   Config).
-
-cinit_return_chkclose(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_return_chkclose(suite) ->
-    [];
-cinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout},
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_return_chkclose(doc) ->
-    "Server sends 1000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_return_chkclose(suite) ->
-    [];
-sinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_big_return_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_big_return_chkclose(suite) ->
-    [];
-cinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    %% Set {active, false} so that accept is passive to begin with. 
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},	
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {sockopts, [{active, once}]},	% {active, once} here.
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_big_return_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_big_return_chkclose(suite) ->
-    [];
-sinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_big_echo_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that echoes them back "
-	"and closes. Client waits for close. Both have certs.";
-cinit_big_echo_chkclose(suite) ->
-    [];
-cinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_huge_echo_chkclose(doc) ->
-    "Client sends 500000 bytes to server, that echoes them back "
-	"and closes. Client waits for close. Both have certs.";
-cinit_huge_echo_chkclose(suite) ->
-    [];
-cinit_huge_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 500000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_big_echo_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that echoes them back "
-	"and closes. Server waits for close. Both have certs.";
-sinit_big_echo_chkclose(suite) ->
-    [];
-sinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {echo, DataSize},
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_few_echo_chkclose(X) -> cinit_many_echo_chkclose(X, 7).
-
-cinit_many_echo_chkclose(X) -> cinit_many_echo_chkclose(X, ?MANYCONNS).
-
-cinit_many_echo_chkclose(doc, _NConns) ->
-    "client send 10000 bytes to server, that echoes them back "
-	"and closes. Clients wait for close. All have certs.";
-cinit_many_echo_chkclose(suite, _NConns) ->
-    [];
-cinit_many_echo_chkclose(Config, NConns) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 10000, LPort = 3456,
-    Timeout = 80000,
-
-    io:format("~w connections", [NConns]),
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_cnocert(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Client has no cert, "
-	"but server has.";
-cinit_cnocert(suite) ->
-    [];
-cinit_cnocert(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3457,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, once}]},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-
diff --git a/lib/ssl/test/old_ssl_dist_SUITE.erl b/lib/ssl/test/old_ssl_dist_SUITE.erl
deleted file mode 100644
index 4544fb616a..0000000000
--- a/lib/ssl/test/old_ssl_dist_SUITE.erl
+++ /dev/null
@@ -1,617 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
-
-
-%%%-------------------------------------------------------------------
-%%% File    : ssl_dist_SUITE.erl
-%%% Author  : Rickard Green
-%%% Description : Test that the Erlang distribution works over ssl.
-%%%
-%%% Created : 15 Nov 2007 by Rickard Green
-%%%-------------------------------------------------------------------
--module(old_ssl_dist_SUITE).
-
--include_lib("test_server/include/test_server.hrl").
-
--define(DEFAULT_TIMETRAP_SECS, 240).
-
--define(AWAIT_SLL_NODE_UP_TIMEOUT, 30000).
-
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2]).
--export([init_per_suite/1,
-	 end_per_suite/1,
-	 init_per_testcase/2,
-	 end_per_testcase/2]).
--export([cnct2tstsrvr/1]).
-
--export([basic/1]).
-
--record(node_handle, {connection_handler, socket, name, nodename}).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [basic].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(Config) ->
-    try crypto:start() of
-	ok ->
-	    add_ssl_opts_config(Config)
-    catch _:_ ->
-	    {skip, "Crypto did not start"}
-    end.
-
-end_per_suite(Config) ->
-    application:stop(crypto),
-    Config.
-
-init_per_testcase(Case, Config) when list(Config) ->
-    Dog = ?t:timetrap(?t:seconds(?DEFAULT_TIMETRAP_SECS)),
-    [{watchdog, Dog},{testcase, Case}|Config].
-
-end_per_testcase(_Case, Config) when list(Config) ->
-    Dog = ?config(watchdog, Config),
-    ?t:timetrap_cancel(Dog),
-    ok.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%                                                                       %%
-%% Testcases                                                             %%
-%%                                                                       %%
-
-basic(doc) ->
-    ["Test that two nodes can connect via ssl distribution"];
-basic(suite) ->
-    [];
-basic(Config) when is_list(Config) ->
-    ?line NH1 = start_ssl_node(Config),
-    ?line Node1 = NH1#node_handle.nodename,
-    ?line NH2 = start_ssl_node(Config),
-    ?line Node2 = NH2#node_handle.nodename,
-
-    ?line pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
-
-    ?line [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
-    ?line [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
-
-    %% The test_server node has the same cookie as the ssl nodes
-    %% but it should not be able to communicate with the ssl nodes
-    %% via the erlang distribution.
-    ?line pang = net_adm:ping(Node1),
-    ?line pang = net_adm:ping(Node2),
-
-
-    %%
-    %% Check that we are able to communicate over the erlang
-    %% distribution between the ssl nodes.
-    %%
-    ?line Ref = make_ref(),
-    ?line spawn(fun () ->
-			apply_on_ssl_node(
-			  NH1,
-			  fun () -> 
-				  tstsrvr_format("Hi from ~p!~n",
-						 [node()]),
-				  send_to_tstcntrl({Ref, self()}),
-				  receive
-				      {From, ping} ->
-					  From ! {self(), pong}
-				  end
-			  end)
-		end),
-    ?line receive
-	      {Ref, SslPid} ->
-		  ?line ok = apply_on_ssl_node(
-			       NH2,
-			       fun () ->
-				       tstsrvr_format("Hi from ~p!~n",
-						      [node()]),
-				       SslPid ! {self(), ping},
-				       receive
-					   {SslPid, pong} ->
-					       ok
-				       end
-			       end)
-	  end,
-
-    ?line stop_ssl_node(NH1),
-    ?line stop_ssl_node(NH2),
-    ?line success(Config).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%                                                                       %%
-%% Internal functions                                                    %%
-%%                                                                       %%
-
-%%
-%% ssl_node side api
-%%
-
-tstsrvr_format(Fmt, ArgList) ->
-    send_to_tstsrvr({format, Fmt, ArgList}).
-
-send_to_tstcntrl(Message) ->
-    send_to_tstsrvr({message, Message}).
-
-
-%%
-%% test_server side api
-%%
-
-apply_on_ssl_node(Node, M, F, A) when atom(M), atom(F), list(A) ->
-    Ref = make_ref(),
-    send_to_ssl_node(Node, {apply, self(), Ref, M, F, A}),
-    receive
-	{Ref, Result} ->
-	    Result
-    end.
-
-apply_on_ssl_node(Node, Fun) when is_function(Fun, 0) ->
-    Ref = make_ref(),
-    send_to_ssl_node(Node, {apply, self(), Ref, Fun}),
-    receive
-	{Ref, Result} ->
-	    Result
-    end.
-
-stop_ssl_node(#node_handle{connection_handler = Handler,
-			   socket = Socket,
-			   name = Name}) ->
-    ?t:format("Trying to stop ssl node ~s.~n", [Name]),
-    Mon = erlang:monitor(process, Handler),
-    unlink(Handler),
-    case gen_tcp:send(Socket, term_to_binary(stop)) of
-	ok ->
-	    receive
-		{'DOWN', Mon, process, Handler, Reason} ->
-		    case Reason of
-			normal -> ok;
-			_ -> exit(Reason)
-		    end
-	    end;
-	Error ->
-	    erlang:demonitor(Mon, [flush]),
-	    exit(Error)
-    end.
-
-start_ssl_node(Config) ->
-    start_ssl_node(Config, "").
-
-start_ssl_node(Config, XArgs) ->
-    Name = mk_node_name(Config),
-    SSL = ?config(ssl_opts, Config),
-    SSLDistOpts = setup_dist_opts(Name, ?config(priv_dir, Config)),
-    start_ssl_node_raw(Name, SSL ++ " " ++ SSLDistOpts ++ XArgs).
-
-start_ssl_node_raw(Name, Args) ->
-    {ok, LSock} = gen_tcp:listen(0,
-				 [binary, {packet, 4}, {active, false}]),
-    {ok, ListenPort} = inet:port(LSock),
-    CmdLine = mk_node_cmdline(ListenPort, Name, Args),
-    ?t:format("Attempting to start ssl node ~s: ~s~n", [Name, CmdLine]),
-    case open_port({spawn, CmdLine}, []) of
-	Port when port(Port) ->
-	    unlink(Port),
-	    erlang:port_close(Port),
-	    case await_ssl_node_up(Name, LSock) of
-		#node_handle{} = NodeHandle ->
-		    ?t:format("Ssl node ~s started.~n", [Name]),
-		    NodeName = list_to_atom(Name ++ "@" ++ host_name()),
-		    NodeHandle#node_handle{nodename = NodeName};
-		Error ->
-		    exit({failed_to_start_node, Name, Error})
-	    end;
-	Error ->
-	    exit({failed_to_start_node, Name, Error})
-    end.
-
-%%
-%% command line creation
-%%
-
-host_name() ->
-    [$@ | Host] = lists:dropwhile(fun ($@) -> false; (_) -> true end,
-				  atom_to_list(node())),
-    Host.
-
-mk_node_name(Config) ->
-    {A, B, C} = erlang:now(),
-    Case = ?config(testcase, Config),
-    atom_to_list(?MODULE)
-	++ "_"
-	++ atom_to_list(Case)
-	++ "_"
-	++ integer_to_list(A)
-	++ "-"
-	++ integer_to_list(B)
-	++ "-"
-	++ integer_to_list(C).
-
-mk_node_cmdline(ListenPort, Name, Args) ->
-    Static = "-detached -noinput",
-    Pa = filename:dirname(code:which(?MODULE)),
-    Prog = case catch init:get_argument(progname) of
-	       {ok,[[P]]} -> P;
-	       _ -> exit(no_progname_argument_found)
-	   end,
-    NameSw = case net_kernel:longnames() of
-		 false -> "-sname ";
-		 _ -> "-name "
-	     end,
-    {ok, Pwd} = file:get_cwd(),
-    Prog ++ " "
-	++ Static ++ " "
-	++ NameSw ++ " " ++ Name ++ " "
-	++ "-pa " ++ Pa ++ " " 
- 	++ "-run application start crypto -run application start public_key "
-	++ "-run " ++ atom_to_list(?MODULE) ++ " cnct2tstsrvr "
-	++ host_name() ++ " "
-	++ integer_to_list(ListenPort) ++ " "
-	++ Args ++ " "
-	++ "-env ERL_CRASH_DUMP " ++ Pwd ++ "/erl_crash_dump." ++ Name ++ " "
-	++ "-setcookie " ++ atom_to_list(erlang:get_cookie()).
-
-%%
-%% Connection handler test_server side
-%%
-
-await_ssl_node_up(Name, LSock) ->
-    case gen_tcp:accept(LSock, ?AWAIT_SLL_NODE_UP_TIMEOUT) of
-	timeout ->
-	    gen_tcp:close(LSock),
-	    ?t:format("Timeout waiting for ssl node ~s to come up~n",
-		      [Name]),
-	    timeout;
-	{ok, Socket} ->
-	    gen_tcp:close(LSock),
-	    case gen_tcp:recv(Socket, 0) of
-		{ok, Bin} ->
-		    check_ssl_node_up(Socket, Name, Bin);
-		{error, closed} ->
-		    gen_tcp:close(Socket),
-		    exit({lost_connection_with_ssl_node_before_up, Name})
-	    end;
-	{error, Error} ->
-	    gen_tcp:close(LSock),
-	    exit({accept_failed, Error})
-    end.
-
-check_ssl_node_up(Socket, Name, Bin) ->
-    case catch binary_to_term(Bin) of
-	{'EXIT', _} ->
-	    gen_tcp:close(Socket),
-	    exit({bad_data_received_from_ssl_node, Name, Bin});
-	{ssl_node_up, NodeName} ->
-	    case list_to_atom(Name++"@"++host_name()) of
-		NodeName ->
-		    Parent = self(),
-		    Go = make_ref(),
-		    %% Spawn connection handler on test server side
-		    Pid = spawn_link(
-			    fun () ->
-				    receive Go -> ok end,
-				    tstsrvr_con_loop(Name, Socket, Parent)
-			    end),
-		    ok = gen_tcp:controlling_process(Socket, Pid),
-		    Pid ! Go,
-		    #node_handle{connection_handler = Pid,
-				 socket = Socket,
-				 name = Name};
-		_ ->
-		    exit({unexpected_ssl_node_connected, NodeName})
-	    end;
-	Msg ->
-	    exit({unexpected_msg_instead_of_ssl_node_up, Name, Msg})
-    end.
-
-send_to_ssl_node(#node_handle{connection_handler = Hndlr}, Term) ->
-    Hndlr ! {relay_to_ssl_node, term_to_binary(Term)},
-    ok.
-
-tstsrvr_con_loop(Name, Socket, Parent) ->
-    inet:setopts(Socket,[{active,once}]),
-    receive
-	{relay_to_ssl_node, Data} when is_binary(Data) ->
-	    case gen_tcp:send(Socket, Data) of
-		ok ->
-		    ok;
-		_Error ->
-		    gen_tcp:close(Socket),
-		    exit({failed_to_relay_data_to_ssl_node, Name, Data})
-	    end;
-	{tcp, Socket, Bin} ->
-	    case catch binary_to_term(Bin) of
-		{'EXIT', _} ->
-		    gen_tcp:close(Socket),
-		    exit({bad_data_received_from_ssl_node, Name, Bin});
-		{format, FmtStr, ArgList} ->
-		    ?t:format(FmtStr, ArgList);
-		{message, Msg} ->
-		    Parent ! Msg;
-		{apply_res, To, Ref, Res} ->
-		    To ! {Ref, Res};
-		bye ->
-		    ?t:format("Ssl node ~s stopped.~n", [Name]),
-		    gen_tcp:close(Socket),
-		    exit(normal);
-		Unknown ->
-		    exit({unexpected_message_from_ssl_node, Name, Unknown})
-	    end;
-	{tcp_closed, Socket} ->
-	    gen_tcp:close(Socket),
-	    exit({lost_connection_with_ssl_node, Name})
-    end,
-    tstsrvr_con_loop(Name, Socket, Parent).
-
-%%
-%% Connection handler ssl_node side
-%%
-
-% cnct2tstsrvr() is called via command line arg -run ...
-cnct2tstsrvr([Host, Port]) when list(Host), list(Port) ->
-    %% Spawn connection handler on ssl node side
-    ConnHandler
-	= spawn(fun () ->
-			case catch gen_tcp:connect(Host,
-						   list_to_integer(Port),
-						   [binary,
-						    {packet, 4},
-						    {active, false}]) of
-			    {ok, Socket} ->
-				notify_ssl_node_up(Socket),
-				ets:new(test_server_info,
-					[set,
-					 public,
-					 named_table,
-					 {keypos, 1}]),
-				ets:insert(test_server_info,
-					   {test_server_handler, self()}),
-				ssl_node_con_loop(Socket);
-			    _Error ->
-				halt("Failed to connect to test server")
-			end
-		end),
-    spawn(fun () ->
-		  Mon = erlang:monitor(process, ConnHandler),
-		  receive
-		      {'DOWN', Mon, process, ConnHandler, Reason} ->
-			  receive after 1000 -> ok end,
-			  halt("test server connection handler terminated: "
-			       ++
-			       lists:flatten(io_lib:format("~p", [Reason])))
-		  end
-	  end).
-
-notify_ssl_node_up(Socket) ->
-    case catch gen_tcp:send(Socket,
-			    term_to_binary({ssl_node_up, node()})) of
-	ok -> ok;
-	_ -> halt("Failed to notify test server that I'm up")
-    end.
-
-send_to_tstsrvr(Term) ->
-    case catch ets:lookup_element(test_server_info, test_server_handler, 2) of
-	Hndlr when pid(Hndlr) ->
-	    Hndlr ! {relay_to_test_server, term_to_binary(Term)}, ok;
-	_ ->
-	    receive after 200 -> ok end,
-	    send_to_tstsrvr(Term)
-    end.
-
-ssl_node_con_loop(Socket) ->
-    inet:setopts(Socket,[{active,once}]),
-    receive
-	{relay_to_test_server, Data} when is_binary(Data) ->
-	    case gen_tcp:send(Socket, Data) of
-		ok ->
-		    ok;
-		_Error ->
-		    gen_tcp:close(Socket),
-		    halt("Failed to relay data to test server")
-	    end;
-	{tcp, Socket, Bin} ->
-	    case catch binary_to_term(Bin) of
-		{'EXIT', _} ->
-		    gen_tcp:close(Socket),
-		    halt("test server sent me bad data");
-		{apply, From, Ref, M, F, A} ->
-		    spawn_link(
-		      fun () ->
-			      send_to_tstsrvr({apply_res,
-					       From,
-					       Ref,
-					       (catch apply(M, F, A))})
-			  end);
-		{apply, From, Ref, Fun} ->
-		    spawn_link(fun () ->
-				       send_to_tstsrvr({apply_res,
-							From,
-							Ref,
-							(catch Fun())})
-			       end);
-		stop ->
-		    gen_tcp:send(Socket, term_to_binary(bye)),
-		    gen_tcp:close(Socket),
-		    init:stop(),
-		    receive after infinity -> ok end;
-		_Unknown ->
-		    halt("test server sent me an unexpected message")
-	    end;
-	{tcp_closed, Socket} ->
-	    halt("Lost connection to test server")
-    end,
-    ssl_node_con_loop(Socket).
-
-%%
-%% Setup ssl dist info
-%%
-
-rand_bin(N) ->
-    rand_bin(N, []).
-
-rand_bin(0, Acc) ->
-    Acc;
-rand_bin(N, Acc) ->
-    rand_bin(N-1, [random:uniform(256)-1|Acc]).
-
-make_randfile(Dir) ->
-    {ok, IoDev} = file:open(filename:join([Dir, "RAND"]), [write]),
-    {A, B, C} = erlang:now(),
-    random:seed(A, B, C),
-    ok = file:write(IoDev, rand_bin(1024)),
-    file:close(IoDev).
-
-append_files(FileNames, ResultFileName) ->
-    {ok, ResultFile} = file:open(ResultFileName, [write]),
-    do_append_files(FileNames, ResultFile).
-
-do_append_files([], RF) ->
-    ok = file:close(RF);
-do_append_files([F|Fs], RF) ->
-    {ok, Data} = file:read_file(F),
-    ok = file:write(RF, Data),
-    do_append_files(Fs, RF).
-			    
-setup_dist_opts(Name, PrivDir) ->
-    NodeDir = filename:join([PrivDir, Name]),
-    RGenDir = filename:join([NodeDir, "rand_gen"]),
-    ok = file:make_dir(NodeDir),
-    ok = file:make_dir(RGenDir),
-    make_randfile(RGenDir),
-    make_certs:all(RGenDir, NodeDir),
-    SDir = filename:join([NodeDir, "server"]),
-    SC = filename:join([SDir, "cert.pem"]),
-    SK = filename:join([SDir, "key.pem"]),
-    SKC = filename:join([SDir, "keycert.pem"]),
-    append_files([SK, SC], SKC),
-    CDir = filename:join([NodeDir, "client"]),
-    CC = filename:join([CDir, "cert.pem"]),
-    CK = filename:join([CDir, "key.pem"]),
-    CKC = filename:join([CDir, "keycert.pem"]),
-    append_files([CK, CC], CKC),
-    "-proto_dist inet_ssl "
-	++ "-ssl_dist_opt server_certfile " ++ SKC ++ " "
-	++ "-ssl_dist_opt client_certfile " ++ CKC ++ " "
-.%	++ "-ssl_dist_opt verify 1 depth 1".
-
-%%
-%% Start scripts etc...
-%%
-
-add_ssl_opts_config(Config) ->
-    %%
-    %% Start with boot scripts if on an installed system; otherwise,
-    %% just point out ssl ebin with -pa.
-    %%
-    try
-	Dir = ?config(priv_dir, Config),
-	LibDir = code:lib_dir(),
-	Apps = application:which_applications(),
-	{value, {stdlib, _, STDL_VSN}} = lists:keysearch(stdlib, 1, Apps),
-	{value, {kernel, _, KRNL_VSN}} = lists:keysearch(kernel, 1, Apps),
-	StdlDir = filename:join([LibDir, "stdlib-" ++ STDL_VSN]),
-	KrnlDir = filename:join([LibDir, "kernel-" ++ KRNL_VSN]),
-	{ok, _} = file:read_file_info(StdlDir),
-	{ok, _} = file:read_file_info(KrnlDir),
-	SSL_VSN = vsn(ssl),
-	VSN_CRYPTO = vsn(crypto),
-	VSN_PKEY = vsn(public_key),
-	
-	SslDir = filename:join([LibDir, "ssl-" ++ SSL_VSN]),
-	{ok, _} = file:read_file_info(SslDir),
-	%% We are using an installed otp system, create the boot script.
-	Script = filename:join(Dir, atom_to_list(?MODULE)),
-	{ok, RelFile} = file:open(Script ++ ".rel", [write]),
-        io:format(RelFile,
-		  "{release, ~n"
-		  " {\"SSL distribution test release\", \"~s\"},~n"
-		  " {erts, \"~s\"},~n"
-		  " [{kernel, \"~s\"},~n"
-		  "  {stdlib, \"~s\"},~n"
-		  "  {crypto, \"~s\"},~n"
-		  "  {public_key, \"~s\"},~n"
-		  "  {ssl, \"~s\"}]}.~n",
-		  [case catch erlang:system_info(otp_release) of
-		       {'EXIT', _} -> "R11B";
-		       Rel -> Rel
-		   end,
-		   erlang:system_info(version),
-		   KRNL_VSN,
-		   STDL_VSN,
-		   VSN_CRYPTO,
-		   VSN_PKEY,
-		   SSL_VSN]),
-	ok = file:close(RelFile),
-	ok = systools:make_script(Script, []),
-	[{ssl_opts, "-boot " ++ Script} | Config]
-    catch
-	_:_ ->
-	    [{ssl_opts, "-pa " ++ filename:dirname(code:which(ssl))}
-	     | add_comment_config(
-		 "Bootscript wasn't used since the test wasn't run on an "
-		 "installed OTP system.",
-		 Config)]
-    end.
-
-%%
-%% Add common comments to config
-%%
-
-add_comment_config(Comment, []) ->
-    [{comment, Comment}];
-add_comment_config(Comment, [{comment, OldComment} | Cs]) ->
-    [{comment, Comment ++ " " ++ OldComment} | Cs];
-add_comment_config(Comment, [C|Cs]) ->
-    [C|add_comment_config(Comment, Cs)].
-
-%%
-%% Call when test case success
-%%
-
-success(Config) ->
-    case lists:keysearch(comment, 1, Config) of
-	{value, {comment, _} = Res} -> Res;
-	_ -> ok
-    end.
-
-vsn(App) ->
-    application:start(App),
-    try
-	{value,
-	 {ssl,
-	  _,
-	  VSN}} = lists:keysearch(App,
-				  1,
-				  application:which_applications()),
-	VSN
-     after
-	 application:stop(ssl)
-     end.
diff --git a/lib/ssl/test/old_ssl_misc_SUITE.erl b/lib/ssl/test/old_ssl_misc_SUITE.erl
deleted file mode 100644
index ea03e83867..0000000000
--- a/lib/ssl/test/old_ssl_misc_SUITE.erl
+++ /dev/null
@@ -1,117 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_misc_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 seed/1,
-	 app/1
-	]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
--define(MANYCONNS, 5).
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [seed, app].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto!"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-seed(doc) ->
-    "Test that ssl:seed/1 works.";
-seed(suite) ->
-    [];
-seed(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_, SsslOpts}} = mk_ssl_cert_opts(Config),
-
-    LCmds = [{seed, "tjosan"},
-	     {sockopts, [{backlog, NConns}, {active, once}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ?line test_server_only(NConns, LCmds, [], Timeout, ?MODULE,
-			   Config).
-
-app(doc) ->
-    "Test that the ssl app file is ok";
-app(suite) ->
-    [];
-app(Config) when list(Config) ->
-    ?line ok = test_server:app_test(ssl).
-
-
diff --git a/lib/ssl/test/old_ssl_passive_SUITE.erl b/lib/ssl/test/old_ssl_passive_SUITE.erl
deleted file mode 100644
index 7b54fe876a..0000000000
--- a/lib/ssl/test/old_ssl_passive_SUITE.erl
+++ /dev/null
@@ -1,382 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_passive_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, 
-	 end_per_suite/1, init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 server_accept_timeout/1,
-	 cinit_return_chkclose/1,
-	 sinit_return_chkclose/1,
-	 cinit_big_return_chkclose/1,
-	 sinit_big_return_chkclose/1,
-	 cinit_big_echo_chkclose/1,
-	 sinit_big_echo_chkclose/1,
-	 cinit_few_echo_chkclose/1,
-	 cinit_many_echo_chkclose/1,
-	 cinit_cnocert/1
-	 ]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
-
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
--define(MANYCONNS, ssl_test_MACHINE:many_conns()).
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [server_accept_timeout, cinit_return_chkclose,
-     sinit_return_chkclose, cinit_big_return_chkclose,
-     sinit_big_return_chkclose, cinit_big_echo_chkclose,
-     sinit_big_echo_chkclose, cinit_few_echo_chkclose,
-     cinit_many_echo_chkclose, cinit_cnocert].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-server_accept_timeout(doc) ->
-    "Server has one pending accept with timeout. Checks that return "
-	"value is {error, timeout}.";
-server_accept_timeout(suite) ->
-    [];
-server_accept_timeout(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    Timeout = 40000, NConns = 1,
-    AccTimeout = 3000,
-
-    ?line {ok, {_, SsslOpts}} = mk_ssl_cert_opts(Config),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, AccTimeout}, 
-	     accept_timeout],
-    ?line test_server_only(NConns, LCmds, ACmds, Timeout, ?MODULE, Config).
-
-cinit_return_chkclose(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_return_chkclose(suite) ->
-    [];
-cinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout},
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_return_chkclose(doc) ->
-    "Server sends 1000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_return_chkclose(suite) ->
-    [];
-sinit_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_big_return_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-cinit_big_return_chkclose(suite) ->
-    [];
-cinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_big_return_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that receives them, sends them "
-	"back, and closes. Server waits for close. Both have certs.";
-sinit_big_return_chkclose(suite) ->
-    [];
-sinit_big_return_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_big_echo_chkclose(doc) ->
-    "Client sends 50000 bytes to server, that echoes them back "
-	"and closes. Client waits for close. Both have certs.";
-cinit_big_echo_chkclose(suite) ->
-    [];
-cinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-sinit_big_echo_chkclose(doc) ->
-    "Server sends 50000 bytes to client, that echoes them back "
-	"and closes. Server waits for close. Both have certs.";
-sinit_big_echo_chkclose(suite) ->
-    [];
-sinit_big_echo_chkclose(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 50000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {echo, DataSize},
-	     close],
-
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-
-cinit_few_echo_chkclose(X) -> cinit_many_echo_chkclose(X, 7).
-
-cinit_many_echo_chkclose(X) -> cinit_many_echo_chkclose(X, ?MANYCONNS).
-
-cinit_many_echo_chkclose(doc, _NConns) ->
-    "clients send 10000 bytes to server, that echoes them back "
-	"and closes. Clients wait for close. All have certs.";
-cinit_many_echo_chkclose(suite, _NConns) ->
-    [];
-cinit_many_echo_chkclose(Config, NConns) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 10000, LPort = 3456,
-    Timeout = 80000,
-
-    io:format("~w connections", [NConns]),
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {echo, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
-cinit_cnocert(doc) ->
-    "Client sends 1000 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Client has no cert, "
-	"but server has.";
-cinit_cnocert(suite) ->
-    [];
-cinit_cnocert(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3457,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}, {active, false}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize}, {send, DataSize}, 
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sockopts, [{active, false}]},
-	     {connect, {Host, LPort}},
-	     {send, DataSize}, {recv, DataSize}, 
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, ?MODULE,
-			    Config).
-
diff --git a/lib/ssl/test/old_ssl_peer_cert_SUITE.erl b/lib/ssl/test/old_ssl_peer_cert_SUITE.erl
deleted file mode 100644
index ee19bad175..0000000000
--- a/lib/ssl/test/old_ssl_peer_cert_SUITE.erl
+++ /dev/null
@@ -1,191 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_peer_cert_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 cinit_plain/1,
-	 cinit_both_verify/1,
-	 cinit_cnocert/1
-	 ]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [cinit_plain, cinit_both_verify, cinit_cnocert].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-cinit_plain(doc) ->
-    "Server closes after accept, Client waits for close. Both have certs "
-	"but both use the defaults for verify and depth, but still tries "
-	"to retreive each others certificates.";
-cinit_plain(suite) ->
-    [];
-cinit_plain(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts, SsslOpts}} = mk_ssl_cert_opts(Config),
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     nopeercert,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     peercert,
-	     {send, DataSize},
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, 
-			    ?MODULE, Config).
-
-cinit_both_verify(doc) ->
-    "Server closes after accept, Client waits for close. Both have certs "
-	"and both verify each other.";
-cinit_both_verify(suite) ->
-    [];
-cinit_both_verify(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts0, SsslOpts0}} = mk_ssl_cert_opts(Config),
-    ?line CsslOpts = [{verify, 2}, {depth, 2} | CsslOpts0],
-    ?line SsslOpts = [{verify, 2}, {depth, 3} | SsslOpts0],
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     peercert,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     peercert,
-	     {send, DataSize},
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, 
-			    ?MODULE, Config).
-
-cinit_cnocert(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close.";
-cinit_cnocert(suite) ->
-    [];
-cinit_cnocert(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3457,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_, SsslOpts0}} = mk_ssl_cert_opts(Config),
-    ?line SsslOpts = [{verify, 0}, {depth, 2} | SsslOpts0],
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {connect, {Host, LPort}},
-	     peercert,
-	     {send, DataSize},
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout,
-			    ?MODULE, Config).
-
-
diff --git a/lib/ssl/test/old_ssl_protocol_SUITE.erl b/lib/ssl/test/old_ssl_protocol_SUITE.erl
deleted file mode 100644
index 9b9937c210..0000000000
--- a/lib/ssl/test/old_ssl_protocol_SUITE.erl
+++ /dev/null
@@ -1,185 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_protocol_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2, 
-	 init_per_testcase/2, end_per_testcase/2, 
-	 sslv2/1, sslv3/1, tlsv1/1, sslv2_sslv3/1,
-	 sslv2_tlsv1/1, sslv3_tlsv1/1, sslv2_sslv3_tlsv1/1]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = test_server:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [sslv2, sslv3, tlsv1, sslv2_sslv3, sslv2_tlsv1,
-     sslv3_tlsv1, sslv2_sslv3_tlsv1].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no other purpose than closing the conf case.";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-%%%%%
-
-sslv2(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose SSLv2."; 
-sslv2(suite) ->
-    [];
-sslv2(Config) when list(Config) ->
-    do_run_test(Config, [sslv2]).
-
-sslv3(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose SSLv3."; 
-sslv3(suite) ->
-    [];
-sslv3(Config) when list(Config) ->
-    do_run_test(Config, [sslv3]).
-
-tlsv1(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose TLSv1."; 
-tlsv1(suite) ->
-    [];
-tlsv1(Config) when list(Config) ->
-    do_run_test(Config, [tlsv1]).
-
-sslv2_sslv3(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose between SSLv2 and SSLv3."; 
-sslv2_sslv3(suite) ->
-    [];
-sslv2_sslv3(Config) when list(Config) ->
-    do_run_test(Config, [sslv2, sslv3]).
-
-sslv2_tlsv1(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose between SSLv2 and TLSv1."; 
-sslv2_tlsv1(suite) ->
-    [];
-sslv2_tlsv1(Config) when list(Config) ->
-    do_run_test(Config, [sslv2, tlsv1]).
-
-sslv3_tlsv1(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose between SSLv3 and TLSv1."; 
-sslv3_tlsv1(suite) ->
-    [];
-sslv3_tlsv1(Config) when list(Config) ->
-    do_run_test(Config, [sslv3, tlsv1]).
-
-sslv2_sslv3_tlsv1(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close. "
-	"Client and server choose between SSLv2, SSLv3, and TLSv1."; 
-sslv2_sslv3_tlsv1(suite) ->
-    [];
-sslv2_sslv3_tlsv1(Config) when list(Config) ->
-    do_run_test(Config, [sslv2, sslv3, tlsv1]).
-
-%%%%
-
-do_run_test(Config0, Protocols) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    Timeout = 40000, NConns = 1,
-    DataSize = 10,
-
-    ?line {ok, {_, SsslOpts0}} = mk_ssl_cert_opts(Config0),
-    ?line SsslOpts = [{verify, 0}, {depth, 2} | SsslOpts0],
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     connection_info,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {connect, {Host, LPort}},
-	     connection_info,
-	     {send, DataSize},
-	     await_close],
-    Config1 = [{env, [{protocol_version, Protocols}]} | Config0],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout,
-			    ?MODULE, Config1).
-
-
diff --git a/lib/ssl/test/old_ssl_verify_SUITE.erl b/lib/ssl/test/old_ssl_verify_SUITE.erl
deleted file mode 100644
index 4c11ea6850..0000000000
--- a/lib/ssl/test/old_ssl_verify_SUITE.erl
+++ /dev/null
@@ -1,153 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_ssl_verify_SUITE).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 cinit_both_verify/1,
-	 cinit_cnocert/1
-	 ]).
-
--import(ssl_test_MACHINE, [mk_ssl_cert_opts/1, test_one_listener/7,
-			   test_server_only/6]).
--include_lib("test_server/include/test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?DEFAULT_TIMEOUT),
-    [{watchdog, WatchDog}| Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [cinit_both_verify, cinit_cnocert].
-
-groups() -> 
-    [].
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-init_per_suite(doc) ->
-    "Want to se what Config contains.";
-init_per_suite(suite) ->
-    [];
-init_per_suite(Config) ->
-    io:format("Config: ~p~n", [Config]),
-
-    %% Check if SSL exists. If this case fails, all other cases are skipped
-    case catch crypto:start() of
-	ok ->
-	    application:start(public_key),
-	    case ssl:start() of
-		ok -> ssl:stop();
-		{error, {already_started, _}} -> ssl:stop();
-		Error -> ?t:fail({failed_starting_ssl,Error})
-	    end,
-	    Config;
-	_Else ->
-	    {skip,"Could not start crypto"}
-    end.
-
-end_per_suite(doc) ->
-    "This test case has no mission other than closing the conf case";
-end_per_suite(suite) ->
-    [];
-end_per_suite(Config) ->
-    crypto:stop(),
-    Config.
-
-cinit_both_verify(doc) ->
-    "Server closes after accept, Client waits for close. Both have certs "
-	"and both verify each other.";
-cinit_both_verify(suite) ->
-    [];
-cinit_both_verify(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3456,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {CsslOpts0, SsslOpts0}} = mk_ssl_cert_opts(Config),
-    ?line CsslOpts = [{verify, 2}, {depth, 2} | CsslOpts0],
-    ?line SsslOpts = [{verify, 2}, {depth, 3} | SsslOpts0],
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {sslopts, CsslOpts},
-	     {connect, {Host, LPort}},
-	     {send, DataSize},
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, 
-			    ?MODULE, Config).
-
-cinit_cnocert(doc) ->
-    "Client has no cert. Nor the client, nor the server is verifying its "
-	"peer. Server closes, client waits for close.";
-cinit_cnocert(suite) ->
-    [];
-cinit_cnocert(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    DataSize = 1000, LPort = 3457,
-    Timeout = 40000, NConns = 1,
-
-    ?line {ok, {_, SsslOpts0}} = mk_ssl_cert_opts(Config),
-    ?line SsslOpts = [{verify, 0}, {depth, 2} | SsslOpts0],
-
-    ?line {ok, Host} = inet:gethostname(),
-
-    LCmds = [{sockopts, [{backlog, NConns}]},
-	     {sslopts, SsslOpts},
-	     {listen, LPort}, 
-	     wait_sync,
-	     lclose],
-    ACmds = [{timeout, Timeout}, 
-	     accept,
-	     {recv, DataSize},
-	     close],
-    CCmds = [{timeout, Timeout}, 
-	     {connect, {Host, LPort}},
-	     {send, DataSize},
-	     await_close],
-    ?line test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout,
-			    ?MODULE, Config).
-
-
diff --git a/lib/ssl/test/old_transport_accept_SUITE.erl b/lib/ssl/test/old_transport_accept_SUITE.erl
deleted file mode 100644
index 6f0c8e456b..0000000000
--- a/lib/ssl/test/old_transport_accept_SUITE.erl
+++ /dev/null
@@ -1,258 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(old_transport_accept_SUITE).
--include_lib("common_test/include/ct.hrl").
--include("test_server_line.hrl").
-
-%% Default timetrap timeout (set in init_per_testcase).
--define(default_timeout, ?t:minutes(1)).
--define(application, ssh).
-
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
-	 init_per_group/2,end_per_group/2,
-	 init_per_testcase/2,
-	 end_per_testcase/2,
-	 config/1,
-	 echo_once/1,
-	 echo_twice/1,
-	 close_before_ssl_accept/1,
-	 server/5,
-	 tolerant_server/5,
-	 client/5
-	]).
-
-init_per_testcase(_Case, Config) ->
-    WatchDog = ssl_test_lib:timetrap(?default_timeout),
-    [{watchdog, WatchDog}, {protomod, gen_tcp}, {serialize_accept, true}| 
-     Config].
-
-end_per_testcase(_Case, Config) ->
-    WatchDog = ?config(watchdog, Config),
-    test_server:timetrap_cancel(WatchDog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() -> 
-    [config, echo_once, echo_twice, close_before_ssl_accept].
-
-groups() -> 
-    [].
-
-init_per_suite(Config) ->
-    try crypto:start() of
-	ok ->
-	    Config
-    catch _:_ ->
-	    {skip, "Crypto did not start"}
-    end.
-
-end_per_suite(_Config) ->
-    application:stop(crypto),
-    ok.
-
-init_per_group(_GroupName, Config) ->
-    Config.
-
-end_per_group(_GroupName, Config) ->
-    Config.
-
-
-config(doc) ->
-    "Want to se what Config contains.";
-config(suite) ->
-    [];
-config(Config) ->
-    io:format("Config: ~p~n", [Config]),
-    ok.
-
-echo_once(doc) ->
-    "Client sends 256 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-echo_once(suite) ->
-    [];
-echo_once(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    {ok, Host} = inet:gethostname(),
-    {ok, {COpts, SOpts}} = ssl_test_MACHINE:mk_ssl_cert_opts(Config),
-    N = 1,
-    Msg = lists:seq(0, 255),
-    Self = self(),
-    Params = "-pa " ++ filename:dirname(code:which(?MODULE)),
-    Node = start_node(server, Params),
-    CNode = start_node(client, Params),
-    Server = spawn_link(Node, ?MODULE, server, [Self, LPort, SOpts, Msg, N]),
-    Client = spawn_link(Node, ?MODULE, client, [Host, LPort, COpts, Msg, N]),
-    ok = receive
-	     {Server, listening} ->
-		 Client ! {Server, listening},
-		 ok;
-	     E ->
-		 io:format("bad receive (1) ~p\n", [E]),
-		 E
-	 end,
-    receive
-	{Server, done} ->
-	    ok
-    end,
-    test_server:stop_node(Node),
-    test_server:stop_node(CNode).
-
-close_before_ssl_accept(doc) ->
-    "Client sends 256 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-close_before_ssl_accept(suite) ->
-    [];
-close_before_ssl_accept(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    {ok, Host} = inet:gethostname(),
-    {ok, {COpts, SOpts}} = ssl_test_MACHINE:mk_ssl_cert_opts(Config),
-    Msg = lists:seq(0, 255),
-    Self = self(),
-    Params = "-pa " ++ filename:dirname(code:which(?MODULE)),
-    Node = start_node(server, Params),
-    CNode = start_node(client, Params),
-    Server = spawn_link(Node, ?MODULE, tolerant_server,
-			[Self, LPort, SOpts, Msg, 2]),
-    Client = spawn_link(Node, ?MODULE, client,
-			[Host, LPort, COpts, Msg, 1]),
-    ok = receive
-	     {Server, listening} ->
-		 {ok, S} = gen_tcp:connect(Host, LPort, []),
-		 gen_tcp:close(S),
-		 Client ! {Server, listening},
-		 ok;
-	     E ->
-		 io:format("bad receive (1) ~p\n", [E]),
-		 E
-	 end,
-    receive
-	{Server, done} ->
-	    ok
-    end,
-    test_server:stop_node(Node),
-    test_server:stop_node(CNode).
-
-client(Host, LPort, COpts, Msg, N) ->
-    ok = receive
-	     {_Server, listening} ->
-		 ok;
-	     E ->
-		 io:format("bad receive (2) ~p\n", [E]),
-		 E
-	 end,
-    Opts = COpts ++ [{packet, raw}, {active, false}],
-    app(),
-    lists:foreach(fun(_) ->
-			  {ok, S} = ssl:connect(Host, LPort, Opts),
-			  ssl:send(S, Msg),
-			  {ok, Msg} = ssl:recv(S, length(Msg)),
-			  ssl:close(S)
-		  end, lists:seq(1, N)).
-
-echo_twice(doc) ->
-    "Two clients sends 256 bytes to server, that receives them, sends them "
-	"back, and closes. Client waits for close. Both have certs.";
-echo_twice(suite) ->
-    [];
-echo_twice(Config) when list(Config) ->
-    process_flag(trap_exit, true),
-    LPort = 3456,
-    {ok, Host} = inet:gethostname(),
-    {ok, {COpts, SOpts}} = ssl_test_MACHINE:mk_ssl_cert_opts(Config),
-    N = 2,
-    Msg = lists:seq(0, 255),
-    Self = self(),
-    Params = "-pa " ++ filename:dirname(code:which(?MODULE)),
-    Node = start_node(server, Params),
-    CNode = start_node(client, Params),
-    Server = spawn_link(Node, ?MODULE, server,
-			[Self, LPort, SOpts, Msg, N]),
-    Client = spawn_link(Node, ?MODULE, client,
-			[Host, LPort, COpts, Msg, N]),
-    ok = receive
-	     {Server, listening} ->
-		 Client ! {Server, listening},
-		 ok;
-	     E ->
-		 io:format("bad receive (3) ~p\n", [E]),
-		 E
-	 end,
-    receive
-	{Server, done} ->
-	    ok
-    end,
-    test_server:stop_node(Node),
-    test_server:stop_node(CNode).
-
-server(Client, Port, SOpts, Msg, N) ->
-    app(),
-    process_flag(trap_exit, true),
-    Opts = SOpts ++ [{packet, raw}, {active, false}],
-    {ok, LSock} = ssl:listen(Port, Opts),
-    Client ! {self(), listening},
-    server_loop(Client, LSock, Msg, N).
-
-server_loop(Client, _, _, 0) ->
-    Client ! {self(), done};
-server_loop(Client, LSock, Msg, N) ->
-    {ok, S} = ssl:transport_accept(LSock),
-    ok = ssl:ssl_accept(S),
-    %% P = ssl:controlling_process(S, Proxy),
-    {ok, Msg} = ssl:recv(S, length(Msg)),
-    ok = ssl:send(S, Msg),
-    ok = ssl:close(S),
-    server_loop(Client, LSock, Msg, N-1).
-
-tolerant_server(Client, Port, SOpts, Msg, N) ->
-    app(),
-    process_flag(trap_exit, true),
-    Opts = SOpts ++ [{packet, raw}, {active, false}],
-    {ok, LSock} = ssl:listen(Port, Opts),
-    Client ! {self(), listening},
-    tolerant_server_loop(Client, LSock, Msg, N).
-
-tolerant_server_loop(Client, _, _, 0) ->
-    Client ! {self(), done};
-tolerant_server_loop(Client, LSock, Msg, N) ->
-    {ok, S} = ssl:transport_accept(LSock),
-    case ssl:ssl_accept(S) of
-	ok ->
-	    %% P = ssl:controlling_process(S, Proxy),
-	    {ok, Msg} = ssl:recv(S, length(Msg)),
-	    ok = ssl:send(S, Msg),
-	    ok = ssl:close(S);
-	E ->
-	    io:format("ssl_accept error: ~p\n", [E])
-    end,
-    tolerant_server_loop(Client, LSock, Msg, N-1).
-
-app() ->
-    crypto:start(),
-    application:start(public_key),
-    ssl:start().
-
-start_node(Kind, Params) ->
-    S = atom_to_list(?MODULE)++"_" ++ atom_to_list(Kind),
-    {ok, Node} = test_server:start_node(list_to_atom(S), slave, [{args, Params}]),
-    Node.
-
diff --git a/lib/ssl/test/ssl.cover b/lib/ssl/test/ssl.cover
index 60774cc0f1..6b13e07a37 100644
--- a/lib/ssl/test/ssl.cover
+++ b/lib/ssl/test/ssl.cover
@@ -1,21 +1,4 @@
 {incl_app,ssl,details}.
 
-{excl_mods, ssl, [ssl_pkix_oid,
-		  'PKIX1Algorithms88', 
-		  'PKIX1Explicit88',
-		  'PKIX1Implicit88',
-		  'PKIXAttributeCertificate',
-		  'SSL-PKIX',
-		  ssl_pem,
-		  ssl_pkix,
-		  ssl_base64,
-		  ssl_broker,
-		  ssl_broker_int,
-		  ssl_broker_sup,
-		  ssl_debug,
-		  ssl_server,		
-		  ssl_prim,
-		  inet_ssl_dist,
-		  'OTP-PKIX'	
-		]}.
+{excl_mods, ssl, [ssl_debug]}.
 
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 37a021e7cf..832431b1ed 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -28,7 +28,6 @@
 -include_lib("public_key/include/public_key.hrl").
 
 -include("ssl_alert.hrl").
--include("ssl_int.hrl").
 -include("ssl_internal.hrl").
 -include("ssl_record.hrl").
 
@@ -207,7 +206,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
 all() -> 
     [app, alerts, connection_info, protocol_versions,
      empty_protocol_versions, controlling_process,
-     controller_dies, client_closes_socket, peercert,
+     controller_dies, client_closes_socket,
      connect_dist, peername, sockname, socket_options,
      invalid_inet_get_option, invalid_inet_get_option_not_list,
      invalid_inet_get_option_improper_list,
@@ -583,50 +582,6 @@ client_closes_socket(Config) when is_list(Config) ->
 
     ssl_test_lib:check_result(Server, {error,closed}).
 
-%%--------------------------------------------------------------------
-
-peercert(doc) -> 
-    [""];
-
-peercert(suite) -> 
-    [];
-
-peercert(Config) when is_list(Config) -> 
-    ClientOpts = ?config(client_opts, Config),
-    ServerOpts = ?config(server_opts, Config),
-    {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
-    
-    Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0}, 
-					{from, self()}, 
-			   {mfa, {?MODULE, peercert_result, []}},
-			   {options, ServerOpts}]),
-    Port = ssl_test_lib:inet_port(Server),
-    Client = ssl_test_lib:start_client([{node, ServerNode}, {port, Port}, 
-					{host, Hostname},
-			   {from, self()}, 
-			   {mfa, {?MODULE, peercert_result, []}},
-			   {options, ClientOpts}]),
-    
-    CertFile = proplists:get_value(certfile, ServerOpts),
-    [{'Certificate', BinCert, _}]= ssl_test_lib:pem_to_der(CertFile),
-    ErlCert = public_key:pkix_decode_cert(BinCert, otp),
-       
-    ServerMsg = {{error, no_peercert}, {error, no_peercert}},
-    ClientMsg = {{ok, BinCert}, {ok, ErlCert}},
-    
-    test_server:format("Testcase ~p, Client ~p  Server ~p ~n", 
-		       [self(), Client, Server]),
-    
-    ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
-    
-    ssl_test_lib:close(Server),
-    ssl_test_lib:close(Client).
-
-peercert_result(Socket) ->
-    Result1 = ssl:peercert(Socket),
-    Result2 = ssl:peercert(Socket, [ssl]), 
-    {Result1, Result2}.
-
 %%--------------------------------------------------------------------
 connect_dist(doc) -> 
     ["Test a simple connect as is used by distribution"];
@@ -1528,7 +1483,6 @@ eoptions(Config) when is_list(Config) ->
 	    end,
 
     TestOpts = [{versions, [sslv2, sslv3]}, 
-		{ssl_imp, cool},
 		{verify, 4}, 
 		{verify_fun, function},
 		{fail_if_no_peer_cert, 0}, 
diff --git a/lib/ssl/test/ssl_test_MACHINE.erl b/lib/ssl/test/ssl_test_MACHINE.erl
deleted file mode 100644
index e0ffa15d80..0000000000
--- a/lib/ssl/test/ssl_test_MACHINE.erl
+++ /dev/null
@@ -1,940 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%%
--module(ssl_test_MACHINE).
-
--export([many_conns/0, mk_ssl_cert_opts/1, test_one_listener/7, 
-	 test_server_only/6]).
-
--export([process_init/3, do_start/1]).
-
-
--include("test_server.hrl").
--include("ssl_test_MACHINE.hrl").
-
--define(WAIT_TIMEOUT, 10000).
--define(CLOSE_WAIT, 1000).
-
-%%
-%% many_conns() -> ManyConnections
-%%
-%% Choose a suitable number of "many connections" depending on platform
-%% and current limit for file descriptors.
-%%
-many_conns() ->
-    case os:type() of
-	{unix,_} -> many_conns_1();
-	_ -> 10
-    end.
-
-many_conns_1() ->
-    N0 = os:cmd("ulimit -n"),
-    N1 = lists:reverse(N0),
-    N2 = lists:dropwhile(fun($\r) -> true;
-			    ($\n) -> true;
-			    (_) -> false
-			 end, N1),
-    N = list_to_integer(lists:reverse(N2)),
-    lists:min([(N - 10) div 2, 501]).
-	
-%%
-%% mk_ssl_cert_opts(Config) -> {ok, {COpts, SOpts}}
-%%
-%% 
-mk_ssl_cert_opts(_Config) ->
-    Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
-    COpts = [{ssl_imp, old},
-	     {cacertfile, filename:join([Dir, "client", "cacerts.pem"])}, 
-	     {certfile, filename:join([Dir, "client", "cert.pem"])}, 
-	     {keyfile, filename:join([Dir, "client", "key.pem"])}], 
-    SOpts = [{ssl_imp, old},
-	     {cacertfile, filename:join([Dir, "server", "cacerts.pem"])}, 
-	     {certfile, filename:join([Dir, "server", "cert.pem"])}, 
-	     {keyfile, filename:join([Dir, "server", "key.pem"])}], 
-    {ok, {COpts, SOpts}}.
-
-%%
-%% Cmds:
-%%		{protomod, gen_tcp | ssl}             		default = ssl
-%%		{serialize_accept, true | false}  	default = false
-%%		{timeout, Timeout}
-%%		{sockopts, Opts}
-%%		{sslopts, Opts}
-%%		{protocols, Protocols}  [sslv2|sslv3|tlsv1]
-%%		{listen, Port}
-%%		{lsock, LSock}		listen socket for acceptor
-%%		peercert
-%%		accept
-%%		{connect, {Host, Port}}
-%%		{recv, N}
-%%		{send, N}
-%%		{echo, N}		async echo back
-%%		close			close connection socket
-%%		{close, Time}		wait time and then close socket
-%%		lclose			close listen socket
-%%		await_close		wait for close
-%%		wait_sync		listener's wait for sync from parent
-%%		connection_info		
-%%		{exit, Reason}		exit
-%%
-%%
-%% We cannot have more than `backlog' acceptors at the same time.
-%%
-
-
-%%
-%% test_one_listener(NConns, LCmds, ACmds, CCmds, Timeout, Suite, Config)
-%%
-%% Creates one client and one server node, and runs one listener on
-%% the server node (according to LCmds), and creates NConns acceptors
-%% on the server node, and the same number of connectors on the client
-%% node. The acceptors and and connectors execute according to ACmds
-%% and CCmds, respectively.
-%%
-%% It is a good idea to have the backlog size in LCmds set to
-%% be at least as large as NConns.
-%%
-test_one_listener(NConns, LCmds0, ACmds0, CCmds0, Timeout, Suite, Config) ->
-    ProtoMod = get_protomod(Config), 
-    SerializeAccept = get_serialize_accept(Config), 
-    ?line {ok, {CNode, SNode}} = start_client_server_nodes(Suite),
-    case ProtoMod of
-	ssl -> 
-	    ?line ok = start_ssl([CNode, SNode], Config);
-	gen_tcp ->
-	    ok
-    end, 
-    LCmds = [{protomod, ProtoMod}| LCmds0], 
-    ACmds = [{protomod, ProtoMod}, {serialize_accept, SerializeAccept}| 
-	     ACmds0], 
-    CCmds = [{protomod, ProtoMod}| CCmds0], 
-
-    ?line {ok, Listener} = start_process(SNode, self(), LCmds, listener),
-    ?line {ok, LSock} = wait_lsock(Listener, ?WAIT_TIMEOUT),
-    ?line {ok, Accs0} = start_processes(NConns, SNode, self(), 
-				       [{lsock, LSock}| ACmds], acceptor),
-    Accs = case ProtoMod of 
-	       gen_tcp ->
-		   [Acc1| Accs1] = Accs0,
-		   Acc1 ! {continue_accept, self()},
-		   Accs1;
-	       ssl  ->
-		   Accs0
-	   end,
-    ?line {ok, Conns} = start_processes(NConns, CNode, self(), 
-					CCmds, connector),
-    ?line case wait_ack(Accs, Accs0 ++ Conns, Timeout) of
-	      ok ->
-		  ?line sync([Listener]),
-		  ?line wait_ack([], [Listener], ?WAIT_TIMEOUT);
-	      {error, Reason} ->
-		  ?line stop_node(SNode),
-		  ?line stop_node(CNode),
-		  exit(Reason)
-	  end,
-    ?line stop_node(SNode),
-    ?line stop_node(CNode),
-    ok.
-
-%%
-%% test_server_only(NConns, LCmds, ACmds, Timeout, Suite, Config)
-%%
-%% Creates only one server node, and runs one listener on
-%% the server node (according to LCmds), and creates NConns acceptors
-%% on the server node. The acceptors execute according to ACmds.
-%% There are no connectors.
-%%
-test_server_only(NConns, LCmds0, ACmds0, Timeout, Suite, Config) ->
-    ProtoMod = get_protomod(Config), 
-    ?line {ok, SNode} = start_server_node(Suite),
-    case ProtoMod of
-	ssl -> 
-	    ?line ok = start_ssl([SNode], Config);
-	gen_tcp ->
-	    ok
-    end, 
-    LCmds = [{protomod, ProtoMod}| LCmds0], 
-    ACmds = [{protomod, ProtoMod}| ACmds0], 
-    ?line {ok, Listener} = start_process(SNode, self(), LCmds, listener),
-    ?line {ok, LSock} = wait_lsock(Listener, ?WAIT_TIMEOUT),
-    ?line {ok, Accs0} = start_processes(NConns, SNode, self(), 
-				       [{lsock, LSock}| ACmds], acceptor),
-    Accs = case ProtoMod of 
-	       gen_tcp ->
-		   [Acc1| Accs1] = Accs0,
-		   Acc1 ! {continue_accept, self()},
-		   Accs1;
-	       ssl  ->
-		   Accs0
-	   end,
-    ?line case wait_ack(Accs, Accs0, Timeout) of
-	      ok ->
-		  ?line sync([Listener]),
-		  ?line wait_ack([], [Listener], ?WAIT_TIMEOUT);
-	      {error, Reason} ->
-		  ?line stop_node(SNode),
-		  exit(Reason)
-	  end,
-    ?line stop_node(SNode),
-    ok.
-
-%%
-%% start_client_server_nodes(Suite) -> {ok, {CNode, SNode}}
-%%
-start_client_server_nodes(Suite) ->
-    {ok, CNode} = start_client_node(Suite),
-    {ok, SNode} = start_server_node(Suite),
-    {ok, {CNode, SNode}}.
-
-start_client_node(Suite) ->
-    start_node(lists:concat([Suite, "_client"])).
-
-start_server_node(Suite) ->
-    start_node(lists:concat([Suite, "_server"])).
-
-%%
-%% start_ssl(Nodes, Config)
-%%
-start_ssl(Nodes, Config) -> 
-    Env0 = lists:flatten([Env00 || {env, Env00} <- Config]),
-    Env1 = case os:getenv("SSL_DEBUG") of
-	       false ->
-		   [];
-	       _ ->
-		   Dir = ?config(priv_dir, Config),
-		   [{debug, true}, {debugdir, Dir}]
-	   end,
-    Env = Env0 ++ Env1,
-    lists:foreach(
-      fun(Node) -> rpc:call(Node, ?MODULE, do_start, [Env]) end, Nodes),
-    ok.
-
-do_start(Env) ->
-    application:start(crypto),
-    application:start(public_key),
-    application:load(ssl),
-    lists:foreach(
-      fun({Par, Val}) -> application:set_env(ssl, Par, Val) end, Env),
-    application:start(ssl).
-
-    
-%%
-%% start_node(Name) -> {ok, Node}
-%% start_node(Name, ExtraParams) -> {ok, Node}
-%%
-start_node(Name) ->
-    start_node(Name, []).
-start_node(Name, ExtraParams) ->
-    Params = "-pa " ++ filename:dirname(code:which(?MODULE)) ++ " " ++
-	ExtraParams,
-    test_server:start_node(Name, slave, [{args, Params}]).
-
-stop_node(Node) ->
-    test_server:stop_node(Node).
-
-%%
-%% start_processes(N, Node, Parent, Cmds, Type) -> {ok, Pids}
-%%
-start_processes(M, Node, Parent, Cmds, Type) ->
-    start_processes1(0, M, Node, Parent, Cmds, Type, []).
-start_processes1(M, M, _, _, _, _, Pids) ->
-    {ok, lists:reverse(Pids)};
-start_processes1(N, M, Node, Parent, Cmds, Type, Pids) ->
-    {ok, Pid} = start_process(Node, Parent, Cmds, {Type, N + 1}),
-    start_processes1(N + 1, M, Node, Parent, Cmds, Type, [Pid| Pids]).
-
-%%
-%% start_process(Node, Parent, Cmds, Type) -> {ok, Pid}
-%%
-start_process(Node, Parent, Cmds0, Type) ->
-    Cmds = case os:type() of 
-	       {win32, _} ->
-		   lists:map(fun(close) -> {close, ?CLOSE_WAIT};
-				(Term) -> Term end, Cmds0);
-	       _ ->
-		   Cmds0
-	   end,
-    Pid = spawn_link(Node, ?MODULE, process_init, [Parent, Cmds, Type]),
-    {ok, Pid}.
-
-process_init(Parent, Cmds, Type) ->
-    ?debug("#### ~w start~n", [{Type, self()}]),
-    pre_main_loop(Cmds, #st{parent = Parent, type = Type}).
-
-%%
-%% pre_main_loop
-%%
-pre_main_loop([], St) ->
-    ?debug("#### ~w end~n", [{St#st.type, self()}]),
-    main_loop([], St);
-pre_main_loop(Cmds, St) ->
-    ?debug("#### ~w -> ~w~n", 
-	   [{St#st.type, self(), St#st.sock, St#st.port, 
-	     St#st.peer, St#st.active}, hd(Cmds)]),
-    main_loop(Cmds, St).
-    
-%%
-%% main_loop(Cmds, St)
-%%
-main_loop([{protomod, ProtoMod}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{protomod = ProtoMod});
-
-main_loop([{serialize_accept, Bool}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{serialize_accept = Bool});
-
-main_loop([{sockopts, Opts}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{sockopts = Opts});
-
-main_loop([{sslopts, Opts}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{sslopts = Opts});
-
-main_loop([{protocols, Protocols}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{protocols = Protocols});
-
-main_loop([{timeout, T}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{timeout = T});
-
-main_loop([{lsock, LSock}| Cmds], St) ->
-    pre_main_loop(Cmds, St#st{lsock = LSock});
-
-main_loop([{seed, Data}| Cmds], St) ->
-    case ssl:seed("tjosan") of
-	ok ->
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in seed: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([{listen, Port}| Cmds], St) ->
-    case listen(St, Port) of    
-	{ok, LSock} ->
-	    ack_lsock(St#st.parent, LSock),
-	    NSt = get_active(St#st{port = Port, sock = LSock, lsock = LSock}),
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in listen: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([accept| Cmds], St) ->
-    case St#st.serialize_accept of
-	true ->
-	    Parent = St#st.parent, 
-	    receive 
-		{continue_accept, Parent} ->
-		    ok
-	    end;
-	false ->
-	    ok
-    end,
-    case accept(St) of
-	{ok, Sock, Port, Peer} ->
-	    case St#st.serialize_accept of
-		true ->
-		    St#st.parent ! {one_accept_done, self()};
-		false ->
-		    ok
-	    end,
-	    NSt = get_active(St#st{sock = Sock, port = Port, peer = Peer}),
-	    pre_main_loop(Cmds, NSt);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in accept: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-	
-main_loop([accept_timeout| Cmds], St) ->
-    case accept(St) of
-	{error, timeout} ->
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in accept_timeout: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-	
-
-main_loop([{connect, {Host, Port}}| Cmds], St) ->
-    case connect(St, Host, Port) of
-	{ok, Sock, LPort, Peer} ->
-	    NSt = get_active(St#st{sock = Sock, port = LPort, peer = Peer}),
-	    pre_main_loop(Cmds, NSt);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in connect: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([connection_info| Cmds], St) ->
-    case connection_info(St) of
-	{ok, ProtoInfo} ->
-	    io:fwrite("Got connection_info:~n~p~n", [ProtoInfo]),
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in connection_info: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([peercert| Cmds], St) ->
-    case peercert(St) of
-	{ok, Cert} ->
-	    io:fwrite("Got cert:~n~p~n", [Cert]),
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in peercert: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([nopeercert| Cmds], St) ->
-    case peercert(St) of
-	{error, Reason} ->
-	    io:fwrite("Got no cert as expected. reason:~n~p~n", [Reason]),
-	    pre_main_loop(Cmds, St);
-	{ok, Cert} ->
-	    ?error("#### ~w(~w) in peercert: error: got cert: ~p~n", 
-		   [St#st.type, self(), Cert]),
-	    exit(peercert)
-    end;
-
-main_loop([{recv, N}| Cmds], St) ->
-    recv_loop([{recv, N}| Cmds], fun recv/1, St); % Returns to main_loop/2.
-
-main_loop([{send, N}| Cmds], St) ->
-    Msg = mk_msg(N),
-    case send(St, Msg) of 
-	ok ->
-	    pre_main_loop(Cmds, St);
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in send: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([{echo, N}| Cmds], St) ->
-    recv_loop([{echo, N}| Cmds], fun echo/1, St); % Returns to main_loop/2.
-
-main_loop([{close, WaitTime}| Cmds], St) ->
-    wait(WaitTime),
-    pre_main_loop([close| Cmds], St);
-
-main_loop([close| Cmds], St) ->
-    case close(St) of
-	ok ->
-	    pre_main_loop(Cmds, St#st{sock = nil});
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in close: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([lclose| Cmds], St) ->
-    case lclose(St) of
-	ok ->
-	    pre_main_loop(Cmds, St#st{lsock = nil});
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in lclose: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([await_close| Cmds], St) ->
-    case await_close(St) of
-	ok ->
-	    pre_main_loop(Cmds, St#st{sock = nil});
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in await_close: error: ~w~n", 
-		   [St#st.type, self(), Reason]),
-	    exit(Reason)
-    end;
-
-main_loop([wait_sync| Cmds], St) ->
-    wait_sync(St),
-    pre_main_loop(Cmds, St);
-
-main_loop({exit, Reason}, _St) ->
-    exit(Reason);
-
-main_loop([], _St) ->
-    ok.
-
-%%
-%% recv_loop(Cmds, F, St)
-%%
-%% F = recv/1 | echo/1
-%%
-recv_loop([{_Tag, 0}| Cmds], _, St) ->
-    pre_main_loop(Cmds, St);
-recv_loop([{_Tag, N}| _Cmds], _, St) when N < 0 ->
-    ?error("#### ~w(~w) in recv_loop: error: too much: ~w~n", 
-	   [St#st.type, self(), N]),
-    exit(toomuch);                               % XXX or {error, Reason}?
-recv_loop([{Tag, N}| Cmds], F, St) ->
-    case F(St) of
-	{ok, Len} ->
-	    NSt = St#st{active = new_active(St#st.active)},
-	    if
-		Len == N ->
-		    pre_main_loop(Cmds, NSt);
-		true ->
-		    ?debug("#### ~w -> ~w~n", 
-			   [{NSt#st.type, self(), NSt#st.sock, NSt#st.port, 
-			     NSt#st.peer, NSt#st.active}, {Tag, N - Len}]),
-		    recv_loop([{Tag, N - Len}| Cmds], F, NSt)
-	    end;
-	{error, Reason} ->
-	    ?error("#### ~w(~w) in recv_loop: error: ~w, ~w bytes remain~n", 
-		   [St#st.type, self(), Reason, N]),
-	    exit(Reason)
-    end.
-
-new_active(once) ->
-    false;
-new_active(A) ->
-    A.
-
-get_active(St) ->
-    A = case proplists:get_value(active, St#st.sockopts, undefined) of
-	    undefined ->
-		Mod = case St#st.protomod of
-			  ssl ->
-			      ssl;
-			  gen_tcp ->
-			      inet
-		      end, 
-		{ok, [{active, Ax}]} = Mod:getopts(St#st.sock, [active]),
-		Ax;
-	    Ay ->
-		Ay
-	end,
-    ?debug("#### ~w(~w) get_active: ~p\n", [St#st.type, self(), A]),
-    St#st{active = A}.
-
-
-%%
-%% SOCKET FUNCTIONS
-%%
-
-%%
-%% ssl
-%%
-
-%%
-%% listen(St, LPort) -> {ok, LSock} | {error, Reason}
-%%
-listen(St, LPort) ->
-    case St#st.protomod of
-	ssl ->
-	    ssl:listen(LPort, [{ssl_imp, old} | St#st.sockopts ++ St#st.sslopts]);
-	gen_tcp ->
-	    gen_tcp:listen(LPort, St#st.sockopts)
-    end.
-
-%%
-%% accept(St) -> {ok, Sock} | {error, Reason}
-%%
-accept(St) ->
-    case St#st.protomod of
-	ssl ->
-	    case ssl:transport_accept(St#st.lsock, St#st.timeout) of
-		{ok, Sock} ->
-		    case ssl:ssl_accept(Sock, St#st.timeout) of			
-			ok ->
-			    {ok, Port} = ssl:sockname(Sock),
-			    {ok, Peer} = ssl:peername(Sock),
-			    {ok, Sock, Port, Peer};
-			Other  ->
-			    Other
-		    end;
-		Other  ->
-		    Other
-	    end;
-	gen_tcp ->
-	    case gen_tcp:accept(St#st.lsock, St#st.timeout) of
-		{ok, Sock} ->
-		    {ok, Port} = inet:port(Sock),
-		    {ok, Peer} = inet:peername(Sock),
-		    {ok, Sock, Port, Peer};
-		Other  ->
-		    Other
-	    end
-    end.
-
-%%
-%% connect(St, Host, Port) -> {ok, Sock} | {error, Reason}
-%%
-connect(St, Host, Port) ->
-    
-    case St#st.protomod of
-	ssl ->
-	    case ssl:connect(Host, Port, 
-			     [{ssl_imp, old} | St#st.sockopts ++ St#st.sslopts], 
-			     St#st.timeout) of
-		{ok, Sock} ->
-		    {ok, LPort} = ssl:sockname(Sock),
-		    {ok, Peer} = ssl:peername(Sock),
-		    {ok, Sock, LPort, Peer};
-		Other  ->
-		    Other
-	    end;
-	gen_tcp ->
-	    case gen_tcp:connect(Host, Port, St#st.sockopts, St#st.timeout) of
-		{ok, Sock} ->
-		    {ok, LPort} = inet:port(Sock),
-		    {ok, Peer} = inet:peername(Sock),
-		    {ok, Sock, LPort, Peer};
-		Other  ->
-		    Other
-	    end
-    end.
-
-%%
-%% peercert(St) -> {ok, Cert} | {error, Reason}
-%%
-peercert(St) ->
-    case St#st.protomod of
-	ssl ->
-	    ssl:peercert(St#st.sock, [ssl]);
-	gen_tcp  ->
-	    {ok, <<>>}
-    end.
-
-%%
-%% connection_info(St) -> {ok, ProtoInfo} | {error, Reason}
-%%
-connection_info(St) ->
-    case St#st.protomod of
-	ssl ->
-	    case ssl:connection_info(St#st.sock) of
-		Res = {ok, {Proto, _}} ->
-		    case St#st.protocols of
-			[] ->
-			    Res;
-			Protocols ->
-			    case lists:member(Proto, Protocols) of
-				true ->
-				    Res;
-				false ->
-				    {error, Proto}
-			    end
-		    end;
-		Error ->
-		    Error
-	    end;
-	gen_tcp  ->
-	    {ok, <<>>}
-    end.
-
-%%
-%% close(St) -> ok | {error, Reason}
-%%
-
-close(St) ->
-    Mod = St#st.protomod,
-    case St#st.sock of
-	nil ->
-	    ok;
-	_ ->
-	    Mod:close(St#st.sock)
-    end.
-
-%%
-%% lclose(St) -> ok | {error, Reason}
-%%
-lclose(St) ->
-    Mod = St#st.protomod,
-    case St#st.lsock of
-	nil ->
-	    ok;
-	_ ->
-	    Mod:close(St#st.lsock)
-    end.
-
-%%
-%% recv(St) = {ok, Len} | {error, Reason}
-%%
-recv(St) ->
-    case do_recv(St) of
-	{ok, Msg} ->
-	    {ok, length(Msg)};
-	{error, Reason} ->
-	    {error, Reason}
-    end.
-
-do_recv(St) when St#st.active == false ->
-    %% First check that we do *not* have any ssl/gen_tcp messages in the
-    %% message queue, then call the receive function.
-    Sock = St#st.sock,
-    case St#st.protomod of
-	ssl ->
-	    receive 
-		M = {ssl, Sock, _Msg} ->
-		    {error, {unexpected_messagex, M}};
-		M = {ssl_closed, Sock} ->
-		    {error, {unexpected_message, M}};
-		M = {ssl_error, Sock, _Reason} ->
-		    {error, {unexpected_message, M}}
-	    after 0 ->
-		    ssl:recv(St#st.sock, 0, St#st.timeout)
-	    end;
-	gen_tcp  ->
-	    receive 
-		M = {tcp, Sock, _Msg} ->
-		    {error, {unexpected_message, M}};
-		M = {tcp_closed, Sock} ->
-		    {error, {unexpected_message, M}};
-		M = {tcp_error, Sock, _Reason} ->
-		    {error, {unexpected_message, M}}
-	    after 0 ->
-		    gen_tcp:recv(St#st.sock, 0, St#st.timeout)
-	    end
-    end;
-do_recv(St) ->
-    Sock = St#st.sock,
-    Timeout = St#st.timeout,
-    case St#st.protomod of
-	ssl ->
-	    receive 
-		{ssl, Sock, Msg} ->
-		    {ok, Msg};
-		{ssl_closed, Sock} ->
-		    {error, closed};
-		{ssl_error, Sock, Reason} ->
-		    {error, Reason}
-	    after Timeout ->
-		    {error, timeout}
-	    end;
-	gen_tcp  ->
-	    receive 
-		{tcp, Sock, Msg} ->
-		    {ok, Msg};
-		{tcp_closed, Sock} ->
-		    {error, closed};
-		{tcp_error, Sock, Reason} ->
-		    {error, Reason}
-	    after Timeout ->
-		    {error, timeout}
-	    end
-    end.
-
-%%
-%% echo(St) = {ok, Len} | {error, Reason}
-%%
-echo(St) ->
-    Sock = St#st.sock,
-    case do_recv(St) of
-	{ok, Msg} ->
-	    Mod = St#st.protomod, 
-	    case Mod:send(Sock, Msg) of
-		ok ->
-		    {ok, length(Msg)};
-		{error, Reason} ->
-		    {error, Reason}
-	    end;
-	{error, Reason} ->
-	    {error, Reason}
-    end.
-
-%%
-%% send(St, Msg) -> ok | {error, Reason}
-%%
-send(St, Msg) ->
-    Mod = St#st.protomod,
-    Mod:send(St#st.sock, Msg).
-
-%%
-%% await_close(St) -> ok | {error, Reason}
-%%
-await_close(St) when St#st.active == false ->
-    %% First check that we do *not* have any ssl/gen_tcp messages in the
-    %% message queue, then call the receive function.
-    Sock = St#st.sock,
-    Res = case St#st.protomod of
-	      ssl ->
-		  receive 
-		      M = {ssl, Sock, _Msg0} ->
-			  {error, {unexpected_message, M}};
-		      M = {ssl_closed, Sock} ->
-			  {error, {unexpected_message, M}};
-		      M = {ssl_error, Sock, _Reason} ->
-			  {error, {unexpected_message, M}}
-		  after 0 ->
-			  ok
-		  end;
-	      gen_tcp  ->
-		  receive 
-		      M = {tcp, Sock, _Msg0} ->
-			  {error, {unexpected_message, M}};
-		      M = {tcp_closed, Sock} ->
-			  {error, {unexpected_message, M}};
-		      M = {tcp_error, Sock, _Reason} ->
-			  {error, {unexpected_message, M}}
-		  after 0 ->
-			  ok
-		  end
-	  end,
-    case Res of
-	ok ->
-	    Mod = St#st.protomod, 
-	    case Mod:recv(St#st.sock, 0, St#st.timeout) of
-		{ok, _Msg} ->
-		    {error, toomuch};
-		{error, _} ->
-		    ok
-	    end;
-	_  ->
-	    Res
-    end;
-await_close(St) ->
-    Sock = St#st.sock,
-    Timeout = St#st.timeout,
-    case St#st.protomod of 
-	ssl ->
-	    receive 
-		{ssl, Sock, _Msg} ->
-		    {error, toomuch};
-		{ssl_closed, Sock} ->
-		    ok;
-		{ssl_error, Sock, Reason} ->
-		    {error, Reason}
-	    after Timeout ->
-		    {error, timeout}
-	    end;
-	gen_tcp  ->
-	    receive 
-		{tcp, Sock, _Msg} ->
-		    {error, toomuch};
-		{tcp_closed, Sock} ->
-		    ok;
-		{tcp_error, Sock, Reason} ->
-		    {error, Reason}
-	    after Timeout ->
-		    {error, timeout}
-	    end
-    end.
-
-
-%%
-%% HELP FUNCTIONS
-%%
-
-wait_ack(_, [], _) ->
-    ok;
-wait_ack(AccPids0, Pids, Timeout) ->
-    ?debug("#### CONTROLLER: waiting for ~w~n", [Pids]),
-    receive
-	{one_accept_done, Pid} ->
-	    case lists:delete(Pid, AccPids0) of
-		[] ->
-		    wait_ack([], Pids, Timeout);
-		[AccPid| AccPids1] ->
-		    AccPid ! {continue_accept, self()},
-		    wait_ack(AccPids1, Pids, Timeout)
-	    end;
-	{'EXIT', Pid, normal} ->
-	    wait_ack(AccPids0, lists:delete(Pid, Pids), Timeout);
-	{'EXIT', Pid, Reason} ->
-	    ?error("#### CONTROLLER got abnormal exit: ~w, ~w~n", 
-		   [Pid, Reason]),
-	    {error, Reason}
-    after Timeout ->
-	    ?error("#### CONTROLLER exiting because of timeout = ~w~n", 
-		   [Timeout]),
-	    {error, Timeout}
-    end.
-
-
-%%
-%% ack_lsock(Pid, LSock)
-%%
-ack_lsock(Pid, LSock) ->
-    Pid ! {lsock, self(), LSock}.
-
-wait_lsock(Pid, Timeout) ->
-    receive
-	{lsock, Pid, LSock} ->
-	    {ok, LSock}
-    after Timeout ->
-	    exit(timeout)
-    end.
-
-%%
-%% sync(Pids)
-%%
-sync(Pids) ->
-    lists:foreach(fun (Pid) -> Pid ! {self(), sync} end, Pids).
-
-%%
-%% wait_sync(St)
-%%
-wait_sync(St) ->
-    Pid = St#st.parent, 
-    receive
-	{Pid, sync} ->
-	    ok
-    end.
-
-%% 
-%% wait(Time)
-%%
-wait(Time) ->
-    receive
-    after Time ->
-	    ok
-    end.
-
-%%
-%% mk_msg(Size)
-%%
-mk_msg(Size) ->
-    mk_msg(0, Size, []).
-
-mk_msg(_, 0, Acc) ->
-    Acc;
-mk_msg(Pos, Size, Acc) ->
-    C = (((Pos + Size) rem 256) - 1) band 255,
-    mk_msg(Pos, Size - 1, [C| Acc]).
-
-%%
-%% get_protomod(Config)
-%%
-get_protomod(Config) ->
-    case lists:keysearch(protomod, 1, Config) of
-	{value, {_, ProtoMod}} ->
-	    ProtoMod;
-	false  ->
-	    ssl
-    end.
-
-%%
-%% get_serialize_accept(Config)
-%%
-get_serialize_accept(Config) ->
-    case lists:keysearch(serialize_accept, 1, Config) of
-	{value, {_, Val}} ->
-	    Val;
-	false  ->
-	    false
-    end.
-
diff --git a/lib/ssl/test/ssl_test_MACHINE.hrl b/lib/ssl/test/ssl_test_MACHINE.hrl
deleted file mode 100644
index e78b33f505..0000000000
--- a/lib/ssl/test/ssl_test_MACHINE.hrl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
--record(st, {protomod = ssl, 
-	     serialize_accept = false,
-	     parent = nil,
-	     type = nil,
-	     active = nil,
-	     port = 0,
-	     peer = nil,
-	     lsock = nil,
-	     sock = nil,
-	     timeout = infinity,
-	     sockopts = [],
-	     sslopts = [],
-	     protocols = []}).
-
-%%-define(debug(X, Y), io:format(X, Y)).
--define(debug(X, Y), ok).
--define(error(X, Y), io:format(X, Y)).
-
--define(DEFAULT_TIMEOUT, 240000).
-
-- 
cgit v1.2.3