/* highscore_rpc-client.c -- The hiscore client using SunRPC. Created on: 2009/01/06 18:10:11 ~yas/dsys/highscore/rpc/highscore_rpc-client.c */ #include /* stderr, fprintf() */ #include /* memset() */ #include "highscore_rpc.h" int get_highscore_client_rpc( char *server, score_record_t records[], int len ) { CLIENT *clnt; get_highscore_result_t *result; int *arg, n, i; clnt = clnt_create(server,HIGHSCORE_RPC_PROG, HIGHSCORE_RPC_VERSION, "tcp"); if( clnt == NULL ) { clnt_pcreateerror( server ); goto error0; } arg = &len; result = get_highscore_1( arg,clnt ); if( result == NULL ) { clnt_perror( clnt, "call failed:" ); goto error1; } n = result->records.records_len ; if( n > len ) { fprintf(stderr,"received message too large: %d > %d\n", n, len ); goto error1; } for( i=0 ; irecords.records_val[i]; } xdr_free( (xdrproc_t)xdr_get_highscore_result_t, (char *)result ); clnt_destroy( clnt ); return( n ); error1: clnt_destroy( clnt ); error0: return( -1 ); } int put_score_client_rpc( char *server, int score, char *name ) { CLIENT *clnt; score_record_t arg; int *result, ok; clnt = clnt_create( server,HIGHSCORE_RPC_PROG, HIGHSCORE_RPC_VERSION, "tcp"); if( clnt == NULL ) { clnt_pcreateerror( server ); goto error0; } arg.score = score; memset( arg.name, 0, HIGHSCORE_NAME_LEN ); snprintf( arg.name, HIGHSCORE_NAME_LEN, "%s", name ); result = put_score_1( &arg, clnt ); if( result == NULL ) { clnt_perror( clnt, "call failed:" ); goto error1; } ok = *result; xdr_free( (xdrproc_t)xdr_int, (char *)result ); clnt_destroy( clnt ); return( ok ); error1: clnt_destroy( clnt ); error0: return( -1 ); }