Commit ab44ef0b authored by Bhavesh Yadav's avatar Bhavesh Yadav

added rpc boiler plate code

parents
.SUFFIXES:
.SUFFIXES: .c .o
CLNT = llist
SRVR = llist_svc
CFLAGS = -g -Wall
# SRVR_OBJ = llist_svc_proc.o llist_xdr.o llist_svc.o
CLNT_OBJ = llist.o llist_xdr.o llist_clnt.o
.c.o:; gcc -c -o $@ $(CFLAGS) $<
default: $(CLNT)
$(CLNT): $(CLNT_OBJ)
gcc -o $(CLNT) $(CLNT_OBJ)
$(SRVR): $(SRVR_OBJ)
gcc -o $(SRVR) $(SRVR_OBJ)
clean:
rm -f *.o
rm -f llist llist_svc
\ No newline at end of file
#include"llist.h"
list *mk_list(char *data, int key, color c)
{
list *lst;
lst = (list*)malloc(sizeof(list));
if (lst == NULL)
return NULL;
lst->data = data;
lst->key = key;
lst->col = c;
lst->next = NULL;
return lst;
}
int main(int argc, char *argv[])
{
list *l, *new;
CLIENT *cl;
int *result;
new = mk_list("three", 3, ORANGE);
l = new;
new = mk_list("one", 1, ORANGE);
new->next = l;
l = new;
cl = clnt_create(argv[1], PRINTER, PRINTER_V1, "tcp");
if (cl == NULL) {
printf("error: could not connect to server.\n");
return 1;
}
result = print_list_1(l, cl);
if (result == NULL) {
printf("error: RPC failed!\n");
return 1;
}
printf("client: server says it printed %d items.\n", *result);
return 0;
}
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#ifndef _LLIST_H_RPCGEN
#define _LLIST_H_RPCGEN
#include <rpc/rpc.h>
#ifdef __cplusplus
extern "C" {
#endif
enum color {
ORANGE = 0,
PUCE = 1,
TURQUOISE = 2,
};
typedef enum color color;
struct list {
char *data;
int key;
color col;
struct list *next;
};
typedef struct list list;
#define PRINTER 0x2fffffff
#define PRINTER_V1 1
#if defined(__STDC__) || defined(__cplusplus)
#define PRINT_LIST 1
extern int * print_list_1(list *, CLIENT *);
extern int * print_list_1_svc(list *, struct svc_req *);
#define SUM_LIST 2
extern int * sum_list_1(list *, CLIENT *);
extern int * sum_list_1_svc(list *, struct svc_req *);
extern int printer_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */
#define PRINT_LIST 1
extern int * print_list_1();
extern int * print_list_1_svc();
#define SUM_LIST 2
extern int * sum_list_1();
extern int * sum_list_1_svc();
extern int printer_1_freeresult ();
#endif /* K&R C */
/* the xdr functions */
#if defined(__STDC__) || defined(__cplusplus)
extern bool_t xdr_color (XDR *, color*);
extern bool_t xdr_list (XDR *, list*);
#else /* K&R C */
extern bool_t xdr_color ();
extern bool_t xdr_list ();
#endif /* K&R C */
#ifdef __cplusplus
}
#endif
#endif /* !_LLIST_H_RPCGEN */
enum color {ORANGE, PUCE, TURQUOISE};
struct list {
string data<>;
int key;
color col;
list *next;
};
program PRINTER {
version PRINTER_V1 {
int PRINT_LIST(list) = 1;
int SUM_LIST(list) = 2;
} = 1;
} = 0x2fffffff;
\ No newline at end of file
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include <memory.h> /* for memset */
#include "llist.h"
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25, 0 };
int *
print_list_1(list *argp, CLIENT *clnt)
{
static int clnt_res;
memset((char *)&clnt_res, 0, sizeof(clnt_res));
if (clnt_call (clnt, PRINT_LIST,
(xdrproc_t) xdr_list, (caddr_t) argp,
(xdrproc_t) xdr_int, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
return (&clnt_res);
}
int *
sum_list_1(list *argp, CLIENT *clnt)
{
static int clnt_res;
memset((char *)&clnt_res, 0, sizeof(clnt_res));
if (clnt_call (clnt, SUM_LIST,
(xdrproc_t) xdr_list, (caddr_t) argp,
(xdrproc_t) xdr_int, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
return (&clnt_res);
}
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include "llist.h"
bool_t
xdr_color (XDR *xdrs, color *objp)
{
register int32_t *buf;
if (!xdr_enum (xdrs, (enum_t *) objp))
return FALSE;
return TRUE;
}
bool_t
xdr_list (XDR *xdrs, list *objp)
{
register int32_t *buf;
if (!xdr_string (xdrs, &objp->data, ~0))
return FALSE;
if (!xdr_int (xdrs, &objp->key))
return FALSE;
if (!xdr_color (xdrs, &objp->col))
return FALSE;
if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (list), (xdrproc_t) xdr_list))
return FALSE;
return TRUE;
}
.SUFFIXES:
.SUFFIXES: .c .o
CLNT = llist
SRVR = llist_svc
CFLAGS = -g -Wall
SRVR_OBJ = llist_svc_proc.o llist_xdr.o llist_svc.o
# CLNT_OBJ = llist.o llist_xdr.o llist_clnt.o
.c.o:; gcc -c -o $@ $(CFLAGS) $<
default: $(SRVR)
$(CLNT): $(CLNT_OBJ)
gcc -o $(CLNT) $(CLNT_OBJ)
$(SRVR): $(SRVR_OBJ)
gcc -o $(SRVR) $(SRVR_OBJ)
clean:
rm -f *.o
rm -f llist llist_svc
\ No newline at end of file
#include"llist.h"
list *mk_list(char *data, int key, color c)
{
list *lst;
lst = (list*)malloc(sizeof(list));
if (lst == NULL)
return NULL;
lst->data = data;
lst->key = key;
lst->col = c;
lst->next = NULL;
return lst;
}
int main(int argc, char *argv[])
{
list *l, *new;
CLIENT *cl;
int *result;
new = mk_list("three", 3, ORANGE);
l = new;
new = mk_list("one", 1, ORANGE);
new->next = l;
l = new;
cl = clnt_create(argv[1], PRINTER, PRINTER_V1, "tcp");
if (cl == NULL) {
printf("error: could not connect to server.\n");
return 1;
}
result = print_list_1(l, cl);
if (result == NULL) {
printf("error: RPC failed!\n");
return 1;
}
printf("client: server says it printed %d items.\n", *result);
return 0;
}
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#ifndef _LLIST_H_RPCGEN
#define _LLIST_H_RPCGEN
#include <rpc/rpc.h>
#ifdef __cplusplus
extern "C" {
#endif
enum color {
ORANGE = 0,
PUCE = 1,
TURQUOISE = 2,
};
typedef enum color color;
struct list {
char *data;
int key;
color col;
struct list *next;
};
typedef struct list list;
#define PRINTER 0x2fffffff
#define PRINTER_V1 1
#if defined(__STDC__) || defined(__cplusplus)
#define PRINT_LIST 1
extern int * print_list_1(list *, CLIENT *);
extern int * print_list_1_svc(list *, struct svc_req *);
#define SUM_LIST 2
extern int * sum_list_1(list *, CLIENT *);
extern int * sum_list_1_svc(list *, struct svc_req *);
extern int printer_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */
#define PRINT_LIST 1
extern int * print_list_1();
extern int * print_list_1_svc();
#define SUM_LIST 2
extern int * sum_list_1();
extern int * sum_list_1_svc();
extern int printer_1_freeresult ();
#endif /* K&R C */
/* the xdr functions */
#if defined(__STDC__) || defined(__cplusplus)
extern bool_t xdr_color (XDR *, color*);
extern bool_t xdr_list (XDR *, list*);
#else /* K&R C */
extern bool_t xdr_color ();
extern bool_t xdr_list ();
#endif /* K&R C */
#ifdef __cplusplus
}
#endif
#endif /* !_LLIST_H_RPCGEN */
enum color {ORANGE, PUCE, TURQUOISE};
struct list {
string data<>;
int key;
color col;
list *next;
};
program PRINTER {
version PRINTER_V1 {
int PRINT_LIST(list) = 1;
int SUM_LIST(list) = 2;
} = 1;
} = 0x2fffffff;
\ No newline at end of file
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include <memory.h> /* for memset */
#include "llist.h"
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25, 0 };
int *
print_list_1(list *argp, CLIENT *clnt)
{
static int clnt_res;
memset((char *)&clnt_res, 0, sizeof(clnt_res));
if (clnt_call (clnt, PRINT_LIST,
(xdrproc_t) xdr_list, (caddr_t) argp,
(xdrproc_t) xdr_int, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
return (&clnt_res);
}
int *
sum_list_1(list *argp, CLIENT *clnt)
{
static int clnt_res;
memset((char *)&clnt_res, 0, sizeof(clnt_res));
if (clnt_call (clnt, SUM_LIST,
(xdrproc_t) xdr_list, (caddr_t) argp,
(xdrproc_t) xdr_int, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
return (&clnt_res);
}
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include "llist.h"
#include <stdio.h>
#include <stdlib.h>
#include <rpc/pmap_clnt.h>
#include <string.h>
#include <memory.h>
#include <sys/socket.h>
#include <netinet/in.h>
#ifndef SIG_PF
#define SIG_PF void(*)(int)
#endif
static void
printer_1(struct svc_req *rqstp, register SVCXPRT *transp)
{
union {
list print_list_1_arg;
list sum_list_1_arg;
} argument;
char *result;
xdrproc_t _xdr_argument, _xdr_result;
char *(*local)(char *, struct svc_req *);
switch (rqstp->rq_proc) {
case NULLPROC:
(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
return;
case PRINT_LIST:
_xdr_argument = (xdrproc_t) xdr_list;
_xdr_result = (xdrproc_t) xdr_int;
local = (char *(*)(char *, struct svc_req *)) print_list_1_svc;
break;
case SUM_LIST:
_xdr_argument = (xdrproc_t) xdr_list;
_xdr_result = (xdrproc_t) xdr_int;
local = (char *(*)(char *, struct svc_req *)) sum_list_1_svc;
break;
default:
svcerr_noproc (transp);
return;
}
memset ((char *)&argument, 0, sizeof (argument));
if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
svcerr_decode (transp);
return;
}
result = (*local)((char *)&argument, rqstp);
if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {
svcerr_systemerr (transp);
}
if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
fprintf (stderr, "%s", "unable to free arguments");
exit (1);
}
return;
}
int
main (int argc, char **argv)
{
register SVCXPRT *transp;
pmap_unset (PRINTER, PRINTER_V1);
transp = svcudp_create(RPC_ANYSOCK);
if (transp == NULL) {
fprintf (stderr, "%s", "cannot create udp service.");
exit(1);
}
if (!svc_register(transp, PRINTER, PRINTER_V1, printer_1, IPPROTO_UDP)) {
fprintf (stderr, "%s", "unable to register (PRINTER, PRINTER_V1, udp).");
exit(1);
}
transp = svctcp_create(RPC_ANYSOCK, 0, 0);
if (transp == NULL) {
fprintf (stderr, "%s", "cannot create tcp service.");
exit(1);
}
if (!svc_register(transp, PRINTER, PRINTER_V1, printer_1, IPPROTO_TCP)) {
fprintf (stderr, "%s", "unable to register (PRINTER, PRINTER_V1, tcp).");
exit(1);
}
svc_run ();
fprintf (stderr, "%s", "svc_run returned");
exit (1);
/* NOTREACHED */
}
#include"llist.h"
int result;
int *print_list_1_svc(list *lst, struct svc_req *req)
{
list *ptr;
ptr = lst;
result = 0;
while (ptr != NULL) {
printf("{%s, ", ptr->data);
printf("%d, ", ptr->key);
switch (ptr->col) {
case ORANGE: printf("orange"); break;
case PUCE: printf("puce"); break;
case TURQUOISE: printf("turquoise");
}
printf("}\n");
result++;
ptr = ptr->next;
}
return &result;
}
int *sum_list_1_svc(list *lst, struct svc_req *req)
{
list *ptr;
ptr = lst;
result = 0;
while (ptr != NULL) {
result += ptr->key;
ptr = ptr->next;
}
return &result;
}
\ No newline at end of file
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
#include "llist.h"
bool_t
xdr_color (XDR *xdrs, color *objp)
{
register int32_t *buf;
if (!xdr_enum (xdrs, (enum_t *) objp))
return FALSE;
return TRUE;
}
bool_t
xdr_list (XDR *xdrs, list *objp)
{
register int32_t *buf;
if (!xdr_string (xdrs, &objp->data, ~0))
return FALSE;
if (!xdr_int (xdrs, &objp->key))
return FALSE;
if (!xdr_color (xdrs, &objp->col))
return FALSE;
if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (list), (xdrproc_t) xdr_list))
return FALSE;
return TRUE;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment