--- Server/server.c 2024/10/20 20:23:51 1.4 +++ Server/server.c 2024/11/03 13:51:52 1.12 @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.4 2024/10/20 20:23:51 nishi Exp $ */ +/* $Id: server.c,v 1.12 2024/11/03 13:51:52 nishi Exp $ */ #define SOURCE @@ -15,6 +15,10 @@ #include "tw_module.h" #include "tw_version.h" +#ifdef __amiga__ +#include +#endif + #if !defined(_MSC_VER) && !defined(__BORLANDC__) #include #endif @@ -107,7 +111,7 @@ uint16_t htons(uint16_t n) { return ((n #endif #endif -#if defined(_PSP) || defined(__ps2sdk__) || defined(__bsdi__) +#if defined(_PSP) || defined(__ps2sdk__) || defined(__bsdi__) || defined(__amiga__) #include "strptime.h" #endif @@ -343,15 +347,16 @@ void _tw_process_page(SSL* ssl, int sock incr = 0; while(1) { if(f != NULL) { - char buffer[128]; - fread(buffer, size < 128 ? size : 128, 1, f); - tw_write(ssl, sock, buffer, size < 128 ? size : 128); + char buffer[512]; + int st; + fread(buffer, size < 512 ? size : 512, 1, f); + if((st = tw_write(ssl, sock, buffer, size < 512 ? size : 512)) <= 0) break; } else { - tw_write(ssl, sock, (unsigned char*)doc + incr, size < 128 ? size : 128); + if(tw_write(ssl, sock, (unsigned char*)doc + incr, size < 512 ? size : 512) <= 0) break; } - incr += 128; - if(size <= 128) break; - size -= 128; + incr += 512; + if(size <= 512) break; + size -= 512; } } @@ -514,12 +519,14 @@ struct pass_entry { #if defined(__MINGW32__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) #define NO_RETURN_THREAD void tw_server_pass(void* ptr) { +#elif defined(__amiga__) +void* tw_server_pass(void* ptr) { #elif defined(__HAIKU__) int32_t tw_server_pass(void* ptr) { #elif defined(_PSP) || defined(__PPU__) int tw_server_pass(void* ptr) { #endif -#if defined(__HAIKU__) || defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) +#if defined(__HAIKU__) || defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__amiga__) #define FREE_PTR int sock = ((struct pass_entry*)ptr)->sock; bool ssl = ((struct pass_entry*)ptr)->ssl; @@ -620,7 +627,7 @@ int tw_server_pass(void* ptr) { time_t t; struct tm* btm; strptime(req.headers[i + 1], "%a, %d %b %Y %H:%M:%S GMT", &tm); -#if defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(__ps2sdk__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__USLC__) || defined(__NeXT__) || defined(__bsdi__) +#if defined(__MINGW32__) || defined(_PSP) || defined(__PPU__) || defined(__ps2sdk__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__USLC__) || defined(__NeXT__) || defined(__bsdi__) || defined(__amiga__) || defined(__sun__) t = 0; btm = localtime(&t); cmtime = mktime(&tm); @@ -640,6 +647,8 @@ int tw_server_pass(void* ptr) { host[i] = 0; port = atoi(host + i + 1); break; + }else if(vhost[i] == '['){ + for(; vhost[i] != 0 && vhost[i] != ']'; i++); } } name = host; @@ -1020,7 +1029,7 @@ void tw_server_loop(void) { struct timeval tv; #endif #if defined(__MINGW32__) || defined(__HAIKU__) || defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && !defined(__NETWARE__) && !defined(__DOS__)) - struct thread_entry threads[2048]; + struct thread_entry threads[128]; for(i = 0; i < sizeof(threads) / sizeof(threads[0]); i++) { threads[i].used = false; } @@ -1052,7 +1061,7 @@ void tw_server_loop(void) { if(ret == -1) { #if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(__BORLANDC__) && !defined(__WATCOMC__) if(errno == EINTR) continue; - cm_log("Server", "Select failure: %s", strerror(errno)); + cm_log("Server", "Select/poll failure: %s", strerror(errno)); #endif break; } else if(ret == 0) { @@ -1075,7 +1084,10 @@ void tw_server_loop(void) { SOCKADDR claddr; socklen_t clen = sizeof(claddr); int sock = accept(sockets[i], (struct sockaddr*)&claddr, &clen); -#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) +#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_PSP) || defined(__PPU__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__amiga__) +#ifdef __amiga__ + pthread_t thrt; +#endif int j; struct pass_entry* e = malloc(sizeof(*e)); cm_log("Server", "New connection accepted"); @@ -1100,6 +1112,8 @@ void tw_server_loop(void) { #endif #elif defined(_PSP) || defined(__PPU__) tw_server_pass(e); +#elif defined(__amiga__) + pthread_create(&thrt, NULL, tw_server_pass, e); #elif defined(__HAIKU__) for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { if(threads[j].used) {