git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@463 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
94cf3fe716
commit
f81cef7396
3
src/webserver/Changelog.txt
Normal file
3
src/webserver/Changelog.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Date Added
|
||||||
|
12/3
|
||||||
|
* Creation of eAthena Web Server v2 [MC Cameri]
|
32
src/webserver/Makefile
Normal file
32
src/webserver/Makefile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
CC = gcc -pipe
|
||||||
|
MAKE = make
|
||||||
|
OPT = -g -O2 -ffast-math
|
||||||
|
|
||||||
|
ifeq ($(findstring CYGWIN,$(PLATFORM)), CYGWIN)
|
||||||
|
CFLAGS = $(OPT) -Wall -I../common
|
||||||
|
else
|
||||||
|
CFLAGS = $(OPT) -Wall -I../common
|
||||||
|
endif
|
||||||
|
|
||||||
|
OBJ = main.o webserver.o ../common/showmsg.o
|
||||||
|
LINKOBJ = main.o webserver.o ../common/showmsg.o
|
||||||
|
|
||||||
|
all: clean webserver run
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o webserver.exe ../common/showmsg.o
|
||||||
|
|
||||||
|
webserver: main.o webserver.o ../common/showmsg.o
|
||||||
|
$(CC) $(OPT) -o "Webserver.exe" $(OBJ)
|
||||||
|
|
||||||
|
main.o: main.c
|
||||||
|
$(CC) $(OPT) -c main.c -o main.o $(CFLAGS)
|
||||||
|
|
||||||
|
webserver.o: webserver.c
|
||||||
|
$(CC) $(OPT) -c webserver.c -o webserver.o $(CFLAGS)
|
||||||
|
|
||||||
|
../common/showmsg.o: ../common/showmsg.c
|
||||||
|
$(CC) $(OPT) -c ../common/showmsg.c -o ../common/showmsg.o $(CFLAGS)
|
||||||
|
|
||||||
|
run:
|
||||||
|
./webserver
|
35
src/webserver/Makefile.win
Normal file
35
src/webserver/Makefile.win
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Project: Webserver
|
||||||
|
# Makefile created by Dev-C++ 4.9.8.0
|
||||||
|
|
||||||
|
CPP = g++.exe -D__DEBUG__
|
||||||
|
CC = gcc.exe -D__DEBUG__
|
||||||
|
WINDRES = windres.exe
|
||||||
|
RES =
|
||||||
|
OBJ = main.o webserver.o ../common/showmsg.o $(RES)
|
||||||
|
LINKOBJ = main.o webserver.o ../common/showmsg.o $(RES)
|
||||||
|
LIBS = -L"C:/Program Files/Dev-Cpp/lib" -L"C:/cygwin/lib"
|
||||||
|
INCS = -I"C:/Program Files/Dev-Cpp/include" -I"C:/cygwin/usr/include" -I"C:/cygwin/usr/include/mingw"
|
||||||
|
CXXINCS = -I"C:/Program Files/Dev-Cpp/include/c++" -I"C:/Program Files/Dev-Cpp/include/c++/mingw32" -I"C:/Program Files/Dev-Cpp/include/c++/backward" -I"C:/Program Files/Dev-Cpp/include" -I"C:/cygwin/usr/include/c++/3.3.1"
|
||||||
|
BIN = webserver.exe
|
||||||
|
CXXFLAGS = $(CXXINCS) -pg -g3
|
||||||
|
CFLAGS = $(INCS) -pg -g3
|
||||||
|
|
||||||
|
.PHONY: all all-before all-after clean clean-custom
|
||||||
|
|
||||||
|
all: all-before webserver.exe all-after
|
||||||
|
|
||||||
|
|
||||||
|
clean: clean-custom
|
||||||
|
rm -f $(OBJ) $(BIN)
|
||||||
|
|
||||||
|
$(BIN): $(LINKOBJ)
|
||||||
|
$(CC) $(LINKOBJ) -o "webserver.exe" $(LIBS)
|
||||||
|
|
||||||
|
main.o: main.c
|
||||||
|
$(CC) -c main.c -o main.o $(CFLAGS)
|
||||||
|
|
||||||
|
webserver.o: webserver.c
|
||||||
|
$(CC) -c webserver.c -o webserver.o $(CFLAGS)
|
||||||
|
|
||||||
|
../common/showmsg.o: ../common/showmsg.c
|
||||||
|
$(CC) -c ../common/showmsg.c -o ../common/showmsg.o $(CFLAGS)
|
24
src/webserver/WEBSER~1.layout
Normal file
24
src/webserver/WEBSER~1.layout
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
[Editors]
|
||||||
|
Focused=-1
|
||||||
|
Order=-1,0
|
||||||
|
[Editor_0]
|
||||||
|
Open=1
|
||||||
|
Top=0
|
||||||
|
CursorCol=5
|
||||||
|
CursorRow=30
|
||||||
|
TopLine=1
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_1]
|
||||||
|
Open=1
|
||||||
|
Top=0
|
||||||
|
CursorCol=1
|
||||||
|
CursorRow=35
|
||||||
|
TopLine=16
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_2]
|
||||||
|
Open=1
|
||||||
|
Top=1
|
||||||
|
CursorCol=14
|
||||||
|
CursorRow=4
|
||||||
|
TopLine=1
|
||||||
|
LeftChar=1
|
97
src/webserver/Webserver.dev
Normal file
97
src/webserver/Webserver.dev
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
[Project]
|
||||||
|
FileName=Webserver.dev
|
||||||
|
Name=Webserver
|
||||||
|
UnitCount=5
|
||||||
|
Type=1
|
||||||
|
Ver=1
|
||||||
|
ObjFiles=
|
||||||
|
Includes=
|
||||||
|
Libs=
|
||||||
|
PrivateResource=
|
||||||
|
ResourceIncludes=
|
||||||
|
MakeIncludes=
|
||||||
|
Compiler=
|
||||||
|
CppCompiler=
|
||||||
|
Linker=
|
||||||
|
IsCpp=0
|
||||||
|
Icon=
|
||||||
|
ExeOutput=
|
||||||
|
ObjectOutput=
|
||||||
|
OverrideOutput=1
|
||||||
|
OverrideOutputName=webserver.exe
|
||||||
|
HostApplication=
|
||||||
|
Folders=common
|
||||||
|
CommandLine=
|
||||||
|
IncludeVersionInfo=0
|
||||||
|
SupportXPThemes=0
|
||||||
|
CompilerSet=1
|
||||||
|
CompilerSettings=000000000000000000
|
||||||
|
|
||||||
|
[Unit1]
|
||||||
|
FileName=main.c
|
||||||
|
CompileCpp=0
|
||||||
|
Folder=
|
||||||
|
Compile=1
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=0
|
||||||
|
BuildCmd=$(CC) -c main.c -o main.o webserver.o $(CFLAGS)
|
||||||
|
|
||||||
|
[VersionInfo]
|
||||||
|
Major=0
|
||||||
|
Minor=1
|
||||||
|
Release=1
|
||||||
|
Build=1
|
||||||
|
LanguageID=1033
|
||||||
|
CharsetID=1252
|
||||||
|
CompanyName=
|
||||||
|
FileVersion=
|
||||||
|
FileDescription=Developed using the Dev-C++ IDE
|
||||||
|
InternalName=
|
||||||
|
LegalCopyright=
|
||||||
|
LegalTrademarks=
|
||||||
|
OriginalFilename=
|
||||||
|
ProductName=
|
||||||
|
ProductVersion=
|
||||||
|
AutoIncBuildNr=0
|
||||||
|
|
||||||
|
[Unit2]
|
||||||
|
FileName=webserver.c
|
||||||
|
CompileCpp=0
|
||||||
|
Folder=
|
||||||
|
Compile=1
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=1
|
||||||
|
BuildCmd=$(CC) -c webserver.c -o webserver.o $(CFLAGS)
|
||||||
|
|
||||||
|
[Unit3]
|
||||||
|
FileName=webserver.h
|
||||||
|
CompileCpp=0
|
||||||
|
Folder=
|
||||||
|
Compile=1
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=0
|
||||||
|
BuildCmd=
|
||||||
|
|
||||||
|
[Unit4]
|
||||||
|
FileName=..\common\showmsg.c
|
||||||
|
CompileCpp=0
|
||||||
|
Folder=common
|
||||||
|
Compile=1
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=0
|
||||||
|
BuildCmd=
|
||||||
|
|
||||||
|
[Unit5]
|
||||||
|
FileName=..\common\showmsg.h
|
||||||
|
CompileCpp=0
|
||||||
|
Folder=common
|
||||||
|
Compile=1
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=0
|
||||||
|
BuildCmd=
|
||||||
|
|
BIN
src/webserver/Webserver.exe
Normal file
BIN
src/webserver/Webserver.exe
Normal file
Binary file not shown.
38
src/webserver/Webserver.layout
Normal file
38
src/webserver/Webserver.layout
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
[Editors]
|
||||||
|
Focused=0
|
||||||
|
Order=0,2,1,-1
|
||||||
|
[Editor_0]
|
||||||
|
Open=1
|
||||||
|
Top=1
|
||||||
|
CursorCol=55
|
||||||
|
CursorRow=128
|
||||||
|
TopLine=95
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_1]
|
||||||
|
Open=1
|
||||||
|
Top=0
|
||||||
|
CursorCol=25
|
||||||
|
CursorRow=113
|
||||||
|
TopLine=92
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_2]
|
||||||
|
Open=1
|
||||||
|
Top=0
|
||||||
|
CursorCol=1
|
||||||
|
CursorRow=21
|
||||||
|
TopLine=1
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_3]
|
||||||
|
Open=0
|
||||||
|
Top=0
|
||||||
|
CursorCol=20
|
||||||
|
CursorRow=2
|
||||||
|
TopLine=1
|
||||||
|
LeftChar=1
|
||||||
|
[Editor_4]
|
||||||
|
Open=0
|
||||||
|
Top=0
|
||||||
|
CursorCol=20
|
||||||
|
CursorRow=1
|
||||||
|
TopLine=1
|
||||||
|
LeftChar=1
|
36
src/webserver/conf/webserver-athena.conf
Normal file
36
src/webserver/conf/webserver-athena.conf
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#############################################################
|
||||||
|
# ______ __ __ #
|
||||||
|
# /\ _ \/\ \__/\ \ #
|
||||||
|
# __\ \ \L\ \ \ ,_\ \ \___ __ ___ __ #
|
||||||
|
# /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\ #
|
||||||
|
# /\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_ #
|
||||||
|
# \ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\ #
|
||||||
|
# \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/ #
|
||||||
|
# eAthena Web Server (Second Edition) #
|
||||||
|
# by MC Cameri #
|
||||||
|
# ------------------------------------------------------- #
|
||||||
|
# -Website/Forum- #
|
||||||
|
# http://eathena.deltaanime.net/ #
|
||||||
|
# -Download URL- #
|
||||||
|
# http://eathena.systeminplace.net/ #
|
||||||
|
# -IRC Channel- #
|
||||||
|
# irc://irc.deltaanime.net/#athena #
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
// Display the eAthena Logo at startup?
|
||||||
|
show_title: 1
|
||||||
|
|
||||||
|
//Web Server Port
|
||||||
|
port: 81
|
||||||
|
|
||||||
|
//Web Server Password
|
||||||
|
password: juan16
|
||||||
|
|
||||||
|
//Page Header
|
||||||
|
header: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
|
||||||
|
//Document index
|
||||||
|
document_index: index.xhtml
|
||||||
|
|
||||||
|
//Send favorite icon if provided?
|
||||||
|
favicon: yes
|
9
src/webserver/home/index.xhtml
Normal file
9
src/webserver/home/index.xhtml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Hello!</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
!{CLIENT_FD}
|
||||||
|
</body>
|
||||||
|
</html>
|
144
src/webserver/main.c
Normal file
144
src/webserver/main.c
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
# ______ __ __ #
|
||||||
|
# /\ _ \/\ \__/\ \ #
|
||||||
|
# __\ \ \L\ \ \ ,_\ \ \___ __ ___ __ #
|
||||||
|
# /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\ #
|
||||||
|
# /\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_ #
|
||||||
|
# \ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\ #
|
||||||
|
# \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/ #
|
||||||
|
# eAthena Web Server (Second Edition) #
|
||||||
|
# by MC Cameri #
|
||||||
|
# ------------------------------------------------------- #
|
||||||
|
# -Website/Forum- #
|
||||||
|
# http://eathena.deltaanime.net/ #
|
||||||
|
# -Download URL- #
|
||||||
|
# http://eathena.systeminplace.net/ #
|
||||||
|
# -IRC Channel- #
|
||||||
|
# irc://irc.deltaanime.net/#athena #
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include "../common/showmsg.h"
|
||||||
|
#include "webserver.h"
|
||||||
|
|
||||||
|
char ws_password[17];
|
||||||
|
char ws_header[128];
|
||||||
|
|
||||||
|
#define WEB_CONF "conf/webserver-athena.conf"
|
||||||
|
#define MAX_CONNECTIONS 10
|
||||||
|
#define HOME "home/"
|
||||||
|
|
||||||
|
struct config config;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int server_fd, client_fd;
|
||||||
|
int sin_size;
|
||||||
|
struct sockaddr_in server_addr;
|
||||||
|
struct sockaddr_in client_addr;
|
||||||
|
struct sigaction sa;
|
||||||
|
char recvin[1024];
|
||||||
|
char path[1024];
|
||||||
|
char line[1024];
|
||||||
|
int optval = 1;
|
||||||
|
if (ws_config_read(WEB_CONF)) exit(0);
|
||||||
|
if (config.show_title)
|
||||||
|
ws_display_title();
|
||||||
|
else
|
||||||
|
printf("eAthena Web Server (Second Edition)\n");
|
||||||
|
if (strcmpEx(ws_password,"webpass")==0)
|
||||||
|
ShowWarning("You are using the default password (webpass), we highly "
|
||||||
|
"recommend\n that you change it.\n");
|
||||||
|
else if (strstr(ws_password,"webpass"))
|
||||||
|
ShowWarning("Your password should not contain \"webpass\" in it, it is"
|
||||||
|
" highly\n recommended that you change it.\n");
|
||||||
|
printf("Web Server Password: %s\n",ws_password);
|
||||||
|
printf("Web Server Port: %d\n",config.port);
|
||||||
|
|
||||||
|
if ((server_fd = socket(AF_INET, SOCK_STREAM,0)) == -1) {
|
||||||
|
ShowError("In main() -> Could not open socket.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int)) == -1) {
|
||||||
|
ShowError("In main() -> Could not set socket options.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
server_addr.sin_family = AF_INET;
|
||||||
|
server_addr.sin_port = htons(config.port);
|
||||||
|
server_addr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
memset(&(server_addr.sin_zero), '\0', 8);
|
||||||
|
|
||||||
|
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0) {
|
||||||
|
snprintf(tmp_output,sizeof(tmp_output),"In main() -> Could not bind to port number: %d\n",config.port);
|
||||||
|
ShowError(tmp_output);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(server_fd, MAX_CONNECTIONS) < 0) {
|
||||||
|
snprintf(tmp_output,sizeof(tmp_output),"In main() -> Could not listen on port number: %d\n",config.port);
|
||||||
|
ShowError(tmp_output);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sa.sa_handler = ws_sigchld_handler;
|
||||||
|
sigemptyset(&sa.sa_mask);
|
||||||
|
sa.sa_flags = SA_RESTART;
|
||||||
|
|
||||||
|
if (sigaction(SIGCHLD, &sa, NULL) < 0) {
|
||||||
|
ShowError("In main() -> Invalid sigaction.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
ShowInfo("eAthena Web Server is now listening for incoming connections.\n");
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
sin_size = sizeof(struct sockaddr_in);
|
||||||
|
client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &sin_size);
|
||||||
|
|
||||||
|
if (!fork())
|
||||||
|
{
|
||||||
|
close(server_fd);
|
||||||
|
memset(recvin, 0x0, 500);
|
||||||
|
recv(client_fd, recvin, 500, 0);
|
||||||
|
char *html_output;
|
||||||
|
int count = 0;
|
||||||
|
if (sscanf(recvin,"GET %[a-zA-Z_-.+\%#@~] %*[^\n]",path)==1) {
|
||||||
|
FILE *fp;
|
||||||
|
strcpy(tmp_output,HOME);
|
||||||
|
strcat(tmp_output,path);
|
||||||
|
fp = fopen(tmp_output,"r+");
|
||||||
|
if (fp==NULL) {
|
||||||
|
send(client_fd,"File not found",strlen("File not found"), 0);
|
||||||
|
close(client_fd);
|
||||||
|
}
|
||||||
|
memset(tmp_output,0x0,strlen(tmp_output));
|
||||||
|
html_output = (char*)malloc(sizeof(char)*2);
|
||||||
|
while (fgets(line,1023,fp)) {
|
||||||
|
html_output = (char*)realloc(sizeof(html_output)+(sizeof(char)*count));
|
||||||
|
strcat(html_output,line);
|
||||||
|
printf(line);
|
||||||
|
}
|
||||||
|
send(client_fd,tmp_output,sizeof(tmp_output),0);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
// send(client_fd, ws_header, strlen(ws_header), 0);
|
||||||
|
// generate_page(password, client_fd, get_query(recvin), inet_ntoa(client_addr.sin_addr));
|
||||||
|
// log_visit(get_query(recvin), inet_ntoa(client_addr.sin_addr));
|
||||||
|
close(client_fd);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
close(client_fd);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
136
src/webserver/webserver.c
Normal file
136
src/webserver/webserver.c
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
# ______ __ __ #
|
||||||
|
# /\ _ \/\ \__/\ \ #
|
||||||
|
# __\ \ \L\ \ \ ,_\ \ \___ __ ___ __ #
|
||||||
|
# /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\ #
|
||||||
|
# /\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_ #
|
||||||
|
# \ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\ #
|
||||||
|
# \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/ #
|
||||||
|
# eAthena Web Server (Second Edition) #
|
||||||
|
# by MC Cameri #
|
||||||
|
# ------------------------------------------------------- #
|
||||||
|
# -Website/Forum- #
|
||||||
|
# http://eathena.deltaanime.net/ #
|
||||||
|
# -Download URL- #
|
||||||
|
# http://eathena.systeminplace.net/ #
|
||||||
|
# -IRC Channel- #
|
||||||
|
# irc://irc.deltaanime.net/#athena #
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include "../common/showmsg.h"
|
||||||
|
#include "webserver.h"
|
||||||
|
|
||||||
|
char ws_password[17] = "pass";
|
||||||
|
char ws_header[128] = {'\0'};
|
||||||
|
|
||||||
|
/* Displays the eAthena Logo */
|
||||||
|
void ws_display_title(void)
|
||||||
|
{
|
||||||
|
printf("\033[2J");
|
||||||
|
printf("\033[37;44m (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1;33m (c)2004 eAthena Development Team presents \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m ______ __ __ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m /\\ _ \\/\\ \\__/\\ \\ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m __\\ \\ \\_\\ \\ \\ ,_\\ \\ \\___ __ ___ __ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m /'__`\\ \\ __ \\ \\ \\/\\ \\ _ `\\ /'__`\\/' _ `\\ /'__`\\ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m /\\ __/\\ \\ \\/\\ \\ \\ \\_\\ \\ \\ \\ \\/\\ __//\\ \\/\\ \\/\\ \\_\\.\\_ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m \\ \\____\\\\ \\_\\ \\_\\ \\__\\\\ \\_\\ \\_\\ \\____\\ \\_\\ \\_\\ \\__/.\\_\\ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m \\/____/ \\/_/\\/_/\\/__/ \\/_/\\/_/\\/____/\\/_/\\/_/\\/__/\\/_/ \033[0;44m)\033[K\033[0m\n");
|
||||||
|
printf("\033[0;44m (\033[1m _ _ _ _ _ _ _ _ _ _ _ _ _ \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
|
||||||
|
printf("\033[0;44m (\033[1m / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
|
||||||
|
printf("\033[0;44m (\033[1m ( e | n | g | l | i | s | h ) ( A | t | h | e | n | a ) \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
|
||||||
|
printf("\033[0;44m (\033[1m \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \033[0;44m)\033[K\033[0m\n"); // 1: bold char, 0: normal char
|
||||||
|
printf("\033[0;44m (\033[1m \033[0;44m)\033[K\033[0m\n"); // yellow writing (33)
|
||||||
|
printf("\033[0;44m (\033[1;33m Advanced Fusion Maps (c) 2003-2004 The Fusion Project \033[0;44m)\033[K\033[0m\n"); // yellow writing (33)
|
||||||
|
printf("\033[37;44m (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)\033[K\033[0m\n\n"); // reset color
|
||||||
|
}
|
||||||
|
/* Returns a boolean value given character string */
|
||||||
|
int ws_config_switch(const char *str) {
|
||||||
|
if (strcmpEx(str, "on") == 0 || strcmpEx(str, "yes") == 0 ||
|
||||||
|
strcmpEx(str, "oui") == 0 || strcmpEx(str, "ja") == 0 ||
|
||||||
|
strcmpEx(str, "si") == 0 || strcmpEx(str,"true") == 0)
|
||||||
|
return 1;
|
||||||
|
if (strcmpEx(str, "off") == 0 || strcmpEx(str, "no") == 0 ||
|
||||||
|
strcmpEx(str, "non") == 0 || strcmpEx(str, "nein") == 0 ||
|
||||||
|
strcmpEx(str, "false") == 0)
|
||||||
|
return 0;
|
||||||
|
return atoi(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reads the eAthena Web Server's configuration file */
|
||||||
|
int ws_config_read(const char *cfgName)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char line[1024],w1[1024],w2[1024],temp[1024];
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
/* Default values */
|
||||||
|
config.show_title=0;
|
||||||
|
config.port=80;
|
||||||
|
|
||||||
|
|
||||||
|
fp=fopen(cfgName,"r");
|
||||||
|
if(fp==NULL){
|
||||||
|
snprintf(temp,sizeof(temp),"Could not open \033[1;29m%s\033[0;0m, file not found.\n",cfgName);
|
||||||
|
ShowMessage(temp,MSG_ERROR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
while(fgets(line,1020,fp)){
|
||||||
|
const struct {
|
||||||
|
char str[128];
|
||||||
|
int *val;
|
||||||
|
} data[] ={
|
||||||
|
//List of variables
|
||||||
|
{ "show_title", &config.show_title },
|
||||||
|
{ "port", &config.port },
|
||||||
|
};
|
||||||
|
|
||||||
|
if((line[0] == '/' && line[1] == '/') || (line[0]=='#') ||
|
||||||
|
(sscanf(line,"%1023[^:]:%1023[^\n]",w1,w2) !=2))
|
||||||
|
continue;
|
||||||
|
for(i=0;i<sizeof(data)/(sizeof(data[0]));i++) {
|
||||||
|
if(strcmpEx(w1,data[i].str)==0){
|
||||||
|
*data[i].val=ws_config_switch(w2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(strcmpEx(w1,"import")==0) {
|
||||||
|
ws_config_read(w2);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(strcmpEx(w1,"password")==0) {
|
||||||
|
if (strlen(w2)>16) {
|
||||||
|
ShowError("The Web Server password is too long, maximum passwor"
|
||||||
|
"d length is 16 characters.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
strcpy(ws_password,w2);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(strcmpEx(w1,"header")==0) {
|
||||||
|
if (strlen(w2)>127) {
|
||||||
|
ShowError("The Web Server header is too long, maximum header"
|
||||||
|
"d length is 127 characters.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
strcpy(ws_header,w2);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
//Correct values
|
||||||
|
if(config.show_title < 0)
|
||||||
|
config.show_title = 0;
|
||||||
|
if(config.port < 1 || config.port > 65534)
|
||||||
|
config.port=80;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ws_sigchld_handler(int s)
|
||||||
|
{
|
||||||
|
while(wait(NULL) > 0);
|
||||||
|
}
|
21
src/webserver/webserver.h
Normal file
21
src/webserver/webserver.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef WEBSERV_H_
|
||||||
|
#define WEBSERV_H_
|
||||||
|
|
||||||
|
#define strcmpEx(x,y) (strcasecmp(x,y))
|
||||||
|
|
||||||
|
extern void ws_display_title(void);
|
||||||
|
|
||||||
|
extern int ws_config_read(const char *cfgName);
|
||||||
|
|
||||||
|
extern struct config {
|
||||||
|
int show_title;
|
||||||
|
int port;
|
||||||
|
} config;
|
||||||
|
|
||||||
|
extern char ws_password[17]; //16 chars + \0
|
||||||
|
|
||||||
|
extern char ws_header[128]; //!?
|
||||||
|
|
||||||
|
extern void ws_sigchld_handler(int s);
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user