X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Frequest.c;h=670cc3d467a3d7a9f00d3d0799a0b275b96747ed;hb=2af6772f1d6597cb06b65782051fd0c4f13dfea4;hp=8655377ea658e3f80276fd38073ec2b10978c7a0;hpb=3764c294f21229bdf700f436fa4884f5e76e0d3a;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/request.c b/AcessNative/ld-acess_src/request.c index 8655377e..670cc3d4 100644 --- a/AcessNative/ld-acess_src/request.c +++ b/AcessNative/ld-acess_src/request.c @@ -1,6 +1,6 @@ /* */ -#define DEBUG 0 +#define DEBUG 1 #if DEBUG @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef __WIN32__ # include # include @@ -24,7 +25,7 @@ #include "request.h" #include "../syscalls.h" -#define USE_TCP 0 +#define USE_TCP 1 // === PROTOTYPES === void SendData(void *Data, int Length); @@ -44,9 +45,16 @@ SOCKET gSocket = INVALID_SOCKET; struct sockaddr_in gSyscall_ServerAddr; // === CODE === -int _InitSyscalls() +void Request_Preinit(void) +{ + // Set server address + memset((void *)&gSyscall_ServerAddr, '\0', sizeof(struct sockaddr_in)); + gSyscall_ServerAddr.sin_family = AF_INET; + gSyscall_ServerAddr.sin_port = htons(SERVER_PORT); +} + +int _InitSyscalls(void) { - #ifdef __WIN32__ /* Open windows connection */ if (WSAStartup(0x0101, &gWinsock) != 0) @@ -72,12 +80,6 @@ int _InitSyscalls() exit(0); } - // Set server address - memset((void *)&gSyscall_ServerAddr, '\0', sizeof(struct sockaddr_in)); - gSyscall_ServerAddr.sin_family = AF_INET; - gSyscall_ServerAddr.sin_port = htons(SERVER_PORT); - gSyscall_ServerAddr.sin_addr.s_addr = htonl(0x7F000001); - #if 0 // Set client address memset((void *)&client, '\0', sizeof(struct sockaddr_in)); @@ -89,7 +91,7 @@ int _InitSyscalls() #if USE_TCP if( connect(gSocket, (struct sockaddr *)&gSyscall_ServerAddr, sizeof(struct sockaddr_in)) < 0 ) { - fprintf(stderr, "Cannot connect to server (localhost:%i)\n", SERVER_PORT); + fprintf(stderr, "[ERROR -] Cannot connect to server (localhost:%i)\n", SERVER_PORT); perror("_InitSyscalls"); #if __WIN32__ closesocket(gSocket); @@ -99,7 +101,6 @@ int _InitSyscalls() #endif exit(0); } - giSyscall_ClientID = gSocket; // A bit of a hack really :( #endif #if 0 @@ -117,8 +118,21 @@ int _InitSyscalls() } #endif - #if !USE_TCP + #if USE_TCP + { + tRequestAuthHdr auth; + auth.pid = giSyscall_ClientID; + SendData(&auth, sizeof(auth)); + int len = ReadData(&auth, sizeof(auth), 5); + if( len == 0 ) { + fprintf(stderr, "Timeout waiting for auth response\n"); + exit(-1); + } + giSyscall_ClientID = auth.pid; + } + #else // Ask server for a client ID + if( !giSyscall_ClientID ) { tRequestHeader req; int len; @@ -141,6 +155,20 @@ int _InitSyscalls() return 0; } +/** + * \brief Close the syscall socket + * \note Used in acess_fork to get a different port number + */ +void _CloseSyscalls(void) +{ + #if __WIN32__ + closesocket(gSocket); + WSACleanup(); + #else + close(gSocket); + #endif +} + int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) { if( gSocket == INVALID_SOCKET ) @@ -174,7 +202,7 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) data += sizeof(uint32_t); break; case ARG_TYPE_INT64: - DEBUG_S(" 0x%016llx", *(uint64_t*)data); + DEBUG_S(" 0x%016"PRIx64"", *(uint64_t*)data); data += sizeof(uint64_t); break; case ARG_TYPE_STRING: @@ -193,7 +221,9 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) // Send it off SendData(Request, RequestSize); - + + if( Request->CallID == SYS_EXIT ) return 0; + // Wait for a response (no timeout) return ReadData(Request, ResponseSize, 0); } @@ -203,13 +233,14 @@ void SendData(void *Data, int Length) int len; #if USE_TCP - len = send(Data, Length, 0); + len = send(gSocket, Data, Length, 0); #else len = sendto(gSocket, Data, Length, 0, (struct sockaddr*)&gSyscall_ServerAddr, sizeof(gSyscall_ServerAddr)); #endif if( len != Length ) { + fprintf(stderr, "[ERROR %i] ", giSyscall_ClientID); perror("SendData"); exit(-1); } @@ -236,12 +267,13 @@ int ReadData(void *Dest, int MaxLength, int Timeout) ret = select(gSocket+1, &fds, NULL, NULL, timeoutPtr); if( ret == -1 ) { + fprintf(stderr, "[ERROR %i] ", giSyscall_ClientID); perror("ReadData - select"); exit(-1); } if( !ret ) { - printf("Timeout reading from socket\n"); + printf("[ERROR %i] Timeout reading from socket\n", giSyscall_ClientID); return 0; // Timeout } @@ -252,6 +284,7 @@ int ReadData(void *Dest, int MaxLength, int Timeout) #endif if( ret < 0 ) { + fprintf(stderr, "[ERROR %i] ", giSyscall_ClientID); perror("ReadData"); exit(-1); }