X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Frequest.c;h=2fa481a7f892032e9d937d91654e8a2d21cd5077;hb=c7acbe49842c871244d76ce9dd7e4e9e70ec3a97;hp=12a26d1ac7c6d29323fc3b18ef241845d641da55;hpb=9698333503f59d07ceb7d0b1bb89bacef05f37e8;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/request.c b/AcessNative/ld-acess_src/request.c index 12a26d1a..2fa481a7 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 @@ -51,6 +51,7 @@ void Request_Preinit(void) 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); } int _InitSyscalls(void) @@ -80,20 +81,13 @@ int _InitSyscalls(void) exit(0); } - #if 0 - // Set client address - memset((void *)&client, '\0', sizeof(struct sockaddr_in)); - client.sin_family = AF_INET; - client.sin_port = htons(0); - client.sin_addr.s_addr = htonl(0x7F000001); - #endif - #if USE_TCP if( connect(gSocket, (struct sockaddr *)&gSyscall_ServerAddr, sizeof(struct sockaddr_in)) < 0 ) { fprintf(stderr, "[ERROR -] Cannot connect to server (localhost:%i)\n", SERVER_PORT); perror("_InitSyscalls"); #if __WIN32__ + fprintf(stderr, "[ERROR -] - WSAGetLastError said %i", WSAGetLastError()); closesocket(gSocket); WSACleanup(); #else @@ -104,6 +98,11 @@ int _InitSyscalls(void) #endif #if 0 + // Set client address + memset((void *)&client, '\0', sizeof(struct sockaddr_in)); + client.sin_family = AF_INET; + client.sin_port = htons(0); + client.sin_addr.s_addr = htonl(0x7F000001); // Bind if( bind(gSocket, (struct sockaddr *)&client, sizeof(struct sockaddr_in)) == -1 ) { @@ -122,6 +121,7 @@ int _InitSyscalls(void) { tRequestAuthHdr auth; auth.pid = giSyscall_ClientID; + auth.key = 0; SendData(&auth, sizeof(auth)); int len = ReadData(&auth, sizeof(auth), 5); if( len == 0 ) { @@ -189,6 +189,7 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) printf("\n"); } #endif + #if DEBUG { int i; char *data = (char*)&Request->Params[Request->NParams]; @@ -218,6 +219,7 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) } DEBUG_S("\n"); } + #endif // Send it off SendData(Request, RequestSize); @@ -225,7 +227,23 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) if( Request->CallID == SYS_EXIT ) return 0; // Wait for a response (no timeout) - return ReadData(Request, ResponseSize, 0); + ReadData(Request, sizeof(*Request), 0); + // TODO: Sanity + size_t recvbytes = sizeof(*Request), expbytes = Request->MessageLength; + char *ptr = (void*)Request->Params; + while( recvbytes < expbytes ) + { + size_t len = ReadData(ptr, expbytes - recvbytes, 1000); + if( len == -1 ) { + return -1; + } + recvbytes += len; + ptr += len; + } + if( recvbytes > expbytes ) { + // TODO: Warning + } + return recvbytes; } void SendData(void *Data, int Length) @@ -274,7 +292,7 @@ int ReadData(void *Dest, int MaxLength, int Timeout) if( !ret ) { printf("[ERROR %i] Timeout reading from socket\n", giSyscall_ClientID); - return 0; // Timeout + return -2; // Timeout } #if USE_TCP @@ -288,6 +306,15 @@ int ReadData(void *Dest, int MaxLength, int Timeout) perror("ReadData"); exit(-1); } + if( ret == 0 ) { + fprintf(stderr, "[ERROR %i] Connection closed.\n", giSyscall_ClientID); + #if __WIN32__ + closesocket(gSocket); + #else + close(gSocket); + #endif + exit(0); + } DEBUG_S("%i bytes read from socket\n", ret);