Cleanups
[olsrd.git] / gui / linux-gtk / src / main.c
1 /*
2  * OLSR ad-hoc routing table management protocol GUI front-end
3  * Copyright (C) 2003 Andreas T√łnnesen (andreto@ifi.uio.no)
4  *
5  * This file is part of olsr.org.
6  *
7  * uolsrGUI is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * uolsrGUI is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with olsr.org; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  */
22
23 #include "common.h"
24 #include "main.h"
25 #include "ipc.h"
26
27 int
28 main (int argc, char *argv[])
29 {
30   struct hostent *hp;
31   struct in_addr in;
32   struct sockaddr_in pin;
33
34 #ifdef WIN32
35   WSADATA WsaData;
36 #endif
37   GtkWidget *main_window;
38
39 #ifdef WIN32
40   if (WSAStartup(0x0202, &WsaData))
41     {
42       fprintf(stderr, "Could not initialize WinSock.\n");
43       exit(1);
44     }
45 #endif
46
47   
48   /* Get IP */
49   if ((hp = gethostbyname(argc > 1 ? argv[1] : "localhost")) == 0) 
50     {
51       fprintf(stderr, "Not a valid host \"%s\"\n", argv[1]);
52       exit(1);
53     }
54   
55   in.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
56   printf("Address: %s\n", inet_ntoa(in));
57   
58   /* fill in the socket structure with host information */
59   memset(&pin, 0, sizeof(pin));
60   pin.sin_family = AF_INET;
61   pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
62   pin.sin_port = htons(IPC_PORT);
63   
64   gtk_init (&argc, &argv);
65
66   init_nodes();
67
68   freeze_packets = 1;
69   display_dec = 1;
70
71   /* "Failsafe" values */
72   ipversion = AF_INET;
73   ipsize = sizeof(struct in_addr);
74
75   main_window = create_main_window ();
76   gtk_widget_show (main_window);
77
78   printf("Done building GUI\n");
79
80   memset(&main_addr, 0, sizeof(union olsr_ip_addr));
81   memset(&null_addr, 0, sizeof(union olsr_ip_addr));
82
83   /* Terminate signal */
84   signal(SIGINT, shutdown_);  
85
86   /* Init node timeout */
87   nodes_timeout = NEIGHB_HOLD_TIME_NW;
88   init_timer((olsr_u32_t) (nodes_timeout * 1000), &hold_time_nodes);
89
90   ipc_connect(&pin);
91
92   add_timeouts();
93
94   gtk_main ();
95   return 0;
96 }
97
98
99
100 /*
101  *Timeouts
102  */
103
104 int
105 add_timeouts()
106 {
107
108   /*
109    *Check socket for messages every IPC_INTERVAL
110    *milliseconds
111    */
112   gtk_timeout_add(IPC_INTERVAL, ipc_timeout, NULL);
113
114
115   /*
116    *Time out nodes
117    */
118   timeouts = 5; /* Wait 5 times befor starting timing out nodes */
119   gtk_timeout_add(TOP_HOLD_TIME, time_out_nodes, NULL);
120
121
122  return 1;
123 }
124
125
126
127 gint ipc_timeout(gpointer data)
128 {
129
130   ipc_read();
131   return 1;
132 }
133
134
135
136 void
137 shutdown_(int signal)
138 {
139   printf("Cleaning up...\n");
140
141   if(ipc_close() < 0)
142     printf("Could not close socket!\n");
143
144   printf("BYE-BYE!\n");
145   exit(signal);
146 }