Win32 fixes: use CLOSESOCKET to close sockets
[olsrd.git] / gui / linux-gtk / src / callbacks.c
1 /*
2  * OLSR ad-hoc routing table management protocol GUI front-end
3  * Copyright (C) 2003 Andreas Tonnesen (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 "interface.h"
25
26
27
28
29 void selection_made( GtkWidget      *clist,
30                      gint            row,
31                      gint            column,
32                      GdkEventButton *event,
33                      gpointer        data )
34 {
35     gchar *ip, *hops, *gw, *dev;
36     const gchar text[100];
37     /* Get the text that is stored in the selected row and column
38      * which was clicked in. We will receive it as a pointer in the
39      * argument text.
40      */
41     gtk_clist_get_text(GTK_CLIST(clist), row, 0, &ip);
42     gtk_clist_get_text(GTK_CLIST(clist), row, 1, &gw);
43     gtk_clist_get_text(GTK_CLIST(clist), row, 2, &hops);
44     gtk_clist_get_text(GTK_CLIST(clist), row, 3, &dev);
45
46     /* Just prints some information about the selected row */
47     sprintf((char *)&text[0], "IP:%s\nGATEWAY:%s\nHOPCOUNT:%s\nINTERFACE:%s\n",
48             ip, gw, hops, dev);
49
50     //gtk_text_buffer_set_text (textBuffer, text, -1);
51
52     //gtk_text_view_set_buffer((GtkTextView *)text1, textBuffer);
53
54     //gtk_widget_show (text1);
55
56
57     return;
58 }
59
60
61
62
63
64
65
66 void
67 node_selection(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data)
68 {
69
70   gchar *text;
71   struct node *host;
72   struct mid *mids;
73   struct mpr *mprs;
74   struct hna *hnas;
75   int i;
76   gchar *tmpshit[1] = {""};
77
78   /*
79    *Clear the lists
80    */
81   gtk_clist_clear(GTK_CLIST(mid_list));
82   gtk_clist_clear(GTK_CLIST(mpr_list));
83   gtk_clist_clear(GTK_CLIST(hna_list));
84   i = 0;
85
86   /*
87    *Get th IP address
88    */
89   gtk_clist_get_text(GTK_CLIST(node_list), row, 0, &text);
90
91   /* Get the node */
92   if(strncmp(text, "local", sizeof("local")) == 0)
93     host = find_node_t(&main_addr);
94   else
95     host = find_node(text);
96
97
98
99   if(host)
100     {
101       /* Timeout the registered MPRs for this node */
102       time_out_mprs(&host->addr);
103
104       /* Get mpr pointer AFTER timeout....(another waisted hour...) */
105       mprs = host->mpr.next;
106       mids = host->mid.next;
107       hnas = host->hna.next;
108
109       while (mids != &host->mid)
110         {
111           gtk_clist_append(GTK_CLIST(mid_list), tmpshit);
112           gtk_clist_set_text(GTK_CLIST(mid_list), i, 0, ip_to_string(&mids->alias));
113           i++;
114           mids = mids->next;
115         }
116
117       i = 0;
118
119
120       while (mprs != &host->mpr)
121         {
122           //printf("ADDING MPR : %s\n", ip_to_string(&mprs->addr));fflush(stdout);
123           gtk_clist_append(GTK_CLIST(mpr_list), tmpshit);
124           gtk_clist_set_text(GTK_CLIST(mpr_list), i, 0, ip_to_string(&mprs->addr));
125           i++;
126           mprs = mprs->next;
127         }
128       i = 0;
129
130       while (hnas != &host->hna)
131         {
132           gtk_clist_append(GTK_CLIST(hna_list), tmpshit);
133           gtk_clist_set_text(GTK_CLIST(hna_list), i, 0, ip_to_string(&hnas->net));
134           i++;
135           hnas = hnas->next;
136         }
137
138     }
139   else
140     {
141       printf("Could not find info about %s!\n", text);
142     }
143
144
145 }
146
147
148
149
150 void
151 packet_selection(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data)
152 {
153   /* Fetch the packet from the cache */
154   union olsr_message *pack;
155   char *packet;
156   int y, x;
157   short size;
158   char *content[4];
159   int mem_size = 10;
160
161   content[0] = (char *)malloc(mem_size);
162   content[1] = (char *)malloc(mem_size);
163   content[2] = (char *)malloc(mem_size);
164   content[3] = (char *)malloc(mem_size);
165
166
167   pack = get_packet(row);
168   packet = (char *)pack;
169
170   //printf("Got the packet at row %d...\n", row);
171
172   gtk_clist_clear(GTK_CLIST(packet_content_list));
173
174   size = ntohs(pack->v4.olsr_msgsize);
175
176   for(y = 0; y < size;y += 4)
177     {
178
179       for(x = 0; x < 4; x++)
180         {
181           if(display_dec)
182             sprintf(content[x], "%03i", (u_char) packet[y+x]); /* Decimal format */
183           else
184             sprintf(content[x], "%02x", (u_char) packet[y+x]); /* Hex format */
185         }
186
187       gtk_clist_append(GTK_CLIST(packet_content_list), content);
188     }
189
190   free(content[0]);
191   free(content[1]);
192   free(content[2]);
193   free(content[3]);
194
195 }
196
197
198
199
200 void
201 column_clicked_callback(GtkWidget *list,gint column)
202 {
203
204   //printf("You pressed %d\n",column);
205
206 }
207
208
209 /*
210  *Connect button callback
211  */
212 void
213 connect_callback( GtkWidget *widget,
214                   gpointer   data )
215 {
216   ipc_connect();
217 }
218
219
220
221 /*
222  *Packet button callback
223  */
224 void
225 packet_callback( GtkWidget *widget,
226                   gpointer   data )
227 {
228   if(freeze_packets)
229     {
230       freeze_packets = 0;
231       gtk_button_set_label(GTK_BUTTON(packet_button), "Freeze packets");
232     }
233   else
234     {
235       freeze_packets = 1;
236       gtk_button_set_label(GTK_BUTTON(packet_button), "Grab packets");
237     }
238 }
239
240
241
242 /*
243  *Packet display button callback
244  */
245 void
246 packet_disp_callback( GtkWidget *widget,
247                   gpointer   data )
248 {
249   if(display_dec)
250     {
251       display_dec = 0;
252       gtk_button_set_label(GTK_BUTTON(packet_disp_button), "Display decimal");
253     }
254   else
255     {
256       display_dec = 1;
257       gtk_button_set_label(GTK_BUTTON(packet_disp_button), "Display hex");
258     }
259 }
260
261
262
263 void
264 gui_shutdown(GtkObject *object, gpointer user_data)
265 {
266   printf("Shutting down...\n");
267
268   ipc_close();
269
270   printf("BYE-BYE!\n");
271   exit(0);
272
273 }
274
275
276 /*
277  * Local Variables:
278  * c-basic-offset: 2
279  * indent-tabs-mode: nil
280  * End:
281  */