OH! Here's the code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h> /* for memset */
#include "rap.h"
#include <rpc/rpc.h>
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25, 0 };
RAPVAR_READ_NAME_RESP_TYPE *rapvar_read_name_1(RAPVAR_READ_NAME_REQ_TYPE *argp, CLIENT *clnt)
{
RAPVAR_READ_NAME_REQ_TYPE *inproc = NULL;
RAPVAR_READ_NAME_RESP_TYPE *outproc = NULL;
RAPVAR_READ_NAME_RESP_TYPE clnt_res;
memset((char *)&clnt_res, 0, sizeof(clnt_res));
if (clnt_call (clnt, 1001, (xdrproc_t) inproc, (caddr_t) argp, /*---CRASH--- */
(xdrproc_t) outproc, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS)
{
return (NULL);
printf("clnt_call FAILED!\n");
}
printf("Hello world!\n");
return (&clnt_res);
}
int main()
{
int pstat=0;
RAPVAR_READ_NAME_RESP_TYPE *result = NULL;
RAPVAR_READ_NAME_REQ_TYPE request;
CLIENT *clnt = NULL;
clnt = clnt_create("s4c",300456,1,"tcp");
if(clnt==NULL) printf("Client is\tNULL\n");
if(clnt!=NULL) printf("Client is\tCREATED\n");
CLIENT *clnt2 = NULL;
clnt2 = clnt_create("192.168.1.2",300456,1,"tcp");
if(clnt2==NULL) printf("Client2 is\tNULL\n");
if(clnt2!=NULL) printf("Client is\tCREATED\n");
#define ADDRBUFSIZE 255
CLIENT *clnt3;
int sock = RPC_ANYSOCK;
unsigned int sendsz=0, recvsz=0;
struct sockaddr_in addr;
char addrbuf[ADDRBUFSIZE];
struct netbuf {
unsigned int maxlen;
unsigned int len;
void *buf;
};
struct netbuf svcaddr;
struct netconfig *nconf;
char host[255] ; /* The remote host name */
svcaddr.len = 0;
svcaddr.maxlen = ADDRBUFSIZE;
svcaddr.buf = addrbuf;
/* Get pointer to struct netconfig for tcp transport */
nconf = getnetconfigent("tcp");
if (nconf == (struct netconfig *) NULL) {
printf("getnetconfigent() failed\n");
exit(1);
}
/* Get the address of remote service */
if (!rpcb_getaddr(300456, 1, nconf, &svcaddr, host)) {
printf("rpcb_getaddr() failed\n");
exit(1);
}
memcpy(&addr, svcaddr.buf, sizeof(struct sockaddr_in));
clnt3 = (CLIENT *) clnttcp_create(&addr, 300456, 1, &sock, sendsz, recvsz);
/* Destroy the client handle in the end */
clnt_destroy(clnt3);
char string [256];
printf ("Hit [Enter] to exit (irony):");
gets (string);
request.head.userdef=1;
request.var.name="name";
request.var.type="robposdata";
request.var.domain=1;
request.var.number1=0;
request.var.number2=26; /*ROBTARGET_TRANSFER_TYPE */
result = rapvar_read_name_1(&request, clnt); /*Call the RPC function */
if (result == (RAPVAR_READ_NAME_RESP_TYPE *) NULL)
{
printf("'result' is NULL\n");
pstat = -1;
return(0);
}
return 0;
}