patch_prosody-0.9.diff
changeset 4 d02978ae44af
parent 3 de3dceee742e
equal deleted inserted replaced
3:de3dceee742e 4:d02978ae44af
     1 # HG changeset patch
       
     2 # User Mikael Berthe <mikael@lilotux.net>
       
     3 mod_admin_telnet: introduce a global function console_incoming_message()
       
     4 This patch moves code from console_listener.onincoming() into a new global
       
     5 function so that it can be used in other modules.
       
     6 
       
     7 diff -r 9962fc19f9e9 plugins/mod_admin_telnet.lua
       
     8 --- a/plugins/mod_admin_telnet.lua	Sat Jul 28 01:28:14 2012 +0100
       
     9 +++ b/plugins/mod_admin_telnet.lua	Sat Jul 28 18:14:31 2012 +0200
       
    10 @@ -72,19 +72,7 @@ function console:new_session(conn)
       
    11  	return session;
       
    12  end
       
    13  
       
    14 -local sessions = {};
       
    15 -
       
    16 -function console_listener.onconnect(conn)
       
    17 -	-- Handle new connection
       
    18 -	local session = console:new_session(conn);
       
    19 -	sessions[conn] = session;
       
    20 -	printbanner(session);
       
    21 -	session.send(string.char(0));
       
    22 -end
       
    23 -
       
    24 -function console_listener.onincoming(conn, data)
       
    25 -	local session = sessions[conn];
       
    26 -
       
    27 +function console_incoming_message(session, data)
       
    28  	local partial = session.partial_data;
       
    29  	if partial then
       
    30  		data = partial..data;
       
    31 @@ -110,7 +98,7 @@ function console_listener.onincoming(con
       
    32  			end
       
    33  
       
    34  			session.env._ = line;
       
    35 -			
       
    36 +
       
    37  			local chunkname = "=console";
       
    38  			local env = (useglobalenv and redirect_output(_G, session)) or session.env or nil
       
    39  			local chunk, err = envload("return "..line, chunkname, env);
       
    40 @@ -124,20 +112,20 @@ function console_listener.onincoming(con
       
    41  					break;
       
    42  				end
       
    43  			end
       
    44 -		
       
    45 +
       
    46  			local ranok, taskok, message = pcall(chunk);
       
    47 -			
       
    48 +
       
    49  			if not (ranok or message or useglobalenv) and commands[line:lower()] then
       
    50  				commands[line:lower()](session, line);
       
    51  				break;
       
    52  			end
       
    53 -			
       
    54 +
       
    55  			if not ranok then
       
    56  				session.print("Fatal error while running command, it did not complete");
       
    57  				session.print("Error: "..taskok);
       
    58  				break;
       
    59  			end
       
    60 -			
       
    61 +
       
    62  			if not message then
       
    63  				session.print("Result: "..tostring(taskok));
       
    64  				break;
       
    65 @@ -146,15 +134,30 @@ function console_listener.onincoming(con
       
    66  				session.print("Message: "..tostring(message));
       
    67  				break;
       
    68  			end
       
    69 -			
       
    70 +
       
    71  			session.print("OK: "..tostring(message));
       
    72  		until true
       
    73 -		
       
    74 +
       
    75  		session.send(string.char(0));
       
    76  	end
       
    77  	session.partial_data = data:match("[^\n]+$");
       
    78  end
       
    79  
       
    80 +local sessions = {};
       
    81 +
       
    82 +function console_listener.onconnect(conn)
       
    83 +	-- Handle new connection
       
    84 +	local session = console:new_session(conn);
       
    85 +	sessions[conn] = session;
       
    86 +	printbanner(session);
       
    87 +	session.send(string.char(0));
       
    88 +end
       
    89 +
       
    90 +function console_listener.onincoming(conn, data)
       
    91 +	local session = sessions[conn];
       
    92 +	console_incoming_message(session, data);
       
    93 +end
       
    94 +
       
    95  function console_listener.ondisconnect(conn, err)
       
    96  	local session = sessions[conn];
       
    97  	if session then