diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 5 | ||||
-rw-r--r-- | src/echo_server.lua | 69 | ||||
-rw-r--r-- | src/main_loop.lua | 43 |
3 files changed, 73 insertions, 44 deletions
diff --git a/src/Makefile b/src/Makefile index 7b86972..c32fbbe 100644 --- a/src/Makefile +++ b/src/Makefile @@ -42,7 +42,8 @@ C_OBJS := log.o \ C_SRCS := $(C_OBJS:%.o=%.c) -LUA_SRCS := main_loop.lua +LUA_SRCS := main_loop.lua \ + echo_server.lua .PHONY: clean cleanall distclean manpage install install-bin install-etc install-man uninstall remove purge @@ -65,7 +66,7 @@ $(EXECUTABLE): $(C_OBJS) $(CC) $(CFLAGS) -c $< $(LUA_OBJ): $(LUA_SRCS) - $(LUAC) -o $@ $< + $(LUAC) -o $@ $(LUA_SRCS) strip: $(EXECUTABLE) $(LUA_OBJ) $(STRIP) -s $(EXECUTABLE) 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 diff --git a/src/main_loop.lua b/src/main_loop.lua index 4002f22..76691f7 100644 --- a/src/main_loop.lua +++ b/src/main_loop.lua @@ -23,49 +23,8 @@ -- along with anylike. If not, see <http://www.gnu.org/licenses/>. -- -socket = require("socket") - function main_loop(opt) log.print("NOTICE", "main_loop started") - 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 -- =0 -> OK, <0 -> error, >0 -> signal + return echo_server() end |