gui: linux: fix string buffer overflow
[olsrd.git] / gui / linux-gtk / src / interface.c
1
2 /*
3  * OLSR ad-hoc routing table management protocol GUI front-end
4  * Copyright (C) 2003 Andreas Tonnesen (andreto@ifi.uio.no)
5  *
6  * This file is part of olsr.org.
7  *
8  * uolsrGUI is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * uolsrGUI is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with olsr.org; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #include "common.h"
25 #include "interface.h"
26 #include "pixmaps.h"
27 #include <stdio.h>
28
29 /* Global widgets */
30
31 /* GtkWidget *text1; */
32
33 GdkBitmap *mask;
34
35 int packet_list_size = 0;
36 int route_list_size = 0;
37 int node_list_size = 0;
38
39 GtkWidget *main_window;
40
41 GtkWidget *
42 create_main_window(void)
43 {
44   GtkWidget *notebook1;
45   GtkWidget *frame3;
46   GtkWidget *frame4;
47   GtkWidget *hbox1;
48   GtkWidget *vbox1;
49   GtkWidget *scrolledwindow1;
50   GtkWidget *node_label1;
51   GtkWidget *node_label2;
52   GtkWidget *node_label3;
53   GtkWidget *node_label4;
54   GtkWidget *node_label7;
55   GtkWidget *node_label8;
56   GtkWidget *node_label9;
57   GtkWidget *mid_frame;
58   GtkWidget *mpr_frame;
59   GtkWidget *hna_frame;
60   GtkWidget *mid_scrolledwindow;
61   GtkWidget *mpr_scrolledwindow;
62   GtkWidget *hna_scrolledwindow;
63   GtkWidget *Main;
64   GtkWidget *label_routes;
65   GtkWidget *hbox2;
66   GtkWidget *frame2;
67   GtkWidget *scrolledwindow4;
68   GtkWidget *label17;
69   GtkWidget *label18;
70   GtkWidget *label19;
71   GtkWidget *scrolledwindow3;
72   GtkWidget *label13;
73   GtkWidget *label14;
74   GtkWidget *label15;
75   GtkWidget *label16;
76   GtkWidget *label_packets;
77   //GtkWidget *empty_notebook_page2;
78   GtkWidget *label3;
79   GtkWidget *net_vbox;
80   GtkWidget *pack_vbox;
81   GtkWidget *pack_disp_vbox;
82   GtkWidget *disp_frame;
83   GtkWidget *route_frame;
84   GtkWidget *route_stats_frame;
85   GtkWidget *route_scrolledwindow;
86   GtkWidget *route_label1;
87   GtkWidget *route_label2;
88   GtkWidget *route_label3;
89   GtkWidget *route_label4;
90   GtkWidget *route_hbox1;
91
92   GtkWidget *traffic_label;
93
94   GtkWidget *settings_label;
95   GtkWidget *settings_hbox1;
96
97   GtkWidget *about_hbox1;
98   GtkWidget *about_label;
99
100   GtkWidget *empty1;
101
102   GdkPixmap *unik_logo_gdk;
103   GtkWidget *unik_logo;
104
105   /*
106    *The main window
107    */
108
109   main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
110   gtk_object_set_data(GTK_OBJECT(main_window), "main_window", main_window);
111   gtk_window_set_title(GTK_WINDOW(main_window), (olsrd_version));
112   gtk_window_set_default_size(GTK_WINDOW(main_window), 600, 550);
113   gtk_signal_connect(GTK_OBJECT(main_window), "destroy", GTK_SIGNAL_FUNC(gui_shutdown),
114                      //GTK_SIGNAL_FUNC(gtk_main_quit),
115                      NULL);
116   gtk_window_set_position(GTK_WINDOW(main_window), GTK_WIN_POS_CENTER); /* Position window in center */
117   gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, TRUE, TRUE);    /* No user-resizing */
118
119   /*
120    *Initialize the pixmaps
121    */
122   unik_logo_gdk =
123     gdk_pixmap_colormap_create_from_xpm_d(NULL, gtk_widget_get_colormap(main_window), &mask, NULL, (gchar **) logo_xpm);
124
125   unik_logo = gtk_pixmap_new(unik_logo_gdk, mask);
126
127   /*
128    *The notebook
129    */
130
131   notebook1 = gtk_notebook_new();
132   gtk_widget_ref(notebook1);
133   gtk_object_set_data_full(GTK_OBJECT(main_window), "notebook1", notebook1, (GtkDestroyNotify) gtk_widget_unref);
134   gtk_widget_show(notebook1);
135   gtk_container_add(GTK_CONTAINER(main_window), notebook1);
136
137   /*
138    *The first vbox
139    */
140   vbox1 = gtk_vbox_new(FALSE, 0);
141   gtk_widget_ref(vbox1);
142   gtk_object_set_data_full(GTK_OBJECT(main_window), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref);
143   gtk_widget_show(vbox1);
144   //gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 1);
145   gtk_container_add(GTK_CONTAINER(notebook1), vbox1);
146
147   /*
148    *The nodes frame
149    */
150   frame3 = gtk_frame_new("Registered nodes:");
151   gtk_widget_ref(frame3);
152   gtk_object_set_data_full(GTK_OBJECT(main_window), "frame3", frame3, (GtkDestroyNotify) gtk_widget_unref);
153   gtk_widget_show(frame3);
154   gtk_box_pack_start(GTK_BOX(vbox1), frame3, TRUE, TRUE, 0);
155   gtk_widget_set_size_request(frame3, -1, 300);
156   gtk_container_set_border_width(GTK_CONTAINER(frame3), 1);
157
158   /*
159    *The scrolled window to contain the node list
160    */
161
162   scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
163   gtk_widget_ref(scrolledwindow1);
164   gtk_object_set_data_full(GTK_OBJECT(main_window), "scrolledwindow1", scrolledwindow1, (GtkDestroyNotify) gtk_widget_unref);
165   gtk_widget_show(scrolledwindow1);
166   gtk_container_add(GTK_CONTAINER(frame3), scrolledwindow1);
167   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
168
169   //gtk_box_pack_start (GTK_BOX (frame3), scrolledwindow1, TRUE, TRUE, 0);
170   //gtk_widget_set_usize (scrolledwindow1, -2, 332);
171
172   /*
173    *The node list
174    */
175
176   node_list = gtk_clist_new(7);
177   gtk_widget_ref(node_list);
178   gtk_object_set_data_full(GTK_OBJECT(main_window), "node_list", node_list, (GtkDestroyNotify) gtk_widget_unref);
179   gtk_widget_show(node_list);
180   gtk_container_add(GTK_CONTAINER(scrolledwindow1), node_list);
181   gtk_clist_set_column_width(GTK_CLIST(node_list), 0, 150);     /* IP */
182   //gtk_clist_set_column_justification(GTK_CLIST(node_list), 0, GTK_JUSTIFY_CENTER);
183   gtk_clist_set_column_width(GTK_CLIST(node_list), 1, 150);     /* gateway */
184   //gtk_clist_set_column_justification(GTK_CLIST(node_list), 1, GTK_JUSTIFY_CENTER);
185   gtk_clist_set_column_width(GTK_CLIST(node_list), 2, 50);      /* hopcount */
186   gtk_clist_set_column_justification(GTK_CLIST(node_list), 2, GTK_JUSTIFY_CENTER);
187   gtk_clist_set_column_width(GTK_CLIST(node_list), 3, 80);      /* dev */
188   gtk_clist_set_column_justification(GTK_CLIST(node_list), 3, GTK_JUSTIFY_CENTER);
189
190   gtk_clist_set_column_width(GTK_CLIST(node_list), 4, 70);      /* timer */
191   gtk_clist_set_column_justification(GTK_CLIST(node_list), 4, GTK_JUSTIFY_CENTER);
192   //gtk_clist_set_column_width (GTK_CLIST (node_list), 7, 100); /* last about */
193   //gtk_clist_set_column_justification(GTK_CLIST(node_list), 7, GTK_JUSTIFY_CENTER);
194
195   gtk_clist_set_column_width(GTK_CLIST(node_list), 5, 40);      /* MID */
196   gtk_clist_set_column_justification(GTK_CLIST(node_list), 5, GTK_JUSTIFY_CENTER);
197   gtk_clist_set_column_width(GTK_CLIST(node_list), 6, 40);      /* HNA */
198   gtk_clist_set_column_justification(GTK_CLIST(node_list), 6, GTK_JUSTIFY_CENTER);
199
200   gtk_clist_column_titles_show(GTK_CLIST(node_list));
201
202   /*
203    *Row selection callback
204    */
205   gtk_signal_connect(GTK_OBJECT(node_list), "select_row", GTK_SIGNAL_FUNC(selection_made), NULL);
206
207   /*
208    *Column selection callback
209    */
210   gtk_signal_connect(GTK_OBJECT(node_list), "click_column", GTK_SIGNAL_FUNC(column_clicked_callback), NULL);
211
212   node_label1 = gtk_label_new("Dest");
213   gtk_widget_ref(node_label1);
214   gtk_object_set_data_full(GTK_OBJECT(main_window), "IP", node_label1, (GtkDestroyNotify) gtk_widget_unref);
215   gtk_widget_show(node_label1);
216   gtk_clist_set_column_widget(GTK_CLIST(node_list), 0, node_label1);
217
218   node_label2 = gtk_label_new("Gateway");
219   gtk_widget_ref(node_label2);
220   gtk_object_set_data_full(GTK_OBJECT(main_window), "hops", node_label2, (GtkDestroyNotify) gtk_widget_unref);
221   gtk_widget_show(node_label2);
222   gtk_clist_set_column_widget(GTK_CLIST(node_list), 1, node_label2);
223
224   node_label3 = gtk_label_new("Metric");
225   gtk_widget_ref(node_label3);
226   gtk_object_set_data_full(GTK_OBJECT(main_window), "info", node_label3, (GtkDestroyNotify) gtk_widget_unref);
227   gtk_widget_show(node_label3);
228   gtk_clist_set_column_widget(GTK_CLIST(node_list), 2, node_label3);
229
230   node_label4 = gtk_label_new("Device");
231   gtk_widget_ref(node_label4);
232   gtk_object_set_data_full(GTK_OBJECT(main_window), "Device", node_label4, (GtkDestroyNotify) gtk_widget_unref);
233   gtk_widget_show(node_label4);
234   gtk_clist_set_column_widget(GTK_CLIST(node_list), 3, node_label4);
235
236   node_label7 = gtk_label_new("Timer");
237   gtk_widget_ref(node_label7);
238   gtk_object_set_data_full(GTK_OBJECT(main_window), "LMF", node_label7, (GtkDestroyNotify) gtk_widget_unref);
239   gtk_widget_show(node_label7);
240   gtk_clist_set_column_widget(GTK_CLIST(node_list), 4, node_label7);
241
242   /*
243      node_label8 = gtk_label_new ("LMA");
244      gtk_widget_ref (node_label8);
245      gtk_object_set_data_full (GTK_OBJECT (main_window), "LMA", node_label8,
246      (GtkDestroyNotify) gtk_widget_unref);
247      gtk_widget_show (node_label8);
248      gtk_clist_set_column_widget (GTK_CLIST (node_list), 7, node_label8);
249    */
250
251   node_label8 = gtk_label_new("MID");
252   gtk_widget_ref(node_label8);
253   gtk_object_set_data_full(GTK_OBJECT(main_window), "MID", node_label8, (GtkDestroyNotify) gtk_widget_unref);
254   gtk_widget_show(node_label8);
255   gtk_clist_set_column_widget(GTK_CLIST(node_list), 5, node_label8);
256
257   node_label9 = gtk_label_new("HNA");
258   gtk_widget_ref(node_label9);
259   gtk_object_set_data_full(GTK_OBJECT(main_window), "HNA", node_label9, (GtkDestroyNotify) gtk_widget_unref);
260   gtk_widget_show(node_label9);
261   gtk_clist_set_column_widget(GTK_CLIST(node_list), 6, node_label9);
262
263   gtk_clist_column_titles_active(GTK_CLIST(node_list));
264
265   gtk_widget_show_now(node_list);
266
267   /*
268    *Row selection callback
269    */
270   gtk_signal_connect(GTK_OBJECT(node_list), "select_row", GTK_SIGNAL_FUNC(node_selection), NULL);
271
272   /*
273    *The first hbox
274    */
275   hbox1 = gtk_hbox_new(FALSE, 0);
276   gtk_widget_ref(hbox1);
277   gtk_object_set_data_full(GTK_OBJECT(main_window), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref);
278   gtk_widget_show(hbox1);
279   gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0);
280   //gtk_container_add (GTK_CONTAINER (notebook1), hbox1);
281   gtk_container_set_border_width(GTK_CONTAINER(hbox1), 4);
282   gtk_widget_set_size_request(hbox1, -1, 200);
283
284   /*
285    *The net-info frame
286    */
287   frame4 = gtk_frame_new("Info:");
288   gtk_widget_ref(frame4);
289   gtk_object_set_data_full(GTK_OBJECT(main_window), "frame4", frame4, (GtkDestroyNotify) gtk_widget_unref);
290   gtk_widget_show(frame4);
291   gtk_box_pack_start(GTK_BOX(hbox1), frame4, TRUE, TRUE, 0);
292   //gtk_widget_set_size_request(frame4, 200, -1);
293   gtk_container_set_border_width(GTK_CONTAINER(frame4), 1);
294
295   /*
296    *The net-info hbox
297    */
298   net_vbox = gtk_vbox_new(FALSE, 0);
299   gtk_widget_ref(net_vbox);
300   gtk_object_set_data_full(GTK_OBJECT(main_window), "net_vbox", net_vbox, (GtkDestroyNotify) gtk_widget_unref);
301   gtk_widget_show(net_vbox);
302   gtk_container_add(GTK_CONTAINER(frame4), net_vbox);
303
304   /*
305    *The net-info label field
306    */
307   net_label = gtk_label_new(NULL);
308   gtk_widget_ref(net_label);
309   gtk_misc_set_alignment((GtkMisc *) net_label, 0, 0);
310   //gtk_label_set_justify((GtkLabel *)net_label,GTK_JUSTIFY_LEFT);
311   gtk_object_set_data_full(GTK_OBJECT(main_window), "net_label", net_label, (GtkDestroyNotify) gtk_widget_unref);
312
313   //set_net_info("Not connected...");
314   gtk_widget_show(net_label);
315   gtk_box_pack_start(GTK_BOX(net_vbox), net_label, TRUE, TRUE, 0);
316
317   //gtk_container_add (GTK_CONTAINER (frame4), net_label);
318
319   /*
320    *The connect button
321    */
322
323   connect_button = gtk_button_new_with_label("Connect to host");
324   gtk_widget_ref(connect_button);
325   gtk_object_set_data_full(GTK_OBJECT(main_window), "connect_button", connect_button, (GtkDestroyNotify) gtk_widget_unref);
326   /* Connect the "clicked" signal of the button to our callback */
327   gtk_signal_connect(GTK_OBJECT(connect_button), "clicked", GTK_SIGNAL_FUNC(connect_callback), NULL);
328   gtk_widget_show(connect_button);
329   gtk_box_pack_start(GTK_BOX(net_vbox), connect_button, FALSE, FALSE, 1);
330   gtk_container_set_border_width(GTK_CONTAINER(connect_button), 5);
331
332   /*
333    *The node MPR info frame
334    */
335   mpr_frame = gtk_frame_new("MPR:");
336   gtk_widget_ref(mpr_frame);
337   gtk_object_set_data_full(GTK_OBJECT(main_window), "mpr_frame", mpr_frame, (GtkDestroyNotify) gtk_widget_unref);
338   gtk_widget_show(mpr_frame);
339   gtk_box_pack_start(GTK_BOX(hbox1), mpr_frame, FALSE, FALSE, 0);
340   //gtk_widget_set_size_request(mid_frame, 125, -1);
341   gtk_container_set_border_width(GTK_CONTAINER(mpr_frame), 1);
342
343   /*
344    *The scrolledwindow to contain the MPR node info
345    */
346   mpr_scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
347   gtk_widget_ref(mpr_scrolledwindow);
348   gtk_object_set_data_full(GTK_OBJECT(main_window), "mpr_scrolledwindow", mpr_scrolledwindow, (GtkDestroyNotify) gtk_widget_unref);
349
350   gtk_widget_show(mpr_scrolledwindow);
351   gtk_container_add(GTK_CONTAINER(mpr_frame), mpr_scrolledwindow);
352   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(mpr_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
353   gtk_container_set_border_width(GTK_CONTAINER(mpr_scrolledwindow), 3);
354
355   /*
356    *The node MID info frame
357    */
358   mid_frame = gtk_frame_new("MID:");
359   gtk_widget_ref(mid_frame);
360   gtk_object_set_data_full(GTK_OBJECT(main_window), "mid_frame", mid_frame, (GtkDestroyNotify) gtk_widget_unref);
361   gtk_widget_show(mid_frame);
362   gtk_box_pack_start(GTK_BOX(hbox1), mid_frame, FALSE, FALSE, 0);
363   //gtk_widget_set_size_request(mid_frame, 125, -1);
364   gtk_container_set_border_width(GTK_CONTAINER(mid_frame), 1);
365
366   /*
367    *The scrolledwindow to contain the MID node info
368    */
369   mid_scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
370   gtk_widget_ref(mid_scrolledwindow);
371   gtk_object_set_data_full(GTK_OBJECT(main_window), "mid_scrolledwindow", mid_scrolledwindow, (GtkDestroyNotify) gtk_widget_unref);
372
373   gtk_widget_show(mid_scrolledwindow);
374   gtk_container_add(GTK_CONTAINER(mid_frame), mid_scrolledwindow);
375   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(mid_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
376   gtk_container_set_border_width(GTK_CONTAINER(mid_scrolledwindow), 3);
377
378   /*
379    *The MPR list
380    */
381   mpr_list = gtk_clist_new(1);
382   gtk_widget_ref(mpr_list);
383   gtk_object_set_data_full(GTK_OBJECT(main_window), "mpr_list", mpr_list, (GtkDestroyNotify) gtk_widget_unref);
384   gtk_widget_show(mpr_list);
385   gtk_container_add(GTK_CONTAINER(mpr_scrolledwindow), mpr_list);
386   gtk_clist_set_column_width(GTK_CLIST(mpr_list), 0, 120);      /* IP */
387   gtk_clist_column_titles_hide(GTK_CLIST(mpr_list));
388
389   /*
390    *The MID list
391    */
392   mid_list = gtk_clist_new(1);
393   gtk_widget_ref(mid_list);
394   gtk_object_set_data_full(GTK_OBJECT(main_window), "mid_list", mid_list, (GtkDestroyNotify) gtk_widget_unref);
395   gtk_widget_show(mid_list);
396   gtk_container_add(GTK_CONTAINER(mid_scrolledwindow), mid_list);
397   gtk_clist_set_column_width(GTK_CLIST(mid_list), 0, 120);      /* IP */
398   gtk_clist_column_titles_hide(GTK_CLIST(mid_list));
399
400   /*
401    *The node HNA info frame
402    */
403   hna_frame = gtk_frame_new("HNA:");
404   gtk_widget_ref(hna_frame);
405   gtk_object_set_data_full(GTK_OBJECT(main_window), "hna_frame", hna_frame, (GtkDestroyNotify) gtk_widget_unref);
406   gtk_widget_show(hna_frame);
407   gtk_box_pack_start(GTK_BOX(hbox1), hna_frame, FALSE, FALSE, 0);
408   //gtk_widget_set_size_request(mid_frame, 125, -1);
409   gtk_container_set_border_width(GTK_CONTAINER(hna_frame), 1);
410
411   /*
412    *The HNA scrolled window
413    */
414   hna_scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
415   gtk_widget_ref(hna_scrolledwindow);
416   gtk_object_set_data_full(GTK_OBJECT(main_window), "hna_scrolledwindow", hna_scrolledwindow, (GtkDestroyNotify) gtk_widget_unref);
417
418   gtk_widget_show(hna_scrolledwindow);
419   gtk_container_add(GTK_CONTAINER(hna_frame), hna_scrolledwindow);
420   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(hna_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
421   gtk_container_set_border_width(GTK_CONTAINER(hna_scrolledwindow), 3);
422
423   /*
424    *The HNA list
425    */
426   hna_list = gtk_clist_new(1);
427   gtk_widget_ref(hna_list);
428   gtk_object_set_data_full(GTK_OBJECT(main_window), "hna_list", hna_list, (GtkDestroyNotify) gtk_widget_unref);
429   gtk_widget_show(hna_list);
430   gtk_container_add(GTK_CONTAINER(hna_scrolledwindow), hna_list);
431   gtk_clist_set_column_width(GTK_CLIST(hna_list), 0, 120);      /* IP */
432   gtk_clist_column_titles_hide(GTK_CLIST(hna_list));
433
434   /*
435    *The "main" notebook page
436    */
437   Main = gtk_label_new("Main");
438   gtk_widget_ref(Main);
439   gtk_object_set_data_full(GTK_OBJECT(main_window), "Main", Main, (GtkDestroyNotify) gtk_widget_unref);
440   gtk_widget_show(Main);
441   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 0), Main);
442
443   /*
444    *The main hbox of the Packet page
445    */
446
447   hbox2 = gtk_hbox_new(FALSE, 0);
448   gtk_widget_ref(hbox2);
449   gtk_object_set_data_full(GTK_OBJECT(main_window), "hbox2", hbox2, (GtkDestroyNotify) gtk_widget_unref);
450   gtk_widget_show(hbox2);
451   gtk_container_add(GTK_CONTAINER(notebook1), hbox2);
452
453   /*
454    *The packet hbox
455    */
456   pack_vbox = gtk_vbox_new(FALSE, 0);
457   gtk_widget_ref(pack_vbox);
458   gtk_object_set_data_full(GTK_OBJECT(main_window), "pack_vbox", pack_vbox, (GtkDestroyNotify) gtk_widget_unref);
459   gtk_widget_show(pack_vbox);
460   gtk_box_pack_start(GTK_BOX(hbox2), pack_vbox, TRUE, TRUE, 0);
461
462   /*
463    *The packet frame
464    */
465
466   frame2 = gtk_frame_new("Packet");
467   gtk_widget_ref(frame2);
468   gtk_object_set_data_full(GTK_OBJECT(main_window), "frame2", frame2, (GtkDestroyNotify) gtk_widget_unref);
469   gtk_widget_show(frame2);
470   gtk_box_pack_start(GTK_BOX(pack_vbox), frame2, TRUE, TRUE, 0);        /* Do not expand */
471
472   /*
473    *Packet list scrolled window
474    */
475   scrolledwindow4 = gtk_scrolled_window_new(NULL, NULL);
476   gtk_widget_ref(scrolledwindow4);
477   gtk_object_set_data_full(GTK_OBJECT(main_window), "scrolledwindow4", scrolledwindow4, (GtkDestroyNotify) gtk_widget_unref);
478
479   gtk_widget_show(scrolledwindow4);
480   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow4), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
481
482   gtk_container_add(GTK_CONTAINER(frame2), scrolledwindow4);
483
484   /*
485    *The packet list
486    */
487
488   packet_list = gtk_clist_new(3);
489   gtk_widget_ref(packet_list);
490   gtk_object_set_data_full(GTK_OBJECT(main_window), "packet_list", packet_list, (GtkDestroyNotify) gtk_widget_unref);
491   gtk_widget_show(packet_list);
492   gtk_container_add(GTK_CONTAINER(scrolledwindow4), packet_list);
493   gtk_clist_set_column_width(GTK_CLIST(packet_list), 0, 80);    /* Type */
494   gtk_clist_set_column_width(GTK_CLIST(packet_list), 1, 150);   /* Origin IP */
495   gtk_clist_set_column_width(GTK_CLIST(packet_list), 2, 20);    /* size */
496   gtk_clist_column_titles_show(GTK_CLIST(packet_list));
497
498   label17 = gtk_label_new("Type");
499   gtk_widget_ref(label17);
500   gtk_object_set_data_full(GTK_OBJECT(main_window), "label17", label17, (GtkDestroyNotify) gtk_widget_unref);
501   gtk_widget_show(label17);
502   gtk_clist_set_column_widget(GTK_CLIST(packet_list), 0, label17);
503
504   label18 = gtk_label_new("Origin");
505   gtk_widget_ref(label18);
506   gtk_object_set_data_full(GTK_OBJECT(main_window), "label18", label18, (GtkDestroyNotify) gtk_widget_unref);
507   gtk_widget_show(label18);
508   gtk_clist_set_column_widget(GTK_CLIST(packet_list), 1, label18);
509
510   label19 = gtk_label_new("Size");
511   gtk_widget_ref(label19);
512   gtk_object_set_data_full(GTK_OBJECT(main_window), "label19", label19, (GtkDestroyNotify) gtk_widget_unref);
513   gtk_widget_show(label19);
514   gtk_clist_set_column_widget(GTK_CLIST(packet_list), 2, label19);
515
516   /*
517    *Row selection callback
518    */
519   gtk_signal_connect(GTK_OBJECT(packet_list), "select_row", GTK_SIGNAL_FUNC(packet_selection), NULL);
520
521   /*
522    *The packet button
523    */
524
525   packet_button = gtk_button_new_with_label("Grab packets");
526   gtk_widget_ref(packet_button);
527   gtk_object_set_data_full(GTK_OBJECT(main_window), "packet_button", packet_button, (GtkDestroyNotify) gtk_widget_unref);
528
529   /* Connect the "clicked" signal of the button to our callback */
530   gtk_signal_connect(GTK_OBJECT(packet_button), "clicked", GTK_SIGNAL_FUNC(packet_callback), NULL);
531   gtk_widget_show(packet_button);
532   gtk_box_pack_start(GTK_BOX(pack_vbox), packet_button, FALSE, FALSE, 5);
533
534   /*
535    *The packet disp hbox
536    */
537   pack_disp_vbox = gtk_vbox_new(FALSE, 0);
538   gtk_widget_ref(pack_disp_vbox);
539   gtk_object_set_data_full(GTK_OBJECT(main_window), "pack_disp_vbox", pack_disp_vbox, (GtkDestroyNotify) gtk_widget_unref);
540   gtk_widget_show(pack_disp_vbox);
541   gtk_box_pack_start(GTK_BOX(hbox2), pack_disp_vbox, TRUE, TRUE, 0);
542
543   /*
544    *The packet disp frame
545    */
546
547   disp_frame = gtk_frame_new("Packet content");
548   gtk_widget_ref(disp_frame);
549   gtk_object_set_data_full(GTK_OBJECT(main_window), "disp_frame", disp_frame, (GtkDestroyNotify) gtk_widget_unref);
550   gtk_widget_show(disp_frame);
551   gtk_box_pack_start(GTK_BOX(pack_disp_vbox), disp_frame, TRUE, TRUE, 0);       /* Do not expand */
552
553   /*
554    *Scrolled window for the packet display
555    *list
556    */
557
558   scrolledwindow3 = gtk_scrolled_window_new(NULL, NULL);
559   gtk_widget_ref(scrolledwindow3);
560   gtk_object_set_data_full(GTK_OBJECT(main_window), "scrolledwindow3", scrolledwindow3, (GtkDestroyNotify) gtk_widget_unref);
561   gtk_widget_show(scrolledwindow3);
562   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow3), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
563
564   gtk_container_add(GTK_CONTAINER(disp_frame), scrolledwindow3);
565
566   //gtk_box_pack_start (GTK_BOX (disp_frame), scrolledwindow3, TRUE, TRUE, 0);
567
568   /*
569    *The packet display list
570    */
571   packet_content_list = gtk_clist_new(4);
572   gtk_widget_ref(packet_content_list);
573   gtk_object_set_data_full(GTK_OBJECT(main_window), "packet_content_list", packet_content_list,
574                            (GtkDestroyNotify) gtk_widget_unref);
575
576   gtk_widget_show(packet_content_list);
577   gtk_container_add(GTK_CONTAINER(scrolledwindow3), packet_content_list);
578   gtk_clist_set_column_width(GTK_CLIST(packet_content_list), 0, 70);    /* 0-7 */
579   gtk_clist_set_column_justification(GTK_CLIST(packet_content_list), 0, GTK_JUSTIFY_CENTER);
580   gtk_clist_set_column_width(GTK_CLIST(packet_content_list), 1, 70);    /* 8-15 */
581   gtk_clist_set_column_justification(GTK_CLIST(packet_content_list), 1, GTK_JUSTIFY_CENTER);
582   gtk_clist_set_column_width(GTK_CLIST(packet_content_list), 2, 70);    /* 16-23 */
583   gtk_clist_set_column_justification(GTK_CLIST(packet_content_list), 2, GTK_JUSTIFY_CENTER);
584   gtk_clist_set_column_width(GTK_CLIST(packet_content_list), 3, 70);    /* 24-31 */
585   gtk_clist_set_column_justification(GTK_CLIST(packet_content_list), 3, GTK_JUSTIFY_CENTER);
586   gtk_clist_column_titles_show(GTK_CLIST(packet_content_list));
587
588   label13 = gtk_label_new("0 - 7");
589   gtk_widget_ref(label13);
590   gtk_object_set_data_full(GTK_OBJECT(main_window), "label13", label13, (GtkDestroyNotify) gtk_widget_unref);
591   gtk_widget_show(label13);
592   gtk_clist_set_column_widget(GTK_CLIST(packet_content_list), 0, label13);
593
594   label14 = gtk_label_new("8 - 15");
595   gtk_widget_ref(label14);
596   gtk_object_set_data_full(GTK_OBJECT(main_window), "label14", label14, (GtkDestroyNotify) gtk_widget_unref);
597   gtk_widget_show(label14);
598   gtk_clist_set_column_widget(GTK_CLIST(packet_content_list), 1, label14);
599
600   label15 = gtk_label_new("16 - 23");
601   gtk_widget_ref(label15);
602   gtk_object_set_data_full(GTK_OBJECT(main_window), "label15", label15, (GtkDestroyNotify) gtk_widget_unref);
603   gtk_widget_show(label15);
604   gtk_clist_set_column_widget(GTK_CLIST(packet_content_list), 2, label15);
605
606   label16 = gtk_label_new("24 - 31");
607   gtk_widget_ref(label16);
608   gtk_object_set_data_full(GTK_OBJECT(main_window), "label16", label16, (GtkDestroyNotify) gtk_widget_unref);
609   gtk_widget_show(label16);
610   gtk_clist_set_column_widget(GTK_CLIST(packet_content_list), 3, label16);
611
612   //gtk_clist_set_selection_mode(GTK_CLIST (packet_content_list), GTK_SELECTION_NONE); /* no selections */
613
614   /*
615    *The packet button
616    */
617
618   packet_disp_button = gtk_button_new_with_label("Display hex");
619   gtk_widget_ref(packet_disp_button);
620   gtk_object_set_data_full(GTK_OBJECT(main_window), "packet_disp_button", packet_disp_button, (GtkDestroyNotify) gtk_widget_unref);
621
622   /* Connect the "clicked" signal of the button to our callback */
623   gtk_signal_connect(GTK_OBJECT(packet_disp_button), "clicked", GTK_SIGNAL_FUNC(packet_disp_callback), NULL);
624   gtk_widget_show(packet_disp_button);
625   gtk_box_pack_start(GTK_BOX(pack_disp_vbox), packet_disp_button, FALSE, FALSE, 5);
626
627   /*
628    *The "packets" notebook
629    */
630
631   label_packets = gtk_label_new("Packets");
632   gtk_widget_ref(label_packets);
633   gtk_object_set_data_full(GTK_OBJECT(main_window), "label_packets", label_packets, (GtkDestroyNotify) gtk_widget_unref);
634   gtk_widget_show(label_packets);
635   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 1), label_packets);
636
637   /*
638    *The route hbox
639    */
640   route_hbox1 = gtk_hbox_new(FALSE, 0);
641   gtk_widget_ref(route_hbox1);
642   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_hbox1", route_hbox1, (GtkDestroyNotify) gtk_widget_unref);
643   gtk_widget_show(route_hbox1);
644   //gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 1);
645   gtk_container_add(GTK_CONTAINER(notebook1), route_hbox1);
646
647   /*
648    *The routes frame
649    */
650
651   route_frame = gtk_frame_new("OLSR routes in kernel:");
652   gtk_widget_ref(route_frame);
653   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_frame", route_frame, (GtkDestroyNotify) gtk_widget_unref);
654   gtk_widget_show(route_frame);
655
656   //gtk_container_add (GTK_CONTAINER (notebook1), route_frame);
657   gtk_widget_set_size_request(route_frame, 200, -1);
658   gtk_box_pack_start(GTK_BOX(route_hbox1), route_frame, TRUE, TRUE, 0); /* Do not expand */
659
660   /*
661    *Scrolled window for the packet display
662    *list
663    */
664
665   route_scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
666   gtk_widget_ref(route_scrolledwindow);
667   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_scrolledwindow", route_scrolledwindow,
668                            (GtkDestroyNotify) gtk_widget_unref);
669   gtk_widget_show(route_scrolledwindow);
670   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(route_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
671
672   gtk_container_add(GTK_CONTAINER(route_frame), route_scrolledwindow);
673
674   //gtk_box_pack_start (GTK_BOX (route_frame), scrolledwindow3, TRUE, TRUE, 0);
675
676   /*
677    *The routes display list
678    */
679   route_list = gtk_clist_new(4);
680   gtk_widget_ref(route_list);
681   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_list", route_list, (GtkDestroyNotify) gtk_widget_unref);
682
683   gtk_widget_show(route_list);
684   gtk_container_add(GTK_CONTAINER(route_scrolledwindow), route_list);
685   gtk_clist_set_column_width(GTK_CLIST(route_list), 0, 120);    /* dest */
686   //gtk_clist_set_column_justification(GTK_CLIST (route_list), 0, GTK_JUSTIFY_CENTER);
687   gtk_clist_set_column_width(GTK_CLIST(route_list), 1, 120);    /* gw */
688   //gtk_clist_set_column_justification(GTK_CLIST (route_list), 1, GTK_JUSTIFY_CENTER);
689   gtk_clist_set_column_width(GTK_CLIST(route_list), 2, 50);     /* weight */
690   gtk_clist_set_column_justification(GTK_CLIST(route_list), 2, GTK_JUSTIFY_CENTER);
691   gtk_clist_set_column_width(GTK_CLIST(route_list), 3, 70);     /* interface */
692   gtk_clist_set_column_justification(GTK_CLIST(route_list), 3, GTK_JUSTIFY_CENTER);
693   gtk_clist_column_titles_show(GTK_CLIST(route_list));
694
695   route_label1 = gtk_label_new("Destination");
696   gtk_widget_ref(route_label1);
697   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_label1", route_label1, (GtkDestroyNotify) gtk_widget_unref);
698   gtk_widget_show(route_label1);
699   gtk_clist_set_column_widget(GTK_CLIST(route_list), 0, route_label1);
700
701   route_label2 = gtk_label_new("Gateway");
702   gtk_widget_ref(route_label2);
703   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_label2", route_label2, (GtkDestroyNotify) gtk_widget_unref);
704   gtk_widget_show(route_label2);
705   gtk_clist_set_column_widget(GTK_CLIST(route_list), 1, route_label2);
706
707   route_label3 = gtk_label_new("Weight");
708   gtk_widget_ref(route_label3);
709   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_label3", route_label3, (GtkDestroyNotify) gtk_widget_unref);
710   gtk_widget_show(route_label3);
711   gtk_clist_set_column_widget(GTK_CLIST(route_list), 2, route_label3);
712
713   route_label4 = gtk_label_new("Interface");
714   gtk_widget_ref(route_label4);
715   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_label4", route_label4, (GtkDestroyNotify) gtk_widget_unref);
716   gtk_widget_show(route_label4);
717   gtk_clist_set_column_widget(GTK_CLIST(route_list), 3, route_label4);
718
719   //gtk_clist_set_selection_mode(GTK_CLIST (route_list), GTK_SELECTION_NONE); /* no selections */
720
721   /*
722    *The routes stats frame
723    */
724
725   route_stats_frame = gtk_frame_new("Stats:");
726   gtk_widget_ref(route_stats_frame);
727   gtk_object_set_data_full(GTK_OBJECT(main_window), "route_stats_frame", route_stats_frame, (GtkDestroyNotify) gtk_widget_unref);
728   gtk_widget_show(route_stats_frame);
729
730   //gtk_container_add (GTK_CONTAINER (notebook1), route_frame);
731   gtk_box_pack_start(GTK_BOX(route_hbox1), route_stats_frame, TRUE, TRUE, 1);
732
733   /*
734    *The "routes" notebook
735    */
736   label_routes = gtk_label_new("Routes");
737   gtk_widget_ref(label_routes);
738   gtk_object_set_data_full(GTK_OBJECT(main_window), "label_routes", label_routes, (GtkDestroyNotify) gtk_widget_unref);
739   gtk_widget_show(label_routes);
740   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 2), label_routes);
741
742   empty1 = gtk_vbox_new(FALSE, 0);
743   gtk_widget_show(empty1);
744   gtk_container_add(GTK_CONTAINER(notebook1), empty1);
745
746   /*
747    *The "traffic" notebook
748    */
749   traffic_label = gtk_label_new("Traffic");
750   gtk_widget_ref(traffic_label);
751   gtk_object_set_data_full(GTK_OBJECT(main_window), "traffic_label", traffic_label, (GtkDestroyNotify) gtk_widget_unref);
752   gtk_widget_show(traffic_label);
753   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 3), traffic_label);
754
755   /*
756    *The settings hbox
757    */
758   settings_hbox1 = gtk_hbox_new(FALSE, 0);
759   gtk_widget_ref(settings_hbox1);
760   gtk_object_set_data_full(GTK_OBJECT(main_window), "settings_hbox1", settings_hbox1, (GtkDestroyNotify) gtk_widget_unref);
761   gtk_widget_show(settings_hbox1);
762   //gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 1);
763   gtk_container_add(GTK_CONTAINER(notebook1), settings_hbox1);
764
765   /*
766    *The settings-info label field
767    */
768   info_label = gtk_label_new(NULL);
769   gtk_widget_ref(info_label);
770   gtk_misc_set_alignment((GtkMisc *) info_label, 0, 0);
771   //gtk_label_set_justify((GtkLabel *)net_label,GTK_JUSTIFY_LEFT);
772   gtk_object_set_data_full(GTK_OBJECT(main_window), "info_label", info_label, (GtkDestroyNotify) gtk_widget_unref);
773
774   //set_net_info("Not connected...");
775   gtk_widget_show(info_label);
776   gtk_box_pack_start(GTK_BOX(settings_hbox1), info_label, TRUE, TRUE, 0);
777
778   /*
779    *The "settings" notebook
780    */
781   settings_label = gtk_label_new("Settings");
782   gtk_widget_ref(settings_label);
783   gtk_object_set_data_full(GTK_OBJECT(main_window), "settings_label", settings_label, (GtkDestroyNotify) gtk_widget_unref);
784   gtk_widget_show(settings_label);
785   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 4), settings_label);
786
787   /*
788    *The "about" hbox
789    */
790   about_hbox1 = gtk_hbox_new(FALSE, 0);
791   gtk_widget_ref(about_hbox1);
792   gtk_object_set_data_full(GTK_OBJECT(main_window), "about_hbox1", about_hbox1, (GtkDestroyNotify) gtk_widget_unref);
793   gtk_widget_show(about_hbox1);
794   //gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 1);
795   gtk_container_add(GTK_CONTAINER(notebook1), about_hbox1);
796   gtk_container_set_border_width(GTK_CONTAINER(about_hbox1), 10);
797
798   /*
799    *The about label field
800    */
801   about_label = gtk_label_new(NULL);
802   gtk_widget_ref(about_label);
803   gtk_misc_set_alignment((GtkMisc *) about_label, 0, 0);
804   gtk_label_set_justify((GtkLabel *) about_label, GTK_JUSTIFY_CENTER);
805   gtk_object_set_data_full(GTK_OBJECT(main_window), "about_label", about_label, (GtkDestroyNotify) gtk_widget_unref);
806
807   //set_net_info("Not connected...");
808   gtk_widget_show(about_label);
809   gtk_box_pack_start(GTK_BOX(about_hbox1), unik_logo, TRUE, TRUE, 0);
810   gtk_box_pack_start(GTK_BOX(about_hbox1), about_label, TRUE, TRUE, 0);
811   gtk_widget_show(unik_logo);
812
813   gtk_label_set_text((GtkLabel *) about_label, "OLSRD-GUI by Andreas Tonnesen (andreto@ifi.uio.no)");
814
815   /*
816    *The "about" notebook
817    */
818   label3 = gtk_label_new("About");
819   gtk_widget_ref(label3);
820   gtk_object_set_data_full(GTK_OBJECT(main_window), "About", label3, (GtkDestroyNotify) gtk_widget_unref);
821   gtk_widget_show(label3);
822   gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook1), 5), label3);
823
824   return main_window;
825
826 }
827
828 /*
829  *Add a node to the node list
830  */
831 void
832 route_list_add(char *dest, char *gw, char *metric, char *dev)
833 {
834   gchar *tmp[4] = { dest, gw, dev, metric };
835   route_list_size++;
836
837   gtk_clist_freeze(GTK_CLIST(route_list));
838
839   gtk_clist_append(GTK_CLIST(route_list), tmp);
840
841   gtk_clist_thaw(GTK_CLIST(route_list));
842
843 }
844
845 /*
846  *Update the entyr with IP 'addr'
847  */
848 void
849 route_list_update(char *addr __attribute__((unused)))
850 {
851
852 }
853
854 /*
855  *Delete a node from the node list
856  */
857 int
858 route_list_del(char *dest)
859 {
860   int i = 0;
861   char *ip;
862
863   gtk_clist_freeze(GTK_CLIST(route_list));
864
865   for (i = 0; i < route_list_size; i++) {
866     gtk_clist_get_text(GTK_CLIST(route_list), i, 0, (gchar **) & ip);
867     if (strcmp(dest, ip) == 0) {
868       //printf("Found %d\n", i);
869       gtk_clist_remove(GTK_CLIST(route_list), i);
870       route_list_size--;
871       gtk_clist_thaw(GTK_CLIST(route_list));
872       return 1;
873     }
874   }
875
876   gtk_clist_thaw(GTK_CLIST(route_list));
877   return 0;
878 }
879
880 /*
881  *Remove a node from the list
882  */
883 int
884 remove_nodes_list(union olsr_ip_addr *node)
885 {
886   char *ip;
887   char *in_ip = ip_to_string(node);
888   int i;
889
890   for (i = 0; i < node_list_size; i++) {
891     gtk_clist_get_text(GTK_CLIST(node_list), i, 0, (gchar **) & ip);
892     if (strcmp(in_ip, ip) == 0) {
893       //printf("Found entry!\n");
894       gtk_clist_remove(GTK_CLIST(node_list), i);
895       node_list_size--;
896       return 1;
897     }
898   }
899
900   return 0;
901 }
902
903 /*
904  *If the node passed as a parameter exists then
905  *update it. If not add it to the list
906  */
907 void
908 update_nodes_list(struct node *node)
909 {
910   int i = 0;
911   char *ip;
912   int found = 0;
913   char *dest;
914   char *tmp[9] = { (char *)"", (char *)"", (char *)"", (char *)"", (char *)"", (char *)"", (char *)"", (char *)"", (char *)"" };
915   char timer[20];
916   struct tm *time_st;
917   char itoa_buf[10];
918
919   if (memcmp(&node->addr, &main_addr, ipsize) == 0)
920     dest = (char *)"local";
921   else
922     dest = ip_to_string(&node->addr);
923
924   gtk_clist_freeze(GTK_CLIST(node_list));
925
926   while ((i < node_list_size) && !found) {
927     gtk_clist_get_text(GTK_CLIST(node_list), i, 0, (gchar **) & ip);
928     if (strcmp(dest, ip) == 0)
929       found = 1;
930     i++;
931   }
932
933   /* Update node */
934   if (found) {
935     i--;                        /* Go backt to the right row */
936     //printf("Updating %s\n\n", ip_to_string(&node->addr));
937     /* don't update main addr */
938     /* Gateway */
939     if (memcmp(&node->addr, &main_addr, ipsize) != 0) {
940       if (memcmp(&node->gw_addr, &null_addr, ipsize) != 0)
941         gtk_clist_set_text(GTK_CLIST(node_list), i, 1, ip_to_string(&node->gw_addr));
942       /* Weigth */
943       if (node->hopcount != 0) {
944         gui_itoa(node->hopcount, itoa_buf);
945         gtk_clist_set_text(GTK_CLIST(node_list), i, 2, itoa_buf);
946       }
947       /* Device */
948       gtk_clist_set_text(GTK_CLIST(node_list), i, 3, &node->dev[0]);
949     }
950
951     /* Timer */
952     if (node->timer.tv_usec) {
953       memset(&timer[0], 0, 20);
954       time_st = localtime((time_t *) & node->timer.tv_sec);
955       sprintf(&timer[0], "%02d:%02d:%02d", time_st->tm_hour, time_st->tm_min, time_st->tm_sec);
956       gtk_clist_set_text(GTK_CLIST(node_list), i, 4, &timer[0]);
957     }
958
959     /* MID */
960     if (node->mid.next != &node->mid)
961       gtk_clist_set_text(GTK_CLIST(node_list), i, 5, "yes");
962     else
963       gtk_clist_set_text(GTK_CLIST(node_list), i, 5, "no");
964     /* HNA */
965     if (node->hna.next != &node->hna)
966       gtk_clist_set_text(GTK_CLIST(node_list), i, 6, "yes");
967     else
968       gtk_clist_set_text(GTK_CLIST(node_list), i, 6, "no");
969
970   }
971   /* Add new node */
972   else {
973     i = node_list_size;
974     /* Create entry */
975     gtk_clist_insert(GTK_CLIST(node_list), i, tmp);
976     /* Main address */
977     gtk_clist_set_text(GTK_CLIST(node_list), i, 0, dest);
978     if (memcmp(&node->addr, &main_addr, ipsize) == 0) {
979       if (memcmp(&node->gw_addr, &null_addr, ipsize) != 0)
980         gtk_clist_set_text(GTK_CLIST(node_list), i, 1, ip_to_string(&node->gw_addr));
981       /* Weigth */
982       if (node->hopcount != 0) {
983         gui_itoa(node->hopcount, itoa_buf);
984         gtk_clist_set_text(GTK_CLIST(node_list), i, 2, itoa_buf);
985       }
986       /* Device */
987       gtk_clist_set_text(GTK_CLIST(node_list), i, 3, &node->dev[0]);
988     }
989
990     /* MID */
991     if (node->mid.next != &node->mid)
992       gtk_clist_set_text(GTK_CLIST(node_list), i, 5, "yes");
993     else
994       gtk_clist_set_text(GTK_CLIST(node_list), i, 5, "no");
995     /* HNA */
996     if (node->hna.next != &node->hna)
997       gtk_clist_set_text(GTK_CLIST(node_list), i, 6, "yes");
998     else
999       gtk_clist_set_text(GTK_CLIST(node_list), i, 6, "no");
1000
1001     node_list_size++;
1002   }
1003
1004   gtk_clist_thaw(GTK_CLIST(node_list));
1005
1006 }
1007
1008 /*
1009  *Add a packet to the packet list
1010  */
1011 void
1012 packet_list_add(char *type, char *from, char *length)
1013 {
1014   gchar *nfo[3] = { type, from, length };
1015
1016   //if(!freeze_packets)
1017   //{
1018   if (packet_list_size >= MAXPACKS)
1019     gtk_clist_remove(GTK_CLIST(packet_list), MAXPACKS - 1);
1020   else
1021     packet_list_size++;
1022
1023   gtk_clist_prepend(GTK_CLIST(packet_list), nfo);
1024
1025   //}
1026
1027 }
1028
1029 void
1030 set_net_info(gchar * info, int disp_button)
1031 {
1032   gchar title[255];
1033
1034   memset(&title[0], 0, sizeof(title));
1035   gtk_label_set_text((GtkLabel *) info_label, info);
1036   gtk_label_set_text((GtkLabel *) net_label, "Connected");
1037
1038   snprintf(&title[0], sizeof(title), "%s - %s", olsrd_version, ip_to_string(&main_addr));
1039
1040   gtk_window_set_title(GTK_WINDOW(main_window), title);
1041
1042   if (disp_button)
1043     gtk_widget_show(connect_button);
1044   else
1045     gtk_widget_hide(connect_button);
1046 }
1047
1048 void
1049 set_net_info_offline(void)
1050 {
1051   gtk_label_set_text((GtkLabel *) net_label, "Connection refused...");
1052   gtk_widget_show(connect_button);
1053 }
1054
1055 void
1056 set_net_info_connecting(void)
1057 {
1058   gtk_label_set_text((GtkLabel *) net_label, "Connecting...");
1059 }
1060
1061 /*
1062  * Local Variables:
1063  * c-basic-offset: 2
1064  * indent-tabs-mode: nil
1065  * End:
1066  */