all: ./Server ./Module ./Manpage
-./Server:: ./Common
- $(MAKE) -C $@ $(FLAGS)
+./Server/option: ./Server/option.c
+ cc -o $@ ./Server/option.c
+
+./Server:: ./Common ./Server/option
+ $(MAKE) -C $@ $(FLAGS) EXTOBJS=`./Server/option objs ../` EXTLIBS=`./Server/option libs ../`
./Module:: ./Common
$(MAKE) -C $@ $(FLAGS)
$(MAKE) -C $@ $(FLAGS)
format:
- clang-format --verbose -i `find ./Server ./Common ./Module "(" -name "*.c" -or -name "*.h" ")" -and -not -name "strptime.*"`
+ clang-format --verbose -i `find ./Server ./Common ./Module "(" -name "*.c" -or -name "*.h" ")" -and -not -name "strptime.*"` config.h
clean:
$(MAKE) -C ./Server $(FLAGS) clean
$(MAKE) -C ./Module $(FLAGS) clean
$(MAKE) -C ./Common $(FLAGS) clean
$(MAKE) -C ./Manpage $(FLAGS) clean
+ rm -f ./Server/option
CC = i686-w64-mingw32-gcc
AR = i686-w64-mingw32-ar
-CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -I $(PWD)/openssl/include -fPIC
-LDFLAGS = -L $(PWD)/openssl/lib32
+CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -fPIC
+LDFLAGS =
LIBS = -lws2_32
EXEC = .exe
LIB = .dll
CC = x86_64-w64-mingw32-gcc
AR = x86_64-w64-mingw32-ar
-CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -I $(PWD)/openssl/include -fPIC
-LDFLAGS = -L $(PWD)/openssl/lib64
+CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -fPIC
+LDFLAGS =
LIBS = -lws2_32
EXEC = .exe
LIB = .dll
.PHONY: all clean
.SUFFIXES: .c .o
-OBJS = version.o main.o config.o server.o ssl.o http.o module.o strptime.o
+OBJS = version.o main.o config.o server.o http.o module.o strptime.o $(EXTOBJS)
all: tewi$(EXEC)
tewi$(EXEC): $(OBJS) ../Common/common.a
- $(CC) $(LDFLAGS) -o $@ $(OBJS) -lssl -lcrypto $(LIBS) ../Common/common.a
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTLIBS) $(LIBS) ../Common/common.a
.c.o:
$(CC) $(CFLAGS) -c -o $@ $<
#define SOURCE
+#include "../config.h"
+
#include "tw_http.h"
#include "tw_server.h"
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
+#ifndef NO_SSL
if(ssl == NULL || !SSL_has_pending(ssl)) {
+#endif
int n = select(FD_SETSIZE, &fds, NULL, NULL, &tv);
if(n <= 0) {
free(header);
tw_free_request(req);
return -1;
}
+#ifndef NO_SSL
}
+#endif
int len = tw_read(ssl, sock, buffer, 512);
if(len <= 0) break;
int i;
#define SOURCE
+#include "../config.h"
+
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <signal.h>
+#ifndef NO_SSL
#include <openssl/opensslv.h>
+#endif
#include <cm_log.h>
if(strcmp(argv[i], "--verbose") == 0 || strcmp(argv[i], "-v") == 0) {
if(!cm_do_log) {
cm_do_log = true;
+#ifndef NO_SSL
cm_log("", "This is Tewi HTTPd, version %s, using %s", tw_get_version(), OPENSSL_VERSION_TEXT);
+#else
+ cm_log("", "This is Tewi HTTPd, version %s", tw_get_version());
+#endif
} else {
cm_do_log = true;
}
--- /dev/null
+/* $Id$ */
+/* This file is not intended to be in the server. */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "../config.h"
+
+int main(int argc, char** argv) {
+ if(argc < 3) {
+ return 1;
+ }
+ if(strcmp(argv[1], "cflags") == 0) {
+#ifndef NO_SSL
+ printf("-I %s/openssl/include", argv[2]);
+#endif
+ } else if(strcmp(argv[1], "ldflags") == 0) {
+#ifndef NO_SSL
+ printf("-I %s/openssl/lib", argv[2]);
+#endif
+ } else if(strcmp(argv[1], "objs") == 0) {
+#ifndef NO_SSL
+ printf("ssl.o");
+#endif
+ } else if(strcmp(argv[1], "libs") == 0) {
+#ifndef NO_SSL
+ printf("-lssl -lcrypto");
+#endif
+ }
+ printf("\n");
+}
#define SOURCE
+#include "../config.h"
+
#include "tw_server.h"
+#ifndef NO_SSL
#include "tw_ssl.h"
+#endif
+
#include "tw_config.h"
#include "tw_http.h"
#include "tw_module.h"
#include <string.h>
#include <stdbool.h>
#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>
}
size_t tw_read(SSL* ssl, int s, void* data, size_t len) {
+#ifndef NO_SSL
if(ssl == NULL) {
return recv(s, data, len, 0);
} else {
return SSL_read(ssl, data, len);
}
+#else
+ return recv(s, data, len, 0);
+#endif
}
size_t tw_write(SSL* ssl, int s, void* data, size_t len) {
+#ifndef NO_SSL
if(ssl == NULL) {
return send(s, data, len, 0);
} else {
return SSL_write(ssl, data, len);
}
+#else
+ return send(s, data, len, 0);
+#endif
}
#define ERROR_HTML \
#endif
char* name = config.hostname;
+#ifndef NO_SSL
SSL_CTX* ctx = NULL;
SSL* s = NULL;
bool sslworks = false;
if(SSL_accept(s) <= 0) goto cleanup;
sslworks = true;
}
+#else
+ void* s = NULL;
+#endif
struct tw_http_request req;
struct tw_http_response res;
struct tw_tool tools;
tw_http_error(s, sock, 400, name, port);
}
cleanup:
+#ifndef NO_SSL
if(sslworks) {
SSL_shutdown(s);
}
SSL_free(s);
close_socket(sock);
+#endif
#ifdef __MINGW32__
_endthreadex(0);
#endif
+ ;
}
void tw_server_loop(void) {
#include <stdbool.h>
+#include "../config.h"
+
struct tw_http_request {
char* method;
char* path;
};
#ifdef SOURCE
+#ifndef NO_SSL
#include <openssl/ssl.h>
+#endif
void tw_free_request(struct tw_http_request* req);
+#ifndef NO_SSL
int tw_http_parse(SSL* ssl, int sock, struct tw_http_request* req);
+#else
+int tw_http_parse(void* ssl, int sock, struct tw_http_request* req);
+#endif
#endif
#endif
#ifndef __TW_SERVER_H__
#define __TW_SERVER_H__
+#include "../config.h"
+
+#include <stddef.h>
+
+#ifndef NO_SSL
#include <openssl/ssl.h>
+#endif
int tw_server_init(void);
void tw_server_loop(void);
+
+#ifndef NO_SSL
size_t tw_read(SSL* ssl, int s, void* data, size_t len);
size_t tw_write(SSL* ssl, int s, void* data, size_t len);
+#else
+size_t tw_read(void* ssl, int s, void* data, size_t len);
+size_t tw_write(void* ssl, int s, void* data, size_t len);
+#endif
#endif
--- /dev/null
+/* $Id$ */
+
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+
+#undef NO_SSL
+
+/* DO NOT EDIT BELOW THIS LINE */
+
+#ifdef NO_SSL
+#define SSL void
+#endif
+
+#endif