From af41084368d06382c48c132a40eb7992e06d8c14 Mon Sep 17 00:00:00 2001 From: kts Date: Thu, 1 Aug 2013 13:54:20 -0700 Subject: [PATCH] Initial commit of bcast, has terminal interface and x11 interface stub --- Makefile | 42 +++++ common.c | 145 +++++++++++++++ common.h | 65 +++++++ con/console.c | 213 ++++++++++++++++++++++ con/console.h | 35 ++++ macros.h | 51 ++++++ main.c | 116 ++++++++++++ mockup.xcf | Bin 0 -> 53279 bytes net.c | 437 +++++++++++++++++++++++++++++++++++++++++++++ net.h | 101 +++++++++++ old/Display.cpp | 9 + old/Display.h | 21 +++ old/Display.o | Bin 0 -> 32392 bytes old/Listener.cpp | 15 ++ old/Listener.h | 23 +++ old/Listener.o | Bin 0 -> 33200 bytes old/Makefile | 25 +++ old/bcast | Bin 0 -> 53703 bytes old/main.cpp | 20 +++ old/main.o | Bin 0 -> 30560 bytes old/mcast | Bin 0 -> 14253 bytes old/mcast.c | 160 +++++++++++++++++ old/mcast_client | Bin 0 -> 13770 bytes old/mcast_client.c | 172 ++++++++++++++++++ ui_common.h | 24 +++ x11/x11.c | 413 ++++++++++++++++++++++++++++++++++++++++++ x11/x11.h | 59 ++++++ x11/x11_assets.h | 52 ++++++ 28 files changed, 2198 insertions(+) create mode 100644 Makefile create mode 100644 common.c create mode 100644 common.h create mode 100644 con/console.c create mode 100644 con/console.h create mode 100644 macros.h create mode 100644 main.c create mode 100644 mockup.xcf create mode 100644 net.c create mode 100644 net.h create mode 100644 old/Display.cpp create mode 100644 old/Display.h create mode 100644 old/Display.o create mode 100644 old/Listener.cpp create mode 100644 old/Listener.h create mode 100644 old/Listener.o create mode 100644 old/Makefile create mode 100755 old/bcast create mode 100644 old/main.cpp create mode 100644 old/main.o create mode 100755 old/mcast create mode 100644 old/mcast.c create mode 100755 old/mcast_client create mode 100644 old/mcast_client.c create mode 100644 ui_common.h create mode 100644 x11/x11.c create mode 100644 x11/x11.h create mode 100644 x11/x11_assets.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..04d1c56 --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +OUT = bcast +PREFIX=./ +OBJS = main.o net.o common.o +CON_OBJS = con/console.o +CC = gcc +DEBUG = -g +CFLAGS = -Wall -c $(DEBUG) +LFLAGS = -Wall $(DEBUG) +X11_OBJS = x11/x11.o +X11_LFLAGS = -L/usr/X11R6/lib -lX11 + +$(OUT): $(CON_OBJS) $(OBJS) + $(CC) $(OBJS) $(CON_OBJS) $(LFLAGS) -o $(OUT) + +ccast: $(OBJS) $(CON_OBJS) + $(CC) $(OBJS) $(CON_OBJS) $(LFLAGS) -o ccast + +xcast: $(OBJS) $(X11_OBJS) + $(CC) $(OBJS) $(X11_OBJS) $(LFLAGS) $(X11_LFLAGS) -o xcast + +all: bcast ccast xcast + +clean: + rm $(OBJS) $(CON_OBJS) $(X11_OBJS) ccast xcast $(OUT) + +install: + cp $(OUT) $(PREFIX)/$(OUT) + +net.o: net.c net.h macros.h + $(CC) $(CFLAGS) -c net.c + +main.o: main.c net.h common.h con/console.h macros.h ui_common.h + $(CC) $(CFLAGS) -c main.c + +common.o: common.c common.h macros.h + $(CC) $(CFLAGS) -c common.c + +console.o: con/console.c con/console.h ui_common.h + $(CC) $(CFLAGS) -c con/console.c + +x11.o: x11/x11.c x11/x11.h ui_common.h x11/x11_assets.h + $(CC) $(CFLAGS) -c x11/x11.c diff --git a/common.c b/common.c new file mode 100644 index 0000000..5e3fb4a --- /dev/null +++ b/common.c @@ -0,0 +1,145 @@ +#include "common.h" + +#if __APPLE__ +char * strndup (const char *s, size_t n) { + char *result; + size_t len = strlen (s); + + if (n < len) + len = n; + + result = (char *) malloc (len + 1); + if (!result) + return 0; + + result[len] = '\0'; + return (char *) memcpy (result, s, len); +} +#endif + +void buildCommands() { + //char** commands = NULL; +} + +//void addCommand(const char *command_string, void(*function)()) { +void addCommand(const char *command_string, void(*function)) { + int hash = generateHash(command_string, COMMAND_HASH_SIZE); + printf("command '%s' added with hash %d\n", command_string, hash); + commands_table[hash] = function; +} + +char **getCommand(const char* string) { + char** command_array = NULL; + + int i = 0; + int j = 1; + char last_pos = 0; + + char current_char = string[i]; + short done = 0; + + while (!done) { + if (current_char == ' ') { + command_array = realloc(command_array, sizeof(char*)*j+1); + if (command_array == NULL) { + printf("ERROR, couldn't allocate memory for command_array\n"); + } + command_array[j] = strndup(string+last_pos+1, i-last_pos-1); + last_pos = i; + j++; + } else if (current_char == '\n') { + command_array = realloc(command_array, sizeof(char*)*j+1); + if (command_array == NULL) { + printf("ERROR, couldn't allocate memory for command_array\n"); + } + command_array[j] = strndup(string+last_pos+1, i-last_pos-1); + last_pos = i; + done = 1; + j++; + } + i++; + current_char = string[i]; + } + command_array[0] = (void*)(intptr_t)(j-1); + return command_array; +} + +void freeCommand(char **command_array) { + //printf("res[0] = %d\n", command_array[0]); + int j; + for (j = 1; j < (intptr_t)command_array[0]+1; j++) { + //printf("res[%d] = %s\n", j, command_array[j]); + free(command_array[j]); + } + free(command_array); +} + +int generateHash(const char* string, int table_size) { + int i, sum; + size_t string_length = strlen(string); + for (sum=0, i=0; i < string_length; i++) { + sum += string[i]; + } + return sum % table_size; +} + +void setConfig(const char* variable, const char* value) { + if (variable && value) { + int hash = generateHash(variable, CONFIG_HASH_SIZE); + //printf("\n%s's hash is %d\n", variable, hash); + config[hash] = realloc(config[hash], strlen(value)); + strcpy(config[hash], value); + + config_name[hash] = realloc(config_name[hash], strlen(variable)); + strcpy(config_name[hash], variable); + + printf("%s(%d) set to %s\n", config_name[hash], hash, config[hash]); + //printf("%s's value: %s\n", variable, config[hash]); + } else { + printf("usage: %s", SET_SYNTAX); + } +} + +void freeConfig() { + int i = 0; + for (i = 0;i < CONFIG_HASH_SIZE;i++) { + if (config[i]) { + free(config[i]); + free(config_name[i]); + } + } +} + +void addHelp(const char* variable, const char* value) { + int hash = generateHash(variable, COMMAND_HASH_SIZE); + help[hash] = realloc(help[hash], strlen(value)); + strcpy(help[hash], value); +} + +void freeHelp() { + int i; + for (i = 0;i < COMMAND_HASH_SIZE;i++) { + if (help[i]) { + free(help[i]); + } + } +} + +void addSyntax(const char* variable, const char* value) { + int hash = generateHash(variable, COMMAND_HASH_SIZE); + syntax[hash] = realloc(syntax[hash], strlen(value)); + strcpy(syntax[hash], value); +} + +void freeSyntax() { + int i; + for (i = 0;i < COMMAND_HASH_SIZE;i++) { + if (syntax[i]) { + free(syntax[i]); + } + } +} + +void quitProgram() { + is_running = 0; +} diff --git a/common.h b/common.h new file mode 100644 index 0000000..ed98cef --- /dev/null +++ b/common.h @@ -0,0 +1,65 @@ +/* +=============================================================================== + +Common + +=============================================================================== +*/ +#ifndef COMMON_H +#define COMMON_H + +#include "macros.h" + +#include +#include +#include + +#include // for intptr_t http://stackoverflow.com/questions/5701450/getting-the-warning-cast-to-pointer-from-integer-of-different-size-from-the-fo#5703367 + + +#if __APPLE__ +char * strndup (const char *s, size_t n); +#endif +/* etc */ + +char *start_message[3]; + +char* command_array; + +char** getCommand(const char* string); +void freeCommand(char **command_array); + +int generateHash(const char* string, int table_size); +//void addCommand(const char *command_string, void(*function)(const void*, const void*, const void*)); +//void addCommand(const char *command_string, void(*function)()); +void addCommand(const char *command_string, void(*function)); +//void (*commands_table[64]) (const void*, const void*); +void (*commands_table[COMMAND_HASH_SIZE]) (); +//void(*function)(const void*, const void*, const void*) **commands[64]; // array of command strings, e.g., "quit", "save", etc. +//int *commands_table; // array of command hashes (integers). +int commands_length; // total of commands available +int hash_size; // err, change this. + +char *help[COMMAND_HASH_SIZE]; +char *syntax[COMMAND_HASH_SIZE]; + +char *config_name[CONFIG_HASH_SIZE]; +char (*config[CONFIG_HASH_SIZE]); +void setConfig(const char* variable, const char* value); + +int is_running; +void quitProgram(); + + +void addHelp(const char* variable, const char* value); +void addSyntax(const char* variable, const char* value); +void freeHelp(); +void freeSyntax(); +void freeConfig(); + +typedef struct { + int length; + char *arg; +} t_command; + +#endif diff --git a/con/console.c b/con/console.c new file mode 100644 index 0000000..1b30b6d --- /dev/null +++ b/con/console.c @@ -0,0 +1,213 @@ +#include "console.h" + +int initInterface() { + setAttribute(GREEN); + setAttribute(DIM); + printf("%s", START_MESSAGE); + clearAttributes(); + + showInterfaces(); + + showHelp(NULL); + setAttribute(MAGENTA); + setAttribute(UNDERSCORE); + printf("\n--ready--"); + clearAttributes(); + + interface_fd = STDIN; + FD_SET(interface_fd, &master_fds); + max_fd = interface_fd; + + showPrompt(); + return 0; +} + +int closeInterface() { + + return 0; +} + +int handleInterface() { + // TODO: change to while loop :S + if (read(interface_fd, data_buffer, 2048) < 0) { + perror("couldn't read() STDIN"); + } else { + if (data_buffer[0] == '/') { // denotes command + char **command = getCommand(data_buffer); + int command_hash = generateHash(command[1], COMMAND_HASH_SIZE); + if (!commands_table[command_hash]) { + clearLine(); + setAttribute(YELLOW); + printf("%s '%s'", UNKNOWN_MESSAGE, command[1]); + clearAttributes(); + } else { + if ((intptr_t)command[0] == 1) { // if only /command + (*commands_table[command_hash])(NULL); + } else if ((intptr_t)command[0] == 2) { // if 1 args + (*commands_table[command_hash])(command[2]); + } else if ((intptr_t)command[0] == 3) { // if 2 args + (*commands_table[command_hash])(command[2], command[3]); + } + } + //printf("\nhash of command %s: %d\n", command[1], generateHash(command[1], 64)); + freeCommand(command); + showPrompt(); + } else if (data_buffer[0] == '\n') { // return + fputs("\033[A\033[2K",stdout); + rewind(stdout); + ftruncate(1,0); + //fputs("\033[A",stdout); + fputs("\033[32m",stdout); + printf("> "); + fputs("\033[0m",stdout); + fflush(stdout); + } else { + if (is_listening) { + int i = 0; + int done = 0; + while (!done) { + if (data_buffer[i++] == '\n') + done = 1; + } + char message[i-1]; + strncpy(message, data_buffer, i-1); // cut the \n + message[i-1] = '\0'; + + clearLine(); + sendOpen(message); + showPrompt(); +// sendMulticast(send_socket, &group_socket, data_buffer, strlen(data_buffer)); +/* fputs("\033[A\033[2K",stdout); + rewind(stdout); + ftruncate(1,0); + fputs("\033[32m",stdout); + printf("> "); + fputs("\033[0m",stdout); + fflush(stdout);*/ + } else { + setAttribute(RED); + printf("not listening"); + clearAttributes(); + showPrompt(); + } + } + } + return 0; +} + +int handleInput(const char *data_buffer) { + fputs("\033[1A", stdout); + printf("\n"); + fputs("\033[2K",stdout); // move up and clear + rewind(stdout); + ftruncate(1,0); + receiveOpen(data_buffer, DATAGRAM_SIZE); +// fputs("\033[1B",stdout); // move cursor back down +// fputs("\033[u", stdout); + fflush(stdout); + showPrompt(); + /*fputs("\033[2K",stdout); + rewind(stdout); + ftruncate(1,0); + printf("data_in: %s", data_buffer); + showPrompt();*/ + return 0; +} + +void showHelp(const char *value) { + setAttribute(MAGENTA); + setAttribute(UNDERSCORE); + printf("--help--\n"); + clearAttributes(); + if (value) { + int hash = generateHash(value, COMMAND_HASH_SIZE); + if (help[hash]) { + setAttribute(CYAN); + printf("%s", help[hash]); + if (syntax[hash]) { + printf("\nusage: %s", syntax[hash]); + } + clearAttributes(); + } + } else { + setAttribute(CYAN); + printf("%s", HELP_MESSAGE); + clearAttributes(); + } +} + +void showVariables() { + setAttribute(MAGENTA); + setAttribute(UNDERSCORE); + printf("--variables--\n"); + clearAttributes(); + int i; + for (i = 0;i < CONFIG_HASH_SIZE;i++) { + if (config[i]) { + setAttribute(GREEN); + printf("%s(%d): ", config_name[i], i); + clearAttributes(); + printf("%s\n", config[i]); + } + } + clearAttributes(); +} + +void showInterfaces() { + int i; + fputs("\033[4m\033[35m", stdout); + printf("--%d interfaces detected--\n", interfaces); + fputs("\033[0m",stdout); + fputs("\033[32m", stdout); + for (i = 0; i < interfaces; i++) { + if (ip_list[i]) { + printf("%s: %s\n", dev_list[i], ip_list[i]); + } + } + fputs("\033[0m",stdout); + clearAttributes(); +} + +void setAttribute(const int attribute) { + switch(attribute) { + case RED: + fputs("\033[31m",stdout); + break; + case YELLOW: + fputs("\033[33m",stdout); + break; + case GREEN: + fputs("\033[32m", stdout); + break; + case CYAN: + fputs("\033[36m", stdout); + break; + case MAGENTA: + fputs("\033[35m", stdout); + break; + case UNDERSCORE: + fputs("\033[4m", stdout); + break; + case DIM: + fputs("\033[2m", stdout); + break; + } +} + +void clearAttributes() { + fputs("\033[0m", stdout); +} + +void showPrompt() { + fputs("\033[32m",stdout); + printf("\n> "); + fputs("\033[0m",stdout); + fflush(stdout); +} + +void clearLine() { + fputs("\033[A\033[2K",stdout); + rewind(stdout); + ftruncate(1,0); +} + diff --git a/con/console.h b/con/console.h new file mode 100644 index 0000000..61cd630 --- /dev/null +++ b/con/console.h @@ -0,0 +1,35 @@ +#ifndef CONSOLE_H +#define CONSOLE_H + +#include +#include +#include + +#include // ftruncate + +#include "../ui_common.h" +#include "../common.h" +#include "../macros.h" +#include "../net.h" + +#define RED 31 +#define GREEN 32 +#define YELLOW 33 +#define CYAN 34 +#define MAGENTA 35 + +#define UNDERSCORE 4 +#define DIM 2 + +/* ui */ +void showHelp(const char *value); + +void showInterfaces(); +void showVariables(); +void showPrompt(); +void clearLine(); + +void setAttribute(const int); +void clearAttributes(); + +#endif diff --git a/macros.h b/macros.h new file mode 100644 index 0000000..17d369e --- /dev/null +++ b/macros.h @@ -0,0 +1,51 @@ +#ifndef MACROS_H +#define MACROS_H + +#define START_MESSAGE " ______ _______ _______ _______ _______\n |_____] | |_____| |______ | \n |_____] |_____ | | ______| |\n\n" + +/* strings, foo' */ +#define QUIT_COMMAND "quit" +#define QUIT_MESSAGE "さよなら!" +#define QUIT_HELP "shuts down running sockets and quits the program" + +#define SET_COMMAND "set" +#define SET_MESSAGE "variable: " +#define SET_HELP "sets a variable to a value" +#define SET_SYNTAX "/set variable value" + +#define LIST_COMMAND "list" +#define LIST_HELP "lists all variables and their values\nuse /set to change a variable" + +#define START_COMMAND "start" +#define START_HELP "starts either listen or send if specified, otherwise starts both" +#define START_SYNTAX "/start listen|send" +#define START_LISTEN_COMMAND "listen" +#define START_SEND_COMMAND "send" + +#define STOP_COMMAND "stop" +#define STOP_HELP "stops either listen or send if specified, otherwise stops both" +#define STOP_SYNTAX "/stop {listen|send}" +#define STOP_LISTEN_COMMAND "listen" +#define STOP_SEND_COMMAND "send" + +#define RESTART_COMMAND "restart" +#define RESTART_HELP "restarts listen and/or send if either are running" +#define RESTART_SYNTAX "/restart {listen|send}" +#define RESTART_LISTEN_COMMAND "listen" +#define RESTART_SEND_COMMAND "send" + +#define HELP_COMMAND "help" +#define HELP_MESSAGE "type a message and hit return to send\npreface commands with '/'\navailable commands: help, start, stop, restart, set, list, quit" +#define HELP_HELP "the help command, obv." +#define HELP_SYNTAX "/help {command}" + +#define UNKNOWN_MESSAGE "unknown command" + +/* ints, foo*2 */ + +#define STDIN 0 +#define DATAGRAM_SIZE 512 +#define COMMAND_HASH_SIZE 64 +#define CONFIG_HASH_SIZE 64 + +#endif diff --git a/main.c b/main.c new file mode 100644 index 0000000..c191572 --- /dev/null +++ b/main.c @@ -0,0 +1,116 @@ +#include "macros.h" +#include "net.h" +#include "common.h" +#include "con/console.h" +#include "ui_common.h" + +#include + +#define STDIN 0 +#define DATAGRAM_SIZE 512 + +#define QUIT_STRING "quit" +#define QUIT_MESSAGE "さよなら!" + +#define NICK_STRING "nick" +#define NICK_MESSAGE "nick set to" +#define NICK_SYNTAX "/nick new_nickname" + +#define SET_STRING "set" + +#define SET_IP_STRING "ip" +#define SET_IP_MESSAGE "(re)start send/listen sockets to use new IP" +#define SET_PORT_STRING "port" + +#define START_STRING "start" +#define START_SYNTAX "/start listen|send" +#define START_LISTEN "listen" +#define START_LISTEN_MESSAGE "--starting listen--" +#define START_SEND "send" +#define START_SEND_MESSAGE "--starting send--" + +#define STOP_STRING "stop" +#define STOP_LISTEN "listen" +#define STOP_LISTEN_MESSAGE "--stopping listen--" +#define STOP_SEND "send" +#define STOP_SEND_MESSAGE "--stopping send--" + +#define RESTART_STRING "restart" +#define RESTART_MESSAGE "--restarting sockets--" + +#define HELP_STRING "help" + +#define UNKNOWN_CMD_MESSAGE "unknown command" + +int main() { + char data_buffer[2047]; + + FD_ZERO(&master_fds); + FD_ZERO(&read_fds); + + getInterfaces(); + initNetwork(); + + addCommand(QUIT_COMMAND, quitProgram); + addCommand(HELP_COMMAND, showHelp); + addCommand(SET_COMMAND, setConfig); + addCommand(LIST_COMMAND, showVariables); + addCommand(RESTART_COMMAND, restartSockets); + addCommand(START_COMMAND, startSockets); + addCommand(STOP_COMMAND, stopSockets); + + + addCommand("open", sendOpen); + + addHelp(SET_COMMAND, SET_HELP); + addSyntax(SET_COMMAND, SET_SYNTAX); + addHelp(LIST_COMMAND, LIST_HELP); + addHelp(START_COMMAND, START_HELP); + addSyntax(START_COMMAND, START_SYNTAX); + addHelp(STOP_COMMAND, STOP_HELP); + addSyntax(STOP_COMMAND, STOP_SYNTAX); + addHelp(RESTART_COMMAND, RESTART_HELP); + addSyntax(RESTART_COMMAND, RESTART_SYNTAX); + addHelp(QUIT_COMMAND, QUIT_HELP); + addHelp(HELP_COMMAND, HELP_HELP); + addSyntax(HELP_COMMAND, HELP_SYNTAX); + + if (initInterface() == 0) { + is_running = 1; + } else { + printf("error, couldn't start interface...\n"); + } + + while(is_running) { + //for(;;) { + read_fds = master_fds; + if (select(max_fd+1, &read_fds, NULL, NULL, NULL) == -1) { + perror("select"); + return -1; + } + for (i = 0; i <= max_fd; i++) { + if (FD_ISSET(i, &read_fds)) { + if (i == interface_fd) { + handleInterface(); + } else if (i == listen_socket) { + if (recv(listen_socket, data_buffer, DATAGRAM_SIZE, 0) < 0) { + perror("couldn't read() listen_socket"); + } else { + handleInput(data_buffer); + } + } + } + } + } + closeInterface(); + //freeCommands(); + stopSockets(NULL); + freeInterfaces(); + freeHelp(); + freeSyntax(); + freeConfig(); + setAttribute(GREEN); + printf("%s\n", QUIT_MESSAGE); + clearAttributes(); + return 0; +} diff --git a/mockup.xcf b/mockup.xcf new file mode 100644 index 0000000000000000000000000000000000000000..804885d71ceb280f4fb53268f74e1bcd08eafef4 GIT binary patch literal 53279 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 Ux~G|_e#}+-GN%!5{=)441K=m@v;Y7A literal 0 HcmV?d00001 diff --git a/net.c b/net.c new file mode 100644 index 0000000..64c2779 --- /dev/null +++ b/net.c @@ -0,0 +1,437 @@ +#include "net.h" + +int initNetwork() { + #if defined(WIN32) + WORD wVersionRequested; + WSADATA wsaData; + int err; + /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */ + wVersionRequested = MAKEWORD(2, 2); + err = WSAStartup(wVersionRequested, &wsaData); + if (err != 0) { + /* Tell the user that we could not find a usable */ + /* Winsock DLL. */ + printf("WSAStartup failed with error: %d\n", err); + } + #endif + + setConfig("port", "7332"); + + char *hostname[15]; + //char hostname; + gethostname(&hostname, 16); + + char *username = getenv("USER"); + + size_t nick_length = strlen(hostname)+strlen(username)+1; + char nick[nick_length]; + int i = 0; + int j = 0; + while(jsin_addr, ip, sizeof(ip))) + return; + + ip_list[i] = malloc(strlen(ip)); + setString(ip_list[i], ip); + printf("%s - %s\n", ifreq[i].ifr_name, ip); + dev_list[i] = malloc(strlen(ifreq[i].ifr_name)); + setString(dev_list[i], ifreq[i].ifr_name); + } + close(test_socket); + setConfig("ip", ip_list[interfaces-1]); +} + +void freeInterfaces() { + int i; + for (i = 0;i < interfaces;i++) { + if (ip_list[i]) { + free(ip_list[i]); + } + } +} diff --git a/net.h b/net.h new file mode 100644 index 0000000..2e7b802 --- /dev/null +++ b/net.h @@ -0,0 +1,101 @@ +/* +=============================================================================== + +Net + +=============================================================================== +*/ +#ifndef NET_H +#define NET_H + +#include + +#if defined (WIN32) + #include + #include + #include +#else + #include + #include + #include +#endif + +#include +#include +#include +#include +#include + +#include // +#include // for ifreq + +#include "common.h" // for config +#include "con/console.h" + +#include +#include + +#define MESSAGE_OPEN 0 + +struct in_addr local_interface; +struct sockaddr_in group_socket; +struct ip_mreq group; +int listen_socket; +int send_socket; + +/* "bools" */ +int is_listening; +int is_sending; +int is_group_socket_set; + +/* ifreq */ +struct ifconf ifconf; +struct ifreq ifreq[31]; +int interfaces; +char *ip_list[16]; +char *dev_list[16]; + +/* listen */ +struct timeval listen_tv; +fd_set master_fds; +fd_set read_fds; +int max_fd; +int i; + +char data_buffer[512]; +int data_buffer_length; + +char ip_address[15]; +char port[15]; + +int setIp(const char string[]); + +int initNetwork(); + +void getInterfaces(); // same v +void freeInterfaces(); // change to int + +void startSockets(const char *value); +void stopSockets(const char *value); +void restartSockets(const char *value); + +int startSendSocket(); +int stopSendSocket(); +int openSendSocket(); +int closeSendSocket(); +int startListenSocket(); +int stopListenSocket(); +int openListenSocket(); +int closeListenSocket(); +int receiveSocket(int send_socket); +int checkSocket(); +int sendMulticast(int send_socket, struct sockaddr_in *group_socket, char data_buffer[], int data_length); +void sendOpen(); + +void receiveOpen(const char packet[], size_t packet_size); +int handleOpenMessage(const char packet[]); + +int setString(char *destination, const char source[]); +char *stripString(const char string[]); + +#endif diff --git a/old/Display.cpp b/old/Display.cpp new file mode 100644 index 0000000..cd0b131 --- /dev/null +++ b/old/Display.cpp @@ -0,0 +1,9 @@ +#include "Display.h" + +Display::Display() { + std::cout << "Display::Display()" << std::endl; +}; + +Display::~Display() { + std::cout << "Display::~Display()" << std::endl; +}; diff --git a/old/Display.h b/old/Display.h new file mode 100644 index 0000000..bb802a3 --- /dev/null +++ b/old/Display.h @@ -0,0 +1,21 @@ +/* +=============================================================================== + +Display + +=============================================================================== +*/ +#ifndef DISPLAY_H +#define DISPLAY_H + +#include + +class Display { +// private: + public: + Display(); + ~Display(); +// void Begin(); +// void End(); +}; +#endif diff --git a/old/Display.o b/old/Display.o new file mode 100644 index 0000000000000000000000000000000000000000..b0cdfa6f1b4c1eb8c4850a76d424974b8655236b GIT binary patch literal 32392 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 XjhX9ffx@kwpRaIh=Q|Z{?d1OfHih2E literal 0 HcmV?d00001 diff --git a/old/Listener.cpp b/old/Listener.cpp new file mode 100644 index 0000000..b67e89c --- /dev/null +++ b/old/Listener.cpp @@ -0,0 +1,15 @@ +#include "Listener.h" + +Listener::Listener(short port_) { + this->port = port; + std::cout << "Listener::Listener()" << std::endl; +}; + +Listener::~Listener() { + std::cout << "Listener::~Listener()" << std::endl; +}; + +// main loop, so to speak. +void Listener::Run() { + std::cout << "Listener::Run()" << std::endl; +}; diff --git a/old/Listener.h b/old/Listener.h new file mode 100644 index 0000000..f5c8d86 --- /dev/null +++ b/old/Listener.h @@ -0,0 +1,23 @@ +/* +=============================================================================== + +Listener + +=============================================================================== +*/ +#ifndef LISTENER_H +#define LISTENER_H + +#include + +class Listener { + private: + short port; + void Run(); + public: + Listener(short port); + ~Listener(); +// void Begin(); +// void End(); +}; +#endif diff --git a/old/Listener.o b/old/Listener.o new file mode 100644 index 0000000000000000000000000000000000000000..358a965b4c24cb3cc51a8379832ce7e50e8377dd GIT binary patch literal 33200 zcmb__34B!5_5XXB1P8-1Vb}v0Oh6C~NeGYtB3ppSz6+w`WHOTsOlIONNuU)`Y=u&H z>+Y|vt!-Uvttc*aulA?5wpIIc`T4glzq+=H|6;4(<3?ehy{lSi`L$*1E-e-dVis!@%M_XCB=1 z=h&Wx1B>@I92|IG0F&6Bz{AM<2;Tk&Z$vKM^E469JnpUi@8;Zd=9hbN2X~$MrJXzG z>@yD@I%HY7F|H;LIO@0p7<}EY@J*C80SX~EYJ}iI5S7H|dNR@np?6)9aP%h*!yP+SFel8s@ zWPr&LLJntgq>yDymI^t6$x%X9F*#buIwr>mIfuzIAr~__R>+l19xdd_Ojg)$k47a= zXL7v#K9Q|VPLLk8GkKhlStcv(x)E5ni^&@M5Om*HzSCxUialyD(&q?WYyTN!`^t9- zU1wWkklroyTzfu<^OavD^htJv;u zLn`w764GR&{3HEGtVQxykS{JgV#6Jf!pwn&H)1hoPsLJh{D^fjX0PP-6F3d#$u z{;xs?e+C5L=Cg`y>czmqqIfdPeLNzx3zA8%4}{Xt4@EG@=*H`P;e^Lk2tu!E8xT~EnvPg8Qo zpD4Mj4;U`!|7kfT_bj30XDyW6yNi;af1i^3_EWO&WlHY9vp?2*;Au+s{|_Y(_8oxW zL&s9`@CHgA$x!m>b(B2*C?!w)k&-9-4a5phRZ{Zw3QB(2Ldi3GD0%iLl>F*BO8)Z` zN}lrvu-@}yDS2ToCBJT>$dI?_gc2Kz_bXq>_R zG8@e@*k5j=K?eJek$MxP-bAW51gAvb+7U&TH59Y973^C#2q+kHn4x!n8Z-sNsCYQu z2Ujz}Jh$WY4i?W1fq-D~ye*W>&rz~qCnXC9LWN-QqLGv=9!E)I6(vjVBbKF)QL^kg zN|wJu$;vZ{WmO9$YxWYj_Hs(r-9X9u+bB7CCb4W>NXe#El$^4el2iXkET?@;N$3ko zPA{agrrnf8(wOv{egh?S|A1}=`_+#`H-{ZQ@{S@LrT($k015VQ35>*KYmSn{Wt6o2 zgp%ZAl%)PZ$r(kZ$eBHwl8zaaY}-J|_ADjexSWzR_ffLrRZ4dLiITIwqU4;TMxm5l zb0|4COv$&mQF7ijl>B-DwfEa9m53UzOm7gZ*Fqkf_)C6ZQH@ zl)TH;-{%S+afOeW^AqO$3s?V?D}2rk{goOT5I!D^6dcer6dY@CK=W8iqBALpt)`@9 z3ni`RP!hk2k}Y>rvh{bAB>pcY?ZKl^${8~#$!w-1yMvP44=Cw;n3ArSDB1QlCELHG za<6h#dKOAGAPP-!FljIKBuN~|$lFsi_Aalp~&W)Tkt)=mYkU|`*` zl&mM;8aQnUQ7tW$Y}rN0)~g|5y`BI`&^h+0!y`_!v2h#yc?Ifc@OKLcpM*HxV1K|^M{4|N?H)-yA00PJ@e2WW+54RPnpQr8$F2v1- z3sKTIQ?-jraS!UD^gY%NwJe%et#-;fj1r+u|$org?#a*+ziT}=pxR+9)skD*p zf}1PrO2YF@cMh}Q#>=CVS31Z?vjq3!3e2(nM5QoS?ZQHuM>M)fLT87$7Q2J_a2wZr zA}PrnxRohAD@dHMJ-}=j0l2#6am1Me_d@3IR{uE{V#v_FFvWv`L45_?XdcV(W6*RA zPns)fVPK%anqr?#+4VGmG5T=TGi47^8HOa?%Pu0B7^ifX`2`M{jlqkjp4elpj|%_c zRCI>70x=kcLWpkyec?7C+h)}b`W8k%6cP?P5A`tt@1WgGaYQ?44^tfQ4*CvL{kYy< zrUFcTm#M)_ozK*8rY>M=6jK*6RmRjMxYHJtPhjd&oaY7QRc6|b;<3OOjXG^?cn#SJ zV>Z`Lv`h`dP1uNy(VT0nJcdh20>*h-f|&FgZh94R&@`YN*;VEO4!F#PugLruC%Vm< zK0IPy1UTKe@CqQ|`GB6DO8lsYH2IYM0CM8Z%UMXA!ZVCqv5nEEM{yD<9KW&Aq;zwo zunR5ndwumwHb!zbhOU}Xy7ee^3xiruTZkEro7lHuyh~oe;PV*A0GLISL-5vI$o;_B zxEI+=m;=M+UN}}T2S(J)K`YhU%6eYt7;KXs&OUJ#7hw1;1rvEyzYd+VP+J>ga#kM2 zTE}v^j}l_QXx;6dB?8`a1Yj87UBCcW00#IT0n$Rf%kYfD;P#9nc>e)>C#@83{IK=4~7uoLT7^gZ{d({ABTL8bIA7uhkQ?R$oDjde80qyZ;~Bu z%2@sH#M-YxTQ)|16_|sf=6HwI|6VLYq4ri&#O2)L;oQx1`K5giHi0*`2QLvmLXm0x zrcG+#&E@H7TEAx(4FX|!>&{4S<~V%d@%L?f2_ANi$6oYZ!VmVAuab=4cbU(&XMli( z@G~0O>D7*m~UPJj-H8Y%S z{}izM5vO(yzR7+Tu$LUX;ytKk3Qx7)gM!c8!ZKXvA~9?i0&4(%q$hvHnl;>960+7; z0N4}ZHq~V!@xqjLn3e;>CYOmMNi*B*tx(YA6iN&{h1>Ziim=az(yJVf3T)RXvKtvF z*8VA=_ahVArIrO;jO9mSEdIP(2K!n+=yZwyEx-bpo$CL{WT#<`sl>qdA{&PgxC0<2 zFbPalWJ7?A2_2vm6`<9u0BRASGaTOAiUNdBuZF}vs*x7p;5v-R>ju|P$Flm_STy8= z>F}sYZ4CJc0|m~0j9bwR>cx-)*noWvRINbXiWA@l>nVDMHRK=`kpUjSVk|MmiL5o` zOQ-k``NixthS1}NMZ4Z1WLS*#>4v^Qyw{LIQUejY6#797ri{-;v5Gy{lvN-rt0C?5 zBMHlqs|C3**S(#9%XNP5T!US%dmJumF%DfYdJQKoMC=!kYb~^B%J|_ci)9~R8QD`b zJ(}u~Mf;(WSdS~uw4SRu6F)YVbgntJUI3AZP1v3UYRyD|fytcY!N+p(}Tp zD|fjocZDl=l`HoYSMI5aa7hPc|NN(Z)$nx7G9()D%z{cZ7 zhB-Vc{j30^3LDQKT?P2$0t4cT6;Q#NPmx<`i4RR`;~^!_18m7CJH3D=2_9YMH4yZn zO>I2OtUwj$W-4vwlN~(aq)Pm#C91XX!zrG7a+vO%lbGruu8v2dnqvXY&eAUmY&4nUEIP(z|&iPoYYT5r4ccL!$FT7B6ft2B5jP?DahtXTeSWU zii|Oo=OzVykzfq%wXVYOG6l*Q^!LJWJ3Wu$tZ`4Sv-T;GO`F>9Rf4J|#S4>skLzp!O6TXMvAd3CJ?=fEc0T{j; z059>^(NMa1dP#;a9_b|+a$F63gyN|+p+Q!oFoo*!yeXXSv!_CN1>T?%J|3{O3Mr1W z@pPLDd1MOfdD!r{I}e}9IG%qqE@D2TWsT?IdF&&2-rxaw9$v~~o;P>}=0Gv*glLfE z6^p0oJhiZeJRv32CmRpic_48Gn(B`gpo6gS_+2kAGJ>=+jAh{QyelKGmG`*|cydoT zy9tkPDJZ@>aFj$q4dyWL>irs%SYozfL~h3s_c zoPsys!Y5FeEjqnO4tPIS!JHYV{oKh{5O+to9v{B#kd#=2JN^}s=xRwMW~};77WtchMI<^L5{VhB{!9`%z2a!o@fnjnVZ}@@ z(QCkg-kd~Y1|}lDFu|NPdMYBE-9P7OEL#Zo!11tg@-U6Qi{=Qv!r=pPe8XeP-k`(s zT}~Ok1Ttl>B4J;RWuBQh`Zla@-|fKlySRUa?OW_pQU`-kx#^$#;v{T>#% z!4-*FN2HhNRU|%tkVwo}0le2=$a3#=m_=Xiz}YwV#W&KeIaD5f-(IoD&(AI z%s_hjDYtx!Z1}v#8bePGKKmVL?L+t(jhyBvWy~P^E5P~!#CQd1yqE%tF+qE%Q(#`# zmH2-K6&g{J?XzY;`AYaX3AMnCy##Z%k2{V{Ej<=)y06K=~;2FSLSzkpi9fq3_;a2%8jg4+r#qn==m zl}M2>Fyp=K<-oiO5qls`@`8&Kc~q;lnhL#jOx|9DIf_MXJ1`Gs$69=w+1Fb$0wV@ci1zzJ%K2379_Q`ikc0q7MAuJZW=4^OYa%ZgzfEn=G zxpT+Kqa}antaYspjP1a6*2bJEg|@Icc=)l$4G0$d29ypcu?N`!h)4>CTD}1@if0x# z!l{xkX!`~f7Xw*j0|{?bsH~_lSO>4$iYlz);@MCez5sF`oD6~nO2c5*z<9vGS78g78B}lk z{HQ)w2>LC|4u|Yu$`)aE2(VBOk!5HBbZHjsIm3dI8D1|2fLGH6z&WcQ@{PnSTLPYf zTsxfDucjEQkE*m!?8nBL)vuY<9bE*f)k4{r{4!Ydlc5RJwyaj#Y7EZmHwr8@)&O9Y z#^8zlQ1sCTLnhc8U1JiIaJmQ=eX zhPlRtL?ae5B@Z{;wRtESq!}zQH6YVx+DsS_%bFgvOn>0WbA~gE>VtXxoRKGt%{G(l zj|MVkv#ePTpNpN~j1vtDoF|Nj(L2$#91s2+0La?BlI9MPwJ;CP{;c^Vm)bHzyTEOV z^=UBc88#PZ4%6ybl4i>=dUTy>_h80F0GOetHl~&u2SwzArw-sbrT?vhPSS)J| zt`S@?wX|f`*24H9=Q_-QMx$VxSa0&+s71aFmpnX(f-JSIQS#R4YZ;$R&ClW%pf?($7p+{0t? z2^R~P{KXE|5it2n9IU&1Q+BC`$K)?}v4F`x?_eDPlYha%y303ZzxME${BK<>VDf)- zu#SMqzwKb%ZXOJ)gGTogdJy%l#5yEaI)D7HLeJO)wZIDXto3KmiAC876Zx(ZCYL* z3biD2p-5NP6!4w z+DvD-yzI-ZS^TDc@@9Bmf6O0U4ed4jCTt*N%?+=6DON>FO#gmxMJD!HFDchndyW zY?_`-Wkc{r8PtwL^>`-4V@s97YU0*Fi%OeVA{EZYlP!(023T*@e6*`Qm5e5{)m07H zJx^!5)t0`@qLqZxX||ONWuon&CK!YEa3l&UWwPOHl$J*{oVFq<=t)Osdm5NyG|zFO z(5&J0#j70pT4(&r{F;W0W!3<#Zdlwj;b@7Fn?RE07^JvnoZrf_+Vk~kYr<6lYBgt4 zp;lP;;HzcPgP;XVHy&`-9ngb?jY}KY6+zsSgYkfc zVnxqz{ElTDo5vS{An=?ZDYR)#wiavwrda0j38^OZ09GP_Utr-{g#{LiC!)y|x+odZ z5Nra?Q><93J(@(@J6fU}h-c&BM0|TR)NW-k$-;u_z&X-e|H;;~twqb%mCc_tsf?mF z?7!n>T({r55M#eQAO3Yqp}EJU0E?rE<}#@5&OV%MxN|_n(acr`3#8*IaJJj5rVLE^ zNGma9!X4~=LrDybaH7Q0;fO4DT-?rtp905=;MF3~xpXw0#({@v4@)549F@`c?tipu ztymm392jQU%OwDsh4b~eGT6;$%If%tQL8-; z+iPb$6UF@>n$JaG$Ff?|sa!j_3(I(1Xad}93KW|P(*ih*e~p3WDJTQmuoouHDcV7d zcO#mXj`_fS;$+5v2-c@@g6^ULo6%-YYbz9j01eHy1h&|JvL{A5n!uhoXgFMF@$e)M18c;Ti#;rI%e8jQL!uLNor0vPW zmYs2ALq%Gou%{nZ*K4Z4t#ySx%b3Cr^bzr7DAJm4!Dt7Aopv5DUiUCUG+}9gaMyDO zp1qLSsMQ8KjiaH4)e#JAno_t4qdD^$- zXu)(%V_lp>WRQI#DutX^Et+(g#XN=}@*a-MB0){1vp$9y>G zRt%nxU?(!ePUFzlL@UvCqZm5JGvWzgF=4}2XIr!ld+vl9xB$AVJ_Tc;4(7&~X+E^N z*4ojCBCu5q5uNbRalSn)5pamEcLo(`Biq~;Ya|Gns{TI~8Ud2lq^nu;TL|6ELO0g3SBL%|{5hgh5OC_3(*TFrN zW5BuY6TbzX2siO`w1vGpIHEAxjXEh05@bgTs|W@AXH(5MKJ88Et>nhyN!sCHx`He! z-^xh>i?_qG1I#{kyxx;fLc>i=%`dEmVs!431^n>NVB$1a=sE`!sg`V6#vL zw=wXH7?jdD;tY3#4Gb@`t*KlFJQqABMcZ-TkcUV682qh?c0umscDkTnhW zJ*NyeB6u`}V9E^qVFn=)Cr~g?PjoCs69rlf;rxJBrc)3P8FXB55J0{exA}bgu&;GI zIE*RUArpls8BrJZUkYYmdL;3gAP&yZ8=C@qJkyK^28ZbvS1&=wc({I~t)b3DinKK* z@j01723Uk^>1eFy#R!i#?c3ZPj%RC`=_yWU^hS^*;p`1N-O>gmft*yeLh zp~euH-gywAC+{AY>U4=?aJ7QhY%|{1*$2@-!Le!?K2C%Z@F!G4*>Fof)$_>IM9(ls zFkpUMQ#5Jigdh%wF0e<2a>-mK3Q-%bZai({2Z_U6Bpj*Z?n6NZ4D=ZpjO(mL^XJbf zn*dLn6Xj784>sY#k4^Bhx39MBu7F+I?+E`za8e5&J<<=B(OL4`0fBE9%|81y+jQ^s9{yYBx-|$CaV(mo@gc5{dfp9VT0pJ(N=syhOPf!zRExX3>W{w z6_2zzlGm@9;DkT#f^T`9*NonRt~E>@MB#7^g&)kCmst1}0ABb$8F6^Skatx`y*v;I z-9Ek^Lz%tR*J5=2YN(4m&XGLi@iOh3Im#&WnmndBw|mn6bZOZ1*VNH;Jrro2khgsu z*D!WM`@#E%ZuUC~Fx^M2*(zW;8rXAb-UcY^sr}v3e(NNzjP0ZDMt`H%dcd?ytg-hP zyu)WD@FK-~Y2Ici)EM&r2nQCfH&vk`EpSae*56Y})vYQ{oV%`{f|8#4|L2`t#ni|C z_k$nZ|J{ITnOO6FY5(_XVrt%9z}r*%WoM%l_!~%^(E1qwdENeHfT2vIr?6WW)Nt-> zzC&?YtY4E+#f5Yy{#g4Ew<7$r6R zH!zm>WWTzznWIY>ar}btW9l2bmH?)Ph-$nk?LSSFd(-;&q&srox}56_7vcE%Jr0F# zAAez`r}lrbitFE}8dM}R^>9bNLhCPwdMJYSdY0nrQ4`d!CkrF47B@78bJX_WrlpC5 zyK)R(2Y3P0FrR6dPf}V1H=kF~9u62@zHYmf!Hsp9Hg}%|AKCP9`7HRbriaVNfAgzb ziH~~M4F-Jz-9bQnmR>!~=A)U|y^7Dm*_eOr26B*Ryv*k~R{`Ert2gz6zuF5v6b7Ov zIruSkPwm2AjU(LXL9rRgZtMl$Bsh*IUWUI7@SfWJ7UJ3&K)p+P;s0?jxN~+*4|(|7 zW@&YOPe-Lx1dmE4eBM+GCr^iYtQUv(ivRo(K|eD%Z;(K#M5eL(K^?rJ&Q?#!dtuQS zSsQ9tGc|;#IrI(+4gwR6k;ALIHng@1YEPqw$2F-$reWp6)oW5~LJjzw;i^{+FB820 z9k=8G)p(ZRsUojq09uo+Gv9C2;&c6cV)edC?15DTWH+J@IpBQDaSVn_XtOQN-)@f3*&pd zOuI{^(n5wE{5H{Nox%?u!9cUZjWIF`zhCTdj>7*WaxPZ*dQ=v!>*?<5d5Y+Br^0I` zo_tv0PYL~;!uMi;1J`SuIQ@l>W$F4r;r}K2|4remaS-6@D|#7w-X>ct|1|> zDfqn#e^TT;sqk}!|Mv=~zjy|Eyrb~@WuAPl@JTZ6ePkSr{_vGGT|tFUl>QD^_;X_a z3Wb~auSVg;7*N7BN8wM%yj`yFxU?J6xb!Ec@Q+0QjKVJwyLBnNN#viW@K41dU8(R& z2}y5K_&M?`L3b*Ar#R7v6#i`)mp2stGr`|i`1fTUeXel)!%lb=$U}!2$4kUd@?WBI z=jTqbTTtv|_+OTOjaB#;(%x|jzf~O2X=ZhVFs_?bKzhB`i z#P2<+aQyuoynd_jn}z=kg@0T8^VR~aO;3=`sOojhQ>YuFe z{W2eRD%|Y5H!6IL`1xlPPQP6Z?SG)~_r)Li#U4h_8M1!IDg12FXPLs6i=4Q^_sTr{ zmco~c9ycg_gvfbF;rEL@|Df<8vQG_>aWMMdBK+kFzghfnwZgBH`3b*cMVFEDx{S** zh2Jjo^Av@@ZtS4&2{JC73ODiGw-o+6(f?9~<6lX`>js5CF8#V&;U(fXo>BNEBIkXD ze<`%t|BW5y2>)?nZ-bAM^}JExAIdt)Dg1k)=cNk&T-yDtDEv~f+eC$%_}0WPM$T$k7t0m@e+wN|cv||qRpI72>Kuj7z=q)3t?+=zxk=$h z&;7mNuk?a{-U~iR_6O77D$xgjCmkm&CsvrSPoS zZM?$Ai$2p8j(@Hcuh|O!mH5LY3OBE6wkZ64(KDy;H^uLn_k^Zj_i?kuSeQp%{_!T}z#(lKHXG^~-6#k*uZN9<}h#xpf z;W-({xWeBNzt^tt4KiLAD%{xfa)sY2`roVY)5L#1sPJcn|2GQHiT!p{@^|Dfn9a!tww6!E1-Y?-4nB6#k;v^KylcllgOW--t!3J=S=dspG}#IGJuxH)Gmz?VI6nfb6&_ML#juafyNM&VhR z|Hmo3UG$ux@Q-BPE>`%3qW^k@zb5TAD}23-OIqPiiT*n^E_S{^;V+7RyH?@%i#|VA z_;@y#wNK$E%KCar;p4>)zf<@nVz;*x{*dfze^&Se(bK$$GUN4{%&SrIg393LJhW2b zFUvfyS9nD1wm{(~URj~=b<%E|!uyMy?F#3=(Q8@fDSV!c%Vi2bL+pQp!tWM8@Z(#4@W5+|J)y56BKUbG${Nw z;a{onS4E#rg@i~b!7e@4dTN`*&dy+5GvZ%ADDy27`MLLVr6vFLM1;b)3IV@GjC)2}-OpQrE| znI{p2-zDvSL*eFJ;5vny_Zbf;{D-pMUsm|-f`6>=abll=_%a?YqyHi%tty3^bB(16 zKSk!l7KPJ`Z;+Ky_<1s3XDi%%&v=o-i^cxeDBOInaHGP1FYEUXg}*2B@Ii&ok@0#~ z;V;WRGE80=8T)J#yOk@P|1vrJ86<_jEpf$Kg=zp%lzmRdcM&bL!KKCg6 zXQJmz3jav>4=VgWWu6R?k19-me=}A1dqX9|||`bq1BO0ZqT=O1l#kzEkFBgTh}D{*4Onl6jI=_;)P6u2T3y z(f+vH~Z$%z2J2UH~KUv z+~~7f;YOd3!i_!&g&Tcxz2JKlZuGfQ;YOcZ6mInSsltsuk0{*e^UGfFHxzE-oDURk z;+%sDH+mKwoj+bC&Kaa|qfcos_#}ltEc1Dq!q1m^vP|Lq#Sg?4zRG6(zNPS?5|>`9 z@FJ1_u)>Xfex-0@pH~!a?DLMojeR~(iRVn`Xmau!r2}D+(``bK|!ZK1$;D4;B8nO!k8c|4i1qZ#?T|=E+=no*Js~D}-Ov zrLa(@4hfLuN{~Z)+l(W(2J=NS$m`{wqj0m1PFJ{DM>`d6=I!+gH}mIz0r6;A Awg3PC literal 0 HcmV?d00001 diff --git a/old/Makefile b/old/Makefile new file mode 100644 index 0000000..597d5ef --- /dev/null +++ b/old/Makefile @@ -0,0 +1,25 @@ +OUT = bcast +PREFIX=./ +OBJS = main.o Listener.o Display.o +CXX = g++ +DEBUG = -g +CXXFLAGS = -std=gnu++11 -Wall -c $(DEBUG) +LFLAGS = -Wall $(DEBUG) + +$(OUT): $(OBJS) + $(CXX) $(OBJS) $(LFLAGS) -o $(OUT) + +clean: + rm *.o $(OUT) + +install: + cp $(OUT) $(PREFIX)/$(OUT) + +Listener.o: Listener.cpp Listener.h + $(CXX) $(CXXFLAGS) -c Listener.cpp + +Display.o: Display.cpp Display.h + $(CXX) $(CXXFLAGS) -c Display.cpp + +main.o: main.cpp Listener.h Display.h + $(CXX) $(CXXFLAGS) -c main.cpp diff --git a/old/bcast b/old/bcast new file mode 100755 index 0000000000000000000000000000000000000000..1e147bda6daf9810cb03ea5f96eef7050b641981 GIT binary patch literal 53703 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 literal 0 HcmV?d00001 diff --git a/old/main.cpp b/old/main.cpp new file mode 100644 index 0000000..104bfae --- /dev/null +++ b/old/main.cpp @@ -0,0 +1,20 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "Listener.h" +#include "Display.h" + +using namespace std; + +int main() { + Listener *listener = new Listener(7331); + Display *display = new Display(); +// dia_val_ai->Begin(); + delete listener; + delete display; +} diff --git a/old/main.o b/old/main.o new file mode 100644 index 0000000000000000000000000000000000000000..0b09df21187f0f63be6bbd607a9945f98b8ea9c1 GIT binary patch literal 30560 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 Z=VRHoHq=mZ?(?B%CFiv5<1R1pzW}0r8?*ob literal 0 HcmV?d00001 diff --git a/old/mcast.c b/old/mcast.c new file mode 100644 index 0000000..ec5ac12 --- /dev/null +++ b/old/mcast.c @@ -0,0 +1,160 @@ + /* Send Multicast Datagram code example. */ + + #include + + #include + + #include + + #include + + #include + + #include + + struct in_addr localInterface; + + struct sockaddr_in groupSock; + + int sd; + + char databuf[1024] = "Multicast test message lol!"; + + int datalen = sizeof(databuf); + + + + int main (int argc, char *argv[ ]) + + { + + /* Create a datagram socket on which to send. */ + + sd = socket(PF_INET, SOCK_DGRAM, 0); + + if(sd < 0) + + { + + perror("Opening datagram socket error"); + + exit(1); + + } + + else + + printf("Opening the datagram socket...OK.\n"); + + + + /* Initialize the group sockaddr structure with a */ + + /* group address of 225.1.1.1 and port 5555. */ + + memset((char *) &groupSock, 0, sizeof(groupSock)); + + groupSock.sin_family = PF_INET; + + groupSock.sin_addr.s_addr = inet_addr("226.1.1.1"); + + groupSock.sin_port = htons(7332); + + + + /* Disable loopback so you do not receive your own datagrams. + + { + + char loopch = 0; + + if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&loopch, sizeof(loopch)) < 0) + + { + + perror("Setting IP_MULTICAST_LOOP error"); + + close(sd); + + exit(1); + + } + + else + + printf("Disabling the loopback...OK.\n"); + + } + + */ + + + + /* Set local interface for outbound multicast datagrams. */ + + /* The IP address specified must be associated with a local, */ + + /* multicast capable interface. */ + + localInterface.s_addr = inet_addr("192.168.182.51"); + + if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0) + + { + + perror("Setting local interface error"); + + exit(1); + + } + + else + + printf("Setting the local interface...OK\n"); + + /* Send a message to the multicast group specified by the*/ + + /* groupSock sockaddr structure. */ + + /*int datalen = 1024;*/ + + if(sendto(sd, databuf, datalen, 0, (struct sockaddr*)&groupSock, sizeof(groupSock)) < 0) + + {perror("Sending datagram message error");} + + else + + printf("Sending datagram message...OK\n"); + + + + /* Try the re-read from the socket if the loopback is not disable + + if(read(sd, databuf, datalen) < 0) + + { + + perror("Reading datagram message error\n"); + + close(sd); + + exit(1); + + } + + else + + { + + printf("Reading datagram message from client...OK\n"); + + printf("The message is: %s\n", databuf); + + } + + */ + + return 0; + + } + diff --git a/old/mcast_client b/old/mcast_client new file mode 100755 index 0000000000000000000000000000000000000000..01da409c07ab8eadb8f31fe701d25a2639e2b500 GIT binary patch literal 13770 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 Q9@9$+K4tg;v|;n}-|!y{p8x;= literal 0 HcmV?d00001 diff --git a/old/mcast_client.c b/old/mcast_client.c new file mode 100644 index 0000000..dd90cc9 --- /dev/null +++ b/old/mcast_client.c @@ -0,0 +1,172 @@ + + + /* Receiver/client multicast Datagram example. */ + + #include + + #include + + #include + + #include + + #include + + #include + + + + struct sockaddr_in localSock; + + struct ip_mreq group; + + int sd; + + int datalen; + + char databuf[1024]; + + + + int main(int argc, char *argv[]) + + { + + /* Create a datagram socket on which to receive. */ + + sd = socket(AF_INET, SOCK_DGRAM, 0); + + if(sd < 0) + + { + + perror("Opening datagram socket error"); + + exit(1); + + } + + else + + printf("Opening datagram socket....OK.\n"); + + + + /* Enable SO_REUSEADDR to allow multiple instances of this */ + + /* application to receive copies of the multicast datagrams. */ + + { + + int reuse = 1; + + if(setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) + + { + + perror("Setting SO_REUSEADDR error"); + + close(sd); + + exit(1); + + } + + else + + printf("Setting SO_REUSEADDR...OK.\n"); + + } + + + + /* Bind to the proper port number with the IP address */ + + /* specified as INADDR_ANY. */ + + memset((char *) &localSock, 0, sizeof(localSock)); + + localSock.sin_family = AF_INET; + + localSock.sin_port = htons(7332); + + localSock.sin_addr.s_addr = INADDR_ANY; + + if(bind(sd, (struct sockaddr*)&localSock, sizeof(localSock))) + + { + + perror("Binding datagram socket error"); + + close(sd); + + exit(1); + + } + + else + + printf("Binding datagram socket...OK.\n"); + + + + /* Join the multicast group 226.1.1.1 on the local 203.106.93.94 */ + + /* interface. Note that this IP_ADD_MEMBERSHIP option must be */ + + /* called for each local interface over which the multicast */ + + /* datagrams are to be received. */ + + group.imr_multiaddr.s_addr = inet_addr("226.1.1.1"); + + group.imr_interface.s_addr = inet_addr("192.168.182.51"); + + if(setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0) + + { + + perror("Adding multicast group error"); + + close(sd); + + exit(1); + + } + + else + + printf("Adding multicast group...OK.\n"); + + + + /* Read from the socket. */ + + datalen = sizeof(databuf); + + if(read(sd, databuf, datalen) < 0) + + { + + perror("Reading datagram message error"); + + close(sd); + + exit(1); + + } + + else + + { + + printf("Reading datagram message...OK.\n"); + + printf("The message from multicast server is: \"%s\"\n", databuf); + + } + + return 0; + + } + diff --git a/ui_common.h b/ui_common.h new file mode 100644 index 0000000..ddd576c --- /dev/null +++ b/ui_common.h @@ -0,0 +1,24 @@ +#ifndef UI_COMMON_H +#define UI_COMMON_H + +int initInterface(); +int closeInterface(); + +int interface_fd; + +int handleInterface(); +int handleInput(const char *data_buffer); + +/* remove */ +void showHelp(const char *value); +void showVariables(); + +void showPrompt(); + +void setAttribute(const int); +void clearAttributes(); + +//void clearLine(); + + +#endif diff --git a/x11/x11.c b/x11/x11.c new file mode 100644 index 0000000..6b92d19 --- /dev/null +++ b/x11/x11.c @@ -0,0 +1,413 @@ +#include "x11.h" + +void testFunc(){} + +void drawLogo() { +// char tmp[] = "#008800"; +// XParseColor(display, colormap, tmp, &tmp_color); +// XAllocColor(display, colormap, &tmp_color); +// XSetForeground(display, gc, tmp_color.pixel); + //XSetForeground(display, gc, 12812818); + srand(time(NULL)); + XSetForeground(display, gc, rand()); + + XDrawArc(display, window, gc, -26, -24, 72, 48, (260*64), (90*64)); + XDrawArc(display, window, gc, -28, -26, 76, 52, (260*64), (90*64)); + XDrawArc(display, window, gc, -32, -30, 80, 56, (260*64), (90*64)); + XDrawString(display, window, gc, 4, 13, "bcast", 5); + XDrawString(display, window, gc, 4, 13, "bcast", 5); +} + +int initInterface() { + x_logo.chars = START_MESSAGE; + x_logo.nchars = 60; + x_logo.delta = 10; + + display = XOpenDisplay(NULL); + screen = DefaultScreen(display); + int black = BlackPixel(display, screen); + int white = WhitePixel(display, screen); + + window = XCreateSimpleWindow(display, RootWindow(display, 0), 1, 1, + 240, 320, 0, white, black); + //window = XCreateSimpleWindow(display, RootWindow(display, 0), 1, 1, 256, 256, 0, BlackPixel (display, 0), BlackPixel(display, 0)); + XSetStandardProperties(display, window, "bcast", "bcast", None, NULL, 0, NULL); + XMapWindow(display, window); + + gc = XCreateGC(display, window, 0, 0); + XSetForeground(display, gc, WhitePixel(display, screen)); + XSetBackground(display, gc, BlackPixel(display, screen)); + + XSelectInput(display, window, + ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask + | ButtonReleaseMask | StructureNotifyMask + ); + + /* set our colormap */ +// int i; +// XColor tmp[255]; +// for (i=0;i<255;i++) { +// tmp[i].pixel = i; +// tmp[i].flags = DoRed|DoGreen|DoBlue; +// tmp[i].red = i*256; +// tmp[i].green = i*256; +// tmp[i].blue = i*256; +// } + +// colormap = XCreateColormap(display, RootWindow(display, screen), +// DefaultVisual(display, screen), AllocAll); +// XStoreColors(display, colormap, tmp, 255); +// XSetWindowColormap(display, window, colormap); + +// XSetForeground(display, gc, tmp[16].pixel); + + colormap = DefaultColormap(display, 0); + green_gc = XCreateGC(display, window, 0, 0); + char green[] = "#008800"; + XParseColor(display, colormap, green, &green_color); + XAllocColor(display, colormap, &green_color); + XSetForeground(display, green_gc, green_color.pixel); + + string_gc = XCreateGC(display, window, 0, 0); + XSetForeground(display, string_gc, BlackPixel(display, screen)); + XSetBackground(display, gc, WhitePixel(display, screen)); + + int offset_left = 240; + + quit_button = newButton(offset_left, 6, QUIT_COMMAND, strlen(QUIT_COMMAND), quitProgram); + offset_left = quit_button.x = 240-(quit_button.width+6); + addInput(&quit_button); + + stop_button = newButton(offset_left, 6, STOP_COMMAND, strlen(STOP_COMMAND), stopSockets); + offset_left = stop_button.x = offset_left-(stop_button.width+6); + addInput(&stop_button); + + start_button = newButton(offset_left, 6, START_COMMAND, strlen(START_COMMAND), startSockets); + offset_left = start_button.x = offset_left-(start_button.width+6); + addInput(&start_button); + + restart_button = newButton(offset_left, 6, RESTART_COMMAND, strlen(RESTART_COMMAND), startSockets); + offset_left = restart_button.x = offset_left-(restart_button.width+6); + addInput(&restart_button); + + offset_left = 240; + send_button = newButton(offset_left, 300, "send", 4, sendMessage); + offset_left = send_button.x = offset_left-(send_button.width+6); + addInput(&send_button); + + text_input = newTextInput(offset_left, 300, 27, sendMessage); + offset_left = text_input.x = offset_left-(text_input.width+6); + addInput(&text_input); + + offset_left = 8; + + list_button = newButton(offset_left, 275, LIST_COMMAND, strlen(LIST_COMMAND), showVariables); + offset_left = offset_left+(list_button.width+6); + addInput(&list_button); + + redrawInterface(); + + XFlush(display); + + interface_fd = ConnectionNumber(display); + FD_SET(interface_fd, &master_fds); + max_fd = interface_fd; + return 0; +} + +Input newButton(int x, int y, const void* data, size_t size, void(*callback)) { + Input new_input; + new_input.type = INPUT_BUTTON; + new_input.position = 0; + new_input.x = x; + new_input.y = y; + new_input.state = STATE_INACTIVE; + new_input.data = malloc(size-1); + //strcpy(new_input.data, data); + memcpy(new_input.data, data, size); + new_input.size = size; + new_input.width = new_input.size*7; + new_input.height = 13; + new_input.callback = callback; + new_input.previous = NULL; + new_input.next = NULL; + return(new_input); +} + +Input newTextInput(int x, int y, size_t size, void(*callback)) { + Input new_input; + new_input.type = INPUT_TEXT; + new_input.position = 0; + new_input.x = x; + new_input.y = y; + new_input.state = STATE_INACTIVE; + char string[size]; + int i; + for (i=0;inext = input; + input->previous = last_input; + last_input = input; + } + inputs[input_count] = input; + input_count++; + return 0; +} + +int drawInput(const Input *input) { + if (input->type == INPUT_BUTTON) { + if (input->state == STATE_INACTIVE) { + XFillRectangle(display, window, string_gc, input->x-1, input->y-1, input->size*7, 13); + XDrawRectangle(display, window, gc, input->x-2, input->y-2, input->size*7, 13); + XFillRectangle(display, window, gc, input->x, input->y, input->size*7, 13); + XDrawRectangle(display, window, gc, input->x, input->y, input->size*7, 13); + XDrawString(display, window, string_gc, input->x+(input->size/2)+1, input->y+(11), (char *)input->data, input->size); + } else if (input->state == STATE_ACTIVE) { + //XDrawRectangle(display, window, gc, input->x-2, input->y-2, input->size*7, 13); + XFillRectangle(display, window, string_gc, input->x, input->y, input->size*7, 13); // optional + XFillRectangle(display, window, gc, input->x-1, input->y-1, input->size*7, 13); + XDrawRectangle(display, window, gc, input->x-1, input->y-1, input->size*7, 13); + XDrawString(display, window, string_gc, input->x-1+(input->size/2)+1, input->y-1+(11), (char *)input->data, input->size); + } + } else if (input->type == INPUT_TEXT) { + drawInputText(input); + } + return(0); +} + +int drawInputText(const Input *input) { + if (input->state == STATE_INACTIVE) { + XFillRectangle(display, window, gc, input->x-1, input->y-1, input->size*7, 13); + XDrawRectangle(display, window, string_gc, input->x-2, input->y-2, input->size*7, 13); + XFillRectangle(display, window, string_gc, input->x, input->y, input->size*7, 13); + XDrawRectangle(display, window, gc, input->x, input->y, input->size*7, 13); + XDrawString(display, window, gc, input->x+(input->size/2)+1, input->y+(11), (char *)input->data, input->size); + } else if (input->state == STATE_ACTIVE) { + //XDrawRectangle(display, window, gc, input->x-2, input->y-2, input->size*7, 13); + XFillRectangle(display, window, string_gc, input->x, input->y, input->size*7, 13); // optional + XFillRectangle(display, window, gc, input->x-1, input->y-1, input->size*7, 13); + XDrawRectangle(display, window, gc, input->x-1, input->y-1, input->size*7, 13); + XDrawString(display, window, string_gc, input->x-1+(input->size/2)+1, input->y-1+(11), (char *)input->data, input->size); + } + return 0; +} + +int closeInterface() { + freeInput(quit_button); + FD_CLR(interface_fd, &master_fds); + XFreeGC(display, gc); + XFreeGC(display, string_gc); + XDestroyWindow(display, window); + XCloseDisplay(display); + return 0; +} + +int redrawInterface() { + //XClearWindow(display, window); + XDrawRectangle(display, window, gc, 1, 1, 238, 318); + + Input *current_input; + int i; + for (i=0;i < input_count; i++) { + current_input = inputs[i]; + if (current_input) { + drawInput(current_input); + } else { + break; + } + } + +// @@ TODO: implement iterator +/* while (iterateInput(current_input)) { + drawInput(current_input); + }*/ + drawLogo(); + return 0; +} + +int iterateInput(Input *input) { + if (input->previous == NULL) { + printf("lol"); + return 0; + } else { + printf("real lol\n"); + input = (Input*)input->previous; + return 1; + } +} + +int clearInterface() { + XClearWindow(display, window); + return 0; +} + +void sendMessage(char *str, size_t string_length) { + printf("send: %s -- %d\n", (char *)text_input.data, text_input.size); + sendMulticast(send_socket, &group_socket, text_input.data, text_input.size); +} + +int handleInterface() { + while (XPending(display)) { + XNextEvent(display, &event); + if (event.type == Expose && event.xexpose.count == 0) { + redrawInterface(); + } + if (event.type == KeyPress && XLookupString(&event.xkey, key_text, 255, &key, 0) == 1) { +/* if (key_text[0] == 'q') { + quitProgram(); + printf("%s\n", QUIT_MESSAGE); + }*/ + if (active_input != NULL) { + textInput(active_input, key_text[0]); + } + redrawInterface(); // lol + } + if (event.type == ButtonPress) { + Input *current_input; + int i; + if (active_input != NULL) { + active_input->state = STATE_INACTIVE; + active_input = NULL; + } + for (i=0;i < input_count; i++) { + current_input = inputs[i]; + if (current_input) { + if (event.xbutton.x < current_input->x+current_input->width && event.xbutton.x > current_input->x + && event.xbutton.y < current_input->y+current_input->height && event.xbutton.y > current_input->y) { + if (current_input->type == INPUT_TEXT) { + active_input = current_input; + } + current_input->state = STATE_ACTIVE; + active_list[active_count] = current_input; + active_count++; + } + } else { + break; + } + } + redrawInterface(); + } else if (event.type == ButtonRelease) { + Input *current_input; + int i; + for (i=0;i < input_count; i++) { + current_input = inputs[i]; + if (current_input) { + if (current_input->state == STATE_ACTIVE) { + if (current_input->type == INPUT_TEXT) { + //(*current_input->callback)(NULL); + } else { + (*current_input->callback)(NULL); + current_input->state = STATE_INACTIVE; + } + } + } else { + break; + } + } +/* + for (i=0;icallback)(NULL); + } else { + (*active_list[i]->callback)(NULL); + active_list[i]->state = STATE_INACTIVE; + } + } else { + break; + } + } + active_count = 0;*/ + } + redrawInterface(); // lol + } + return 0; +} + +void textInput(Input *input, const char character) { + printf("%d hmm\n", character); + char string[input->size]; + memcpy(string, input->data, input->size); + + if ((int)character == 8) {// backspace + input->position--; + string[input->position] = ' '; + //string[input->position] = ' '; + } else if ((int)character == 13) { // return + (*input->callback)(&string, input->size); + } else { + string[input->position] = character; + input->position++; + } + memcpy(input->data, string, input->size); + + //input->data[1] = character; + printf("%c augh\n", character); +} + +int handleInput(const char *data_buffer) { + + return 0; +} + +void showHelp(const char *value) { + +} + +void showVariables() { + +} + +void setAttribute(const int attribute) { + +} + +void clearAttributes() { + +} + +// remove ? +void showPrompt() { + +} diff --git a/x11/x11.h b/x11/x11.h new file mode 100644 index 0000000..2470a17 --- /dev/null +++ b/x11/x11.h @@ -0,0 +1,59 @@ +#ifndef X11_H +#define X11_H +#include +#include +#include "x11_assets.h" + +#include "../ui_common.h" +#include "../common.h" +#include "../net.h" +#include "../macros.h" + +Display *display; +Window window; +int screen; +GC gc; +GC tmp_gc; +GC string_gc; +XColor tmp_color; + +XEvent event; +KeySym key; +char key_text[255]; + +XTextItem x_logo; + +// colors +Colormap colormap; +GC green_gc; +XColor green_color; + +int redrawInterface(); + +/* buttons */ +Input quit_button; +Input start_button; +Input stop_button; +Input restart_button; +Input list_button; +Input test_input; +Input send_button; + +Input text_input; + +Input newButton(int x, int y, const void* data, size_t size, void(*callback)); +Input newInput(int x, int y, const void* data, size_t size, void(*callback)); +Input newTextInput(int x, int y, size_t size, void(*callback)); + +void textInput(Input *input, const char character); + +int iterateInput(Input *input); +int addInput(Input *input); +void freeInput(Input input); +int drawInput(const Input *input); + +int drawInputText(const Input *input); + +void sendMessage(char *str, size_t string_length); + +#endif diff --git a/x11/x11_assets.h b/x11/x11_assets.h new file mode 100644 index 0000000..91334bf --- /dev/null +++ b/x11/x11_assets.h @@ -0,0 +1,52 @@ +#ifndef X11_ASSETS_H +#define X11_ASSETS_H + +#define INPUT_BUTTON 1 +#define INPUT_TEXT 2 + +#define STATE_INACTIVE 0 +#define STATE_ACTIVE 1 + +int button_count; + +typedef struct { + int x; + int y; + int width; + int height; + int state; + int length; + char *string; + struct Button *next; + struct Button *previous; + void(*callback)(); +} Button; + +typedef struct { + int type; + int x; + int y; + int width; + int height; + int state; + int size; + int position; + void *data; + struct Input *next; + struct Input *previous; + void(*callback)(); +} Input; + +int input_count; +Input *last_input; +Input *inputs[128]; + +Input *active_input; + +Button *last_button; +Button *buttons[128]; + +int active_count; +Input *active_list[15]; + +#endif