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