net/server.lua
author Matthew Wild <mwild1@gmail.com>
Wed, 22 Apr 2009 20:33:24 +0100
changeset 1039 cc4280f45d0e
parent 1036 b2e19c66ec7f
child 1100 05d209ef9661
permissions -rw-r--r--
net.server: Fix global access/incorrect parameter
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     1
--[[
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     2
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     3
        server.lua by blastbeat
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     4
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     5
        - this script contains the server loop of the program
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     6
        - other scripts can reg a server here
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     7
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     8
]]--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
     9
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    10
-- // wrapping luadch stuff // --
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    11
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    12
local use = function( what )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    13
    return _G[ what ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    14
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    15
local clean = function( tbl )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    16
    for i, k in pairs( tbl ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    17
        tbl[ i ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    18
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    19
end
740
cc25d75b4027 server.lua: Use Prosody logger for errors, silence non-errors
Matthew Wild <mwild1@gmail.com>
parents: 739
diff changeset
    20
cc25d75b4027 server.lua: Use Prosody logger for errors, silence non-errors
Matthew Wild <mwild1@gmail.com>
parents: 739
diff changeset
    21
local log, table_concat = require ("util.logger").init("socket"), table.concat;
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
    22
local out_put = function (...) return log("debug", table_concat{...}); end
740
cc25d75b4027 server.lua: Use Prosody logger for errors, silence non-errors
Matthew Wild <mwild1@gmail.com>
parents: 739
diff changeset
    23
local out_error = function (...) return log("warn", table_concat{...}); end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    24
local mem_free = collectgarbage
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    25
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    26
----------------------------------// DECLARATION //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    27
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    28
--// constants //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    29
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    30
local STAT_UNIT = 1    -- byte
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    31
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    32
--// lua functions //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    33
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    34
local type = use "type"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    35
local pairs = use "pairs"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    36
local ipairs = use "ipairs"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    37
local tostring = use "tostring"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    38
local collectgarbage = use "collectgarbage"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    39
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    40
--// lua libs //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    41
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    42
local os = use "os"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    43
local table = use "table"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    44
local string = use "string"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    45
local coroutine = use "coroutine"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    46
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    47
--// lua lib methods //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    48
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    49
local os_time = os.time
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    50
local os_difftime = os.difftime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    51
local table_concat = table.concat
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    52
local table_remove = table.remove
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    53
local string_len = string.len
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    54
local string_sub = string.sub
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    55
local coroutine_wrap = coroutine.wrap
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    56
local coroutine_yield = coroutine.yield
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    57
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    58
--// extern libs //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    59
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    60
local luasec = select( 2, pcall( require, "ssl" ) )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    61
local luasocket = require "socket"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    62
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    63
--// extern lib methods //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    64
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    65
local ssl_wrap = ( luasec and luasec.wrap )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    66
local socket_bind = luasocket.bind
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    67
local socket_sleep = luasocket.sleep
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    68
local socket_select = luasocket.select
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    69
local ssl_newcontext = ( luasec and luasec.newcontext )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    70
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    71
--// functions //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    72
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    73
local id
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    74
local loop
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    75
local stats
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    76
local idfalse
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    77
local addtimer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    78
local closeall
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    79
local addserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    80
local wrapserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    81
local getsettings
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    82
local closesocket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    83
local removesocket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    84
local removeserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    85
local changetimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    86
local wrapconnection
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    87
local changesettings
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    88
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    89
--// tables //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    90
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    91
local _server
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    92
local _readlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    93
local _timerlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    94
local _sendlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    95
local _socketlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    96
local _closelist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    97
local _readtimes
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    98
local _writetimes
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
    99
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   100
--// simple data types //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   101
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   102
local _
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   103
local _readlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   104
local _sendlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   105
local _timerlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   106
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   107
local _sendtraffic
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   108
local _readtraffic
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   109
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   110
local _selecttimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   111
local _sleeptime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   112
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   113
local _starttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   114
local _currenttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   115
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   116
local _maxsendlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   117
local _maxreadlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   118
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   119
local _checkinterval
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   120
local _sendtimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   121
local _readtimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   122
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   123
local _cleanqueue
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   124
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   125
local _timer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   126
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   127
local _maxclientsperserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   128
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   129
----------------------------------// DEFINITION //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   130
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   131
_server = { }    -- key = port, value = table; list of listening servers
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   132
_readlist = { }    -- array with sockets to read from
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   133
_sendlist = { }    -- arrary with sockets to write to
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   134
_timerlist = { }    -- array of timer functions
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   135
_socketlist = { }    -- key = socket, value = wrapped socket (handlers)
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   136
_readtimes = { }   -- key = handler, value = timestamp of last data reading
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   137
_writetimes = { }   -- key = handler, value = timestamp of last data writing/sending
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   138
_closelist = { }    -- handlers to close
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   139
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   140
_readlistlen = 0    -- length of readlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   141
_sendlistlen = 0    -- length of sendlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   142
_timerlistlen = 0    -- lenght of timerlist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   143
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   144
_sendtraffic = 0    -- some stats
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   145
_readtraffic = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   146
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   147
_selecttimeout = 1    -- timeout of socket.select
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   148
_sleeptime = 0    -- time to wait at the end of every loop
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   149
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   150
_maxsendlen = 51000 * 1024    -- max len of send buffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   151
_maxreadlen = 25000 * 1024    -- max len of read buffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   152
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   153
_checkinterval = 1200000    -- interval in secs to check idle clients
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   154
_sendtimeout = 60000    -- allowed send idle time in secs
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   155
_readtimeout = 6 * 60 * 60    -- allowed read idle time in secs
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   156
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   157
_cleanqueue = false    -- clean bufferqueue after using
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   158
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   159
_maxclientsperserver = 1000
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   160
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   161
----------------------------------// PRIVATE //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   162
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   163
wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxconnections, startssl )    -- this function wraps a server
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   164
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   165
    maxconnections = maxconnections or _maxclientsperserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   166
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   167
    local connections = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   168
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   169
    local dispatch, disconnect = listeners.incoming or listeners.listener, listeners.disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   170
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   171
    local err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   172
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   173
    local ssl = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   174
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   175
    if sslctx then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   176
        if not ssl_newcontext then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   177
            return nil, "luasec not found"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   178
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   179
        if type( sslctx ) ~= "table" then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   180
            out_error "server.lua: wrong server sslctx"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   181
            return nil, "wrong server sslctx"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   182
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   183
        sslctx, err = ssl_newcontext( sslctx )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   184
        if not sslctx then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   185
            err = err or "wrong sslctx parameters"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   186
            out_error( "server.lua: ", err )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   187
            return nil, err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   188
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   189
        ssl = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   190
    else
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   191
	out_put("server.lua: ", "ssl not enabled on ", serverport);
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   192
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   193
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   194
    local accept = socket.accept
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   195
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   196
    --// public methods of the object //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   197
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   198
    local handler = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   199
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   200
    handler.shutdown = function( ) end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   201
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   202
    handler.ssl = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   203
        return ssl
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   204
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   205
    handler.remove = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   206
        connections = connections - 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   207
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   208
    handler.close = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   209
        for _, handler in pairs( _socketlist ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   210
            if handler.serverport == serverport then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   211
                handler.disconnect( handler, "server closed" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   212
                handler.close( true )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   213
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   214
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   215
        socket:close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   216
        _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   217
        _readlistlen = removesocket( _readlist, socket, _readlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   218
        _socketlist[ socket ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   219
        handler = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   220
        socket = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   221
        mem_free( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   222
        out_put "server.lua: closed server handler and removed sockets from list"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   223
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   224
    handler.ip = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   225
        return ip
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   226
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   227
    handler.serverport = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   228
        return serverport
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   229
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   230
    handler.socket = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   231
        return socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   232
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   233
    handler.readbuffer = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   234
        if connections > maxconnections then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   235
            out_put( "server.lua: refused new client connection: server full" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   236
            return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   237
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   238
        local client, err = accept( socket )    -- try to accept
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   239
        if client then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   240
            local ip, clientport = client:getpeername( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   241
            client:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   242
            local handler, client, err = wrapconnection( handler, listeners, client, ip, serverport, clientport, pattern, sslctx, startssl )    -- wrap new client socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   243
            if err then    -- error while wrapping ssl socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   244
                return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   245
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   246
            connections = connections + 1
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   247
            out_put( "server.lua: accepted new client connection from ", tostring(ip), ":", tostring(clientport), " to ", tostring(serverport))
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   248
            return dispatch( handler )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   249
        elseif err then    -- maybe timeout or something else
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   250
            out_put( "server.lua: error with new client connection: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   251
            return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   252
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   253
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   254
    return handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   255
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   256
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   257
wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx, startssl )    -- this function wraps a client to a handler object
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   258
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   259
    socket:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   260
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   261
    --// local import of socket methods //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   262
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   263
    local send
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   264
    local receive
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   265
    local shutdown
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   266
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   267
    --// private closures of the object //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   268
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   269
    local ssl
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   270
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   271
    local dispatch = listeners.incoming or listeners.listener
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   272
    local disconnect = listeners.disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   273
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   274
    local bufferqueue = { }    -- buffer array
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   275
    local bufferqueuelen = 0    -- end of buffer array
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   276
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   277
    local toclose
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   278
    local fatalerror
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   279
    local needtls
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   280
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   281
    local bufferlen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   282
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   283
    local noread = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   284
    local nosend = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   285
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   286
    local sendtraffic, readtraffic = 0, 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   287
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   288
    local maxsendlen = _maxsendlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   289
    local maxreadlen = _maxreadlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   290
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   291
    --// public methods of the object //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   292
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   293
    local handler = bufferqueue    -- saves a table ^_^
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   294
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   295
    handler.dispatch = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   296
        return dispatch
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   297
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   298
    handler.disconnect = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   299
        return disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   300
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   301
    handler.setlistener = function( listeners )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   302
        dispatch = listeners.incoming
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   303
        disconnect = listeners.disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   304
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   305
    handler.getstats = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   306
        return readtraffic, sendtraffic
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   307
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   308
    handler.ssl = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   309
        return ssl
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   310
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   311
    handler.send = function( _, data, i, j )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   312
        return send( socket, data, i, j )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   313
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   314
    handler.receive = function( pattern, prefix )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   315
        return receive( socket, pattern, prefix )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   316
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   317
    handler.shutdown = function( pattern )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   318
        return shutdown( socket, pattern )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   319
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   320
    handler.close = function( forced )
867
21347a87e185 net.server: Check for potential nil handler on close
Matthew Wild <mwild1@gmail.com>
parents: 855
diff changeset
   321
        if not handler then return true; end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   322
        _readlistlen = removesocket( _readlist, socket, _readlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   323
        _readtimes[ handler ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   324
        if bufferqueuelen ~= 0 then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   325
            if not ( forced or fatalerror ) then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   326
                handler.sendbuffer( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   327
                if bufferqueuelen ~= 0 then   -- try again...
999
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   328
                    if handler then
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   329
                        handler.write = nil    -- ... but no further writing allowed
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   330
                    end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   331
                    toclose = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   332
                    return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   333
                end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   334
            else
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   335
                send( socket, table_concat( bufferqueue, "", 1, bufferqueuelen ), 1, bufferlen )    -- forced send
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   336
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   337
        end
868
9e058e51ecaf net.server: Don't call shutdown method on socket if it doesn't have one, eg. for UDP
Matthew Wild <mwild1@gmail.com>
parents: 867
diff changeset
   338
        _ = shutdown and shutdown( socket )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   339
        socket:close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   340
        _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   341
        _socketlist[ socket ] = nil
999
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   342
        if handler then
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   343
            _writetimes[ handler ] = nil
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   344
            _closelist[ handler ] = nil
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   345
            handler = nil
c088139d8f05 net.server: Fix potential nil handler usage
Matthew Wild <mwild1@gmail.com>
parents: 996
diff changeset
   346
        end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   347
        socket = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   348
        mem_free( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   349
	if server then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   350
		server.remove( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   351
	end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   352
        out_put "server.lua: closed client handler and removed socket from list"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   353
        return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   354
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   355
    handler.ip = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   356
        return ip
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   357
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   358
    handler.serverport = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   359
        return serverport
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   360
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   361
    handler.clientport = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   362
        return clientport
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   363
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   364
    local write = function( data )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   365
        bufferlen = bufferlen + string_len( data )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   366
        if bufferlen > maxsendlen then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   367
            _closelist[ handler ] = "send buffer exceeded"   -- cannot close the client at the moment, have to wait to the end of the cycle
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   368
            handler.write = idfalse    -- dont write anymore
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   369
            return false
775
d4b6714fc829 net.server: Fix nil table index assignment
Matthew Wild <mwild1@gmail.com>
parents: 773
diff changeset
   370
        elseif socket and not _sendlist[ socket ] then
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   371
            _sendlistlen = _sendlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   372
            _sendlist[ _sendlistlen ] = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   373
            _sendlist[ socket ] = _sendlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   374
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   375
        bufferqueuelen = bufferqueuelen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   376
        bufferqueue[ bufferqueuelen ] = data
815
cf8392613f46 net.server: Fix some more potential nil handler accesses
Matthew Wild <mwild1@gmail.com>
parents: 775
diff changeset
   377
        if handler then
cf8392613f46 net.server: Fix some more potential nil handler accesses
Matthew Wild <mwild1@gmail.com>
parents: 775
diff changeset
   378
        	_writetimes[ handler ] = _writetimes[ handler ] or _currenttime
cf8392613f46 net.server: Fix some more potential nil handler accesses
Matthew Wild <mwild1@gmail.com>
parents: 775
diff changeset
   379
        end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   380
        return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   381
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   382
    handler.write = write
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   383
    handler.bufferqueue = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   384
        return bufferqueue
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   385
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   386
    handler.socket = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   387
        return socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   388
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   389
    handler.pattern = function( new )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   390
        pattern = new or pattern
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   391
        return pattern
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   392
    end
885
38ed2db19a55 net.server: Allow replacement of send function on an open socket
Matthew Wild <mwild1@gmail.com>
parents: 868
diff changeset
   393
    handler.setsend = function ( newsend )
38ed2db19a55 net.server: Allow replacement of send function on an open socket
Matthew Wild <mwild1@gmail.com>
parents: 868
diff changeset
   394
        send = newsend or send
38ed2db19a55 net.server: Allow replacement of send function on an open socket
Matthew Wild <mwild1@gmail.com>
parents: 868
diff changeset
   395
        return send
38ed2db19a55 net.server: Allow replacement of send function on an open socket
Matthew Wild <mwild1@gmail.com>
parents: 868
diff changeset
   396
    end
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   397
    handler.bufferlen = function( readlen, sendlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   398
        maxsendlen = sendlen or maxsendlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   399
        maxreadlen = readlen or maxreadlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   400
        return maxreadlen, maxsendlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   401
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   402
    handler.lock = function( switch )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   403
        if switch == true then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   404
            handler.write = idfalse
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   405
            local tmp = _sendlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   406
            _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   407
            _writetimes[ handler ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   408
            if _sendlistlen ~= tmp then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   409
                nosend = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   410
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   411
            tmp = _readlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   412
            _readlistlen = removesocket( _readlist, socket, _readlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   413
            _readtimes[ handler ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   414
            if _readlistlen ~= tmp then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   415
                noread = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   416
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   417
        elseif switch == false then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   418
            handler.write = write
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   419
            if noread then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   420
                noread = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   421
                _readlistlen = _readlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   422
                _readlist[ socket ] = _readlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   423
                _readlist[ _readlistlen ] = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   424
                _readtimes[ handler ] = _currenttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   425
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   426
            if nosend then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   427
                nosend = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   428
                write( "" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   429
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   430
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   431
        return noread, nosend
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   432
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   433
    local _readbuffer = function( )    -- this function reads data
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   434
        local buffer, err, part = receive( socket, pattern )    -- receive buffer with "pattern"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   435
        if not err or ( err == "timeout" or err == "wantread" ) then    -- received something
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   436
            local buffer = buffer or part or ""
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   437
            local len = string_len( buffer )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   438
            if len > maxreadlen then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   439
                disconnect( handler, "receive buffer exceeded" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   440
                handler.close( true )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   441
                return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   442
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   443
            local count = len * STAT_UNIT
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   444
            readtraffic = readtraffic + count
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   445
            _readtraffic = _readtraffic + count
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   446
            _readtimes[ handler ] = _currenttime
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   447
            --out_put( "server.lua: read data '", buffer, "', error: ", err )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   448
            return dispatch( handler, buffer, err )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   449
        else    -- connections was closed or fatal error
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   450
            out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   451
            fatalerror = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   452
            disconnect( handler, err )
773
c36edc1934c5 net.server: Fix potential fatal error in server.lua
Matthew Wild <mwild1@gmail.com>
parents: 770
diff changeset
   453
	    _ = handler and handler.close( )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   454
            return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   455
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   456
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   457
    local _sendbuffer = function( )    -- this function sends data
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   458
        local buffer = table_concat( bufferqueue, "", 1, bufferqueuelen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   459
        local succ, err, byte = send( socket, buffer, 1, bufferlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   460
        local count = ( succ or byte or 0 ) * STAT_UNIT
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   461
        sendtraffic = sendtraffic + count
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   462
        _sendtraffic = _sendtraffic + count
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   463
        _ = _cleanqueue and clean( bufferqueue )
996
6fb96dffb2c1 net.server: Simple logging fix
Matthew Wild <mwild1@gmail.com>
parents: 994
diff changeset
   464
        --out_put( "server.lua: sended '", buffer, "', bytes: ", tostring(succ), ", error: ", tostring(err), ", part: ", tostring(byte), ", to: ", tostring(ip), ":", tostring(clientport) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   465
        if succ then    -- sending succesful
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   466
            bufferqueuelen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   467
            bufferlen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   468
            _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )    -- delete socket from writelist
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   469
            _ = needtls and handler.starttls(true)
770
bddf52121908 Fix for nil handler error after close
Matthew Wild <mwild1@gmail.com>
parents: 741
diff changeset
   470
            _writetimes[ handler ] = nil
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   471
	    _ = toclose and handler.close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   472
            return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   473
        elseif byte and ( err == "timeout" or err == "wantwrite" ) then    -- want write
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   474
            buffer = string_sub( buffer, byte + 1, bufferlen )    -- new buffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   475
            bufferqueue[ 1 ] = buffer    -- insert new buffer in queue
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   476
            bufferqueuelen = 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   477
            bufferlen = bufferlen - byte
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   478
            _writetimes[ handler ] = _currenttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   479
            return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   480
        else    -- connection was closed during sending or fatal error
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   481
            out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " error: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   482
            fatalerror = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   483
            disconnect( handler, err )
815
cf8392613f46 net.server: Fix some more potential nil handler accesses
Matthew Wild <mwild1@gmail.com>
parents: 775
diff changeset
   484
            _ = handler and handler.close( )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   485
            return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   486
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   487
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   488
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   489
    if sslctx then    -- ssl?
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   490
        ssl = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   491
        local wrote
846
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   492
        local read
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   493
        local handshake = coroutine_wrap( function( client )    -- create handshake coroutine
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   494
                local err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   495
                for i = 1, 10 do    -- 10 handshake attemps
846
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   496
                    _sendlistlen = ( wrote and removesocket( _sendlist, socket, _sendlistlen ) ) or _sendlistlen
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   497
                    _readlistlen = ( read and removesocket( _readlist, socket, _readlistlen ) ) or _readlistlen
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   498
                    read, wrote = nil, nil
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   499
                    _, err = client:dohandshake( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   500
                    if not err then
850
edbd0d1fce93 net.server: Don't retry if client closes socket during SSL handshaking
Matthew Wild <mwild1@gmail.com>
parents: 846
diff changeset
   501
                        out_put( "server.lua: ssl handshake done" )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   502
                        handler.readbuffer = _readbuffer    -- when handshake is done, replace the handshake function with regular functions
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   503
                        handler.sendbuffer = _sendbuffer
846
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   504
                        -- return dispatch( handler )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   505
                        return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   506
                    else
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   507
                        out_put( "server.lua: error during ssl handshake: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   508
                        if err == "wantwrite" and not wrote then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   509
                            _sendlistlen = _sendlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   510
                            _sendlist[ _sendlistlen ] = client
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   511
                            wrote = true
846
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   512
                        elseif err == "wantread" and not read then
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   513
                                _readlistlen = _readlistlen + 1
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   514
                                _readlist [ _readlistlen ] = client
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   515
                                read = true
850
edbd0d1fce93 net.server: Don't retry if client closes socket during SSL handshaking
Matthew Wild <mwild1@gmail.com>
parents: 846
diff changeset
   516
                        else
edbd0d1fce93 net.server: Don't retry if client closes socket during SSL handshaking
Matthew Wild <mwild1@gmail.com>
parents: 846
diff changeset
   517
                        	break;
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   518
                        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   519
                        --coroutine_yield( handler, nil, err )    -- handshake not finished
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   520
                        coroutine_yield( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   521
                    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   522
                end
850
edbd0d1fce93 net.server: Don't retry if client closes socket during SSL handshaking
Matthew Wild <mwild1@gmail.com>
parents: 846
diff changeset
   523
                disconnect( handler, "ssl handshake failed" )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   524
                handler.close( true )    -- forced disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   525
                return false    -- handshake failed
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   526
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   527
        )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   528
        if startssl then    -- ssl now?
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   529
            --out_put("server.lua: ", "starting ssl handshake")
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   530
	    local err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   531
            socket, err = ssl_wrap( socket, sslctx )    -- wrap socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   532
            if err then
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   533
                out_put( "server.lua: ssl error: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   534
                mem_free( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   535
                return nil, nil, err    -- fatal error
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   536
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   537
            socket:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   538
            handler.readbuffer = handshake
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   539
            handler.sendbuffer = handshake
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   540
            handshake( socket )    -- do handshake
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   541
        else
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   542
            handler.starttls = function( now )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   543
                if not now then
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   544
                    --out_put "server.lua: we need to do tls, but delaying until later"
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   545
                    needtls = true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   546
                    return
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   547
                end
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   548
                --out_put( "server.lua: attempting to start tls on " .. tostring( socket ) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   549
                local oldsocket, err = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   550
                socket, err = ssl_wrap( socket, sslctx )    -- wrap socket
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   551
                --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   552
                if err then
962
872f5d85636e net.server: Ensure some logging parameters are strings
Matthew Wild <mwild1@gmail.com>
parents: 885
diff changeset
   553
                    out_put( "server.lua: error while starting tls on client: ", tostring(err) )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   554
                    return nil, err    -- fatal error
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   555
                end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   556
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   557
                socket:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   558
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   559
                -- add the new socket to our system
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   560
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   561
                send = socket.send
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   562
                receive = socket.receive
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   563
                shutdown = id
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   564
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   565
                _socketlist[ socket ] = handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   566
                _readlistlen = _readlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   567
                _readlist[ _readlistlen ] = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   568
                _readlist[ socket ] = _readlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   569
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   570
                -- remove traces of the old socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   571
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   572
                _readlistlen = removesocket( _readlist, oldsocket, _readlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   573
                _sendlistlen = removesocket( _sendlist, oldsocket, _sendlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   574
                _socketlist[ oldsocket ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   575
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   576
                handler.starttls = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   577
                needtls = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   578
846
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   579
                handler.readbuffer = handshake
77244ba297ac net.server: Some fixes for SSL/TLS handshake handling
Matthew Wild <mwild1@gmail.com>
parents: 815
diff changeset
   580
                handler.sendbuffer = handshake
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   581
                handshake( socket )    -- do handshake
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   582
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   583
            handler.readbuffer = _readbuffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   584
            handler.sendbuffer = _sendbuffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   585
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   586
    else    -- normal connection
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   587
        ssl = false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   588
        handler.readbuffer = _readbuffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   589
        handler.sendbuffer = _sendbuffer
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   590
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   591
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   592
    send = socket.send
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   593
    receive = socket.receive
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   594
    shutdown = ( ssl and id ) or socket.shutdown
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   595
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   596
    _socketlist[ socket ] = handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   597
    _readlistlen = _readlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   598
    _readlist[ _readlistlen ] = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   599
    _readlist[ socket ] = _readlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   600
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   601
    return handler, socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   602
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   603
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   604
id = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   605
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   606
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   607
idfalse = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   608
    return false
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   609
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   610
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   611
removesocket = function( list, socket, len )    -- this function removes sockets from a list ( copied from copas )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   612
    local pos = list[ socket ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   613
    if pos then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   614
        list[ socket ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   615
        local last = list[ len ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   616
        list[ len ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   617
        if last ~= socket then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   618
            list[ last ] = pos
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   619
            list[ pos ] = last
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   620
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   621
        return len - 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   622
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   623
    return len
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   624
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   625
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   626
closesocket = function( socket )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   627
    _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   628
    _readlistlen = removesocket( _readlist, socket, _readlistlen )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   629
    _socketlist[ socket ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   630
    socket:close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   631
    mem_free( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   632
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   633
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   634
----------------------------------// PUBLIC //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   635
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   636
addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, startssl )    -- this function provides a way for other scripts to reg a server
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   637
    local err
741
97577b6c07ca server.lua: Comment out unnecessary or very verbose logging, and log the rest as debug level
Matthew Wild <mwild1@gmail.com>
parents: 740
diff changeset
   638
    --out_put("server.lua: autossl on ", port, " is ", startssl)
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   639
    if type( listeners ) ~= "table" then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   640
        err = "invalid listener table"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   641
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   642
    if not type( port ) == "number" or not ( port >= 0 and port <= 65535 ) then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   643
        err = "invalid port"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   644
    elseif _server[ port ] then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   645
        err =  "listeners on port '" .. port .. "' already exist"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   646
    elseif sslctx and not luasec then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   647
        err = "luasec not found"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   648
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   649
    if err then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   650
        out_error( "server.lua: ", err )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   651
        return nil, err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   652
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   653
    addr = addr or "*"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   654
    local server, err = socket_bind( addr, port )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   655
    if err then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   656
        out_error( "server.lua: ", err )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   657
        return nil, err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   658
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   659
    local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, maxconnections, startssl )    -- wrap new server socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   660
    if not handler then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   661
        server:close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   662
        return nil, err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   663
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   664
    server:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   665
    _readlistlen = _readlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   666
    _readlist[ _readlistlen ] = server
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   667
    _server[ port ] = handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   668
    _socketlist[ server ] = handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   669
    out_put( "server.lua: new server listener on '", addr, ":", port, "'" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   670
    return handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   671
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   672
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   673
removeserver = function( port )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   674
    local handler = _server[ port ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   675
    if not handler then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   676
        return nil, "no server found on port '" .. tostring( port ) "'"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   677
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   678
    handler.close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   679
    return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   680
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   681
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   682
closeall = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   683
    for _, handler in pairs( _socketlist ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   684
        handler.close( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   685
        _socketlist[ _ ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   686
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   687
    _readlistlen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   688
    _sendlistlen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   689
    _timerlistlen = 0
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   690
    _server = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   691
    _readlist = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   692
    _sendlist = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   693
    _timerlist = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   694
    _socketlist = { }
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   695
    mem_free( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   696
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   697
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   698
getsettings = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   699
    return  _selecttimeout, _sleeptime, _maxsendlen, _maxreadlen, _checkinterval, _sendtimeout, _readtimeout, _cleanqueue, _maxclientsperserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   700
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   701
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   702
changesettings = function( new )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   703
    if type( new ) ~= "table" then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   704
        return nil, "invalid settings table"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   705
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   706
    _selecttimeout = tonumber( new.timeout ) or _selecttimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   707
    _sleeptime = tonumber( new.sleeptime ) or _sleeptime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   708
    _maxsendlen = tonumber( new.maxsendlen ) or _maxsendlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   709
    _maxreadlen = tonumber( new.maxreadlen ) or _maxreadlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   710
    _checkinterval = tonumber( new.checkinterval ) or _checkinterval
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   711
    _sendtimeout = tonumber( new.sendtimeout ) or _sendtimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   712
    _readtimeout = tonumber( new.readtimeout ) or _readtimeout
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   713
    _cleanqueue = new.cleanqueue
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   714
    _maxclientsperserver = new._maxclientsperserver or _maxclientsperserver
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   715
    return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   716
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   717
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   718
addtimer = function( listener )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   719
    if type( listener ) ~= "function" then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   720
        return nil, "invalid listener function"
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   721
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   722
    _timerlistlen = _timerlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   723
    _timerlist[ _timerlistlen ] = listener
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   724
    return true
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   725
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   726
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   727
stats = function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   728
    return _readtraffic, _sendtraffic, _readlistlen, _sendlistlen, _timerlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   729
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   730
989
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   731
local dontstop = true;
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   732
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   733
setquitting = function (quit)
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   734
	dontstop = not quit;
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   735
	return;
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   736
end
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   737
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   738
loop = function( )    -- this is the main loop of the program
989
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   739
    while dontstop do
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   740
        local read, write, err = socket_select( _readlist, _sendlist, _selecttimeout )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   741
        for i, socket in ipairs( write ) do    -- send data waiting in writequeues
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   742
            local handler = _socketlist[ socket ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   743
            if handler then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   744
                handler.sendbuffer( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   745
            else
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   746
                closesocket( socket )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   747
                out_put "server.lua: found no handler and closed socket (writelist)"    -- this should not happen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   748
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   749
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   750
        for i, socket in ipairs( read ) do    -- receive data
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   751
            local handler = _socketlist[ socket ]
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   752
            if handler then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   753
                handler.readbuffer( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   754
            else
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   755
                closesocket( socket )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   756
                out_put "server.lua: found no handler and closed socket (readlist)"    -- this can happen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   757
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   758
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   759
        for handler, err in pairs( _closelist ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   760
            handler.disconnect( )( handler, err )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   761
            handler.close( true )    -- forced disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   762
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   763
        clean( _closelist )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   764
        _currenttime = os_time( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   765
        if os_difftime( _currenttime - _timer ) >= 1 then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   766
            for i = 1, _timerlistlen do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   767
                _timerlist[ i ]( )    -- fire timers
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   768
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   769
            _timer = _currenttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   770
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   771
        socket_sleep( _sleeptime )    -- wait some time
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   772
        --collectgarbage( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   773
    end
989
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   774
    return "quitting"
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   775
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   776
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   777
--// EXPERIMENTAL //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   778
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   779
local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx, startssl )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   780
    local handler = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx, startssl )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   781
    _socketlist[ socket ] = handler
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   782
    _sendlistlen = _sendlistlen + 1
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   783
    _sendlist[ _sendlistlen ] = socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   784
    _sendlist[ socket ] = _sendlistlen
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   785
    return handler, socket
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   786
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   787
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   788
local addclient = function( address, port, listeners, pattern, sslctx, startssl )
1035
8cc7e4452b2b net.server: Fix global access
Matthew Wild <mwild1@gmail.com>
parents: 999
diff changeset
   789
    local client, err = luasocket.tcp( )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   790
    if err then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   791
        return nil, err
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   792
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   793
    client:settimeout( 0 )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   794
    _, err = client:connect( address, port )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   795
    if err then    -- try again
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   796
        local handler = wrapclient( client, address, port, listeners )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   797
    else
1039
cc4280f45d0e net.server: Fix global access/incorrect parameter
Matthew Wild <mwild1@gmail.com>
parents: 1036
diff changeset
   798
        wrapconnection( nil, listeners, client, address, port, "clientport", pattern, sslctx, startssl )
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   799
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   800
end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   801
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   802
--// EXPERIMENTAL //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   803
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   804
----------------------------------// BEGIN //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   805
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   806
use "setmetatable" ( _socketlist, { __mode = "k" } )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   807
use "setmetatable" ( _readtimes, { __mode = "k" } )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   808
use "setmetatable" ( _writetimes, { __mode = "k" } )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   809
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   810
_timer = os_time( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   811
_starttime = os_time( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   812
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   813
addtimer( function( )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   814
        local difftime = os_difftime( _currenttime - _starttime )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   815
        if difftime > _checkinterval then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   816
            _starttime = _currenttime
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   817
            for handler, timestamp in pairs( _writetimes ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   818
                if os_difftime( _currenttime - timestamp ) > _sendtimeout then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   819
                    --_writetimes[ handler ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   820
                    handler.disconnect( )( handler, "send timeout" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   821
                    handler.close( true )    -- forced disconnect
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   822
                end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   823
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   824
            for handler, timestamp in pairs( _readtimes ) do
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   825
                if os_difftime( _currenttime - timestamp ) > _readtimeout then
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   826
                    --_readtimes[ handler ] = nil
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   827
                    handler.disconnect( )( handler, "read timeout" )
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   828
                    handler.close( )    -- forced disconnect?
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   829
                end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   830
            end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   831
        end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   832
    end
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   833
)
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   834
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   835
----------------------------------// PUBLIC INTERFACE //--
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   836
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   837
return {
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   838
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   839
    addclient = addclient,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   840
    wrapclient = wrapclient,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   841
    
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   842
    loop = loop,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   843
    stats = stats,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   844
    closeall = closeall,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   845
    addtimer = addtimer,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   846
    addserver = addserver,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   847
    getsettings = getsettings,
989
ec239c044f31 net.server: Add server.setquitting() to gracefully quit the socket loop
Matthew Wild <mwild1@gmail.com>
parents: 962
diff changeset
   848
    setquitting = setquitting,
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   849
    removeserver = removeserver,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   850
    changesettings = changesettings,
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 731
diff changeset
   851
}