test:server:create userspace peer for receiving file
authorroot (spook.local) <root@spook.local>
Sun, 27 May 2012 17:10:44 +0000 (20:10 +0300)
committerroot (spook.local) <root@spook.local>
Sun, 27 May 2012 17:10:44 +0000 (20:10 +0300)
test/server/Makefile [new file with mode: 0644]
test/server/p2pkp.h [new file with mode: 0644]
test/server/server.c [new file with mode: 0644]

diff --git a/test/server/Makefile b/test/server/Makefile
new file mode 100644 (file)
index 0000000..b52084b
--- /dev/null
@@ -0,0 +1,7 @@
+FILE=server
+
+$(FILE):$(FILE).o
+
+.PHONY: clean
+clean:
+       -rm -rf $(FILE) $(FILE).o
diff --git a/test/server/p2pkp.h b/test/server/p2pkp.h
new file mode 100644 (file)
index 0000000..f18d258
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef _P2PKP_H_
+#define _P2PKP_H_
+
+#define AF_P2PKP               19
+#define PF_P2PKP               AF_P2PKP
+
+#endif /* _P2PKP_H_ */
diff --git a/test/server/server.c b/test/server/server.c
new file mode 100644 (file)
index 0000000..9c1e228
--- /dev/null
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <errno.h>
+#include <netdb.h>
+
+#include "p2pkp.h"
+
+int main(int argc, char **argv)
+{
+       int sock, err;
+       struct sockaddr_in psin;
+       struct hostent *host;
+
+       if (argc != 4) {
+               fprintf(stderr, "Usage: %s <peer_ip> <peer_port> <file_name>\n", argv[0]);
+               return -1;
+       }
+
+       printf("Opening AF_P2PKP socket\n");
+
+       sock = socket(AF_P2PKP, SOCK_DGRAM, 0);
+       printf("Socket returned: %d\n", sock);
+
+       if (sock < 0) {
+               printf("Cannot create AF_P2PKP socket: %s(%d)\n",
+                               strerror(errno), errno);
+               return -1;
+       }
+       printf("Successfully created AF_P2PKP socket: %d\n", sock);
+
+       argv++;
+
+       host = gethostbyname(argv[0]);
+       psin.sin_family = AF_INET;
+       psin.sin_port = htons(atoi(argv[1]));
+       psin.sin_addr = *((struct in_addr *)host->h_addr);
+
+       if (bind(sock, (struct sockaddr *)&psin,
+                               sizeof(struct sockaddr_in)) == -1) {
+               printf("Cannot bind to server: %s(%d)\n", strerror(errno), errno);
+               return -1;
+       }
+       argv += 2;
+
+       printf("Bound to: %s:%s\n", argv[0], argv[1]);
+       
+       err = read(sock, argv[0], sizeof(argv[0]));
+       if (err < 0) {
+               printf("Error while receiving file %s: %s(%d)\n", argv[0],
+                               strerror(errno), errno);
+               return err;
+       }
+
+       printf("Successfully read file %s\n", argv[0]);
+
+       return 0;
+}