summaryrefslogtreecommitdiffstats
path: root/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu
diff options
context:
space:
mode:
Diffstat (limited to 'Bachelor/Verteilte Systeme/Praktikum2/loesung_neu')
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere45
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook46
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h53
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clientbin0 -> 19118 bytes
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c58
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung58
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c25
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_serverbin0 -> 22476 bytes
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c23
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung23
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c91
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c18
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat4
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h73
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x20
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clientbin0 -> 22007 bytes
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c79
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c40
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_serverbin0 -> 26944 bytes
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c84
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c98
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c45
-rw-r--r--Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme75
23 files changed, 958 insertions, 0 deletions
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere
new file mode 100644
index 0000000..6d59a66
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.addiere
@@ -0,0 +1,45 @@
+
+# This is a template Makefile generated by rpcgen
+
+# Parameters
+
+CLIENT = addiere_client
+SERVER = addiere_server
+
+SOURCES_CLNT.c =
+SOURCES_CLNT.h =
+SOURCES_SVC.c =
+SOURCES_SVC.h =
+SOURCES.x = addiere.x
+
+TARGETS_SVC.c = addiere_svc.c addiere_server.c addiere_xdr.c
+TARGETS_CLNT.c = addiere_clnt.c addiere_client.c addiere_xdr.c
+TARGETS = addiere.h addiere_xdr.c addiere_clnt.c addiere_svc.c addiere_client.c addiere_server.c
+
+OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o)
+OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o)
+# Compiler flags
+
+CFLAGS += -g
+RPCGENFLAGS =
+
+# Targets
+
+all : $(CLIENT) $(SERVER)
+
+$(TARGETS) : $(SOURCES.x)
+ rpcgen $(RPCGENFLAGS) $(SOURCES.x)
+
+$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c)
+
+$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c)
+
+$(CLIENT) : $(OBJECTS_CLNT)
+ $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS)
+
+$(SERVER) : $(OBJECTS_SVC)
+ $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS)
+
+ clean:
+ $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER)
+
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook
new file mode 100644
index 0000000..92ff3a1
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/Makefile.phonebook
@@ -0,0 +1,46 @@
+
+# This is a template Makefile generated by rpcgen
+
+# Parameters
+
+CLIENT = phonebook_client
+SERVER = phonebook_server
+
+SOURCES_CLNT.c =
+SOURCES_CLNT.h =
+SOURCES_SVC.c =
+SOURCES_SVC.h =
+SOURCES.x = phonebook.x
+
+TARGETS_SVC.c = phonebook_svc.c phonebook_server.c phonebook_xdr.c
+TARGETS_CLNT.c = phonebook_clnt.c phonebook_client.c phonebook_xdr.c
+TARGETS = phonebook.h phonebook_xdr.c phonebook_clnt.c phonebook_svc.c phonebook_client.c phonebook_server.c
+
+OBJECTS_CLNT = $(SOURCES_CLNT.c:%.c=%.o) $(TARGETS_CLNT.c:%.c=%.o)
+OBJECTS_SVC = $(SOURCES_SVC.c:%.c=%.o) $(TARGETS_SVC.c:%.c=%.o)
+# Compiler flags
+
+CFLAGS += -g
+LDLIBS += -lnsl
+RPCGENFLAGS =
+
+# Targets
+
+all : $(CLIENT) $(SERVER)
+
+$(TARGETS) : $(SOURCES.x)
+ rpcgen $(RPCGENFLAGS) $(SOURCES.x)
+
+$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c)
+
+$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c)
+
+$(CLIENT) : $(OBJECTS_CLNT)
+ $(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS)
+
+$(SERVER) : $(OBJECTS_SVC)
+ $(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS)
+
+ clean:
+ $(RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER)
+
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h
new file mode 100644
index 0000000..7e77cb2
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere.h
@@ -0,0 +1,53 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _ADDIERE_H_RPCGEN
+#define _ADDIERE_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct add_struct {
+ int p1;
+ int p2;
+};
+typedef struct add_struct add_struct;
+
+#define ADDIERE_TEST 1234567
+#define ONE 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define addiere 1
+extern int * addiere_1(add_struct *, CLIENT *);
+extern int * addiere_1_svc(add_struct *, struct svc_req *);
+extern int addiere_test_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define addiere 1
+extern int * addiere_1();
+extern int * addiere_1_svc();
+extern int addiere_test_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern bool_t xdr_add_struct (XDR *, add_struct*);
+
+#else /* K&R C */
+extern bool_t xdr_add_struct ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_ADDIERE_H_RPCGEN */
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client
new file mode 100644
index 0000000..dced221
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client
Binary files differ
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c
new file mode 100644
index 0000000..e6b9887
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c
@@ -0,0 +1,58 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "addiere.h"
+
+
+void
+addiere_test_1(char *host)
+{
+ CLIENT *clnt;
+ int *result_1;
+ add_struct addiere_1_arg;
+
+#ifndef DEBUG
+ clnt = clnt_create (host, ADDIERE_TEST, ONE, "udp");
+ if (clnt == NULL) {
+ clnt_pcreateerror (host);
+ exit (1);
+ }
+#endif /* DEBUG */
+
+ /* my code START */
+ addiere_1_arg.p1 = 5;
+ addiere_1_arg.p2 = 6;
+ /* my code END */
+
+ result_1 = addiere_1(&addiere_1_arg, clnt);
+ if (result_1 == (int *) NULL) {
+ clnt_perror (clnt, "call failed");
+ }
+ /* my code START */
+ else {
+ printf("addiere(5,6) liefert %d\n", *result_1);
+ }
+ /* my code END */
+
+#ifndef DEBUG
+ clnt_destroy (clnt);
+#endif /* DEBUG */
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ char *host;
+
+ if (argc < 2) {
+ printf ("usage: %s server_host\n", argv[0]);
+ exit (1);
+ }
+ host = argv[1];
+ addiere_test_1 (host);
+exit (0);
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung
new file mode 100644
index 0000000..e6b9887
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_client.c_NACH_Ergaenzung
@@ -0,0 +1,58 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "addiere.h"
+
+
+void
+addiere_test_1(char *host)
+{
+ CLIENT *clnt;
+ int *result_1;
+ add_struct addiere_1_arg;
+
+#ifndef DEBUG
+ clnt = clnt_create (host, ADDIERE_TEST, ONE, "udp");
+ if (clnt == NULL) {
+ clnt_pcreateerror (host);
+ exit (1);
+ }
+#endif /* DEBUG */
+
+ /* my code START */
+ addiere_1_arg.p1 = 5;
+ addiere_1_arg.p2 = 6;
+ /* my code END */
+
+ result_1 = addiere_1(&addiere_1_arg, clnt);
+ if (result_1 == (int *) NULL) {
+ clnt_perror (clnt, "call failed");
+ }
+ /* my code START */
+ else {
+ printf("addiere(5,6) liefert %d\n", *result_1);
+ }
+ /* my code END */
+
+#ifndef DEBUG
+ clnt_destroy (clnt);
+#endif /* DEBUG */
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ char *host;
+
+ if (argc < 2) {
+ printf ("usage: %s server_host\n", argv[0]);
+ exit (1);
+ }
+ host = argv[1];
+ addiere_test_1 (host);
+exit (0);
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c
new file mode 100644
index 0000000..28eceba
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_clnt.c
@@ -0,0 +1,25 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include <memory.h> /* for memset */
+#include "addiere.h"
+
+/* Default timeout can be changed using clnt_control() */
+static struct timeval TIMEOUT = { 25, 0 };
+
+int *
+addiere_1(add_struct *argp, CLIENT *clnt)
+{
+ static int clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof(clnt_res));
+ if (clnt_call (clnt, addiere,
+ (xdrproc_t) xdr_add_struct, (caddr_t) argp,
+ (xdrproc_t) xdr_int, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server
new file mode 100644
index 0000000..a59130e
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server
Binary files differ
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c
new file mode 100644
index 0000000..3f8bb84
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c
@@ -0,0 +1,23 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "addiere.h"
+
+int *
+addiere_1_svc(add_struct *argp, struct svc_req *rqstp)
+{
+ static int result;
+
+ /*
+ * insert server code here
+ */
+
+ /* my Code START */
+ result = argp->p1 + argp->p2;
+ /* my Code END */
+
+ return &result;
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung
new file mode 100644
index 0000000..3f8bb84
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_server.c_NACH_Ergaenzung
@@ -0,0 +1,23 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "addiere.h"
+
+int *
+addiere_1_svc(add_struct *argp, struct svc_req *rqstp)
+{
+ static int result;
+
+ /*
+ * insert server code here
+ */
+
+ /* my Code START */
+ result = argp->p1 + argp->p2;
+ /* my Code END */
+
+ return &result;
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c
new file mode 100644
index 0000000..fb9e617
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_svc.c
@@ -0,0 +1,91 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "addiere.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
+addiere_test_1(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+ union {
+ add_struct addiere_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 addiere:
+ _xdr_argument = (xdrproc_t) xdr_add_struct;
+ _xdr_result = (xdrproc_t) xdr_int;
+ local = (char *(*)(char *, struct svc_req *)) addiere_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 (ADDIERE_TEST, ONE);
+
+ transp = svcudp_create(RPC_ANYSOCK);
+ if (transp == NULL) {
+ fprintf (stderr, "%s", "cannot create udp service.");
+ exit(1);
+ }
+ if (!svc_register(transp, ADDIERE_TEST, ONE, addiere_test_1, IPPROTO_UDP)) {
+ fprintf (stderr, "%s", "unable to register (ADDIERE_TEST, ONE, 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, ADDIERE_TEST, ONE, addiere_test_1, IPPROTO_TCP)) {
+ fprintf (stderr, "%s", "unable to register (ADDIERE_TEST, ONE, tcp).");
+ exit(1);
+ }
+
+ svc_run ();
+ fprintf (stderr, "%s", "svc_run returned");
+ exit (1);
+ /* NOTREACHED */
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c
new file mode 100644
index 0000000..5067fb5
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/addiere_xdr.c
@@ -0,0 +1,18 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "addiere.h"
+
+bool_t
+xdr_add_struct (XDR *xdrs, add_struct *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_int (xdrs, &objp->p1))
+ return FALSE;
+ if (!xdr_int (xdrs, &objp->p2))
+ return FALSE;
+ return TRUE;
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat
new file mode 100644
index 0000000..9fca083
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.dat
@@ -0,0 +1,4 @@
+ff;44
+dd;33
+rr;66
+tt;55
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h
new file mode 100644
index 0000000..9153c8b
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.h
@@ -0,0 +1,73 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _PHONEBOOK_H_RPCGEN
+#define _PHONEBOOK_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct str_name {
+ char name[50];
+};
+typedef struct str_name str_name;
+
+struct str_number {
+ char number[20];
+};
+typedef struct str_number str_number;
+
+struct phonebookEntry {
+ char name[50];
+ char number[20];
+};
+typedef struct phonebookEntry phonebookEntry;
+
+#define Phonebook 1234567
+#define ONE 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define add 1
+extern int * add_1(phonebookEntry *, CLIENT *);
+extern int * add_1_svc(phonebookEntry *, struct svc_req *);
+#define search 2
+extern str_number * search_1(str_name *, CLIENT *);
+extern str_number * search_1_svc(str_name *, struct svc_req *);
+extern int phonebook_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define add 1
+extern int * add_1();
+extern int * add_1_svc();
+#define search 2
+extern str_number * search_1();
+extern str_number * search_1_svc();
+extern int phonebook_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern bool_t xdr_str_name (XDR *, str_name*);
+extern bool_t xdr_str_number (XDR *, str_number*);
+extern bool_t xdr_phonebookEntry (XDR *, phonebookEntry*);
+
+#else /* K&R C */
+extern bool_t xdr_str_name ();
+extern bool_t xdr_str_number ();
+extern bool_t xdr_phonebookEntry ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_PHONEBOOK_H_RPCGEN */
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x
new file mode 100644
index 0000000..76dc799
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook.x
@@ -0,0 +1,20 @@
+struct str_name {
+ char name[50];
+};
+
+struct str_number {
+ char number[20];
+};
+
+struct phonebookEntry {
+ char name[50];
+ char number[20];
+};
+
+
+program Phonebook {
+ version ONE {
+ int add(phonebookEntry pb) = 1;
+ str_number search(str_name toSearch) = 2;
+ } = 1;
+} = 1234567;
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client
new file mode 100644
index 0000000..a4e8efb
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client
Binary files differ
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c
new file mode 100644
index 0000000..d78675c
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_client.c
@@ -0,0 +1,79 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "phonebook.h"
+#include <stdio.h>
+
+void
+phonebook_1(char *host)
+{
+ CLIENT *clnt;
+ int *result_1;
+ int input;
+ phonebookEntry add_1_arg;
+ str_number *result_2;
+ str_name search_1_arg;
+
+#ifndef DEBUG
+ clnt = clnt_create (host, Phonebook, ONE, "udp");
+ if (clnt == NULL) {
+ clnt_pcreateerror (host);
+ exit (1);
+ }
+#endif /* DEBUG */
+ do
+ {
+ printf("1 add entry\n");
+ printf("2 search entry\n");
+ printf("0 exit\n");
+ scanf("%d",&input);
+ switch(input)
+ {
+ case 1: {
+ printf("Add Entry\n");
+ printf("Please enter name: ");
+ scanf("%s",&add_1_arg.name);
+ printf("Please enter number: ");
+ scanf("%s",&add_1_arg.number);
+ result_1 = add_1(&add_1_arg, clnt);
+ if (result_1 == (int *) NULL) {
+ clnt_perror (clnt, "call failed");
+ }
+ break;
+ }
+ case 2: {
+ printf("Search Entry\n");
+ printf("Enter name to search: ");
+ scanf("%s",&search_1_arg.name);
+ result_2 = search_1(&search_1_arg, clnt);
+ printf("Found: %s\n", result_2->number);
+ if (result_2 == (str_number *) NULL) {
+ clnt_perror (clnt, "call failed");
+ }
+ break;
+ }
+ default: break;
+ }
+ } while (input != 0);
+#ifndef DEBUG
+ clnt_destroy (clnt);
+#endif /* DEBUG */
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ char *host;
+
+ if (argc < 2) {
+ printf ("usage: %s server_host\n", argv[0]);
+ exit (1);
+ }
+ host = argv[1];
+ phonebook_1 (host);
+exit (0);
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c
new file mode 100644
index 0000000..e80fc05
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_clnt.c
@@ -0,0 +1,40 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include <memory.h> /* for memset */
+#include "phonebook.h"
+
+/* Default timeout can be changed using clnt_control() */
+static struct timeval TIMEOUT = { 25, 0 };
+
+int *
+add_1(phonebookEntry *argp, CLIENT *clnt)
+{
+ static int clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof(clnt_res));
+ if (clnt_call (clnt, add,
+ (xdrproc_t) xdr_phonebookEntry, (caddr_t) argp,
+ (xdrproc_t) xdr_int, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+str_number *
+search_1(str_name *argp, CLIENT *clnt)
+{
+ static str_number clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof(clnt_res));
+ if (clnt_call (clnt, search,
+ (xdrproc_t) xdr_str_name, (caddr_t) argp,
+ (xdrproc_t) xdr_str_number, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server
new file mode 100644
index 0000000..7835d1d
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server
Binary files differ
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c
new file mode 100644
index 0000000..de673e0
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_server.c
@@ -0,0 +1,84 @@
+/*
+ * This is sample code generated by rpcgen.
+ * These are only templates and you can use them
+ * as a guideline for developing your own functions.
+ */
+
+#include "phonebook.h"
+#include <stdio.h>
+#include <string.h>
+
+//phonebookEntry myphonebook[50];
+//int i=0;
+
+int *
+add_1_svc(phonebookEntry *argp, struct svc_req *rqstp)
+{
+ static int result;
+
+ /*
+ * insert server code here
+ */
+ FILE* fp;
+ fp=fopen("phonebook.dat","a+");
+ /*strcat(myphonebook[i].name,argp->name);
+ strcat(myphonebook[i].name,"\0");
+ strcat(myphonebook[i].number,argp->number);
+ strcat(myphonebook[i].number,"\0");*/
+ fprintf(fp,"%s;%s\n",argp->name,argp->number);
+ printf("%s;%s\n",argp->name,argp->number);
+ //printf("Added: %s %s\n",myphonebook[i].name,myphonebook[i].number);
+ //i++;
+ fclose(fp);
+ return &result;
+}
+
+str_number *
+search_1_svc(str_name *argp, struct svc_req *rqstp)
+{
+ static str_number result;
+ static str_name aktName;
+ static str_number aktNumber;
+ char temp[80];
+ int n=0;
+ /*
+ * insert server code here
+ */
+ strcat(result.number,"-1");
+ printf("search string: %s\n",argp->name);
+ /*for (n=0;n<i;n++)
+ {
+ printf("actual entry: %s\n",myphonebook[n].name);
+ if (strcmp(argp->name,myphonebook[n].name) == 0)
+ {
+ strcpy(result.number,myphonebook[n].number);
+ break;
+ }
+ }*/
+ FILE *fp;
+ fp=fopen("phonebook.dat","r");
+ while(!feof(fp))
+ {
+ strcpy(temp,"\0");
+ strcpy(aktName.name,"\0");
+ strcpy(aktNumber.number,"\0");
+ fscanf(fp,"%s",&temp);
+ printf("Read from file: %s ",temp);
+ strcat(aktName.name,strtok(temp,";"));
+ strcat(aktName.name,"\0");
+ strcat(aktNumber.number,strtok(NULL,";"));
+ strcat(aktNumber.number,"\0");
+ //printf("actual entry: %s\n",myphonebook[n].name);
+ printf("actual entry: %s %s\n",aktName.name,aktNumber.number);
+ if(strcmp(aktName.name,argp->name) == 0)
+ {
+ strcpy(result.number,aktNumber.number);
+ fclose(fp);
+ return &result;
+ }
+ }
+ strcpy(result.number,"-1");
+ fclose(fp);
+
+ return &result;
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c
new file mode 100644
index 0000000..0af71dd
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_svc.c
@@ -0,0 +1,98 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "phonebook.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
+phonebook_1(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+ union {
+ phonebookEntry add_1_arg;
+ str_name search_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 add:
+ _xdr_argument = (xdrproc_t) xdr_phonebookEntry;
+ _xdr_result = (xdrproc_t) xdr_int;
+ local = (char *(*)(char *, struct svc_req *)) add_1_svc;
+ break;
+
+ case search:
+ _xdr_argument = (xdrproc_t) xdr_str_name;
+ _xdr_result = (xdrproc_t) xdr_str_number;
+ local = (char *(*)(char *, struct svc_req *)) search_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 (Phonebook, ONE);
+
+ transp = svcudp_create(RPC_ANYSOCK);
+ if (transp == NULL) {
+ fprintf (stderr, "%s", "cannot create udp service.");
+ exit(1);
+ }
+ if (!svc_register(transp, Phonebook, ONE, phonebook_1, IPPROTO_UDP)) {
+ fprintf (stderr, "%s", "unable to register (Phonebook, ONE, 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, Phonebook, ONE, phonebook_1, IPPROTO_TCP)) {
+ fprintf (stderr, "%s", "unable to register (Phonebook, ONE, tcp).");
+ exit(1);
+ }
+
+ svc_run ();
+ fprintf (stderr, "%s", "svc_run returned");
+ exit (1);
+ /* NOTREACHED */
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c
new file mode 100644
index 0000000..19ce904
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/phonebook_xdr.c
@@ -0,0 +1,45 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "phonebook.h"
+
+bool_t
+xdr_str_name (XDR *xdrs, str_name *objp)
+{
+ register int32_t *buf;
+
+ int i;
+ if (!xdr_vector (xdrs, (char *)objp->name, 50,
+ sizeof (char), (xdrproc_t) xdr_char))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_str_number (XDR *xdrs, str_number *objp)
+{
+ register int32_t *buf;
+
+ int i;
+ if (!xdr_vector (xdrs, (char *)objp->number, 20,
+ sizeof (char), (xdrproc_t) xdr_char))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_phonebookEntry (XDR *xdrs, phonebookEntry *objp)
+{
+ register int32_t *buf;
+
+ int i;
+ if (!xdr_vector (xdrs, (char *)objp->name, 50,
+ sizeof (char), (xdrproc_t) xdr_char))
+ return FALSE;
+ if (!xdr_vector (xdrs, (char *)objp->number, 20,
+ sizeof (char), (xdrproc_t) xdr_char))
+ return FALSE;
+ return TRUE;
+}
diff --git a/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme
new file mode 100644
index 0000000..8331f10
--- /dev/null
+++ b/Bachelor/Verteilte Systeme/Praktikum2/loesung_neu/readme
@@ -0,0 +1,75 @@
+1. Zunaechst werde aus dem IDL Interface addiere.x mit dem PRC Compiler die Rumpsdateien erzeugt.
+ $ ls -al
+ $ ls -al
+ drwxrwxr-x 2 as users 4096 Jan 29 11:47 .
+ drwxrwxr-x 4 as users 4096 Jan 29 11:45 ..
+ -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x
+ $
+ $ ppcgen -a addiere.x
+ $ rpcgen -a addiere.x
+ $ ll
+ insgesamt 48
+ -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c
+ -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c
+ -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h
+ -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c
+ -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c
+ -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x
+ -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c
+ -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere
+ $
+
+2. Nun ist die Aenderung am Client- und am Server-Programm durchzufuehren:
+ $ vi addiere_client.c
+ ...
+ $
+ $ vi addiere_client.c
+ ...
+ $
+ Beispiele sind "addiere_client.c_NACH_Ergaenzung" und "addiere_client.c_VOR_Ergaenzung"
+
+3. Nun ist alles mit dem erzeugten Makefile zu generieren. Jeweils auf Server und Client-Rechner.
+ $ make -f Makefile.addiere
+ $ make -f Makefile.addiere
+ cc -g -c -o addiere_clnt.o addiere_clnt.c
+ cc -g -c -o addiere_client.o addiere_client.c
+ cc -g -c -o addiere_xdr.o addiere_xdr.c
+ cc -g -o addiere_client addiere_clnt.o addiere_client.o addiere_xdr.o -lnsl
+ cc -g -c -o addiere_svc.o addiere_svc.c
+ cc -g -c -o addiere_server.o addiere_server.c
+ cc -g -o addiere_server addiere_svc.o addiere_server.o addiere_xdr.o -lnsl
+ $
+ $ ls -l
+ insgesamt 280
+ -rwxrwxr-x 1 as users 42669 Jan 29 11:55 addiere_client
+ -rw-rw-r-- 1 as users 784 Jan 29 11:50 addiere_client.c
+ -rw-rw-r-- 1 as users 28228 Jan 29 11:55 addiere_client.o
+ -rw-rw-r-- 1 as users 551 Jan 29 11:50 addiere_clnt.c
+ -rw-rw-r-- 1 as users 27728 Jan 29 11:55 addiere_clnt.o
+ -rw-rw-r-- 1 as users 973 Jan 29 11:50 addiere.h
+ -rwxrwxr-x 1 as users 44808 Jan 29 11:55 addiere_server
+ -rw-rw-r-- 1 as users 318 Jan 29 11:50 addiere_server.c
+ -rw-rw-r-- 1 as users 27288 Jan 29 11:55 addiere_server.o
+ -rw-rw-r-- 1 as users 2111 Jan 29 11:50 addiere_svc.c
+ -rw-rw-r-- 1 as users 30480 Jan 29 11:55 addiere_svc.o
+ -rw-rw-r-- 1 as users 164 Jan 29 11:45 addiere.x
+ -rw-rw-r-- 1 as users 294 Jan 29 11:50 addiere_xdr.c
+ -rw-rw-r-- 1 as users 27380 Jan 29 11:55 addiere_xdr.o
+ -rw-rw-r-- 1 as users 1118 Jan 29 11:50 Makefile.addiere
+ $
+
+4. Fertig - nun kann der Server gestartet werden und Clients können Anfragen stellen:
+ Server (linux):
+ $ addiere_server &
+ [2] 2672
+ $ ps
+ PID TTY TIME CMD
+ 27586 pts/5 00:00:00 bash
+ 2672 pts/1 00:00:00 addiere_server
+ 2673 pts/1 00:00:00 ps
+ $
+
+ Client:
+ $ addiere_client linux
+ addiere(5,6) liefert 11
+ $