aboutsummaryrefslogtreecommitdiff
path: root/semestr-4/sieci/pracownia2/franciszek_malinka/router.c
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
commitc5fcf7179a83ef65c86c6a4a390029149e518649 (patch)
treed29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /semestr-4/sieci/pracownia2/franciszek_malinka/router.c
parentf8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff)
Duzy commit ze smieciami
Diffstat (limited to 'semestr-4/sieci/pracownia2/franciszek_malinka/router.c')
-rw-r--r--semestr-4/sieci/pracownia2/franciszek_malinka/router.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/semestr-4/sieci/pracownia2/franciszek_malinka/router.c b/semestr-4/sieci/pracownia2/franciszek_malinka/router.c
new file mode 100644
index 0000000..b5e732c
--- /dev/null
+++ b/semestr-4/sieci/pracownia2/franciszek_malinka/router.c
@@ -0,0 +1,60 @@
+/*
+ * Program: router
+ * Autor: Franciszek Malinka, 316093
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <strings.h>
+#include <string.h>
+#include <netinet/ip.h>
+#include <arpa/inet.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <limits.h>
+#include "network_addr.h"
+#include "utils.h"
+#include "dist_vector.h"
+
+uint16_t read_configuration(struct network_addr** networks, uint16_t **dists) {
+ uint16_t n;
+ scanf("%hd", &n);
+ *networks = malloc(n * sizeof(struct network_addr));
+ *dists = malloc(n * sizeof(uint16_t));
+ for (int i = 0; i < n; i++) {
+ char addr[20];
+ char _dist[10];
+ uint16_t dist;
+ scanf(" %s %s %hd", addr, _dist, &dist);
+ (*networks)[i] = stona(addr);
+ (*dists)[i] = dist;
+ }
+ return n;
+}
+
+void router_loop(int sockfd, int networks_number, struct network_addr *networks, uint16_t *dists) {
+ list_t dv = create_list();
+ init_dv(&dv, networks_number, networks);
+
+ printf("Starting the router loop...\n");
+ for (;;) {
+ print_dv(&dv);
+ propagate_distance_vector(sockfd, networks_number, networks, dists, &dv);
+ listen_for_routers(sockfd, TURN_LEN_MS, networks_number, networks, dists, &dv);
+ }
+}
+
+int main() {
+ struct network_addr* networks;
+ uint16_t *dists;
+ int n = read_configuration(&networks, &dists);
+ int sockfd = get_socket();
+ bind_to_port(sockfd, SERVER_PORT);
+
+ router_loop(sockfd, n, networks, dists);
+
+ close(sockfd);
+ free(networks);
+ free(dists);
+} \ No newline at end of file