/*
* OLSR ad-hoc routing table management protocol GUI front-end
* Copyright (C) 2003 Andreas Tønnesen (andreto@ifi.uio.no)
*
* This file is part of olsr.org.
*
* uolsrGUI is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* uolsrGUI is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with olsr.org; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "common.h"
#include "interface.h"
void selection_made( GtkWidget *clist,
gint row,
gint column,
GdkEventButton *event,
gpointer data )
{
gchar *ip, *hops, *gw, *dev;
const gchar text[100];
/* Get the text that is stored in the selected row and column
* which was clicked in. We will receive it as a pointer in the
* argument text.
*/
gtk_clist_get_text(GTK_CLIST(clist), row, 0, &ip);
gtk_clist_get_text(GTK_CLIST(clist), row, 1, &gw);
gtk_clist_get_text(GTK_CLIST(clist), row, 2, &hops);
gtk_clist_get_text(GTK_CLIST(clist), row, 3, &dev);
/* Just prints some information about the selected row */
sprintf((char *)&text[0], "IP:%s\nGATEWAY:%s\nHOPCOUNT:%s\nINTERFACE:%s\n",
ip, gw, hops, dev);
//gtk_text_buffer_set_text (textBuffer, text, -1);
//gtk_text_view_set_buffer((GtkTextView *)text1, textBuffer);
//gtk_widget_show (text1);
return;
}
void
node_selection(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data)
{
gchar *text;
struct node *host;
struct mid *mids;
struct mpr *mprs;
struct hna *hnas;
int i;
gchar *tmpshit[1] = {""};
/*
*Clear the lists
*/
gtk_clist_clear(GTK_CLIST(mid_list));
gtk_clist_clear(GTK_CLIST(mpr_list));
gtk_clist_clear(GTK_CLIST(hna_list));
i = 0;
/*
*Get th IP address
*/
gtk_clist_get_text(GTK_CLIST(node_list), row, 0, &text);
/* Get the node */
if(strncmp(text, "local", sizeof("local")) == 0)
host = find_node_t(&main_addr);
else
host = find_node(text);
if(host)
{
/* Timeout the registered MPRs for this node */
time_out_mprs(&host->addr);
/* Get mpr pointer AFTER timeout....(another waisted hour...) */
mprs = host->mpr.next;
mids = host->mid.next;
hnas = host->hna.next;
while (mids != &host->mid)
{
gtk_clist_append(GTK_CLIST(mid_list), tmpshit);
gtk_clist_set_text(GTK_CLIST(mid_list), i, 0, ip_to_string(&mids->alias));
i++;
mids = mids->next;
}
i = 0;
while (mprs != &host->mpr)
{
//printf("ADDING MPR : %s\n", ip_to_string(&mprs->addr));fflush(stdout);
gtk_clist_append(GTK_CLIST(mpr_list), tmpshit);
gtk_clist_set_text(GTK_CLIST(mpr_list), i, 0, ip_to_string(&mprs->addr));
i++;
mprs = mprs->next;
}
i = 0;
while (hnas != &host->hna)
{
gtk_clist_append(GTK_CLIST(hna_list), tmpshit);
gtk_clist_set_text(GTK_CLIST(hna_list), i, 0, ip_to_string(&hnas->net));
i++;
hnas = hnas->next;
}
}
else
{
printf("Could not find info about %s!\n", text);
}
}
void
packet_selection(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data)
{
/* Fetch the packet from the cache */
union olsr_message *pack;
char *packet;
int y, x;
short size;
char *content[4];
int mem_size = 10;
content[0] = (char *)malloc(mem_size);
content[1] = (char *)malloc(mem_size);
content[2] = (char *)malloc(mem_size);
content[3] = (char *)malloc(mem_size);
pack = get_packet(row);
packet = (char *)pack;
//printf("Got the packet at row %d...\n", row);
gtk_clist_clear(GTK_CLIST(packet_content_list));
size = ntohs(pack->v4.olsr_msgsize);
for(y = 0; y < size;y += 4)
{
for(x = 0; x < 4; x++)
{
if(display_dec)
sprintf(content[x], "%03i", (u_char) packet[y+x]); /* Decimal format */
else
sprintf(content[x], "%02x", (u_char) packet[y+x]); /* Hex format */
}
gtk_clist_append(GTK_CLIST(packet_content_list), content);
}
free(content[0]);
free(content[1]);
free(content[2]);
free(content[3]);
}
void
column_clicked_callback(GtkWidget *list,gint column)
{
//printf("You pressed %d\n",column);
}
/*
*Connect button callback
*/
void
connect_callback( GtkWidget *widget,
gpointer data )
{
ipc_connect();
}
/*
*Packet button callback
*/
void
packet_callback( GtkWidget *widget,
gpointer data )
{
if(freeze_packets)
{
freeze_packets = 0;
gtk_button_set_label(GTK_BUTTON(packet_button), "Freeze packets");
}
else
{
freeze_packets = 1;
gtk_button_set_label(GTK_BUTTON(packet_button), "Grab packets");
}
}
/*
*Packet display button callback
*/
void
packet_disp_callback( GtkWidget *widget,
gpointer data )
{
if(display_dec)
{
display_dec = 0;
gtk_button_set_label(GTK_BUTTON(packet_disp_button), "Display decimal");
}
else
{
display_dec = 1;
gtk_button_set_label(GTK_BUTTON(packet_disp_button), "Display hex");
}
}
void
gui_shutdown(GtkObject *object, gpointer user_data)
{
printf("Shutting down...\n");
if(ipc_close() < 0)
printf("Could not close socket!\n");
printf("BYE-BYE!\n");
exit(0);
}
syntax highlighted by Code2HTML, v. 0.9.1