From d92e36f553e1c0470262e69960f85c37b52889ce Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 03:23:42 +0100 Subject: [PATCH 01/76] repo init --- README | 1 + 1 file changed, 1 insertion(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..c0ed8b9 --- /dev/null +++ b/README @@ -0,0 +1 @@ +empty hi hi From 62034d05e4af4193a9de8def9f54ca40668e9de3 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 03:27:32 +0100 Subject: [PATCH 02/76] gitignoro --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e660fd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/ From 1af0cfe474678b8cf72057bd93ff80c42476d26e Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 03:37:31 +0100 Subject: [PATCH 03/76] read this --- README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README b/README index c0ed8b9..618fa89 100644 --- a/README +++ b/README @@ -1 +1,4 @@ empty hi hi + +must read: http://www.beej.us/guide/bgnet/ + From 241f169000921fe51610c65c84c9a612baa6e7c1 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 11:31:14 +0100 Subject: [PATCH 04/76] some udp test code --- .gitignore | 3 ++ Makefile | 15 +++++++++ net.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ test.c | 67 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 Makefile create mode 100644 net.c create mode 100644 test.c diff --git a/.gitignore b/.gitignore index e660fd9..752c478 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ bin/ +out/ +net +test diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..95a70e1 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ + + +all: bin/net bin/test + + +bin/net: net.c + mkdir -pv bin + gcc -o bin/net net.c + +bin/test: test.c + mkdir -pv bin + gcc -o bin/test test.c + +clean: + rm -rf bin diff --git a/net.c b/net.c new file mode 100644 index 0000000..d1d7aed --- /dev/null +++ b/net.c @@ -0,0 +1,93 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT "4711" + +void *get_in_addr(struct sockaddr *sa) +{ + if (sa->sa_family == AF_INET) { + return &(((struct sockaddr_in*)sa)->sin_addr); + } + + return &(((struct sockaddr_in6*)sa)->sin6_addr); +} + +int main (int argc, char **argv) { + + struct addrinfo hints, *servinfo; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; // IPv4 + hints.ai_socktype = SOCK_DGRAM; // UDP + hints.ai_flags = AI_PASSIVE; + + int rv; + if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + return 1; + } + + printf("got local address\n"); + + struct addrinfo *info; + int sockfd; + char s[INET6_ADDRSTRLEN]; + for (info = servinfo; info != NULL; info = info->ai_next) { +/* if (info->ai_addr) { + struct sockaddr_in* p = (struct sockaddr_in *)info->ai_addr; + inet_ntop(p->sin_family, &p->sin_addr, s, INET6_ADDRSTRLEN); + printf(" %d: %s\n", info->ai_addr->sa_family, s); + } +*/ + + if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { + perror("sock"); + continue; + } + + if (bind(sockfd, info->ai_addr, info->ai_addrlen) == -1) { + perror("bind"); + continue; + } + + break; + } + if (!info) { + fprintf(stderr, "unbound\n"); + return 2; + } + printf("check!\n"); + + freeaddrinfo(servinfo); // free whole list + + struct sockaddr_storage their_addr; + socklen_t addr_len = sizeof their_addr; + int numbytes; + char buf[10000]; + do { + if ((numbytes = recvfrom(sockfd, buf, 9999 , 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { + perror("recvfrom"); + exit(1); + } + + printf("listener: got packet from %s\n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); + printf("listener: packet is %d bytes long\n", numbytes); + buf[numbytes] = '\0'; + printf("listener: packet contains \"%s\"\n", buf); + } while (strncmp(buf, "exit", 10000)); + + + close(sockfd); + + return 0; +} + diff --git a/test.c b/test.c new file mode 100644 index 0000000..4dcb391 --- /dev/null +++ b/test.c @@ -0,0 +1,67 @@ +/* +** talker.c -- a datagram "client" demo +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SERVERPORT "4711" // the port users will be connecting to + +int main(int argc, char *argv[]) +{ + int sockfd; + struct addrinfo hints, *servinfo, *p; + int rv; + int numbytes; + + if (argc != 3) { + fprintf(stderr,"usage: talker hostname message\n"); + exit(1); + } + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + + if ((rv = getaddrinfo(argv[1], SERVERPORT, &hints, &servinfo)) != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + return 1; + } + + // loop through all the results and make a socket + for(p = servinfo; p != NULL; p = p->ai_next) { + if ((sockfd = socket(p->ai_family, p->ai_socktype, + p->ai_protocol)) == -1) { + perror("talker: socket"); + continue; + } + + break; + } + + if (p == NULL) { + fprintf(stderr, "talker: failed to bind socket\n"); + return 2; + } + + if ((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, + p->ai_addr, p->ai_addrlen)) == -1) { + perror("talker: sendto"); + exit(1); + } + + freeaddrinfo(servinfo); + + printf("talker: sent %d bytes to %s\n", numbytes, argv[1]); + close(sockfd); + + return 0; +} From 9613da034c62901b3a2776b2fb210345e1491111 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 12:18:40 +0100 Subject: [PATCH 05/76] command line parsing sample in main.c --- Makefile | 6 ++++- main.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 main.c diff --git a/Makefile b/Makefile index 95a70e1..e49e931 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -all: bin/net bin/test +all: bin/net bin/test bin/main bin/net: net.c @@ -11,5 +11,9 @@ bin/test: test.c mkdir -pv bin gcc -o bin/test test.c +bin/main: main.c + mkdir -pv bin + gcc -o bin/main main.c + clean: rm -rf bin diff --git a/main.c b/main.c new file mode 100644 index 0000000..47e9f59 --- /dev/null +++ b/main.c @@ -0,0 +1,79 @@ +#include +#include +#include + +#define MODE_SERVER 0 +#define MODE_CLIENT 1 + +struct prog_info { + int mode; + int client_num; + int port; +} prog_info; + +int parseArgs(struct prog_info *pinfo, int argc, char **argv) { + pinfo->mode = MODE_SERVER; + pinfo->client_num = 1; + pinfo->port = 4711; + + if (argc <= 1) { + printf("usage: %s [-s|-c ] [-p ]\n", argv[0]); + return -1; + } + int i; + for (i=1; imode = MODE_SERVER; + continue; + } + if (strncmp(argv[i], "-c", 2) == 0) { + pinfo->mode = MODE_CLIENT; + if (argc <= i+1) { + printf("client number not specified\n"); + return -2; + } + pinfo->client_num = (int)strtol(argv[++i], NULL, 10); + if (pinfo->client_num <= 0) { + printf("invalid client number!\n"); + return -3; + } + continue; + } + if (strncmp(argv[i], "-p", 2) == 0) { + if (argc <= i+1) { + printf("port not specified\n"); + return -4; + } + pinfo->port = (int)strtol(argv[++i], NULL, 10); + if (pinfo->port <= 0 || 65536 <= pinfo->port) { + printf("invalid port number!\n"); + return -5; + } + continue; + } + printf("unknown argument %s\n", argv[i]); + return -6; + } + + return 0; +} + +int main(int argc, char **argv) { + + int ret; + if ((ret = parseArgs(&prog_info, argc, argv)) == 0) { + + printf("port: %d\n", prog_info.port); + if (prog_info.mode == MODE_SERVER) { + printf("runnin in SERVER mode\n"); + // ... + } else { + printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); + // ... + } + + return 0; + } + return ret; +} + From d6101662f984bb83f41d225aa338fdb6b380905a Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 12:47:17 +0100 Subject: [PATCH 06/76] some bla --- Makefile | 10 +++++----- main.c | 12 +++++------- misc.h | 10 ++++++++++ net.c | 15 ++++++++++++--- 4 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 misc.h diff --git a/Makefile b/Makefile index e49e931..17d9fa7 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,17 @@ -all: bin/net bin/test bin/main +all: bin/test bin/main -bin/net: net.c - mkdir -pv bin - gcc -o bin/net net.c +#bin/net: net.c +# mkdir -pv bin +# gcc -o bin/net net.c bin/test: test.c mkdir -pv bin gcc -o bin/test test.c -bin/main: main.c +bin/main: main.c net.c mkdir -pv bin gcc -o bin/main main.c diff --git a/main.c b/main.c index 47e9f59..c41af36 100644 --- a/main.c +++ b/main.c @@ -2,14 +2,13 @@ #include #include +#include "misc.h" +#include "net.c" + + #define MODE_SERVER 0 #define MODE_CLIENT 1 -struct prog_info { - int mode; - int client_num; - int port; -} prog_info; int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->mode = MODE_SERVER; @@ -66,13 +65,12 @@ int main(int argc, char **argv) { printf("port: %d\n", prog_info.port); if (prog_info.mode == MODE_SERVER) { printf("runnin in SERVER mode\n"); - // ... + ret = run_server(&prog_info); } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); // ... } - return 0; } return ret; } diff --git a/misc.h b/misc.h new file mode 100644 index 0000000..f36d018 --- /dev/null +++ b/misc.h @@ -0,0 +1,10 @@ +#ifndef __MISC +# define __MISC + +struct prog_info { + int mode; + int client_num; + int port; +} prog_info; + +#endif diff --git a/net.c b/net.c index d1d7aed..e425a84 100644 --- a/net.c +++ b/net.c @@ -10,7 +10,13 @@ #include #include -#define PORT "4711" +// usleep support +#include + +#include "misc.h" + +#define PORT(p) PORTSTR(p) +#define PORTSTR(p) #p void *get_in_addr(struct sockaddr *sa) { @@ -21,17 +27,20 @@ void *get_in_addr(struct sockaddr *sa) return &(((struct sockaddr_in6*)sa)->sin6_addr); } -int main (int argc, char **argv) { +int run_server(const struct prog_info *pinfo) { struct addrinfo hints, *servinfo; + char portbuf[6]; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; // IPv4 hints.ai_socktype = SOCK_DGRAM; // UDP hints.ai_flags = AI_PASSIVE; + sprintf(portbuf, "%d", pinfo->port); + int rv; - if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) { + if ((rv = getaddrinfo(NULL, portbuf, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } From ac773aba50b90dbd92902ee88af332ec7457592c Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 13:31:04 +0100 Subject: [PATCH 07/76] current --- .test.c.swp | Bin 0 -> 12288 bytes net.c | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 .test.c.swp diff --git a/.test.c.swp b/.test.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..d17d1077c505bef30bdc7bb470b23da860abecbd GIT binary patch literal 12288 zcmeI2&5ImG7>8^1BATd)9s|A^+0Zle&d090u$v8rbq$iuCd|4aM3<$eyLzUXp6;fq zX3QE?aJ>k6lb~L_3+hn?@uC;Kh!GEhe}M;Y9wYv$KXyL$u$NpS)$q_gZ`a3LPrWs; z>~xyfU%5id^(BVuNyaY!q}$6+Z?YFoFsAz^c>L9oT#NYlc5mx`LrJd@3$3Dt7E0H> z<9pc_)_^r|e+-;tON*_h8SB}~S$gX9&ixtIj$#d11J-~wU=3IU)_^r&4OjyYgaMt- zv3HQ^Lq)dh#eHt(UVOASYrqpRqq4VQlVE zB#;09mw*4?dxEjw!Cmkx_#S)??tlZ3fE(aN;DA%$-^Urd2fhJcgFE0O@E*7cw!nF? z3eJJQPGWBG8@LO;03U!J=z=rgPy7zyXYeEV0elE8mz^CASZ~)!~0T5swoCc@B!yxm5yS=OdYrqpm$>YXUTf{5e>OlMh2XxAVS>a_LXONs`7+M}iIBJzYNu69Y67W{GLcgg`#Pyi zv@oqGUAVx*Ju`tj@f?Y`TBWr$T4+`2HZu*wfE=gHlGe;ZFkZ3PBJ0Inmz0+1?PRN1 z+^xFQbn}Ibb1keb=7!ARL7_=$A8EUEs4L)MBz)tk6UIInwL(K!u?&+`YVzFL+1xal zGBetErj8W6Ux=K3V?KFFtiyOH#(9|N5pmg^<&369dFAd>ndrnzqFG_4RVFR32cs+- z$;rC~d=N(arF8R3@2A3LrdxoG!?NHw-|kgP>1@78^SD;*R4i`ka(fyLijpKH-IK|% z+an%DcowKoHH@?(4toRM7sQJ+W>poN(i+P+vMF7m%Sv1+>$Z#P!ItO6CP&qYjdA1% zsZMmti=u@h+1_Yh-)LXE+J4ogb3L38g?qVLh{R%>hufLGubX)aNf>qe>iXrqmoBw0 zUdi)4Y?Et6i;FMs?QCsd+gQ&V48%YQ?Ua)>QK;dYA_*w#iL5j6X*0glECM@~z$ma=~h#ck55IXcUm9q03U8tllj+bf4)I+w9YY`rXOcxM%(}8#gVk!qcGf*wSini~x#nHT T2UPK*5MSIC^2H!wjT-w8bi)8a literal 0 HcmV?d00001 diff --git a/net.c b/net.c index e425a84..29092ad 100644 --- a/net.c +++ b/net.c @@ -28,6 +28,25 @@ void *get_in_addr(struct sockaddr *sa) } int run_server(const struct prog_info *pinfo) { + struct addrinfo hints, *servinfo; + int ret; + + char portbuf[6]; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + + sprintf(portbuf, "%d", pinfo->port); + if ((ret=getaddrinfo("0.0.0.0", portbuf, &hints, &servinfo)) != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + return 1; + } +// ... + + return 0; +} + +int run_client(const struct prog_info *pinfo) { struct addrinfo hints, *servinfo; char portbuf[6]; From a79fcb4cbbf1aa35dc3d9a69180b6b25032dc3c0 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 13:31:34 +0100 Subject: [PATCH 08/76] current --- .gitignore | 1 + .test.c.swp | Bin 12288 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 .test.c.swp diff --git a/.gitignore b/.gitignore index 752c478..d9a2b4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ bin/ out/ net test +*.swp diff --git a/.test.c.swp b/.test.c.swp deleted file mode 100644 index d17d1077c505bef30bdc7bb470b23da860abecbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&5ImG7>8^1BATd)9s|A^+0Zle&d090u$v8rbq$iuCd|4aM3<$eyLzUXp6;fq zX3QE?aJ>k6lb~L_3+hn?@uC;Kh!GEhe}M;Y9wYv$KXyL$u$NpS)$q_gZ`a3LPrWs; z>~xyfU%5id^(BVuNyaY!q}$6+Z?YFoFsAz^c>L9oT#NYlc5mx`LrJd@3$3Dt7E0H> z<9pc_)_^r|e+-;tON*_h8SB}~S$gX9&ixtIj$#d11J-~wU=3IU)_^r&4OjyYgaMt- zv3HQ^Lq)dh#eHt(UVOASYrqpRqq4VQlVE zB#;09mw*4?dxEjw!Cmkx_#S)??tlZ3fE(aN;DA%$-^Urd2fhJcgFE0O@E*7cw!nF? z3eJJQPGWBG8@LO;03U!J=z=rgPy7zyXYeEV0elE8mz^CASZ~)!~0T5swoCc@B!yxm5yS=OdYrqpm$>YXUTf{5e>OlMh2XxAVS>a_LXONs`7+M}iIBJzYNu69Y67W{GLcgg`#Pyi zv@oqGUAVx*Ju`tj@f?Y`TBWr$T4+`2HZu*wfE=gHlGe;ZFkZ3PBJ0Inmz0+1?PRN1 z+^xFQbn}Ibb1keb=7!ARL7_=$A8EUEs4L)MBz)tk6UIInwL(K!u?&+`YVzFL+1xal zGBetErj8W6Ux=K3V?KFFtiyOH#(9|N5pmg^<&369dFAd>ndrnzqFG_4RVFR32cs+- z$;rC~d=N(arF8R3@2A3LrdxoG!?NHw-|kgP>1@78^SD;*R4i`ka(fyLijpKH-IK|% z+an%DcowKoHH@?(4toRM7sQJ+W>poN(i+P+vMF7m%Sv1+>$Z#P!ItO6CP&qYjdA1% zsZMmti=u@h+1_Yh-)LXE+J4ogb3L38g?qVLh{R%>hufLGubX)aNf>qe>iXrqmoBw0 zUdi)4Y?Et6i;FMs?QCsd+gQ&V48%YQ?Ua)>QK;dYA_*w#iL5j6X*0glECM@~z$ma=~h#ck55IXcUm9q03U8tllj+bf4)I+w9YY`rXOcxM%(}8#gVk!qcGf*wSini~x#nHT T2UPK*5MSIC^2H!wjT-w8bi)8a From b4d175c88253a9fc9aef6b1b17f0943059c8c518 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 14:04:43 +0100 Subject: [PATCH 09/76] first working net solution --- Makefile | 10 ++++----- main.c | 5 +++++ net.c | 44 ++++++++++++++++++++++++++++++++++--- test.c | 67 -------------------------------------------------------- 4 files changed, 51 insertions(+), 75 deletions(-) delete mode 100644 test.c diff --git a/Makefile b/Makefile index 17d9fa7..57ade97 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,17 @@ -all: bin/test bin/main +all: bin/netsl #bin/net: net.c # mkdir -pv bin # gcc -o bin/net net.c -bin/test: test.c - mkdir -pv bin - gcc -o bin/test test.c +#bin/test: test.c +# mkdir -pv bin +# gcc -o bin/test test.c -bin/main: main.c net.c +bin/netsl: misc.h main.c net.c mkdir -pv bin gcc -o bin/main main.c diff --git a/main.c b/main.c index c41af36..0f82528 100644 --- a/main.c +++ b/main.c @@ -57,6 +57,10 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { return 0; } +void callback(long tst) { + printf("in callback, tst=%ld\n", tst); +} + int main(int argc, char **argv) { int ret; @@ -69,6 +73,7 @@ int main(int argc, char **argv) { } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); // ... + ret = run_client(&prog_info, callback); } } diff --git a/net.c b/net.c index 29092ad..ff87445 100644 --- a/net.c +++ b/net.c @@ -28,8 +28,9 @@ void *get_in_addr(struct sockaddr *sa) } int run_server(const struct prog_info *pinfo) { - struct addrinfo hints, *servinfo; + struct addrinfo hints, *servinfo, *p; int ret; + int sockfd; char portbuf[6]; memset(&hints, 0, sizeof(hints)); @@ -38,19 +39,52 @@ int run_server(const struct prog_info *pinfo) { sprintf(portbuf, "%d", pinfo->port); if ((ret=getaddrinfo("0.0.0.0", portbuf, &hints, &servinfo)) != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); return 1; } // ... + for(p = servinfo; p != NULL; p = p->ai_next) { + if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { + perror("talker: socket"); + continue; + } + break; + } + + if (p == NULL) { + fprintf(stderr, "talker: failed to bind socket\n"); + return 2; + } + + struct timespec tim; + tim.tv_sec = 0; + tim.tv_nsec = 500000000; + + for (;;) { + printf("sending...\n"); + int numbytes; + if ((numbytes = sendto(sockfd, "bla", 3, 0, p->ai_addr, p->ai_addrlen)) == -1) { + perror("error sending"); + return -44; + } + nanosleep(&tim, NULL); + } + + freeaddrinfo(servinfo); + + close(sockfd); + return 0; } -int run_client(const struct prog_info *pinfo) { +int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { struct addrinfo hints, *servinfo; char portbuf[6]; + //framecallback(123); + memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; // IPv4 hints.ai_socktype = SOCK_DGRAM; // UDP @@ -111,7 +145,11 @@ int run_client(const struct prog_info *pinfo) { printf("listener: packet is %d bytes long\n", numbytes); buf[numbytes] = '\0'; printf("listener: packet contains \"%s\"\n", buf); + + framecallback(123); + } while (strncmp(buf, "exit", 10000)); + close(sockfd); diff --git a/test.c b/test.c deleted file mode 100644 index 4dcb391..0000000 --- a/test.c +++ /dev/null @@ -1,67 +0,0 @@ -/* -** talker.c -- a datagram "client" demo -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SERVERPORT "4711" // the port users will be connecting to - -int main(int argc, char *argv[]) -{ - int sockfd; - struct addrinfo hints, *servinfo, *p; - int rv; - int numbytes; - - if (argc != 3) { - fprintf(stderr,"usage: talker hostname message\n"); - exit(1); - } - - memset(&hints, 0, sizeof hints); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_DGRAM; - - if ((rv = getaddrinfo(argv[1], SERVERPORT, &hints, &servinfo)) != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); - return 1; - } - - // loop through all the results and make a socket - for(p = servinfo; p != NULL; p = p->ai_next) { - if ((sockfd = socket(p->ai_family, p->ai_socktype, - p->ai_protocol)) == -1) { - perror("talker: socket"); - continue; - } - - break; - } - - if (p == NULL) { - fprintf(stderr, "talker: failed to bind socket\n"); - return 2; - } - - if ((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, - p->ai_addr, p->ai_addrlen)) == -1) { - perror("talker: sendto"); - exit(1); - } - - freeaddrinfo(servinfo); - - printf("talker: sent %d bytes to %s\n", numbytes, argv[1]); - close(sockfd); - - return 0; -} From 2d1cd95f901b0bb22f8b2defac80d88c7e5ff822 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 14:44:17 +0100 Subject: [PATCH 10/76] added structs for serializing --- msg.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ msg.h | 18 ++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 msg.c create mode 100644 msg.h diff --git a/msg.c b/msg.c new file mode 100644 index 0000000..275a592 --- /dev/null +++ b/msg.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include "msg.h" + +#if INTERFACE + +#define INITIAL_SIZE 32 + +struct Buffer { + int size; + void *data; +}; + +struct message { + long timestamp; + int width; // varies + int height; // normally 80 + char **image; // dimension is width x height +}; + + +#endif + +struct Buffer *new_buffer() { + struct Buffer *b = malloc(sizeof(Buffer)); + + b->data = malloc(INITIAL_SIZE); + b->size = 0; + + return b; +} + +void append_space(Buffer * b, int bytes) { + b->size += bytes; + b->data = realloc(b->data, b->size); +} + +void serialize_int(int x, Buffer * b) { + // htonl :: uint32_t -> uint32_t + x = htonl(x); + + append_space(b, sizeof(int)); + + memcpy(((char *)b->data) + b->next, &x, sizeof(int)); + b->next += sizeof(int); +} + +//serialize_string +//serialize_message + + diff --git a/msg.h b/msg.h new file mode 100644 index 0000000..de76560 --- /dev/null +++ b/msg.h @@ -0,0 +1,18 @@ +/* This file was automatically generated. Do not edit! */ +typedef struct Buffer Buffer; +void serialize_int(int x,Buffer *b); +void append_space(Buffer *b,int bytes); +struct Buffer *new_buffer(); +typedef struct message message; +struct message { + long timestamp; + int width; // varies + int height; // normally 80 + char **image; // dimension is width x height +}; +struct Buffer { + int size; + void *data; +}; +#define INITIAL_SIZE 32 +#define INTERFACE 0 From 7856a47f69e12be8dba88557d40edc7f89bb91d4 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 15:01:40 +0100 Subject: [PATCH 11/76] blablalaberblaieduiranet --- Makefile | 2 +- msg.c | 3 +++ net.c | 25 ++++++++++--------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 57ade97..640e21a 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ all: bin/netsl bin/netsl: misc.h main.c net.c mkdir -pv bin - gcc -o bin/main main.c + gcc -o bin/netsl main.c clean: rm -rf bin diff --git a/msg.c b/msg.c index 275a592..b155194 100644 --- a/msg.c +++ b/msg.c @@ -44,8 +44,11 @@ void serialize_int(int x, Buffer * b) { memcpy(((char *)b->data) + b->next, &x, sizeof(int)); b->next += sizeof(int); + } +void struct + //serialize_string //serialize_message diff --git a/net.c b/net.c index ff87445..53170e5 100644 --- a/net.c +++ b/net.c @@ -38,7 +38,7 @@ int run_server(const struct prog_info *pinfo) { hints.ai_socktype = SOCK_DGRAM; sprintf(portbuf, "%d", pinfo->port); - if ((ret=getaddrinfo("0.0.0.0", portbuf, &hints, &servinfo)) != 0) { + if ((ret=getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); return 1; } @@ -61,6 +61,12 @@ int run_server(const struct prog_info *pinfo) { tim.tv_sec = 0; tim.tv_nsec = 500000000; + int broadcastPermission = 1; + if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){ + fprintf(stderr, "setsockopt error"); + exit(1); + } + for (;;) { printf("sending...\n"); int numbytes; @@ -83,8 +89,6 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { struct addrinfo hints, *servinfo; char portbuf[6]; - //framecallback(123); - memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; // IPv4 hints.ai_socktype = SOCK_DGRAM; // UDP @@ -104,13 +108,6 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { int sockfd; char s[INET6_ADDRSTRLEN]; for (info = servinfo; info != NULL; info = info->ai_next) { -/* if (info->ai_addr) { - struct sockaddr_in* p = (struct sockaddr_in *)info->ai_addr; - inet_ntop(p->sin_family, &p->sin_addr, s, INET6_ADDRSTRLEN); - printf(" %d: %s\n", info->ai_addr->sa_family, s); - } -*/ - if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { perror("sock"); continue; @@ -141,17 +138,15 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { exit(1); } - printf("listener: got packet from %s\n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); - printf("listener: packet is %d bytes long\n", numbytes); + //printf("listener: got packet from %s\n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); + //printf("listener: packet is %d bytes long\n", numbytes); buf[numbytes] = '\0'; - printf("listener: packet contains \"%s\"\n", buf); + //printf("listener: packet contains \"%s\"\n", buf); framecallback(123); } while (strncmp(buf, "exit", 10000)); - - close(sockfd); return 0; From bdb20e8de1627f0bf86df7382b1e7cd4f39937fb Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 15:08:19 +0100 Subject: [PATCH 12/76] serialize_string --- msg.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/msg.c b/msg.c index b155194..f7f433a 100644 --- a/msg.c +++ b/msg.c @@ -1,5 +1,6 @@ #include #include +#include #include #include "msg.h" @@ -31,25 +32,35 @@ struct Buffer *new_buffer() { return b; } -void append_space(Buffer * b, int bytes) { - b->size += bytes; +void append_space(Buffer * b, int n) { + b->size += n; b->data = realloc(b->data, b->size); } void serialize_int(int x, Buffer * b) { - // htonl :: uint32_t -> uint32_t + // htonl :: uint32_t -> uint32_t -- converts the parameter from host byte order to network byte order x = htonl(x); append_space(b, sizeof(int)); - memcpy(((char *)b->data) + b->next, &x, sizeof(int)); - b->next += sizeof(int); + memcpy( ((char*)b->data) + b->size, &x, sizeof(int)); + b->size += sizeof(int); +} + +void serialize_string(char *str, Buffer *b) { + + int newlen = strlen(str); + + append_space(b, newlen); + + for (int i=0; i < newlen; ++i) { + memcpy( ((char*)b->data) + b->size + i, str[i], sizeof(char)); + } + + b->size += newlen; } -void struct - -//serialize_string //serialize_message From 20a385a077bfd3a25603f98bd393842bd803b058 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 15:17:24 +0100 Subject: [PATCH 13/76] local commit --- msg.c | 1 - 1 file changed, 1 deletion(-) diff --git a/msg.c b/msg.c index b155194..aceb03b 100644 --- a/msg.c +++ b/msg.c @@ -47,7 +47,6 @@ void serialize_int(int x, Buffer * b) { } -void struct //serialize_string //serialize_message From 43cd1f6a2ecf84cd6211184f87bf332f90c0b430 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 15:34:39 +0100 Subject: [PATCH 14/76] serialize_message --- msg.c | 8 ++++++-- msg.h | 10 ++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/msg.c b/msg.c index f7f433a..7933a83 100644 --- a/msg.c +++ b/msg.c @@ -61,6 +61,10 @@ void serialize_string(char *str, Buffer *b) { } -//serialize_message - +void serialize_message(struct message *msg, Buffer *b) { + serialize_int(msg->timestamp, b); // does this also work for long? + serialize_int(msg->width, b); + serialize_int(msg->heigth, b); + serialize_string(msg->image, b); +} diff --git a/msg.h b/msg.h index de76560..cfffa4b 100644 --- a/msg.h +++ b/msg.h @@ -1,9 +1,11 @@ /* This file was automatically generated. Do not edit! */ -typedef struct Buffer Buffer; -void serialize_int(int x,Buffer *b); -void append_space(Buffer *b,int bytes); -struct Buffer *new_buffer(); typedef struct message message; +typedef struct Buffer Buffer; +void serialize_message(struct message *msg,Buffer *b); +void serialize_string(char *str,Buffer *b); +void serialize_int(int x,Buffer *b); +void append_space(Buffer *b,int n); +struct Buffer *new_buffer(); struct message { long timestamp; int width; // varies From 21e1f56f2b7086974095b963f9f0eed8c8f81d42 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 16:09:26 +0100 Subject: [PATCH 15/76] add CFLAGS --- .gitignore | 1 + Makefile | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d9a2b4b..602eb40 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ out/ net test *.swp +a.out diff --git a/Makefile b/Makefile index 640e21a..29fd9ee 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,9 @@ +CFLAGS=-g -Wall -Wextra +# -std=c99 # c99 breaks some of your code xD + -all: bin/netsl - +all: bin/netsl #bin/net: net.c # mkdir -pv bin @@ -13,7 +15,8 @@ all: bin/netsl bin/netsl: misc.h main.c net.c mkdir -pv bin - gcc -o bin/netsl main.c + gcc $(CFLAGS) -o bin/netsl main.c clean: rm -rf bin + From 30b1e97483031a60987636ad897438e09dbacb2a Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 16:09:38 +0100 Subject: [PATCH 16/76] buffer testing --- msg.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/msg.c b/msg.c index 7933a83..73d7ad4 100644 --- a/msg.c +++ b/msg.c @@ -2,6 +2,7 @@ #include #include #include +#include // htonl #include "msg.h" #if INTERFACE @@ -39,7 +40,7 @@ void append_space(Buffer * b, int n) { void serialize_int(int x, Buffer * b) { // htonl :: uint32_t -> uint32_t -- converts the parameter from host byte order to network byte order - x = htonl(x); + //x = htonl(x); append_space(b, sizeof(int)); @@ -53,8 +54,11 @@ void serialize_string(char *str, Buffer *b) { append_space(b, newlen); - for (int i=0; i < newlen; ++i) { - memcpy( ((char*)b->data) + b->size + i, str[i], sizeof(char)); + int i = 0; + while (i < newlen) { + memcpy( ((char*)b->data) + b->size + i, str, sizeof(char)); + str++; + i++; } b->size += newlen; @@ -64,7 +68,19 @@ void serialize_string(char *str, Buffer *b) { void serialize_message(struct message *msg, Buffer *b) { serialize_int(msg->timestamp, b); // does this also work for long? serialize_int(msg->width, b); - serialize_int(msg->heigth, b); - serialize_string(msg->image, b); + serialize_int(msg->height, b); + for (int i=0; i < msg->width; i++) + serialize_string(msg->image[i], b); } + +int main() { + + Buffer *buf = new_buffer(); + //serialize_string("lol", buf); + serialize_int(42, buf); + printf("buf: size:%d data:%p\n", buf->size, buf->data); + +} + + From 3dadd1ef491086b8dad113206d0fee1339788765 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 16:14:50 +0100 Subject: [PATCH 17/76] fixed c99 bug --- Makefile | 3 +-- net.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 29fd9ee..472455f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ -CFLAGS=-g -Wall -Wextra -# -std=c99 # c99 breaks some of your code xD +CFLAGS=-g -Wall -Wextra -std=gnu99 all: bin/netsl diff --git a/net.c b/net.c index 53170e5..981722f 100644 --- a/net.c +++ b/net.c @@ -106,7 +106,7 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { struct addrinfo *info; int sockfd; - char s[INET6_ADDRSTRLEN]; + //char s[INET6_ADDRSTRLEN]; for (info = servinfo; info != NULL; info = info->ai_next) { if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { perror("sock"); From 6ae3c81b9aba611ba4850046620e335c19105921 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 16:15:39 +0100 Subject: [PATCH 18/76] doku link --- README | 1 + 1 file changed, 1 insertion(+) diff --git a/README b/README index 618fa89..764f657 100644 --- a/README +++ b/README @@ -2,3 +2,4 @@ empty hi hi must read: http://www.beej.us/guide/bgnet/ +zu c99: http://www.c-plusplus.de/forum/296310-full From f2b472d2c4c7545cd8b06a169206fe34c1a1af7a Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 17:10:31 +0100 Subject: [PATCH 19/76] serialization of messages --- msg.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/msg.c b/msg.c index 73d7ad4..1164ae6 100644 --- a/msg.c +++ b/msg.c @@ -15,15 +15,38 @@ struct Buffer { }; struct message { - long timestamp; - int width; // varies - int height; // normally 80 - char **image; // dimension is width x height + uint32_t timestamp; + uint32_t width; // varies + uint32_t height; // normally 80 + //char **image; // dimension is width x height + char *image; // dimension is width x height }; #endif + +int getBufferSize(struct message *msg) { + int ret; + ret = 4 + 4 + 4 + msg->width * msg->height; + return ret; +} + +void serialize (char *buf, struct message *msg) { + memcpy(&buf[0], &msg->timestamp, 4); + memcpy(&buf[4], &msg->width, 4); + memcpy(&buf[8], &msg->height, 4); + memcpy(&buf[12], msg->image, msg->width*msg->height); +} + +void deserialize (struct message *msg, const char *buf) { + memcpy(&msg->timestamp, &buf[0], 4); + memcpy(&msg->width, &buf[4], 4); + memcpy(&msg->height, &buf[8], 4); + msg->image = (char *)malloc(msg->width*msg->height); + memcpy(msg->image, &buf[12], msg->width*msg->height); +} + struct Buffer *new_buffer() { struct Buffer *b = malloc(sizeof(Buffer)); @@ -84,3 +107,4 @@ int main() { } + From 3d834b54cf782e9f65fb8221905030198c9b7c2e Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 17:13:08 +0100 Subject: [PATCH 20/76] =?UTF-8?q?makefile=20um=20msg.(c|h)=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 472455f..c238eaf 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ all: bin/netsl # mkdir -pv bin # gcc -o bin/test test.c -bin/netsl: misc.h main.c net.c +bin/netsl: misc.h main.c net.c msg.c msg.h mkdir -pv bin gcc $(CFLAGS) -o bin/netsl main.c From 5c25bf16b439a6e0b5420cbe8e1b799da3126e3d Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 17:20:34 +0100 Subject: [PATCH 21/76] headers angepisst --- msg.h | 2 +- net.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/msg.h b/msg.h index cfffa4b..fdfe0ff 100644 --- a/msg.h +++ b/msg.h @@ -10,7 +10,7 @@ struct message { long timestamp; int width; // varies int height; // normally 80 - char **image; // dimension is width x height + char *image; // dimension is width x height }; struct Buffer { int size; diff --git a/net.c b/net.c index 981722f..a6358c4 100644 --- a/net.c +++ b/net.c @@ -42,9 +42,8 @@ int run_server(const struct prog_info *pinfo) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); return 1; } -// ... - for(p = servinfo; p != NULL; p = p->ai_next) { + for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("talker: socket"); continue; From 6b0ea85e0274a82fc9e03d43aa7bffd600c688d4 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 17:25:42 +0100 Subject: [PATCH 22/76] msg cleanup --- msg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msg.c b/msg.c index 1164ae6..e74e728 100644 --- a/msg.c +++ b/msg.c @@ -60,7 +60,7 @@ void append_space(Buffer * b, int n) { b->size += n; b->data = realloc(b->data, b->size); } - +/* void serialize_int(int x, Buffer * b) { // htonl :: uint32_t -> uint32_t -- converts the parameter from host byte order to network byte order //x = htonl(x); @@ -105,6 +105,6 @@ int main() { printf("buf: size:%d data:%p\n", buf->size, buf->data); } - +*/ From 3d6344d09f55f12228179e9edd2e5b53f64f34a8 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 17:29:41 +0100 Subject: [PATCH 23/76] fixed makefile --- .gitignore | 1 + Makefile | 23 ++++++++++------------- main.c | 4 ++-- msg.h | 15 ++++++++------- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 602eb40..078cbd0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ bin/ out/ net test +*.o *.swp a.out diff --git a/Makefile b/Makefile index c238eaf..1f98786 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,18 @@ CFLAGS=-g -Wall -Wextra -std=gnu99 +TARGET=bin/netsl +OBJECTS=main.o msg.o net.o +all: $(TARGET) -all: bin/netsl - -#bin/net: net.c -# mkdir -pv bin -# gcc -o bin/net net.c - -#bin/test: test.c -# mkdir -pv bin -# gcc -o bin/test test.c - -bin/netsl: misc.h main.c net.c msg.c msg.h +$(TARGET): $(OBJECTS) mkdir -pv bin - gcc $(CFLAGS) -o bin/netsl main.c + gcc $^ -o $(TARGET) + +%.o: %.c %.h + $(CC) $(CFLAGS) -c $< clean: - rm -rf bin + -$(RM) -rf *.o bin + diff --git a/main.c b/main.c index 0f82528..9e20df9 100644 --- a/main.c +++ b/main.c @@ -1,10 +1,10 @@ #include #include +#include #include #include "misc.h" -#include "net.c" - +#include "net.h" #define MODE_SERVER 0 #define MODE_CLIENT 1 diff --git a/msg.h b/msg.h index fdfe0ff..ca885cb 100644 --- a/msg.h +++ b/msg.h @@ -1,15 +1,16 @@ /* This file was automatically generated. Do not edit! */ -typedef struct message message; typedef struct Buffer Buffer; -void serialize_message(struct message *msg,Buffer *b); -void serialize_string(char *str,Buffer *b); -void serialize_int(int x,Buffer *b); void append_space(Buffer *b,int n); struct Buffer *new_buffer(); +typedef struct message message; +void deserialize(struct message *msg,const char *buf); +void serialize(char *buf,struct message *msg); +int getBufferSize(struct message *msg); struct message { - long timestamp; - int width; // varies - int height; // normally 80 + uint32_t timestamp; + uint32_t width; // varies + uint32_t height; // normally 80 + //char **image; // dimension is width x height char *image; // dimension is width x height }; struct Buffer { From c98d5ce17cff7aa736f9acbb625dceaa04eedd48 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 17:34:02 +0100 Subject: [PATCH 24/76] net.h --- Makefile | 2 +- net.h | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 net.h diff --git a/Makefile b/Makefile index 1f98786..0c75b4a 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,6 @@ $(TARGET): $(OBJECTS) $(CC) $(CFLAGS) -c $< clean: - -$(RM) -rf *.o bin + rm -rf *.o bin diff --git a/net.h b/net.h new file mode 100644 index 0000000..b475e96 --- /dev/null +++ b/net.h @@ -0,0 +1,4 @@ +/* This file was automatically generated. Do not edit! */ +int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); +int run_server(const struct prog_info *pinfo); +void *get_in_addr(struct sockaddr *sa); From 01fe9c6bf74f67bd48fee3378271eedb2a3e5e98 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 17:38:15 +0100 Subject: [PATCH 25/76] source into separate dir; fixed net.h --- main.c => src/main.c | 0 misc.h => src/misc.h | 0 msg.c => src/msg.c | 0 msg.h => src/msg.h | 0 net.c => src/net.c | 3 --- net.h => src/net.h | 10 ++++++++++ 6 files changed, 10 insertions(+), 3 deletions(-) rename main.c => src/main.c (100%) rename misc.h => src/misc.h (100%) rename msg.c => src/msg.c (100%) rename msg.h => src/msg.h (100%) rename net.c => src/net.c (98%) rename net.h => src/net.h (51%) diff --git a/main.c b/src/main.c similarity index 100% rename from main.c rename to src/main.c diff --git a/misc.h b/src/misc.h similarity index 100% rename from misc.h rename to src/misc.h diff --git a/msg.c b/src/msg.c similarity index 100% rename from msg.c rename to src/msg.c diff --git a/msg.h b/src/msg.h similarity index 100% rename from msg.h rename to src/msg.h diff --git a/net.c b/src/net.c similarity index 98% rename from net.c rename to src/net.c index a6358c4..82ab9ed 100644 --- a/net.c +++ b/src/net.c @@ -15,9 +15,6 @@ #include "misc.h" -#define PORT(p) PORTSTR(p) -#define PORTSTR(p) #p - void *get_in_addr(struct sockaddr *sa) { if (sa->sa_family == AF_INET) { diff --git a/net.h b/src/net.h similarity index 51% rename from net.h rename to src/net.h index b475e96..0cd91c3 100644 --- a/net.h +++ b/src/net.h @@ -1,4 +1,14 @@ /* This file was automatically generated. Do not edit! */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); int run_server(const struct prog_info *pinfo); void *get_in_addr(struct sockaddr *sa); From 0b46e9fb9656e909f37c2192f2dfca54767d135a Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 17:51:43 +0100 Subject: [PATCH 26/76] manual header for msg --- src/msg.c | 37 +++++++------------------------------ src/msg.h | 37 ++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 47 deletions(-) diff --git a/src/msg.c b/src/msg.c index e74e728..38fb0af 100644 --- a/src/msg.c +++ b/src/msg.c @@ -5,52 +5,29 @@ #include // htonl #include "msg.h" -#if INTERFACE - -#define INITIAL_SIZE 32 - -struct Buffer { - int size; - void *data; -}; - -struct message { - uint32_t timestamp; - uint32_t width; // varies - uint32_t height; // normally 80 - //char **image; // dimension is width x height - char *image; // dimension is width x height -}; - - -#endif - - int getBufferSize(struct message *msg) { - int ret; - ret = 4 + 4 + 4 + msg->width * msg->height; - return ret; + return 3*sizeof(uint32_t) + msg->width * msg->height; } void serialize (char *buf, struct message *msg) { memcpy(&buf[0], &msg->timestamp, 4); memcpy(&buf[4], &msg->width, 4); memcpy(&buf[8], &msg->height, 4); - memcpy(&buf[12], msg->image, msg->width*msg->height); + memcpy(&buf[12], msg->image, msg->width * msg->height); } void deserialize (struct message *msg, const char *buf) { memcpy(&msg->timestamp, &buf[0], 4); memcpy(&msg->width, &buf[4], 4); memcpy(&msg->height, &buf[8], 4); - msg->image = (char *)malloc(msg->width*msg->height); - memcpy(msg->image, &buf[12], msg->width*msg->height); + msg->image = (char*) malloc(msg->width * msg->height); + memcpy(msg->image, &buf[12], msg->width * msg->height); } struct Buffer *new_buffer() { struct Buffer *b = malloc(sizeof(Buffer)); - b->data = malloc(INITIAL_SIZE); + b->data = malloc(0); b->size = 0; return b; @@ -60,7 +37,7 @@ void append_space(Buffer * b, int n) { b->size += n; b->data = realloc(b->data, b->size); } -/* + void serialize_int(int x, Buffer * b) { // htonl :: uint32_t -> uint32_t -- converts the parameter from host byte order to network byte order //x = htonl(x); @@ -96,7 +73,7 @@ void serialize_message(struct message *msg, Buffer *b) { serialize_string(msg->image[i], b); } - +/* int main() { Buffer *buf = new_buffer(); diff --git a/src/msg.h b/src/msg.h index ca885cb..0da2776 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,21 +1,24 @@ -/* This file was automatically generated. Do not edit! */ -typedef struct Buffer Buffer; -void append_space(Buffer *b,int n); -struct Buffer *new_buffer(); -typedef struct message message; -void deserialize(struct message *msg,const char *buf); -void serialize(char *buf,struct message *msg); -int getBufferSize(struct message *msg); -struct message { - uint32_t timestamp; - uint32_t width; // varies - uint32_t height; // normally 80 - //char **image; // dimension is width x height - char *image; // dimension is width x height -}; + struct Buffer { int size; void *data; }; -#define INITIAL_SIZE 32 -#define INTERFACE 0 + +struct message { + uint32_t timestamp; + uint32_t width; // varies + uint32_t height; // normally 80 + //char **image; // dimension is width x height + char *image; // dimension is width x height +}; + +int getBufferSize(struct message *msg); +void serialize(char *buf,struct message *msg); +void deserialize(struct message *msg,const char *buf); + +struct Buffer *new_buffer(); +void append_space(Buffer *b,int n); +void serialize_int(int x,Buffer *b); +void serialize_string(char *str,Buffer *b); +void serialize_message(struct message *msg,Buffer *b); + From 46185e25a405915c34157329af203aa049b300dc Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 17:54:12 +0100 Subject: [PATCH 27/76] manual header for net --- src/net.c | 1 - src/net.h | 18 +++++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/net.c b/src/net.c index 82ab9ed..4376155 100644 --- a/src/net.c +++ b/src/net.c @@ -1,4 +1,3 @@ - #include #include #include diff --git a/src/net.h b/src/net.h index 0cd91c3..76353eb 100644 --- a/src/net.h +++ b/src/net.h @@ -1,14 +1,6 @@ -/* This file was automatically generated. Do not edit! */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); -int run_server(const struct prog_info *pinfo); +#include // struct sockaddr + void *get_in_addr(struct sockaddr *sa); +int run_server(const struct prog_info *pinfo); +int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); + From ae4db4353b79043d9a902cc2c170247f7c374230 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:00:15 +0100 Subject: [PATCH 28/76] fixed makefile issue with separate object dir --- Makefile | 21 ++++++++++++++------- src/main.h | 0 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 src/main.h diff --git a/Makefile b/Makefile index 0c75b4a..6afcc54 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,25 @@ CFLAGS=-g -Wall -Wextra -std=gnu99 -TARGET=bin/netsl -OBJECTS=main.o msg.o net.o +BIN_DIR=bin +SRC_DIR=src +TARGET=$(BIN_DIR)/netsl +OBJECTS=$(BIN_DIR)/main.o $(BIN_DIR)/msg.o $(BIN_DIR)/net.o -all: $(TARGET) +all: $(BIN_DIR) $(TARGET) + +$(BIN_DIR): + mkdir -pv $(BIN_DIR) $(TARGET): $(OBJECTS) - mkdir -pv bin gcc $^ -o $(TARGET) -%.o: %.c %.h - $(CC) $(CFLAGS) -c $< +# mkdir -pv $(BIN_DIR) + +$(BIN_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h + $(CC) $(CFLAGS) -o $@ -c $< + clean: - rm -rf *.o bin + rm -rf $(BIN_DIR) diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..e69de29 From 9be4942cab1d0dffde1f9e4866d9d4ed7fa72241 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:05:41 +0100 Subject: [PATCH 29/76] fixed some bugs in msg.c: there is no need for a buffer object, since its size can be calculated at every point in time --- README | 3 +++ src/msg.c | 3 ++- src/msg.h | 11 ++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/README b/README index 764f657..470ea62 100644 --- a/README +++ b/README @@ -3,3 +3,6 @@ empty hi hi must read: http://www.beej.us/guide/bgnet/ zu c99: http://www.c-plusplus.de/forum/296310-full + + + diff --git a/src/msg.c b/src/msg.c index 38fb0af..e41a12e 100644 --- a/src/msg.c +++ b/src/msg.c @@ -24,6 +24,8 @@ void deserialize (struct message *msg, const char *buf) { memcpy(msg->image, &buf[12], msg->width * msg->height); } +/* Buffer ist nicht erforderlich + struct Buffer *new_buffer() { struct Buffer *b = malloc(sizeof(Buffer)); @@ -73,7 +75,6 @@ void serialize_message(struct message *msg, Buffer *b) { serialize_string(msg->image[i], b); } -/* int main() { Buffer *buf = new_buffer(); diff --git a/src/msg.h b/src/msg.h index 0da2776..eb7b8ee 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,8 +1,8 @@ -struct Buffer { - int size; - void *data; -}; +//typedef struct Buffer { +// int size; +// void *data; +//} Buffer; struct message { uint32_t timestamp; @@ -16,9 +16,10 @@ int getBufferSize(struct message *msg); void serialize(char *buf,struct message *msg); void deserialize(struct message *msg,const char *buf); +/* struct Buffer *new_buffer(); void append_space(Buffer *b,int n); void serialize_int(int x,Buffer *b); void serialize_string(char *str,Buffer *b); void serialize_message(struct message *msg,Buffer *b); - +*/ From a051c10713256c67832362ddaf1b83c69e5ad3f9 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:08:50 +0100 Subject: [PATCH 30/76] bwreeeenis --- src/main.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main.h b/src/main.h index e69de29..462af4a 100644 --- a/src/main.h +++ b/src/main.h @@ -0,0 +1,14 @@ +// nüscht ... +// +// +// +// +// _,-%/%| +// _,-' \//%\ +// _,-' \%/|% +// / / ) __,-- /%\ +// \__/_,-'%(% ; %)% +// %\%, %\ +// '--%' +// +// From d7f8eebcd129dda408833070573c5d62e21f15b8 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:44:02 +0100 Subject: [PATCH 31/76] display module created --- Makefile | 2 +- src/display.c | 6 ++++++ src/display.h | 8 ++++++++ src/main.c | 4 +--- src/msg.h | 4 ++++ src/net.h | 4 ++++ 6 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 src/display.c create mode 100644 src/display.h diff --git a/Makefile b/Makefile index 6afcc54..183c8c9 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CFLAGS=-g -Wall -Wextra -std=gnu99 BIN_DIR=bin SRC_DIR=src TARGET=$(BIN_DIR)/netsl -OBJECTS=$(BIN_DIR)/main.o $(BIN_DIR)/msg.o $(BIN_DIR)/net.o +OBJECTS=$(BIN_DIR)/main.o $(BIN_DIR)/msg.o $(BIN_DIR)/net.o $(BIN_DIR)/display.o all: $(BIN_DIR) $(TARGET) diff --git a/src/display.c b/src/display.c new file mode 100644 index 0000000..593c2a1 --- /dev/null +++ b/src/display.c @@ -0,0 +1,6 @@ + +#include "display.h" + +void callback(long tst) { + printf("in callback, tst=%ld\n", tst); +} diff --git a/src/display.h b/src/display.h new file mode 100644 index 0000000..c671667 --- /dev/null +++ b/src/display.h @@ -0,0 +1,8 @@ +#ifndef __DISPLAY +#define __DISPLAY + +#include + +void callback(long tst); + +#endif diff --git a/src/main.c b/src/main.c index 9e20df9..28365da 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,7 @@ #include "misc.h" #include "net.h" +#include "display.h" #define MODE_SERVER 0 #define MODE_CLIENT 1 @@ -57,9 +58,6 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { return 0; } -void callback(long tst) { - printf("in callback, tst=%ld\n", tst); -} int main(int argc, char **argv) { diff --git a/src/msg.h b/src/msg.h index eb7b8ee..24f14a9 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,3 +1,5 @@ +#ifndef __MSG +# define __MSG //typedef struct Buffer { // int size; @@ -23,3 +25,5 @@ void serialize_int(int x,Buffer *b); void serialize_string(char *str,Buffer *b); void serialize_message(struct message *msg,Buffer *b); */ + +#endif diff --git a/src/net.h b/src/net.h index 76353eb..f396641 100644 --- a/src/net.h +++ b/src/net.h @@ -1,6 +1,10 @@ +#ifndef __NET +# define __NET + #include // struct sockaddr void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo); int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); +#endif From 3c077c550f4461e6b7a240c0d5efde7514fb89b2 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:51:10 +0100 Subject: [PATCH 32/76] comment --- src/msg.h | 5 +++++ src/net.c | 1 + 2 files changed, 6 insertions(+) diff --git a/src/msg.h b/src/msg.h index 24f14a9..636d466 100644 --- a/src/msg.h +++ b/src/msg.h @@ -12,6 +12,11 @@ struct message { uint32_t height; // normally 80 //char **image; // dimension is width x height char *image; // dimension is width x height + +/* + * image[row][col] >>> image[row*width+col]; + */ + }; int getBufferSize(struct message *msg); diff --git a/src/net.c b/src/net.c index 4376155..555c1e4 100644 --- a/src/net.c +++ b/src/net.c @@ -13,6 +13,7 @@ #include #include "misc.h" +#include "msg.h" void *get_in_addr(struct sockaddr *sa) { From 936c9009e45b7cfb852e1dcb9222bba96a4f1ddb Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 18:55:43 +0100 Subject: [PATCH 33/76] commented net.c --- src/net.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/net.c b/src/net.c index 555c1e4..cd7fd0d 100644 --- a/src/net.c +++ b/src/net.c @@ -1,19 +1,21 @@ #include #include -#include -#include -#include + +#include // ? +#include // geguttenbergt aus bejees networking guide +#include // ? + +// networking #include #include #include #include #include -// usleep support -#include +#include // nanosleep -#include "misc.h" -#include "msg.h" +#include "misc.h" // prog_info +#include "display.h" // callback void *get_in_addr(struct sockaddr *sa) { From 1ba0eb9cd04bcf600ddff05c040f7a76a26b1fd9 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 19:21:09 +0100 Subject: [PATCH 34/76] transformed callback func to use message struct instead of timestamp --- src/display.c | 4 ++-- src/display.h | 3 ++- src/msg.c | 11 ++++++++--- src/msg.h | 2 ++ src/net.c | 27 ++++++++++++++++++++++----- src/net.h | 5 ++++- 6 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/display.c b/src/display.c index 593c2a1..62e1530 100644 --- a/src/display.c +++ b/src/display.c @@ -1,6 +1,6 @@ #include "display.h" -void callback(long tst) { - printf("in callback, tst=%ld\n", tst); +void callback(const struct message *msg) { + printf("in callback, tst=%d\n", msg->timestamp); } diff --git a/src/display.h b/src/display.h index c671667..caf103b 100644 --- a/src/display.h +++ b/src/display.h @@ -2,7 +2,8 @@ #define __DISPLAY #include +#include "msg.h" -void callback(long tst); +void callback(const struct message *msg); #endif diff --git a/src/msg.c b/src/msg.c index e41a12e..70bc7fc 100644 --- a/src/msg.c +++ b/src/msg.c @@ -13,15 +13,20 @@ void serialize (char *buf, struct message *msg) { memcpy(&buf[0], &msg->timestamp, 4); memcpy(&buf[4], &msg->width, 4); memcpy(&buf[8], &msg->height, 4); - memcpy(&buf[12], msg->image, msg->width * msg->height); + if (msg->width * msg->height) + memcpy(&buf[12], msg->image, msg->width * msg->height); } void deserialize (struct message *msg, const char *buf) { memcpy(&msg->timestamp, &buf[0], 4); memcpy(&msg->width, &buf[4], 4); memcpy(&msg->height, &buf[8], 4); - msg->image = (char*) malloc(msg->width * msg->height); - memcpy(msg->image, &buf[12], msg->width * msg->height); + if (msg->width * msg->height) { + msg->image = (char*) malloc(msg->width * msg->height); + memcpy(msg->image, &buf[12], msg->width * msg->height); + } else { + msg->image = NULL; + } } /* Buffer ist nicht erforderlich diff --git a/src/msg.h b/src/msg.h index 636d466..4525cc6 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,6 +1,8 @@ #ifndef __MSG # define __MSG +#include + //typedef struct Buffer { // int size; // void *data; diff --git a/src/net.c b/src/net.c index cd7fd0d..2dd579a 100644 --- a/src/net.c +++ b/src/net.c @@ -14,9 +14,12 @@ #include // nanosleep -#include "misc.h" // prog_info -#include "display.h" // callback +#include "net.h" + +// kleiner helfer +// auch von bejee geguttenbergt +// void *get_in_addr(struct sockaddr *sa) { if (sa->sa_family == AF_INET) { @@ -26,6 +29,10 @@ void *get_in_addr(struct sockaddr *sa) return &(((struct sockaddr_in6*)sa)->sin6_addr); } + +// server mode +// pumpt im for(;;) den status ins eth +// int run_server(const struct prog_info *pinfo) { struct addrinfo hints, *servinfo, *p; int ret; @@ -59,15 +66,18 @@ int run_server(const struct prog_info *pinfo) { tim.tv_sec = 0; tim.tv_nsec = 500000000; + // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){ fprintf(stderr, "setsockopt error"); exit(1); } + // for (;;) { printf("sending...\n"); int numbytes; + // TODO: Hier den Messageblock erstellen und serialisieren. if ((numbytes = sendto(sockfd, "bla", 3, 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("error sending"); return -44; @@ -82,7 +92,11 @@ int run_server(const struct prog_info *pinfo) { return 0; } -int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { + +// lauschangriff: +// einfach mal in den äther horchen und alle messages rausnehmen die wo da gibt. +// +int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct message *) ) { struct addrinfo hints, *servinfo; char portbuf[6]; @@ -104,7 +118,7 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { struct addrinfo *info; int sockfd; - //char s[INET6_ADDRSTRLEN]; + // mal drin lassen: falls die ip der gegenstelle relevant werden sollte: char s[INET6_ADDRSTRLEN]; for (info = servinfo; info != NULL; info = info->ai_next) { if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { perror("sock"); @@ -141,7 +155,10 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(long) ) { buf[numbytes] = '\0'; //printf("listener: packet contains \"%s\"\n", buf); - framecallback(123); + struct message *msg = (struct message *)malloc(sizeof(struct message)); + deserialize(msg, buf); + + framecallback(msg); } while (strncmp(buf, "exit", 10000)); diff --git a/src/net.h b/src/net.h index f396641..1e70d70 100644 --- a/src/net.h +++ b/src/net.h @@ -2,9 +2,12 @@ # define __NET #include // struct sockaddr +#include "misc.h" // prog_info +#include "msg.h" // message serialization +#include "display.h" // callback void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo); -int run_client(const struct prog_info *pinfo,void(*framecallback)(long)); +int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *)); #endif From 7c70cc2f8aac3929c7a6df143e44720a45a58797 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 19:34:21 +0100 Subject: [PATCH 35/76] finished message bla --- src/net.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/net.c b/src/net.c index 2dd579a..9126a4f 100644 --- a/src/net.c +++ b/src/net.c @@ -78,7 +78,17 @@ int run_server(const struct prog_info *pinfo) { printf("sending...\n"); int numbytes; // TODO: Hier den Messageblock erstellen und serialisieren. - if ((numbytes = sendto(sockfd, "bla", 3, 0, p->ai_addr, p->ai_addrlen)) == -1) { + // + struct message *outmsg = (struct message *)malloc(sizeof(struct message)); + outmsg->timestamp = (uint32_t)time(NULL); + outmsg->width = 0; + outmsg->height = 0; + outmsg->image = NULL; + int buflen = getBufferSize(outmsg); + char *outbuf = (char *)malloc(buflen); + serialize(outbuf, outmsg); + + if ((numbytes = sendto(sockfd, outbuf, buflen, 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("error sending"); return -44; } @@ -152,7 +162,7 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct //printf("listener: got packet from %s\n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); //printf("listener: packet is %d bytes long\n", numbytes); - buf[numbytes] = '\0'; + //buf[numbytes] = '\0'; //printf("listener: packet contains \"%s\"\n", buf); struct message *msg = (struct message *)malloc(sizeof(struct message)); From 69580b7b29c28705fbafae9f7e9e200c6fd5447c Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 19:45:52 +0100 Subject: [PATCH 36/76] just an update --- src/net.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/net.c b/src/net.c index 9126a4f..7be8287 100644 --- a/src/net.c +++ b/src/net.c @@ -64,7 +64,7 @@ int run_server(const struct prog_info *pinfo) { struct timespec tim; tim.tv_sec = 0; - tim.tv_nsec = 500000000; + tim.tv_nsec = 50000000; // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; @@ -74,13 +74,16 @@ int run_server(const struct prog_info *pinfo) { } // + int t = 0; for (;;) { - printf("sending...\n"); + //printf("sending...\n"); int numbytes; // TODO: Hier den Messageblock erstellen und serialisieren. - // + + t++; + t %= 10000; struct message *outmsg = (struct message *)malloc(sizeof(struct message)); - outmsg->timestamp = (uint32_t)time(NULL); + outmsg->timestamp = (uint32_t)t; //(uint32_t)time(NULL); outmsg->width = 0; outmsg->height = 0; outmsg->image = NULL; From 12ccec7c4e1551d3716a315fd2859c372dee5ea8 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:46:24 +0100 Subject: [PATCH 37/76] XD --- src/main.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.h b/src/main.h index 462af4a..c169102 100644 --- a/src/main.h +++ b/src/main.h @@ -8,7 +8,7 @@ // _,-' \%/|% // / / ) __,-- /%\ // \__/_,-'%(% ; %)% -// %\%, %\ -// '--%' -// +// / %\%, %\ +// / '--%' +// / // From 38f2f8d15fb37fe115d77a5ea58d83091e95ea5f Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:46:34 +0100 Subject: [PATCH 38/76] fix descriptions --- src/msg.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/msg.h b/src/msg.h index 636d466..ce1a858 100644 --- a/src/msg.h +++ b/src/msg.h @@ -8,8 +8,8 @@ struct message { uint32_t timestamp; - uint32_t width; // varies - uint32_t height; // normally 80 + uint32_t width; // normally 80 + uint32_t height; // normally 25, may vary //char **image; // dimension is width x height char *image; // dimension is width x height From ea6213442046bdba1dd0fb89db3d4cda4951073d Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:47:37 +0100 Subject: [PATCH 39/76] model for printing --- src/display.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/display.h | 7 +++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/display.c b/src/display.c index 593c2a1..f93c8b9 100644 --- a/src/display.c +++ b/src/display.c @@ -1,6 +1,47 @@ +#include +#include +#include +#include #include "display.h" + +void setup_display() { + initscr(); // ncurses initialization + curs_set(0); // invisible cursor +} + +void cleanup_display() { + endwin(); // clean ncurses shutdown +} + +/* + image[row][col] >>> image[row*width+col]; + + uint32_t width; // normally 80 + uint32_t height; // normally 25, may vary + char *image; // dimension is width x height +*/ +void print_current_image(message* msg, int start, int end) { + + move(0,0); + char *pic = msg->img; + + for (int row=0; row < 25; row++) { + + char *line = (char*) malloc(81); + strcpy(line, strtok(pic, '\n')); + line[81] = '\0'; + printw("%s", line); + + } + + refresh(); // refresh the screen + +} + + void callback(long tst) { printf("in callback, tst=%ld\n", tst); } + diff --git a/src/display.h b/src/display.h index c671667..736cfe7 100644 --- a/src/display.h +++ b/src/display.h @@ -1,8 +1,11 @@ #ifndef __DISPLAY #define __DISPLAY -#include - +void setup_display(); +void cleanup_display(); void callback(long tst); +void + #endif + From 70da4ca56f671e0e48233b5b429c401520b6ba31 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:51:41 +0100 Subject: [PATCH 40/76] fix bugs and add comments in print_current_image --- src/display.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/display.c b/src/display.c index ed63b7f..b2430b9 100644 --- a/src/display.c +++ b/src/display.c @@ -24,17 +24,16 @@ void cleanup_display() { char *image; // dimension is width x height */ void print_current_image(message* msg, int start, int end) { + // end is ignored and 80 is used, should be considered later - move(0,0); - char *pic = msg->img; + move(0,0); // start in the upper left corner + char *pic = msg->img; // get a ptr to the actual image - for (int row=0; row < 25; row++) { - + for (int row=0; row < 25; row++) { // iterate rows char *line = (char*) malloc(81); - strcpy(line, strtok(pic, '\n')); - line[81] = '\0'; - printw("%s", line); - + strcpy(line, strtok(pic, '\n')); // get a line + line[80] = '\0'; // terminate + printw("%s", line+start); } refresh(); // refresh the screen From fd84b083b10a2e4f4d21acd97a535f1540bca31a Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:53:53 +0100 Subject: [PATCH 41/76] shorter constant names in makefile --- Makefile | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 183c8c9..a60e1f5 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,23 @@ CFLAGS=-g -Wall -Wextra -std=gnu99 -BIN_DIR=bin -SRC_DIR=src -TARGET=$(BIN_DIR)/netsl -OBJECTS=$(BIN_DIR)/main.o $(BIN_DIR)/msg.o $(BIN_DIR)/net.o $(BIN_DIR)/display.o +BIN=bin +SRC=src +TARGET=$(BIN)/netsl +OBJECTS=$(BIN)/main.o $(BIN)/msg.o $(BIN)/net.o $(BIN)/display.o -all: $(BIN_DIR) $(TARGET) +all: $(BIN) $(TARGET) -$(BIN_DIR): - mkdir -pv $(BIN_DIR) +$(BIN): + mkdir -pv $(BIN) $(TARGET): $(OBJECTS) gcc $^ -o $(TARGET) -# mkdir -pv $(BIN_DIR) +# mkdir -pv $(BIN) -$(BIN_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h +$(BIN)/%.o: $(SRC)/%.c $(SRC)/%.h $(CC) $(CFLAGS) -o $@ -c $< - clean: - rm -rf $(BIN_DIR) - + rm -rf $(BIN) From 4cf5b1c5f47f4bb476b44f9ff7be5db6261311a7 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 19:55:55 +0100 Subject: [PATCH 42/76] added timestamp parameter to cmdln, but it is not used, yet --- src/main.c | 23 ++++++++++++++++++++++- src/misc.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 28365da..b5df47d 100644 --- a/src/main.c +++ b/src/main.c @@ -15,9 +15,17 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->mode = MODE_SERVER; pinfo->client_num = 1; pinfo->port = 4711; + pinfo->fps = 10; if (argc <= 1) { - printf("usage: %s [-s|-c ] [-p ]\n", argv[0]); + printf("usage: %s [-s|-c ] [-p ] [-t ]\n", argv[0]); + printf("where:\n -s run in server mode\n"); + printf( " -c run in client mode\n"); + printf( " num is the column offset to use.\n"); + printf( " -p use the specified port\n"); + printf( " -t when in server mode: update times per second\n"); + printf( " no use in client mode\n"); + printf("\n\n"); return -1; } int i; @@ -51,6 +59,19 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { } continue; } + if (strncmp(argv[i], "-t", 2) == 0) { + if (argc <= i+1) { + printf("fps not specified\n"); + return -6; + } + pinfo->fps = (int)strtol(argv[++i], NULL, 10); + if (pinfo->fps <= 0 || 50 <= pinfo->fps) { + printf("fps invalid!\n"); + return -7; + } + continue; + + } printf("unknown argument %s\n", argv[i]); return -6; } diff --git a/src/misc.h b/src/misc.h index f36d018..4431c1d 100644 --- a/src/misc.h +++ b/src/misc.h @@ -5,6 +5,7 @@ struct prog_info { int mode; int client_num; int port; + int fps; } prog_info; #endif From 405d4879d19cdccd9510bbf3e473ef0bc7ff7dfc Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:58:17 +0100 Subject: [PATCH 43/76] add ncurses to makefile --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a60e1f5..5f67eb5 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ CFLAGS=-g -Wall -Wextra -std=gnu99 BIN=bin SRC=src +LIBS=-lncurses TARGET=$(BIN)/netsl OBJECTS=$(BIN)/main.o $(BIN)/msg.o $(BIN)/net.o $(BIN)/display.o @@ -11,7 +12,7 @@ $(BIN): mkdir -pv $(BIN) $(TARGET): $(OBJECTS) - gcc $^ -o $(TARGET) + gcc $^ $(LIBS) -o $(TARGET) # mkdir -pv $(BIN) From 2b054a8d87d5dee2d538c93928c4b081086dfc3d Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 19:58:39 +0100 Subject: [PATCH 44/76] fix more bugs ^^ --- src/display.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/display.c b/src/display.c index b2430b9..95af3a6 100644 --- a/src/display.c +++ b/src/display.c @@ -3,9 +3,9 @@ #include #include +#include "msg.h" #include "display.h" -<<<<<<< HEAD void setup_display() { initscr(); // ncurses initialization @@ -23,11 +23,11 @@ void cleanup_display() { uint32_t height; // normally 25, may vary char *image; // dimension is width x height */ -void print_current_image(message* msg, int start, int end) { +void print_current_image(struct message* msg, int start, int end) { // end is ignored and 80 is used, should be considered later move(0,0); // start in the upper left corner - char *pic = msg->img; // get a ptr to the actual image + char *pic = msg->image; // get a ptr to the actual image for (int row=0; row < 25; row++) { // iterate rows char *line = (char*) malloc(81); From 029ff9d5c00e020d0c6b57911bf53e571d6e5bcd Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 19:58:59 +0100 Subject: [PATCH 45/76] local state --- src/display.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/display.c b/src/display.c index b2430b9..01ffa60 100644 --- a/src/display.c +++ b/src/display.c @@ -5,7 +5,6 @@ #include "display.h" -<<<<<<< HEAD void setup_display() { initscr(); // ncurses initialization @@ -23,11 +22,11 @@ void cleanup_display() { uint32_t height; // normally 25, may vary char *image; // dimension is width x height */ -void print_current_image(message* msg, int start, int end) { +void print_current_image(struct message* msg, int start, int end) { // end is ignored and 80 is used, should be considered later move(0,0); // start in the upper left corner - char *pic = msg->img; // get a ptr to the actual image + char *pic = msg->image; // get a ptr to the actual image for (int row=0; row < 25; row++) { // iterate rows char *line = (char*) malloc(81); From 9c73e6ad68534cfe19330d24504697900d010ba1 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 20:10:52 +0100 Subject: [PATCH 46/76] piece of cake --- src/display.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/display.c b/src/display.c index 95af3a6..bb1ce67 100644 --- a/src/display.c +++ b/src/display.c @@ -24,16 +24,21 @@ void cleanup_display() { char *image; // dimension is width x height */ void print_current_image(struct message* msg, int start, int end) { + end++; // suppress unused warning :-> // end is ignored and 80 is used, should be considered later move(0,0); // start in the upper left corner char *pic = msg->image; // get a ptr to the actual image - for (int row=0; row < 25; row++) { // iterate rows - char *line = (char*) malloc(81); - strcpy(line, strtok(pic, '\n')); // get a line - line[80] = '\0'; // terminate - printw("%s", line+start); + for (int row=0; row < 25; row++) { // iterate over rows + char *original_line; + original_line = strtok(pic, "\n"); + + char *line = (char*) malloc(81); // allocate a line because we modify it + strcpy(line, original_line + start); // get a line from the right start + line[80] = '\0'; // terminate it + printw("%s", line); // print it + free(line); // free it } refresh(); // refresh the screen From 562e1942d45e7101bb5deeda8349de0cdbdc8180 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 20:10:57 +0100 Subject: [PATCH 47/76] -t parameter implemented --- src/main.c | 5 +++-- src/net.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index b5df47d..c3b98ea 100644 --- a/src/main.c +++ b/src/main.c @@ -23,7 +23,8 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { printf( " -c run in client mode\n"); printf( " num is the column offset to use.\n"); printf( " -p use the specified port\n"); - printf( " -t when in server mode: update times per second\n"); + printf( " -t when in server mode: update times\n"); + printf( " per second. Valid range: 2 - 99\n"); printf( " no use in client mode\n"); printf("\n\n"); return -1; @@ -65,7 +66,7 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { return -6; } pinfo->fps = (int)strtol(argv[++i], NULL, 10); - if (pinfo->fps <= 0 || 50 <= pinfo->fps) { + if (pinfo->fps <= 1 || 50 <= pinfo->fps) { printf("fps invalid!\n"); return -7; } diff --git a/src/net.c b/src/net.c index 7be8287..8147d1c 100644 --- a/src/net.c +++ b/src/net.c @@ -64,7 +64,7 @@ int run_server(const struct prog_info *pinfo) { struct timespec tim; tim.tv_sec = 0; - tim.tv_nsec = 50000000; + tim.tv_nsec = 1000000000 / pinfo->fps; // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; From 35d9221bed1ef8847c31b9007a23148c790106a6 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 20:11:55 +0100 Subject: [PATCH 48/76] minor changes --- src/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index c3b98ea..196e690 100644 --- a/src/main.c +++ b/src/main.c @@ -88,11 +88,10 @@ int main(int argc, char **argv) { printf("port: %d\n", prog_info.port); if (prog_info.mode == MODE_SERVER) { - printf("runnin in SERVER mode\n"); + printf("runnin in SERVER mode @%d FPS\n", prog_info.fps); ret = run_server(&prog_info); } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); - // ... ret = run_client(&prog_info, callback); } From 33781be4d6268e6e02d6bf4c902d5ddfb66b4282 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 20:24:50 +0100 Subject: [PATCH 49/76] find correct positions in pic --- src/display.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/display.c b/src/display.c index bb1ce67..9d8496e 100644 --- a/src/display.c +++ b/src/display.c @@ -24,20 +24,19 @@ void cleanup_display() { char *image; // dimension is width x height */ void print_current_image(struct message* msg, int start, int end) { - end++; // suppress unused warning :-> - // end is ignored and 80 is used, should be considered later + end = 80; // end is ignored and 80 is used, should be handled properly later - move(0,0); // start in the upper left corner + //move(0,0); // start in the upper left corner char *pic = msg->image; // get a ptr to the actual image for (int row=0; row < 25; row++) { // iterate over rows - char *original_line; - original_line = strtok(pic, "\n"); - - char *line = (char*) malloc(81); // allocate a line because we modify it + char *original_line = pic + row * msg->width; // pointer to the start of the line to print + char *line = (char*) malloc(end+1); // allocate a line because we modify it strcpy(line, original_line + start); // get a line from the right start - line[80] = '\0'; // terminate it - printw("%s", line); // print it + line[end] = '\0'; // terminate it + + mvprintw(row, 0, "%s", line); // print it + free(line); // free it } From fb592b6f13278ed96a6787974d6b486d1c336ace Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 20:50:42 +0100 Subject: [PATCH 50/76] fix indizes --- src/display.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/display.c b/src/display.c index 9d8496e..69746e9 100644 --- a/src/display.c +++ b/src/display.c @@ -23,7 +23,7 @@ void cleanup_display() { uint32_t height; // normally 25, may vary char *image; // dimension is width x height */ -void print_current_image(struct message* msg, int start, int end) { +static void print_current_image(const struct message* msg, int start, int end) { end = 80; // end is ignored and 80 is used, should be handled properly later //move(0,0); // start in the upper left corner @@ -31,12 +31,11 @@ void print_current_image(struct message* msg, int start, int end) { for (int row=0; row < 25; row++) { // iterate over rows char *original_line = pic + row * msg->width; // pointer to the start of the line to print - char *line = (char*) malloc(end+1); // allocate a line because we modify it + char *line = (char*) malloc(end-start+1); // allocate a line because we modify it strcpy(line, original_line + start); // get a line from the right start - line[end] = '\0'; // terminate it + line[end-start] = '\0'; // terminate it mvprintw(row, 0, "%s", line); // print it - free(line); // free it } @@ -44,8 +43,13 @@ void print_current_image(struct message* msg, int start, int end) { } - void callback(const struct message *msg) { printf("in callback, tst=%d\n", msg->timestamp); + + int start; + + + print_current_image(msg, start, start+80); + } From 38ca85a7b32647c216ee5800815f3c6d98ad1586 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 20:57:08 +0100 Subject: [PATCH 51/76] callback extended --- README | 6 +++--- src/display.c | 2 +- src/display.h | 3 ++- src/main.c | 1 + src/net.c | 4 ++-- src/net.h | 2 +- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/README b/README index 470ea62..540df59 100644 --- a/README +++ b/README @@ -1,8 +1,8 @@ -empty hi hi must read: http://www.beej.us/guide/bgnet/ - zu c99: http://www.c-plusplus.de/forum/296310-full - +00000000011111111112222222222333333333344444444445555555555666666666677777777778 +1234567890 1234567890 1234567890 1234567890 + 1234567890 1234567890 1234567890 1234567890 diff --git a/src/display.c b/src/display.c index 69746e9..527ad9c 100644 --- a/src/display.c +++ b/src/display.c @@ -43,7 +43,7 @@ static void print_current_image(const struct message* msg, int start, int end) { } -void callback(const struct message *msg) { +void callback(const struct message *msg, const struct prog_info *pinfo) { printf("in callback, tst=%d\n", msg->timestamp); int start; diff --git a/src/display.h b/src/display.h index 96907d2..c85f409 100644 --- a/src/display.h +++ b/src/display.h @@ -3,11 +3,12 @@ #include #include "msg.h" +#include "misc.h" void setup_display(); void cleanup_display(); -void callback(const struct message *msg); +void callback(const struct message *msg, const struct prog_info *pinfo); #endif diff --git a/src/main.c b/src/main.c index 196e690..d02fd41 100644 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,7 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { printf( " -t when in server mode: update times\n"); printf( " per second. Valid range: 2 - 99\n"); printf( " no use in client mode\n"); + printf( " -v \n"); printf("\n\n"); return -1; } diff --git a/src/net.c b/src/net.c index 8147d1c..46944b7 100644 --- a/src/net.c +++ b/src/net.c @@ -109,7 +109,7 @@ int run_server(const struct prog_info *pinfo) { // lauschangriff: // einfach mal in den äther horchen und alle messages rausnehmen die wo da gibt. // -int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct message *) ) { +int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct message *, const struct prog_info *) ) { struct addrinfo hints, *servinfo; char portbuf[6]; @@ -171,7 +171,7 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct struct message *msg = (struct message *)malloc(sizeof(struct message)); deserialize(msg, buf); - framecallback(msg); + framecallback(msg, pinfo); } while (strncmp(buf, "exit", 10000)); diff --git a/src/net.h b/src/net.h index 1e70d70..0719433 100644 --- a/src/net.h +++ b/src/net.h @@ -8,6 +8,6 @@ void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo); -int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *)); +int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); #endif From 174082b281c2a8397cc84653014a14a9fcd4907e Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 21:16:12 +0100 Subject: [PATCH 52/76] some refactoring --- src/display.c | 6 +++--- src/main.c | 16 ++++++++-------- src/main.h | 2 +- src/misc.h | 5 +++-- src/msg.c | 3 +-- src/msg.h | 3 ++- src/net.h | 3 ++- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/display.c b/src/display.c index 527ad9c..795703e 100644 --- a/src/display.c +++ b/src/display.c @@ -46,9 +46,9 @@ static void print_current_image(const struct message* msg, int start, int end) { void callback(const struct message *msg, const struct prog_info *pinfo) { printf("in callback, tst=%d\n", msg->timestamp); - int start; - - + // calculate the actual offset to use + int start = msg->timestamp % msg->width + pinfo->client_offset; + print_current_image(msg, start, start+80); } diff --git a/src/main.c b/src/main.c index d02fd41..1990010 100644 --- a/src/main.c +++ b/src/main.c @@ -13,19 +13,19 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->mode = MODE_SERVER; - pinfo->client_num = 1; + pinfo->client_offset = 1; pinfo->port = 4711; pinfo->fps = 10; if (argc <= 1) { printf("usage: %s [-s|-c ] [-p ] [-t ]\n", argv[0]); printf("where:\n -s run in server mode\n"); - printf( " -c run in client mode\n"); - printf( " num is the column offset to use.\n"); + printf( " -c run in client mode\n"); + printf( " off is the column offset to use.\n"); printf( " -p use the specified port\n"); printf( " -t when in server mode: update times\n"); printf( " per second. Valid range: 2 - 99\n"); - printf( " no use in client mode\n"); + printf( " ignored in client mode\n"); printf( " -v \n"); printf("\n\n"); return -1; @@ -42,8 +42,8 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { printf("client number not specified\n"); return -2; } - pinfo->client_num = (int)strtol(argv[++i], NULL, 10); - if (pinfo->client_num <= 0) { + pinfo->client_offset = (int)strtol(argv[++i], NULL, 10); + if (pinfo->client_offset <= 0) { printf("invalid client number!\n"); return -3; } @@ -89,10 +89,10 @@ int main(int argc, char **argv) { printf("port: %d\n", prog_info.port); if (prog_info.mode == MODE_SERVER) { - printf("runnin in SERVER mode @%d FPS\n", prog_info.fps); + printf("running in SERVER mode @%d FPS\n", prog_info.fps); ret = run_server(&prog_info); } else { - printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); + printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); ret = run_client(&prog_info, callback); } diff --git a/src/main.h b/src/main.h index c169102..0bfc895 100644 --- a/src/main.h +++ b/src/main.h @@ -1,5 +1,5 @@ // nüscht ... -// +// // // // diff --git a/src/misc.h b/src/misc.h index 4431c1d..288e3c8 100644 --- a/src/misc.h +++ b/src/misc.h @@ -1,11 +1,12 @@ #ifndef __MISC -# define __MISC +#define __MISC struct prog_info { int mode; - int client_num; + int client_offset; int port; int fps; } prog_info; #endif + diff --git a/src/msg.c b/src/msg.c index 70bc7fc..7bc8f46 100644 --- a/src/msg.c +++ b/src/msg.c @@ -13,7 +13,7 @@ void serialize (char *buf, struct message *msg) { memcpy(&buf[0], &msg->timestamp, 4); memcpy(&buf[4], &msg->width, 4); memcpy(&buf[8], &msg->height, 4); - if (msg->width * msg->height) + if (msg->width * msg->height) memcpy(&buf[12], msg->image, msg->width * msg->height); } @@ -90,4 +90,3 @@ int main() { } */ - diff --git a/src/msg.h b/src/msg.h index cf3f3fc..2a4d9a7 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,5 +1,5 @@ #ifndef __MSG -# define __MSG +#define __MSG #include @@ -34,3 +34,4 @@ void serialize_message(struct message *msg,Buffer *b); */ #endif + diff --git a/src/net.h b/src/net.h index 0719433..3e8b189 100644 --- a/src/net.h +++ b/src/net.h @@ -1,5 +1,5 @@ #ifndef __NET -# define __NET +#define __NET #include // struct sockaddr #include "misc.h" // prog_info @@ -11,3 +11,4 @@ int run_server(const struct prog_info *pinfo); int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); #endif + From 2aae8fbc4c09284d959dd4e17f1d5c0b46867d23 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 21:16:12 +0100 Subject: [PATCH 53/76] some refactoring --- src/display.c | 6 +++--- src/main.c | 16 ++++++++-------- src/main.h | 2 +- src/misc.h | 5 +++-- src/msg.c | 3 +-- src/msg.h | 3 ++- src/net.c | 26 +++++++++++++------------- src/net.h | 11 ++++++----- 8 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/display.c b/src/display.c index 527ad9c..795703e 100644 --- a/src/display.c +++ b/src/display.c @@ -46,9 +46,9 @@ static void print_current_image(const struct message* msg, int start, int end) { void callback(const struct message *msg, const struct prog_info *pinfo) { printf("in callback, tst=%d\n", msg->timestamp); - int start; - - + // calculate the actual offset to use + int start = msg->timestamp % msg->width + pinfo->client_offset; + print_current_image(msg, start, start+80); } diff --git a/src/main.c b/src/main.c index d02fd41..1990010 100644 --- a/src/main.c +++ b/src/main.c @@ -13,19 +13,19 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->mode = MODE_SERVER; - pinfo->client_num = 1; + pinfo->client_offset = 1; pinfo->port = 4711; pinfo->fps = 10; if (argc <= 1) { printf("usage: %s [-s|-c ] [-p ] [-t ]\n", argv[0]); printf("where:\n -s run in server mode\n"); - printf( " -c run in client mode\n"); - printf( " num is the column offset to use.\n"); + printf( " -c run in client mode\n"); + printf( " off is the column offset to use.\n"); printf( " -p use the specified port\n"); printf( " -t when in server mode: update times\n"); printf( " per second. Valid range: 2 - 99\n"); - printf( " no use in client mode\n"); + printf( " ignored in client mode\n"); printf( " -v \n"); printf("\n\n"); return -1; @@ -42,8 +42,8 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { printf("client number not specified\n"); return -2; } - pinfo->client_num = (int)strtol(argv[++i], NULL, 10); - if (pinfo->client_num <= 0) { + pinfo->client_offset = (int)strtol(argv[++i], NULL, 10); + if (pinfo->client_offset <= 0) { printf("invalid client number!\n"); return -3; } @@ -89,10 +89,10 @@ int main(int argc, char **argv) { printf("port: %d\n", prog_info.port); if (prog_info.mode == MODE_SERVER) { - printf("runnin in SERVER mode @%d FPS\n", prog_info.fps); + printf("running in SERVER mode @%d FPS\n", prog_info.fps); ret = run_server(&prog_info); } else { - printf("running in CLIENT mode, using client number %d\n", prog_info.client_num); + printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); ret = run_client(&prog_info, callback); } diff --git a/src/main.h b/src/main.h index c169102..0bfc895 100644 --- a/src/main.h +++ b/src/main.h @@ -1,5 +1,5 @@ // nüscht ... -// +// // // // diff --git a/src/misc.h b/src/misc.h index 4431c1d..288e3c8 100644 --- a/src/misc.h +++ b/src/misc.h @@ -1,11 +1,12 @@ #ifndef __MISC -# define __MISC +#define __MISC struct prog_info { int mode; - int client_num; + int client_offset; int port; int fps; } prog_info; #endif + diff --git a/src/msg.c b/src/msg.c index 70bc7fc..7bc8f46 100644 --- a/src/msg.c +++ b/src/msg.c @@ -13,7 +13,7 @@ void serialize (char *buf, struct message *msg) { memcpy(&buf[0], &msg->timestamp, 4); memcpy(&buf[4], &msg->width, 4); memcpy(&buf[8], &msg->height, 4); - if (msg->width * msg->height) + if (msg->width * msg->height) memcpy(&buf[12], msg->image, msg->width * msg->height); } @@ -90,4 +90,3 @@ int main() { } */ - diff --git a/src/msg.h b/src/msg.h index cf3f3fc..2a4d9a7 100644 --- a/src/msg.h +++ b/src/msg.h @@ -1,5 +1,5 @@ #ifndef __MSG -# define __MSG +#define __MSG #include @@ -34,3 +34,4 @@ void serialize_message(struct message *msg,Buffer *b); */ #endif + diff --git a/src/net.c b/src/net.c index 46944b7..d005b1b 100644 --- a/src/net.c +++ b/src/net.c @@ -22,11 +22,11 @@ // void *get_in_addr(struct sockaddr *sa) { - if (sa->sa_family == AF_INET) { - return &(((struct sockaddr_in*)sa)->sin_addr); - } + if (sa->sa_family == AF_INET) { + return &(((struct sockaddr_in*)sa)->sin_addr); + } - return &(((struct sockaddr_in6*)sa)->sin6_addr); + return &(((struct sockaddr_in6*)sa)->sin6_addr); } @@ -46,14 +46,14 @@ int run_server(const struct prog_info *pinfo) { sprintf(portbuf, "%d", pinfo->port); if ((ret=getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); - return 1; + return 1; } for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { - perror("talker: socket"); - continue; - } + perror("talker: socket"); + continue; + } break; } @@ -68,7 +68,7 @@ int run_server(const struct prog_info *pinfo) { // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; - if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){ + if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){ fprintf(stderr, "setsockopt error"); exit(1); } @@ -115,8 +115,8 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct char portbuf[6]; memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_INET; // IPv4 - hints.ai_socktype = SOCK_DGRAM; // UDP + hints.ai_family = AF_INET; // IPv4 + hints.ai_socktype = SOCK_DGRAM; // UDP hints.ai_flags = AI_PASSIVE; sprintf(portbuf, "%d", pinfo->port); @@ -159,8 +159,8 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct char buf[10000]; do { if ((numbytes = recvfrom(sockfd, buf, 9999 , 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { - perror("recvfrom"); - exit(1); + perror("recvfrom"); + exit(1); } //printf("listener: got packet from %s\n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); diff --git a/src/net.h b/src/net.h index 0719433..69e60cd 100644 --- a/src/net.h +++ b/src/net.h @@ -1,13 +1,14 @@ #ifndef __NET -# define __NET +#define __NET -#include // struct sockaddr -#include "misc.h" // prog_info -#include "msg.h" // message serialization -#include "display.h" // callback +#include // struct sockaddr +#include "misc.h" // prog_info +#include "msg.h" // message serialization +#include "display.h" // callback void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo); int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); #endif + From 1adac2fce032c0e31617785bc92f9b2aad8f0f81 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 21:21:20 +0100 Subject: [PATCH 54/76] pull prep --- src/display.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/display.c b/src/display.c index 527ad9c..904b719 100644 --- a/src/display.c +++ b/src/display.c @@ -53,3 +53,25 @@ void callback(const struct message *msg, const struct prog_info *pinfo) { } + + +void prntscreen(const struct message *msg, const struct prog_info *pinfo) { + static int init = 0; + static int rows; + static int cols; + if (!init) { + initscr(); + getmaxyx(stdscr, rows, cols); + + init = 1; + } + + int frame = msg->frame; + int right = pinfo->client_offset; + int left = right + cols; + + int pos = frame + off; + + + refresh(); +} From 2c9b50707858574e65047d12b75e35775c10e39c Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 21:45:42 +0100 Subject: [PATCH 55/76] my first alphabet train ;) --- src/display.c | 26 ++++++++++++++++++-------- src/main.c | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/display.c b/src/display.c index 41a8c3e..a120639 100644 --- a/src/display.c +++ b/src/display.c @@ -43,35 +43,45 @@ static void print_current_image(const struct message* msg, int start, int end) { } +void prntscreen(const struct message *msg, const struct prog_info *pinfo); + void callback(const struct message *msg, const struct prog_info *pinfo) { - printf("in callback, tst=%d\n", msg->timestamp); +// printf("in callback, tst=%d\n", msg->timestamp); // calculate the actual offset to use - int start = msg->timestamp % msg->width + pinfo->client_offset; + //int start = msg->timestamp % msg->width + pinfo->client_offset; - print_current_image(msg, start, start+80); - + //print_current_image(msg, start, start+80); + prntscreen(msg, pinfo); } - +//int init = 0; +//int rows; +//int cols; void prntscreen(const struct message *msg, const struct prog_info *pinfo) { static int init = 0; static int rows; static int cols; if (!init) { +// printf("init start\n"); initscr(); getmaxyx(stdscr, rows, cols); init = 1; +// printf("init end\n"); } - int frame = msg->frame; + int frame = msg->timestamp; int right = pinfo->client_offset; int left = right + cols; - int pos = frame + off; - +// printf("loop\n"); + for (int y=0; y<10; y++) { // yheight; y++) { + for (int x=left-frame; xfps = (int)strtol(argv[++i], NULL, 10); - if (pinfo->fps <= 1 || 50 <= pinfo->fps) { + if (pinfo->fps <= 1 || 100 <= pinfo->fps) { printf("fps invalid!\n"); return -7; } From 70076b0b4e838965ce3cc7090a1ba60fc5bbac52 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 21:55:33 +0100 Subject: [PATCH 56/76] add cleanup_display call in case of SIGINT --- src/display.c | 2 +- src/main.c | 1 + src/net.c | 2 +- src/net.h | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/display.c b/src/display.c index a120639..6c3845c 100644 --- a/src/display.c +++ b/src/display.c @@ -57,7 +57,7 @@ void callback(const struct message *msg, const struct prog_info *pinfo) { //int init = 0; -//int rows; +//int rows; //int cols; void prntscreen(const struct message *msg, const struct prog_info *pinfo) { static int init = 0; diff --git a/src/main.c b/src/main.c index aec99a1..f50ded8 100644 --- a/src/main.c +++ b/src/main.c @@ -93,6 +93,7 @@ int main(int argc, char **argv) { ret = run_server(&prog_info); } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); + signal(SIGINT,&cleanup_display); ret = run_client(&prog_info, callback); } diff --git a/src/net.c b/src/net.c index d005b1b..63410a1 100644 --- a/src/net.c +++ b/src/net.c @@ -152,7 +152,7 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct printf("check!\n"); freeaddrinfo(servinfo); // free whole list - + struct sockaddr_storage their_addr; socklen_t addr_len = sizeof their_addr; int numbytes; diff --git a/src/net.h b/src/net.h index 69e60cd..0baf860 100644 --- a/src/net.h +++ b/src/net.h @@ -4,7 +4,7 @@ #include // struct sockaddr #include "misc.h" // prog_info #include "msg.h" // message serialization -#include "display.h" // callback +#include "display.h" // callback void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo); From 92a9d59337f5a3c303cb19c8b459904d3c9ce021 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 22:30:30 +0100 Subject: [PATCH 57/76] image reader --- Makefile | 2 +- image | 10 ++++++++++ src/display.c | 4 ++-- src/image.c | 31 +++++++++++++++++++++++++++++++ src/image.h | 12 ++++++++++++ 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 image create mode 100644 src/image.c create mode 100644 src/image.h diff --git a/Makefile b/Makefile index 5f67eb5..5cda73f 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BIN=bin SRC=src LIBS=-lncurses TARGET=$(BIN)/netsl -OBJECTS=$(BIN)/main.o $(BIN)/msg.o $(BIN)/net.o $(BIN)/display.o +OBJECTS=$(BIN)/main.o $(BIN)/msg.o $(BIN)/net.o $(BIN)/display.o $(BIN)/image.o all: $(BIN) $(TARGET) diff --git a/image b/image new file mode 100644 index 0000000..68ce63c --- /dev/null +++ b/image @@ -0,0 +1,10 @@ + + _,-%/%| + _,-' \//%\ + _,-' \%/|% + / / ) __,-- /%\ + \__/_,-'%(% ; %)% + / %\%, %\ + / '--%' + / + diff --git a/src/display.c b/src/display.c index a120639..11982c4 100644 --- a/src/display.c +++ b/src/display.c @@ -77,9 +77,9 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { int left = right + cols; // printf("loop\n"); - for (int y=0; y<10; y++) { // yheight; y++) { + for (int y=0; y<50; y++) { // yheight; y++) { for (int x=left-frame; x*cols?len:*cols; + (*rows)++; + } + + cols--; + ret = (char *)malloc(*cols * *rows); + memset(ret, ' ', *cols * *rows); + fseek(f, 0, SEEK_SET); + for (int r=0; r<*rows; r++) { + fgets(&ret[r * *cols], *cols, f); + } + + fclose(f); + } + free(linebuf); + + return ret; +} diff --git a/src/image.h b/src/image.h new file mode 100644 index 0000000..4735e46 --- /dev/null +++ b/src/image.h @@ -0,0 +1,12 @@ +#ifndef __IMAGE +#define __IMAGE + +#include +#include +#include + +#define LINELEN 20000 + +char *readImage(const char* filename, int *cols, int *rows); + +#endif From e6b2657e899b34ae38f7a218195d877c4b5d35e9 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 22:32:21 +0100 Subject: [PATCH 58/76] solved conflicts for fun and profit --- src/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.c b/src/main.c index f50ded8..91ff411 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,10 @@ #include +#include #include #include #include + #include "misc.h" #include "net.h" #include "display.h" From cea99d03df2b5d9665c324520306a611feaf3144 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 22:32:58 +0100 Subject: [PATCH 59/76] pic --- pic | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 pic diff --git a/pic b/pic new file mode 100644 index 0000000..0a4d883 --- /dev/null +++ b/pic @@ -0,0 +1,25 @@ + + + + + + + + (******) + (*****) + (****) + (***) + (**) + [~] + | | (~) (~) (~) /~~~~~~~~~~~~ + /~~~~~~~~~~~~~~~~~~~~~~~ [~_~_] | * * * /~~~~~~~~~~~| + [| %___________________ | |~~~~~~~~ | + //\[___] ___ ___ ___\ | | | + /// [___+/-+-\-/-+-\-/-+ \\_________|=|____________________|= + //// @-=-@ \___/ \___/ \___/ @-==-@ @-==-@ @-==-@ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + + + From 89683645da3a94fd9409e998c98b8130dc2d9616 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 22:52:42 +0100 Subject: [PATCH 60/76] improve readability --- src/display.c | 16 ++++++++-------- src/ger.h | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 src/ger.h diff --git a/src/display.c b/src/display.c index 56fb367..423971e 100644 --- a/src/display.c +++ b/src/display.c @@ -5,7 +5,7 @@ #include "msg.h" #include "display.h" - +#include "ger.h" void setup_display() { initscr(); // ncurses initialization @@ -23,26 +23,26 @@ void cleanup_display() { uint32_t height; // normally 25, may vary char *image; // dimension is width x height */ -static void print_current_image(const struct message* msg, int start, int end) { +statisch nichts print_current_image(konstant struktur message* msg, zahl start, zahl end) { end = 80; // end is ignored and 80 is used, should be handled properly later //move(0,0); // start in the upper left corner - char *pic = msg->image; // get a ptr to the actual image + zeichen *pic = msg->image; // get a ptr to the actual image - for (int row=0; row < 25; row++) { // iterate over rows - char *original_line = pic + row * msg->width; // pointer to the start of the line to print - char *line = (char*) malloc(end-start+1); // allocate a line because we modify it + fuer (zahl row=0; row < 25; row++) { // iterate over rows + zeichen *original_line = pic + row * msg->width; // pointer to the start of the line to print + zeichen *line = (zeichen*) reserviere(end-start+1); // allocate a line because we modify it strcpy(line, original_line + start); // get a line from the right start line[end-start] = '\0'; // terminate it mvprintw(row, 0, "%s", line); // print it - free(line); // free it + befreie(line); // free it } refresh(); // refresh the screen - } + void prntscreen(const struct message *msg, const struct prog_info *pinfo); void callback(const struct message *msg, const struct prog_info *pinfo) { diff --git a/src/ger.h b/src/ger.h new file mode 100644 index 0000000..fa0f1f2 --- /dev/null +++ b/src/ger.h @@ -0,0 +1,35 @@ +#ifndef __GER +#define __GER + +#define wenn if +#define sonst else +#define fuer for +#define waehrend while +#define tue do + +#define statisch static +#define konstant const +#define struktur struct + +#define nichts void +#define wahrheitswert bool +#define zeichen char +#define kurz short +#define zahl int +#define lang long +#define fliess float +#define doppel double + +#define wahr true +#define falsch false + +#define zurueckliefern return +#define haupt main +#define druckenf printf +#define schlaf sleep +#define uschlaf usleep +#define reserviere malloc +#define befreie free + +#endif + From 80e2179bcf9d5a9e7575c7da653f826d0d758277 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 22:54:28 +0100 Subject: [PATCH 61/76] transmission of image transfer --- pic | 4 ---- src/main.c | 58 +++++++++++++++++++++++++++++++++++++++++++----------- src/misc.h | 2 ++ src/net.c | 16 ++++++++++----- src/net.h | 2 +- 5 files changed, 60 insertions(+), 22 deletions(-) diff --git a/pic b/pic index 0a4d883..f2bcf08 100644 --- a/pic +++ b/pic @@ -1,10 +1,6 @@ - - - - (******) (*****) (****) diff --git a/src/main.c b/src/main.c index 91ff411..0aedce2 100644 --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,7 @@ #include "misc.h" #include "net.h" #include "display.h" +#include "image.h" #define MODE_SERVER 0 #define MODE_CLIENT 1 @@ -18,17 +19,20 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->client_offset = 1; pinfo->port = 4711; pinfo->fps = 10; + pinfo->width = -1; + pinfo->filename = NULL; if (argc <= 1) { - printf("usage: %s [-s|-c ] [-p ] [-t ]\n", argv[0]); - printf("where:\n -s run in server mode\n"); - printf( " -c run in client mode\n"); - printf( " off is the column offset to use.\n"); - printf( " -p use the specified port\n"); - printf( " -t when in server mode: update times\n"); - printf( " per second. Valid range: 2 - 99\n"); - printf( " ignored in client mode\n"); - printf( " -v \n"); + printf("usage: %s [-s|-c ] [-p ] [-t ] [-w ] -i \n", argv[0]); + printf("where:\n -s run in server mode\n"); + printf( " -c run in client mode\n"); + printf( " off is the column offset to use.\n"); + printf( " -p use the specified port\n"); + printf( " -t when in server mode: update times\n"); + printf( " per second. Valid range: 2 - 99\n"); + printf( " ignored in client mode\n"); + printf( " -w maximum width of the whole field. server only.\n"); + printf( " -i image fielname. server only\n"); printf("\n\n"); return -1; } @@ -74,10 +78,29 @@ int parseArgs(struct prog_info *pinfo, int argc, char **argv) { return -7; } continue; - + } + if (strncmp(argv[i], "-w", 2) == 0) { + if (argc <= i+1) { + printf("width not specified\n"); + return -8; + } + pinfo->width = (int)strtol(argv[++i], NULL, 10); + if (pinfo->width <= 1) { + printf("width invalid!\n"); + return -9; + } + continue; + } + if (strncmp(argv[i], "-i", 2) == 0) { + if (argc <= i+1) { + printf("image filename not specified\n"); + return -10; + } + pinfo->filename = argv[++i]; + continue; } printf("unknown argument %s\n", argv[i]); - return -6; + return -11; } return 0; @@ -92,7 +115,18 @@ int main(int argc, char **argv) { printf("port: %d\n", prog_info.port); if (prog_info.mode == MODE_SERVER) { printf("running in SERVER mode @%d FPS\n", prog_info.fps); - ret = run_server(&prog_info); + if (!prog_info.filename) { + printf("no image given\n"); + return -12; + } + int w, h; + char *image = readImage(prog_info.filename, &w, &h); + if (!image) { + printf("could not read image!\n"); + return -13; + } + prog_info.width = prog_info.width>(w*2)?prog_info.width:(w*2); + ret = run_server(&prog_info, image, w, h); } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); signal(SIGINT,&cleanup_display); diff --git a/src/misc.h b/src/misc.h index 288e3c8..fa8f428 100644 --- a/src/misc.h +++ b/src/misc.h @@ -6,6 +6,8 @@ struct prog_info { int client_offset; int port; int fps; + int width; + char *filename; } prog_info; #endif diff --git a/src/net.c b/src/net.c index 63410a1..34fe41c 100644 --- a/src/net.c +++ b/src/net.c @@ -33,7 +33,7 @@ void *get_in_addr(struct sockaddr *sa) // server mode // pumpt im for(;;) den status ins eth // -int run_server(const struct prog_info *pinfo) { +int run_server(const struct prog_info *pinfo, char *img, int w, int h) { struct addrinfo hints, *servinfo, *p; int ret; int sockfd; @@ -81,12 +81,18 @@ int run_server(const struct prog_info *pinfo) { // TODO: Hier den Messageblock erstellen und serialisieren. t++; - t %= 10000; + t %= pinfo->width; struct message *outmsg = (struct message *)malloc(sizeof(struct message)); outmsg->timestamp = (uint32_t)t; //(uint32_t)time(NULL); - outmsg->width = 0; - outmsg->height = 0; - outmsg->image = NULL; + if ((t % 100) == 0) { + outmsg->width = w; + outmsg->height = h; + outmsg->image = img; + } else { + outmsg->width = 0; + outmsg->height = 0; + outmsg->image = NULL; + } int buflen = getBufferSize(outmsg); char *outbuf = (char *)malloc(buflen); serialize(outbuf, outmsg); diff --git a/src/net.h b/src/net.h index 0baf860..fc3584b 100644 --- a/src/net.h +++ b/src/net.h @@ -7,7 +7,7 @@ #include "display.h" // callback void *get_in_addr(struct sockaddr *sa); -int run_server(const struct prog_info *pinfo); +int run_server(const struct prog_info *pinfo, char *img, int w, int h); int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); #endif From 556189ee3aee9db6372444cc1bcb01c29c7b4094 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 23:14:08 +0100 Subject: [PATCH 62/76] image.c: use MAX --- src/display.c | 2 +- src/image.c | 10 +++++++++- src/image.h | 6 ------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/display.c b/src/display.c index 423971e..70abff4 100644 --- a/src/display.c +++ b/src/display.c @@ -46,7 +46,7 @@ statisch nichts print_current_image(konstant struktur message* msg, zahl start, void prntscreen(const struct message *msg, const struct prog_info *pinfo); void callback(const struct message *msg, const struct prog_info *pinfo) { -// printf("in callback, tst=%d\n", msg->timestamp); + //printf("in callback, tst=%d\n", msg->timestamp); // calculate the actual offset to use //int start = msg->timestamp % msg->width + pinfo->client_offset; diff --git a/src/image.c b/src/image.c index 2362efc..1840c58 100644 --- a/src/image.c +++ b/src/image.c @@ -1,5 +1,12 @@ +#include +#include +#include +#include // MAX + #include "image.h" +#define LINELEN 20000 + char *readImage(const char* filename, int *cols, int *rows) { FILE *f = fopen(filename, "r"); @@ -11,7 +18,7 @@ char *readImage(const char* filename, int *cols, int *rows) { if (!f) { while (fgets(linebuf, LINELEN, f)) { int len = strlen(linebuf); - *cols = len>*cols?len:*cols; + *cols = MAX(len, *cols); (*rows)++; } @@ -29,3 +36,4 @@ char *readImage(const char* filename, int *cols, int *rows) { return ret; } + diff --git a/src/image.h b/src/image.h index 4735e46..b3b7ba0 100644 --- a/src/image.h +++ b/src/image.h @@ -1,12 +1,6 @@ #ifndef __IMAGE #define __IMAGE -#include -#include -#include - -#define LINELEN 20000 - char *readImage(const char* filename, int *cols, int *rows); #endif From 7e590c384f6f5db43ed4ecd2b683d2bd8148bb66 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 23:16:56 +0100 Subject: [PATCH 63/76] die correctly --- src/main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 0aedce2..55d08e0 100644 --- a/src/main.c +++ b/src/main.c @@ -13,6 +13,10 @@ #define MODE_SERVER 0 #define MODE_CLIENT 1 +void die() { + cleanup_display(); + exit(1); +} int parseArgs(struct prog_info *pinfo, int argc, char **argv) { pinfo->mode = MODE_SERVER; @@ -129,7 +133,8 @@ int main(int argc, char **argv) { ret = run_server(&prog_info, image, w, h); } else { printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); - signal(SIGINT,&cleanup_display); + signal(SIGINT,&die); + signal(SIGTERM,&die); ret = run_client(&prog_info, callback); } From ebda45910938a93b6164d98d0443d54d8f9cd9c0 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sat, 2 Nov 2013 23:18:39 +0100 Subject: [PATCH 64/76] number => offset --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 55d08e0..5e1479c 100644 --- a/src/main.c +++ b/src/main.c @@ -132,7 +132,7 @@ int main(int argc, char **argv) { prog_info.width = prog_info.width>(w*2)?prog_info.width:(w*2); ret = run_server(&prog_info, image, w, h); } else { - printf("running in CLIENT mode, using client number %d\n", prog_info.client_offset); + printf("running in CLIENT mode, using client offset %d\n", prog_info.client_offset); signal(SIGINT,&die); signal(SIGTERM,&die); ret = run_client(&prog_info, callback); From 108e1a79bab5f6fdad93f56999c337993067beb3 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sat, 2 Nov 2013 23:39:48 +0100 Subject: [PATCH 65/76] tmp --- src/display.c | 18 ++++++++++++++++-- src/image.c | 6 ++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/display.c b/src/display.c index 423971e..52dd522 100644 --- a/src/display.c +++ b/src/display.c @@ -63,6 +63,9 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { static int init = 0; static int rows; static int cols; + static char *img = NULL; + static int w; + static int h; if (!init) { // printf("init start\n"); initscr(); @@ -71,15 +74,26 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { init = 1; // printf("init end\n"); } + if (!img && msg->image) { + img = msg->image; + w = msg->width; + h = msg->height; + } + + if (!img) + return; int frame = msg->timestamp; int right = pinfo->client_offset; int left = right + cols; // printf("loop\n"); - for (int y=0; y<50; y++) { // yheight; y++) { + int rowoffset = (rows-h)/2; + int coloffset = left-frame; + for (int y=0; yheight; y++) { for (int x=left-frame; x*cols?len:*cols; From d0d12aa0aa8a6b81784951bce6128567c8c20571 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sun, 3 Nov 2013 13:13:48 +0100 Subject: [PATCH 66/76] buggy image output --- src/display.c | 24 ++++++++++++++---------- src/net.c | 3 +-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/display.c b/src/display.c index d45b3cf..938a6c9 100644 --- a/src/display.c +++ b/src/display.c @@ -66,6 +66,16 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { static char *img = NULL; static int w; static int h; + if (!img && msg->image) { + img = msg->image; + w = msg->width; + h = msg->height; + } + if (!img) { + printf("awaiting state ... %d\r", msg->timestamp); + return; + } + if (!init) { // printf("init start\n"); initscr(); @@ -74,14 +84,6 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { init = 1; // printf("init end\n"); } - if (!img && msg->image) { - img = msg->image; - w = msg->width; - h = msg->height; - } - - if (!img) - return; int frame = msg->timestamp; int right = pinfo->client_offset; @@ -92,8 +94,10 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { int coloffset = left-frame; for (int y=0; yheight; y++) { for (int x=left-frame; x=w?' ':img[y*w+p]); } } diff --git a/src/net.c b/src/net.c index 34fe41c..378e4a3 100644 --- a/src/net.c +++ b/src/net.c @@ -78,7 +78,6 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { for (;;) { //printf("sending...\n"); int numbytes; - // TODO: Hier den Messageblock erstellen und serialisieren. t++; t %= pinfo->width; @@ -99,7 +98,7 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { if ((numbytes = sendto(sockfd, outbuf, buflen, 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("error sending"); - return -44; + return -42; } nanosleep(&tim, NULL); } From de9b0555a74c29705f61a56ade38ac4cd8429c02 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sun, 3 Nov 2013 13:14:25 +0100 Subject: [PATCH 67/76] new get_in_addr --- src/net.c | 25 ++++++++++++++----------- src/net.h | 1 - 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/net.c b/src/net.c index 34fe41c..1410406 100644 --- a/src/net.c +++ b/src/net.c @@ -17,16 +17,19 @@ #include "net.h" -// kleiner helfer -// auch von bejee geguttenbergt -// -void *get_in_addr(struct sockaddr *sa) -{ - if (sa->sa_family == AF_INET) { - return &(((struct sockaddr_in*)sa)->sin_addr); +// little helper +static void *get_in_addr(struct sockaddr *sa) { + switch (sa->sa_family) { + case AF_INET: + return &(((struct sockaddr_in*)sa)->sin_addr); + break; + case AF_INET6: + return &(((struct sockaddr_in6*)sa)->sin6_addr); + break; + case AF_UNSPEC: + default: + return NULL; } - - return &(((struct sockaddr_in6*)sa)->sin6_addr); } @@ -46,10 +49,10 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { sprintf(portbuf, "%d", pinfo->port); if ((ret=getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); - return 1; + return 1; } - for(p = servinfo; p != NULL; p = p->ai_next) { + for (p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("talker: socket"); continue; diff --git a/src/net.h b/src/net.h index fc3584b..7a4e9ae 100644 --- a/src/net.h +++ b/src/net.h @@ -6,7 +6,6 @@ #include "msg.h" // message serialization #include "display.h" // callback -void *get_in_addr(struct sockaddr *sa); int run_server(const struct prog_info *pinfo, char *img, int w, int h); int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); From f9889e443a8d20ababae0fb90db48a6f378353b9 Mon Sep 17 00:00:00 2001 From: tkarrass Date: Sun, 3 Nov 2013 13:38:15 +0100 Subject: [PATCH 68/76] working #1 --- src/display.c | 8 +++++++- src/image.c | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/display.c b/src/display.c index 938a6c9..6f2dce3 100644 --- a/src/display.c +++ b/src/display.c @@ -89,12 +89,18 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { int right = pinfo->client_offset; int left = right + cols; +// for (int y=0; yheight; y++) { for (int x=left-frame; x=w?' ':img[y*w+p]); diff --git a/src/image.c b/src/image.c index 6c37a44..233cc7b 100644 --- a/src/image.c +++ b/src/image.c @@ -20,22 +20,32 @@ char *readImage(const char* filename, int *cols, int *rows) { if (f) { while (fgets(linebuf, LINELEN, f)) { int len = strlen(linebuf); - *cols = MAX(len, *cols); + *cols = len>*cols?len:*cols; (*rows)++; } - cols--; - ret = (char *)malloc(*cols * *rows); + (*cols)--; + ret = (char *)malloc(*cols * *rows + 1); memset(ret, ' ', *cols * *rows); fseek(f, 0, SEEK_SET); for (int r=0; r<*rows; r++) { - fgets(&ret[r * *cols], *cols, f); + fgets(&ret[r * *cols], LINELEN, f); } fclose(f); } free(linebuf); + printf("image size: %d x %d\n", *cols, *rows); + + for (int y=0; y < *rows; y++) { + for (int x=0; x < *cols; x++) { + //mvaddch(y,x,img[y * *cols +x]); + printf("%c", ret[y * *cols +x]); + } + printf("\n"); + } + return ret; } From 66a4e9bf50331e623a1c08da82f2c0431065fe5f Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sun, 3 Nov 2013 16:06:36 +0100 Subject: [PATCH 69/76] some refactoring --- src/display.c | 22 +++++++++++----------- src/ger.h | 35 ----------------------------------- src/main.c | 4 ++-- src/net.c | 32 +++++++++++++++----------------- 4 files changed, 28 insertions(+), 65 deletions(-) delete mode 100644 src/ger.h diff --git a/src/display.c b/src/display.c index 6f2dce3..faeba70 100644 --- a/src/display.c +++ b/src/display.c @@ -5,7 +5,6 @@ #include "msg.h" #include "display.h" -#include "ger.h" void setup_display() { initscr(); // ncurses initialization @@ -23,20 +22,20 @@ void cleanup_display() { uint32_t height; // normally 25, may vary char *image; // dimension is width x height */ -statisch nichts print_current_image(konstant struktur message* msg, zahl start, zahl end) { +static void print_current_image(const struct message* msg, int start, int end) { end = 80; // end is ignored and 80 is used, should be handled properly later //move(0,0); // start in the upper left corner - zeichen *pic = msg->image; // get a ptr to the actual image + char *pic = msg->image; // get a ptr to the actual image - fuer (zahl row=0; row < 25; row++) { // iterate over rows - zeichen *original_line = pic + row * msg->width; // pointer to the start of the line to print - zeichen *line = (zeichen*) reserviere(end-start+1); // allocate a line because we modify it + for (int row=0; row < 25; row++) { // iterate over rows + char *original_line = pic + row * msg->width; // pointer to the start of the line to print + char *line = (char*) malloc(end-start+1); // allocate a line because we modify it strcpy(line, original_line + start); // get a line from the right start line[end-start] = '\0'; // terminate it mvprintw(row, 0, "%s", line); // print it - befreie(line); // free it + free(line); // free it } refresh(); // refresh the screen @@ -50,8 +49,8 @@ void callback(const struct message *msg, const struct prog_info *pinfo) { // calculate the actual offset to use //int start = msg->timestamp % msg->width + pinfo->client_offset; - //print_current_image(msg, start, start+80); + prntscreen(msg, pinfo); } @@ -79,6 +78,7 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { if (!init) { // printf("init start\n"); initscr(); + curs_set(0); // invisible cursor getmaxyx(stdscr, rows, cols); init = 1; @@ -90,16 +90,16 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { int left = right + cols; // for (int y=0; yheight; y++) { for (int x=left-frame; x run in client mode\n"); printf( " off is the column offset to use.\n"); printf( " -p use the specified port\n"); - printf( " -t when in server mode: update times\n"); + printf( " -t when in server mode: update times\n"); printf( " per second. Valid range: 2 - 99\n"); printf( " ignored in client mode\n"); printf( " -w maximum width of the whole field. server only.\n"); - printf( " -i image fielname. server only\n"); + printf( " -i image filename. server only\n"); printf("\n\n"); return -1; } diff --git a/src/net.c b/src/net.c index c7ffaf9..98b0979 100644 --- a/src/net.c +++ b/src/net.c @@ -1,5 +1,6 @@ -#include #include +#include +#include #include // ? #include // geguttenbergt aus bejees networking guide @@ -40,14 +41,14 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { struct addrinfo hints, *servinfo, *p; int ret; int sockfd; - char portbuf[6]; + memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; sprintf(portbuf, "%d", pinfo->port); - if ((ret=getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { + if ((ret = getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); return 1; } @@ -71,7 +72,7 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; - if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,sizeof(broadcastPermission)) < 0){ + if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, sizeof(broadcastPermission)) < 0){ fprintf(stderr, "setsockopt error"); exit(1); } @@ -84,19 +85,16 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { t++; t %= pinfo->width; - struct message *outmsg = (struct message *)malloc(sizeof(struct message)); + struct message *outmsg = (struct message *) malloc(sizeof(struct message)); outmsg->timestamp = (uint32_t)t; //(uint32_t)time(NULL); - if ((t % 100) == 0) { - outmsg->width = w; - outmsg->height = h; - outmsg->image = img; - } else { - outmsg->width = 0; - outmsg->height = 0; - outmsg->image = NULL; - } + // send image every 100 frames + bool sendimg = (t % 100) == 0; + outmsg->width = sendimg ? w : 0; + outmsg->height = sendimg ? h : 0; + outmsg->image = sendimg ? img : NULL; + int buflen = getBufferSize(outmsg); - char *outbuf = (char *)malloc(buflen); + char *outbuf = (char *) malloc(buflen); serialize(outbuf, outmsg); if ((numbytes = sendto(sockfd, outbuf, buflen, 0, p->ai_addr, p->ai_addrlen)) == -1) { @@ -143,12 +141,12 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct for (info = servinfo; info != NULL; info = info->ai_next) { if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { perror("sock"); - continue; + continue; } if (bind(sockfd, info->ai_addr, info->ai_addrlen) == -1) { perror("bind"); - continue; + continue; } break; From bafecfb2d6b63d6d0de8b34e233926874785929b Mon Sep 17 00:00:00 2001 From: tkarrass Date: Wed, 13 Nov 2013 18:28:26 +0100 Subject: [PATCH 70/76] anim image --- image | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/image b/image index 68ce63c..271b9db 100644 --- a/image +++ b/image @@ -1,10 +1,44 @@ + _,-%/%| + _,-' \//%\ + _,-' \%/|% + / / ) __,-- /%\ + \__/_,-'%(% ; %)% + %\%, %\ + '--%' +.. _,-%/%| _,-' \//%\ _,-' \%/|% / / ) __,-- /%\ \__/_,-'%(% ; %)% / %\%, %\ - / '--%' - / + '--%' +.. + _,-%/%| + _,-' \//%\ + _,-' \%/|% + / / ) __,-- /%\ + \__/_,-'%(% ; %)% + / %\%, %\ + / '--%' + +.. + _,-%/%| + _,-' \//%\ + _,-' \%/|% + / / ) __,-- /%\ + \__/_,-'%(% ; %)% + %\%, %\ + / '--%' + / +.. + _,-%/%| + _,-' \//%\ + _,-' \%/|% + / / ) __,-- /%\ + \__/_,-'%(% ; %)% + %\%, %\ + '--%' + / From 2d874fe9ba80c766966c71c9eb618e118586baef Mon Sep 17 00:00:00 2001 From: tkarrass Date: Wed, 13 Nov 2013 18:36:14 +0100 Subject: [PATCH 71/76] preps --- src/msg.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/msg.h b/src/msg.h index 2a4d9a7..4998e8c 100644 --- a/src/msg.h +++ b/src/msg.h @@ -14,7 +14,8 @@ struct message { uint32_t height; // normally 25, may vary //char **image; // dimension is width x height char *image; // dimension is width x height - + //TODO: + // Make image anim capable /* * image[row][col] >>> image[row*width+col]; */ From b8fb1400b12c4e491f94b79a2f0a57f187c8e91d Mon Sep 17 00:00:00 2001 From: tkarrass Date: Wed, 13 Nov 2013 20:48:15 +0100 Subject: [PATCH 72/76] did it - it's animated ;) --- src/display.c | 5 ++++- src/image.c | 37 +++++++++++++++++++++++++++++-------- src/image.h | 2 +- src/main.c | 6 +++--- src/msg.c | 10 ++++++---- src/msg.h | 3 +-- src/net.c | 3 ++- src/net.h | 2 +- 8 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/display.c b/src/display.c index faeba70..a5ad5f6 100644 --- a/src/display.c +++ b/src/display.c @@ -65,10 +65,12 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { static char *img = NULL; static int w; static int h; + static int f; if (!img && msg->image) { img = msg->image; w = msg->width; h = msg->height; + f = msg->frames; } if (!img) { printf("awaiting state ... %d\r", msg->timestamp); @@ -97,13 +99,14 @@ void prntscreen(const struct message *msg, const struct prog_info *pinfo) { // printf("loop\n"); int rowoffset = (rows-h)/2; //int coloffset = left-frame; + int imgoff = (frame % f) * w * h; for (int y=0; yheight; y++) { for (int x=left-frame; x=w?' ':img[y*w+p]); + mvaddch(y + rowoffset, x, p>=w-1?' ':img[imgoff+(y*w+p)]); } } diff --git a/src/image.c b/src/image.c index 233cc7b..31bc33e 100644 --- a/src/image.c +++ b/src/image.c @@ -7,7 +7,7 @@ #define LINELEN 20000 -char *readImage(const char* filename, int *cols, int *rows) { +char *readImage(const char* filename, int *cols, int *rows, int *imgz) { printf("fopen\n"); FILE *f = fopen(filename, "r"); @@ -15,30 +15,50 @@ char *readImage(const char* filename, int *cols, int *rows) { *cols = 0; *rows = 0; + int maxrows = 0; + *imgz = 1; char *linebuf = (char *)malloc(LINELEN); char *ret = NULL; if (f) { while (fgets(linebuf, LINELEN, f)) { int len = strlen(linebuf); + if ( len > 2 && linebuf[0] == '.' && linebuf[1] == '.') { + (*imgz)++; + (*rows)=0; + } *cols = len>*cols?len:*cols; (*rows)++; + maxrows = (*rows>maxrows)?*rows:maxrows; } + (*rows)=maxrows; (*cols)--; - ret = (char *)malloc(*cols * *rows + 1); - memset(ret, ' ', *cols * *rows); + ret = (char *)malloc(*imgz * *cols * *rows + 1); + memset(ret, ' ', *imgz * *cols * *rows); fseek(f, 0, SEEK_SET); - for (int r=0; r<*rows; r++) { - fgets(&ret[r * *cols], LINELEN, f); + + for (int fp=0; fp<(*imgz); fp++) { + for (int r=0; r<*rows; r++) { + int base = (fp * *rows * *cols) + r * *cols; + fgets(&ret[base], LINELEN, f); + if (ret[base] == '.' && ret[base+1] == '.') { + ret[base] = ' '; + ret[base+1] = ' '; + break; + } + } } - + for (int i=0; i < (*imgz * *cols * *rows); i++) + if (ret[i] == '\n' || ret[i] == '\r') + ret[i] = ' '; + fclose(f); } free(linebuf); - printf("image size: %d x %d\n", *cols, *rows); + printf("image size: %d x %d\n%d frames\n", *cols, *rows, *imgz); - for (int y=0; y < *rows; y++) { + for (int y=0; y < *rows; y++) { for (int x=0; x < *cols; x++) { //mvaddch(y,x,img[y * *cols +x]); printf("%c", ret[y * *cols +x]); @@ -49,3 +69,4 @@ char *readImage(const char* filename, int *cols, int *rows) { return ret; } + diff --git a/src/image.h b/src/image.h index b3b7ba0..75f8e0b 100644 --- a/src/image.h +++ b/src/image.h @@ -1,6 +1,6 @@ #ifndef __IMAGE #define __IMAGE -char *readImage(const char* filename, int *cols, int *rows); +char *readImage(const char* filename, int *cols, int *rows, int *imgz); #endif diff --git a/src/main.c b/src/main.c index 4afa0fc..2724f5b 100644 --- a/src/main.c +++ b/src/main.c @@ -123,14 +123,14 @@ int main(int argc, char **argv) { printf("no image given\n"); return -12; } - int w, h; - char *image = readImage(prog_info.filename, &w, &h); + int w, h, i; + char *image = readImage(prog_info.filename, &w, &h, &i); if (!image) { printf("could not read image!\n"); return -13; } prog_info.width = prog_info.width>(w*2)?prog_info.width:(w*2); - ret = run_server(&prog_info, image, w, h); + ret = run_server(&prog_info, image, w, h, i); } else { printf("running in CLIENT mode, using client offset %d\n", prog_info.client_offset); signal(SIGINT,&die); diff --git a/src/msg.c b/src/msg.c index 7bc8f46..aff3a2f 100644 --- a/src/msg.c +++ b/src/msg.c @@ -6,24 +6,26 @@ #include "msg.h" int getBufferSize(struct message *msg) { - return 3*sizeof(uint32_t) + msg->width * msg->height; + return 4*sizeof(uint32_t) + msg->width * msg->height * msg->frames; } void serialize (char *buf, struct message *msg) { memcpy(&buf[0], &msg->timestamp, 4); memcpy(&buf[4], &msg->width, 4); memcpy(&buf[8], &msg->height, 4); + memcpy(&buf[12], &msg->frames, 4); if (msg->width * msg->height) - memcpy(&buf[12], msg->image, msg->width * msg->height); + memcpy(&buf[16], msg->image, msg->frames * msg->width * msg->height); } void deserialize (struct message *msg, const char *buf) { memcpy(&msg->timestamp, &buf[0], 4); memcpy(&msg->width, &buf[4], 4); memcpy(&msg->height, &buf[8], 4); + memcpy(&msg->frames, &buf[12], 4); if (msg->width * msg->height) { - msg->image = (char*) malloc(msg->width * msg->height); - memcpy(msg->image, &buf[12], msg->width * msg->height); + msg->image = (char*) malloc(msg->width * msg->height * msg->frames); + memcpy(msg->image, &buf[16], msg->width * msg->height * msg->frames); } else { msg->image = NULL; } diff --git a/src/msg.h b/src/msg.h index 4998e8c..b90056c 100644 --- a/src/msg.h +++ b/src/msg.h @@ -12,10 +12,9 @@ struct message { uint32_t timestamp; uint32_t width; // normally 80 uint32_t height; // normally 25, may vary + uint32_t frames; // number of frames //char **image; // dimension is width x height char *image; // dimension is width x height - //TODO: - // Make image anim capable /* * image[row][col] >>> image[row*width+col]; */ diff --git a/src/net.c b/src/net.c index 98b0979..134be9d 100644 --- a/src/net.c +++ b/src/net.c @@ -37,7 +37,7 @@ static void *get_in_addr(struct sockaddr *sa) { // server mode // pumpt im for(;;) den status ins eth // -int run_server(const struct prog_info *pinfo, char *img, int w, int h) { +int run_server(const struct prog_info *pinfo, char *img, int w, int h, int frms) { struct addrinfo hints, *servinfo, *p; int ret; int sockfd; @@ -91,6 +91,7 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h) { bool sendimg = (t % 100) == 0; outmsg->width = sendimg ? w : 0; outmsg->height = sendimg ? h : 0; + outmsg->frames = sendimg ? frms: 0; outmsg->image = sendimg ? img : NULL; int buflen = getBufferSize(outmsg); diff --git a/src/net.h b/src/net.h index 7a4e9ae..f2546e9 100644 --- a/src/net.h +++ b/src/net.h @@ -6,7 +6,7 @@ #include "msg.h" // message serialization #include "display.h" // callback -int run_server(const struct prog_info *pinfo, char *img, int w, int h); +int run_server(const struct prog_info *pinfo, char *img, int w, int h, int frms); int run_client(const struct prog_info *pinfo,void(*framecallback)(const struct message *, const struct prog_info *)); #endif From c2ee3104674760b52691924b273b0f12f2158240 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Wed, 27 Nov 2013 21:14:43 +0100 Subject: [PATCH 73/76] such error messages --- src/net.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/net.c b/src/net.c index 134be9d..0e01397 100644 --- a/src/net.c +++ b/src/net.c @@ -49,20 +49,20 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h, int frms) sprintf(portbuf, "%d", pinfo->port); if ((ret = getaddrinfo("255.255.255.255", portbuf, &hints, &servinfo)) != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); + fprintf(stderr, "so getaddrinfo error: %s\n", gai_strerror(ret)); return 1; } for (p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { - perror("talker: socket"); + perror("talker: much socket error"); continue; } break; } if (p == NULL) { - fprintf(stderr, "talker: failed to bind socket\n"); + fprintf(stderr, "talker: such fail to bind socket\n"); return 2; } @@ -73,7 +73,7 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h, int frms) // Einem Socket muss das Broadcasting explizit erlaubt werden: int broadcastPermission = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, sizeof(broadcastPermission)) < 0){ - fprintf(stderr, "setsockopt error"); + fprintf(stderr, "very setsockopt error"); exit(1); } @@ -99,7 +99,7 @@ int run_server(const struct prog_info *pinfo, char *img, int w, int h, int frms) serialize(outbuf, outmsg); if ((numbytes = sendto(sockfd, outbuf, buflen, 0, p->ai_addr, p->ai_addrlen)) == -1) { - perror("error sending"); + perror("much error while sending"); return -42; } nanosleep(&tim, NULL); @@ -141,22 +141,22 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct // mal drin lassen: falls die ip der gegenstelle relevant werden sollte: char s[INET6_ADDRSTRLEN]; for (info = servinfo; info != NULL; info = info->ai_next) { if ((sockfd = socket(info->ai_family, info->ai_socktype, info->ai_protocol)) == -1) { - perror("sock"); + perror("very socket error"); continue; } if (bind(sockfd, info->ai_addr, info->ai_addrlen) == -1) { - perror("bind"); + perror("much bind error"); continue; } break; } if (!info) { - fprintf(stderr, "unbound\n"); + fprintf(stderr, "many unbound\n"); return 2; } - printf("check!\n"); + printf("so check!\n"); freeaddrinfo(servinfo); // free whole list @@ -180,10 +180,9 @@ int run_client(const struct prog_info *pinfo, void (*framecallback)(const struct framecallback(msg, pinfo); - } while (strncmp(buf, "exit", 10000)); + } while (strncmp(buf, "much exit", 10000)); close(sockfd); return 0; } - From 0efe9f698f1493ba18f185d94076eb3421c5fa4a Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Mon, 18 Jan 2016 21:18:02 +0100 Subject: [PATCH 74/76] move original C impl to netsl subdir --- .gitignore => netsl/.gitignore | 0 Makefile => netsl/Makefile | 0 README => netsl/README | 0 image => netsl/image | 0 pic => netsl/pic | 0 {src => netsl/src}/display.c | 0 {src => netsl/src}/display.h | 0 {src => netsl/src}/image.c | 0 {src => netsl/src}/image.h | 0 {src => netsl/src}/main.c | 0 {src => netsl/src}/main.h | 0 {src => netsl/src}/misc.h | 0 {src => netsl/src}/msg.c | 0 {src => netsl/src}/msg.h | 0 {src => netsl/src}/net.c | 0 {src => netsl/src}/net.h | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => netsl/.gitignore (100%) rename Makefile => netsl/Makefile (100%) rename README => netsl/README (100%) rename image => netsl/image (100%) rename pic => netsl/pic (100%) rename {src => netsl/src}/display.c (100%) rename {src => netsl/src}/display.h (100%) rename {src => netsl/src}/image.c (100%) rename {src => netsl/src}/image.h (100%) rename {src => netsl/src}/main.c (100%) rename {src => netsl/src}/main.h (100%) rename {src => netsl/src}/misc.h (100%) rename {src => netsl/src}/msg.c (100%) rename {src => netsl/src}/msg.h (100%) rename {src => netsl/src}/net.c (100%) rename {src => netsl/src}/net.h (100%) diff --git a/.gitignore b/netsl/.gitignore similarity index 100% rename from .gitignore rename to netsl/.gitignore diff --git a/Makefile b/netsl/Makefile similarity index 100% rename from Makefile rename to netsl/Makefile diff --git a/README b/netsl/README similarity index 100% rename from README rename to netsl/README diff --git a/image b/netsl/image similarity index 100% rename from image rename to netsl/image diff --git a/pic b/netsl/pic similarity index 100% rename from pic rename to netsl/pic diff --git a/src/display.c b/netsl/src/display.c similarity index 100% rename from src/display.c rename to netsl/src/display.c diff --git a/src/display.h b/netsl/src/display.h similarity index 100% rename from src/display.h rename to netsl/src/display.h diff --git a/src/image.c b/netsl/src/image.c similarity index 100% rename from src/image.c rename to netsl/src/image.c diff --git a/src/image.h b/netsl/src/image.h similarity index 100% rename from src/image.h rename to netsl/src/image.h diff --git a/src/main.c b/netsl/src/main.c similarity index 100% rename from src/main.c rename to netsl/src/main.c diff --git a/src/main.h b/netsl/src/main.h similarity index 100% rename from src/main.h rename to netsl/src/main.h diff --git a/src/misc.h b/netsl/src/misc.h similarity index 100% rename from src/misc.h rename to netsl/src/misc.h diff --git a/src/msg.c b/netsl/src/msg.c similarity index 100% rename from src/msg.c rename to netsl/src/msg.c diff --git a/src/msg.h b/netsl/src/msg.h similarity index 100% rename from src/msg.h rename to netsl/src/msg.h diff --git a/src/net.c b/netsl/src/net.c similarity index 100% rename from src/net.c rename to netsl/src/net.c diff --git a/src/net.h b/netsl/src/net.h similarity index 100% rename from src/net.h rename to netsl/src/net.h From a9df53293364e0f878de151cb058b9f54103a8e2 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Mon, 18 Jan 2016 21:18:45 +0100 Subject: [PATCH 75/76] commit original sl --- netsl/original_sl/sl-3.03.orig/Makefile | 14 ++ netsl/original_sl/sl-3.03.orig/sl.c | 225 +++++++++++++++++++++ netsl/original_sl/sl-3.03.orig/sl.h | 104 ++++++++++ netsl/original_sl/sl-3.03.orig/sl.txt | 23 +++ netsl/original_sl/sl_3.03-17.debian.tar.gz | Bin 0 -> 15647 bytes netsl/original_sl/sl_3.03.orig.tar.gz | Bin 0 -> 3776 bytes 6 files changed, 366 insertions(+) create mode 100644 netsl/original_sl/sl-3.03.orig/Makefile create mode 100644 netsl/original_sl/sl-3.03.orig/sl.c create mode 100644 netsl/original_sl/sl-3.03.orig/sl.h create mode 100644 netsl/original_sl/sl-3.03.orig/sl.txt create mode 100644 netsl/original_sl/sl_3.03-17.debian.tar.gz create mode 100644 netsl/original_sl/sl_3.03.orig.tar.gz diff --git a/netsl/original_sl/sl-3.03.orig/Makefile b/netsl/original_sl/sl-3.03.orig/Makefile new file mode 100644 index 0000000..d525743 --- /dev/null +++ b/netsl/original_sl/sl-3.03.orig/Makefile @@ -0,0 +1,14 @@ +#========================================== +# Makefile: makefile for sl +# Copyright 1993,1998 Toyoda Masashi +# (toyoda@is.titech.ac.jp) +# Last Modified: 1998/ 7/22 +#========================================== + +CC=cc +CFLAGS=-O + +sl: sl.c sl.h + $(CC) $(CFLAGS) -o sl sl.c -lcurses -ltermcap +# $(CC) $(CFLAGS) -o sl sl.c -lcurses + diff --git a/netsl/original_sl/sl-3.03.orig/sl.c b/netsl/original_sl/sl-3.03.orig/sl.c new file mode 100644 index 0000000..474d4f4 --- /dev/null +++ b/netsl/original_sl/sl-3.03.orig/sl.c @@ -0,0 +1,225 @@ +/*======================================== + * sl.c: + * Copyright 1993,1998 Toyoda Masashi + * (toyoda@is.titech.ac.jp) + * Last Modified: 1998/ 7/22 + *======================================== + */ +/* sl version 3.03 : add usleep(20000) */ +/* by Toyoda Masashi 1998/ 7/22 */ +/* sl version 3.02 : D51 flies! Change options. */ +/* by Toyoda Masashi 1993/ 1/19 */ +/* sl version 3.01 : Wheel turns smoother */ +/* by Toyoda Masashi 1992/12/25 */ +/* sl version 3.00 : Add d(D51) option */ +/* by Toyoda Masashi 1992/12/24 */ +/* sl version 2.02 : Bug fixed.(dust remains in screen) */ +/* by Toyoda Masashi 1992/12/17 */ +/* sl version 2.01 : Smoke run and disappear. */ +/* Change '-a' to accident option. */ +/* by Toyoda Masashi 1992/12/16 */ +/* sl version 2.00 : Add a(all),l(long),F(Fly!) options. */ +/* by Toyoda Masashi 1992/12/15 */ +/* sl version 1.02 : Add turning wheel. */ +/* by Toyoda Masashi 1992/12/14 */ +/* sl version 1.01 : Add more complex smoke. */ +/* by Toyoda Masashi 1992/12/14 */ +/* sl version 1.00 : SL runs vomitting out smoke. */ +/* by Toyoda Masashi 1992/12/11 */ + +#include +#include +#include +#include "sl.h" + +int ACCIDENT = 0; +int LOGO = 0; +int FLY = 0; + +int my_mvaddstr(int y, int x, char *str) +{ + for ( ; x < 0; ++x, ++str) + if (*str == '\0') return ERR; + for ( ; *str != '\0'; ++str, ++x) + if (mvaddch(y, x, *str) == ERR) return ERR; + return OK; +} + +void option(char *str) +{ + extern int ACCIDENT, FLY, LONG; + + while (*str != '\0') { + switch (*str++) { + case 'a': ACCIDENT = 1; break; + case 'F': FLY = 1; break; + case 'l': LOGO = 1; break; + default: break; + } + } +} + +void main(int argc, char *argv[]) +{ + int x, i; + + for (i = 1; i < argc; ++i) { + if (*argv[i] == '-') { + option(argv[i] + 1); + } + } + initscr(); + signal(SIGINT, SIG_IGN); + noecho(); + leaveok(stdscr, TRUE); + scrollok(stdscr, FALSE); + + for (x = COLS - 1; ; --x) { + if (LOGO == 0) { + if (add_D51(x) == ERR) break; + } else { + if (add_sl(x) == ERR) break; + } + refresh(); + usleep(20000); + } + mvcur(0, COLS - 1, LINES - 1, 0); + endwin(); +} + + +int add_sl(int x) +{ + static char *sl[LOGOPATTERNS][LOGOHIGHT + 1] + = {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}}; + + static char *coal[LOGOHIGHT + 1] + = {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN}; + + static char *car[LOGOHIGHT + 1] + = {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN}; + + int i, y, py1 = 0, py2 = 0, py3 = 0; + + if (x < - LOGOLENGTH) return ERR; + y = LINES / 2 - 3; + + if (FLY == 1) { + y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT; + py1 = 2; py2 = 4; py3 = 6; + } + for (i = 0; i <= LOGOHIGHT; ++i) { + my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]); + my_mvaddstr(y + i + py1, x + 21, coal[i]); + my_mvaddstr(y + i + py2, x + 42, car[i]); + my_mvaddstr(y + i + py3, x + 63, car[i]); + } + if (ACCIDENT == 1) { + add_man(y + 1, x + 14); + add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53); + add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74); + } + add_smoke(y - 1, x + LOGOFUNNEL); + return OK; +} + + +add_D51(int x) +{ + static char *d51[D51PATTERNS][D51HIGHT + 1] + = {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL11, D51WHL12, D51WHL13, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL21, D51WHL22, D51WHL23, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL31, D51WHL32, D51WHL33, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL41, D51WHL42, D51WHL43, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL51, D51WHL52, D51WHL53, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL61, D51WHL62, D51WHL63, D51DEL}}; + static char *coal[D51HIGHT + 1] + = {COAL01, COAL02, COAL03, COAL04, COAL05, + COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; + + int y, i, dy = 0; + + if (x < - D51LENGTH) return ERR; + y = LINES / 2 - 5; + + if (FLY == 1) { + y = (x / 7) + LINES - (COLS / 7) - D51HIGHT; + dy = 1; + } + for (i = 0; i <= D51HIGHT; ++i) { + my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]); + my_mvaddstr(y + i + dy, x + 53, coal[i]); + } + if (ACCIDENT == 1) { + add_man(y + 2, x + 43); + add_man(y + 2, x + 47); + } + add_smoke(y - 1, x + D51FUNNEL); + return OK; +} + + +int add_man(int y, int x) +{ + static char *man[2][2] = {{"", "(O)"}, {"Help!", "\\O/"}}; + int i; + + for (i = 0; i < 2; ++i) { + my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]); + } +} + + +int add_smoke(int y, int x) +#define SMOKEPTNS 16 +{ + static struct smokes { + int y, x; + int ptrn, kind; + } S[1000]; + static int sum = 0; + static char *Smoke[2][SMOKEPTNS] + = {{"( )", "( )", "( )", "( )", "( )", + "( )" , "( )" , "( )" , "()" , "()" , + "O" , "O" , "O" , "O" , "O" , + " " }, + {"(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)", + "(@@)" , "(@)" , "(@)" , "@@" , "@@" , + "@" , "@" , "@" , "@" , "@" , + " " }}; + static char *Eraser[SMOKEPTNS] + = {" ", " ", " ", " ", " ", + " " , " " , " " , " " , " " , + " " , " " , " " , " " , " " , + " " }; + static int dy[SMOKEPTNS] = { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 }; + static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 3, 3, 3 }; + int i; + + if (x % 4 == 0) { + for (i = 0; i < sum; ++i) { + my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]); + S[i].y -= dy[S[i].ptrn]; + S[i].x += dx[S[i].ptrn]; + S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0; + my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]); + } + my_mvaddstr(y, x, Smoke[sum % 2][0]); + S[sum].y = y; S[sum].x = x; + S[sum].ptrn = 0; S[sum].kind = sum % 2; + sum ++; + } +} diff --git a/netsl/original_sl/sl-3.03.orig/sl.h b/netsl/original_sl/sl-3.03.orig/sl.h new file mode 100644 index 0000000..fd5055c --- /dev/null +++ b/netsl/original_sl/sl-3.03.orig/sl.h @@ -0,0 +1,104 @@ +/*======================================== + * sl.h: Text data of SL version 3.01 + * Copyright 1993 Toyoda Masashi + * (toyoda@is.titech.ac.jp) + * Last Modified: 1992/12/23 + *======================================== + */ + +#define D51HIGHT 10 +#define D51FUNNEL 7 +#define D51LENGTH 83 +#define D51PATTERNS 6 + + +#define D51STR1 " ==== ________ ___________ " +#define D51STR2 " _D _| |_______/ \\__I_I_____===__|_________| " +#define D51STR3 " |(_)--- | H\\________/ | | =|___ ___| " +#define D51STR4 " / | | H | | | | ||_| |_|| " +#define D51STR5 " | | | H |__--------------------| [___] | " +#define D51STR6 " | ________|___H__/__|_____/[][]~\\_______| | " +#define D51STR7 " |/ | |-----------I_____I [][] [] D |=======|__ " + +#define D51WHL11 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ " +#define D51WHL12 " |/-=|___|= || || || |_____/~\\___/ " +#define D51WHL13 " \\_/ \\O=====O=====O=====O_/ \\_/ " + +#define D51WHL21 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ " +#define D51WHL22 " |/-=|___|=O=====O=====O=====O |_____/~\\___/ " +#define D51WHL23 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ " + +#define D51WHL31 "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ " +#define D51WHL32 " |/-=|___|= || || || |_____/~\\___/ " +#define D51WHL33 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ " + +#define D51WHL41 "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ " +#define D51WHL42 " |/-=|___|= || || || |_____/~\\___/ " +#define D51WHL43 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ " + +#define D51WHL51 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ " +#define D51WHL52 " |/-=|___|= O=====O=====O=====O|_____/~\\___/ " +#define D51WHL53 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ " + +#define D51WHL61 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ " +#define D51WHL62 " |/-=|___|= || || || |_____/~\\___/ " +#define D51WHL63 " \\_/ \\_O=====O=====O=====O/ \\_/ " + +#define D51DEL " " + +#define COAL01 " " +#define COAL02 " " +#define COAL03 " _________________ " +#define COAL04 " _| \\_____A " +#define COAL05 " =| | " +#define COAL06 " -| | " +#define COAL07 "__|________________________|_ " +#define COAL08 "|__________________________|_ " +#define COAL09 " |_D__D__D_| |_D__D__D_| " +#define COAL10 " \\_/ \\_/ \\_/ \\_/ " + +#define COALDEL " " + +#define LOGOHIGHT 6 +#define LOGOFUNNEL 4 +#define LOGOLENGTH 84 +#define LOGOPATTERNS 6 + +#define LOGO1 " ++ +------ " +#define LOGO2 " || |+-+ | " +#define LOGO3 " /---------|| | | " +#define LOGO4 " + ======== +-+ | " + +#define LWHL11 " _|--O========O~\\-+ " +#define LWHL12 "//// \\_/ \\_/ " + +#define LWHL21 " _|--/O========O\\-+ " +#define LWHL22 "//// \\_/ \\_/ " + +#define LWHL31 " _|--/~O========O-+ " +#define LWHL32 "//// \\_/ \\_/ " + +#define LWHL41 " _|--/~\\------/~\\-+ " +#define LWHL42 "//// \\_O========O " + +#define LWHL51 " _|--/~\\------/~\\-+ " +#define LWHL52 "//// \\O========O/ " + +#define LWHL61 " _|--/~\\------/~\\-+ " +#define LWHL62 "//// O========O_/ " + +#define LCOAL1 "____ " +#define LCOAL2 "| \\@@@@@@@@@@@ " +#define LCOAL3 "| \\@@@@@@@@@@@@@_ " +#define LCOAL4 "| | " +#define LCOAL5 "|__________________| " +#define LCOAL6 " (O) (O) " + +#define LCAR1 "____________________ " +#define LCAR2 "| ___ ___ ___ ___ | " +#define LCAR3 "| |_| |_| |_| |_| | " +#define LCAR4 "|__________________| " +#define LCAR5 "|__________________| " +#define LCAR6 " (O) (O) " + +#define DELLN " " diff --git a/netsl/original_sl/sl-3.03.orig/sl.txt b/netsl/original_sl/sl-3.03.orig/sl.txt new file mode 100644 index 0000000..9af080d --- /dev/null +++ b/netsl/original_sl/sl-3.03.orig/sl.txt @@ -0,0 +1,23 @@ +------------------------------------------------------------------------------- + ==== ________ ___________ + _D _| |_______/ \__I_I_____===__|_________| + |(_)--- | H\________/ | | =|___ ___| + / | | H | | | | ||_| |_|| + | | | H |__--------------------| [___] | + | ________|___H__/__|_____/[][]~\_______| | + |/ | |-----------I_____I [][] [] D |=======|__ +__/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__ + |/-=|___|| || || || |_____/~\___/ + \_/ \__/ \__/ \__/ \__/ \_/ +------------------------------------------------------------------------------- + + + _________________ + _| \_____A + =| | + -| | +__|________________________|_ +|__________________________|_ + |_D__D__D_| |_D__D__D_| + \_/ \_/ \_/ \_/ +------------------------------------------------------------------------------- \ No newline at end of file diff --git a/netsl/original_sl/sl_3.03-17.debian.tar.gz b/netsl/original_sl/sl_3.03-17.debian.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..020474d79f5e374c31e42ffbc2670e6e82b148bb GIT binary patch literal 15647 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 F0RZWWjL-l8 literal 0 HcmV?d00001 diff --git a/netsl/original_sl/sl_3.03.orig.tar.gz b/netsl/original_sl/sl_3.03.orig.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6c21b958159e880dec274eb709cf3b404275a5c4 GIT binary patch literal 3776 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 Date: Mon, 18 Jan 2016 21:52:18 +0100 Subject: [PATCH 76/76] netsl not in bin/ --- netsl/.gitignore | 1 + netsl/Makefile | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/netsl/.gitignore b/netsl/.gitignore index 078cbd0..1382995 100644 --- a/netsl/.gitignore +++ b/netsl/.gitignore @@ -5,3 +5,4 @@ test *.o *.swp a.out +netsl diff --git a/netsl/Makefile b/netsl/Makefile index 5cda73f..461a063 100644 --- a/netsl/Makefile +++ b/netsl/Makefile @@ -1,9 +1,9 @@ -CFLAGS=-g -Wall -Wextra -std=gnu99 +CFLAGS=-g -Wall -Wextra -std=gnu99 BIN=bin SRC=src LIBS=-lncurses -TARGET=$(BIN)/netsl +TARGET=netsl OBJECTS=$(BIN)/main.o $(BIN)/msg.o $(BIN)/net.o $(BIN)/display.o $(BIN)/image.o all: $(BIN) $(TARGET) @@ -14,11 +14,9 @@ $(BIN): $(TARGET): $(OBJECTS) gcc $^ $(LIBS) -o $(TARGET) -# mkdir -pv $(BIN) - $(BIN)/%.o: $(SRC)/%.c $(SRC)/%.h $(CC) $(CFLAGS) -o $@ -c $< clean: rm -rf $(BIN) - + rm $(TARGET)