summaryrefslogtreecommitdiff
path: root/src/echo_server.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/echo_server.lua')
-rw-r--r--src/echo_server.lua69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/echo_server.lua b/src/echo_server.lua
new file mode 100644
index 0000000..ee23cb1
--- /dev/null
+++ b/src/echo_server.lua
@@ -0,0 +1,69 @@
+--
+-- anylike
+--
+-- anylike is a ...
+--
+--
+-- Copyright (C) 2007-2008 Markus Grueneis <gimpf@anylike.org>
+-- Christian Pointner <equinox@anylike.org>
+--
+-- This file is part of anylike.
+--
+-- anylike is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- any later version.
+--
+-- anylike is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with anylike. If not, see <http://www.gnu.org/licenses/>.
+--
+
+socket = require("socket")
+
+function echo_server()
+ local host, port = "localhost", 4500
+ local ip, err = socket.dns.toip(host)
+ if(ip == nil) then
+ log.print("ERROR", "can't resolve " .. host .. ": " .. err)
+ return -1
+ end
+
+ local udp, err = socket.udp()
+ if(udp == nil) then
+ log.print("ERROR", "can't create udp socket")
+ return -1
+ end
+
+ local ret, err = udp:setsockname(ip, port)
+ if(ret == nil) then
+ log.print("ERROR", "setsockname(" .. ip .. "," .. port .. ") failed: " .. err)
+ return -1
+ end
+
+ log.print("NOTICE", "echo server listening on " .. ip .. ":" .. port);
+
+ while true do
+ local dgrm, from_ip, from_port = udp:receivefrom()
+ if(ret == nil) then
+ log.print("ERROR", "receivefrom(" .. ip .. "," .. port .. ") failed: " .. from_ip)
+ return -1
+ end
+
+ local ret, err = udp:sendto(dgrm, from_ip, from_port)
+ if(ret == nil) then
+ log.print("ERROR", "sendto(" .. ip .. "," .. port .. ") failed: " .. err)
+ return -1
+ end
+
+ if(string.gsub(dgrm, "^(%w+)%s*%c$", "%1") == "quit") then
+ return 0
+ end
+ end
+
+ return 0
+end