X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Frequest.c;h=5bcf8cd302c65b9e9e73fcc9f5c3ef3aed350540;hb=a01b96ccf4ec884e5b894d08a819a37ea3f5f749;hp=63419d563db4db33beb9d6e71b95870591893793;hpb=1cbe6bb7cb39e4aff37c541fa45f56432dbe9d53;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/request.c b/AcessNative/ld-acess_src/request.c index 63419d56..5bcf8cd3 100644 --- a/AcessNative/ld-acess_src/request.c +++ b/AcessNative/ld-acess_src/request.c @@ -190,6 +190,7 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) printf("\n"); } #endif + #if DEBUG { int i; char *data = (char*)&Request->Params[Request->NParams]; @@ -219,6 +220,7 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize) } DEBUG_S("\n"); } + #endif // Send it off SendData(Request, RequestSize); @@ -226,7 +228,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) @@ -291,6 +309,7 @@ int ReadData(void *Dest, int MaxLength, int Timeout) } if( ret == 0 ) { fprintf(stderr, "[ERROR %i] Connection closed.\n", giSyscall_ClientID); + close(gSocket); exit(0); }