X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fserver.c;h=45806e2b4f03f52e8ff2cebb45f186cfcd565035;hb=b7a55f71ed629d076996e2373da0b32e9c61925e;hp=1c03d3072698b77a0f76a2d5504c8789b0dae0fa;hpb=57e4db716b3e7db0be336abd9f256962e3b19aa3;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/server.c b/AcessNative/acesskernel_src/server.c index 1c03d307..45806e2b 100644 --- a/AcessNative/acesskernel_src/server.c +++ b/AcessNative/acesskernel_src/server.c @@ -9,16 +9,21 @@ #include #include #ifdef __WIN32__ +# define _WIN32_WINNT 0x0501 # include -# include +# include +# include +# define close(fd) closesocket(fd) +typedef int socklen_t; #else # include # include # include -# include // inet_ntop +# include // getaddrinfo #endif +#define DONT_INCLUDE_SYSCALL_NAMES #include "../syscalls.h" -//#include +#include // acess but std #include #define USE_TCP 1 @@ -42,10 +47,8 @@ typedef struct { extern tRequestHeader *SyscallRecieve(tRequestHeader *Request, int *ReturnLength); extern int Threads_CreateRootProcess(void); extern void Threads_SetThread(int TID); -// HACK: Should have these in a header -extern void Log_Debug(const char *Subsys, const char *Message, ...); -extern void Log_Notice(const char *Subsys, const char *Message, ...); -extern void Log_Warning(const char *Subsys, const char *Message, ...); +extern void *Threads_GetThread(int TID); +extern void Threads_PostEvent(void *Thread, uint32_t Event); // === PROTOTYPES === tClient *Server_GetClient(int ClientID); @@ -133,7 +136,6 @@ int Server_WorkerThread(void *ClientPtr) Log_Debug("Server", "Worker %p", ClientPtr); #if USE_TCP - while( *((volatile typeof(Client->Socket)*)&Client->Socket) == 0 ) ; Threads_SetThread( Client->ClientID ); @@ -150,16 +152,19 @@ int Server_WorkerThread(void *ClientPtr) perror("select"); continue ; } - Log_Debug("Server", "%p: rv=%i", Client, rv); +// Log_Debug("Server", "%p: rv=%i", Client, rv); if( FD_ISSET(Client->Socket, &fds) ) { const int ciMaxParamCount = 6; char lbuf[sizeof(tRequestHeader) + ciMaxParamCount*sizeof(tRequestValue)]; tRequestHeader *hdr = (void*)lbuf; - size_t len = recv(Client->Socket, hdr, sizeof(*hdr), 0); - Log_Debug("Server", "%i bytes of header", len); - if( len == 0 ) break; + size_t len = recv(Client->Socket, (void*)hdr, sizeof(*hdr), 0); +// Log_Debug("Server", "%i bytes of header", len); + if( len == 0 ) { + Log_Notice("Server", "Zero RX on %i (worker %p)", Client->Socket, Client); + break; + } if( len == -1 ) { perror("recv header"); // Log_Warning("Server", "recv() error - %s", strerror(errno)); @@ -181,8 +186,8 @@ int Server_WorkerThread(void *ClientPtr) if( hdr->NParams > 0 ) { - len = recv(Client->Socket, hdr->Params, hdr->NParams*sizeof(tRequestValue), 0); - Log_Debug("Server", "%i bytes of params", len); + len = recv(Client->Socket, (void*)hdr->Params, hdr->NParams*sizeof(tRequestValue), 0); +// Log_Debug("Server", "%i bytes of params", len); if( len != hdr->NParams*sizeof(tRequestValue) ) { // Oops. perror("recv params"); @@ -192,7 +197,7 @@ int Server_WorkerThread(void *ClientPtr) } else { - Log_Debug("Server", "No params?"); +// Log_Debug("Server", "No params?"); } // Get buffer size @@ -218,7 +223,7 @@ int Server_WorkerThread(void *ClientPtr) while( rem ) { len = recv(Client->Socket, ptr, rem, 0); - Log_Debug("Server", "%i bytes of data", len); +// Log_Debug("Server", "%i bytes of data", len); if( len == -1 ) { // Oops? perror("recv data"); @@ -232,8 +237,8 @@ int Server_WorkerThread(void *ClientPtr) break; } } - else - Log_Debug("Server", "no data"); +// else +// Log_Debug("Server", "no data"); int retlen; tRequestHeader *retHeader; @@ -244,7 +249,7 @@ int Server_WorkerThread(void *ClientPtr) continue ; } - send(Client->Socket, retHeader, retlen, 0); + send(Client->Socket, (void*)retHeader, retlen, 0); // Clean up free(hdr); @@ -415,13 +420,14 @@ int Server_ListenThread(void *Unused) } char addrstr[4*8+8+1]; - inet_ntop(clientaddr.sin_family, &clientaddr.sin_addr, addrstr, sizeof(addrstr)); + getnameinfo((struct sockaddr*)&clientaddr, sizeof(clientaddr), + addrstr, sizeof(addrstr), NULL, 0, NI_NUMERICHOST); Log_Debug("Server", "Client connection %s:%i", addrstr, ntohs(clientaddr.sin_port)); // Perform auth size_t len; tRequestAuthHdr authhdr; - len = recv(clientSock, &authhdr, sizeof(authhdr), 0); + len = recv(clientSock, (void*)&authhdr, sizeof(authhdr), 0); if( len != sizeof(authhdr) ) { // Some form of error? Log_Warning("Server", "Client auth block bad size (%i != exp %i)", @@ -461,7 +467,7 @@ int Server_ListenThread(void *Unused) } Log_Debug("Server", "Client given PID %i - info %p", authhdr.pid, client); - len = send(clientSock, &authhdr, sizeof(authhdr), 0); + len = send(clientSock, (void*)&authhdr, sizeof(authhdr), 0); if( len != sizeof(authhdr) ) { // Ok, this is an error perror("Sending auth reply");