X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Frequest.c;fp=AcessNative%2Fld-acess_src%2Frequest.c;h=df6e5c5596c1a0d1d99ca3d0533676cc686e36fa;hb=02cbaac1233be9c5228973a787431fa5e0aa178e;hp=f9526b3a18e126c139a62370993f70b67ffb97a4;hpb=a09032f44bba55ce1e60dfab92a39cf6c909220b;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/request.c b/AcessNative/ld-acess_src/request.c index f9526b3a..df6e5c55 100644 --- a/AcessNative/ld-acess_src/request.c +++ b/AcessNative/ld-acess_src/request.c @@ -43,8 +43,10 @@ int _InitSyscalls() } #endif + // Open TCP Connection + gSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Open UDP Connection - gSocket = socket(AF_INET, SOCK_DGRAM, 0); + //gSocket = socket(AF_INET, SOCK_DGRAM, 0); if (gSocket == INVALID_SOCKET) { fprintf(stderr, "Could not create socket.\n"); @@ -66,6 +68,20 @@ int _InitSyscalls() client.sin_port = htons(0); client.sin_addr.s_addr = htonl(0x7F00001); + if( connect(gSocket, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0 ) + { + fprintf(stderr, "Cannot connect to server (localhost:%i)\n", SERVER_PORT); + perror("_InitSyscalls"); + #if __WIN32__ + closesocket(gSocket); + WSACleanup(); + #else + close(gSocket); + #endif + exit(0); + } + + #if 0 // Bind if( bind(gSocket, (struct sockaddr *)&client, sizeof(struct sockaddr_in)) == -1 ) { @@ -78,6 +94,8 @@ int _InitSyscalls() #endif exit(0); } + #endif + return 0; } @@ -89,6 +107,11 @@ int SendRequest(int RequestID, int NumOutput, tOutValue **Output, int NumInput, int requestLen; int i; + if( gSocket == INVALID_SOCKET ) + { + _InitSyscalls(); + } + // See ../syscalls.h for details of request format requestLen = sizeof(tRequestHeader) + (NumOutput + NumInput) * sizeof(tRequestValue); @@ -115,13 +138,17 @@ int SendRequest(int RequestID, int NumOutput, tOutValue **Output, int NumInput, case 'i': value->Type = ARG_TYPE_INT32; break; case 'I': value->Type = ARG_TYPE_INT64; break; case 'd': value->Type = ARG_TYPE_DATA; break; + case 's': value->Type = ARG_TYPE_DATA; break; default: + fprintf(stderr, __FILE__" SendRequest: Unknown output type '%c'\n", + Output[i]->Type); return -1; } value->Length = Output[i]->Length; memcpy(data, Output[i]->Data, Output[i]->Length); + value ++; data += Output[i]->Length; } @@ -134,18 +161,53 @@ int SendRequest(int RequestID, int NumOutput, tOutValue **Output, int NumInput, case 'I': value->Type = ARG_TYPE_INT64; break; case 'd': value->Type = ARG_TYPE_DATA; break; default: + fprintf(stderr, " SendRequest: Unknown input type '%c'\n", + Input[i]->Type); return -1; } value->Length = Input[i]->Length; + value ++; + } + #if 0 + printf("value = %p\n", value); + { + for(i=0;iNParams != NumInput ) { + fprintf(stderr, "SendRequest: Unexpected number of values retured (%i, exp %i)\n", + request->NParams, NumInput + ); + free( request ); + return -1; + } + + // Free memory + free( request ); return 0; }