X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Frequest.c;h=690c7f7ff35221542b3a1b8e5c4064d8adc9b6ce;hb=feb0895318d823867b858ec841589ca3ab81f510;hp=2fa481a7f892032e9d937d91654e8a2d21cd5077;hpb=9d101ee5f5231954a7102da36997aa8d568a6157;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/request.c b/AcessNative/ld-acess_src/request.c index 2fa481a7..690c7f7f 100644 --- a/AcessNative/ld-acess_src/request.c +++ b/AcessNative/ld-acess_src/request.c @@ -1,7 +1,11 @@ /* + * AcessNative ld-acess dynamic linker + * - By John Hodge (thePowersGang) + * + * request.c + * - IPC interface */ -#define DEBUG 1 - +#define DEBUG 0 #if DEBUG # define DEBUG_S printf @@ -21,6 +25,7 @@ # include # include # include +# include #endif #include "request.h" #include "../syscalls.h" @@ -224,12 +229,12 @@ 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) ReadData(Request, sizeof(*Request), 0); + + size_t recvbytes = sizeof(*Request); // TODO: Sanity - size_t recvbytes = sizeof(*Request), expbytes = Request->MessageLength; + size_t expbytes = Request->MessageLength; char *ptr = (void*)Request->Params; while( recvbytes < expbytes ) { @@ -243,6 +248,38 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) if( recvbytes > expbytes ) { // TODO: Warning } + + #if DEBUG + { + int i; + char *data = (char*)&Request->Params[Request->NParams]; + DEBUG_S(" Reply:"); + for( i = 0; i < Request->NParams; i ++ ) + { + switch(Request->Params[i].Type) + { + case ARG_TYPE_INT32: + DEBUG_S(" 0x%08x", *(uint32_t*)data); + data += sizeof(uint32_t); + break; + case ARG_TYPE_INT64: + DEBUG_S(" 0x%016"PRIx64"", *(uint64_t*)data); + data += sizeof(uint64_t); + break; + case ARG_TYPE_STRING: + DEBUG_S(" '%s'", (char*)data); + data += Request->Params[i].Length; + break; + case ARG_TYPE_DATA: + DEBUG_S(" %p:0x%x", (char*)data, Request->Params[i].Length); + if( !(Request->Params[i].Flags & ARG_FLAG_ZEROED) ) + data += Request->Params[i].Length; + break; + } + } + DEBUG_S("\n"); + } + #endif return recvbytes; }