net.server_epoll: Refactor to use common initialization
authorKim Alvefur <zash@zash.se>
Thu, 18 Aug 2016 16:59:31 +0200
changeset 7600 cd34aa6b1632
parent 7599 2c4ba55b616c
child 7601 335b5ce06062
net.server_epoll: Refactor to use common initialization
net/server_epoll.lua
--- a/net/server_epoll.lua	Thu Aug 18 17:04:57 2016 +0200
+++ b/net/server_epoll.lua	Thu Aug 18 16:59:31 2016 +0200
@@ -453,13 +453,17 @@
 	end
 	local client = wrapsocket(conn, self, nil, self.listeners, self.tls);
 	log("debug", "New connection %s", tostring(client));
-	if self.tls then
-		client._tls = false;
-		client:starttls();
+	client:init();
+end
+
+function interface:init()
+	if self.tls and not self._tls then
+		self._tls = false; -- This means we should call onconnect when TLS is up
+		return self:starttls();
 	else
-		client:setflags(false, true);
+		self:setflags(false, true);
 	end
-	client:setreadtimeout();
+	self:setreadtimeout();
 end
 
 function interface:pause()
@@ -513,18 +517,11 @@
 
 -- COMPAT
 local function wrapclient(conn, addr, port, listeners, pattern, tls)
-	local client = setmetatable({
-		conn = conn;
-		created = gettime();
-		listeners = listeners;
-		_pattern = pattern;
-		writebuffer = {};
-		tls = tls;
-		onwriteable = interface.onconnect;
-		peer = { addr, port };
-	}, interface_mt);
-	fds[client:getfd()] = client;
-	client:setflags(false, true);
+	local client = wrapsocket(conn, nil, pattern, listeners, tls);
+	if not client.peername then
+		client.peername, client.peerport = addr, port;
+	end
+	client:init();
 	return client;
 end
 
@@ -533,13 +530,8 @@
 	if not conn then return conn, err; end
 	conn:settimeout(0);
 	conn:connect(addr, port);
-	local client = wrapclient(conn, addr, port, listeners, pattern, tls);
-	if tls then
-		client._tls = false;
-		client:starttls();
-	else
-		client:setflags(true, true);
-	end
+	local client = wrapsocket(conn, nil, pattern, listeners, tls)
+	client:init();
 	return client, conn;
 end