aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2014-10-06 14:03:47 -0400
committerBill Meier <wmeier@newsguy.com>2014-10-06 18:29:40 +0000
commit5051ae1cbe00fb57dd94d584554f731a83f932f6 (patch)
treefe40148d27b997b0b1a53a2e2eb8302537d2b388
parent24d50bc2904c265f9f89b3df25c9e41f309a29bb (diff)
Convert "4 space tabs" to spaces; Adjust editor modelines.
Change-Id: I8d61d959c79e6aa9875c58680c54a331d18079cc Reviewed-on: https://code.wireshark.org/review/4504 Reviewed-by: Bill Meier <wmeier@newsguy.com>
-rw-r--r--epan/dissectors/packet-paltalk.c128
-rw-r--r--epan/stats_tree.c2004
-rw-r--r--epan/stats_tree.h216
-rw-r--r--extcap.c1042
-rw-r--r--extcap.h20
-rw-r--r--extcap_parser.c1372
-rw-r--r--extcap_parser.h172
-rw-r--r--ui/gtk/extcap_gtk.c1488
-rw-r--r--ui/gtk/extcap_gtk.h69
-rw-r--r--ui/gtk/mcast_stream_dlg.c1142
-rw-r--r--ui/gtk/rtp_stream_dlg.c1530
11 files changed, 4592 insertions, 4591 deletions
diff --git a/epan/dissectors/packet-paltalk.c b/epan/dissectors/packet-paltalk.c
index cddfc6a140..4983e3230b 100644
--- a/epan/dissectors/packet-paltalk.c
+++ b/epan/dissectors/packet-paltalk.c
@@ -53,86 +53,86 @@ static gint ett_paltalk = -1;
static guint
dissect_paltalk_get_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
{
- return tvb_get_ntohs(tvb, offset + 4) + PALTALK_HEADER_LENGTH;
+ return tvb_get_ntohs(tvb, offset + 4) + PALTALK_HEADER_LENGTH;
}
static int
dissect_paltalk_desegmented(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
- proto_item *ti = NULL;
- proto_tree *pt_tree = NULL;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "Paltalk");
- col_clear(pinfo->cinfo, COL_INFO);
-
- if (tree) /* we are being asked for details */
- {
- ti = proto_tree_add_item(tree, proto_paltalk, tvb, 0, -1, ENC_NA);
- pt_tree = proto_item_add_subtree(ti, ett_paltalk);
- proto_tree_add_item(pt_tree, hf_paltalk_pdu_type, tvb, 0, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(pt_tree, hf_paltalk_version, tvb, 2, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(pt_tree, hf_paltalk_length, tvb, 4, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(pt_tree, hf_paltalk_content, tvb, 6, tvb_get_ntohs(tvb, 4), ENC_NA);
- }
-
- return tvb_captured_length(tvb);
+ proto_item *ti = NULL;
+ proto_tree *pt_tree = NULL;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "Paltalk");
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ if (tree) /* we are being asked for details */
+ {
+ ti = proto_tree_add_item(tree, proto_paltalk, tvb, 0, -1, ENC_NA);
+ pt_tree = proto_item_add_subtree(ti, ett_paltalk);
+ proto_tree_add_item(pt_tree, hf_paltalk_pdu_type, tvb, 0, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(pt_tree, hf_paltalk_version, tvb, 2, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(pt_tree, hf_paltalk_length, tvb, 4, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(pt_tree, hf_paltalk_content, tvb, 6, tvb_get_ntohs(tvb, 4), ENC_NA);
+ }
+
+ return tvb_captured_length(tvb);
}
static gboolean
dissect_paltalk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- guint32 src32, dst32;
-
- /* Detect if this TCP session is a Paltalk one */
- /* TODO: Optimize detection logic if possible */
-
- if ((pinfo->net_src.type != AT_IPv4)
- || (pinfo->net_dst.type != AT_IPv4)
- || (pinfo->net_src.len != 4)
- || (pinfo->net_dst.len != 4)
- || !pinfo->net_src.data
- || !pinfo->net_dst.data)
- return FALSE;
-
- memcpy((guint8 *)&src32, pinfo->net_src.data, 4); /* *Network* order */
- memcpy((guint8 *)&dst32, pinfo->net_dst.data, 4); /* *Network* order */
-
- if ( ((src32 & PALTALK_SERVERS_NETMASK) != PALTALK_SERVERS_ADDRESS)
- &&
- ((dst32 & PALTALK_SERVERS_NETMASK) != PALTALK_SERVERS_ADDRESS))
- return FALSE;
-
- /* Dissect result of desegmented TCP data */
- tcp_dissect_pdus(tvb, pinfo, tree, TRUE, PALTALK_HEADER_LENGTH,
- dissect_paltalk_get_len, dissect_paltalk_desegmented, data);
- return TRUE;
+ guint32 src32, dst32;
+
+ /* Detect if this TCP session is a Paltalk one */
+ /* TODO: Optimize detection logic if possible */
+
+ if ((pinfo->net_src.type != AT_IPv4)
+ || (pinfo->net_dst.type != AT_IPv4)
+ || (pinfo->net_src.len != 4)
+ || (pinfo->net_dst.len != 4)
+ || !pinfo->net_src.data
+ || !pinfo->net_dst.data)
+ return FALSE;
+
+ memcpy((guint8 *)&src32, pinfo->net_src.data, 4); /* *Network* order */
+ memcpy((guint8 *)&dst32, pinfo->net_dst.data, 4); /* *Network* order */
+
+ if ( ((src32 & PALTALK_SERVERS_NETMASK) != PALTALK_SERVERS_ADDRESS)
+ &&
+ ((dst32 & PALTALK_SERVERS_NETMASK) != PALTALK_SERVERS_ADDRESS))
+ return FALSE;
+
+ /* Dissect result of desegmented TCP data */
+ tcp_dissect_pdus(tvb, pinfo, tree, TRUE, PALTALK_HEADER_LENGTH,
+ dissect_paltalk_get_len, dissect_paltalk_desegmented, data);
+ return TRUE;
}
void
proto_register_paltalk(void)
{
- static hf_register_info hf[] = {
- { &hf_paltalk_pdu_type, { "Packet Type", "paltalk.type",
- FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }},
- { &hf_paltalk_version, { "Protocol Version", "paltalk.version",
- FT_INT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
- { &hf_paltalk_length, { "Payload Length", "paltalk.length",
- FT_INT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
- { &hf_paltalk_content, { "Payload Content", "paltalk.content",
- FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }}
- };
-
- static gint *ett[] = { &ett_paltalk };
-
- proto_paltalk = proto_register_protocol("Paltalk Messenger Protocol", "Paltalk", "paltalk");
- proto_register_field_array(proto_paltalk, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
+ static hf_register_info hf[] = {
+ { &hf_paltalk_pdu_type, { "Packet Type", "paltalk.type",
+ FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL }},
+ { &hf_paltalk_version, { "Protocol Version", "paltalk.version",
+ FT_INT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
+ { &hf_paltalk_length, { "Payload Length", "paltalk.length",
+ FT_INT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
+ { &hf_paltalk_content, { "Payload Content", "paltalk.content",
+ FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL }}
+ };
+
+ static gint *ett[] = { &ett_paltalk };
+
+ proto_paltalk = proto_register_protocol("Paltalk Messenger Protocol", "Paltalk", "paltalk");
+ proto_register_field_array(proto_paltalk, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
}
void
proto_reg_handoff_paltalk(void)
{
- heur_dissector_add("tcp", dissect_paltalk, proto_paltalk);
+ heur_dissector_add("tcp", dissect_paltalk, proto_paltalk);
}
/*
@@ -140,10 +140,10 @@ proto_reg_handoff_paltalk(void)
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/epan/stats_tree.c b/epan/stats_tree.c
index 958e3af57e..aae2356803 100644
--- a/epan/stats_tree.c
+++ b/epan/stats_tree.c
@@ -45,16 +45,16 @@
#include "stats_tree.h"
enum _stat_tree_columns {
- COL_NAME,
- COL_COUNT,
- COL_AVERAGE,
- COL_MIN,
- COL_MAX,
- COL_RATE,
- COL_PERCENT,
- COL_BURSTRATE,
- COL_BURSTTIME,
- N_COLUMNS
+ COL_NAME,
+ COL_COUNT,
+ COL_AVERAGE,
+ COL_MIN,
+ COL_MAX,
+ COL_RATE,
+ COL_PERCENT,
+ COL_BURSTRATE,
+ COL_BURSTTIME,
+ N_COLUMNS
};
/* used to contain the registered stat trees */
@@ -65,99 +65,99 @@ if buffer is NULL returns a newly allocated string */
extern gchar*
stats_tree_node_to_str(const stat_node *node, gchar *buffer, guint len)
{
- if (buffer) {
- g_snprintf(buffer,len,"%s: %i",node->name, node->counter);
- return buffer;
- } else {
- return g_strdup_printf("%s: %i",node->name, node->counter);
- }
+ if (buffer) {
+ g_snprintf(buffer,len,"%s: %i",node->name, node->counter);
+ return buffer;
+ } else {
+ return g_strdup_printf("%s: %i",node->name, node->counter);
+ }
}
extern guint
stats_tree_branch_max_namelen(const stat_node *node, guint indent)
{
- stat_node *child;
- guint maxlen = 0;
- guint len;
-
- indent = indent > INDENT_MAX ? INDENT_MAX : indent;
-
- if (node->children) {
- for (child = node->children; child; child = child->next ) {
- len = stats_tree_branch_max_namelen(child,indent+1);
- maxlen = len > maxlen ? len : maxlen;
- }
- }
-
- if (node->st_flags&ST_FLG_ROOTCHILD) {
- gchar *display_name= stats_tree_get_displayname(node->name);
- len = (guint) strlen(display_name) + indent;
- g_free(display_name);
- }
- else {
- len = (guint) strlen(node->name) + indent;
- }
- maxlen = len > maxlen ? len : maxlen;
-
- return maxlen;
+ stat_node *child;
+ guint maxlen = 0;
+ guint len;
+
+ indent = indent > INDENT_MAX ? INDENT_MAX : indent;
+
+ if (node->children) {
+ for (child = node->children; child; child = child->next ) {
+ len = stats_tree_branch_max_namelen(child,indent+1);
+ maxlen = len > maxlen ? len : maxlen;
+ }
+ }
+
+ if (node->st_flags&ST_FLG_ROOTCHILD) {
+ gchar *display_name= stats_tree_get_displayname(node->name);
+ len = (guint) strlen(display_name) + indent;
+ g_free(display_name);
+ }
+ else {
+ len = (guint) strlen(node->name) + indent;
+ }
+ maxlen = len > maxlen ? len : maxlen;
+
+ return maxlen;
}
/* frees the resources allocated by a stat_tree node */
static void
free_stat_node(stat_node *node)
{
- stat_node *child;
- stat_node *next;
- burst_bucket *bucket;
-
- if (node->children) {
- for (child = node->children; child; child = next ) {
- /* child->next will be gone after free_stat_node, so cache it here */
- next = child->next;
- free_stat_node(child);
- }
- }
-
- if(node->st->cfg->free_node_pr) node->st->cfg->free_node_pr(node);
-
- if (node->hash) g_hash_table_destroy(node->hash);
-
- while (node->bh) {
- bucket = node->bh;
- node->bh = bucket->next;
- g_free(bucket);
- }
-
- g_free(node->rng);
- g_free(node->name);
- g_free(node);
+ stat_node *child;
+ stat_node *next;
+ burst_bucket *bucket;
+
+ if (node->children) {
+ for (child = node->children; child; child = next ) {
+ /* child->next will be gone after free_stat_node, so cache it here */
+ next = child->next;
+ free_stat_node(child);
+ }
+ }
+
+ if(node->st->cfg->free_node_pr) node->st->cfg->free_node_pr(node);
+
+ if (node->hash) g_hash_table_destroy(node->hash);
+
+ while (node->bh) {
+ bucket = node->bh;
+ node->bh = bucket->next;
+ g_free(bucket);
+ }
+
+ g_free(node->rng);
+ g_free(node->name);
+ g_free(node);
}
/* destroys the whole tree instance */
extern void
stats_tree_free(stats_tree *st)
{
- stat_node *child;
- stat_node *next;
+ stat_node *child;
+ stat_node *next;
- g_free(st->filter);
- g_hash_table_destroy(st->names);
- g_ptr_array_free(st->parents,TRUE);
- g_free(st->display_name);
+ g_free(st->filter);
+ g_hash_table_destroy(st->names);
+ g_ptr_array_free(st->parents,TRUE);
+ g_free(st->display_name);
- for (child = st->root.children; child; child = next ) {
- /* child->next will be gone after free_stat_node, so cache it here */
- next = child->next;
- free_stat_node(child);
- }
+ for (child = st->root.children; child; child = next ) {
+ /* child->next will be gone after free_stat_node, so cache it here */
+ next = child->next;
+ free_stat_node(child);
+ }
- if (st->cfg->free_tree_pr)
- st->cfg->free_tree_pr(st);
+ if (st->cfg->free_tree_pr)
+ st->cfg->free_tree_pr(st);
- if (st->cfg->cleanup)
- st->cfg->cleanup(st);
+ if (st->cfg->cleanup)
+ st->cfg->cleanup(st);
- g_free(st);
+ g_free(st);
}
@@ -165,34 +165,34 @@ stats_tree_free(stats_tree *st)
static void
reset_stat_node(stat_node *node)
{
- stat_node *child;
- burst_bucket *bucket;
-
- node->counter = 0;
- node->total = 0;
- node->minvalue = G_MAXINT;
- node->maxvalue = G_MININT;
- node->st_flags = 0;
-
- while (node->bh) {
- bucket = node->bh;
- node->bh = bucket->next;
- g_free(bucket);
- }
- node->bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- node->bt = node->bh;
- node->bcount = 0;
- node->max_burst = 0;
- node->burst_time = -1.0;
-
- if (node->children) {
- for (child = node->children; child; child = child->next )
- reset_stat_node(child);
- }
-
- if(node->st->cfg->reset_node) {
- node->st->cfg->reset_node(node);
- }
+ stat_node *child;
+ burst_bucket *bucket;
+
+ node->counter = 0;
+ node->total = 0;
+ node->minvalue = G_MAXINT;
+ node->maxvalue = G_MININT;
+ node->st_flags = 0;
+
+ while (node->bh) {
+ bucket = node->bh;
+ node->bh = bucket->next;
+ g_free(bucket);
+ }
+ node->bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ node->bt = node->bh;
+ node->bcount = 0;
+ node->max_burst = 0;
+ node->burst_time = -1.0;
+
+ if (node->children) {
+ for (child = node->children; child; child = child->next )
+ reset_stat_node(child);
+ }
+
+ if(node->st->cfg->reset_node) {
+ node->st->cfg->reset_node(node);
+ }
}
@@ -200,268 +200,268 @@ reset_stat_node(stat_node *node)
extern void
stats_tree_reset(void *p)
{
- stats_tree *st = (stats_tree *)p;
+ stats_tree *st = (stats_tree *)p;
- st->start = -1.0;
- st->elapsed = 0.0;
- st->now = - 1.0;
+ st->start = -1.0;
+ st->elapsed = 0.0;
+ st->now = - 1.0;
- reset_stat_node(&st->root);
+ reset_stat_node(&st->root);
- if (st->cfg->reset_tree) {
- st->cfg->reset_tree(st);
- }
+ if (st->cfg->reset_tree) {
+ st->cfg->reset_tree(st);
+ }
}
extern void
stats_tree_reinit(void *p)
{
- stats_tree *st = (stats_tree *)p;
- stat_node *child;
- stat_node *next;
-
- for (child = st->root.children; child; child = next) {
- /* child->next will be gone after free_stat_node, so cache it here */
- next = child->next;
- free_stat_node(child);
- }
-
- st->root.children = NULL;
- st->root.counter = 0;
- st->root.total = 0;
- st->root.minvalue = G_MAXINT;
- st->root.maxvalue = G_MININT;
- st->root.st_flags = 0;
-
- st->root.bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- st->root.bt = st->root.bh;
- st->root.bcount = 0;
- st->root.max_burst = 0;
- st->root.burst_time = -1.0;
-
- /* No more stat_nodes left in tree - clean out hash, array */
- g_hash_table_remove_all(st->names);
- if (st->parents->len>1) {
- g_ptr_array_remove_range(st->parents, 1, st->parents->len-1);
- }
-
- /* Do not update st_flags for the tree (sorting) - leave as was */
- st->num_columns = N_COLUMNS;
- g_free(st->display_name);
- st->display_name= stats_tree_get_displayname(st->cfg->name);
-
- if (st->cfg->init) {
- st->cfg->init(st);
- }
+ stats_tree *st = (stats_tree *)p;
+ stat_node *child;
+ stat_node *next;
+
+ for (child = st->root.children; child; child = next) {
+ /* child->next will be gone after free_stat_node, so cache it here */
+ next = child->next;
+ free_stat_node(child);
+ }
+
+ st->root.children = NULL;
+ st->root.counter = 0;
+ st->root.total = 0;
+ st->root.minvalue = G_MAXINT;
+ st->root.maxvalue = G_MININT;
+ st->root.st_flags = 0;
+
+ st->root.bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ st->root.bt = st->root.bh;
+ st->root.bcount = 0;
+ st->root.max_burst = 0;
+ st->root.burst_time = -1.0;
+
+ /* No more stat_nodes left in tree - clean out hash, array */
+ g_hash_table_remove_all(st->names);
+ if (st->parents->len>1) {
+ g_ptr_array_remove_range(st->parents, 1, st->parents->len-1);
+ }
+
+ /* Do not update st_flags for the tree (sorting) - leave as was */
+ st->num_columns = N_COLUMNS;
+ g_free(st->display_name);
+ st->display_name= stats_tree_get_displayname(st->cfg->name);
+
+ if (st->cfg->init) {
+ st->cfg->init(st);
+ }
}
/* register a new stats_tree */
extern void
stats_tree_register_with_group(const char *tapname, const char *abbr, const char *name,
- guint flags,
- stat_tree_packet_cb packet, stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup, register_stat_group_t stat_group)
+ guint flags,
+ stat_tree_packet_cb packet, stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup, register_stat_group_t stat_group)
{
- stats_tree_cfg *cfg = (stats_tree_cfg *)g_malloc( sizeof(stats_tree_cfg) );
+ stats_tree_cfg *cfg = (stats_tree_cfg *)g_malloc( sizeof(stats_tree_cfg) );
- /* at the very least the abbrev and the packet function should be given */
- g_assert( tapname && abbr && packet );
+ /* at the very least the abbrev and the packet function should be given */
+ g_assert( tapname && abbr && packet );
- cfg->plugin = FALSE;
- cfg->tapname = g_strdup(tapname);
- cfg->abbr = g_strdup(abbr);
- cfg->name = name ? g_strdup(name) : g_strdup(abbr);
- cfg->stat_group = stat_group;
+ cfg->plugin = FALSE;
+ cfg->tapname = g_strdup(tapname);
+ cfg->abbr = g_strdup(abbr);
+ cfg->name = name ? g_strdup(name) : g_strdup(abbr);
+ cfg->stat_group = stat_group;
- cfg->packet = packet;
- cfg->init = init;
- cfg->cleanup = cleanup;
+ cfg->packet = packet;
+ cfg->init = init;
+ cfg->cleanup = cleanup;
- cfg->flags = flags&~ST_FLG_MASK;
- cfg->st_flags = flags&ST_FLG_MASK;
+ cfg->flags = flags&~ST_FLG_MASK;
+ cfg->st_flags = flags&ST_FLG_MASK;
- /* these have to be filled in by implementations */
- cfg->setup_node_pr = NULL;
- cfg->new_tree_pr = NULL;
- cfg->free_node_pr = NULL;
- cfg->free_tree_pr = NULL;
- cfg->draw_node = NULL;
- cfg->draw_tree = NULL;
- cfg->reset_node = NULL;
- cfg->reset_tree = NULL;
+ /* these have to be filled in by implementations */
+ cfg->setup_node_pr = NULL;
+ cfg->new_tree_pr = NULL;
+ cfg->free_node_pr = NULL;
+ cfg->free_tree_pr = NULL;
+ cfg->draw_node = NULL;
+ cfg->draw_tree = NULL;
+ cfg->reset_node = NULL;
+ cfg->reset_tree = NULL;
- if (!registry) registry = g_hash_table_new(g_str_hash,g_str_equal);
+ if (!registry) registry = g_hash_table_new(g_str_hash,g_str_equal);
- g_hash_table_insert(registry,cfg->abbr,cfg);
+ g_hash_table_insert(registry,cfg->abbr,cfg);
}
/* register a new stats_tree with default group REGISTER_STAT_GROUP_UNSORTED */
extern void
stats_tree_register(const char *tapname, const char *abbr, const char *name,
- guint flags,
- stat_tree_packet_cb packet, stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup)
+ guint flags,
+ stat_tree_packet_cb packet, stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup)
{
- stats_tree_register_with_group(tapname, abbr, name,
- flags,
- packet, init,
- cleanup, REGISTER_STAT_GROUP_UNSORTED);
+ stats_tree_register_with_group(tapname, abbr, name,
+ flags,
+ packet, init,
+ cleanup, REGISTER_STAT_GROUP_UNSORTED);
}
/* register a new stat_tree with default group REGISTER_STAT_GROUP_UNSORTED from a plugin */
extern void
stats_tree_register_plugin(const char *tapname, const char *abbr, const char *name,
- guint flags,
- stat_tree_packet_cb packet, stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup)
+ guint flags,
+ stat_tree_packet_cb packet, stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup)
{
- stats_tree_cfg *cfg;
-
- stats_tree_register(tapname, abbr, name,
- flags,
- packet, init,
- cleanup);
- cfg = stats_tree_get_cfg_by_abbr(abbr);
- cfg->plugin = TRUE;
+ stats_tree_cfg *cfg;
+
+ stats_tree_register(tapname, abbr, name,
+ flags,
+ packet, init,
+ cleanup);
+ cfg = stats_tree_get_cfg_by_abbr(abbr);
+ cfg->plugin = TRUE;
}
extern stats_tree*
stats_tree_new(stats_tree_cfg *cfg, tree_pres *pr, const char *filter)
{
- stats_tree *st = (stats_tree *)g_malloc(sizeof(stats_tree));
-
- st->cfg = cfg;
- st->pr = pr;
-
- st->names = g_hash_table_new(g_str_hash,g_str_equal);
- st->parents = g_ptr_array_new();
- st->filter = g_strdup(filter);
-
- st->start = -1.0;
- st->elapsed = 0.0;
-
- st->root.counter = 0;
- st->root.total = 0;
- st->root.minvalue = G_MAXINT;
- st->root.maxvalue = G_MININT;
- st->root.st_flags = 0;
-
- st->root.bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- st->root.bt = st->root.bh;
- st->root.bcount = 0;
- st->root.max_burst = 0;
- st->root.burst_time = -1.0;
-
- st->root.name = stats_tree_get_displayname(cfg->name);
- st->root.st = st;
- st->root.parent = NULL;
- st->root.children = NULL;
- st->root.next = NULL;
- st->root.hash = NULL;
- st->root.pr = NULL;
-
- st->st_flags = st->cfg->st_flags;
-
- if (!(st->st_flags&ST_FLG_SRTCOL_MASK)) {
- /* No default sort specified - use preferences */
- st->st_flags |= prefs.st_sort_defcolflag<<ST_FLG_SRTCOL_SHIFT;
- if (prefs.st_sort_defdescending) {
- st->st_flags |= ST_FLG_SORT_DESC;
- }
- }
- st->num_columns = N_COLUMNS;
- st->display_name= stats_tree_get_displayname(st->cfg->name);
-
- g_ptr_array_add(st->parents,&st->root);
-
- return st;
+ stats_tree *st = (stats_tree *)g_malloc(sizeof(stats_tree));
+
+ st->cfg = cfg;
+ st->pr = pr;
+
+ st->names = g_hash_table_new(g_str_hash,g_str_equal);
+ st->parents = g_ptr_array_new();
+ st->filter = g_strdup(filter);
+
+ st->start = -1.0;
+ st->elapsed = 0.0;
+
+ st->root.counter = 0;
+ st->root.total = 0;
+ st->root.minvalue = G_MAXINT;
+ st->root.maxvalue = G_MININT;
+ st->root.st_flags = 0;
+
+ st->root.bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ st->root.bt = st->root.bh;
+ st->root.bcount = 0;
+ st->root.max_burst = 0;
+ st->root.burst_time = -1.0;
+
+ st->root.name = stats_tree_get_displayname(cfg->name);
+ st->root.st = st;
+ st->root.parent = NULL;
+ st->root.children = NULL;
+ st->root.next = NULL;
+ st->root.hash = NULL;
+ st->root.pr = NULL;
+
+ st->st_flags = st->cfg->st_flags;
+
+ if (!(st->st_flags&ST_FLG_SRTCOL_MASK)) {
+ /* No default sort specified - use preferences */
+ st->st_flags |= prefs.st_sort_defcolflag<<ST_FLG_SRTCOL_SHIFT;
+ if (prefs.st_sort_defdescending) {
+ st->st_flags |= ST_FLG_SORT_DESC;
+ }
+ }
+ st->num_columns = N_COLUMNS;
+ st->display_name= stats_tree_get_displayname(st->cfg->name);
+
+ g_ptr_array_add(st->parents,&st->root);
+
+ return st;
}
/* will be the tap packet cb */
extern int
stats_tree_packet(void *p, packet_info *pinfo, epan_dissect_t *edt, const void *pri)
{
- stats_tree *st = (stats_tree *)p;
+ stats_tree *st = (stats_tree *)p;
- st->now = nstime_to_msec(&pinfo->rel_ts);
- if (st->start < 0.0) st->start = st->now;
+ st->now = nstime_to_msec(&pinfo->rel_ts);
+ if (st->start < 0.0) st->start = st->now;
- st->elapsed = st->now - st->start;
+ st->elapsed = st->now - st->start;
- if (st->cfg->packet)
- return st->cfg->packet(st,pinfo,edt,pri);
- else
- return 0;
+ if (st->cfg->packet)
+ return st->cfg->packet(st,pinfo,edt,pri);
+ else
+ return 0;
}
extern stats_tree_cfg*
stats_tree_get_cfg_by_abbr(const char *abbr)
{
- return (stats_tree_cfg *)g_hash_table_lookup(registry,abbr);
+ return (stats_tree_cfg *)g_hash_table_lookup(registry,abbr);
}
extern GList*
stats_tree_get_cfg_list(void)
{
- return g_hash_table_get_values(registry);
+ return g_hash_table_get_values(registry);
}
struct _stats_tree_pres_cbs {
- void (*setup_node_pr)(stat_node*);
- void (*free_node_pr)(stat_node*);
- void (*draw_node)(stat_node*);
- void (*reset_node)(stat_node*);
- tree_pres *(*new_tree_pr)(stats_tree*);
- void (*free_tree_pr)(stats_tree*);
- void (*draw_tree)(stats_tree*);
- void (*reset_tree)(stats_tree*);
+ void (*setup_node_pr)(stat_node*);
+ void (*free_node_pr)(stat_node*);
+ void (*draw_node)(stat_node*);
+ void (*reset_node)(stat_node*);
+ tree_pres *(*new_tree_pr)(stats_tree*);
+ void (*free_tree_pr)(stats_tree*);
+ void (*draw_tree)(stats_tree*);
+ void (*reset_tree)(stats_tree*);
};
static void
setup_tree_presentation(gpointer k _U_, gpointer v, gpointer p)
{
- stats_tree_cfg *cfg = (stats_tree_cfg *)v;
- struct _stats_tree_pres_cbs *d = (struct _stats_tree_pres_cbs *)p;
-
- cfg->in_use = FALSE;
- cfg->setup_node_pr = d->setup_node_pr;
- cfg->new_tree_pr = d->new_tree_pr;
- cfg->free_node_pr = d->free_node_pr;
- cfg->free_tree_pr = d->free_tree_pr;
- cfg->draw_node = d->draw_node;
- cfg->draw_tree = d->draw_tree;
- cfg->reset_node = d->reset_node;
- cfg->reset_tree = d->reset_tree;
+ stats_tree_cfg *cfg = (stats_tree_cfg *)v;
+ struct _stats_tree_pres_cbs *d = (struct _stats_tree_pres_cbs *)p;
+
+ cfg->in_use = FALSE;
+ cfg->setup_node_pr = d->setup_node_pr;
+ cfg->new_tree_pr = d->new_tree_pr;
+ cfg->free_node_pr = d->free_node_pr;
+ cfg->free_tree_pr = d->free_tree_pr;
+ cfg->draw_node = d->draw_node;
+ cfg->draw_tree = d->draw_tree;
+ cfg->reset_node = d->reset_node;
+ cfg->reset_tree = d->reset_tree;
}
extern void
stats_tree_presentation(void (*registry_iterator)(gpointer,gpointer,gpointer),
- void (*setup_node_pr)(stat_node*),
- void (*free_node_pr)(stat_node*),
- void (*draw_node)(stat_node*),
- void (*reset_node)(stat_node*),
- tree_pres *(*new_tree_pr)(stats_tree*),
- void (*free_tree_pr)(stats_tree*),
- void (*draw_tree)(stats_tree*),
- void (*reset_tree)(stats_tree*),
- void *data)
+ void (*setup_node_pr)(stat_node*),
+ void (*free_node_pr)(stat_node*),
+ void (*draw_node)(stat_node*),
+ void (*reset_node)(stat_node*),
+ tree_pres *(*new_tree_pr)(stats_tree*),
+ void (*free_tree_pr)(stats_tree*),
+ void (*draw_tree)(stats_tree*),
+ void (*reset_tree)(stats_tree*),
+ void *data)
{
- static struct _stats_tree_pres_cbs d;
+ static struct _stats_tree_pres_cbs d;
- d.setup_node_pr = setup_node_pr;
- d.new_tree_pr = new_tree_pr;
- d.free_node_pr = free_node_pr;
- d.free_tree_pr = free_tree_pr;
- d.draw_node = draw_node;
- d.draw_tree = draw_tree;
- d.reset_node = reset_node;
- d.reset_tree = reset_tree;
+ d.setup_node_pr = setup_node_pr;
+ d.new_tree_pr = new_tree_pr;
+ d.free_node_pr = free_node_pr;
+ d.free_tree_pr = free_tree_pr;
+ d.draw_node = draw_node;
+ d.draw_tree = draw_tree;
+ d.reset_node = reset_node;
+ d.reset_tree = reset_tree;
- if (registry) g_hash_table_foreach(registry,setup_tree_presentation,&d);
+ if (registry) g_hash_table_foreach(registry,setup_tree_presentation,&d);
- if (registry_iterator && registry)
- g_hash_table_foreach(registry,registry_iterator,data);
+ if (registry_iterator && registry)
+ g_hash_table_foreach(registry,registry_iterator,data);
}
@@ -474,183 +474,183 @@ stats_tree_presentation(void (*registry_iterator)(gpointer,gpointer,gpointer),
*/
static stat_node*
new_stat_node(stats_tree *st, const gchar *name, int parent_id,
- gboolean with_hash, gboolean as_parent_node)
+ gboolean with_hash, gboolean as_parent_node)
{
- stat_node *node = (stat_node *)g_malloc (sizeof(stat_node));
- stat_node *last_chld = NULL;
-
- node->counter = 0;
- node->total = 0;
- node->minvalue = G_MAXINT;
- node->maxvalue = G_MININT;
- node->st_flags = parent_id?0:ST_FLG_ROOTCHILD;
-
- node->bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- node->bt = node->bh;
- node->bcount = 0;
- node->max_burst = 0;
- node->burst_time = -1.0;
-
- node->name = g_strdup(name);
- node->children = NULL;
- node->next = NULL;
- node->st = (stats_tree*) st;
- node->hash = with_hash ? g_hash_table_new(g_str_hash,g_str_equal) : NULL;
- node->parent = NULL;
- node->rng = NULL;
-
- if (as_parent_node) {
- g_hash_table_insert(st->names,
- node->name,
- node);
-
- g_ptr_array_add(st->parents,node);
-
- node->id = st->parents->len - 1;
- } else {
- node->id = -1;
- }
-
- if (parent_id >= 0 && parent_id < (int) st->parents->len ) {
- node->parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
- } else {
- /* ??? should we set the parent to be root ??? */
- g_assert_not_reached();
- }
-
- if (node->parent->children) {
- /* insert as last child */
-
- for (last_chld = node->parent->children;
- last_chld->next;
- last_chld = last_chld->next ) ;
-
- last_chld->next = node;
-
- } else {
- /* insert as first child */
- node->parent->children = node;
- }
-
- if(node->parent->hash) {
- g_hash_table_insert(node->parent->hash,node->name,node);
- }
-
- if (st->cfg->setup_node_pr) {
- st->cfg->setup_node_pr(node);
- } else {
- node->pr = NULL;
- }
-
- return node;
+ stat_node *node = (stat_node *)g_malloc (sizeof(stat_node));
+ stat_node *last_chld = NULL;
+
+ node->counter = 0;
+ node->total = 0;
+ node->minvalue = G_MAXINT;
+ node->maxvalue = G_MININT;
+ node->st_flags = parent_id?0:ST_FLG_ROOTCHILD;
+
+ node->bh = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ node->bt = node->bh;
+ node->bcount = 0;
+ node->max_burst = 0;
+ node->burst_time = -1.0;
+
+ node->name = g_strdup(name);
+ node->children = NULL;
+ node->next = NULL;
+ node->st = (stats_tree*) st;
+ node->hash = with_hash ? g_hash_table_new(g_str_hash,g_str_equal) : NULL;
+ node->parent = NULL;
+ node->rng = NULL;
+
+ if (as_parent_node) {
+ g_hash_table_insert(st->names,
+ node->name,
+ node);
+
+ g_ptr_array_add(st->parents,node);
+
+ node->id = st->parents->len - 1;
+ } else {
+ node->id = -1;
+ }
+
+ if (parent_id >= 0 && parent_id < (int) st->parents->len ) {
+ node->parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
+ } else {
+ /* ??? should we set the parent to be root ??? */
+ g_assert_not_reached();
+ }
+
+ if (node->parent->children) {
+ /* insert as last child */
+
+ for (last_chld = node->parent->children;
+ last_chld->next;
+ last_chld = last_chld->next ) ;
+
+ last_chld->next = node;
+
+ } else {
+ /* insert as first child */
+ node->parent->children = node;
+ }
+
+ if(node->parent->hash) {
+ g_hash_table_insert(node->parent->hash,node->name,node);
+ }
+
+ if (st->cfg->setup_node_pr) {
+ st->cfg->setup_node_pr(node);
+ } else {
+ node->pr = NULL;
+ }
+
+ return node;
}
/***/
extern int
stats_tree_create_node(stats_tree *st, const gchar *name, int parent_id, gboolean with_hash)
{
- stat_node *node = new_stat_node(st,name,parent_id,with_hash,TRUE);
+ stat_node *node = new_stat_node(st,name,parent_id,with_hash,TRUE);
- if (node)
- return node->id;
- else
- return 0;
+ if (node)
+ return node->id;
+ else
+ return 0;
}
/* XXX: should this be a macro? */
extern int
stats_tree_create_node_by_pname(stats_tree *st, const gchar *name,
- const gchar *parent_name, gboolean with_children)
+ const gchar *parent_name, gboolean with_children)
{
- return stats_tree_create_node(st,name,stats_tree_parent_id_by_name(st,parent_name),with_children);
+ return stats_tree_create_node(st,name,stats_tree_parent_id_by_name(st,parent_name),with_children);
}
/* Internal function to update the burst calculation data - add entry to bucket */
static void
update_burst_calc(stat_node *node, gint value)
{
- double current_bucket;
- double burstwin;
-
- burst_bucket *bn;
-
- if (!prefs.st_enable_burstinfo) {
- return;
- }
-
- /* NB thebucket list should always contain at least one node - even if it is */
- /* the dummy created at init time. Head and tail should never be NULL! */
- current_bucket= floor(node->st->now/prefs.st_burst_resolution);
- burstwin= prefs.st_burst_windowlen/prefs.st_burst_resolution;
- if (current_bucket>node->bt->bucket_no) {
- /* Must add a new bucket at the burst list tail */
- bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- bn->count = value;
- bn->bucket_no = current_bucket;
- bn->start_time = node->st->now;
- bn->prev = node->bt;
- node->bt->next = bn;
- node->bt = bn;
- /* And add value to the current burst count for node */
- node->bcount += value;
- /* Check if bucket list head is now too old and must be removed */
- while (current_bucket>=(node->bh->bucket_no+burstwin)) {
- /* off with its head! */
- bn = node->bh;
- node->bh = bn->next;
- node->bh->prev = NULL;
- node->bcount -= bn->count;
- g_free(bn);
- }
- }
- else if (current_bucket<node->bh->bucket_no) {
- /* Packet must be added at head of burst list - check if not too old */
- if ((current_bucket+burstwin)>node->bt->bucket_no) {
- /* packet still within the window */
- bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- bn->count = value;
- bn->bucket_no = current_bucket;
- bn->start_time = node->st->now;
- bn->next = node->bh;
- node->bh->prev = bn;
- node->bh = bn;
- /* And add value to the current burst count for node */
- node->bcount += value;
- }
- }
- else
- {
- /* Somewhere in the middle... */
- burst_bucket *search = node->bt;
- while (current_bucket<search->bucket_no) {
- search = search->prev;
- }
- if (current_bucket==search->bucket_no) {
- /* found existing bucket, increase value */
- search->count += value;
- if (search->start_time>node->st->now) {
- search->start_time = node->st->now;
- }
- }
- else {
- /* must add a new bucket after bn. */
- bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
- bn->count = value;
- bn->bucket_no = current_bucket;
- bn->start_time = node->st->now;
- bn->prev = search;
- bn->next = search->next;
- search->next = bn;
- bn->next->prev = bn;
- }
- node->bcount += value;
- }
- if (node->bcount>node->max_burst) {
- /* new record burst */
- node->max_burst = node->bcount;
- node->burst_time = node->bh->start_time;
- }
+ double current_bucket;
+ double burstwin;
+
+ burst_bucket *bn;
+
+ if (!prefs.st_enable_burstinfo) {
+ return;
+ }
+
+ /* NB thebucket list should always contain at least one node - even if it is */
+ /* the dummy created at init time. Head and tail should never be NULL! */
+ current_bucket= floor(node->st->now/prefs.st_burst_resolution);
+ burstwin= prefs.st_burst_windowlen/prefs.st_burst_resolution;
+ if (current_bucket>node->bt->bucket_no) {
+ /* Must add a new bucket at the burst list tail */
+ bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ bn->count = value;
+ bn->bucket_no = current_bucket;
+ bn->start_time = node->st->now;
+ bn->prev = node->bt;
+ node->bt->next = bn;
+ node->bt = bn;
+ /* And add value to the current burst count for node */
+ node->bcount += value;
+ /* Check if bucket list head is now too old and must be removed */
+ while (current_bucket>=(node->bh->bucket_no+burstwin)) {
+ /* off with its head! */
+ bn = node->bh;
+ node->bh = bn->next;
+ node->bh->prev = NULL;
+ node->bcount -= bn->count;
+ g_free(bn);
+ }
+ }
+ else if (current_bucket<node->bh->bucket_no) {
+ /* Packet must be added at head of burst list - check if not too old */
+ if ((current_bucket+burstwin)>node->bt->bucket_no) {
+ /* packet still within the window */
+ bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ bn->count = value;
+ bn->bucket_no = current_bucket;
+ bn->start_time = node->st->now;
+ bn->next = node->bh;
+ node->bh->prev = bn;
+ node->bh = bn;
+ /* And add value to the current burst count for node */
+ node->bcount += value;
+ }
+ }
+ else
+ {
+ /* Somewhere in the middle... */
+ burst_bucket *search = node->bt;
+ while (current_bucket<search->bucket_no) {
+ search = search->prev;
+ }
+ if (current_bucket==search->bucket_no) {
+ /* found existing bucket, increase value */
+ search->count += value;
+ if (search->start_time>node->st->now) {
+ search->start_time = node->st->now;
+ }
+ }
+ else {
+ /* must add a new bucket after bn. */
+ bn = (burst_bucket*)g_malloc0(sizeof(burst_bucket));
+ bn->count = value;
+ bn->bucket_no = current_bucket;
+ bn->start_time = node->st->now;
+ bn->prev = search;
+ bn->next = search->next;
+ search->next = bn;
+ bn->next->prev = bn;
+ }
+ node->bcount += value;
+ }
+ if (node->bcount>node->max_burst) {
+ /* new record burst */
+ node->max_burst = node->bcount;
+ node->burst_time = node->bh->start_time;
+ }
}
/*
@@ -661,75 +661,75 @@ update_burst_calc(stat_node *node, gint value)
*/
extern int
stats_tree_manip_node(manip_node_mode mode, stats_tree *st, const char *name,
- int parent_id, gboolean with_hash, gint value)
+ int parent_id, gboolean with_hash, gint value)
{
- stat_node *node = NULL;
- stat_node *parent = NULL;
-
- g_assert( parent_id >= 0 && parent_id < (int) st->parents->len );
-
- parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
-
- if( parent->hash ) {
- node = (stat_node *)g_hash_table_lookup(parent->hash,name);
- } else {
- node = (stat_node *)g_hash_table_lookup(st->names,name);
- }
-
- if ( node == NULL )
- node = new_stat_node(st,name,parent_id,with_hash,with_hash);
-
- switch (mode) {
- case MN_INCREASE:
- node->counter += value;
- update_burst_calc(node, value);
- break;
- case MN_SET: node->counter = value; break;
- case MN_AVERAGE:
- node->counter++;
- update_burst_calc(node, 1);
- /* fall through to average code */
- case MN_AVERAGE_NOTICK:
- node->total += value;
- if (node->minvalue > value) {
- node->minvalue = value;
- }
- if (node->maxvalue < value) {
- node->maxvalue = value;
- }
- node->st_flags |= ST_FLG_AVERAGE;
- break;
- case MN_SET_FLAGS:
- node->st_flags |= value;
- break;
- case MN_CLEAR_FLAGS:
- node->st_flags &= ~value;
- break;
- }
-
- if (node)
- return node->id;
- else
- return -1;
+ stat_node *node = NULL;
+ stat_node *parent = NULL;
+
+ g_assert( parent_id >= 0 && parent_id < (int) st->parents->len );
+
+ parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
+
+ if( parent->hash ) {
+ node = (stat_node *)g_hash_table_lookup(parent->hash,name);
+ } else {
+ node = (stat_node *)g_hash_table_lookup(st->names,name);
+ }
+
+ if ( node == NULL )
+ node = new_stat_node(st,name,parent_id,with_hash,with_hash);
+
+ switch (mode) {
+ case MN_INCREASE:
+ node->counter += value;
+ update_burst_calc(node, value);
+ break;
+ case MN_SET: node->counter = value; break;
+ case MN_AVERAGE:
+ node->counter++;
+ update_burst_calc(node, 1);
+ /* fall through to average code */
+ case MN_AVERAGE_NOTICK:
+ node->total += value;
+ if (node->minvalue > value) {
+ node->minvalue = value;
+ }
+ if (node->maxvalue < value) {
+ node->maxvalue = value;
+ }
+ node->st_flags |= ST_FLG_AVERAGE;
+ break;
+ case MN_SET_FLAGS:
+ node->st_flags |= value;
+ break;
+ case MN_CLEAR_FLAGS:
+ node->st_flags &= ~value;
+ break;
+ }
+
+ if (node)
+ return node->id;
+ else
+ return -1;
}
extern char*
stats_tree_get_abbr(const char *opt_arg)
{
- guint i;
+ guint i;
- /* XXX: this fails when tshark is given any options
- after the -z */
- g_assert(opt_arg != NULL);
+ /* XXX: this fails when tshark is given any options
+ after the -z */
+ g_assert(opt_arg != NULL);
- for (i=0; opt_arg[i] && opt_arg[i] != ','; i++);
+ for (i=0; opt_arg[i] && opt_arg[i] != ','; i++);
- if (opt_arg[i] == ',') {
- return g_strndup(opt_arg,i);
- } else {
- return NULL;
- }
+ if (opt_arg[i] == ',') {
+ return g_strndup(opt_arg,i);
+ } else {
+ return NULL;
+ }
}
@@ -752,614 +752,614 @@ stats_tree_get_abbr(const char *opt_arg)
static range_pair_t*
get_range(char *rngstr)
{
- gchar **split;
- range_pair_t *rng;
-
- split = g_strsplit((gchar*)rngstr,"-",2);
-
- /* empty string */
- if (split[0] == NULL) {
- g_strfreev(split);
- return NULL;
- }
-
- rng = (range_pair_t *)g_malloc(sizeof(range_pair_t));
-
- if (split[1] == NULL) {
- /* means we have a non empty string with no delimiter
- * so it must be a single number */
- rng->floor = (gint)strtol(split[0],NULL,10);
- rng->ceil = rng->floor;
- } else {
- /* string == "X-?" */
- if (*(split[0]) != '\0') {
- rng->floor = (gint)strtol(split[0],NULL,10);
- } else
- /* string == "-?" */
- rng->floor = G_MININT;
-
- /* string != "?-" */
- if (*(split[1]) != '\0') {
- rng->ceil = (gint)strtol(split[1],NULL,10);
- } else
- /* string == "?-" */
- rng->ceil = G_MAXINT;
- }
- g_strfreev(split);
-
- return rng;
+ gchar **split;
+ range_pair_t *rng;
+
+ split = g_strsplit((gchar*)rngstr,"-",2);
+
+ /* empty string */
+ if (split[0] == NULL) {
+ g_strfreev(split);
+ return NULL;
+ }
+
+ rng = (range_pair_t *)g_malloc(sizeof(range_pair_t));
+
+ if (split[1] == NULL) {
+ /* means we have a non empty string with no delimiter
+ * so it must be a single number */
+ rng->floor = (gint)strtol(split[0],NULL,10);
+ rng->ceil = rng->floor;
+ } else {
+ /* string == "X-?" */
+ if (*(split[0]) != '\0') {
+ rng->floor = (gint)strtol(split[0],NULL,10);
+ } else
+ /* string == "-?" */
+ rng->floor = G_MININT;
+
+ /* string != "?-" */
+ if (*(split[1]) != '\0') {
+ rng->ceil = (gint)strtol(split[1],NULL,10);
+ } else
+ /* string == "?-" */
+ rng->ceil = G_MAXINT;
+ }
+ g_strfreev(split);
+
+ return rng;
}
extern int
stats_tree_create_range_node(stats_tree *st, const gchar *name, int parent_id, ...)
{
- va_list list;
- gchar *curr_range;
- stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
- stat_node *range_node = NULL;
-
- va_start( list, parent_id );
- while (( curr_range = va_arg(list, gchar*) )) {
- range_node = new_stat_node(st, curr_range, rng_root->id, FALSE, FALSE);
- range_node->rng = get_range(curr_range);
- }
- va_end( list );
-
- return rng_root->id;
+ va_list list;
+ gchar *curr_range;
+ stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
+ stat_node *range_node = NULL;
+
+ va_start( list, parent_id );
+ while (( curr_range = va_arg(list, gchar*) )) {
+ range_node = new_stat_node(st, curr_range, rng_root->id, FALSE, FALSE);
+ range_node->rng = get_range(curr_range);
+ }
+ va_end( list );
+
+ return rng_root->id;
}
extern int
stats_tree_create_range_node_string(stats_tree *st, const gchar *name,
- int parent_id, int num_str_ranges,
- gchar** str_ranges)
+ int parent_id, int num_str_ranges,
+ gchar** str_ranges)
{
- int i;
- stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
- stat_node *range_node = NULL;
+ int i;
+ stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
+ stat_node *range_node = NULL;
- for (i = 0; i < num_str_ranges; i++) {
- range_node = new_stat_node(st, str_ranges[i], rng_root->id, FALSE, FALSE);
- range_node->rng = get_range(str_ranges[i]);
- }
+ for (i = 0; i < num_str_ranges; i++) {
+ range_node = new_stat_node(st, str_ranges[i], rng_root->id, FALSE, FALSE);
+ range_node->rng = get_range(str_ranges[i]);
+ }
- return rng_root->id;
+ return rng_root->id;
}
/****/
extern int
stats_tree_parent_id_by_name(stats_tree *st, const gchar *parent_name)
{
- stat_node *node = (stat_node *)g_hash_table_lookup(st->names,parent_name);
+ stat_node *node = (stat_node *)g_hash_table_lookup(st->names,parent_name);
- if (node)
- return node->id;
- else
- return 0; /* XXX: this is the root shoud we return -1 instead?*/
+ if (node)
+ return node->id;
+ else
+ return 0; /* XXX: this is the root shoud we return -1 instead?*/
}
extern int
stats_tree_range_node_with_pname(stats_tree *st, const gchar *name,
- const gchar *parent_name, ...)
+ const gchar *parent_name, ...)
{
- va_list list;
- gchar *curr_range;
- stat_node *range_node = NULL;
- int parent_id = stats_tree_parent_id_by_name(st,parent_name);
- stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
-
- va_start( list, parent_name );
- while (( curr_range = va_arg(list, gchar*) )) {
- range_node = new_stat_node(st, curr_range, rng_root->id, FALSE, FALSE);
- range_node->rng = get_range(curr_range);
- }
- va_end( list );
-
- return rng_root->id;
+ va_list list;
+ gchar *curr_range;
+ stat_node *range_node = NULL;
+ int parent_id = stats_tree_parent_id_by_name(st,parent_name);
+ stat_node *rng_root = new_stat_node(st, name, parent_id, FALSE, TRUE);
+
+ va_start( list, parent_name );
+ while (( curr_range = va_arg(list, gchar*) )) {
+ range_node = new_stat_node(st, curr_range, rng_root->id, FALSE, FALSE);
+ range_node->rng = get_range(curr_range);
+ }
+ va_end( list );
+
+ return rng_root->id;
}
extern int
stats_tree_tick_range(stats_tree *st, const gchar *name, int parent_id,
- int value_in_range)
+ int value_in_range)
{
- stat_node *node = NULL;
- stat_node *parent = NULL;
- stat_node *child = NULL;
- gint stat_floor, stat_ceil;
-
- if (parent_id >= 0 && parent_id < (int) st->parents->len) {
- parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
- } else {
- g_assert_not_reached();
- }
-
- if( parent->hash ) {
- node = (stat_node *)g_hash_table_lookup(parent->hash,name);
- } else {
- node = (stat_node *)g_hash_table_lookup(st->names,name);
- }
-
- if ( node == NULL )
- g_assert_not_reached();
-
- /* update stats for container node. counter should already be ticked so we only update total and min/max */
- node->total += value_in_range;
- if (node->minvalue > value_in_range) {
- node->minvalue = value_in_range;
- }
- if (node->maxvalue < value_in_range) {
- node->maxvalue = value_in_range;
- }
- node->st_flags |= ST_FLG_AVERAGE;
-
- for ( child = node->children; child; child = child->next) {
- stat_floor = child->rng->floor;
- stat_ceil = child->rng->ceil;
-
- if ( value_in_range >= stat_floor && value_in_range <= stat_ceil ) {
- child->counter++;
- child->total += value_in_range;
- if (child->minvalue > value_in_range) {
- child->minvalue = value_in_range;
- }
- if (child->maxvalue < value_in_range) {
- child->maxvalue = value_in_range;
- }
- child->st_flags |= ST_FLG_AVERAGE;
- update_burst_calc(child, 1);
- return node->id;
- }
- }
-
- return node->id;
+ stat_node *node = NULL;
+ stat_node *parent = NULL;
+ stat_node *child = NULL;
+ gint stat_floor, stat_ceil;
+
+ if (parent_id >= 0 && parent_id < (int) st->parents->len) {
+ parent = (stat_node *)g_ptr_array_index(st->parents,parent_id);
+ } else {
+ g_assert_not_reached();
+ }
+
+ if( parent->hash ) {
+ node = (stat_node *)g_hash_table_lookup(parent->hash,name);
+ } else {
+ node = (stat_node *)g_hash_table_lookup(st->names,name);
+ }
+
+ if ( node == NULL )
+ g_assert_not_reached();
+
+ /* update stats for container node. counter should already be ticked so we only update total and min/max */
+ node->total += value_in_range;
+ if (node->minvalue > value_in_range) {
+ node->minvalue = value_in_range;
+ }
+ if (node->maxvalue < value_in_range) {
+ node->maxvalue = value_in_range;
+ }
+ node->st_flags |= ST_FLG_AVERAGE;
+
+ for ( child = node->children; child; child = child->next) {
+ stat_floor = child->rng->floor;
+ stat_ceil = child->rng->ceil;
+
+ if ( value_in_range >= stat_floor && value_in_range <= stat_ceil ) {
+ child->counter++;
+ child->total += value_in_range;
+ if (child->minvalue > value_in_range) {
+ child->minvalue = value_in_range;
+ }
+ if (child->maxvalue < value_in_range) {
+ child->maxvalue = value_in_range;
+ }
+ child->st_flags |= ST_FLG_AVERAGE;
+ update_burst_calc(child, 1);
+ return node->id;
+ }
+ }
+
+ return node->id;
}
extern int
stats_tree_create_pivot(stats_tree *st, const gchar *name, int parent_id)
{
- stat_node *node = new_stat_node(st,name,parent_id,TRUE,TRUE);
+ stat_node *node = new_stat_node(st,name,parent_id,TRUE,TRUE);
- if (node)
- return node->id;
- else
- return 0;
+ if (node)
+ return node->id;
+ else
+ return 0;
}
extern int
stats_tree_create_pivot_by_pname(stats_tree *st, const gchar *name,
- const gchar *parent_name)
+ const gchar *parent_name)
{
- int parent_id = stats_tree_parent_id_by_name(st,parent_name);
- stat_node *node;
+ int parent_id = stats_tree_parent_id_by_name(st,parent_name);
+ stat_node *node;
- node = new_stat_node(st,name,parent_id,TRUE,TRUE);
+ node = new_stat_node(st,name,parent_id,TRUE,TRUE);
- if (node)
- return node->id;
- else
- return 0;
+ if (node)
+ return node->id;
+ else
+ return 0;
}
extern int
stats_tree_tick_pivot(stats_tree *st, int pivot_id, const gchar *pivot_value)
{
- stat_node *parent = (stat_node *)g_ptr_array_index(st->parents,pivot_id);
+ stat_node *parent = (stat_node *)g_ptr_array_index(st->parents,pivot_id);
- parent->counter++;
- update_burst_calc(parent, 1);
- stats_tree_manip_node( MN_INCREASE, st, pivot_value, pivot_id, FALSE, 1);
+ parent->counter++;
+ update_burst_calc(parent, 1);
+ stats_tree_manip_node( MN_INCREASE, st, pivot_value, pivot_id, FALSE, 1);
- return pivot_id;
+ return pivot_id;
}
extern gchar*
stats_tree_get_displayname (gchar* fullname)
{
- gchar *buf = g_strdup(fullname);
- gchar *sep;
-
- if (prefs.st_sort_showfullname) {
- return buf; /* unmodifed */
- }
-
- sep = buf;
- while ((sep = strchr(sep,'/')) != NULL) {
- if (*(++sep)=='/') { /* escapeded slash - two slash characters after each other */
- memmove(sep,sep+1,strlen(sep));
- }
- else {
- /* we got a new path separator */
- memmove(buf,sep,strlen(sep)+1);
- sep = buf;
- }
- }
-
- return buf;
+ gchar *buf = g_strdup(fullname);
+ gchar *sep;
+
+ if (prefs.st_sort_showfullname) {
+ return buf; /* unmodifed */
+ }
+
+ sep = buf;
+ while ((sep = strchr(sep,'/')) != NULL) {
+ if (*(++sep)=='/') { /* escapeded slash - two slash characters after each other */
+ memmove(sep,sep+1,strlen(sep));
+ }
+ else {
+ /* we got a new path separator */
+ memmove(buf,sep,strlen(sep)+1);
+ sep = buf;
+ }
+ }
+
+ return buf;
}
extern gint
stats_tree_get_default_sort_col (stats_tree *st)
{
- switch ((st->st_flags&ST_FLG_SRTCOL_MASK)>>ST_FLG_SRTCOL_SHIFT) {
- case ST_SORT_COL_NAME: return COL_NAME;
- case ST_SORT_COL_COUNT: return COL_COUNT;
- case ST_SORT_COL_AVG: return COL_AVERAGE;
- case ST_SORT_COL_MIN: return COL_MIN;
- case ST_SORT_COL_MAX: return COL_MAX;
- case ST_SORT_COL_BURSTRATE: return COL_BURSTRATE;
- }
- return COL_COUNT; /* nothing specific set */
+ switch ((st->st_flags&ST_FLG_SRTCOL_MASK)>>ST_FLG_SRTCOL_SHIFT) {
+ case ST_SORT_COL_NAME: return COL_NAME;
+ case ST_SORT_COL_COUNT: return COL_COUNT;
+ case ST_SORT_COL_AVG: return COL_AVERAGE;
+ case ST_SORT_COL_MIN: return COL_MIN;
+ case ST_SORT_COL_MAX: return COL_MAX;
+ case ST_SORT_COL_BURSTRATE: return COL_BURSTRATE;
+ }
+ return COL_COUNT; /* nothing specific set */
}
extern gboolean
stats_tree_is_default_sort_DESC (stats_tree *st)
{
- return st->st_flags&ST_FLG_SORT_DESC;
+ return st->st_flags&ST_FLG_SORT_DESC;
}
extern const gchar*
stats_tree_get_column_name (gint col_index)
{
- switch (col_index) {
- case COL_NAME: return "Topic / Item";
- case COL_COUNT: return "Count";
- case COL_AVERAGE: return "Average";
- case COL_MIN: return "Min val";
- case COL_MAX: return "Max val";
- case COL_RATE: return "Rate (ms)";
- case COL_PERCENT: return "Percent";
- case COL_BURSTRATE: return prefs.st_burst_showcount?"Burst count":"Burst rate";
- case COL_BURSTTIME: return "Burst start";
- default: return "(Unknown)";
- }
+ switch (col_index) {
+ case COL_NAME: return "Topic / Item";
+ case COL_COUNT: return "Count";
+ case COL_AVERAGE: return "Average";
+ case COL_MIN: return "Min val";
+ case COL_MAX: return "Max val";
+ case COL_RATE: return "Rate (ms)";
+ case COL_PERCENT: return "Percent";
+ case COL_BURSTRATE: return prefs.st_burst_showcount?"Burst count":"Burst rate";
+ case COL_BURSTTIME: return "Burst start";
+ default: return "(Unknown)";
+ }
}
extern gint
stats_tree_get_column_size (gint col_index)
{
- if (col_index==COL_NAME) {
- return 36; /* but caller should really call stats_tree_branch_max_namelen() */
- }
- if (col_index<N_COLUMNS) {
- return 12; /* all numerical values are this size */
- }
- return 0; /* invalid column */
+ if (col_index==COL_NAME) {
+ return 36; /* but caller should really call stats_tree_branch_max_namelen() */
+ }
+ if (col_index<N_COLUMNS) {
+ return 12; /* all numerical values are this size */
+ }
+ return 0; /* invalid column */
}
extern gchar**
stats_tree_get_values_from_node (const stat_node* node)
{
- gchar **values = (gchar**) g_malloc0(sizeof(gchar*)*(node->st->num_columns));
-
- values[COL_NAME]= (node->st_flags&ST_FLG_ROOTCHILD)?stats_tree_get_displayname(node->name):g_strdup(node->name);
- values[COL_COUNT]= g_strdup_printf("%u",node->counter);
- values[COL_AVERAGE]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
- (node->counter?g_strdup_printf("%.2f",((float)node->total)/node->counter):g_strdup("-")):
- g_strdup("");
- values[COL_MIN]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
- (node->counter?g_strdup_printf("%u",node->minvalue):g_strdup("-")):
- g_strdup("");
- values[COL_MAX]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
- (node->counter?g_strdup_printf("%u",node->maxvalue):g_strdup("-")):
- g_strdup("");
- values[COL_RATE]= (node->st->elapsed)?g_strdup_printf("%.4f",((float)node->counter)/node->st->elapsed):g_strdup("");
- values[COL_PERCENT]= ((node->parent)&&(node->parent->counter))?
- g_strdup_printf("%.2f%%",(node->counter*100.0)/node->parent->counter):
- (node->parent==&(node->st->root)?g_strdup("100%"):g_strdup(""));
- if (node->st->num_columns>COL_BURSTTIME) {
- values[COL_BURSTRATE]= (!prefs.st_enable_burstinfo)?g_strdup(""):
- (node->max_burst?(prefs.st_burst_showcount?
- g_strdup_printf("%d",node->max_burst):
- g_strdup_printf("%.4f",((double)node->max_burst)/prefs.st_burst_windowlen)):
- g_strdup("-"));
- values[COL_BURSTTIME]= (!prefs.st_enable_burstinfo)?g_strdup(""):
- (node->max_burst?g_strdup_printf("%.3f",((double)node->burst_time/1000.0)):g_strdup("-"));
- }
- return values;
+ gchar **values = (gchar**) g_malloc0(sizeof(gchar*)*(node->st->num_columns));
+
+ values[COL_NAME]= (node->st_flags&ST_FLG_ROOTCHILD)?stats_tree_get_displayname(node->name):g_strdup(node->name);
+ values[COL_COUNT]= g_strdup_printf("%u",node->counter);
+ values[COL_AVERAGE]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
+ (node->counter?g_strdup_printf("%.2f",((float)node->total)/node->counter):g_strdup("-")):
+ g_strdup("");
+ values[COL_MIN]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
+ (node->counter?g_strdup_printf("%u",node->minvalue):g_strdup("-")):
+ g_strdup("");
+ values[COL_MAX]= ((node->st_flags&ST_FLG_AVERAGE)||node->rng)?
+ (node->counter?g_strdup_printf("%u",node->maxvalue):g_strdup("-")):
+ g_strdup("");
+ values[COL_RATE]= (node->st->elapsed)?g_strdup_printf("%.4f",((float)node->counter)/node->st->elapsed):g_strdup("");
+ values[COL_PERCENT]= ((node->parent)&&(node->parent->counter))?
+ g_strdup_printf("%.2f%%",(node->counter*100.0)/node->parent->counter):
+ (node->parent==&(node->st->root)?g_strdup("100%"):g_strdup(""));
+ if (node->st->num_columns>COL_BURSTTIME) {
+ values[COL_BURSTRATE]= (!prefs.st_enable_burstinfo)?g_strdup(""):
+ (node->max_burst?(prefs.st_burst_showcount?
+ g_strdup_printf("%d",node->max_burst):
+ g_strdup_printf("%.4f",((double)node->max_burst)/prefs.st_burst_windowlen)):
+ g_strdup("-"));
+ values[COL_BURSTTIME]= (!prefs.st_enable_burstinfo)?g_strdup(""):
+ (node->max_burst?g_strdup_printf("%.3f",((double)node->burst_time/1000.0)):g_strdup("-"));
+ }
+ return values;
}
extern gint
stats_tree_sort_compare (const stat_node *a, const stat_node *b, gint sort_column,
- gboolean sort_descending)
+ gboolean sort_descending)
{
- int result = 0;
- float avg_a, avg_b;
-
- if (prefs.st_sort_rng_nameonly&&(a->rng&&b->rng)) {
- /* always sort ranges by range name */
- result = a->rng->floor - b->rng->floor;
- if (sort_descending&&(!prefs.st_sort_rng_fixorder)) {
- result= -result;
- }
- return result;
- }
-
- switch (sort_column)
- {
- case COL_NAME: if (a->rng&&b->rng) {
- result = a->rng->floor - b->rng->floor;
- }
- else if (prefs.st_sort_casesensitve) {
- result = strcmp(a->name,b->name);
- }
- else {
- result = g_ascii_strcasecmp(a->name,b->name);
- }
- break;
-
- case COL_RATE:
- case COL_PERCENT:
- case COL_COUNT: result = a->counter - b->counter;
- break;
-
- case COL_AVERAGE: if (a->counter) {
- result= 1; /* assume a>b */
- if (b->counter) {
- avg_a= ((float)a->total)/a->counter;
- avg_b= ((float)b->total)/b->counter;
- result= (avg_a>avg_b)?1:((avg_a<avg_b)?-1:0);
- }
- }
- else {
- result= -1; /* let b>a */
- }
- break;
-
- case COL_MIN: result = a->minvalue - b->minvalue;
- break;
-
- case COL_MAX: result = a->maxvalue - b->maxvalue;
- break;
-
- case COL_BURSTRATE: result = a->max_burst - b->max_burst;
- break;
-
- case COL_BURSTTIME: result = (a->burst_time>b->burst_time)?1:((a->burst_time<b->burst_time)?-1:0);
- break;
-
- default:
- /* no sort comparison found for column - must update this switch statement */
- g_assert_not_reached();
- }
-
- /* break tie between items with same primary search result */
- if (!result) {
- if (sort_column==COL_NAME) {
- result = a->counter - b->counter;
- }
- else {
- if (a->rng&&b->rng) {
- result = a->rng->floor - b->rng->floor;
- }
- else if (prefs.st_sort_casesensitve) {
- result = strcmp(a->name,b->name);
- }
- else {
- result = g_ascii_strcasecmp(a->name,b->name);
- }
- }
- }
-
- /* take into account sort order */
- if (sort_descending) {
- result= -result;
- }
-
- if ((a->st_flags&ST_FLG_SORT_TOP)!=(b->st_flags&ST_FLG_SORT_TOP)) {
- /* different sort groups top vs non-top */
- result= (a->st_flags&ST_FLG_SORT_TOP)?-1:1;
- }
- return result;
+ int result = 0;
+ float avg_a, avg_b;
+
+ if (prefs.st_sort_rng_nameonly&&(a->rng&&b->rng)) {
+ /* always sort ranges by range name */
+ result = a->rng->floor - b->rng->floor;
+ if (sort_descending&&(!prefs.st_sort_rng_fixorder)) {
+ result= -result;
+ }
+ return result;
+ }
+
+ switch (sort_column)
+ {
+ case COL_NAME: if (a->rng&&b->rng) {
+ result = a->rng->floor - b->rng->floor;
+ }
+ else if (prefs.st_sort_casesensitve) {
+ result = strcmp(a->name,b->name);
+ }
+ else {
+ result = g_ascii_strcasecmp(a->name,b->name);
+ }
+ break;
+
+ case COL_RATE:
+ case COL_PERCENT:
+ case COL_COUNT: result = a->counter - b->counter;
+ break;
+
+ case COL_AVERAGE: if (a->counter) {
+ result= 1; /* assume a>b */
+ if (b->counter) {
+ avg_a= ((float)a->total)/a->counter;
+ avg_b= ((float)b->total)/b->counter;
+ result= (avg_a>avg_b)?1:((avg_a<avg_b)?-1:0);
+ }
+ }
+ else {
+ result= -1; /* let b>a */
+ }
+ break;
+
+ case COL_MIN: result = a->minvalue - b->minvalue;
+ break;
+
+ case COL_MAX: result = a->maxvalue - b->maxvalue;
+ break;
+
+ case COL_BURSTRATE: result = a->max_burst - b->max_burst;
+ break;
+
+ case COL_BURSTTIME: result = (a->burst_time>b->burst_time)?1:((a->burst_time<b->burst_time)?-1:0);
+ break;
+
+ default:
+ /* no sort comparison found for column - must update this switch statement */
+ g_assert_not_reached();
+ }
+
+ /* break tie between items with same primary search result */
+ if (!result) {
+ if (sort_column==COL_NAME) {
+ result = a->counter - b->counter;
+ }
+ else {
+ if (a->rng&&b->rng) {
+ result = a->rng->floor - b->rng->floor;
+ }
+ else if (prefs.st_sort_casesensitve) {
+ result = strcmp(a->name,b->name);
+ }
+ else {
+ result = g_ascii_strcasecmp(a->name,b->name);
+ }
+ }
+ }
+
+ /* take into account sort order */
+ if (sort_descending) {
+ result= -result;
+ }
+
+ if ((a->st_flags&ST_FLG_SORT_TOP)!=(b->st_flags&ST_FLG_SORT_TOP)) {
+ /* different sort groups top vs non-top */
+ result= (a->st_flags&ST_FLG_SORT_TOP)?-1:1;
+ }
+ return result;
}
extern GString*
stats_tree_format_as_str(const stats_tree* st, st_format_type format_type,
- gint sort_column, gboolean sort_descending)
+ gint sort_column, gboolean sort_descending)
{
- int maxnamelen= stats_tree_branch_max_namelen(&st->root,0);
- stat_node *child;
- GString *s;
- int count;
- gchar *separator = NULL;
-
- switch(format_type)
- {
- case ST_FORMAT_YAML:
- s = g_string_new("---\n");
- break;
- case ST_FORMAT_XML:
- s = g_string_new("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
- break;
- case ST_FORMAT_CSV:
- s = g_string_new("\"level\",\"parent\",");
- for (count = 0; count<st->num_columns; count++) {
- g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(count));
- }
- g_string_append (s,"\n");
- break;
- case ST_FORMAT_PLAIN:
- {
- char fmt[16];
- int sep_length;
-
- sep_length= maxnamelen;
- for (count = 1; count<st->num_columns; count++) {
- sep_length += stats_tree_get_column_size(count)+2;
- }
- separator = (gchar *)g_malloc(sep_length+1);
- memset (separator, '=', sep_length);
- separator[sep_length] = 0;
-
- s = g_string_new("\n");
- g_string_append(s,separator);
- g_string_append_printf(s,"\n%s:\n",st->cfg->name);
- g_sprintf (fmt,"%%-%us",maxnamelen);
- g_string_append_printf(s,fmt,stats_tree_get_column_name(0));
- for (count = 1; count<st->num_columns; count++) {
- g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1);
- g_string_append_printf(s,fmt,stats_tree_get_column_name(count));
- }
- memset (separator, '-', sep_length);
- g_string_append_printf(s,"\n%s\n",separator);
- }
- break;
- default:
- return g_string_new("unknown format for stats_tree\n");
- }
-
- for (child = st->root.children; child; child = child->next ) {
- stats_tree_format_node_as_str(child,s,format_type,0,"",maxnamelen,sort_column,sort_descending);
-
- }
-
- if (format_type==ST_FORMAT_PLAIN) {
- g_string_append_printf(s,"\n%s\n",separator);
- g_free(separator);
- }
-
- return s;
+ int maxnamelen= stats_tree_branch_max_namelen(&st->root,0);
+ stat_node *child;
+ GString *s;
+ int count;
+ gchar *separator = NULL;
+
+ switch(format_type)
+ {
+ case ST_FORMAT_YAML:
+ s = g_string_new("---\n");
+ break;
+ case ST_FORMAT_XML:
+ s = g_string_new("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
+ break;
+ case ST_FORMAT_CSV:
+ s = g_string_new("\"level\",\"parent\",");
+ for (count = 0; count<st->num_columns; count++) {
+ g_string_append_printf(s,"\"%s\",",stats_tree_get_column_name(count));
+ }
+ g_string_append (s,"\n");
+ break;
+ case ST_FORMAT_PLAIN:
+ {
+ char fmt[16];
+ int sep_length;
+
+ sep_length= maxnamelen;
+ for (count = 1; count<st->num_columns; count++) {
+ sep_length += stats_tree_get_column_size(count)+2;
+ }
+ separator = (gchar *)g_malloc(sep_length+1);
+ memset (separator, '=', sep_length);
+ separator[sep_length] = 0;
+
+ s = g_string_new("\n");
+ g_string_append(s,separator);
+ g_string_append_printf(s,"\n%s:\n",st->cfg->name);
+ g_sprintf (fmt,"%%-%us",maxnamelen);
+ g_string_append_printf(s,fmt,stats_tree_get_column_name(0));
+ for (count = 1; count<st->num_columns; count++) {
+ g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1);
+ g_string_append_printf(s,fmt,stats_tree_get_column_name(count));
+ }
+ memset (separator, '-', sep_length);
+ g_string_append_printf(s,"\n%s\n",separator);
+ }
+ break;
+ default:
+ return g_string_new("unknown format for stats_tree\n");
+ }
+
+ for (child = st->root.children; child; child = child->next ) {
+ stats_tree_format_node_as_str(child,s,format_type,0,"",maxnamelen,sort_column,sort_descending);
+
+ }
+
+ if (format_type==ST_FORMAT_PLAIN) {
+ g_string_append_printf(s,"\n%s\n",separator);
+ g_free(separator);
+ }
+
+ return s;
}
typedef struct {
- gint sort_column;
- gboolean sort_descending;
-} sortinfo;
+ gint sort_column;
+ gboolean sort_descending;
+} sortinfo;
/* Function to compare elements for child array sort. a and b are children, user_data
points to a st_flags value */
extern gint
stat_node_array_sortcmp (gconstpointer a, gconstpointer b, gpointer user_data)
{
- /* user_data is *guint value to st_flags */
- return stats_tree_sort_compare (*(const stat_node**)a,*(const stat_node**)b,
- ((sortinfo*)user_data)->sort_column,((sortinfo*)user_data)->sort_descending);
+ /* user_data is *guint value to st_flags */
+ return stats_tree_sort_compare (*(const stat_node**)a,*(const stat_node**)b,
+ ((sortinfo*)user_data)->sort_column,((sortinfo*)user_data)->sort_descending);
}
static gchar*
clean_for_xml_tag (gchar *str)
{
- gchar *s = str;
- while ((s=strpbrk(s,"!\"#$%%&'()*+,/;<=>?@[\\]^`{|}~ ")) != NULL) {
- *(s++) = '-';
- }
- return str;
+ gchar *s = str;
+ while ((s=strpbrk(s,"!\"#$%%&'()*+,/;<=>?@[\\]^`{|}~ ")) != NULL) {
+ *(s++) = '-';
+ }
+ return str;
}
/** helper funcation to add note to formatted stats_tree */
WS_DLL_PUBLIC void stats_tree_format_node_as_str(const stat_node *node,
- GString *s,
- st_format_type format_type,
- guint indent,
- const gchar *path,
- gint maxnamelen,
- gint sort_column,
- gboolean sort_descending)
+ GString *s,
+ st_format_type format_type,
+ guint indent,
+ const gchar *path,
+ gint maxnamelen,
+ gint sort_column,
+ gboolean sort_descending)
{
- int count;
- int num_columns= node->st->num_columns;
- gchar **values= stats_tree_get_values_from_node(node);
- stat_node *child;
- sortinfo si;
- gchar *full_path;
- char fmt[16];
-
- switch(format_type)
- {
- case ST_FORMAT_YAML:
- if (indent) {
- g_sprintf(fmt, "%%%ds%%s%%s", indent*4-2);
- }
- else {
- strcpy(fmt, "%s%s%s");
- }
- g_string_append_printf(s, fmt, "", indent?"- ":"", "Description");
- g_string_append_printf(s, ": \"%s\"\n", values[0]);
-
- for (count = 1; count<num_columns; count++) {
- if (*values[count]) {
- g_string_append_printf(s, fmt, "", indent?" ":"",
- stats_tree_get_column_name(count));
- g_string_append_printf(s, ": %s\n", values[count]);
- }
- }
- if (node->children) {
- g_string_append_printf(s, fmt, "", indent?" ":"", "Items:\n");
- }
- break;
- case ST_FORMAT_XML:
- {
- char *itemname = xml_escape(values[0]);
- g_string_append_printf(s,"<stat-node name=\"%s\"%s>\n",itemname,
- node->rng?" isrange=\"true\"":"");
- g_free(itemname);
- for (count = 1; count<num_columns; count++) {
- gchar *colname= g_strdup(stats_tree_get_column_name(count));
- g_string_append_printf(s,"<%s>",clean_for_xml_tag(colname));
- g_string_append_printf(s,"%s</%s>\n",values[count],colname);
- g_free(colname);
- }
- }
- break;
- case ST_FORMAT_CSV:
- g_string_append_printf(s,"%d,\"%s\",\"%s\"",indent,path,values[0]);
- for (count = 1; count<num_columns; count++) {
- g_string_append_printf(s,",%s",values[count]);
- }
- g_string_append (s,"\n");
- break;
- case ST_FORMAT_PLAIN:
- g_sprintf (fmt,"%%%ds%%-%us",indent,maxnamelen-indent);
- g_string_append_printf(s,fmt,"",values[0]);
- for (count = 1; count<num_columns; count++) {
- g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1);
- g_string_append_printf(s,fmt,values[count]);
- }
- g_string_append (s,"\n");
- break;
- }
-
- indent++;
- indent = indent > INDENT_MAX ? INDENT_MAX : indent;
- full_path= g_strdup_printf ("%s/%s",path,values[0]);
-
- for (count = 0; count<num_columns; count++) {
- g_free(values[count]);
- }
- g_free(values);
-
- if (node->children) {
- GArray *Children= g_array_new(FALSE,FALSE,sizeof(child));
- for (child = node->children; child; child = child->next ) {
- g_array_append_val(Children,child);
- }
- si.sort_column = sort_column;
- si.sort_descending = sort_descending;
- g_array_sort_with_data(Children,stat_node_array_sortcmp,&si);
- for (count = 0; count<((int)Children->len); count++) {
- stats_tree_format_node_as_str(g_array_index(Children,stat_node*,count), s, format_type,
- indent, full_path, maxnamelen, sort_column, sort_descending);
- }
- g_array_free(Children,FALSE);
- }
- g_free(full_path);
-
- if (format_type==ST_FORMAT_XML) {
- g_string_append(s,"</stat-node>\n");
- }
+ int count;
+ int num_columns= node->st->num_columns;
+ gchar **values= stats_tree_get_values_from_node(node);
+ stat_node *child;
+ sortinfo si;
+ gchar *full_path;
+ char fmt[16];
+
+ switch(format_type)
+ {
+ case ST_FORMAT_YAML:
+ if (indent) {
+ g_sprintf(fmt, "%%%ds%%s%%s", indent*4-2);
+ }
+ else {
+ strcpy(fmt, "%s%s%s");
+ }
+ g_string_append_printf(s, fmt, "", indent?"- ":"", "Description");
+ g_string_append_printf(s, ": \"%s\"\n", values[0]);
+
+ for (count = 1; count<num_columns; count++) {
+ if (*values[count]) {
+ g_string_append_printf(s, fmt, "", indent?" ":"",
+ stats_tree_get_column_name(count));
+ g_string_append_printf(s, ": %s\n", values[count]);
+ }
+ }
+ if (node->children) {
+ g_string_append_printf(s, fmt, "", indent?" ":"", "Items:\n");
+ }
+ break;
+ case ST_FORMAT_XML:
+ {
+ char *itemname = xml_escape(values[0]);
+ g_string_append_printf(s,"<stat-node name=\"%s\"%s>\n",itemname,
+ node->rng?" isrange=\"true\"":"");
+ g_free(itemname);
+ for (count = 1; count<num_columns; count++) {
+ gchar *colname= g_strdup(stats_tree_get_column_name(count));
+ g_string_append_printf(s,"<%s>",clean_for_xml_tag(colname));
+ g_string_append_printf(s,"%s</%s>\n",values[count],colname);
+ g_free(colname);
+ }
+ }
+ break;
+ case ST_FORMAT_CSV:
+ g_string_append_printf(s,"%d,\"%s\",\"%s\"",indent,path,values[0]);
+ for (count = 1; count<num_columns; count++) {
+ g_string_append_printf(s,",%s",values[count]);
+ }
+ g_string_append (s,"\n");
+ break;
+ case ST_FORMAT_PLAIN:
+ g_sprintf (fmt,"%%%ds%%-%us",indent,maxnamelen-indent);
+ g_string_append_printf(s,fmt,"",values[0]);
+ for (count = 1; count<num_columns; count++) {
+ g_sprintf (fmt," %%-%us",stats_tree_get_column_size(count)+1);
+ g_string_append_printf(s,fmt,values[count]);
+ }
+ g_string_append (s,"\n");
+ break;
+ }
+
+ indent++;
+ indent = indent > INDENT_MAX ? INDENT_MAX : indent;
+ full_path= g_strdup_printf ("%s/%s",path,values[0]);
+
+ for (count = 0; count<num_columns; count++) {
+ g_free(values[count]);
+ }
+ g_free(values);
+
+ if (node->children) {
+ GArray *Children= g_array_new(FALSE,FALSE,sizeof(child));
+ for (child = node->children; child; child = child->next ) {
+ g_array_append_val(Children,child);
+ }
+ si.sort_column = sort_column;
+ si.sort_descending = sort_descending;
+ g_array_sort_with_data(Children,stat_node_array_sortcmp,&si);
+ for (count = 0; count<((int)Children->len); count++) {
+ stats_tree_format_node_as_str(g_array_index(Children,stat_node*,count), s, format_type,
+ indent, full_path, maxnamelen, sort_column, sort_descending);
+ }
+ g_array_free(Children,FALSE);
+ }
+ g_free(full_path);
+
+ if (format_type==ST_FORMAT_XML) {
+ g_string_append(s,"</stat-node>\n");
+ }
}
/*
- * Editor modelines
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
*
- * Local Variables:
+ * Local variables:
* c-basic-offset: 4
* tab-width: 8
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=8 noexpandtab:
- * :indentSize=4:tabSize=8:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/epan/stats_tree.h b/epan/stats_tree.h
index 0efa1c7349..0e06cccc50 100644
--- a/epan/stats_tree.h
+++ b/epan/stats_tree.h
@@ -33,38 +33,38 @@
#define STAT_TREE_ROOT "root"
-#define ST_FLG_AVERAGE 0x10000000 /* Calculate overages for nodes, rather than totals */
-#define ST_FLG_ROOTCHILD 0x20000000 /* This node is a direct child of the root node */
-#define ST_FLG_DEF_NOEXPAND 0x01000000 /* This node should not be expanded by default */
-#define ST_FLG_SORT_DESC 0x00800000 /* When sorting, sort ascending instead of decending */
-#define ST_FLG_SORT_TOP 0x00400000 /* When sorting always keep these lines on of list */
-#define ST_FLG_SRTCOL_MASK 0x000F0000 /* Mask for sort column ID */
-#define ST_FLG_SRTCOL_SHIFT 16 /* Number of bits to shift masked result */
-
-#define ST_FLG_MASK (ST_FLG_AVERAGE|ST_FLG_ROOTCHILD|ST_FLG_DEF_NOEXPAND|\
- ST_FLG_SORT_TOP|ST_FLG_SORT_DESC|ST_FLG_SRTCOL_MASK)
-
-#define ST_SORT_COL_NAME 1 /* Sort nodes by node names */
-#define ST_SORT_COL_COUNT 2 /* Sort nodes by node count */
-#define ST_SORT_COL_AVG 3 /* Sort nodes by node average */
-#define ST_SORT_COL_MIN 4 /* Sort nodes by minimum node value */
-#define ST_SORT_COL_MAX 5 /* Sort nodes by maximum node value */
-#define ST_SORT_COL_BURSTRATE 6 /* Sort nodes by burst rate */
+#define ST_FLG_AVERAGE 0x10000000 /* Calculate overages for nodes, rather than totals */
+#define ST_FLG_ROOTCHILD 0x20000000 /* This node is a direct child of the root node */
+#define ST_FLG_DEF_NOEXPAND 0x01000000 /* This node should not be expanded by default */
+#define ST_FLG_SORT_DESC 0x00800000 /* When sorting, sort ascending instead of decending */
+#define ST_FLG_SORT_TOP 0x00400000 /* When sorting always keep these lines on of list */
+#define ST_FLG_SRTCOL_MASK 0x000F0000 /* Mask for sort column ID */
+#define ST_FLG_SRTCOL_SHIFT 16 /* Number of bits to shift masked result */
+
+#define ST_FLG_MASK (ST_FLG_AVERAGE|ST_FLG_ROOTCHILD|ST_FLG_DEF_NOEXPAND| \
+ ST_FLG_SORT_TOP|ST_FLG_SORT_DESC|ST_FLG_SRTCOL_MASK)
+
+#define ST_SORT_COL_NAME 1 /* Sort nodes by node names */
+#define ST_SORT_COL_COUNT 2 /* Sort nodes by node count */
+#define ST_SORT_COL_AVG 3 /* Sort nodes by node average */
+#define ST_SORT_COL_MIN 4 /* Sort nodes by minimum node value */
+#define ST_SORT_COL_MAX 5 /* Sort nodes by maximum node value */
+#define ST_SORT_COL_BURSTRATE 6 /* Sort nodes by burst rate */
/* obscure information regarding the stats_tree */
typedef struct _stats_tree stats_tree;
/* tap packet callback for stats_tree */
typedef int (*stat_tree_packet_cb)(stats_tree*,
- packet_info*,
- epan_dissect_t*,
- const void *);
+ packet_info *,
+ epan_dissect_t *,
+ const void *);
/* stats_tree initialization callback */
-typedef void (*stat_tree_init_cb)(stats_tree*);
+typedef void (*stat_tree_init_cb)(stats_tree *);
/* stats_tree cleanup callback */
-typedef void (*stat_tree_cleanup_cb)(stats_tree*);
+typedef void (*stat_tree_cleanup_cb)(stats_tree *);
/* registers a new stats tree with default group REGISTER_STAT_GROUP_UNSORTED
* abbr: protocol abbr
@@ -75,12 +75,12 @@ typedef void (*stat_tree_cleanup_cb)(stats_tree*);
* cleanup: cleanup callback
*/
WS_DLL_PUBLIC void stats_tree_register(const gchar *tapname,
- const gchar *abbr,
- const gchar *name,
- guint flags,
- stat_tree_packet_cb packet,
- stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup);
+ const gchar *abbr,
+ const gchar *name,
+ guint flags,
+ stat_tree_packet_cb packet,
+ stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup);
/* registers a new stats tree with default group REGISTER_STAT_GROUP_UNSORTED from a plugin
* abbr: protocol abbr
@@ -91,12 +91,12 @@ WS_DLL_PUBLIC void stats_tree_register(const gchar *tapname,
* cleanup: cleanup callback
*/
WS_DLL_PUBLIC void stats_tree_register_plugin(const gchar *tapname,
- const gchar *abbr,
- const gchar *name,
- guint flags,
- stat_tree_packet_cb packet,
- stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup);
+ const gchar *abbr,
+ const gchar *name,
+ guint flags,
+ stat_tree_packet_cb packet,
+ stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup);
/* registers a new stats tree
* abbr: protocol abbr
@@ -108,75 +108,75 @@ WS_DLL_PUBLIC void stats_tree_register_plugin(const gchar *tapname,
* stat_group: the group this stat belongs to
*/
WS_DLL_PUBLIC void stats_tree_register_with_group(const gchar *tapname,
- const gchar *abbr,
- const gchar *name,
- guint flags,
- stat_tree_packet_cb packet,
- stat_tree_init_cb init,
- stat_tree_cleanup_cb cleanup,
- register_stat_group_t stat_group);
+ const gchar *abbr,
+ const gchar *name,
+ guint flags,
+ stat_tree_packet_cb packet,
+ stat_tree_init_cb init,
+ stat_tree_cleanup_cb cleanup,
+ register_stat_group_t stat_group);
WS_DLL_PUBLIC int stats_tree_parent_id_by_name(stats_tree *st, const gchar *parent_name);
/* Creates a node in the tree (to be used in the in init_cb)
-* st: the stats_tree in which to create it
-* name: the name of the new node
-* parent_name: the name of the parent_node (NULL for root)
-* with_children: TRUE if this node will have "dynamically created" children
-*/
+ * st: the stats_tree in which to create it
+ * name: the name of the new node
+ * parent_name: the name of the parent_node (NULL for root)
+ * with_children: TRUE if this node will have "dynamically created" children
+ */
WS_DLL_PUBLIC int stats_tree_create_node(stats_tree *st,
- const gchar *name,
- int parent_id,
- gboolean with_children);
+ const gchar *name,
+ int parent_id,
+ gboolean with_children);
/* creates a node using its parent's tree name */
WS_DLL_PUBLIC int stats_tree_create_node_by_pname(stats_tree *st,
- const gchar *name,
- const gchar *parent_name,
- gboolean with_children);
+ const gchar *name,
+ const gchar *parent_name,
+ gboolean with_children);
/* creates a node in the tree, that will contain a ranges list.
- example:
- stats_tree_create_range_node(st,name,parent,
- "-99","100-199","200-299","300-399","400-", NULL);
+ example:
+ stats_tree_create_range_node(st,name,parent,
+ "-99","100-199","200-299","300-399","400-", NULL);
*/
WS_DLL_PUBLIC int stats_tree_create_range_node(stats_tree *st,
- const gchar *name,
- int parent_id,
- ...);
+ const gchar *name,
+ int parent_id,
+ ...);
WS_DLL_PUBLIC int stats_tree_create_range_node_string(stats_tree *st,
- const gchar *name,
- int parent_id,
- int num_str_ranges,
- gchar** str_ranges);
+ const gchar *name,
+ int parent_id,
+ int num_str_ranges,
+ gchar** str_ranges);
WS_DLL_PUBLIC int stats_tree_range_node_with_pname(stats_tree *st,
- const gchar *name,
- const gchar *parent_name,
- ...);
+ const gchar *name,
+ const gchar *parent_name,
+ ...);
/* increases by one the ranged node and the sub node to whose range the value belongs */
WS_DLL_PUBLIC int stats_tree_tick_range(stats_tree *st,
- const gchar *name,
- int parent_id,
- int value_in_range);
+ const gchar *name,
+ int parent_id,
+ int value_in_range);
#define stats_tree_tick_range_by_pname(st,name,parent_name,value_in_range) \
- stats_tree_tick_range((st),(name),stats_tree_parent_id_by_name((st),(parent_name),(value_in_range))
+ stats_tree_tick_range((st),(name),stats_tree_parent_id_by_name((st),(parent_name),(value_in_range))
/* */
WS_DLL_PUBLIC int stats_tree_create_pivot(stats_tree *st,
- const gchar *name,
- int parent_id);
+ const gchar *name,
+ int parent_id);
WS_DLL_PUBLIC int stats_tree_create_pivot_by_pname(stats_tree *st,
- const gchar *name,
- const gchar *parent_name);
+ const gchar *name,
+ const gchar *parent_name);
WS_DLL_PUBLIC int stats_tree_tick_pivot(stats_tree *st,
- int pivot_id,
- const gchar *pivot_value);
+ int pivot_id,
+ const gchar *pivot_value);
/*
* manipulates the value of the node whose name is given
@@ -185,31 +185,31 @@ WS_DLL_PUBLIC int stats_tree_tick_pivot(stats_tree *st,
* with_children=TRUE to indicate that the created node will be a parent
*/
typedef enum _manip_node_mode {
- MN_INCREASE,
- MN_SET,
- MN_AVERAGE,
- MN_AVERAGE_NOTICK,
- MN_SET_FLAGS,
- MN_CLEAR_FLAGS
+ MN_INCREASE,
+ MN_SET,
+ MN_AVERAGE,
+ MN_AVERAGE_NOTICK,
+ MN_SET_FLAGS,
+ MN_CLEAR_FLAGS
} manip_node_mode;
WS_DLL_PUBLIC int stats_tree_manip_node(manip_node_mode mode,
- stats_tree *st,
- const gchar *name,
- int parent_id,
- gboolean with_children,
- gint value);
+ stats_tree *st,
+ const gchar *name,
+ int parent_id,
+ gboolean with_children,
+ gint value);
-#define increase_stat_node(st,name,parent_id,with_children,value) \
-(stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),(value)))
+#define increase_stat_node(st,name,parent_id,with_children,value) \
+ (stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),(value)))
-#define tick_stat_node(st,name,parent_id,with_children) \
-(stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),1))
+#define tick_stat_node(st,name,parent_id,with_children) \
+ (stats_tree_manip_node(MN_INCREASE,(st),(name),(parent_id),(with_children),1))
-#define set_stat_node(st,name,parent_id,with_children,value) \
-(stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),value))
+#define set_stat_node(st,name,parent_id,with_children,value) \
+ (stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),value))
-#define zero_stat_node(st,name,parent_id,with_children) \
-(stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),0))
+#define zero_stat_node(st,name,parent_id,with_children) \
+ (stats_tree_manip_node(MN_SET,(st),(name),(parent_id),(with_children),0))
/*
* Add value to average calculation WITHOUT ticking node. Node MUST be ticked separately!
@@ -219,31 +219,31 @@ WS_DLL_PUBLIC int stats_tree_manip_node(manip_node_mode mode,
* least show a count instead of 0.
*/
#define avg_stat_node_add_value_notick(st,name,parent_id,with_children,value) \
-(stats_tree_manip_node(MN_AVERAGE_NOTICK,(st),(name),(parent_id),(with_children),value))
+ (stats_tree_manip_node(MN_AVERAGE_NOTICK,(st),(name),(parent_id),(with_children),value))
/* Tick node and add a new value to the average calculation for this stats node. */
-#define avg_stat_node_add_value(st,name,parent_id,with_children,value) \
-(stats_tree_manip_node(MN_AVERAGE,(st),(name),(parent_id),(with_children),value))
+#define avg_stat_node_add_value(st,name,parent_id,with_children,value) \
+ (stats_tree_manip_node(MN_AVERAGE,(st),(name),(parent_id),(with_children),value))
/* Set flags for this node. Node created if it does not yet exist. */
-#define stat_node_set_flags(st,name,parent_id,with_children,flags) \
-(stats_tree_manip_node(MN_SET_FLAGS,(st),(name),(parent_id),(with_children),flags))
+#define stat_node_set_flags(st,name,parent_id,with_children,flags) \
+ (stats_tree_manip_node(MN_SET_FLAGS,(st),(name),(parent_id),(with_children),flags))
/* Clear flags for this node. Node created if it does not yet exist. */
-#define stat_node_clear_flags(st,name,parent_id,with_children,flags) \
-(stats_tree_manip_node(MN_CLEAR_FLAGS,(st),(name),(parent_id),(with_children),flags))
-
-#endif /* __STATS_TREE_H */
+#define stat_node_clear_flags(st,name,parent_id,with_children,flags) \
+ (stats_tree_manip_node(MN_CLEAR_FLAGS,(st),(name),(parent_id),(with_children),flags))
/*
- * Editor modelines
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
*
- * Local Variables:
+ * Local variables:
* c-basic-offset: 4
* tab-width: 8
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
* End:
*
- * vi: ex: set shiftwidth=4 tabstop=8 noexpandtab:
- * :indentSize=4:tabSize=8:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
+
+#endif /* __STATS_TREE_H */
diff --git a/extcap.c b/extcap.c
index 1ec64fe055..4b718af06a 100644
--- a/extcap.c
+++ b/extcap.c
@@ -67,7 +67,7 @@ static GHashTable *ifaces = NULL;
/* Callback definition for extcap_foreach */
typedef gboolean (*extcap_cb_t)(const gchar *extcap, gchar *output, void *data,
- gchar **err_str);
+ gchar **err_str);
/* #define ARG_DEBUG */
#if ARG_DEBUG
@@ -77,413 +77,413 @@ static void extcap_debug_arguments ( extcap_arg *arg_iter );
static gboolean
extcap_if_exists(const char *ifname)
{
- if ( ifname != NULL )
- {
- if ( ifaces != NULL )
- {
- if ( g_hash_table_size(ifaces) > 0 )
- {
- if ( g_hash_table_lookup(ifaces, (const gchar *)ifname) != NULL )
- {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
+ if ( ifname != NULL )
+ {
+ if ( ifaces != NULL )
+ {
+ if ( g_hash_table_size(ifaces) > 0 )
+ {
+ if ( g_hash_table_lookup(ifaces, (const gchar *)ifname) != NULL )
+ {
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
}
static gboolean
extcap_if_exists_for_extcap(const char *ifname, const char *extcap)
{
- gchar * entry = NULL;
-
- if ( extcap_if_exists(ifname) )
- {
- if ( ( entry = (gchar *)g_hash_table_lookup(ifaces, (const gchar *)ifname) ) != NULL )
- {
- if ( strcmp(entry, extcap) == 0 )
- return TRUE;
- }
- }
-
- return FALSE;
+ gchar * entry = NULL;
+
+ if ( extcap_if_exists(ifname) )
+ {
+ if ( ( entry = (gchar *)g_hash_table_lookup(ifaces, (const gchar *)ifname) ) != NULL )
+ {
+ if ( strcmp(entry, extcap) == 0 )
+ return TRUE;
+ }
+ }
+
+ return FALSE;
}
static gchar *
extcap_if_executable(const char *ifname)
{
- if ( extcap_if_exists(ifname) )
- return (gchar *)g_hash_table_lookup(ifaces, (const gchar *)ifname);
+ if ( extcap_if_exists(ifname) )
+ return (gchar *)g_hash_table_lookup(ifaces, (const gchar *)ifname);
- return (gchar *)NULL;
+ return (gchar *)NULL;
}
static void
extcap_if_cleanup(void)
{
- if ( ifaces == NULL )
- ifaces = g_hash_table_new(g_str_hash, g_str_equal);
+ if ( ifaces == NULL )
+ ifaces = g_hash_table_new(g_str_hash, g_str_equal);
- g_hash_table_remove_all(ifaces);
+ g_hash_table_remove_all(ifaces);
}
static void
extcap_if_add(gchar *ifname, gchar *extcap)
{
- if ( g_hash_table_lookup(ifaces, ifname) == NULL )
- g_hash_table_insert(ifaces, ifname, extcap);
+ if ( g_hash_table_lookup(ifaces, ifname) == NULL )
+ g_hash_table_insert(ifaces, ifname, extcap);
}
static void extcap_foreach(gint argc, gchar **args, extcap_cb_t cb,
- void *cb_data, char **err_str, const char * ifname _U_) {
- const char *dirname = get_extcap_dir();
- GDir *dir;
- const gchar *file;
- gboolean keep_going;
- gchar **argv;
+ void *cb_data, char **err_str, const char * ifname _U_) {
+ const char *dirname = get_extcap_dir();
+ GDir *dir;
+ const gchar *file;
+ gboolean keep_going;
+ gchar **argv;
- keep_going = TRUE;
+ keep_going = TRUE;
- argv = (gchar **) g_malloc0(sizeof(gchar *) * (argc + 2));
+ argv = (gchar **) g_malloc0(sizeof(gchar *) * (argc + 2));
- if ((dir = g_dir_open(dirname, 0, NULL)) != NULL) {
+ if ((dir = g_dir_open(dirname, 0, NULL)) != NULL) {
#ifdef WIN32
- dirname = g_strescape(dirname,NULL);
+ dirname = g_strescape(dirname,NULL);
#endif
- while (keep_going && (file = g_dir_read_name(dir)) != NULL ) {
- GString *extcap_string = NULL;
- gchar *extcap = NULL;
- gchar *command_output = NULL;
- gboolean status = FALSE;
- gint i;
- gint exit_status = 0;
- GError *error = NULL;
-
- /* full path to extcap binary */
- extcap_string = g_string_new("");
+ while (keep_going && (file = g_dir_read_name(dir)) != NULL ) {
+ GString *extcap_string = NULL;
+ gchar *extcap = NULL;
+ gchar *command_output = NULL;
+ gboolean status = FALSE;
+ gint i;
+ gint exit_status = 0;
+ GError *error = NULL;
+
+ /* full path to extcap binary */
+ extcap_string = g_string_new("");
#ifdef WIN32
- g_string_printf(extcap_string, "%s\\\\%s",dirname,file);
- extcap = g_string_free(extcap_string, FALSE);
+ g_string_printf(extcap_string, "%s\\\\%s",dirname,file);
+ extcap = g_string_free(extcap_string, FALSE);
#else
- g_string_printf(extcap_string, "%s/%s", dirname, file);
- extcap = g_string_free(extcap_string, FALSE);
+ g_string_printf(extcap_string, "%s/%s", dirname, file);
+ extcap = g_string_free(extcap_string, FALSE);
#endif
- if ( extcap_if_exists(ifname) && !extcap_if_exists_for_extcap(ifname, extcap ) )
- continue;
+ if ( extcap_if_exists(ifname) && !extcap_if_exists_for_extcap(ifname, extcap ) )
+ continue;
- argv[0] = extcap;
- for (i = 0; i < argc; ++i)
- argv[i+1] = args[i];
- argv[argc+1] = NULL;
+ argv[0] = extcap;
+ for (i = 0; i < argc; ++i)
+ argv[i+1] = args[i];
+ argv[argc+1] = NULL;
- status = g_spawn_sync(dirname, argv, NULL,
- (GSpawnFlags) 0, NULL, NULL,
- &command_output, NULL, &exit_status, &error);
+ status = g_spawn_sync(dirname, argv, NULL,
+ (GSpawnFlags) 0, NULL, NULL,
+ &command_output, NULL, &exit_status, &error);
- if (status && exit_status == 0)
- keep_going = cb(extcap, command_output, cb_data, err_str);
+ if (status && exit_status == 0)
+ keep_going = cb(extcap, command_output, cb_data, err_str);
- g_free(extcap);
- g_free(command_output);
- }
+ g_free(extcap);
+ g_free(command_output);
+ }
- g_dir_close(dir);
- }
+ g_dir_close(dir);
+ }
- g_free(argv);
+ g_free(argv);
}
static gboolean dlt_cb(const gchar *extcap _U_, gchar *output, void *data,
- char **err_str) {
- extcap_token_sentence *tokens;
- extcap_dlt *dlts, *dlt_iter, *next;
- if_capabilities_t *caps;
- GList *linktype_list = NULL;
- data_link_info_t *data_link_info;
-
- tokens = extcap_tokenize_sentences(output);
- extcap_parse_dlts(tokens, &dlts);
-
- extcap_free_tokenized_sentence_list(tokens);
-
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap pipe %s ", extcap);
-
- /*
- * Allocate the interface capabilities structure.
- */
- caps = (if_capabilities_t *) g_malloc(sizeof *caps);
- caps->can_set_rfmon = FALSE;
-
- dlt_iter = dlts;
- while (dlt_iter != NULL ) {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- " DLT %d name=\"%s\" display=\"%s\" ", dlt_iter->number,
- dlt_iter->name, dlt_iter->display);
-
- data_link_info = g_new(data_link_info_t, 1);
- data_link_info->dlt = dlt_iter->number;
- data_link_info->name = g_strdup(dlt_iter->name);
- data_link_info->description = g_strdup(dlt_iter->display);
- linktype_list = g_list_append(linktype_list, data_link_info);
- dlt_iter = dlt_iter->next_dlt;
- }
-
- /* Check to see if we built a list */
- if (linktype_list != NULL && data != NULL) {
- caps->data_link_types = linktype_list;
- *(if_capabilities_t **) data = caps;
- } else {
- if (err_str) {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " returned no DLTs");
- *err_str = g_strdup("Extcap returned no DLTs");
- }
- g_free(caps);
- }
-
- dlt_iter = dlts;
- while (dlt_iter != NULL ) {
- next = dlt_iter->next_dlt;
- extcap_free_dlt(dlt_iter);
- dlt_iter = next;
- }
-
- return FALSE;
+ char **err_str) {
+ extcap_token_sentence *tokens;
+ extcap_dlt *dlts, *dlt_iter, *next;
+ if_capabilities_t *caps;
+ GList *linktype_list = NULL;
+ data_link_info_t *data_link_info;
+
+ tokens = extcap_tokenize_sentences(output);
+ extcap_parse_dlts(tokens, &dlts);
+
+ extcap_free_tokenized_sentence_list(tokens);
+
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap pipe %s ", extcap);
+
+ /*
+ * Allocate the interface capabilities structure.
+ */
+ caps = (if_capabilities_t *) g_malloc(sizeof *caps);
+ caps->can_set_rfmon = FALSE;
+
+ dlt_iter = dlts;
+ while (dlt_iter != NULL ) {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ " DLT %d name=\"%s\" display=\"%s\" ", dlt_iter->number,
+ dlt_iter->name, dlt_iter->display);
+
+ data_link_info = g_new(data_link_info_t, 1);
+ data_link_info->dlt = dlt_iter->number;
+ data_link_info->name = g_strdup(dlt_iter->name);
+ data_link_info->description = g_strdup(dlt_iter->display);
+ linktype_list = g_list_append(linktype_list, data_link_info);
+ dlt_iter = dlt_iter->next_dlt;
+ }
+
+ /* Check to see if we built a list */
+ if (linktype_list != NULL && data != NULL) {
+ caps->data_link_types = linktype_list;
+ *(if_capabilities_t **) data = caps;
+ } else {
+ if (err_str) {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " returned no DLTs");
+ *err_str = g_strdup("Extcap returned no DLTs");
+ }
+ g_free(caps);
+ }
+
+ dlt_iter = dlts;
+ while (dlt_iter != NULL ) {
+ next = dlt_iter->next_dlt;
+ extcap_free_dlt(dlt_iter);
+ dlt_iter = next;
+ }
+
+ return FALSE;
}
if_capabilities_t *
extcap_get_if_dlts(const gchar *ifname, char **err_str) {
- gchar *argv[3];
- gint i;
- if_capabilities_t *caps = NULL;
+ gchar *argv[3];
+ gint i;
+ if_capabilities_t *caps = NULL;
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " returned no DLTs");
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " returned no DLTs");
- if (ifname != NULL && err_str != NULL)
- *err_str = NULL;
+ if (ifname != NULL && err_str != NULL)
+ *err_str = NULL;
- if ( extcap_if_exists(ifname) )
- {
- argv[0] = g_strdup(EXTCAP_ARGUMENT_LIST_DLTS);
- argv[1] = g_strdup(EXTCAP_ARGUMENT_INTERFACE);
- argv[2] = g_strdup(ifname);
+ if ( extcap_if_exists(ifname) )
+ {
+ argv[0] = g_strdup(EXTCAP_ARGUMENT_LIST_DLTS);
+ argv[1] = g_strdup(EXTCAP_ARGUMENT_INTERFACE);
+ argv[2] = g_strdup(ifname);
- if (err_str)
- *err_str = NULL;
- extcap_foreach(3, argv, dlt_cb, &caps, err_str, ifname);
+ if (err_str)
+ *err_str = NULL;
+ extcap_foreach(3, argv, dlt_cb, &caps, err_str, ifname);
- for (i = 0; i < 3; ++i)
- g_free(argv[i]);
- }
+ for (i = 0; i < 3; ++i)
+ g_free(argv[i]);
+ }
- return caps;
+ return caps;
}
static gboolean interfaces_cb(const gchar *extcap, gchar *output, void *data,
- char **err_str _U_) {
- GList **il = (GList **) data;
- extcap_token_sentence *tokens;
- extcap_interface *interfaces, *int_iter; /*, *next; */
- if_info_t *if_info;
+ char **err_str _U_) {
+ GList **il = (GList **) data;
+ extcap_token_sentence *tokens;
+ extcap_interface *interfaces, *int_iter; /*, *next; */
+ if_info_t *if_info;
- tokens = extcap_tokenize_sentences(output);
- extcap_parse_interfaces(tokens, &interfaces);
+ tokens = extcap_tokenize_sentences(output);
+ extcap_parse_interfaces(tokens, &interfaces);
- extcap_free_tokenized_sentence_list(tokens);
+ extcap_free_tokenized_sentence_list(tokens);
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap pipe %s ", extcap);
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap pipe %s ", extcap);
- int_iter = interfaces;
- while (int_iter != NULL ) {
- if ( extcap_if_exists(int_iter->call) )
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_WARNING, "Extcap interface \"%s\" is already provided by \"%s\" ",
- int_iter->call, (gchar *)extcap_if_executable(int_iter->call) );
- int_iter = int_iter->next_interface;
- continue;
- }
+ int_iter = interfaces;
+ while (int_iter != NULL ) {
+ if ( extcap_if_exists(int_iter->call) )
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_WARNING, "Extcap interface \"%s\" is already provided by \"%s\" ",
+ int_iter->call, (gchar *)extcap_if_executable(int_iter->call) );
+ int_iter = int_iter->next_interface;
+ continue;
+ }
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " Interface [%s] \"%s\" ",
- int_iter->call, int_iter->display);
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, " Interface [%s] \"%s\" ",
+ int_iter->call, int_iter->display);
- if_info = g_new0(if_info_t, 1);
- if_info->name = g_strdup(int_iter->call);
- if_info->friendly_name = g_strdup(int_iter->display);
+ if_info = g_new0(if_info_t, 1);
+ if_info->name = g_strdup(int_iter->call);
+ if_info->friendly_name = g_strdup(int_iter->display);
- if_info->type = IF_EXTCAP;
+ if_info->type = IF_EXTCAP;
- if_info->extcap = g_strdup(extcap);
- *il = g_list_append(*il, if_info);
+ if_info->extcap = g_strdup(extcap);
+ *il = g_list_append(*il, if_info);
- extcap_if_add(g_strdup(int_iter->call), g_strdup(extcap) );
- int_iter = int_iter->next_interface;
- }
+ extcap_if_add(g_strdup(int_iter->call), g_strdup(extcap) );
+ int_iter = int_iter->next_interface;
+ }
- return TRUE;
+ return TRUE;
}
GList *
extcap_interface_list(char **err_str) {
- gchar *argv;
- /* gint i; */
- GList *ret = NULL;
+ gchar *argv;
+ /* gint i; */
+ GList *ret = NULL;
- if (err_str != NULL)
- *err_str = NULL;
+ if (err_str != NULL)
+ *err_str = NULL;
- extcap_if_cleanup();
+ extcap_if_cleanup();
- argv = g_strdup(EXTCAP_ARGUMENT_LIST_INTERFACES);
+ argv = g_strdup(EXTCAP_ARGUMENT_LIST_INTERFACES);
- if (err_str)
- *err_str = NULL;
- extcap_foreach(1, &argv, interfaces_cb, &ret, err_str, NULL);
+ if (err_str)
+ *err_str = NULL;
+ extcap_foreach(1, &argv, interfaces_cb, &ret, err_str, NULL);
- g_free(argv);
+ g_free(argv);
- return ret;
+ return ret;
}
static gboolean search_cb(const gchar *extcap _U_, gchar *output, void *data,
- char **err_str _U_) {
- extcap_token_sentence *tokens = NULL;
- GList *arguments = NULL;
- GList **il = (GList **) data;
+ char **err_str _U_) {
+ extcap_token_sentence *tokens = NULL;
+ GList *arguments = NULL;
+ GList **il = (GList **) data;
- tokens = extcap_tokenize_sentences(output);
- arguments = extcap_parse_args(tokens);
+ tokens = extcap_tokenize_sentences(output);
+ arguments = extcap_parse_args(tokens);
- extcap_free_tokenized_sentence_list(tokens);
+ extcap_free_tokenized_sentence_list(tokens);
#if ARG_DEBUG
- extcap_debug_arguments ( arguments );
+ extcap_debug_arguments ( arguments );
#endif
- *il = g_list_append(*il, arguments);
+ *il = g_list_append(*il, arguments);
- /* By returning false, extcap_foreach will break on first found */
- return TRUE;
+ /* By returning false, extcap_foreach will break on first found */
+ return TRUE;
}
GList *
extcap_get_if_configuration(const char * ifname) {
- gchar *argv[4];
- GList *ret = NULL;
- gchar **err_str = NULL;
+ gchar *argv[4];
+ GList *ret = NULL;
+ gchar **err_str = NULL;
- if ( extcap_if_exists(ifname) )
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap path %s",
- get_extcap_dir());
+ if ( extcap_if_exists(ifname) )
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Extcap path %s",
+ get_extcap_dir());
- if (err_str != NULL)
- *err_str = NULL;
+ if (err_str != NULL)
+ *err_str = NULL;
- argv[0] = g_strdup(EXTCAP_ARGUMENT_CONFIG);
- argv[1] = g_strdup(EXTCAP_ARGUMENT_INTERFACE);
- argv[2] = g_strdup(ifname);
- argv[3] = NULL;
+ argv[0] = g_strdup(EXTCAP_ARGUMENT_CONFIG);
+ argv[1] = g_strdup(EXTCAP_ARGUMENT_INTERFACE);
+ argv[2] = g_strdup(ifname);
+ argv[3] = NULL;
- extcap_foreach(4, argv, search_cb, &ret, err_str, ifname);
- }
+ extcap_foreach(4, argv, search_cb, &ret, err_str, ifname);
+ }
- return ret;
+ return ret;
}
void extcap_cleanup(capture_options * capture_opts) {
- interface_options interface_opts;
- guint icnt = 0;
+ interface_options interface_opts;
+ guint icnt = 0;
- for (icnt = 0; icnt < capture_opts->ifaces->len; icnt++) {
- interface_opts = g_array_index(capture_opts->ifaces, interface_options,
- icnt);
+ for (icnt = 0; icnt < capture_opts->ifaces->len; icnt++) {
+ interface_opts = g_array_index(capture_opts->ifaces, interface_options,
+ icnt);
- /* skip native interfaces */
- if (interface_opts.if_type != IF_EXTCAP)
- continue;
+ /* skip native interfaces */
+ if (interface_opts.if_type != IF_EXTCAP)
+ continue;
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- "Extcap [%s] - Cleaning up fifo: %s; PID: %d", interface_opts.name,
- interface_opts.extcap_fifo, interface_opts.extcap_pid);
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ "Extcap [%s] - Cleaning up fifo: %s; PID: %d", interface_opts.name,
+ interface_opts.extcap_fifo, interface_opts.extcap_pid);
#ifdef WIN32
- if (pipe_h)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- "Extcap [%s] - Closing pipe", interface_opts.name);
- FlushFileBuffers(pipe_h);
- DisconnectNamedPipe(pipe_h);
- CloseHandle(pipe_h);
- }
+ if (pipe_h)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ "Extcap [%s] - Closing pipe", interface_opts.name);
+ FlushFileBuffers(pipe_h);
+ DisconnectNamedPipe(pipe_h);
+ CloseHandle(pipe_h);
+ }
#else
- if (interface_opts.extcap_fifo != NULL && file_exists(interface_opts.extcap_fifo))
- {
- /* the fifo will not be freed here, but with the other capture_opts in capture_sync */
- ws_unlink(interface_opts.extcap_fifo);
- interface_opts.extcap_fifo = NULL;
- }
+ if (interface_opts.extcap_fifo != NULL && file_exists(interface_opts.extcap_fifo))
+ {
+ /* the fifo will not be freed here, but with the other capture_opts in capture_sync */
+ ws_unlink(interface_opts.extcap_fifo);
+ interface_opts.extcap_fifo = NULL;
+ }
#endif
- /* Maybe the client closed and removed fifo, but ws should check if
- * pid should be closed */
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- "Extcap [%s] - Closing spawned PID: %d", interface_opts.name,
- interface_opts.extcap_pid);
-
- if (interface_opts.extcap_child_watch > 0)
- {
- g_source_remove(interface_opts.extcap_child_watch);
- interface_opts.extcap_child_watch = 0;
- }
-
- if (interface_opts.extcap_pid != INVALID_EXTCAP_PID)
- {
+ /* Maybe the client closed and removed fifo, but ws should check if
+ * pid should be closed */
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ "Extcap [%s] - Closing spawned PID: %d", interface_opts.name,
+ interface_opts.extcap_pid);
+
+ if (interface_opts.extcap_child_watch > 0)
+ {
+ g_source_remove(interface_opts.extcap_child_watch);
+ interface_opts.extcap_child_watch = 0;
+ }
+
+ if (interface_opts.extcap_pid != INVALID_EXTCAP_PID)
+ {
#ifdef WIN32
- TerminateProcess(interface_opts.extcap_pid, 0);
+ TerminateProcess(interface_opts.extcap_pid, 0);
#endif
- g_spawn_close_pid(interface_opts.extcap_pid);
- interface_opts.extcap_pid = INVALID_EXTCAP_PID;
- }
-
- /* Make sure modified interface_opts is saved in capture_opts. */
- capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, icnt);
- g_array_insert_val(capture_opts->ifaces, icnt, interface_opts);
- }
+ g_spawn_close_pid(interface_opts.extcap_pid);
+ interface_opts.extcap_pid = INVALID_EXTCAP_PID;
+ }
+
+ /* Make sure modified interface_opts is saved in capture_opts. */
+ capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, icnt);
+ g_array_insert_val(capture_opts->ifaces, icnt, interface_opts);
+ }
}
static void
extcap_arg_cb(gpointer key, gpointer value, gpointer data) {
- GPtrArray *args = (GPtrArray *)data;
+ GPtrArray *args = (GPtrArray *)data;
- if ( key != NULL )
- {
- g_ptr_array_add(args, key);
+ if ( key != NULL )
+ {
+ g_ptr_array_add(args, key);
- if ( value != NULL )
- g_ptr_array_add(args, value);
- }
+ if ( value != NULL )
+ g_ptr_array_add(args, value);
+ }
}
static void extcap_child_watch_cb(GPid pid, gint status _U_, gpointer user_data)
{
- guint i;
- interface_options interface_opts;
- capture_options *capture_opts = (capture_options *)user_data;
-
- /* Close handle to child process. */
- g_spawn_close_pid(pid);
-
- /* Update extcap_pid in interface options structure. */
- for (i = 0; i < capture_opts->ifaces->len; i++)
- {
- interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
- if (interface_opts.extcap_pid == pid)
- {
- interface_opts.extcap_pid = INVALID_EXTCAP_PID;
- interface_opts.extcap_child_watch = 0;
- capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, i);
- g_array_insert_val(capture_opts->ifaces, i, interface_opts);
- break;
- }
- }
+ guint i;
+ interface_options interface_opts;
+ capture_options *capture_opts = (capture_options *)user_data;
+
+ /* Close handle to child process. */
+ g_spawn_close_pid(pid);
+
+ /* Update extcap_pid in interface options structure. */
+ for (i = 0; i < capture_opts->ifaces->len; i++)
+ {
+ interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
+ if (interface_opts.extcap_pid == pid)
+ {
+ interface_opts.extcap_pid = INVALID_EXTCAP_PID;
+ interface_opts.extcap_child_watch = 0;
+ capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, i);
+ g_array_insert_val(capture_opts->ifaces, i, interface_opts);
+ break;
+ }
+ }
}
/* call mkfifo for each extcap,
@@ -491,132 +491,132 @@ static void extcap_child_watch_cb(GPid pid, gint status _U_, gpointer user_data)
gboolean
extcaps_init_initerfaces(capture_options *capture_opts)
{
- guint i;
- interface_options interface_opts;
+ guint i;
+ interface_options interface_opts;
- for (i = 0; i < capture_opts->ifaces->len; i++)
- {
- GPtrArray *args = NULL;
- GPid pid = INVALID_EXTCAP_PID;
- gchar **tmp;
- int tmp_i;
+ for (i = 0; i < capture_opts->ifaces->len; i++)
+ {
+ GPtrArray *args = NULL;
+ GPid pid = INVALID_EXTCAP_PID;
+ gchar **tmp;
+ int tmp_i;
- interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
+ interface_opts = g_array_index(capture_opts->ifaces, interface_options, i);
- /* skip native interfaces */
- if (interface_opts.if_type != IF_EXTCAP )
- continue;
+ /* skip native interfaces */
+ if (interface_opts.if_type != IF_EXTCAP )
+ continue;
- /* create pipe for fifo */
- if ( ! extcap_create_pipe ( &interface_opts.extcap_fifo ) )
- return FALSE;
+ /* create pipe for fifo */
+ if ( ! extcap_create_pipe ( &interface_opts.extcap_fifo ) )
+ return FALSE;
- /* Create extcap call */
- args = g_ptr_array_new();
+ /* Create extcap call */
+ args = g_ptr_array_new();
#define add_arg(X) g_ptr_array_add(args, g_strdup(X))
- add_arg(interface_opts.extcap);
- add_arg(EXTCAP_ARGUMENT_RUN_CAPTURE);
- add_arg(EXTCAP_ARGUMENT_INTERFACE);
- add_arg(interface_opts.name);
- add_arg(EXTCAP_ARGUMENT_RUN_PIPE);
- add_arg(interface_opts.extcap_fifo);
- if (interface_opts.extcap_args != NULL)
- g_hash_table_foreach(interface_opts.extcap_args, extcap_arg_cb, args);
- add_arg(NULL);
+ add_arg(interface_opts.extcap);
+ add_arg(EXTCAP_ARGUMENT_RUN_CAPTURE);
+ add_arg(EXTCAP_ARGUMENT_INTERFACE);
+ add_arg(interface_opts.name);
+ add_arg(EXTCAP_ARGUMENT_RUN_PIPE);
+ add_arg(interface_opts.extcap_fifo);
+ if (interface_opts.extcap_args != NULL)
+ g_hash_table_foreach(interface_opts.extcap_args, extcap_arg_cb, args);
+ add_arg(NULL);
#undef add_arg
- /* Dump commandline parameters sent to extcap. */
- for (tmp = (gchar **)args->pdata, tmp_i = 0; *tmp && **tmp; ++tmp_i, ++tmp)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "argv[%d]: %s", tmp_i, *tmp);
- }
-
- /* Wireshark for windows crashes here sometimes *
- * Access violation reading location 0x... */
- g_spawn_async(NULL, (gchar **)args->pdata, NULL,
- (GSpawnFlags) G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL,
- &pid,NULL);
-
- g_ptr_array_foreach(args, (GFunc)g_free, NULL);
- g_ptr_array_free(args, TRUE);
- interface_opts.extcap_pid = pid;
- interface_opts.extcap_child_watch =
- g_child_watch_add(pid, extcap_child_watch_cb, (gpointer)capture_opts);
- capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, i);
- g_array_insert_val(capture_opts->ifaces, i, interface_opts);
+ /* Dump commandline parameters sent to extcap. */
+ for (tmp = (gchar **)args->pdata, tmp_i = 0; *tmp && **tmp; ++tmp_i, ++tmp)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "argv[%d]: %s", tmp_i, *tmp);
+ }
+
+ /* Wireshark for windows crashes here sometimes *
+ * Access violation reading location 0x... */
+ g_spawn_async(NULL, (gchar **)args->pdata, NULL,
+ (GSpawnFlags) G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL,
+ &pid,NULL);
+
+ g_ptr_array_foreach(args, (GFunc)g_free, NULL);
+ g_ptr_array_free(args, TRUE);
+ interface_opts.extcap_pid = pid;
+ interface_opts.extcap_child_watch =
+ g_child_watch_add(pid, extcap_child_watch_cb, (gpointer)capture_opts);
+ capture_opts->ifaces = g_array_remove_index(capture_opts->ifaces, i);
+ g_array_insert_val(capture_opts->ifaces, i, interface_opts);
#ifdef WIN32
- /* On Windows, wait for extcap to connect to named pipe.
- * Some extcaps will present UAC screen to user.
- * 30 second timeout should be reasonable timeout for extcap to
- * connect to named pipe (including user interaction).
- * Wait on multiple object in case of extcap termination
- * without opening pipe.
- *
- * Minimum supported version of Windows: XP / Server 2003.
- */
- if (pid != INVALID_EXTCAP_PID)
- {
- DWORD dw;
- HANDLE handles[2];
- OVERLAPPED ov;
- ov.Pointer = 0;
- ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-
- ConnectNamedPipe(pipe_h, &ov);
- handles[0] = ov.hEvent;
- handles[1] = pid;
-
- if (GetLastError() == ERROR_PIPE_CONNECTED)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap connected to pipe");
- }
- else
- {
- dw = WaitForMultipleObjects(2, handles, FALSE, 30000);
- if (dw == WAIT_OBJECT_0)
- {
- /* ConnectNamedPipe finished. */
- DWORD code;
-
- code = GetLastError();
- if (code == ERROR_IO_PENDING)
- {
- DWORD dummy;
- if (!GetOverlappedResult(ov.hEvent, &ov, &dummy, TRUE))
- {
- code = GetLastError();
- }
- else
- {
- code = ERROR_SUCCESS;
- }
- }
-
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "ConnectNamedPipe code: %d", code);
- }
- else if (dw == (WAIT_OBJECT_0 + 1))
- {
- /* extcap process terminated. */
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap terminated without connecting to pipe!");
- }
- else if (dw == WAIT_TIMEOUT)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap didn't connect to pipe within 30 seconds!");
- }
- else
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "WaitForMultipleObjects returned 0x%08X. Error %d", dw, GetLastError());
- }
- }
-
- CloseHandle(ov.hEvent);
- }
+ /* On Windows, wait for extcap to connect to named pipe.
+ * Some extcaps will present UAC screen to user.
+ * 30 second timeout should be reasonable timeout for extcap to
+ * connect to named pipe (including user interaction).
+ * Wait on multiple object in case of extcap termination
+ * without opening pipe.
+ *
+ * Minimum supported version of Windows: XP / Server 2003.
+ */
+ if (pid != INVALID_EXTCAP_PID)
+ {
+ DWORD dw;
+ HANDLE handles[2];
+ OVERLAPPED ov;
+ ov.Pointer = 0;
+ ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+ ConnectNamedPipe(pipe_h, &ov);
+ handles[0] = ov.hEvent;
+ handles[1] = pid;
+
+ if (GetLastError() == ERROR_PIPE_CONNECTED)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap connected to pipe");
+ }
+ else
+ {
+ dw = WaitForMultipleObjects(2, handles, FALSE, 30000);
+ if (dw == WAIT_OBJECT_0)
+ {
+ /* ConnectNamedPipe finished. */
+ DWORD code;
+
+ code = GetLastError();
+ if (code == ERROR_IO_PENDING)
+ {
+ DWORD dummy;
+ if (!GetOverlappedResult(ov.hEvent, &ov, &dummy, TRUE))
+ {
+ code = GetLastError();
+ }
+ else
+ {
+ code = ERROR_SUCCESS;
+ }
+ }
+
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "ConnectNamedPipe code: %d", code);
+ }
+ else if (dw == (WAIT_OBJECT_0 + 1))
+ {
+ /* extcap process terminated. */
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap terminated without connecting to pipe!");
+ }
+ else if (dw == WAIT_TIMEOUT)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "extcap didn't connect to pipe within 30 seconds!");
+ }
+ else
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "WaitForMultipleObjects returned 0x%08X. Error %d", dw, GetLastError());
+ }
+ }
+
+ CloseHandle(ov.hEvent);
+ }
#endif
- }
+ }
- return TRUE;
+ return TRUE;
}
#ifdef WIN32
@@ -624,136 +624,136 @@ extcaps_init_initerfaces(capture_options *capture_opts)
HANDLE
extcap_get_win32_handle()
{
- return pipe_h;
+ return pipe_h;
}
#endif
gboolean extcap_create_pipe(char ** fifo)
{
#ifdef WIN32
- gchar timestr[ 14+1 ];
- time_t current_time;
-
- gchar *pipename = NULL;
-
- SECURITY_ATTRIBUTES security;
- /* create pipename */
- current_time = time(NULL);
- strftime(timestr, sizeof(timestr), "%Y%m%d%H%M%S", localtime(&current_time));
- pipename = g_strconcat ( "\\\\.\\pipe\\", EXTCAP_PIPE_PREFIX, "_", timestr, NULL );
-
- /* Security struct to enable Inheritable HANDLE */
- memset(&security, 0, sizeof(SECURITY_ATTRIBUTES));
- security.nLength = sizeof(SECURITY_ATTRIBUTES);
- security.bInheritHandle = TRUE;
- security.lpSecurityDescriptor = NULL;
-
- /* create a namedPipe*/
- pipe_h = CreateNamedPipe(
- utf_8to16(pipename),
- PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
- PIPE_TYPE_MESSAGE| PIPE_READMODE_MESSAGE | PIPE_WAIT,
- 5, 65536, 65536,
- 300,
- &security);
-
- if (pipe_h == INVALID_HANDLE_VALUE)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,"\nError creating pipe => (%d)", GetLastError());
- return FALSE;
- }
- else
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,"\nWireshark Created pipe =>(%s)",pipename);
- *fifo = g_strdup(pipename);
- }
+ gchar timestr[ 14+1 ];
+ time_t current_time;
+
+ gchar *pipename = NULL;
+
+ SECURITY_ATTRIBUTES security;
+ /* create pipename */
+ current_time = time(NULL);
+ strftime(timestr, sizeof(timestr), "%Y%m%d%H%M%S", localtime(&current_time));
+ pipename = g_strconcat ( "\\\\.\\pipe\\", EXTCAP_PIPE_PREFIX, "_", timestr, NULL );
+
+ /* Security struct to enable Inheritable HANDLE */
+ memset(&security, 0, sizeof(SECURITY_ATTRIBUTES));
+ security.nLength = sizeof(SECURITY_ATTRIBUTES);
+ security.bInheritHandle = TRUE;
+ security.lpSecurityDescriptor = NULL;
+
+ /* create a namedPipe*/
+ pipe_h = CreateNamedPipe(
+ utf_8to16(pipename),
+ PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_TYPE_MESSAGE| PIPE_READMODE_MESSAGE | PIPE_WAIT,
+ 5, 65536, 65536,
+ 300,
+ &security);
+
+ if (pipe_h == INVALID_HANDLE_VALUE)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,"\nError creating pipe => (%d)", GetLastError());
+ return FALSE;
+ }
+ else
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,"\nWireshark Created pipe =>(%s)",pipename);
+ *fifo = g_strdup(pipename);
+ }
#else
- gchar *temp_name = NULL;
- int fd = 0;
+ gchar *temp_name = NULL;
+ int fd = 0;
- if ( ( fd = create_tempfile ( &temp_name, EXTCAP_PIPE_PREFIX ) ) == 0 )
- return FALSE;
+ if ( ( fd = create_tempfile ( &temp_name, EXTCAP_PIPE_PREFIX ) ) == 0 )
+ return FALSE;
- ws_close(fd);
+ ws_close(fd);
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- "Extcap - Creating fifo: %s", temp_name);
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ "Extcap - Creating fifo: %s", temp_name);
- if ( file_exists(temp_name) )
- ws_unlink(temp_name);
+ if ( file_exists(temp_name) )
+ ws_unlink(temp_name);
- if (mkfifo(temp_name, 0600) == 0)
- *fifo = g_strdup(temp_name);
+ if (mkfifo(temp_name, 0600) == 0)
+ *fifo = g_strdup(temp_name);
#endif
- return TRUE;
+ return TRUE;
}
#if ARG_DEBUG
void extcap_debug_arguments ( extcap_arg *arg_iter )
{
- extcap_value *v = NULL;
- GList *walker = NULL;
-
- printf("debug - parser dump\n");
- while (arg_iter != NULL) {
- printf("ARG %d call=%s display=\"%s\" type=", arg_iter->arg_num, arg_iter->call, arg_iter->display);
-
- switch (arg_iter->arg_type) {
- case EXTCAP_ARG_INTEGER:
- printf("int\n");
- break;
- case EXTCAP_ARG_UNSIGNED:
- printf("unsigned\n");
- break;
- case EXTCAP_ARG_LONG:
- printf("long\n");
- break;
- case EXTCAP_ARG_DOUBLE:
- printf("double\n");
- break;
- case EXTCAP_ARG_BOOLEAN:
- printf("boolean\n");
- break;
- case EXTCAP_ARG_MENU:
- printf("menu\n");
- break;
- case EXTCAP_ARG_RADIO:
- printf("radio\n");
- break;
- case EXTCAP_ARG_SELECTOR:
- printf("selctor\n");
- break;
- case EXTCAP_ARG_STRING:
- printf ( "string\n" );
- break;
- case EXTCAP_ARG_MULTICHECK:
- printf ( "unknown\n" );
- break;
- case EXTCAP_ARG_UNKNOWN:
- printf ( "unknown\n" );
- break;
- }
-
- if (arg_iter->range_start != NULL && arg_iter->range_end != NULL) {
- printf("\tRange: ");
- extcap_printf_complex(arg_iter->range_start);
- printf(" - ");
- extcap_printf_complex(arg_iter->range_end);
- printf("\n");
- }
-
- for ( walker = g_list_first ( arg_iter->value_list ); walker; walker = walker->next )
- {
- v = (extcap_value *)walker->data;
- if (v->is_default == TRUE)
- printf("*");
- printf("\tcall=\"%p\" display=\"%p\"\n", v->call, v->display);
- printf("\tcall=\"%s\" display=\"%s\"\n", v->call, v->display);
- }
-
- arg_iter = arg_iter->next_arg;
- }
+ extcap_value *v = NULL;
+ GList *walker = NULL;
+
+ printf("debug - parser dump\n");
+ while (arg_iter != NULL) {
+ printf("ARG %d call=%s display=\"%s\" type=", arg_iter->arg_num, arg_iter->call, arg_iter->display);
+
+ switch (arg_iter->arg_type) {
+ case EXTCAP_ARG_INTEGER:
+ printf("int\n");
+ break;
+ case EXTCAP_ARG_UNSIGNED:
+ printf("unsigned\n");
+ break;
+ case EXTCAP_ARG_LONG:
+ printf("long\n");
+ break;
+ case EXTCAP_ARG_DOUBLE:
+ printf("double\n");
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ printf("boolean\n");
+ break;
+ case EXTCAP_ARG_MENU:
+ printf("menu\n");
+ break;
+ case EXTCAP_ARG_RADIO:
+ printf("radio\n");
+ break;
+ case EXTCAP_ARG_SELECTOR:
+ printf("selctor\n");
+ break;
+ case EXTCAP_ARG_STRING:
+ printf ( "string\n" );
+ break;
+ case EXTCAP_ARG_MULTICHECK:
+ printf ( "unknown\n" );
+ break;
+ case EXTCAP_ARG_UNKNOWN:
+ printf ( "unknown\n" );
+ break;
+ }
+
+ if (arg_iter->range_start != NULL && arg_iter->range_end != NULL) {
+ printf("\tRange: ");
+ extcap_printf_complex(arg_iter->range_start);
+ printf(" - ");
+ extcap_printf_complex(arg_iter->range_end);
+ printf("\n");
+ }
+
+ for ( walker = g_list_first ( arg_iter->value_list ); walker; walker = walker->next )
+ {
+ v = (extcap_value *)walker->data;
+ if (v->is_default == TRUE)
+ printf("*");
+ printf("\tcall=\"%p\" display=\"%p\"\n", v->call, v->display);
+ printf("\tcall=\"%s\" display=\"%s\"\n", v->call, v->display);
+ }
+
+ arg_iter = arg_iter->next_arg;
+ }
}
#endif
#endif
@@ -763,10 +763,10 @@ void extcap_debug_arguments ( extcap_arg *arg_iter )
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/extcap.h b/extcap.h
index 675a817dbb..66c88664dd 100644
--- a/extcap.h
+++ b/extcap.h
@@ -37,13 +37,13 @@
#ifdef HAVE_EXTCAP
-#define EXTCAP_ARGUMENT_CONFIG "--extcap-config"
-#define EXTCAP_ARGUMENT_LIST_INTERFACES "--extcap-interfaces"
-#define EXTCAP_ARGUMENT_INTERFACE "--extcap-interface"
-#define EXTCAP_ARGUMENT_LIST_DLTS "--extcap-dlts"
+#define EXTCAP_ARGUMENT_CONFIG "--extcap-config"
+#define EXTCAP_ARGUMENT_LIST_INTERFACES "--extcap-interfaces"
+#define EXTCAP_ARGUMENT_INTERFACE "--extcap-interface"
+#define EXTCAP_ARGUMENT_LIST_DLTS "--extcap-dlts"
-#define EXTCAP_ARGUMENT_RUN_CAPTURE "--capture"
-#define EXTCAP_ARGUMENT_RUN_PIPE "--fifo"
+#define EXTCAP_ARGUMENT_RUN_CAPTURE "--capture"
+#define EXTCAP_ARGUMENT_RUN_PIPE "--fifo"
/* try to get if capabilities from extcap */
if_capabilities_t *
@@ -81,10 +81,10 @@ extcap_cleanup(capture_options * capture_opts _U_);
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/extcap_parser.c b/extcap_parser.c
index 3e239702e3..0dd85ac937 100644
--- a/extcap_parser.c
+++ b/extcap_parser.c
@@ -31,849 +31,849 @@
#include "extcap_parser.h"
void extcap_printf_complex(extcap_complex *comp) {
- gchar *ret = extcap_get_complex_as_string(comp);
- printf("%s", ret);
- g_free(ret);
+ gchar *ret = extcap_get_complex_as_string(comp);
+ printf("%s", ret);
+ g_free(ret);
}
gchar *extcap_get_complex_as_string(extcap_complex *comp) {
- /* Pick an arbitrary size that should be big enough */
- gchar *ret = g_new(gchar, 32);
-
- if (comp == NULL) {
- g_snprintf(ret, 32, "(null)");
- return ret;
- }
-
- switch (comp->complex_type) {
- case EXTCAP_ARG_INTEGER:
- g_snprintf(ret, 32, "%d", comp->complex_value.int_value);
- break;
- case EXTCAP_ARG_UNSIGNED:
- g_snprintf(ret, 32, "%u", comp->complex_value.uint_value);
- break;
- case EXTCAP_ARG_LONG:
- g_snprintf(ret, 32, "%ld", comp->complex_value.long_value);
- break;
- case EXTCAP_ARG_DOUBLE:
- g_snprintf(ret, 32, "%f", comp->complex_value.double_value);
- break;
- case EXTCAP_ARG_BOOLEAN:
- g_snprintf(ret, 32, "%s",
- comp->complex_value.bool_value ? "TRUE" : "FALSE");
- break;
- case EXTCAP_ARG_STRING:
- case EXTCAP_ARG_FILESELECT:
- g_free(ret);
- ret = g_strdup(comp->complex_value.string_value);
- break;
- default:
- /* Nulling out the return string */
- g_snprintf(ret, 32, " ");
- break;
- }
-
- return ret;
+ /* Pick an arbitrary size that should be big enough */
+ gchar *ret = g_new(gchar, 32);
+
+ if (comp == NULL) {
+ g_snprintf(ret, 32, "(null)");
+ return ret;
+ }
+
+ switch (comp->complex_type) {
+ case EXTCAP_ARG_INTEGER:
+ g_snprintf(ret, 32, "%d", comp->complex_value.int_value);
+ break;
+ case EXTCAP_ARG_UNSIGNED:
+ g_snprintf(ret, 32, "%u", comp->complex_value.uint_value);
+ break;
+ case EXTCAP_ARG_LONG:
+ g_snprintf(ret, 32, "%ld", comp->complex_value.long_value);
+ break;
+ case EXTCAP_ARG_DOUBLE:
+ g_snprintf(ret, 32, "%f", comp->complex_value.double_value);
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ g_snprintf(ret, 32, "%s",
+ comp->complex_value.bool_value ? "TRUE" : "FALSE");
+ break;
+ case EXTCAP_ARG_STRING:
+ case EXTCAP_ARG_FILESELECT:
+ g_free(ret);
+ ret = g_strdup(comp->complex_value.string_value);
+ break;
+ default:
+ /* Nulling out the return string */
+ g_snprintf(ret, 32, " ");
+ break;
+ }
+
+ return ret;
}
extcap_complex *extcap_parse_complex(extcap_arg_type complex_type,
- const gchar *data) {
- extcap_complex *rc = g_new(extcap_complex, 1);
- gboolean success = FALSE;
- long double exp_f;
-
- switch (complex_type) {
- case EXTCAP_ARG_INTEGER:
- if (sscanf(data, "%Lf", &exp_f) == 1) {
- rc->complex_value.int_value = (int) exp_f;
- success = TRUE;
- break;
- }
- break;
- case EXTCAP_ARG_UNSIGNED:
- if (sscanf(data, "%Lf", &exp_f) == 1) {
- rc->complex_value.uint_value = (unsigned int) exp_f;
- success = TRUE;
- break;
- }
- break;
- case EXTCAP_ARG_LONG:
- if (sscanf(data, "%Lf", &exp_f) == 1) {
- rc->complex_value.long_value = (long) exp_f;
- success = TRUE;
- break;
- }
- break;
- case EXTCAP_ARG_DOUBLE:
- if (sscanf(data, "%Lf", &exp_f) == 1) {
- rc->complex_value.double_value = (double) exp_f;
- success = TRUE;
- break;
- }
- break;
- case EXTCAP_ARG_BOOLEAN:
- case EXTCAP_ARG_BOOLFLAG:
- if (data[0] == 't' || data[0] == 'T' || data[0] == '1') {
- rc->complex_value.bool_value = 1;
- } else {
- rc->complex_value.bool_value = 0;
- }
- success = TRUE;
- break;
- case EXTCAP_ARG_STRING:
- case EXTCAP_ARG_FILESELECT:
- rc->complex_value.string_value = g_strdup(data);
- success = TRUE;
- break;
- default:
- break;
- }
-
- if (!success) {
- g_free(rc);
- return NULL ;
- }
-
- rc->complex_type = complex_type;
- rc->value_filled = TRUE;
-
- return rc;
+ const gchar *data) {
+ extcap_complex *rc = g_new(extcap_complex, 1);
+ gboolean success = FALSE;
+ long double exp_f;
+
+ switch (complex_type) {
+ case EXTCAP_ARG_INTEGER:
+ if (sscanf(data, "%Lf", &exp_f) == 1) {
+ rc->complex_value.int_value = (int) exp_f;
+ success = TRUE;
+ break;
+ }
+ break;
+ case EXTCAP_ARG_UNSIGNED:
+ if (sscanf(data, "%Lf", &exp_f) == 1) {
+ rc->complex_value.uint_value = (unsigned int) exp_f;
+ success = TRUE;
+ break;
+ }
+ break;
+ case EXTCAP_ARG_LONG:
+ if (sscanf(data, "%Lf", &exp_f) == 1) {
+ rc->complex_value.long_value = (long) exp_f;
+ success = TRUE;
+ break;
+ }
+ break;
+ case EXTCAP_ARG_DOUBLE:
+ if (sscanf(data, "%Lf", &exp_f) == 1) {
+ rc->complex_value.double_value = (double) exp_f;
+ success = TRUE;
+ break;
+ }
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ case EXTCAP_ARG_BOOLFLAG:
+ if (data[0] == 't' || data[0] == 'T' || data[0] == '1') {
+ rc->complex_value.bool_value = 1;
+ } else {
+ rc->complex_value.bool_value = 0;
+ }
+ success = TRUE;
+ break;
+ case EXTCAP_ARG_STRING:
+ case EXTCAP_ARG_FILESELECT:
+ rc->complex_value.string_value = g_strdup(data);
+ success = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ if (!success) {
+ g_free(rc);
+ return NULL ;
+ }
+
+ rc->complex_type = complex_type;
+ rc->value_filled = TRUE;
+
+ return rc;
}
gboolean extcap_compare_is_default(extcap_arg *element, extcap_complex *test) {
- gboolean result = FALSE;
-
- if (element->default_complex == NULL)
- return result;
-
- switch (element->arg_type) {
- case EXTCAP_ARG_INTEGER:
- if (extcap_complex_get_int(test)
- == extcap_complex_get_int(element->default_complex))
- result = TRUE;
- break;
- case EXTCAP_ARG_UNSIGNED:
- if (extcap_complex_get_uint(test)
- == extcap_complex_get_uint(element->default_complex))
- result = TRUE;
- break;
- case EXTCAP_ARG_LONG:
- if (extcap_complex_get_long(test)
- == extcap_complex_get_long(element->default_complex))
- result = TRUE;
- break;
- case EXTCAP_ARG_DOUBLE:
- if (extcap_complex_get_double(test)
- == extcap_complex_get_double(element->default_complex))
- result = TRUE;
- break;
- case EXTCAP_ARG_BOOLEAN:
- case EXTCAP_ARG_BOOLFLAG:
- if (extcap_complex_get_bool(test)
- == extcap_complex_get_bool(element->default_complex))
- result = TRUE;
- break;
- case EXTCAP_ARG_STRING:
- if (strcmp(extcap_complex_get_string(test),
- extcap_complex_get_string(element->default_complex)) == 0)
- result = TRUE;
- break;
-
- default:
- break;
- }
-
- return result;
+ gboolean result = FALSE;
+
+ if (element->default_complex == NULL)
+ return result;
+
+ switch (element->arg_type) {
+ case EXTCAP_ARG_INTEGER:
+ if (extcap_complex_get_int(test)
+ == extcap_complex_get_int(element->default_complex))
+ result = TRUE;
+ break;
+ case EXTCAP_ARG_UNSIGNED:
+ if (extcap_complex_get_uint(test)
+ == extcap_complex_get_uint(element->default_complex))
+ result = TRUE;
+ break;
+ case EXTCAP_ARG_LONG:
+ if (extcap_complex_get_long(test)
+ == extcap_complex_get_long(element->default_complex))
+ result = TRUE;
+ break;
+ case EXTCAP_ARG_DOUBLE:
+ if (extcap_complex_get_double(test)
+ == extcap_complex_get_double(element->default_complex))
+ result = TRUE;
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ case EXTCAP_ARG_BOOLFLAG:
+ if (extcap_complex_get_bool(test)
+ == extcap_complex_get_bool(element->default_complex))
+ result = TRUE;
+ break;
+ case EXTCAP_ARG_STRING:
+ if (strcmp(extcap_complex_get_string(test),
+ extcap_complex_get_string(element->default_complex)) == 0)
+ result = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ return result;
}
void extcap_free_complex(extcap_complex *comp) {
- if (comp->complex_type == EXTCAP_ARG_STRING
- || comp->complex_type == EXTCAP_ARG_FILESELECT)
- g_free(comp->complex_value.string_value);
+ if (comp->complex_type == EXTCAP_ARG_STRING
+ || comp->complex_type == EXTCAP_ARG_FILESELECT)
+ g_free(comp->complex_value.string_value);
- g_free(comp);
+ g_free(comp);
}
int extcap_complex_get_int(extcap_complex *comp) {
- if ( comp == NULL )
- return (int)0;
- return comp->complex_value.int_value;
+ if ( comp == NULL )
+ return (int)0;
+ return comp->complex_value.int_value;
}
unsigned int extcap_complex_get_uint(extcap_complex *comp) {
- if ( comp == NULL )
- return (unsigned int)0;
- return comp->complex_value.uint_value;
+ if ( comp == NULL )
+ return (unsigned int)0;
+ return comp->complex_value.uint_value;
}
long extcap_complex_get_long(extcap_complex *comp) {
- if ( comp == NULL )
- return (long)0;
- return comp->complex_value.long_value;
+ if ( comp == NULL )
+ return (long)0;
+ return comp->complex_value.long_value;
}
double extcap_complex_get_double(extcap_complex *comp) {
- if ( comp == NULL )
- return (double)0;
- return comp->complex_value.double_value;
+ if ( comp == NULL )
+ return (double)0;
+ return comp->complex_value.double_value;
}
gboolean extcap_complex_get_bool(extcap_complex *comp) {
- if ( comp == NULL )
- return FALSE;
- return comp->complex_value.bool_value;
+ if ( comp == NULL )
+ return FALSE;
+ return comp->complex_value.bool_value;
}
gchar *extcap_complex_get_string(extcap_complex *comp) {
- return comp->complex_value.string_value;
+ return comp->complex_value.string_value;
}
void extcap_free_tokenized_param(extcap_token_param *v) {
- if (v == NULL)
- return;
+ if (v == NULL)
+ return;
- if (v->arg != NULL)
- g_free(v->arg);
+ if (v->arg != NULL)
+ g_free(v->arg);
- if (v->value != NULL)
- g_free(v->value);
+ if (v->value != NULL)
+ g_free(v->value);
- g_free(v);
+ g_free(v);
}
void extcap_free_tokenized_sentence(extcap_token_sentence *s) {
- extcap_token_param *tv;
+ extcap_token_param *tv;
- if (s == NULL)
- return;
+ if (s == NULL)
+ return;
- if (s->sentence != NULL)
- g_free(s->sentence);
+ if (s->sentence != NULL)
+ g_free(s->sentence);
- while (s->param_list != NULL ) {
- tv = s->param_list;
- s->param_list = tv->next_token;
+ while (s->param_list != NULL ) {
+ tv = s->param_list;
+ s->param_list = tv->next_token;
- extcap_free_tokenized_param(tv);
- }
+ extcap_free_tokenized_param(tv);
+ }
}
void extcap_free_tokenized_sentence_list(extcap_token_sentence *f) {
- extcap_token_sentence *t;
+ extcap_token_sentence *t;
- while (f != NULL ) {
- t = f->next_sentence;
- extcap_free_tokenized_sentence(f);
- f = t;
- }
+ while (f != NULL ) {
+ t = f->next_sentence;
+ extcap_free_tokenized_sentence(f);
+ f = t;
+ }
}
extcap_token_sentence *extcap_tokenize_sentence(const gchar *s) {
- gchar *b, *e, *eq;
-
- extcap_token_param *tv = NULL;
-
- extcap_token_sentence *rs = g_new(extcap_token_sentence, 1);
-
- rs->sentence = NULL;
- rs->next_sentence = NULL;
- rs->param_list = NULL;
-
- if ((b = g_strstr_len(s, -1, " ")) == NULL) {
- extcap_free_tokenized_sentence(rs);
- return NULL ;
- }
-
- rs->sentence = g_strndup(s, b - s);
-
- if ((b = g_strstr_len(s, -1, "{")) == NULL) {
- /* printf("debug - tokenizer - sentence with no values\n"); */
- extcap_free_tokenized_sentence(rs);
- return NULL ;
- }
-
- while (b != NULL ) {
- if ((e = g_strstr_len(b, -1, "}")) == NULL) {
- /* printf("debug - tokenizer - invalid, missing }\n"); */
- extcap_free_tokenized_sentence(rs);
- return NULL ;
- }
-
- if ((eq = g_strstr_len(b, -1, "=")) == NULL) {
- /* printf("debug - tokenizer - invalid, missing =\n"); */
- extcap_free_tokenized_sentence(rs);
- return NULL ;
- }
-
- b++;
- e--;
-
- if (b >= eq || e <= eq) {
- /* printf("debug - tokenizer - invalid, missing arg or value in {}\n"); */
- extcap_free_tokenized_sentence(rs);
- return NULL ;
- }
-
- tv = g_new(extcap_token_param, 1);
- tv->arg = g_strndup(b, eq - b);
- tv->value = g_strndup(eq + 1, e - eq);
-
- if (g_ascii_strcasecmp(tv->arg, "number") == 0) {
- tv->param_type = EXTCAP_PARAM_ARGNUM;
- } else if (g_ascii_strcasecmp(tv->arg, "call") == 0) {
- tv->param_type = EXTCAP_PARAM_CALL;
- } else if (g_ascii_strcasecmp(tv->arg, "display") == 0) {
- tv->param_type = EXTCAP_PARAM_DISPLAY;
- } else if (g_ascii_strcasecmp(tv->arg, "type") == 0) {
- tv->param_type = EXTCAP_PARAM_TYPE;
- } else if (g_ascii_strcasecmp(tv->arg, "arg") == 0) {
- tv->param_type = EXTCAP_PARAM_ARG;
- } else if (g_ascii_strcasecmp(tv->arg, "default") == 0) {
- tv->param_type = EXTCAP_PARAM_DEFAULT;
- } else if (g_ascii_strcasecmp(tv->arg, "value") == 0) {
- tv->param_type = EXTCAP_PARAM_VALUE;
- } else if (g_ascii_strcasecmp(tv->arg, "range") == 0) {
- tv->param_type = EXTCAP_PARAM_RANGE;
- } else if (g_ascii_strcasecmp(tv->arg, "tooltip") == 0) {
- tv->param_type = EXTCAP_PARAM_TOOLTIP;
- } else if (g_ascii_strcasecmp(tv->arg, "mustexist") == 0) {
- tv->param_type = EXTCAP_PARAM_FILE_MUSTEXIST;
- } else if (g_ascii_strcasecmp(tv->arg, "name") == 0) {
- tv->param_type = EXTCAP_PARAM_NAME;
- } else if (g_ascii_strcasecmp(tv->arg, "enabled") == 0) {
- tv->param_type = EXTCAP_PARAM_ENABLED;
- } else if (g_ascii_strcasecmp(tv->arg, "parent") == 0) {
- tv->param_type = EXTCAP_PARAM_PARENT;
- } else {
- tv->param_type = EXTCAP_PARAM_UNKNOWN;
- }
-
- tv->next_token = rs->param_list;
- rs->param_list = tv;
-
- /* printf("debug - tokenizer - got '%s' = '%s'\n", tv->arg, tv->value); */
-
- b = e + 1;
- if ((size_t) (b - s) > strlen(s))
- break;
-
- b = g_strstr_len(b, -1, "{");
- }
-
- return rs;
+ gchar *b, *e, *eq;
+
+ extcap_token_param *tv = NULL;
+
+ extcap_token_sentence *rs = g_new(extcap_token_sentence, 1);
+
+ rs->sentence = NULL;
+ rs->next_sentence = NULL;
+ rs->param_list = NULL;
+
+ if ((b = g_strstr_len(s, -1, " ")) == NULL) {
+ extcap_free_tokenized_sentence(rs);
+ return NULL ;
+ }
+
+ rs->sentence = g_strndup(s, b - s);
+
+ if ((b = g_strstr_len(s, -1, "{")) == NULL) {
+ /* printf("debug - tokenizer - sentence with no values\n"); */
+ extcap_free_tokenized_sentence(rs);
+ return NULL ;
+ }
+
+ while (b != NULL ) {
+ if ((e = g_strstr_len(b, -1, "}")) == NULL) {
+ /* printf("debug - tokenizer - invalid, missing }\n"); */
+ extcap_free_tokenized_sentence(rs);
+ return NULL ;
+ }
+
+ if ((eq = g_strstr_len(b, -1, "=")) == NULL) {
+ /* printf("debug - tokenizer - invalid, missing =\n"); */
+ extcap_free_tokenized_sentence(rs);
+ return NULL ;
+ }
+
+ b++;
+ e--;
+
+ if (b >= eq || e <= eq) {
+ /* printf("debug - tokenizer - invalid, missing arg or value in {}\n"); */
+ extcap_free_tokenized_sentence(rs);
+ return NULL ;
+ }
+
+ tv = g_new(extcap_token_param, 1);
+ tv->arg = g_strndup(b, eq - b);
+ tv->value = g_strndup(eq + 1, e - eq);
+
+ if (g_ascii_strcasecmp(tv->arg, "number") == 0) {
+ tv->param_type = EXTCAP_PARAM_ARGNUM;
+ } else if (g_ascii_strcasecmp(tv->arg, "call") == 0) {
+ tv->param_type = EXTCAP_PARAM_CALL;
+ } else if (g_ascii_strcasecmp(tv->arg, "display") == 0) {
+ tv->param_type = EXTCAP_PARAM_DISPLAY;
+ } else if (g_ascii_strcasecmp(tv->arg, "type") == 0) {
+ tv->param_type = EXTCAP_PARAM_TYPE;
+ } else if (g_ascii_strcasecmp(tv->arg, "arg") == 0) {
+ tv->param_type = EXTCAP_PARAM_ARG;
+ } else if (g_ascii_strcasecmp(tv->arg, "default") == 0) {
+ tv->param_type = EXTCAP_PARAM_DEFAULT;
+ } else if (g_ascii_strcasecmp(tv->arg, "value") == 0) {
+ tv->param_type = EXTCAP_PARAM_VALUE;
+ } else if (g_ascii_strcasecmp(tv->arg, "range") == 0) {
+ tv->param_type = EXTCAP_PARAM_RANGE;
+ } else if (g_ascii_strcasecmp(tv->arg, "tooltip") == 0) {
+ tv->param_type = EXTCAP_PARAM_TOOLTIP;
+ } else if (g_ascii_strcasecmp(tv->arg, "mustexist") == 0) {
+ tv->param_type = EXTCAP_PARAM_FILE_MUSTEXIST;
+ } else if (g_ascii_strcasecmp(tv->arg, "name") == 0) {
+ tv->param_type = EXTCAP_PARAM_NAME;
+ } else if (g_ascii_strcasecmp(tv->arg, "enabled") == 0) {
+ tv->param_type = EXTCAP_PARAM_ENABLED;
+ } else if (g_ascii_strcasecmp(tv->arg, "parent") == 0) {
+ tv->param_type = EXTCAP_PARAM_PARENT;
+ } else {
+ tv->param_type = EXTCAP_PARAM_UNKNOWN;
+ }
+
+ tv->next_token = rs->param_list;
+ rs->param_list = tv;
+
+ /* printf("debug - tokenizer - got '%s' = '%s'\n", tv->arg, tv->value); */
+
+ b = e + 1;
+ if ((size_t) (b - s) > strlen(s))
+ break;
+
+ b = g_strstr_len(b, -1, "{");
+ }
+
+ return rs;
}
extcap_token_sentence *extcap_tokenize_sentences(const gchar *s) {
- extcap_token_sentence *first = NULL, *cur = NULL, *last = NULL;
+ extcap_token_sentence *first = NULL, *cur = NULL, *last = NULL;
- gchar **list, **list_iter;
+ gchar **list, **list_iter;
- list_iter = list = g_strsplit(s, "\n", 0);
+ list_iter = list = g_strsplit(s, "\n", 0);
- while (*list_iter != NULL ) {
- cur = extcap_tokenize_sentence(*list_iter);
+ while (*list_iter != NULL ) {
+ cur = extcap_tokenize_sentence(*list_iter);
- if (cur != NULL) {
- if (first == NULL) {
- first = cur;
- last = cur;
- } else {
- last->next_sentence = cur;
- last = cur;
- }
- }
+ if (cur != NULL) {
+ if (first == NULL) {
+ first = cur;
+ last = cur;
+ } else {
+ last->next_sentence = cur;
+ last = cur;
+ }
+ }
- list_iter++;
- }
+ list_iter++;
+ }
- g_strfreev(list);
+ g_strfreev(list);
- return first;
+ return first;
}
extcap_token_param *extcap_find_param_by_type(extcap_token_param *first,
- extcap_param_type t) {
- while (first != NULL ) {
- if (first->param_type == t) {
- return first;
- }
+ extcap_param_type t) {
+ while (first != NULL ) {
+ if (first->param_type == t) {
+ return first;
+ }
- first = first->next_token;
- }
+ first = first->next_token;
+ }
- return NULL ;
+ return NULL ;
}
void extcap_free_value(extcap_value *v) {
- if (v == NULL)
- return;
+ if (v == NULL)
+ return;
- if (v->call != NULL)
- g_free(v->call);
+ if (v->call != NULL)
+ g_free(v->call);
- if (v->display != NULL)
- g_free(v->display);
+ if (v->display != NULL)
+ g_free(v->display);
- g_free(v);
+ g_free(v);
}
extcap_interface *extcap_new_interface(void) {
- extcap_interface *r = g_new(extcap_interface, 1);
+ extcap_interface *r = g_new(extcap_interface, 1);
- r->call = r->display = NULL;
- r->next_interface = NULL;
+ r->call = r->display = NULL;
+ r->next_interface = NULL;
- return r;
+ return r;
}
void extcap_free_interface(extcap_interface *i) {
- if (i == NULL)
- return;
+ if (i == NULL)
+ return;
- if (i->call != NULL)
- g_free(i->call);
+ if (i->call != NULL)
+ g_free(i->call);
- if (i->display != NULL)
- g_free(i->display);
+ if (i->display != NULL)
+ g_free(i->display);
}
extcap_dlt *extcap_new_dlt(void) {
- extcap_dlt *r = g_new(extcap_dlt, 1);
+ extcap_dlt *r = g_new(extcap_dlt, 1);
- r->number = -1;
- r->name = r->display = NULL;
- r->next_dlt = NULL;
+ r->number = -1;
+ r->name = r->display = NULL;
+ r->next_dlt = NULL;
- return r;
+ return r;
}
void extcap_free_dlt(extcap_dlt *d) {
- if (d == NULL)
- return;
+ if (d == NULL)
+ return;
- if (d->name != NULL)
- g_free(d->name);
+ if (d->name != NULL)
+ g_free(d->name);
- if (d->display != NULL)
- g_free(d->display);
+ if (d->display != NULL)
+ g_free(d->display);
}
extcap_arg *extcap_new_arg(void) {
- extcap_arg *r = g_new(extcap_arg, 1);
+ extcap_arg *r = g_new(extcap_arg, 1);
- r->call = NULL;
- r->display = NULL;
- r->tooltip = NULL;
- r->arg_type = EXTCAP_ARG_UNKNOWN;
- r->range_start = NULL;
- r->range_end = NULL;
- r->default_complex = NULL;
- r->fileexists = FALSE;
+ r->call = NULL;
+ r->display = NULL;
+ r->tooltip = NULL;
+ r->arg_type = EXTCAP_ARG_UNKNOWN;
+ r->range_start = NULL;
+ r->range_end = NULL;
+ r->default_complex = NULL;
+ r->fileexists = FALSE;
- r->values = NULL;
- /*r->next_arg = NULL; */
+ r->values = NULL;
+ /*r->next_arg = NULL; */
- return r;
+ return r;
}
static void extcap_free_valuelist(gpointer data, gpointer user_data _U_) {
- extcap_free_value((extcap_value *) data);
+ extcap_free_value((extcap_value *) data);
}
void extcap_free_arg(extcap_arg *a) {
- if (a == NULL)
- return;
+ if (a == NULL)
+ return;
- if (a->call != NULL)
- g_free(a->call);
+ if (a->call != NULL)
+ g_free(a->call);
- if (a->display != NULL)
- g_free(a->display);
+ if (a->display != NULL)
+ g_free(a->display);
- if (a->tooltip != NULL)
- g_free(a->tooltip);
+ if (a->tooltip != NULL)
+ g_free(a->tooltip);
- if (a->range_start != NULL)
- extcap_free_complex(a->range_start);
+ if (a->range_start != NULL)
+ extcap_free_complex(a->range_start);
- if (a->range_end != NULL)
- extcap_free_complex(a->range_end);
+ if (a->range_end != NULL)
+ extcap_free_complex(a->range_end);
- if (a->default_complex != NULL)
- extcap_free_complex(a->default_complex);
+ if (a->default_complex != NULL)
+ extcap_free_complex(a->default_complex);
- g_list_foreach(a->values, (GFunc) extcap_free_valuelist, NULL);
+ g_list_foreach(a->values, (GFunc) extcap_free_valuelist, NULL);
}
static void extcap_free_arg_list_cb(gpointer listentry, gpointer data _U_) {
- if (listentry != NULL)
- extcap_free_arg((extcap_arg *) listentry);
+ if (listentry != NULL)
+ extcap_free_arg((extcap_arg *) listentry);
}
void extcap_free_arg_list(GList *a) {
- g_list_foreach(a, extcap_free_arg_list_cb, NULL);
- g_list_free(a);
+ g_list_foreach(a, extcap_free_arg_list_cb, NULL);
+ g_list_free(a);
}
static gint glist_find_numbered_arg(gconstpointer listelem, gconstpointer needle) {
- if (((const extcap_arg *) listelem)->arg_num == *((const int*) needle))
- return 0;
- return 1;
+ if (((const extcap_arg *) listelem)->arg_num == *((const int*) needle))
+ return 0;
+ return 1;
}
extcap_arg *extcap_parse_arg_sentence(GList * args, extcap_token_sentence *s) {
- extcap_token_param *v = NULL;
- extcap_arg *target_arg = NULL;
- extcap_value *value = NULL;
- GList * entry = NULL;
- int tint;
- extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
-
- if (s == NULL)
- return target_arg;
-
- if (g_ascii_strcasecmp(s->sentence, "arg") == 0) {
- sent = EXTCAP_SENTENCE_ARG;
- /* printf("ARG sentence\n"); */
- } else if (g_ascii_strcasecmp(s->sentence, "value") == 0) {
- sent = EXTCAP_SENTENCE_VALUE;
- /* printf("VALUE sentence\n"); */
- }
-
- if (sent == EXTCAP_SENTENCE_ARG) {
- target_arg = extcap_new_arg();
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARGNUM))
- == NULL) {
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if (sscanf(v->value, "%d", &(target_arg->arg_num)) != 1) {
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_CALL))
- == NULL) {
- extcap_free_arg(target_arg);
- return NULL ;
- }
- target_arg->call = g_strdup(v->value);
-
- /* No value only parameters allowed */
- if (strlen(target_arg->call) == 0) {
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
- == NULL) {
- extcap_free_arg(target_arg);
- return NULL ;
- }
- target_arg->display = g_strdup(v->value);
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_TOOLTIP))
- != NULL) {
- target_arg->tooltip = g_strdup(v->value);
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_FILE_MUSTEXIST))
- != NULL) {
- target_arg->fileexists = (v->value[0] == 't' || v->value[0] == 'T');
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_TYPE))
- == NULL) {
- /* printf("no type in ARG sentence\n"); */
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if (g_ascii_strcasecmp(v->value, "integer") == 0) {
- target_arg->arg_type = EXTCAP_ARG_INTEGER;
- } else if (g_ascii_strcasecmp(v->value, "unsigned") == 0) {
- target_arg->arg_type = EXTCAP_ARG_UNSIGNED;
- } else if (g_ascii_strcasecmp(v->value, "long") == 0) {
- target_arg->arg_type = EXTCAP_ARG_LONG;
- } else if (g_ascii_strcasecmp(v->value, "double") == 0) {
- target_arg->arg_type = EXTCAP_ARG_DOUBLE;
- } else if (g_ascii_strcasecmp(v->value, "boolean") == 0) {
- target_arg->arg_type = EXTCAP_ARG_BOOLEAN;
- } else if (g_ascii_strcasecmp(v->value, "boolflag") == 0) {
- target_arg->arg_type = EXTCAP_ARG_BOOLFLAG;
- } else if (g_ascii_strcasecmp(v->value, "menu") == 0) {
- target_arg->arg_type = EXTCAP_ARG_MENU;
- } else if (g_ascii_strcasecmp(v->value, "selector") == 0) {
- target_arg->arg_type = EXTCAP_ARG_SELECTOR;
- } else if (g_ascii_strcasecmp(v->value, "radio") == 0) {
- target_arg->arg_type = EXTCAP_ARG_RADIO;
- } else if (g_ascii_strcasecmp(v->value, "string") == 0) {
- target_arg->arg_type = EXTCAP_ARG_STRING;
- } else if (g_ascii_strcasecmp(v->value, "fileselect") == 0) {
- target_arg->arg_type = EXTCAP_ARG_FILESELECT;
- } else if (g_ascii_strcasecmp(v->value, "multicheck") == 0) {
- target_arg->arg_type = EXTCAP_ARG_MULTICHECK;
- } else {
- printf("invalid type %s in ARG sentence\n", v->value);
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_RANGE))
- != NULL) {
- gchar *cp = g_strstr_len(v->value, -1, ",");
-
- if (cp == NULL) {
- printf("invalid range, expected value,value got %s\n",
- v->value);
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if ((target_arg->range_start = extcap_parse_complex(
- target_arg->arg_type, v->value)) == NULL) {
- printf("invalid range, expected value,value got %s\n",
- v->value);
- extcap_free_arg(target_arg);
- return NULL ;
- }
-
- if ((target_arg->range_end = extcap_parse_complex(
- target_arg->arg_type, cp + 1)) == NULL) {
- printf("invalid range, expected value,value got %s\n",
- v->value);
- extcap_free_arg(target_arg);
- return NULL ;
- }
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DEFAULT))
- != NULL) {
- if ((target_arg->default_complex = extcap_parse_complex(
- target_arg->arg_type, v->value)) == NULL) {
- printf("invalid default, couldn't parse %s\n", v->value);
- }
- }
-
- } else if (sent == EXTCAP_SENTENCE_VALUE) {
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARG))
- == NULL) {
- printf("no arg in VALUE sentence\n");
- return NULL ;
- }
-
- if (sscanf(v->value, "%d", &tint) != 1) {
- printf("invalid arg in VALUE sentence\n");
- return NULL ;
- }
-
- ;
- if ((entry = g_list_find_custom(args, &tint, glist_find_numbered_arg))
- == NULL) {
- printf("couldn't find arg %d in list for VALUE sentence\n", tint);
- return NULL ;
- }
-
- value = g_new(extcap_value, 1);
- value->display = NULL;
- value->call = NULL;
- value->enabled = FALSE;
- value->is_default = FALSE;
- value->arg_num = tint;
- value->parent = NULL;
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_VALUE))
- == NULL) {
- /* printf("no value in VALUE sentence\n"); */
- extcap_free_value(value);
- return NULL ;
- }
- value->call = g_strdup(v->value);
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
- == NULL) {
- /* printf("no display in VALUE sentence\n"); */
- extcap_free_value(value);
- return NULL ;
- }
- value->display = g_strdup(v->value);
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_PARENT))
- != NULL) {
- value->parent = g_strdup(v->value);
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DEFAULT))
- != NULL) {
- /* printf("found default value\n"); */
- value->is_default = (v->value[0] == 't' || v->value[0] == 'T');
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ENABLED))
- != NULL) {
- value->enabled = (v->value[0] == 't' || v->value[0] == 'T');
- }
-
- ((extcap_arg*) entry->data)->values = g_list_append(
- ((extcap_arg*) entry->data)->values, value);
-
- return NULL ;
- }
-
- return target_arg;
+ extcap_token_param *v = NULL;
+ extcap_arg *target_arg = NULL;
+ extcap_value *value = NULL;
+ GList * entry = NULL;
+ int tint;
+ extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
+
+ if (s == NULL)
+ return target_arg;
+
+ if (g_ascii_strcasecmp(s->sentence, "arg") == 0) {
+ sent = EXTCAP_SENTENCE_ARG;
+ /* printf("ARG sentence\n"); */
+ } else if (g_ascii_strcasecmp(s->sentence, "value") == 0) {
+ sent = EXTCAP_SENTENCE_VALUE;
+ /* printf("VALUE sentence\n"); */
+ }
+
+ if (sent == EXTCAP_SENTENCE_ARG) {
+ target_arg = extcap_new_arg();
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARGNUM))
+ == NULL) {
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if (sscanf(v->value, "%d", &(target_arg->arg_num)) != 1) {
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_CALL))
+ == NULL) {
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+ target_arg->call = g_strdup(v->value);
+
+ /* No value only parameters allowed */
+ if (strlen(target_arg->call) == 0) {
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
+ == NULL) {
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+ target_arg->display = g_strdup(v->value);
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_TOOLTIP))
+ != NULL) {
+ target_arg->tooltip = g_strdup(v->value);
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_FILE_MUSTEXIST))
+ != NULL) {
+ target_arg->fileexists = (v->value[0] == 't' || v->value[0] == 'T');
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_TYPE))
+ == NULL) {
+ /* printf("no type in ARG sentence\n"); */
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if (g_ascii_strcasecmp(v->value, "integer") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_INTEGER;
+ } else if (g_ascii_strcasecmp(v->value, "unsigned") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_UNSIGNED;
+ } else if (g_ascii_strcasecmp(v->value, "long") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_LONG;
+ } else if (g_ascii_strcasecmp(v->value, "double") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_DOUBLE;
+ } else if (g_ascii_strcasecmp(v->value, "boolean") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_BOOLEAN;
+ } else if (g_ascii_strcasecmp(v->value, "boolflag") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_BOOLFLAG;
+ } else if (g_ascii_strcasecmp(v->value, "menu") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_MENU;
+ } else if (g_ascii_strcasecmp(v->value, "selector") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_SELECTOR;
+ } else if (g_ascii_strcasecmp(v->value, "radio") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_RADIO;
+ } else if (g_ascii_strcasecmp(v->value, "string") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_STRING;
+ } else if (g_ascii_strcasecmp(v->value, "fileselect") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_FILESELECT;
+ } else if (g_ascii_strcasecmp(v->value, "multicheck") == 0) {
+ target_arg->arg_type = EXTCAP_ARG_MULTICHECK;
+ } else {
+ printf("invalid type %s in ARG sentence\n", v->value);
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_RANGE))
+ != NULL) {
+ gchar *cp = g_strstr_len(v->value, -1, ",");
+
+ if (cp == NULL) {
+ printf("invalid range, expected value,value got %s\n",
+ v->value);
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if ((target_arg->range_start = extcap_parse_complex(
+ target_arg->arg_type, v->value)) == NULL) {
+ printf("invalid range, expected value,value got %s\n",
+ v->value);
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+
+ if ((target_arg->range_end = extcap_parse_complex(
+ target_arg->arg_type, cp + 1)) == NULL) {
+ printf("invalid range, expected value,value got %s\n",
+ v->value);
+ extcap_free_arg(target_arg);
+ return NULL ;
+ }
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DEFAULT))
+ != NULL) {
+ if ((target_arg->default_complex = extcap_parse_complex(
+ target_arg->arg_type, v->value)) == NULL) {
+ printf("invalid default, couldn't parse %s\n", v->value);
+ }
+ }
+
+ } else if (sent == EXTCAP_SENTENCE_VALUE) {
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARG))
+ == NULL) {
+ printf("no arg in VALUE sentence\n");
+ return NULL ;
+ }
+
+ if (sscanf(v->value, "%d", &tint) != 1) {
+ printf("invalid arg in VALUE sentence\n");
+ return NULL ;
+ }
+
+ ;
+ if ((entry = g_list_find_custom(args, &tint, glist_find_numbered_arg))
+ == NULL) {
+ printf("couldn't find arg %d in list for VALUE sentence\n", tint);
+ return NULL ;
+ }
+
+ value = g_new(extcap_value, 1);
+ value->display = NULL;
+ value->call = NULL;
+ value->enabled = FALSE;
+ value->is_default = FALSE;
+ value->arg_num = tint;
+ value->parent = NULL;
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_VALUE))
+ == NULL) {
+ /* printf("no value in VALUE sentence\n"); */
+ extcap_free_value(value);
+ return NULL ;
+ }
+ value->call = g_strdup(v->value);
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
+ == NULL) {
+ /* printf("no display in VALUE sentence\n"); */
+ extcap_free_value(value);
+ return NULL ;
+ }
+ value->display = g_strdup(v->value);
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_PARENT))
+ != NULL) {
+ value->parent = g_strdup(v->value);
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DEFAULT))
+ != NULL) {
+ /* printf("found default value\n"); */
+ value->is_default = (v->value[0] == 't' || v->value[0] == 'T');
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ENABLED))
+ != NULL) {
+ value->enabled = (v->value[0] == 't' || v->value[0] == 'T');
+ }
+
+ ((extcap_arg*) entry->data)->values = g_list_append(
+ ((extcap_arg*) entry->data)->values, value);
+
+ return NULL ;
+ }
+
+ return target_arg;
}
GList * extcap_parse_args(extcap_token_sentence *first_s) {
- GList * args = NULL;
+ GList * args = NULL;
- while (first_s) {
- extcap_arg *ra = NULL;
+ while (first_s) {
+ extcap_arg *ra = NULL;
- if ((ra = extcap_parse_arg_sentence(args, first_s)) != NULL)
- args = g_list_append(args, (gpointer) ra);
+ if ((ra = extcap_parse_arg_sentence(args, first_s)) != NULL)
+ args = g_list_append(args, (gpointer) ra);
- first_s = first_s->next_sentence;
- }
+ first_s = first_s->next_sentence;
+ }
- return args;
+ return args;
}
int extcap_parse_interface_sentence(extcap_token_sentence *s,
- extcap_interface **ri) {
- extcap_token_param *v = NULL;
- extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
+ extcap_interface **ri) {
+ extcap_token_param *v = NULL;
+ extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
- *ri = NULL;
+ *ri = NULL;
- if (s == NULL)
- return -1;
+ if (s == NULL)
+ return -1;
- if (g_ascii_strcasecmp(s->sentence, "interface") == 0) {
- sent = EXTCAP_SENTENCE_INTERFACE;
- /* printf("INTERFACE sentence\n"); */
- }
+ if (g_ascii_strcasecmp(s->sentence, "interface") == 0) {
+ sent = EXTCAP_SENTENCE_INTERFACE;
+ /* printf("INTERFACE sentence\n"); */
+ }
- if (sent == EXTCAP_SENTENCE_UNKNOWN)
- return -1;
+ if (sent == EXTCAP_SENTENCE_UNKNOWN)
+ return -1;
- *ri = extcap_new_interface();
+ *ri = extcap_new_interface();
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_VALUE))
- == NULL) {
- printf("No value in INTERFACE sentence\n");
- extcap_free_interface(*ri);
- return -1;
- }
- (*ri)->call = g_strdup(v->value);
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_VALUE))
+ == NULL) {
+ printf("No value in INTERFACE sentence\n");
+ extcap_free_interface(*ri);
+ return -1;
+ }
+ (*ri)->call = g_strdup(v->value);
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
- == NULL) {
- printf("No display in INTERFACE sentence\n");
- extcap_free_interface(*ri);
- return -1;
- }
- (*ri)->display = g_strdup(v->value);
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
+ == NULL) {
+ printf("No display in INTERFACE sentence\n");
+ extcap_free_interface(*ri);
+ return -1;
+ }
+ (*ri)->display = g_strdup(v->value);
- return 1;
+ return 1;
}
int extcap_parse_interfaces(extcap_token_sentence *first_s,
- extcap_interface **first_int) {
- extcap_interface *first_i = NULL, *last_i = NULL;
+ extcap_interface **first_int) {
+ extcap_interface *first_i = NULL, *last_i = NULL;
- while (first_s) {
- extcap_interface *ri;
+ while (first_s) {
+ extcap_interface *ri;
- if (extcap_parse_interface_sentence(first_s, &ri) >= 0 && ri != NULL) {
- if (first_i == NULL) {
- first_i = last_i = ri;
- } else {
- last_i->next_interface = ri;
- last_i = ri;
- }
- }
+ if (extcap_parse_interface_sentence(first_s, &ri) >= 0 && ri != NULL) {
+ if (first_i == NULL) {
+ first_i = last_i = ri;
+ } else {
+ last_i->next_interface = ri;
+ last_i = ri;
+ }
+ }
- first_s = first_s->next_sentence;
- }
+ first_s = first_s->next_sentence;
+ }
- *first_int = first_i;
+ *first_int = first_i;
- return 1;
+ return 1;
}
int extcap_parse_dlt_sentence(extcap_token_sentence *s, extcap_dlt **rd) {
- extcap_token_param *v = NULL;
- extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
-
- *rd = NULL;
-
- if (s == NULL)
- return -1;
-
- if (g_ascii_strcasecmp(s->sentence, "dlt") == 0) {
- sent = EXTCAP_SENTENCE_DLT;
- }
-
- if (sent == EXTCAP_SENTENCE_UNKNOWN)
- return -1;
-
- *rd = extcap_new_dlt();
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARGNUM))
- == NULL) {
- printf("No number in DLT sentence\n");
- extcap_free_dlt(*rd);
- return -1;
- }
- if (sscanf(v->value, "%d", &((*rd)->number)) != 1) {
- printf("Invalid number in DLT sentence\n");
- extcap_free_dlt(*rd);
- return -1;
- }
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_NAME))
- == NULL) {
- printf("No name in DLT sentence\n");
- extcap_free_dlt(*rd);
- return -1;
- }
- (*rd)->name = g_strdup(v->value);
-
- if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
- == NULL) {
- printf("No display in DLT sentence\n");
- extcap_free_dlt(*rd);
- return -1;
- }
- (*rd)->display = g_strdup(v->value);
-
- return 1;
+ extcap_token_param *v = NULL;
+ extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
+
+ *rd = NULL;
+
+ if (s == NULL)
+ return -1;
+
+ if (g_ascii_strcasecmp(s->sentence, "dlt") == 0) {
+ sent = EXTCAP_SENTENCE_DLT;
+ }
+
+ if (sent == EXTCAP_SENTENCE_UNKNOWN)
+ return -1;
+
+ *rd = extcap_new_dlt();
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_ARGNUM))
+ == NULL) {
+ printf("No number in DLT sentence\n");
+ extcap_free_dlt(*rd);
+ return -1;
+ }
+ if (sscanf(v->value, "%d", &((*rd)->number)) != 1) {
+ printf("Invalid number in DLT sentence\n");
+ extcap_free_dlt(*rd);
+ return -1;
+ }
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_NAME))
+ == NULL) {
+ printf("No name in DLT sentence\n");
+ extcap_free_dlt(*rd);
+ return -1;
+ }
+ (*rd)->name = g_strdup(v->value);
+
+ if ((v = extcap_find_param_by_type(s->param_list, EXTCAP_PARAM_DISPLAY))
+ == NULL) {
+ printf("No display in DLT sentence\n");
+ extcap_free_dlt(*rd);
+ return -1;
+ }
+ (*rd)->display = g_strdup(v->value);
+
+ return 1;
}
int extcap_parse_dlts(extcap_token_sentence *first_s, extcap_dlt **first_dlt) {
- extcap_dlt *first_d = NULL, *last_d = NULL;
+ extcap_dlt *first_d = NULL, *last_d = NULL;
- while (first_s) {
- extcap_dlt *rd;
+ while (first_s) {
+ extcap_dlt *rd;
- if (extcap_parse_dlt_sentence(first_s, &rd) >= 0 && rd != NULL) {
- if (first_d == NULL) {
- first_d = last_d = rd;
- } else {
- last_d->next_dlt = rd;
- last_d = rd;
- }
- }
+ if (extcap_parse_dlt_sentence(first_s, &rd) >= 0 && rd != NULL) {
+ if (first_d == NULL) {
+ first_d = last_d = rd;
+ } else {
+ last_d->next_dlt = rd;
+ last_d = rd;
+ }
+ }
- first_s = first_s->next_sentence;
- }
+ first_s = first_s->next_sentence;
+ }
- *first_dlt = first_d;
+ *first_dlt = first_d;
- return 1;
+ return 1;
}
/*
@@ -881,10 +881,10 @@ int extcap_parse_dlts(extcap_token_sentence *first_s, extcap_dlt **first_dlt) {
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/extcap_parser.h b/extcap_parser.h
index 4076dec670..feb7f11c2b 100644
--- a/extcap_parser.h
+++ b/extcap_parser.h
@@ -27,116 +27,116 @@
#include <string.h>
typedef enum {
- EXTCAP_SENTENCE_UNKNOWN,
- EXTCAP_SENTENCE_ARG,
- EXTCAP_SENTENCE_VALUE,
- EXTCAP_SENTENCE_FLAG,
- EXTCAP_SENTENCE_INTERFACE,
- EXTCAP_SENTENCE_DLT
+ EXTCAP_SENTENCE_UNKNOWN,
+ EXTCAP_SENTENCE_ARG,
+ EXTCAP_SENTENCE_VALUE,
+ EXTCAP_SENTENCE_FLAG,
+ EXTCAP_SENTENCE_INTERFACE,
+ EXTCAP_SENTENCE_DLT
} extcap_sentence_type;
typedef enum {
- /* Simple types */
- EXTCAP_ARG_UNKNOWN,
- EXTCAP_ARG_INTEGER,
- EXTCAP_ARG_UNSIGNED,
- EXTCAP_ARG_LONG,
- EXTCAP_ARG_DOUBLE,
- EXTCAP_ARG_BOOLEAN,
- EXTCAP_ARG_BOOLFLAG,
- EXTCAP_ARG_STRING,
- /* Complex GUI types which are populated with value sentences */
- EXTCAP_ARG_MENU,
- EXTCAP_ARG_SELECTOR,
- EXTCAP_ARG_RADIO,
- EXTCAP_ARG_MULTICHECK,
- EXTCAP_ARG_FILESELECT
+ /* Simple types */
+ EXTCAP_ARG_UNKNOWN,
+ EXTCAP_ARG_INTEGER,
+ EXTCAP_ARG_UNSIGNED,
+ EXTCAP_ARG_LONG,
+ EXTCAP_ARG_DOUBLE,
+ EXTCAP_ARG_BOOLEAN,
+ EXTCAP_ARG_BOOLFLAG,
+ EXTCAP_ARG_STRING,
+ /* Complex GUI types which are populated with value sentences */
+ EXTCAP_ARG_MENU,
+ EXTCAP_ARG_SELECTOR,
+ EXTCAP_ARG_RADIO,
+ EXTCAP_ARG_MULTICHECK,
+ EXTCAP_ARG_FILESELECT
} extcap_arg_type;
typedef enum {
- /* value types */
- EXTCAP_PARAM_UNKNOWN,
- EXTCAP_PARAM_ARGNUM,
- EXTCAP_PARAM_CALL,
- EXTCAP_PARAM_DISPLAY,
- EXTCAP_PARAM_TYPE,
- EXTCAP_PARAM_ARG,
- EXTCAP_PARAM_DEFAULT,
- EXTCAP_PARAM_VALUE,
- EXTCAP_PARAM_RANGE,
- EXTCAP_PARAM_TOOLTIP,
- EXTCAP_PARAM_NAME,
- EXTCAP_PARAM_ENABLED,
- EXTCAP_PARAM_FILE_MUSTEXIST,
- EXTCAP_PARAM_PARENT
+ /* value types */
+ EXTCAP_PARAM_UNKNOWN,
+ EXTCAP_PARAM_ARGNUM,
+ EXTCAP_PARAM_CALL,
+ EXTCAP_PARAM_DISPLAY,
+ EXTCAP_PARAM_TYPE,
+ EXTCAP_PARAM_ARG,
+ EXTCAP_PARAM_DEFAULT,
+ EXTCAP_PARAM_VALUE,
+ EXTCAP_PARAM_RANGE,
+ EXTCAP_PARAM_TOOLTIP,
+ EXTCAP_PARAM_NAME,
+ EXTCAP_PARAM_ENABLED,
+ EXTCAP_PARAM_FILE_MUSTEXIST,
+ EXTCAP_PARAM_PARENT
} extcap_param_type;
/* Values for a given sentence; values are all stored as a call
* and a value string, or a valid range, so we only need to store
* those and repeat them */
typedef struct _extcap_value {
- int arg_num;
+ int arg_num;
- gchar *call;
- gchar *display;
- gboolean enabled;
- gboolean is_default;
- gchar *parent;
+ gchar *call;
+ gchar *display;
+ gboolean enabled;
+ gboolean is_default;
+ gchar *parent;
} extcap_value;
/* Complex-ish struct for storing complex values */
typedef struct _extcap_complex {
- extcap_arg_type complex_type;
- union {
- int int_value;
- unsigned int uint_value;
- long long_value;
- double double_value;
- gboolean bool_value;
- gchar *string_value;
- } complex_value;
- gboolean value_filled;
+ extcap_arg_type complex_type;
+ union {
+ int int_value;
+ unsigned int uint_value;
+ long long_value;
+ double double_value;
+ gboolean bool_value;
+ gchar *string_value;
+ } complex_value;
+ gboolean value_filled;
} extcap_complex;
/* An argument sentence and accompanying options */
typedef struct _extcap_arg {
- int arg_num;
+ int arg_num;
- gchar *call;
- gchar *display;
- gchar *tooltip;
- gboolean fileexists;
+ gchar *call;
+ gchar *display;
+ gchar *tooltip;
+ gboolean fileexists;
- extcap_arg_type arg_type;
+ extcap_arg_type arg_type;
- extcap_complex *range_start;
- extcap_complex *range_end;
- extcap_complex *default_complex;
+ extcap_complex *range_start;
+ extcap_complex *range_end;
+ extcap_complex *default_complex;
- GList * values;
+ GList * values;
} extcap_arg;
typedef struct _extcap_if {
- gchar * extcap_path;
- GList * interfaces;
+ gchar * extcap_path;
+ GList * interfaces;
} extcap_if;
typedef struct _extcap_interface {
- gchar *call;
- gchar *display;
+ gchar *call;
+ gchar *display;
- struct _extcap_interface *next_interface;
+ struct _extcap_interface *next_interface;
} extcap_interface;
extcap_interface *extcap_new_interface(void);
void extcap_free_interface(extcap_interface *interface);
typedef struct _extcap_dlt {
- gint number;
- gchar *name;
- gchar *display;
+ gint number;
+ gchar *name;
+ gchar *display;
- struct _extcap_dlt *next_dlt;
+ struct _extcap_dlt *next_dlt;
} extcap_dlt;
extcap_dlt *extcap_new_dlt(void);
@@ -144,25 +144,25 @@ void extcap_free_dlt(extcap_dlt *dlt);
/* Parser internals */
typedef struct _extcap_token_param {
- gchar *arg;
- gchar *value;
+ gchar *arg;
+ gchar *value;
- extcap_param_type param_type;
+ extcap_param_type param_type;
- struct _extcap_token_param *next_token;
+ struct _extcap_token_param *next_token;
} extcap_token_param;
typedef struct _extcap_token_sentence {
- gchar *sentence;
+ gchar *sentence;
- extcap_token_param *param_list;
+ extcap_token_param *param_list;
- struct _extcap_token_sentence *next_sentence;
+ struct _extcap_token_sentence *next_sentence;
} extcap_token_sentence;
/* Parse a string into a complex type */
extcap_complex *extcap_parse_complex(extcap_arg_type complex_type,
- const gchar *data);
+ const gchar *data);
/* Free a complex */
void extcap_free_complex(extcap_complex *comp);
@@ -201,7 +201,7 @@ extcap_arg *extcap_find_numbered_arg(extcap_arg *first, int number);
/* Find the first occurrence in a parameter list of a parameter of the given type */
extcap_token_param *extcap_find_param_by_type(extcap_token_param *first,
- extcap_param_type t);
+ extcap_param_type t);
void extcap_free_value(extcap_value *v);
@@ -227,11 +227,11 @@ GList * extcap_parse_args(extcap_token_sentence *first_s);
* Parse a tokenized set of sentences and validate, looking for interface definitions.
*/
int extcap_parse_interface_sentence(extcap_token_sentence *s,
- extcap_interface **ri);
+ extcap_interface **ri);
/* Parse all sentences for interfaces */
int extcap_parse_interfaces(extcap_token_sentence *first_s,
- extcap_interface **first_int);
+ extcap_interface **first_int);
/* Parse a tokenized set of sentences and validate, looking for DLT definitions */
int extcap_parse_dlt_sentence(extcap_token_sentence *s, extcap_dlt **ri);
@@ -246,10 +246,10 @@ int extcap_parse_dlts(extcap_token_sentence *first_s, extcap_dlt **first_dlt);
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/ui/gtk/extcap_gtk.c b/ui/gtk/extcap_gtk.c
index e3d63c9862..fcde999d56 100644
--- a/ui/gtk/extcap_gtk.c
+++ b/ui/gtk/extcap_gtk.c
@@ -37,863 +37,863 @@
static gboolean extcap_gtk_count_tree_elements(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
- int *ptr_count = (int*)data;
- gboolean multi_enabled;
- (void)path;
+ int *ptr_count = (int*)data;
+ gboolean multi_enabled;
+ (void)path;
- g_assert(ptr_count != NULL);
+ g_assert(ptr_count != NULL);
- gtk_tree_model_get(model, iter,
- EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, -1);
+ gtk_tree_model_get(model, iter,
+ EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, -1);
- if (multi_enabled)
- {
- ++(*ptr_count);
- }
+ if (multi_enabled)
+ {
+ ++(*ptr_count);
+ }
- return FALSE; /* Continue iteration. */
+ return FALSE; /* Continue iteration. */
}
typedef struct _extcap_gtk_multi_fill_cb_data
{
- gchar **list;
- int num;
- int max;
+ gchar **list;
+ int num;
+ int max;
} extcap_gtk_multi_fill_cb_data;
static gboolean extcap_gtk_fill_multi_list(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
- extcap_gtk_multi_fill_cb_data *ptr_data = (extcap_gtk_multi_fill_cb_data*)data;
- gboolean multi_enabled;
- extcap_value *value;
- (void)path;
+ extcap_gtk_multi_fill_cb_data *ptr_data = (extcap_gtk_multi_fill_cb_data*)data;
+ gboolean multi_enabled;
+ extcap_value *value;
+ (void)path;
- g_assert(ptr_data != NULL);
+ g_assert(ptr_data != NULL);
- gtk_tree_model_get(model, iter,
- EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled,
- EXTCAP_GTK_MULTI_COL_VALUE, &value, -1);
+ gtk_tree_model_get(model, iter,
+ EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled,
+ EXTCAP_GTK_MULTI_COL_VALUE, &value, -1);
- if (multi_enabled)
- {
- g_assert(ptr_data->num < ptr_data->max);
+ if (multi_enabled)
+ {
+ g_assert(ptr_data->num < ptr_data->max);
- if (ptr_data->num < ptr_data->max)
- {
- ptr_data->list[ptr_data->num] = g_strdup(value->call);
- ptr_data->num++;
- }
- }
+ if (ptr_data->num < ptr_data->max)
+ {
+ ptr_data->list[ptr_data->num] = g_strdup(value->call);
+ ptr_data->num++;
+ }
+ }
- return FALSE; /* Continue iteration. */
+ return FALSE; /* Continue iteration. */
}
typedef struct _extcap_gtk_multi_find_cb_data
{
- gchar *parent;
- GtkTreeIter *parent_iter;
+ gchar *parent;
+ GtkTreeIter *parent_iter;
} extcap_gtk_multi_find_cb_data;
static gboolean extcap_gtk_find_parent_in_multi_list(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
- extcap_gtk_multi_find_cb_data *ptr_data = (extcap_gtk_multi_find_cb_data*)data;
- extcap_value *value;
- (void)path;
+ extcap_gtk_multi_find_cb_data *ptr_data = (extcap_gtk_multi_find_cb_data*)data;
+ extcap_value *value;
+ (void)path;
- g_assert(ptr_data != NULL);
+ g_assert(ptr_data != NULL);
- gtk_tree_model_get(model, iter,
- EXTCAP_GTK_MULTI_COL_VALUE, &value, -1);
+ gtk_tree_model_get(model, iter,
+ EXTCAP_GTK_MULTI_COL_VALUE, &value, -1);
- if (0 == g_strcmp0(ptr_data->parent, value->call))
- {
- ptr_data->parent_iter = gtk_tree_iter_copy(iter);
- return TRUE; /* Stop iteration. */
- }
+ if (0 == g_strcmp0(ptr_data->parent, value->call))
+ {
+ ptr_data->parent_iter = gtk_tree_iter_copy(iter);
+ return TRUE; /* Stop iteration. */
+ }
- return FALSE; /* Continue iteration. */
+ return FALSE; /* Continue iteration. */
}
GHashTable *extcap_gtk_get_state(GtkWidget *widget) {
- GSList *widget_list, *widget_iter;
- GSList *radio_list = NULL, *radio_iter = NULL;
-
- GtkWidget *list_widget, *radio_widget, *tree_widget, *entry_widget;
-
- extcap_arg *arg = NULL;
- extcap_value *value = NULL;
- extcap_complex *parsed_complex = NULL;
-
- GtkTreeSelection *treeselection;
- GtkTreeModel *treemodel;
- GtkTreeIter treeiter;
-
- GHashTable *ret_hash;
-
- gchar *call_string = NULL;
-
- extcap_gtk_multi_fill_cb_data multi_data = { NULL, 0, 0 };
-
- int multi_num = 0;
-
- widget_list = (GSList *) g_object_get_data(G_OBJECT(widget),
- EXTCAP_GTK_DATA_KEY_WIDGETLIST);
-
- if (widget_list == NULL)
- return NULL ;
-
- /* String hash */
- ret_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-
- for (widget_iter = widget_list; widget_iter; widget_iter =
- widget_iter->next) {
- list_widget = (GtkWidget *) widget_iter->data;
-
- if ((arg = (extcap_arg *) g_object_get_data(G_OBJECT(list_widget),
- EXTCAP_GTK_DATA_KEY_ARGPTR)) == NULL) {
- continue;
- }
-
- switch (arg->arg_type) {
- case EXTCAP_ARG_INTEGER:
- case EXTCAP_ARG_UNSIGNED:
- case EXTCAP_ARG_LONG:
- case EXTCAP_ARG_DOUBLE:
- case EXTCAP_ARG_STRING:
- parsed_complex = extcap_parse_complex(arg->arg_type,
- gtk_entry_get_text(GTK_ENTRY(list_widget)));
- if (parsed_complex == NULL) {
- continue;
- }
- break;
- case EXTCAP_ARG_BOOLEAN:
- case EXTCAP_ARG_BOOLFLAG:
- parsed_complex = extcap_parse_complex(arg->arg_type,
- gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(list_widget)) ? "true" : "false");
- break;
- case EXTCAP_ARG_FILESELECT:
- if ((entry_widget =
- (GtkWidget *) g_object_get_data(G_OBJECT(list_widget),
- EXTCAP_GTK_DATA_KEY_FILENAME)) == NULL) {
- continue;
- }
- parsed_complex = extcap_parse_complex(arg->arg_type,
- gtk_entry_get_text(GTK_ENTRY(entry_widget)));
- if (parsed_complex == NULL) {
- continue;
- }
- break;
- case EXTCAP_ARG_MENU:
- break;
- case EXTCAP_ARG_RADIO:
- if ((radio_widget = (GtkWidget *) g_object_get_data(
- G_OBJECT(list_widget),
- EXTCAP_GTK_DATA_KEY_FIRSTRADIO)) == NULL) {
- continue;
- }
-
- if ((radio_list = gtk_radio_button_get_group(
- GTK_RADIO_BUTTON(radio_widget))) == NULL) {
- continue;
- }
-
- for (radio_iter = radio_list; radio_iter;
- radio_iter = radio_iter->next) {
- GtkWidget *cur_radio = (GtkWidget *) radio_iter->data;
-
- if (gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(cur_radio))) {
- if ((value = (extcap_value *) g_object_get_data(
- G_OBJECT(cur_radio),
- EXTCAP_GTK_DATA_KEY_VALPTR)) == NULL) {
- continue;
- }
-
- if (value->is_default)
- continue;
-
- call_string = g_strdup(value->call);
- break;
- }
- }
-
- break;
- case EXTCAP_ARG_SELECTOR:
- if ((tree_widget = (GtkWidget *) g_object_get_data(
- G_OBJECT(list_widget),
- EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) {
- continue;
- }
-
- treeselection = gtk_tree_view_get_selection(
- GTK_TREE_VIEW(tree_widget));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget));
- if (gtk_tree_selection_get_selected(treeselection, &treemodel,
- &treeiter)) {
- gtk_tree_model_get(treemodel, &treeiter, EXTCAP_GTK_COL_VALUE,
- &value, -1);
-
- if (value->is_default)
- continue;
-
- call_string = g_strdup(value->call);
- }
-
- break;
- case EXTCAP_ARG_MULTICHECK:
- if ((tree_widget = (GtkWidget *) g_object_get_data(
- G_OBJECT(list_widget),
- EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) {
- continue;
- }
-
- gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_widget));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget));
-
- multi_num = 0;
-
- /* Count the # of items enabled */
- gtk_tree_model_foreach(treemodel, extcap_gtk_count_tree_elements,
- &multi_num);
-
- if (multi_num > 0)
- {
- multi_data.list = g_new(gchar *, multi_num + 1);
- multi_data.num = 0;
- multi_data.max = multi_num;
-
- multi_num = 0;
-
- /* Get values list of items enabled */
- gtk_tree_model_foreach(treemodel, extcap_gtk_fill_multi_list,
- &multi_data);
-
- multi_data.list[multi_data.max] = NULL;
-
- call_string = g_strjoinv(",", multi_data.list);
-
- g_strfreev(multi_data.list);
- }
- else
- {
- /* There are no enabled items. Skip this argument from command line. */
- continue;
- }
-
- break;
- default:
- break;
- }
-
- if (parsed_complex == NULL && call_string == NULL)
- continue;
-
- /* Comparing if the user has changed the value at all, and ignoring it if so */
- if (extcap_compare_is_default(arg, parsed_complex))
- continue;
-
- /* Flags are set as is, and have not true/false switch */
- if ((arg->arg_type == EXTCAP_ARG_BOOLFLAG)
- && (extcap_complex_get_bool(parsed_complex) == TRUE)) {
- call_string = g_strdup(" ");
- }
-
- if (parsed_complex != NULL && call_string == NULL)
- call_string = extcap_get_complex_as_string(parsed_complex);
-
- g_hash_table_insert(ret_hash, g_strdup(arg->call),
- g_strdup(call_string));
-
- g_free(call_string);
- call_string = NULL;
-
- g_free(parsed_complex);
- parsed_complex = NULL;
- }
-
- return ret_hash;
+ GSList *widget_list, *widget_iter;
+ GSList *radio_list = NULL, *radio_iter = NULL;
+
+ GtkWidget *list_widget, *radio_widget, *tree_widget, *entry_widget;
+
+ extcap_arg *arg = NULL;
+ extcap_value *value = NULL;
+ extcap_complex *parsed_complex = NULL;
+
+ GtkTreeSelection *treeselection;
+ GtkTreeModel *treemodel;
+ GtkTreeIter treeiter;
+
+ GHashTable *ret_hash;
+
+ gchar *call_string = NULL;
+
+ extcap_gtk_multi_fill_cb_data multi_data = { NULL, 0, 0 };
+
+ int multi_num = 0;
+
+ widget_list = (GSList *) g_object_get_data(G_OBJECT(widget),
+ EXTCAP_GTK_DATA_KEY_WIDGETLIST);
+
+ if (widget_list == NULL)
+ return NULL ;
+
+ /* String hash */
+ ret_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+
+ for (widget_iter = widget_list; widget_iter; widget_iter =
+ widget_iter->next) {
+ list_widget = (GtkWidget *) widget_iter->data;
+
+ if ((arg = (extcap_arg *) g_object_get_data(G_OBJECT(list_widget),
+ EXTCAP_GTK_DATA_KEY_ARGPTR)) == NULL) {
+ continue;
+ }
+
+ switch (arg->arg_type) {
+ case EXTCAP_ARG_INTEGER:
+ case EXTCAP_ARG_UNSIGNED:
+ case EXTCAP_ARG_LONG:
+ case EXTCAP_ARG_DOUBLE:
+ case EXTCAP_ARG_STRING:
+ parsed_complex = extcap_parse_complex(arg->arg_type,
+ gtk_entry_get_text(GTK_ENTRY(list_widget)));
+ if (parsed_complex == NULL) {
+ continue;
+ }
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ case EXTCAP_ARG_BOOLFLAG:
+ parsed_complex = extcap_parse_complex(arg->arg_type,
+ gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(list_widget)) ? "true" : "false");
+ break;
+ case EXTCAP_ARG_FILESELECT:
+ if ((entry_widget =
+ (GtkWidget *) g_object_get_data(G_OBJECT(list_widget),
+ EXTCAP_GTK_DATA_KEY_FILENAME)) == NULL) {
+ continue;
+ }
+ parsed_complex = extcap_parse_complex(arg->arg_type,
+ gtk_entry_get_text(GTK_ENTRY(entry_widget)));
+ if (parsed_complex == NULL) {
+ continue;
+ }
+ break;
+ case EXTCAP_ARG_MENU:
+ break;
+ case EXTCAP_ARG_RADIO:
+ if ((radio_widget = (GtkWidget *) g_object_get_data(
+ G_OBJECT(list_widget),
+ EXTCAP_GTK_DATA_KEY_FIRSTRADIO)) == NULL) {
+ continue;
+ }
+
+ if ((radio_list = gtk_radio_button_get_group(
+ GTK_RADIO_BUTTON(radio_widget))) == NULL) {
+ continue;
+ }
+
+ for (radio_iter = radio_list; radio_iter;
+ radio_iter = radio_iter->next) {
+ GtkWidget *cur_radio = (GtkWidget *) radio_iter->data;
+
+ if (gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(cur_radio))) {
+ if ((value = (extcap_value *) g_object_get_data(
+ G_OBJECT(cur_radio),
+ EXTCAP_GTK_DATA_KEY_VALPTR)) == NULL) {
+ continue;
+ }
+
+ if (value->is_default)
+ continue;
+
+ call_string = g_strdup(value->call);
+ break;
+ }
+ }
+
+ break;
+ case EXTCAP_ARG_SELECTOR:
+ if ((tree_widget = (GtkWidget *) g_object_get_data(
+ G_OBJECT(list_widget),
+ EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) {
+ continue;
+ }
+
+ treeselection = gtk_tree_view_get_selection(
+ GTK_TREE_VIEW(tree_widget));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget));
+ if (gtk_tree_selection_get_selected(treeselection, &treemodel,
+ &treeiter)) {
+ gtk_tree_model_get(treemodel, &treeiter, EXTCAP_GTK_COL_VALUE,
+ &value, -1);
+
+ if (value->is_default)
+ continue;
+
+ call_string = g_strdup(value->call);
+ }
+
+ break;
+ case EXTCAP_ARG_MULTICHECK:
+ if ((tree_widget = (GtkWidget *) g_object_get_data(
+ G_OBJECT(list_widget),
+ EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) {
+ continue;
+ }
+
+ gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_widget));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget));
+
+ multi_num = 0;
+
+ /* Count the # of items enabled */
+ gtk_tree_model_foreach(treemodel, extcap_gtk_count_tree_elements,
+ &multi_num);
+
+ if (multi_num > 0)
+ {
+ multi_data.list = g_new(gchar *, multi_num + 1);
+ multi_data.num = 0;
+ multi_data.max = multi_num;
+
+ multi_num = 0;
+
+ /* Get values list of items enabled */
+ gtk_tree_model_foreach(treemodel, extcap_gtk_fill_multi_list,
+ &multi_data);
+
+ multi_data.list[multi_data.max] = NULL;
+
+ call_string = g_strjoinv(",", multi_data.list);
+
+ g_strfreev(multi_data.list);
+ }
+ else
+ {
+ /* There are no enabled items. Skip this argument from command line. */
+ continue;
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ if (parsed_complex == NULL && call_string == NULL)
+ continue;
+
+ /* Comparing if the user has changed the value at all, and ignoring it if so */
+ if (extcap_compare_is_default(arg, parsed_complex))
+ continue;
+
+ /* Flags are set as is, and have not true/false switch */
+ if ((arg->arg_type == EXTCAP_ARG_BOOLFLAG)
+ && (extcap_complex_get_bool(parsed_complex) == TRUE)) {
+ call_string = g_strdup(" ");
+ }
+
+ if (parsed_complex != NULL && call_string == NULL)
+ call_string = extcap_get_complex_as_string(parsed_complex);
+
+ g_hash_table_insert(ret_hash, g_strdup(arg->call),
+ g_strdup(call_string));
+
+ g_free(call_string);
+ call_string = NULL;
+
+ g_free(parsed_complex);
+ parsed_complex = NULL;
+ }
+
+ return ret_hash;
}
static void extcap_gtk_treeview_vscroll_map_handler(GtkTreeView *treeView,
- gpointer data) {
- GtkWidget *padBox = (GtkWidget*) data;
- gint x, y;
+ gpointer data) {
+ GtkWidget *padBox = (GtkWidget*) data;
+ gint x, y;
- g_assert(GTK_IS_BOX(padBox));
+ g_assert(GTK_IS_BOX(padBox));
- /* Set the padding above the scrollbar to the height of the tree header window */
- gtk_tree_view_convert_bin_window_to_widget_coords(GTK_TREE_VIEW(treeView),
- 0, 0, &x, &y);
- gtk_widget_set_size_request(padBox, -1, y);
+ /* Set the padding above the scrollbar to the height of the tree header window */
+ gtk_tree_view_convert_bin_window_to_widget_coords(GTK_TREE_VIEW(treeView),
+ 0, 0, &x, &y);
+ gtk_widget_set_size_request(padBox, -1, y);
}
static GtkWidget *extcap_gtk_wrap_scroll_treeview(GtkWidget *view) {
- GtkWidget *vscroll, *padbox, *hbox, *vbox;
- GtkAdjustment *padj;
+ GtkWidget *vscroll, *padbox, *hbox, *vbox;
+ GtkAdjustment *padj;
#if GTK_CHECK_VERSION(3, 0, 0)
- padj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(view));
+ padj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(view));
#if GTK_CHECK_VERSION(3, 2, 0)
- vscroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, padj);
+ vscroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, padj);
#else
- vscroll = gtk_vscrollbar_new(padj);
+ vscroll = gtk_vscrollbar_new(padj);
#endif
#else
- padj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(view));
- vscroll = gtk_vscrollbar_new(padj);
+ padj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(view));
+ vscroll = gtk_vscrollbar_new(padj);
#endif
- hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE);
+ hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE);
- /* First insert the tree view */
- gtk_box_pack_start(GTK_BOX(hbox), view, TRUE, TRUE, 0);
- gtk_widget_show(view);
+ /* First insert the tree view */
+ gtk_box_pack_start(GTK_BOX(hbox), view, TRUE, TRUE, 0);
+ gtk_widget_show(view);
- /* Pack to the right a vbox containing a box for padding at top and scrollbar */
- vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE);
- gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
- gtk_widget_show(vbox);
+ /* Pack to the right a vbox containing a box for padding at top and scrollbar */
+ vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
+ gtk_widget_show(vbox);
- padbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE);
- gtk_box_pack_start(GTK_BOX(vbox), padbox, FALSE, FALSE, 0);
- gtk_widget_show(padbox);
+ padbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), padbox, FALSE, FALSE, 0);
+ gtk_widget_show(padbox);
- gtk_box_pack_start(GTK_BOX(vbox), vscroll, TRUE, TRUE, 0);
- gtk_widget_show(vscroll);
+ gtk_box_pack_start(GTK_BOX(vbox), vscroll, TRUE, TRUE, 0);
+ gtk_widget_show(vscroll);
- g_object_set_data(G_OBJECT(hbox), EXTCAP_GTK_DATA_KEY_TREEVIEW, view);
+ g_object_set_data(G_OBJECT(hbox), EXTCAP_GTK_DATA_KEY_TREEVIEW, view);
- g_signal_connect(view, "map",
- G_CALLBACK(extcap_gtk_treeview_vscroll_map_handler), padbox);
+ g_signal_connect(view, "map",
+ G_CALLBACK(extcap_gtk_treeview_vscroll_map_handler), padbox);
- return hbox;
+ return hbox;
}
GtkWidget *extcap_create_gtk_listwidget(extcap_arg *argument,
- GHashTable *prev_map) {
- GtkCellRenderer *renderer;
- GtkTreeModel *model;
- GtkWidget *view, *retview;
- GtkListStore *store;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- extcap_value *v = NULL;
- GList * walker = NULL;
- gchar *prev_item = NULL;
+ GHashTable *prev_map) {
+ GtkCellRenderer *renderer;
+ GtkTreeModel *model;
+ GtkWidget *view, *retview;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ extcap_value *v = NULL;
+ GList * walker = NULL;
+ gchar *prev_item = NULL;
- if (g_list_length(argument->values) == 0)
- return NULL ;
+ if (g_list_length(argument->values) == 0)
+ return NULL ;
- view = gtk_tree_view_new();
+ view = gtk_tree_view_new();
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
- store = gtk_list_store_new(EXTCAP_GTK_NUM_COLS, G_TYPE_STRING,
- G_TYPE_POINTER);
+ store = gtk_list_store_new(EXTCAP_GTK_NUM_COLS, G_TYPE_STRING,
+ G_TYPE_POINTER);
- model = GTK_TREE_MODEL(store);
- gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+ model = GTK_TREE_MODEL(store);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
- if (prev_map != NULL)
- prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
+ if (prev_map != NULL)
+ prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
- for (walker = g_list_first(argument->values); walker != NULL ; walker =
- walker->next) {
- v = (extcap_value *) walker->data;
- if (v->display == NULL)
- break;
+ for (walker = g_list_first(argument->values); walker != NULL ; walker =
+ walker->next) {
+ v = (extcap_value *) walker->data;
+ if (v->display == NULL)
+ break;
- gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter, EXTCAP_GTK_COL_DISPLAY, v->display,
- EXTCAP_GTK_COL_VALUE, v, -1);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, EXTCAP_GTK_COL_DISPLAY, v->display,
+ EXTCAP_GTK_COL_VALUE, v, -1);
- if (prev_item != NULL) {
- if (g_ascii_strcasecmp(prev_item, v->call) == 0) {
- gtk_tree_selection_select_iter(selection, &iter);
- }
- } else if (v->is_default) {
- gtk_tree_selection_select_iter(selection, &iter);
- }
- }
+ if (prev_item != NULL) {
+ if (g_ascii_strcasecmp(prev_item, v->call) == 0) {
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+ } else if (v->is_default) {
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+ }
- renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name",
- renderer, "text", EXTCAP_GTK_COL_DISPLAY, NULL);
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name",
+ renderer, "text", EXTCAP_GTK_COL_DISPLAY, NULL);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
- retview = extcap_gtk_wrap_scroll_treeview(view);
+ retview = extcap_gtk_wrap_scroll_treeview(view);
- if (gtk_tree_model_iter_n_children(model, NULL) > 3)
- gtk_widget_set_size_request(retview, 0, 100);
+ if (gtk_tree_model_iter_n_children(model, NULL) > 3)
+ gtk_widget_set_size_request(retview, 0, 100);
- /* Tree view has own reference */
- g_object_unref(model);
+ /* Tree view has own reference */
+ g_object_unref(model);
- return retview;
+ return retview;
}
GtkWidget *extcap_create_gtk_radiowidget(extcap_arg *argument,
- GHashTable *prev_map) {
- GtkWidget *radiobox = NULL, *last_radio = NULL;
- extcap_value *v = NULL;
- GList * walker = NULL;
- gchar *prev_item = NULL;
-
- if (g_list_length(argument->values) == 0)
- return NULL ;
-
- if (prev_map != NULL)
- prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
-
- radiobox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 1, FALSE);
-
- for (walker = g_list_first(argument->values); walker != NULL ; walker =
- walker->next) {
- v = (extcap_value *) walker->data;
-
- if (last_radio == NULL) {
- last_radio = gtk_radio_button_new_with_label(NULL, v->display);
- /* Set a pointer to the first radio button */
- g_object_set_data(G_OBJECT(radiobox),
- EXTCAP_GTK_DATA_KEY_FIRSTRADIO, last_radio);
- } else {
- last_radio = gtk_radio_button_new_with_label_from_widget(
- GTK_RADIO_BUTTON(last_radio), v->display);
- }
-
- /* Set a pointer to the value used in this radio */
- g_object_set_data(G_OBJECT(last_radio), EXTCAP_GTK_DATA_KEY_VALPTR, v);
-
- if (prev_item != NULL) {
- if (g_ascii_strcasecmp(prev_item, v->call) == 0) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio),
- TRUE);
- }
- } else if (v->is_default) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), TRUE);
- }
-
- gtk_box_pack_start(GTK_BOX(radiobox), last_radio, TRUE, TRUE, 0);
- gtk_widget_show(last_radio);
- }
-
- return radiobox;
+ GHashTable *prev_map) {
+ GtkWidget *radiobox = NULL, *last_radio = NULL;
+ extcap_value *v = NULL;
+ GList * walker = NULL;
+ gchar *prev_item = NULL;
+
+ if (g_list_length(argument->values) == 0)
+ return NULL ;
+
+ if (prev_map != NULL)
+ prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
+
+ radiobox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 1, FALSE);
+
+ for (walker = g_list_first(argument->values); walker != NULL ; walker =
+ walker->next) {
+ v = (extcap_value *) walker->data;
+
+ if (last_radio == NULL) {
+ last_radio = gtk_radio_button_new_with_label(NULL, v->display);
+ /* Set a pointer to the first radio button */
+ g_object_set_data(G_OBJECT(radiobox),
+ EXTCAP_GTK_DATA_KEY_FIRSTRADIO, last_radio);
+ } else {
+ last_radio = gtk_radio_button_new_with_label_from_widget(
+ GTK_RADIO_BUTTON(last_radio), v->display);
+ }
+
+ /* Set a pointer to the value used in this radio */
+ g_object_set_data(G_OBJECT(last_radio), EXTCAP_GTK_DATA_KEY_VALPTR, v);
+
+ if (prev_item != NULL) {
+ if (g_ascii_strcasecmp(prev_item, v->call) == 0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio),
+ TRUE);
+ }
+ } else if (v->is_default) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), TRUE);
+ }
+
+ gtk_box_pack_start(GTK_BOX(radiobox), last_radio, TRUE, TRUE, 0);
+ gtk_widget_show(last_radio);
+ }
+
+ return radiobox;
}
static void extcap_gtk_multicheck_toggled(GtkCellRendererToggle *cell _U_,
- gchar *path_str, gpointer data) {
- GtkTreeModel *model = (GtkTreeModel *) data;
- GtkTreeIter iter;
- GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
- gboolean enabled;
+ gchar *path_str, gpointer data) {
+ GtkTreeModel *model = (GtkTreeModel *) data;
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+ gboolean enabled;
- gtk_tree_model_get_iter(model, &iter, path);
- gtk_tree_model_get(model, &iter, EXTCAP_GTK_MULTI_COL_CHECK, &enabled, -1);
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter, EXTCAP_GTK_MULTI_COL_CHECK, &enabled, -1);
- enabled ^= 1;
+ enabled ^= 1;
- gtk_tree_store_set(GTK_TREE_STORE(model), &iter, EXTCAP_GTK_MULTI_COL_CHECK,
- enabled, -1);
+ gtk_tree_store_set(GTK_TREE_STORE(model), &iter, EXTCAP_GTK_MULTI_COL_CHECK,
+ enabled, -1);
- gtk_tree_path_free(path);
+ gtk_tree_path_free(path);
}
GtkWidget *extcap_create_gtk_rangewidget(extcap_arg *argument,
- GHashTable *prev_map _U_) {
- GtkWidget *spinButton;
- GtkAdjustment *adjustment;
-
- gfloat def = 0.0f, min = 0.0f, max = 0.0f;
-
- switch (argument->arg_type) {
- case EXTCAP_ARG_INTEGER:
- def = (gfloat) extcap_complex_get_int(argument->default_complex);
- min = (gfloat) extcap_complex_get_int(argument->range_start);
- max = (gfloat) extcap_complex_get_int(argument->range_end);
- break;
- case EXTCAP_ARG_UNSIGNED:
- def = (gfloat) extcap_complex_get_uint(argument->default_complex);
- min = (gfloat) extcap_complex_get_uint(argument->range_start);
- max = (gfloat) extcap_complex_get_uint(argument->range_end);
- break;
- case EXTCAP_ARG_LONG:
- def = (gfloat) extcap_complex_get_long(argument->default_complex);
- min = (gfloat) extcap_complex_get_long(argument->range_start);
- max = (gfloat) extcap_complex_get_long(argument->range_end);
- break;
- case EXTCAP_ARG_DOUBLE:
- def = (gfloat) extcap_complex_get_double(argument->default_complex);
- min = (gfloat) extcap_complex_get_double(argument->range_start);
- max = (gfloat) extcap_complex_get_double(argument->range_end);
- break;
- default:
- return NULL ;
- break;
- }
-
- adjustment = (GtkAdjustment *)gtk_adjustment_new(def, min, max, 1.0, 10.0, 0.0);
-
- spinButton = gtk_spin_button_new(adjustment, 0, 0);
- gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinButton), TRUE);
- gtk_widget_set_size_request(spinButton, 80, -1);
-
- return spinButton;
+ GHashTable *prev_map _U_) {
+ GtkWidget *spinButton;
+ GtkAdjustment *adjustment;
+
+ gfloat def = 0.0f, min = 0.0f, max = 0.0f;
+
+ switch (argument->arg_type) {
+ case EXTCAP_ARG_INTEGER:
+ def = (gfloat) extcap_complex_get_int(argument->default_complex);
+ min = (gfloat) extcap_complex_get_int(argument->range_start);
+ max = (gfloat) extcap_complex_get_int(argument->range_end);
+ break;
+ case EXTCAP_ARG_UNSIGNED:
+ def = (gfloat) extcap_complex_get_uint(argument->default_complex);
+ min = (gfloat) extcap_complex_get_uint(argument->range_start);
+ max = (gfloat) extcap_complex_get_uint(argument->range_end);
+ break;
+ case EXTCAP_ARG_LONG:
+ def = (gfloat) extcap_complex_get_long(argument->default_complex);
+ min = (gfloat) extcap_complex_get_long(argument->range_start);
+ max = (gfloat) extcap_complex_get_long(argument->range_end);
+ break;
+ case EXTCAP_ARG_DOUBLE:
+ def = (gfloat) extcap_complex_get_double(argument->default_complex);
+ min = (gfloat) extcap_complex_get_double(argument->range_start);
+ max = (gfloat) extcap_complex_get_double(argument->range_end);
+ break;
+ default:
+ return NULL ;
+ break;
+ }
+
+ adjustment = (GtkAdjustment *)gtk_adjustment_new(def, min, max, 1.0, 10.0, 0.0);
+
+ spinButton = gtk_spin_button_new(adjustment, 0, 0);
+ gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinButton), TRUE);
+ gtk_widget_set_size_request(spinButton, 80, -1);
+
+ return spinButton;
}
static void extcap_file_selectiondialog( GtkWidget *widget _U_, gpointer data )
{
- GtkWidget * filechooser = NULL;
- GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
- gchar *filename = NULL;
- gint res = 0;
- extcap_arg *argument = NULL;
+ GtkWidget * filechooser = NULL;
+ GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ gchar *filename = NULL;
+ gint res = 0;
+ extcap_arg *argument = NULL;
- if ( GTK_ENTRY(data) == NULL )
- return;
+ if ( GTK_ENTRY(data) == NULL )
+ return;
- argument = (extcap_arg *)g_object_get_data(G_OBJECT(data), EXTCAP_GTK_DATA_KEY_ARGUMENT);
- if ( argument != NULL && argument->fileexists == TRUE )
- action = GTK_FILE_CHOOSER_ACTION_OPEN;
+ argument = (extcap_arg *)g_object_get_data(G_OBJECT(data), EXTCAP_GTK_DATA_KEY_ARGUMENT);
+ if ( argument != NULL && argument->fileexists == TRUE )
+ action = GTK_FILE_CHOOSER_ACTION_OPEN;
- filechooser = gtk_file_chooser_dialog_new("Select file path", NULL, action,
- "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL);
+ filechooser = gtk_file_chooser_dialog_new("Select file path", NULL, action,
+ "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL);
- res = gtk_dialog_run (GTK_DIALOG (filechooser));
- if (res == GTK_RESPONSE_ACCEPT)
- {
- GtkFileChooser *chooser = GTK_FILE_CHOOSER (filechooser);
- filename = gtk_file_chooser_get_filename (chooser);
+ res = gtk_dialog_run (GTK_DIALOG (filechooser));
+ if (res == GTK_RESPONSE_ACCEPT)
+ {
+ GtkFileChooser *chooser = GTK_FILE_CHOOSER (filechooser);
+ filename = gtk_file_chooser_get_filename (chooser);
- /* this check might not be necessary, but just to be on the safe side */
- if ( action == GTK_FILE_CHOOSER_ACTION_OPEN && ! file_exists ( filename ) )
- filename = g_strdup ( " " );
+ /* this check might not be necessary, but just to be on the safe side */
+ if ( action == GTK_FILE_CHOOSER_ACTION_OPEN && ! file_exists ( filename ) )
+ filename = g_strdup ( " " );
- gtk_entry_set_text(GTK_ENTRY(data), filename);
- }
+ gtk_entry_set_text(GTK_ENTRY(data), filename);
+ }
- gtk_widget_destroy (filechooser);
+ gtk_widget_destroy (filechooser);
}
static GtkWidget *extcap_create_gtk_fileselect(extcap_arg *argument,
- GHashTable *prev_map _U_, gchar * file _U_) {
- GtkWidget * entry = NULL;
- GtkWidget * button = NULL;
- GtkWidget * ret_box = NULL;
-
- button = gtk_button_new_with_label ("...");
- entry = gtk_entry_new();
- if (file != NULL)
- gtk_entry_set_text(GTK_ENTRY(entry), file);
- gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
- g_object_set_data(G_OBJECT(entry), EXTCAP_GTK_DATA_KEY_ARGUMENT, argument);
+ GHashTable *prev_map _U_, gchar * file _U_) {
+ GtkWidget * entry = NULL;
+ GtkWidget * button = NULL;
+ GtkWidget * ret_box = NULL;
+
+ button = gtk_button_new_with_label ("...");
+ entry = gtk_entry_new();
+ if (file != NULL)
+ gtk_entry_set_text(GTK_ENTRY(entry), file);
+ gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
+ g_object_set_data(G_OBJECT(entry), EXTCAP_GTK_DATA_KEY_ARGUMENT, argument);
#if GTK_CHECK_VERSION(3, 0, 0)
- ret_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
+ ret_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
#else
- ret_box = gtk_hbox_new(FALSE, 3);
+ ret_box = gtk_hbox_new(FALSE, 3);
#endif
- gtk_box_pack_start ( GTK_BOX(ret_box), entry, TRUE, TRUE, 5 );
- gtk_widget_show(entry);
- gtk_box_pack_end ( GTK_BOX(ret_box), button, FALSE, FALSE, 5 );
- gtk_widget_show(button);
+ gtk_box_pack_start ( GTK_BOX(ret_box), entry, TRUE, TRUE, 5 );
+ gtk_widget_show(entry);
+ gtk_box_pack_end ( GTK_BOX(ret_box), button, FALSE, FALSE, 5 );
+ gtk_widget_show(button);
- g_signal_connect (button, "clicked",
- G_CALLBACK (extcap_file_selectiondialog), (gpointer) entry);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (extcap_file_selectiondialog), (gpointer) entry);
- g_object_set_data(G_OBJECT(ret_box), EXTCAP_GTK_DATA_KEY_FILENAME, entry);
+ g_object_set_data(G_OBJECT(ret_box), EXTCAP_GTK_DATA_KEY_FILENAME, entry);
- return ret_box;
+ return ret_box;
}
GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument,
- GHashTable *prev_map) {
- GtkCellRenderer *renderer, *togglerenderer;
- GtkTreeModel *model;
- GtkWidget *view, *retview;
- GtkTreeStore *store;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- extcap_value *v = NULL;
- GList * walker = NULL;
- gchar *prev_item = NULL;
- gchar **prev_list = NULL, **prev_iter = NULL;
- gboolean prev_value, prev_matched;
- extcap_gtk_multi_find_cb_data find_data;
-
- if (g_list_length(argument->values) == 0)
- return NULL ;
-
- view = gtk_tree_view_new();
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
-
- store = gtk_tree_store_new(EXTCAP_GTK_MULTI_NUM_COLS, G_TYPE_BOOLEAN,
- G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
-
- model = GTK_TREE_MODEL(store);
- gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE);
-
- if (prev_map != NULL)
- prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
-
- if (prev_item != NULL)
- prev_list = g_strsplit(prev_item, ",", 0);
-
- for (walker = g_list_first(argument->values); walker != NULL ; walker =
- walker->next) {
- v = (extcap_value *) walker->data;
- if (v->display == NULL)
- break;
-
- find_data.parent = v->parent;
- find_data.parent_iter = NULL;
-
- if (find_data.parent != NULL)
- {
- gtk_tree_model_foreach(model, extcap_gtk_find_parent_in_multi_list,
- &find_data);
- if (find_data.parent_iter == NULL)
- {
- g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
- "Extcap parent %s not found for value %s (%s)",
- v->parent, v->call, argument->call);
- }
- }
-
- prev_value = FALSE;
- prev_matched = FALSE;
- gtk_tree_store_append(store, &iter, find_data.parent_iter);
-
- if (find_data.parent_iter != NULL)
- {
- gtk_tree_iter_free(find_data.parent_iter);
- find_data.parent_iter = NULL;
- }
-
- if (prev_list != NULL) {
- prev_matched = FALSE;
- prev_iter = prev_list;
-
- while (*prev_iter != NULL ) {
- if (g_strcmp0(*prev_iter, v->call) == 0) {
- prev_matched = TRUE;
- prev_value = TRUE;
- break;
- }
-
- prev_iter++;
- }
-
- if (prev_matched == FALSE)
- prev_value = v->enabled;
- }
- else
- {
- /* Use default value if there is no information about previously selected items. */
- prev_value = v->is_default;
- }
-
-
- /* v->is_default is set when there was {default=true} for this value. */
- /* v->enabled is false for non-clickable tree items ({enabled=false}). */
- gtk_tree_store_set(store, &iter, EXTCAP_GTK_MULTI_COL_CHECK, prev_value,
- EXTCAP_GTK_MULTI_COL_DISPLAY, v->display,
- EXTCAP_GTK_MULTI_COL_VALUE, v,
- EXTCAP_GTK_MULTI_COL_ACTIVATABLE, v->enabled, -1);
- }
-
- if (prev_list != NULL)
- g_strfreev(prev_list);
-
- renderer = gtk_cell_renderer_text_new();
- togglerenderer = gtk_cell_renderer_toggle_new();
- g_signal_connect(togglerenderer, "toggled",
- G_CALLBACK(extcap_gtk_multicheck_toggled), model);
- gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1,
- "Enabled", togglerenderer, "active", EXTCAP_GTK_MULTI_COL_CHECK,
- "activatable", EXTCAP_GTK_MULTI_COL_ACTIVATABLE,
- "visible", EXTCAP_GTK_MULTI_COL_ACTIVATABLE,
- NULL);
- gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name",
- renderer, "text", EXTCAP_GTK_MULTI_COL_DISPLAY,
- NULL);
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
-
- retview = extcap_gtk_wrap_scroll_treeview(view);
-
- if (gtk_tree_model_iter_n_children(model, NULL) > 3)
- gtk_widget_set_size_request(retview, 0, 100);
-
- /* Tree view has own reference */
- g_object_unref(model);
-
- return retview;
+ GHashTable *prev_map) {
+ GtkCellRenderer *renderer, *togglerenderer;
+ GtkTreeModel *model;
+ GtkWidget *view, *retview;
+ GtkTreeStore *store;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ extcap_value *v = NULL;
+ GList * walker = NULL;
+ gchar *prev_item = NULL;
+ gchar **prev_list = NULL, **prev_iter = NULL;
+ gboolean prev_value, prev_matched;
+ extcap_gtk_multi_find_cb_data find_data;
+
+ if (g_list_length(argument->values) == 0)
+ return NULL ;
+
+ view = gtk_tree_view_new();
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
+
+ store = gtk_tree_store_new(EXTCAP_GTK_MULTI_NUM_COLS, G_TYPE_BOOLEAN,
+ G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+
+ model = GTK_TREE_MODEL(store);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE);
+
+ if (prev_map != NULL)
+ prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call);
+
+ if (prev_item != NULL)
+ prev_list = g_strsplit(prev_item, ",", 0);
+
+ for (walker = g_list_first(argument->values); walker != NULL ; walker =
+ walker->next) {
+ v = (extcap_value *) walker->data;
+ if (v->display == NULL)
+ break;
+
+ find_data.parent = v->parent;
+ find_data.parent_iter = NULL;
+
+ if (find_data.parent != NULL)
+ {
+ gtk_tree_model_foreach(model, extcap_gtk_find_parent_in_multi_list,
+ &find_data);
+ if (find_data.parent_iter == NULL)
+ {
+ g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG,
+ "Extcap parent %s not found for value %s (%s)",
+ v->parent, v->call, argument->call);
+ }
+ }
+
+ prev_value = FALSE;
+ prev_matched = FALSE;
+ gtk_tree_store_append(store, &iter, find_data.parent_iter);
+
+ if (find_data.parent_iter != NULL)
+ {
+ gtk_tree_iter_free(find_data.parent_iter);
+ find_data.parent_iter = NULL;
+ }
+
+ if (prev_list != NULL) {
+ prev_matched = FALSE;
+ prev_iter = prev_list;
+
+ while (*prev_iter != NULL ) {
+ if (g_strcmp0(*prev_iter, v->call) == 0) {
+ prev_matched = TRUE;
+ prev_value = TRUE;
+ break;
+ }
+
+ prev_iter++;
+ }
+
+ if (prev_matched == FALSE)
+ prev_value = v->enabled;
+ }
+ else
+ {
+ /* Use default value if there is no information about previously selected items. */
+ prev_value = v->is_default;
+ }
+
+
+ /* v->is_default is set when there was {default=true} for this value. */
+ /* v->enabled is false for non-clickable tree items ({enabled=false}). */
+ gtk_tree_store_set(store, &iter, EXTCAP_GTK_MULTI_COL_CHECK, prev_value,
+ EXTCAP_GTK_MULTI_COL_DISPLAY, v->display,
+ EXTCAP_GTK_MULTI_COL_VALUE, v,
+ EXTCAP_GTK_MULTI_COL_ACTIVATABLE, v->enabled, -1);
+ }
+
+ if (prev_list != NULL)
+ g_strfreev(prev_list);
+
+ renderer = gtk_cell_renderer_text_new();
+ togglerenderer = gtk_cell_renderer_toggle_new();
+ g_signal_connect(togglerenderer, "toggled",
+ G_CALLBACK(extcap_gtk_multicheck_toggled), model);
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1,
+ "Enabled", togglerenderer, "active", EXTCAP_GTK_MULTI_COL_CHECK,
+ "activatable", EXTCAP_GTK_MULTI_COL_ACTIVATABLE,
+ "visible", EXTCAP_GTK_MULTI_COL_ACTIVATABLE,
+ NULL);
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name",
+ renderer, "text", EXTCAP_GTK_MULTI_COL_DISPLAY,
+ NULL);
+
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
+
+ retview = extcap_gtk_wrap_scroll_treeview(view);
+
+ if (gtk_tree_model_iter_n_children(model, NULL) > 3)
+ gtk_widget_set_size_request(retview, 0, 100);
+
+ /* Tree view has own reference */
+ g_object_unref(model);
+
+ return retview;
}
void extcap_gtk_free_args(GtkWidget *vbox) {
- GList *arguments = (GList *) g_object_get_data(G_OBJECT(vbox),
- EXTCAP_GTK_DATA_KEY_ARGPTR);
- extcap_free_arg_list(arguments);
- g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, NULL);
+ GList *arguments = (GList *) g_object_get_data(G_OBJECT(vbox),
+ EXTCAP_GTK_DATA_KEY_ARGPTR);
+ extcap_free_arg_list(arguments);
+ g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, NULL);
}
GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox,
- GHashTable *prev_map) {
- GSList *widget_toplist = NULL;
-
- extcap_arg *arg_iter = NULL;
-
- extcap_complex *prev_complex = NULL;
- gchar *prev_call, *default_str;
-
- GList * arg_list = g_list_first(arguments);
- if ( arg_list == NULL )
- return NULL;
-
- g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, arguments);
-
- while (arg_list != NULL ) {
- GtkWidget *hbox = NULL, *label = NULL, *item = NULL;
-
- arg_iter = (extcap_arg*) (arg_list->data);
-
- /* A new storage box for label + element */
-
- hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5, FALSE);
-
- if (prev_map != NULL
- && (prev_call = (gchar *) g_hash_table_lookup(prev_map,
- arg_iter->call)) != NULL) {
- prev_complex = extcap_parse_complex(arg_iter->arg_type, prev_call);
- } else {
- prev_complex = NULL;
- }
-
- switch (arg_iter->arg_type) {
- case EXTCAP_ARG_INTEGER:
- case EXTCAP_ARG_UNSIGNED:
- case EXTCAP_ARG_LONG:
- case EXTCAP_ARG_DOUBLE:
- label = gtk_label_new(arg_iter->display);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
- item = extcap_create_gtk_rangewidget(arg_iter, prev_map);
- if (item == NULL) {
- item = gtk_entry_new();
-
- if (prev_complex != NULL) {
- default_str = extcap_get_complex_as_string(prev_complex);
- gtk_entry_set_text(GTK_ENTRY(item), default_str);
- g_free(default_str);
- } else if (arg_iter->default_complex != NULL) {
- default_str = extcap_get_complex_as_string(
- arg_iter->default_complex);
- gtk_entry_set_text(GTK_ENTRY(item), default_str);
- g_free(default_str);
- }
- }
- break;
- case EXTCAP_ARG_STRING:
- label = gtk_label_new(arg_iter->display);
-
- item = gtk_entry_new();
- default_str = NULL;
-
- if (prev_complex != NULL)
- default_str = extcap_get_complex_as_string(prev_complex);
- else if (arg_iter->default_complex != NULL)
- default_str = extcap_get_complex_as_string(
- arg_iter->default_complex);
-
- if (default_str != NULL) {
- gtk_entry_set_text(GTK_ENTRY(item), default_str);
- g_free(default_str);
- }
-
- break;
- case EXTCAP_ARG_FILESELECT:
- label = gtk_label_new(arg_iter->display);
- default_str = NULL;
-
- if (prev_complex != NULL)
- default_str = extcap_get_complex_as_string(prev_complex);
- else if (arg_iter->default_complex != NULL)
- default_str = extcap_get_complex_as_string(
- arg_iter->default_complex);
-
- gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
- item = extcap_create_gtk_fileselect(arg_iter, prev_map, default_str);
- if (default_str != NULL)
- g_free(default_str);
- break;
- case EXTCAP_ARG_BOOLEAN:
- case EXTCAP_ARG_BOOLFLAG:
- item = gtk_check_button_new_with_label(arg_iter->display);
-
- if (prev_complex != NULL) {
- if (extcap_complex_get_bool(prev_complex))
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE);
- } else if (arg_iter->default_complex != NULL
- && extcap_complex_get_bool(arg_iter->default_complex)) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE);
- }
-
- break;
- case EXTCAP_ARG_MENU:
- break;
- case EXTCAP_ARG_RADIO:
- label = gtk_label_new(arg_iter->display);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
- item = extcap_create_gtk_radiowidget(arg_iter, prev_map);
- break;
- case EXTCAP_ARG_SELECTOR:
- label = gtk_label_new(arg_iter->display);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
- item = extcap_create_gtk_listwidget(arg_iter, prev_map);
- break;
- case EXTCAP_ARG_MULTICHECK:
- label = gtk_label_new(arg_iter->display);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
- item = extcap_create_gtk_multicheckwidget(arg_iter, prev_map);
- break;
- default:
- break;
- }
-
- if (prev_complex != NULL)
- extcap_free_complex(prev_complex);
-
- if (label != NULL) {
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
- gtk_widget_show(label);
- }
-
- if (item != NULL) {
- gtk_box_pack_start(GTK_BOX(hbox), item, TRUE, TRUE, 0);
- gtk_widget_show(item);
- g_object_set_data(G_OBJECT(item), EXTCAP_GTK_DATA_KEY_ARGPTR,
- arg_iter);
-
- if (arg_iter->tooltip != NULL) {
- gtk_widget_set_tooltip_text(item, arg_iter->tooltip);
- }
-
- widget_toplist = g_slist_append(widget_toplist, item);
- }
-
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
-
- gtk_widget_show(hbox);
-
- arg_list = arg_list->next;
- }
-
- return widget_toplist;
+ GHashTable *prev_map) {
+ GSList *widget_toplist = NULL;
+
+ extcap_arg *arg_iter = NULL;
+
+ extcap_complex *prev_complex = NULL;
+ gchar *prev_call, *default_str;
+
+ GList * arg_list = g_list_first(arguments);
+ if ( arg_list == NULL )
+ return NULL;
+
+ g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, arguments);
+
+ while (arg_list != NULL ) {
+ GtkWidget *hbox = NULL, *label = NULL, *item = NULL;
+
+ arg_iter = (extcap_arg*) (arg_list->data);
+
+ /* A new storage box for label + element */
+
+ hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5, FALSE);
+
+ if (prev_map != NULL
+ && (prev_call = (gchar *) g_hash_table_lookup(prev_map,
+ arg_iter->call)) != NULL) {
+ prev_complex = extcap_parse_complex(arg_iter->arg_type, prev_call);
+ } else {
+ prev_complex = NULL;
+ }
+
+ switch (arg_iter->arg_type) {
+ case EXTCAP_ARG_INTEGER:
+ case EXTCAP_ARG_UNSIGNED:
+ case EXTCAP_ARG_LONG:
+ case EXTCAP_ARG_DOUBLE:
+ label = gtk_label_new(arg_iter->display);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
+ item = extcap_create_gtk_rangewidget(arg_iter, prev_map);
+ if (item == NULL) {
+ item = gtk_entry_new();
+
+ if (prev_complex != NULL) {
+ default_str = extcap_get_complex_as_string(prev_complex);
+ gtk_entry_set_text(GTK_ENTRY(item), default_str);
+ g_free(default_str);
+ } else if (arg_iter->default_complex != NULL) {
+ default_str = extcap_get_complex_as_string(
+ arg_iter->default_complex);
+ gtk_entry_set_text(GTK_ENTRY(item), default_str);
+ g_free(default_str);
+ }
+ }
+ break;
+ case EXTCAP_ARG_STRING:
+ label = gtk_label_new(arg_iter->display);
+
+ item = gtk_entry_new();
+ default_str = NULL;
+
+ if (prev_complex != NULL)
+ default_str = extcap_get_complex_as_string(prev_complex);
+ else if (arg_iter->default_complex != NULL)
+ default_str = extcap_get_complex_as_string(
+ arg_iter->default_complex);
+
+ if (default_str != NULL) {
+ gtk_entry_set_text(GTK_ENTRY(item), default_str);
+ g_free(default_str);
+ }
+
+ break;
+ case EXTCAP_ARG_FILESELECT:
+ label = gtk_label_new(arg_iter->display);
+ default_str = NULL;
+
+ if (prev_complex != NULL)
+ default_str = extcap_get_complex_as_string(prev_complex);
+ else if (arg_iter->default_complex != NULL)
+ default_str = extcap_get_complex_as_string(
+ arg_iter->default_complex);
+
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
+ item = extcap_create_gtk_fileselect(arg_iter, prev_map, default_str);
+ if (default_str != NULL)
+ g_free(default_str);
+ break;
+ case EXTCAP_ARG_BOOLEAN:
+ case EXTCAP_ARG_BOOLFLAG:
+ item = gtk_check_button_new_with_label(arg_iter->display);
+
+ if (prev_complex != NULL) {
+ if (extcap_complex_get_bool(prev_complex))
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE);
+ } else if (arg_iter->default_complex != NULL
+ && extcap_complex_get_bool(arg_iter->default_complex)) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE);
+ }
+
+ break;
+ case EXTCAP_ARG_MENU:
+ break;
+ case EXTCAP_ARG_RADIO:
+ label = gtk_label_new(arg_iter->display);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
+ item = extcap_create_gtk_radiowidget(arg_iter, prev_map);
+ break;
+ case EXTCAP_ARG_SELECTOR:
+ label = gtk_label_new(arg_iter->display);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
+ item = extcap_create_gtk_listwidget(arg_iter, prev_map);
+ break;
+ case EXTCAP_ARG_MULTICHECK:
+ label = gtk_label_new(arg_iter->display);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f);
+ item = extcap_create_gtk_multicheckwidget(arg_iter, prev_map);
+ break;
+ default:
+ break;
+ }
+
+ if (prev_complex != NULL)
+ extcap_free_complex(prev_complex);
+
+ if (label != NULL) {
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+ gtk_widget_show(label);
+ }
+
+ if (item != NULL) {
+ gtk_box_pack_start(GTK_BOX(hbox), item, TRUE, TRUE, 0);
+ gtk_widget_show(item);
+ g_object_set_data(G_OBJECT(item), EXTCAP_GTK_DATA_KEY_ARGPTR,
+ arg_iter);
+
+ if (arg_iter->tooltip != NULL) {
+ gtk_widget_set_tooltip_text(item, arg_iter->tooltip);
+ }
+
+ widget_toplist = g_slist_append(widget_toplist, item);
+ }
+
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
+
+ gtk_widget_show(hbox);
+
+ arg_list = arg_list->next;
+ }
+
+ return widget_toplist;
}
/*
@@ -901,10 +901,10 @@ GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox,
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/ui/gtk/extcap_gtk.h b/ui/gtk/extcap_gtk.h
index eb49c545f7..614a76c787 100644
--- a/ui/gtk/extcap_gtk.h
+++ b/ui/gtk/extcap_gtk.h
@@ -34,66 +34,66 @@
* GObject data keys for linking argument records to the gtk
* UI
*/
-#define EXTCAP_GTK_DATA_KEY_ARGPTR "EXTCAP_ARGPTR"
-#define EXTCAP_GTK_DATA_KEY_VALPTR "EXTCAP_VALPTR"
-#define EXTCAP_GTK_DATA_KEY_FIRSTRADIO "EXTCAP_FIRSTRADIO"
-#define EXTCAP_GTK_DATA_KEY_WIDGETLIST "EXTCAP_WIDGETLIST"
-#define EXTCAP_GTK_DATA_KEY_TREEVIEW "EXTCAP_TREEVIEW"
-#define EXTCAP_GTK_DATA_KEY_FILENAME "EXTCAP_FILENAME"
-#define EXTCAP_GTK_DATA_KEY_ARGUMENT "EXTCAP_ARGUMENT"
+#define EXTCAP_GTK_DATA_KEY_ARGPTR "EXTCAP_ARGPTR"
+#define EXTCAP_GTK_DATA_KEY_VALPTR "EXTCAP_VALPTR"
+#define EXTCAP_GTK_DATA_KEY_FIRSTRADIO "EXTCAP_FIRSTRADIO"
+#define EXTCAP_GTK_DATA_KEY_WIDGETLIST "EXTCAP_WIDGETLIST"
+#define EXTCAP_GTK_DATA_KEY_TREEVIEW "EXTCAP_TREEVIEW"
+#define EXTCAP_GTK_DATA_KEY_FILENAME "EXTCAP_FILENAME"
+#define EXTCAP_GTK_DATA_KEY_ARGUMENT "EXTCAP_ARGUMENT"
/*
* GTK UI / EXTCAP Linkage:
*
* Packed vbox of widgets
- * Contains EXTCAP_WIDGETLIST pointing to enclosed widget list
+ * Contains EXTCAP_WIDGETLIST pointing to enclosed widget list
*
* GSList gtk_ui_widgets
- * Linked list of drawable widgets in the UI
+ * Linked list of drawable widgets in the UI
*
* GtkWidget contained in GSList
- * Drawn GTK UI element. If UI element is directly linked
- * to argument, will contain EXTCAP_ARGPTR.
+ * Drawn GTK UI element. If UI element is directly linked
+ * to argument, will contain EXTCAP_ARGPTR.
*
- * Top-level GTK widgets will include text boxes, sliders
- * (if supported), and checkboxes.
+ * Top-level GTK widgets will include text boxes, sliders
+ * (if supported), and checkboxes.
*
- * If the top level widget contains radio buttons, it will
- * contain an EXTCAP_ARGPTR *and* an EXTCAP_FIRSTRADIO
+ * If the top level widget contains radio buttons, it will
+ * contain an EXTCAP_ARGPTR *and* an EXTCAP_FIRSTRADIO
*
* Radio buttons
- * Each radio button will contain an EXTCAP_VALPTR reference
- * to the extcap_value * value being used.
+ * Each radio button will contain an EXTCAP_VALPTR reference
+ * to the extcap_value * value being used.
*
* Selectors
- * Each selector row contains a pointer to the value, in the
- * column COL_VALUE
+ * Each selector row contains a pointer to the value, in the
+ * column COL_VALUE
*
*/
enum extcap_gtk_col_types {
- EXTCAP_GTK_COL_DISPLAY = 0, EXTCAP_GTK_COL_VALUE = 1, EXTCAP_GTK_NUM_COLS
+ EXTCAP_GTK_COL_DISPLAY = 0, EXTCAP_GTK_COL_VALUE = 1, EXTCAP_GTK_NUM_COLS
};
enum extcap_gtk_multi_col_types {
- EXTCAP_GTK_MULTI_COL_CHECK = 0,
- EXTCAP_GTK_MULTI_COL_DISPLAY = 1,
- EXTCAP_GTK_MULTI_COL_VALUE = 2,
- EXTCAP_GTK_MULTI_COL_ACTIVATABLE = 3,
- EXTCAP_GTK_MULTI_NUM_COLS
+ EXTCAP_GTK_MULTI_COL_CHECK = 0,
+ EXTCAP_GTK_MULTI_COL_DISPLAY = 1,
+ EXTCAP_GTK_MULTI_COL_VALUE = 2,
+ EXTCAP_GTK_MULTI_COL_ACTIVATABLE = 3,
+ EXTCAP_GTK_MULTI_NUM_COLS
};
/* Get a hash map of calls and values from the top widget */
GHashTable *extcap_gtk_get_state(GtkWidget *widget);
GtkWidget *extcap_create_gtk_rangewidget(extcap_arg *argument,
- GHashTable *prev_map);
+ GHashTable *prev_map);
GtkWidget *extcap_create_gtk_listwidget(extcap_arg *argument,
- GHashTable *prev_map);
+ GHashTable *prev_map);
GtkWidget *extcap_create_gtk_radiowidget(extcap_arg *argument,
- GHashTable *prev_map);
+ GHashTable *prev_map);
GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument,
- GHashTable *prev_map);
+ GHashTable *prev_map);
/*
* Populate a (pre-created) container widget based on an arguments record.
@@ -102,7 +102,7 @@ GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument,
* repeatedly, for example
*/
GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox,
- GHashTable *prev_map);
+ GHashTable *prev_map);
/* Free args associated with a GTK item */
void extcap_gtk_free_args(GtkWidget *vbox);
@@ -114,10 +114,11 @@ void extcap_gtk_free_args(GtkWidget *vbox);
*
* Local variables:
* c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: t
+ * tab-width: 8
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=4 noexpandtab:
- * :indentSize=4:tabSize=4:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
+
diff --git a/ui/gtk/mcast_stream_dlg.c b/ui/gtk/mcast_stream_dlg.c
index f13859fb90..7b1754ce17 100644
--- a/ui/gtk/mcast_stream_dlg.c
+++ b/ui/gtk/mcast_stream_dlg.c
@@ -69,13 +69,13 @@ static const gchar PAR_LABEL_TEXT[] = "\nBurst int: ms Burst alarm: pps Buf
static GtkWidget *mcast_stream_dlg = NULL;
static GtkWidget *mcast_params_dlg = NULL;
-static GtkListStore *list_store = NULL;
+static GtkListStore *list_store = NULL;
static GtkTreeIter list_iter;
-static GtkWidget *list_w = NULL;
-static GtkWidget *top_label = NULL;
-static GtkWidget *label_fwd = NULL;
-static GtkWidget *label_par = NULL;
-static GtkWidget *bt_filter = NULL;
+static GtkWidget *list_w = NULL;
+static GtkWidget *top_label = NULL;
+static GtkWidget *label_fwd = NULL;
+static GtkWidget *label_par = NULL;
+static GtkWidget *bt_filter = NULL;
static mcast_stream_info_t *selected_stream_fwd = NULL; /* current selection */
static GList *last_list = NULL;
@@ -84,20 +84,20 @@ static guint32 streams_nb = 0; /* number of displayed streams */
enum
{
- MC_COL_SRC_ADDR,
- MC_COL_SRC_PORT,
- MC_COL_DST_ADDR,
- MC_COL_DST_PORT,
- MC_COL_PACKETS,
- MC_COL_PPS,
- MC_COL_AVG_BW,
- MC_COL_MAX_BW,
- MC_COL_MAX_BURST,
- MC_COL_BURST_ALARM,
- MC_COL_MAX_BUFFER,
- MC_COL_BUFFER_ALARM,
- MC_COL_DATA,
- NUM_COLS /* The number of columns */
+ MC_COL_SRC_ADDR,
+ MC_COL_SRC_PORT,
+ MC_COL_DST_ADDR,
+ MC_COL_DST_PORT,
+ MC_COL_PACKETS,
+ MC_COL_PPS,
+ MC_COL_AVG_BW,
+ MC_COL_MAX_BW,
+ MC_COL_MAX_BURST,
+ MC_COL_BURST_ALARM,
+ MC_COL_MAX_BUFFER,
+ MC_COL_BUFFER_ALARM,
+ MC_COL_DATA,
+ NUM_COLS /* The number of columns */
};
/****************************************************************************/
@@ -106,18 +106,18 @@ enum
static void
mcaststream_on_destroy(GObject *object _U_, gpointer user_data _U_)
{
- /* Remove the stream tap listener */
- remove_tap_listener_mcast_stream();
+ /* Remove the stream tap listener */
+ remove_tap_listener_mcast_stream();
- /* Is there a params window open? */
- if (mcast_params_dlg != NULL)
- window_destroy(mcast_params_dlg);
+ /* Is there a params window open? */
+ if (mcast_params_dlg != NULL)
+ window_destroy(mcast_params_dlg);
- /* Clean up memory used by stream tap */
- mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info());
+ /* Clean up memory used by stream tap */
+ mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info());
- /* Note that we no longer have a "Mcast Streams" dialog box. */
- mcast_stream_dlg = NULL;
+ /* Note that we no longer have a "Mcast Streams" dialog box. */
+ mcast_stream_dlg = NULL;
}
@@ -125,13 +125,13 @@ mcaststream_on_destroy(GObject *object _U_, gpointer user_data _U_)
static void
mcaststream_on_unselect(GtkButton *button _U_, gpointer user_data _U_)
{
- GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_w));
+ GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_w));
- gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_unselect_all(selection);
- selected_stream_fwd = NULL;
- gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
- gtk_widget_set_sensitive(bt_filter, FALSE);
+ selected_stream_fwd = NULL;
+ gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
+ gtk_widget_set_sensitive(bt_filter, FALSE);
}
@@ -139,32 +139,32 @@ mcaststream_on_unselect(GtkButton *button _U_, gpointer user_data _U_)
static void
mcaststream_on_filter(GtkButton *button _U_, gpointer user_data _U_)
{
- gchar *filter_string_fwd;
- gchar ip_version[3];
-
- if (selected_stream_fwd == NULL)
- return;
-
- if (selected_stream_fwd->src_addr.type == AT_IPv6) {
- g_strlcpy(ip_version,"v6",sizeof(ip_version));
- } else {
- ip_version[0] = '\0';
- }
- filter_string_fwd = g_strdup_printf(
- "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u)",
- ip_version,
- ep_address_to_str(&(selected_stream_fwd->src_addr)),
- selected_stream_fwd->src_port,
- ip_version,
- ep_address_to_str(&(selected_stream_fwd->dest_addr)),
- selected_stream_fwd->dest_port);
-
- gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string_fwd);
- g_free(filter_string_fwd);
+ gchar *filter_string_fwd;
+ gchar ip_version[3];
+
+ if (selected_stream_fwd == NULL)
+ return;
+
+ if (selected_stream_fwd->src_addr.type == AT_IPv6) {
+ g_strlcpy(ip_version,"v6",sizeof(ip_version));
+ } else {
+ ip_version[0] = '\0';
+ }
+ filter_string_fwd = g_strdup_printf(
+ "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u)",
+ ip_version,
+ ep_address_to_str(&(selected_stream_fwd->src_addr)),
+ selected_stream_fwd->src_port,
+ ip_version,
+ ep_address_to_str(&(selected_stream_fwd->dest_addr)),
+ selected_stream_fwd->dest_port);
+
+ gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string_fwd);
+ g_free(filter_string_fwd);
#if 0
- main_filter_packets(&cfile, filter_string, FALSE);
- mcaststream_dlg_update(mcaststream_get_info()->strinfo_list);
+ main_filter_packets(&cfile, filter_string, FALSE);
+ mcaststream_dlg_update(mcaststream_get_info()->strinfo_list);
#endif
}
@@ -173,24 +173,24 @@ mcaststream_on_filter(GtkButton *button _U_, gpointer user_data _U_)
static void
mcaststream_on_select_row(GtkTreeSelection *selection, gpointer data _U_)
{
- gchar label_text[80];
-
- if (gtk_tree_selection_get_selected(selection, NULL, &list_iter))
- {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &list_iter, MC_COL_DATA, &selected_stream_fwd, -1);
- g_snprintf(label_text, sizeof(label_text), "Selected: %s:%u -> %s:%u",
- ep_address_to_display(&(selected_stream_fwd->src_addr)),
- selected_stream_fwd->src_port,
- ep_address_to_display(&(selected_stream_fwd->dest_addr)),
- selected_stream_fwd->dest_port
- );
- gtk_label_set_text(GTK_LABEL(label_fwd), label_text);
- gtk_widget_set_sensitive(bt_filter, TRUE);
- } else {
- selected_stream_fwd = NULL;
- gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
- gtk_widget_set_sensitive(bt_filter, FALSE);
- }
+ gchar label_text[80];
+
+ if (gtk_tree_selection_get_selected(selection, NULL, &list_iter))
+ {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &list_iter, MC_COL_DATA, &selected_stream_fwd, -1);
+ g_snprintf(label_text, sizeof(label_text), "Selected: %s:%u -> %s:%u",
+ ep_address_to_display(&(selected_stream_fwd->src_addr)),
+ selected_stream_fwd->src_port,
+ ep_address_to_display(&(selected_stream_fwd->dest_addr)),
+ selected_stream_fwd->dest_port
+ );
+ gtk_label_set_text(GTK_LABEL(label_fwd), label_text);
+ gtk_widget_set_sensitive(bt_filter, TRUE);
+ } else {
+ selected_stream_fwd = NULL;
+ gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
+ gtk_widget_set_sensitive(bt_filter, FALSE);
+ }
}
@@ -200,70 +200,70 @@ mcaststream_on_select_row(GtkTreeSelection *selection, gpointer data _U_)
static void
mcast_params_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
{
- /* Note that we no longer have a mcast params dialog box. */
- mcast_params_dlg = NULL;
+ /* Note that we no longer have a mcast params dialog box. */
+ mcast_params_dlg = NULL;
}
static void
mcast_params_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
{
- GtkWidget *fnumber_te;
- const gchar *fnumber_text;
- gint32 fnumber;
- char *p;
-
- fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_1);
- fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
- fnumber = (gint)strtol(fnumber_text, &p, 10);
- if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 1000) ) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst interval should be between 1 and 1000 ms.");
- return;
- }
- mcast_stream_burstint = fnumber;
-
- fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_2);
- fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
- fnumber = (gint)strtol(fnumber_text, &p, 10);
- if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst alarm threshold you entered isn't valid.");
- return;
- }
- mcast_stream_trigger = fnumber;
-
- fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_3);
- fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
- fnumber = (gint)strtol(fnumber_text, &p, 10);
- if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The buffer alarm threshold you entered isn't valid.");
- return;
- }
- mcast_stream_bufferalarm = fnumber;
-
- fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_4);
- fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
- fnumber = (gint)strtol(fnumber_text, &p, 10);
- if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The stream empty speed should be between 1 and 10000000");
- return;
- }
- mcast_stream_emptyspeed = fnumber;
-
- fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_5);
- fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
- fnumber = (gint)strtol(fnumber_text, &p, 10);
- if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The total empty speed should be between 1 and 10000000");
- return;
- }
- mcast_stream_cumulemptyspeed = fnumber;
-
- window_destroy(GTK_WIDGET(parent_w));
-
- /* Clean up memory used by stream tap */
- mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info());
- /* retap all packets */
- cf_retap_packets(&cfile);
+ GtkWidget *fnumber_te;
+ const gchar *fnumber_text;
+ gint32 fnumber;
+ char *p;
+
+ fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_1);
+ fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
+ fnumber = (gint)strtol(fnumber_text, &p, 10);
+ if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 1000) ) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst interval should be between 1 and 1000 ms.");
+ return;
+ }
+ mcast_stream_burstint = fnumber;
+
+ fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_2);
+ fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
+ fnumber = (gint)strtol(fnumber_text, &p, 10);
+ if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst alarm threshold you entered isn't valid.");
+ return;
+ }
+ mcast_stream_trigger = fnumber;
+
+ fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_3);
+ fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
+ fnumber = (gint)strtol(fnumber_text, &p, 10);
+ if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The buffer alarm threshold you entered isn't valid.");
+ return;
+ }
+ mcast_stream_bufferalarm = fnumber;
+
+ fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_4);
+ fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
+ fnumber = (gint)strtol(fnumber_text, &p, 10);
+ if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The stream empty speed should be between 1 and 10000000");
+ return;
+ }
+ mcast_stream_emptyspeed = fnumber;
+
+ fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_5);
+ fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te));
+ fnumber = (gint)strtol(fnumber_text, &p, 10);
+ if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The total empty speed should be between 1 and 10000000");
+ return;
+ }
+ mcast_stream_cumulemptyspeed = fnumber;
+
+ window_destroy(GTK_WIDGET(parent_w));
+
+ /* Clean up memory used by stream tap */
+ mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info());
+ /* retap all packets */
+ cf_retap_packets(&cfile);
}
@@ -271,90 +271,90 @@ mcast_params_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
static void
mcast_on_params(GtkButton *button _U_, gpointer data _U_)
{
- GtkWidget *main_vb;
- GtkWidget *label, *hbuttonbox, *grid;
- GtkWidget *ok_bt, *cancel_bt;
- GtkWidget *entry1, *entry2, *entry3, *entry4, *entry5;
- gchar label_text[51];
-
- if (mcast_params_dlg != NULL) {
- /* There's already a Params dialog box; reactivate it. */
- reactivate_window(mcast_params_dlg);
- return;
- }
-
- mcast_params_dlg = dlg_window_new("Wireshark: Set parameters for Multicast Stream Analysis");
- gtk_window_set_destroy_with_parent(GTK_WINDOW(mcast_params_dlg), TRUE);
- gtk_window_set_default_size(GTK_WINDOW(mcast_params_dlg), 210, 210);
-
- gtk_widget_show(mcast_params_dlg);
-
- /* Container for each row of widgets */
- main_vb =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
- gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2);
- gtk_container_add(GTK_CONTAINER(mcast_params_dlg), main_vb);
- gtk_widget_show(main_vb);
-
- grid = ws_gtk_grid_new();
- gtk_box_pack_start(GTK_BOX(main_vb), grid, TRUE, TRUE, 0);
- label = gtk_label_new(" Burst measurement interval (ms) ");
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 0, 1, 1);
- entry1 = gtk_entry_new();
- g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_burstint);
- gtk_entry_set_text(GTK_ENTRY(entry1), label_text);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry1, 1, 0, 1, 1);
- label = gtk_label_new(" Burst alarm threshold (packets) ");
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 1, 1, 1);
- entry2 = gtk_entry_new();
- g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_trigger);
- gtk_entry_set_text(GTK_ENTRY(entry2), label_text);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry2, 1, 1, 1, 1);
- label = gtk_label_new(" Buffer alarm threshold (bytes) ");
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 2, 1, 1);
- entry3 = gtk_entry_new();
- g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_bufferalarm);
- gtk_entry_set_text(GTK_ENTRY(entry3), label_text);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry3, 1, 2, 1, 1);
- label = gtk_label_new(" Stream empty speed (kbit/s) ");
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 3, 1, 1);
- entry4 = gtk_entry_new();
- g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_emptyspeed);
- gtk_entry_set_text(GTK_ENTRY(entry4), label_text);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry4, 1, 3, 1, 1);
- label = gtk_label_new(" Total empty speed (kbit/s) ");
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 4, 1, 1);
- entry5 = gtk_entry_new();
- g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_cumulemptyspeed);
- gtk_entry_set_text(GTK_ENTRY(entry5), label_text);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry5, 1, 4, 1, 1);
-
- gtk_widget_show (grid);
-
- /* button row */
- hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
- ws_gtk_grid_attach_defaults(GTK_GRID(grid), hbuttonbox, 0, 5, 2, 1);
- ok_bt = ws_gtk_button_new_from_stock(GTK_STOCK_OK);
- gtk_container_add (GTK_CONTAINER(hbuttonbox), ok_bt);
- cancel_bt = ws_gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_container_add (GTK_CONTAINER(hbuttonbox), cancel_bt);
- gtk_widget_set_can_default(cancel_bt, TRUE);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing(GTK_BOX(hbuttonbox), 0);
-
- g_signal_connect(mcast_params_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(mcast_params_dlg, "destroy", G_CALLBACK(mcast_params_destroy_cb), NULL);
- g_signal_connect(ok_bt, "clicked", G_CALLBACK(mcast_params_ok_cb), mcast_params_dlg);
- window_set_cancel_button(mcast_params_dlg, cancel_bt, window_cancel_button_cb);
-
- /* Attach pointers to needed widgets */
- g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_1, entry1);
- g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_2, entry2);
- g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_3, entry3);
- g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_4, entry4);
- g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_5, entry5);
-
- gtk_widget_show_all(mcast_params_dlg);
- window_present(mcast_params_dlg);
+ GtkWidget *main_vb;
+ GtkWidget *label, *hbuttonbox, *grid;
+ GtkWidget *ok_bt, *cancel_bt;
+ GtkWidget *entry1, *entry2, *entry3, *entry4, *entry5;
+ gchar label_text[51];
+
+ if (mcast_params_dlg != NULL) {
+ /* There's already a Params dialog box; reactivate it. */
+ reactivate_window(mcast_params_dlg);
+ return;
+ }
+
+ mcast_params_dlg = dlg_window_new("Wireshark: Set parameters for Multicast Stream Analysis");
+ gtk_window_set_destroy_with_parent(GTK_WINDOW(mcast_params_dlg), TRUE);
+ gtk_window_set_default_size(GTK_WINDOW(mcast_params_dlg), 210, 210);
+
+ gtk_widget_show(mcast_params_dlg);
+
+ /* Container for each row of widgets */
+ main_vb =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2);
+ gtk_container_add(GTK_CONTAINER(mcast_params_dlg), main_vb);
+ gtk_widget_show(main_vb);
+
+ grid = ws_gtk_grid_new();
+ gtk_box_pack_start(GTK_BOX(main_vb), grid, TRUE, TRUE, 0);
+ label = gtk_label_new(" Burst measurement interval (ms) ");
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 0, 1, 1);
+ entry1 = gtk_entry_new();
+ g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_burstint);
+ gtk_entry_set_text(GTK_ENTRY(entry1), label_text);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry1, 1, 0, 1, 1);
+ label = gtk_label_new(" Burst alarm threshold (packets) ");
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 1, 1, 1);
+ entry2 = gtk_entry_new();
+ g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_trigger);
+ gtk_entry_set_text(GTK_ENTRY(entry2), label_text);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry2, 1, 1, 1, 1);
+ label = gtk_label_new(" Buffer alarm threshold (bytes) ");
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 2, 1, 1);
+ entry3 = gtk_entry_new();
+ g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_bufferalarm);
+ gtk_entry_set_text(GTK_ENTRY(entry3), label_text);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry3, 1, 2, 1, 1);
+ label = gtk_label_new(" Stream empty speed (kbit/s) ");
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 3, 1, 1);
+ entry4 = gtk_entry_new();
+ g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_emptyspeed);
+ gtk_entry_set_text(GTK_ENTRY(entry4), label_text);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry4, 1, 3, 1, 1);
+ label = gtk_label_new(" Total empty speed (kbit/s) ");
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 4, 1, 1);
+ entry5 = gtk_entry_new();
+ g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_cumulemptyspeed);
+ gtk_entry_set_text(GTK_ENTRY(entry5), label_text);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry5, 1, 4, 1, 1);
+
+ gtk_widget_show (grid);
+
+ /* button row */
+ hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
+ ws_gtk_grid_attach_defaults(GTK_GRID(grid), hbuttonbox, 0, 5, 2, 1);
+ ok_bt = ws_gtk_button_new_from_stock(GTK_STOCK_OK);
+ gtk_container_add (GTK_CONTAINER(hbuttonbox), ok_bt);
+ cancel_bt = ws_gtk_button_new_from_stock(GTK_STOCK_CANCEL);
+ gtk_container_add (GTK_CONTAINER(hbuttonbox), cancel_bt);
+ gtk_widget_set_can_default(cancel_bt, TRUE);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(hbuttonbox), 0);
+
+ g_signal_connect(mcast_params_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(mcast_params_dlg, "destroy", G_CALLBACK(mcast_params_destroy_cb), NULL);
+ g_signal_connect(ok_bt, "clicked", G_CALLBACK(mcast_params_ok_cb), mcast_params_dlg);
+ window_set_cancel_button(mcast_params_dlg, cancel_bt, window_cancel_button_cb);
+
+ /* Attach pointers to needed widgets */
+ g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_1, entry1);
+ g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_2, entry2);
+ g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_3, entry3);
+ g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_4, entry4);
+ g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_5, entry5);
+
+ gtk_widget_show_all(mcast_params_dlg);
+ window_present(mcast_params_dlg);
}
@@ -363,68 +363,68 @@ mcast_on_params(GtkButton *button _U_, gpointer data _U_)
static void
add_to_list_store(mcast_stream_info_t* strinfo)
{
- gchar label_text[256];
- gchar *data[NUM_COLS];
- int i;
- char *savelocale;
-
- /* save the current locale */
- savelocale = g_strdup(setlocale(LC_NUMERIC, NULL));
- /* switch to "C" locale to avoid problems with localized decimal separators
- in g_snprintf("%f") functions */
- setlocale(LC_NUMERIC, "C");
- data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr)));
- data[1] = g_strdup_printf("%u", strinfo->src_port);
- data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr)));
- data[3] = g_strdup_printf("%u", strinfo->dest_port);
- data[4] = g_strdup_printf("%u", strinfo->npackets);
- data[5] = g_strdup_printf("%u /s", strinfo->apackets);
- data[6] = g_strdup_printf("%2.1f Mbps", strinfo->average_bw);
- data[7] = g_strdup_printf("%2.1f Mbps", strinfo->element.maxbw);
- data[8] = g_strdup_printf("%u / %dms", strinfo->element.topburstsize, mcast_stream_burstint);
- data[9] = g_strdup_printf("%u", strinfo->element.numbursts);
- data[10] = g_strdup_printf("%.1f KB", (float)strinfo->element.topbuffusage/1000);
- data[11] = g_strdup_printf("%u", strinfo->element.numbuffalarms);
-
- /* restore previous locale setting */
- setlocale(LC_NUMERIC, savelocale);
- g_free(savelocale);
-
- /* Acquire an iterator */
- gtk_list_store_append(list_store, &list_iter);
-
- /* Fill the new row */
- gtk_list_store_set(list_store, &list_iter,
- MC_COL_SRC_ADDR, data[0],
- MC_COL_SRC_PORT, data[1],
- MC_COL_DST_ADDR, data[2],
- MC_COL_DST_PORT, data[3],
- MC_COL_PACKETS, data[4],
- MC_COL_PPS, data[5],
- MC_COL_AVG_BW, data[6],
- MC_COL_MAX_BW, data[7],
- MC_COL_MAX_BURST, data[8],
- MC_COL_BURST_ALARM, data[9],
- MC_COL_MAX_BUFFER, data[10],
- MC_COL_BUFFER_ALARM, data[11],
- MC_COL_DATA, strinfo,
- -1);
-
- for (i = 0; i < NUM_COLS-1; i++)
- g_free(data[i]);
-
- /* Update the top label with the number of detected streams */
- g_snprintf(label_text, sizeof(label_text),
- "Detected %d Multicast streams, Average Bw: %.1f Mbps Max Bw: %.1f Mbps Max burst: %d / %dms Max buffer: %.1f KB",
- ++streams_nb,
- mcaststream_get_info()->allstreams->average_bw, mcaststream_get_info()->allstreams->element.maxbw,
- mcaststream_get_info()->allstreams->element.topburstsize, mcast_stream_burstint,
- (float)(mcaststream_get_info()->allstreams->element.topbuffusage)/1000);
- gtk_label_set_text(GTK_LABEL(top_label), label_text);
-
- g_snprintf(label_text, sizeof(label_text), "\nBurst int: %u ms Burst alarm: %u pps Buffer alarm: %u Bytes Stream empty speed: %u Kbps Total empty speed: %u Kbps\n",
- mcast_stream_burstint, mcast_stream_trigger, mcast_stream_bufferalarm, mcast_stream_emptyspeed, mcast_stream_cumulemptyspeed);
- gtk_label_set_text(GTK_LABEL(label_par), label_text);
+ gchar label_text[256];
+ gchar *data[NUM_COLS];
+ int i;
+ char *savelocale;
+
+ /* save the current locale */
+ savelocale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ /* switch to "C" locale to avoid problems with localized decimal separators
+ in g_snprintf("%f") functions */
+ setlocale(LC_NUMERIC, "C");
+ data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr)));
+ data[1] = g_strdup_printf("%u", strinfo->src_port);
+ data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr)));
+ data[3] = g_strdup_printf("%u", strinfo->dest_port);
+ data[4] = g_strdup_printf("%u", strinfo->npackets);
+ data[5] = g_strdup_printf("%u /s", strinfo->apackets);
+ data[6] = g_strdup_printf("%2.1f Mbps", strinfo->average_bw);
+ data[7] = g_strdup_printf("%2.1f Mbps", strinfo->element.maxbw);
+ data[8] = g_strdup_printf("%u / %dms", strinfo->element.topburstsize, mcast_stream_burstint);
+ data[9] = g_strdup_printf("%u", strinfo->element.numbursts);
+ data[10] = g_strdup_printf("%.1f KB", (float)strinfo->element.topbuffusage/1000);
+ data[11] = g_strdup_printf("%u", strinfo->element.numbuffalarms);
+
+ /* restore previous locale setting */
+ setlocale(LC_NUMERIC, savelocale);
+ g_free(savelocale);
+
+ /* Acquire an iterator */
+ gtk_list_store_append(list_store, &list_iter);
+
+ /* Fill the new row */
+ gtk_list_store_set(list_store, &list_iter,
+ MC_COL_SRC_ADDR, data[0],
+ MC_COL_SRC_PORT, data[1],
+ MC_COL_DST_ADDR, data[2],
+ MC_COL_DST_PORT, data[3],
+ MC_COL_PACKETS, data[4],
+ MC_COL_PPS, data[5],
+ MC_COL_AVG_BW, data[6],
+ MC_COL_MAX_BW, data[7],
+ MC_COL_MAX_BURST, data[8],
+ MC_COL_BURST_ALARM, data[9],
+ MC_COL_MAX_BUFFER, data[10],
+ MC_COL_BUFFER_ALARM, data[11],
+ MC_COL_DATA, strinfo,
+ -1);
+
+ for (i = 0; i < NUM_COLS-1; i++)
+ g_free(data[i]);
+
+ /* Update the top label with the number of detected streams */
+ g_snprintf(label_text, sizeof(label_text),
+ "Detected %d Multicast streams, Average Bw: %.1f Mbps Max Bw: %.1f Mbps Max burst: %d / %dms Max buffer: %.1f KB",
+ ++streams_nb,
+ mcaststream_get_info()->allstreams->average_bw, mcaststream_get_info()->allstreams->element.maxbw,
+ mcaststream_get_info()->allstreams->element.topburstsize, mcast_stream_burstint,
+ (float)(mcaststream_get_info()->allstreams->element.topbuffusage)/1000);
+ gtk_label_set_text(GTK_LABEL(top_label), label_text);
+
+ g_snprintf(label_text, sizeof(label_text), "\nBurst int: %u ms Burst alarm: %u pps Buffer alarm: %u Bytes Stream empty speed: %u Kbps Total empty speed: %u Kbps\n",
+ mcast_stream_burstint, mcast_stream_trigger, mcast_stream_bufferalarm, mcast_stream_emptyspeed, mcast_stream_cumulemptyspeed);
+ gtk_label_set_text(GTK_LABEL(label_par), label_text);
}
/****************************************************************************/
@@ -432,204 +432,204 @@ add_to_list_store(mcast_stream_info_t* strinfo)
static void
create_list_view(void)
{
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeSortable *sortable;
- GtkTreeView *list_view;
- GtkTreeSelection *selection;
-
- /* Create the store */
- list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */
- G_TYPE_STRING, /* Source address */
- G_TYPE_STRING, /* Source port */
- G_TYPE_STRING, /* Destination address */
- G_TYPE_STRING, /* Destination port */
- G_TYPE_STRING, /* Packets */
- G_TYPE_STRING, /* Packets per second */
- G_TYPE_STRING, /* Average bandwidth */
- G_TYPE_STRING, /* Max. bandwidth */
- G_TYPE_STRING, /* Max. burst */
- G_TYPE_STRING, /* Burst alarms */
- G_TYPE_STRING, /* Max. buffers */
- G_TYPE_STRING, /* Buffer alarms */
- G_TYPE_POINTER /* Data */
- );
-
- /* Create a view */
- list_w = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
-
- list_view = GTK_TREE_VIEW(list_w);
- sortable = GTK_TREE_SORTABLE(list_store);
-
- /* Speed up the list display */
- gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
-
- /* Setup the sortable columns */
- gtk_tree_sortable_set_sort_column_id(sortable, MC_COL_SRC_ADDR, GTK_SORT_ASCENDING);
- gtk_tree_view_set_headers_clickable(list_view, FALSE);
-
- /* The view now holds a reference. We can get rid of our own reference */
- g_object_unref(G_OBJECT(list_store));
-
- /*
- * Create the first column packet, associating the "text" attribute of the
- * cell_renderer to the first column of the model
- */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Src IP addr", renderer,
- "text", MC_COL_SRC_ADDR,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_ADDR);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 100);
- /* Add the column to the view. */
- gtk_tree_view_append_column(list_view, column);
-
- /* Source port */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Src port", renderer,
- "text", MC_COL_SRC_PORT,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_PORT);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Destination address */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Dst IP addr", renderer,
- "text", MC_COL_DST_ADDR,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_ADDR);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 100);
- gtk_tree_view_append_column(list_view, column);
-
- /* Destination port */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Dst port", renderer,
- "text", MC_COL_DST_PORT,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_PORT);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Packets */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Packets", renderer,
- "text", MC_COL_PACKETS,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_PACKETS);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Packets/s */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Packets/s", renderer,
- "text", MC_COL_PPS,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_PPS);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 90);
- gtk_tree_view_append_column(list_view, column);
-
- /* Average bandwidth */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Avg Bw", renderer,
- "text", MC_COL_AVG_BW,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_AVG_BW);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 70);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Max. bandwidth */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Max Bw", renderer,
- "text", MC_COL_MAX_BW,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BW);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 70);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Max. bursts */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Max bursts", renderer,
- "text", MC_COL_MAX_BURST,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BURST);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 70);
- gtk_tree_view_column_set_fixed_width(column, 100);
- gtk_tree_view_append_column(list_view, column);
-
- /* Burst alarms*/
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Burst alarms", renderer,
- "text", MC_COL_BURST_ALARM,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_BURST_ALARM);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 90);
- gtk_tree_view_column_set_fixed_width(column, 110);
- gtk_tree_view_append_column(list_view, column);
-
- /* Max. buffers */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Max buffers", renderer,
- "text", MC_COL_MAX_BUFFER,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BUFFER);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 90);
- gtk_tree_view_column_set_fixed_width(column, 100);
- gtk_tree_view_append_column(list_view, column);
-
- /* Buffer alarms */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Buffer alarms", renderer,
- "text", MC_COL_BUFFER_ALARM,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, MC_COL_BUFFER_ALARM);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 90);
- gtk_tree_view_column_set_fixed_width(column, 120);
- gtk_tree_view_append_column(list_view, column);
-
- /* Now enable the sorting of each column */
- gtk_tree_view_set_rules_hint(list_view, TRUE);
- gtk_tree_view_set_headers_clickable(list_view, TRUE);
-
- /* Setup the selection handler */
- selection = gtk_tree_view_get_selection(list_view);
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
-
- g_signal_connect(G_OBJECT(selection), "changed", /* (un)select_row */
- G_CALLBACK(mcaststream_on_select_row),
- NULL);
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeSortable *sortable;
+ GtkTreeView *list_view;
+ GtkTreeSelection *selection;
+
+ /* Create the store */
+ list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */
+ G_TYPE_STRING, /* Source address */
+ G_TYPE_STRING, /* Source port */
+ G_TYPE_STRING, /* Destination address */
+ G_TYPE_STRING, /* Destination port */
+ G_TYPE_STRING, /* Packets */
+ G_TYPE_STRING, /* Packets per second */
+ G_TYPE_STRING, /* Average bandwidth */
+ G_TYPE_STRING, /* Max. bandwidth */
+ G_TYPE_STRING, /* Max. burst */
+ G_TYPE_STRING, /* Burst alarms */
+ G_TYPE_STRING, /* Max. buffers */
+ G_TYPE_STRING, /* Buffer alarms */
+ G_TYPE_POINTER /* Data */
+ );
+
+ /* Create a view */
+ list_w = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
+
+ list_view = GTK_TREE_VIEW(list_w);
+ sortable = GTK_TREE_SORTABLE(list_store);
+
+ /* Speed up the list display */
+ gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
+
+ /* Setup the sortable columns */
+ gtk_tree_sortable_set_sort_column_id(sortable, MC_COL_SRC_ADDR, GTK_SORT_ASCENDING);
+ gtk_tree_view_set_headers_clickable(list_view, FALSE);
+
+ /* The view now holds a reference. We can get rid of our own reference */
+ g_object_unref(G_OBJECT(list_store));
+
+ /*
+ * Create the first column packet, associating the "text" attribute of the
+ * cell_renderer to the first column of the model
+ */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Src IP addr", renderer,
+ "text", MC_COL_SRC_ADDR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_ADDR);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ /* Add the column to the view. */
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Source port */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Src port", renderer,
+ "text", MC_COL_SRC_PORT,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_PORT);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Destination address */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Dst IP addr", renderer,
+ "text", MC_COL_DST_ADDR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_ADDR);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Destination port */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Dst port", renderer,
+ "text", MC_COL_DST_PORT,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_PORT);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Packets */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Packets", renderer,
+ "text", MC_COL_PACKETS,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_PACKETS);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Packets/s */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Packets/s", renderer,
+ "text", MC_COL_PPS,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_PPS);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 90);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Average bandwidth */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Avg Bw", renderer,
+ "text", MC_COL_AVG_BW,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_AVG_BW);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 70);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Max. bandwidth */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Max Bw", renderer,
+ "text", MC_COL_MAX_BW,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BW);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 70);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Max. bursts */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Max bursts", renderer,
+ "text", MC_COL_MAX_BURST,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BURST);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 70);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Burst alarms*/
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Burst alarms", renderer,
+ "text", MC_COL_BURST_ALARM,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_BURST_ALARM);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 90);
+ gtk_tree_view_column_set_fixed_width(column, 110);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Max. buffers */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Max buffers", renderer,
+ "text", MC_COL_MAX_BUFFER,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BUFFER);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 90);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Buffer alarms */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Buffer alarms", renderer,
+ "text", MC_COL_BUFFER_ALARM,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, MC_COL_BUFFER_ALARM);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 90);
+ gtk_tree_view_column_set_fixed_width(column, 120);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Now enable the sorting of each column */
+ gtk_tree_view_set_rules_hint(list_view, TRUE);
+ gtk_tree_view_set_headers_clickable(list_view, TRUE);
+
+ /* Setup the selection handler */
+ selection = gtk_tree_view_get_selection(list_view);
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+
+ g_signal_connect(G_OBJECT(selection), "changed", /* (un)select_row */
+ G_CALLBACK(mcaststream_on_select_row),
+ NULL);
}
@@ -639,90 +639,90 @@ create_list_view(void)
static void
mcaststream_dlg_create(void)
{
- GtkWidget *mcaststream_dlg_w;
- GtkWidget *main_vb;
- GtkWidget *scrolledwindow;
- GtkWidget *hbuttonbox;
- /*GtkWidget *bt_unselect;*/
- GtkWidget *bt_params;
- GtkWidget *bt_close;
+ GtkWidget *mcaststream_dlg_w;
+ GtkWidget *main_vb;
+ GtkWidget *scrolledwindow;
+ GtkWidget *hbuttonbox;
+ /*GtkWidget *bt_unselect;*/
+ GtkWidget *bt_params;
+ GtkWidget *bt_close;
- gchar *title_name_ptr;
- gchar *win_name;
+ gchar *title_name_ptr;
+ gchar *win_name;
- title_name_ptr = cf_get_display_name(&cfile);
- win_name = g_strdup_printf("%s - UDP Multicast Streams", title_name_ptr);
- g_free(title_name_ptr);
- mcaststream_dlg_w = dlg_window_new(win_name);
+ title_name_ptr = cf_get_display_name(&cfile);
+ win_name = g_strdup_printf("%s - UDP Multicast Streams", title_name_ptr);
+ g_free(title_name_ptr);
+ mcaststream_dlg_w = dlg_window_new(win_name);
- gtk_window_set_default_size(GTK_WINDOW(mcaststream_dlg_w), 1150, 400);
+ gtk_window_set_default_size(GTK_WINDOW(mcaststream_dlg_w), 1150, 400);
- main_vb = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE);
- gtk_container_add(GTK_CONTAINER(mcaststream_dlg_w), main_vb);
- gtk_container_set_border_width (GTK_CONTAINER (main_vb), 12);
+ main_vb = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE);
+ gtk_container_add(GTK_CONTAINER(mcaststream_dlg_w), main_vb);
+ gtk_container_set_border_width (GTK_CONTAINER (main_vb), 12);
- top_label = gtk_label_new ("Detected 0 Multicast streams");
- gtk_box_pack_start (GTK_BOX (main_vb), top_label, FALSE, FALSE, 8);
+ top_label = gtk_label_new ("Detected 0 Multicast streams");
+ gtk_box_pack_start (GTK_BOX (main_vb), top_label, FALSE, FALSE, 8);
- scrolledwindow = scrolled_window_new (NULL, NULL);
- gtk_box_pack_start (GTK_BOX (main_vb), scrolledwindow, TRUE, TRUE, 0);
+ scrolledwindow = scrolled_window_new (NULL, NULL);
+ gtk_box_pack_start (GTK_BOX (main_vb), scrolledwindow, TRUE, TRUE, 0);
- create_list_view();
- gtk_container_add(GTK_CONTAINER(scrolledwindow), list_w);
+ create_list_view();
+ gtk_container_add(GTK_CONTAINER(scrolledwindow), list_w);
- gtk_widget_show(mcaststream_dlg_w);
+ gtk_widget_show(mcaststream_dlg_w);
- label_fwd = gtk_label_new (FWD_LABEL_TEXT);
- gtk_box_pack_start (GTK_BOX (main_vb), label_fwd, FALSE, FALSE, 0);
+ label_fwd = gtk_label_new (FWD_LABEL_TEXT);
+ gtk_box_pack_start (GTK_BOX (main_vb), label_fwd, FALSE, FALSE, 0);
- label_par = gtk_label_new (PAR_LABEL_TEXT);
- gtk_box_pack_start (GTK_BOX (main_vb), label_par, FALSE, FALSE, 0);
+ label_par = gtk_label_new (PAR_LABEL_TEXT);
+ gtk_box_pack_start (GTK_BOX (main_vb), label_par, FALSE, FALSE, 0);
- /* button row */
- hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
- gtk_box_pack_start (GTK_BOX (main_vb), hbuttonbox, FALSE, FALSE, 0);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox), 0);
+ /* button row */
+ hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
+ gtk_box_pack_start (GTK_BOX (main_vb), hbuttonbox, FALSE, FALSE, 0);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing (GTK_BOX (hbuttonbox), 0);
- /*bt_unselect = gtk_button_new_with_label ("Unselect");
- gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect);
- gtk_widget_set_tooltip_text (bt_unselect, "Undo stream selection");*/
+ /*bt_unselect = gtk_button_new_with_label ("Unselect");
+ gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect);
+ gtk_widget_set_tooltip_text (bt_unselect, "Undo stream selection");*/
- bt_params = gtk_button_new_with_label ("Set parameters");
- gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_params);
- gtk_widget_set_tooltip_text (bt_params, "Set buffer, limit and speed parameters");
+ bt_params = gtk_button_new_with_label ("Set parameters");
+ gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_params);
+ gtk_widget_set_tooltip_text (bt_params, "Set buffer, limit and speed parameters");
- bt_filter = gtk_button_new_with_label ("Prepare Filter");
- gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
- gtk_widget_set_tooltip_text (bt_filter, "Prepare a display filter of the selected stream");
+ bt_filter = gtk_button_new_with_label ("Prepare Filter");
+ gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
+ gtk_widget_set_tooltip_text (bt_filter, "Prepare a display filter of the selected stream");
- bt_close = ws_gtk_button_new_from_stock(GTK_STOCK_CLOSE);
- gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close);
- gtk_widget_set_tooltip_text (bt_close, "Close this dialog");
- gtk_widget_set_can_default(bt_close, TRUE);
+ bt_close = ws_gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close);
+ gtk_widget_set_tooltip_text (bt_close, "Close this dialog");
+ gtk_widget_set_can_default(bt_close, TRUE);
- /*g_signal_connect(bt_unselect, "clicked", G_CALLBACK(mcaststream_on_unselect), NULL);*/
- g_signal_connect(bt_params, "clicked", G_CALLBACK(mcast_on_params), NULL);
- g_signal_connect(bt_filter, "clicked", G_CALLBACK(mcaststream_on_filter), NULL);
- window_set_cancel_button(mcaststream_dlg_w, bt_close, window_cancel_button_cb);
+ /*g_signal_connect(bt_unselect, "clicked", G_CALLBACK(mcaststream_on_unselect), NULL);*/
+ g_signal_connect(bt_params, "clicked", G_CALLBACK(mcast_on_params), NULL);
+ g_signal_connect(bt_filter, "clicked", G_CALLBACK(mcaststream_on_filter), NULL);
+ window_set_cancel_button(mcaststream_dlg_w, bt_close, window_cancel_button_cb);
- g_signal_connect(mcaststream_dlg_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(mcaststream_dlg_w, "destroy", G_CALLBACK(mcaststream_on_destroy), NULL);
+ g_signal_connect(mcaststream_dlg_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(mcaststream_dlg_w, "destroy", G_CALLBACK(mcaststream_on_destroy), NULL);
- gtk_widget_show_all(mcaststream_dlg_w);
- window_present(mcaststream_dlg_w);
+ gtk_widget_show_all(mcaststream_dlg_w);
+ window_present(mcaststream_dlg_w);
- mcaststream_on_unselect(NULL, NULL);
+ mcaststream_on_unselect(NULL, NULL);
- mcast_stream_dlg = mcaststream_dlg_w;
+ mcast_stream_dlg = mcaststream_dlg_w;
- g_free(win_name);
+ g_free(win_name);
}
/****************************************************************************/
-/* PUBLIC */
+/* PUBLIC */
/****************************************************************************/
/****************************************************************************/
@@ -731,21 +731,21 @@ mcaststream_dlg_create(void)
void
mcaststream_dlg_update(GList *list)
{
- if (mcast_stream_dlg != NULL) {
- gtk_list_store_clear(list_store);
- streams_nb = 0;
+ if (mcast_stream_dlg != NULL) {
+ gtk_list_store_clear(list_store);
+ streams_nb = 0;
- list = g_list_first(list);
- while (list)
- {
- add_to_list_store((mcast_stream_info_t*)(list->data));
- list = g_list_next(list);
- }
+ list = g_list_first(list);
+ while (list)
+ {
+ add_to_list_store((mcast_stream_info_t*)(list->data));
+ list = g_list_next(list);
+ }
- mcaststream_on_unselect(NULL, NULL);
- }
+ mcaststream_on_unselect(NULL, NULL);
+ }
- last_list = list;
+ last_list = list;
}
@@ -755,19 +755,19 @@ mcaststream_dlg_update(GList *list)
void
mcaststream_dlg_show(GList *list)
{
- if (mcast_stream_dlg != NULL) {
- /* There's already a dialog box; reactivate it. */
- reactivate_window(mcast_stream_dlg);
- /* Another list since last call? */
- if (list != last_list) {
- mcaststream_dlg_update(list);
- }
- }
- else {
- /* Create and show the dialog box */
- mcaststream_dlg_create();
- mcaststream_dlg_update(list);
- }
+ if (mcast_stream_dlg != NULL) {
+ /* There's already a dialog box; reactivate it. */
+ reactivate_window(mcast_stream_dlg);
+ /* Another list since last call? */
+ if (list != last_list) {
+ mcaststream_dlg_update(list);
+ }
+ }
+ else {
+ /* Create and show the dialog box */
+ mcaststream_dlg_create();
+ mcaststream_dlg_update(list);
+ }
}
@@ -776,16 +776,16 @@ mcaststream_dlg_show(GList *list)
void
mcaststream_launch(GtkAction *action _U_, gpointer user_data _U_)
{
- /* Register the tap listener */
- register_tap_listener_mcast_stream();
+ /* Register the tap listener */
+ register_tap_listener_mcast_stream();
- /* Scan for Mcast streams (redissect all packets) */
- mcaststream_scan();
+ /* Scan for Mcast streams (redissect all packets) */
+ mcaststream_scan();
- /* Show the dialog box with the list of streams */
- mcaststream_dlg_show(mcaststream_get_info()->strinfo_list);
+ /* Show the dialog box with the list of streams */
+ mcaststream_dlg_show(mcaststream_get_info()->strinfo_list);
- /* Tap listener will be removed and cleaned up in mcaststream_on_destroy */
+ /* Tap listener will be removed and cleaned up in mcaststream_on_destroy */
}
/****************************************************************************/
@@ -800,9 +800,9 @@ register_tap_listener_mcast_stream_dlg(void)
* Local variables:
* c-basic-offset: 4
* tab-width: 8
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=8 noexpandtab:
- * :indentSize=4:tabSize=8:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/
diff --git a/ui/gtk/rtp_stream_dlg.c b/ui/gtk/rtp_stream_dlg.c
index ae89d5f10c..41c43cc841 100644
--- a/ui/gtk/rtp_stream_dlg.c
+++ b/ui/gtk/rtp_stream_dlg.c
@@ -100,53 +100,53 @@ enum
/****************************************************************************/
static void save_stream_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_)
{
- /* Note that we no longer have a Save voice info dialog box. */
- rtpstream_save_dlg = NULL;
+ /* Note that we no longer have a Save voice info dialog box. */
+ rtpstream_save_dlg = NULL;
}
/****************************************************************************/
/* save in a file */
static gboolean save_stream_ok_cb(GtkWidget *ok_bt _U_, gpointer fs)
{
- gchar *g_dest;
-
- if (!selected_stream_fwd) {
- return TRUE;
- }
-
- g_dest = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs));
-
- /* Perhaps the user specified a directory instead of a file.
- Check whether they did. */
- if (test_for_directory(g_dest) == EISDIR) {
- /* It's a directory - set the file selection box to display it. */
- set_last_open_dir(g_dest);
- g_free(g_dest);
- file_selection_set_current_folder((GtkWidget *)fs, get_last_open_dir());
- gtk_file_chooser_set_current_name((GtkFileChooser *)fs, "");
- return FALSE;
- }
-
-#if 0 /* GtkFileChooser/gtk_dialog_run currently being used. */
- /* So: Leaving the dialog box displayed after popping-up an */
- /* alert box won't work. */
- /*
- * Don't dismiss the dialog box if the save operation fails.
- */
- if (!rtpstream_save(selected_stream_fwd, g_dest)) {
- g_free(g_dest);
- return;
- }
- g_free(g_dest);
- window_destroy(GTK_WIDGET(rtpstream_save_dlg));
- return;
+ gchar *g_dest;
+
+ if (!selected_stream_fwd) {
+ return TRUE;
+ }
+
+ g_dest = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs));
+
+ /* Perhaps the user specified a directory instead of a file.
+ Check whether they did. */
+ if (test_for_directory(g_dest) == EISDIR) {
+ /* It's a directory - set the file selection box to display it. */
+ set_last_open_dir(g_dest);
+ g_free(g_dest);
+ file_selection_set_current_folder((GtkWidget *)fs, get_last_open_dir());
+ gtk_file_chooser_set_current_name((GtkFileChooser *)fs, "");
+ return FALSE;
+ }
+
+#if 0 /* GtkFileChooser/gtk_dialog_run currently being used. */
+ /* So: Leaving the dialog box displayed after popping-up an */
+ /* alert box won't work. */
+ /*
+ * Don't dismiss the dialog box if the save operation fails.
+ */
+ if (!rtpstream_save(selected_stream_fwd, g_dest)) {
+ g_free(g_dest);
+ return;
+ }
+ g_free(g_dest);
+ window_destroy(GTK_WIDGET(rtpstream_save_dlg));
+ return;
#else
- /* Dialog box needs to be always destroyed. Return TRUE */
- /* so that caller will destroy the dialog box. */
- /* See comment under rtpstream_on_save. */
- rtpstream_save(selected_stream_fwd, g_dest);
- g_free(g_dest);
- return TRUE;
+ /* Dialog box needs to be always destroyed. Return TRUE */
+ /* so that caller will destroy the dialog box. */
+ /* See comment under rtpstream_on_save. */
+ rtpstream_save(selected_stream_fwd, g_dest);
+ g_free(g_dest);
+ return TRUE;
#endif
}
@@ -157,18 +157,18 @@ static gboolean save_stream_ok_cb(GtkWidget *ok_bt _U_, gpointer fs)
static void
rtpstream_on_destroy(GObject *object _U_, gpointer user_data _U_)
{
- /* Remove the stream tap listener */
- remove_tap_listener_rtp_stream();
+ /* Remove the stream tap listener */
+ remove_tap_listener_rtp_stream();
- /* Is there a save voice window open? */
- if (rtpstream_save_dlg != NULL)
- window_destroy(rtpstream_save_dlg);
+ /* Is there a save voice window open? */
+ if (rtpstream_save_dlg != NULL)
+ window_destroy(rtpstream_save_dlg);
- /* Clean up memory used by stream tap */
- rtpstream_reset((rtpstream_tapinfo_t *)rtpstream_get_info());
+ /* Clean up memory used by stream tap */
+ rtpstream_reset((rtpstream_tapinfo_t *)rtpstream_get_info());
- /* Note that we no longer have a "RTP Streams" dialog box. */
- rtp_stream_dlg = NULL;
+ /* Note that we no longer have a "RTP Streams" dialog box. */
+ rtp_stream_dlg = NULL;
}
@@ -176,117 +176,117 @@ rtpstream_on_destroy(GObject *object _U_, gpointer user_data _U_)
static void
rtpstream_on_unselect(GtkButton *button _U_, gpointer user_data _U_)
{
- GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
- gtk_tree_selection_unselect_all(selection);
+ GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ gtk_tree_selection_unselect_all(selection);
- selected_stream_fwd = NULL;
- selected_stream_rev = NULL;
- gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
- gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT);
+ selected_stream_fwd = NULL;
+ selected_stream_rev = NULL;
+ gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
+ gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT);
}
/****************************************************************************/
static gint rtp_stream_info_cmp_reverse(gconstpointer aa, gconstpointer bb)
{
- const struct _rtp_stream_info* a = (const struct _rtp_stream_info *)aa;
- const struct _rtp_stream_info* b = (const struct _rtp_stream_info *)bb;
-
- if (a==NULL || b==NULL)
- return 1;
- if ((ADDRESSES_EQUAL(&(a->src_addr), &(b->dest_addr)))
- && (a->src_port == b->dest_port)
- && (ADDRESSES_EQUAL(&(a->dest_addr), &(b->src_addr)))
- && (a->dest_port == b->src_port))
- return 0;
- else
- return 1;
+ const struct _rtp_stream_info* a = (const struct _rtp_stream_info *)aa;
+ const struct _rtp_stream_info* b = (const struct _rtp_stream_info *)bb;
+
+ if (a==NULL || b==NULL)
+ return 1;
+ if ((ADDRESSES_EQUAL(&(a->src_addr), &(b->dest_addr)))
+ && (a->src_port == b->dest_port)
+ && (ADDRESSES_EQUAL(&(a->dest_addr), &(b->src_addr)))
+ && (a->dest_port == b->src_port))
+ return 0;
+ else
+ return 1;
}
/****************************************************************************/
static void
-rtpstream_on_findrev(GtkButton *button _U_, gpointer user_data _U_)
+rtpstream_on_findrev(GtkButton *button _U_, gpointer user_data _U_)
{
- GtkTreeSelection *selection;
- GList *path_list;
- GList *path_list_item = NULL;
- GtkTreePath *path = NULL;
- GtkTreePath *path_fwd = NULL;
- GtkTreePath *path_rev = NULL;
- GtkTreeIter iter;
- rtp_stream_info_t *stream = NULL;
- gboolean found_it = FALSE;
-
- if (selected_stream_fwd==NULL)
- return;
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
- path_list = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- if (path_list) {
- path_list_item = g_list_first(path_list);
- path = (GtkTreePath *)(path_list_item->data);
- }
-
- if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
- if (stream == selected_stream_fwd) {
- path_fwd = path;
- }
- if (stream == selected_stream_rev) {
- path_rev = path;
- }
- }
-
- path = NULL;
- if (path_list_item) {
- path_list_item = g_list_next(path_list_item);
- if (path_list_item)
- path = (GtkTreePath *)(path_list_item->data);
- }
-
- if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
- if (stream == selected_stream_fwd) {
- path_fwd = path;
- }
- if (stream == selected_stream_rev) {
- path_rev = path;
- }
- }
-
- /* Find it from the forward stream on */
- gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path_fwd);
- while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
- if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) {
- found_it = TRUE;
- break;
- }
- };
-
- if (!found_it) {
- /* If we're not done yet, restart at the beginning */
- gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
- do {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
- if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) {
- found_it = TRUE;
- break;
- }
- if (stream == selected_stream_fwd)
- break;
- } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter));
- }
-
- if (found_it) {
- if (path_rev)
- gtk_tree_selection_unselect_path(selection, path_rev);
- gtk_tree_selection_select_iter(selection, &iter);
- }
-
- g_list_foreach(path_list, (GFunc)gtk_tree_path_free, NULL);
- g_list_free(path_list);
+ GtkTreeSelection *selection;
+ GList *path_list;
+ GList *path_list_item = NULL;
+ GtkTreePath *path = NULL;
+ GtkTreePath *path_fwd = NULL;
+ GtkTreePath *path_rev = NULL;
+ GtkTreeIter iter;
+ rtp_stream_info_t *stream = NULL;
+ gboolean found_it = FALSE;
+
+ if (selected_stream_fwd==NULL)
+ return;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+ path_list = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+ if (path_list) {
+ path_list_item = g_list_first(path_list);
+ path = (GtkTreePath *)(path_list_item->data);
+ }
+
+ if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
+ if (stream == selected_stream_fwd) {
+ path_fwd = path;
+ }
+ if (stream == selected_stream_rev) {
+ path_rev = path;
+ }
+ }
+
+ path = NULL;
+ if (path_list_item) {
+ path_list_item = g_list_next(path_list_item);
+ if (path_list_item)
+ path = (GtkTreePath *)(path_list_item->data);
+ }
+
+ if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
+ if (stream == selected_stream_fwd) {
+ path_fwd = path;
+ }
+ if (stream == selected_stream_rev) {
+ path_rev = path;
+ }
+ }
+
+ /* Find it from the forward stream on */
+ gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path_fwd);
+ while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
+ if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) {
+ found_it = TRUE;
+ break;
+ }
+ };
+
+ if (!found_it) {
+ /* If we're not done yet, restart at the beginning */
+ gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
+ do {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1);
+ if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) {
+ found_it = TRUE;
+ break;
+ }
+ if (stream == selected_stream_fwd)
+ break;
+ } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter));
+ }
+
+ if (found_it) {
+ if (path_rev)
+ gtk_tree_selection_unselect_path(selection, path_rev);
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+
+ g_list_foreach(path_list, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free(path_list);
}
@@ -296,10 +296,10 @@ static void
rtpstream_on_goto (GtkButton *button _U_,
gpointer user_data _U_)
{
- if (selected_stream_fwd)
- {
- cf_goto_frame(&cfile, selected_stream_fwd->first_frame_num);
- }
+ if (selected_stream_fwd)
+ {
+ cf_goto_frame(&cfile, selected_stream_fwd->first_frame_num);
+ }
}
*/
@@ -309,62 +309,62 @@ static void
rtpstream_on_save(GtkButton *button _U_, gpointer data _U_)
{
/* XX - not needed?
- rtpstream_tapinfo_t* tapinfo = data;
+ rtpstream_tapinfo_t* tapinfo = data;
*/
- if (!selected_stream_fwd) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
- "Please select a forward stream");
- return;
- }
+ if (!selected_stream_fwd) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+ "Please select a forward stream");
+ return;
+ }
#if 0 /* XXX: GtkFileChooserDialog/gtk_dialog_run currently being used is effectively modal so this is not req'd */
- if (rtpstream_save_dlg != NULL) {
- /* There's already a Save dialog box; reactivate it. */
- reactivate_window(rtpstream_save_dlg);
- return;
- }
+ if (rtpstream_save_dlg != NULL) {
+ /* There's already a Save dialog box; reactivate it. */
+ reactivate_window(rtpstream_save_dlg);
+ return;
+ }
#endif
- rtpstream_save_dlg = gtk_file_chooser_dialog_new(
- "Wireshark: Save selected stream in rtpdump ('-F dump') format",
- GTK_WINDOW(rtp_stream_dlg), GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(rtpstream_save_dlg), TRUE);
+ rtpstream_save_dlg = gtk_file_chooser_dialog_new(
+ "Wireshark: Save selected stream in rtpdump ('-F dump') format",
+ GTK_WINDOW(rtp_stream_dlg), GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(rtpstream_save_dlg), TRUE);
- g_signal_connect(rtpstream_save_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(rtpstream_save_dlg, "destroy", G_CALLBACK(save_stream_destroy_cb), NULL);
+ g_signal_connect(rtpstream_save_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(rtpstream_save_dlg, "destroy", G_CALLBACK(save_stream_destroy_cb), NULL);
- gtk_widget_show(rtpstream_save_dlg);
- window_present(rtpstream_save_dlg);
+ gtk_widget_show(rtpstream_save_dlg);
+ window_present(rtpstream_save_dlg);
#if 0
- if (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT){
- save_stream_ok_cb(rtpstream_save_dlg, rtpstream_save_dlg);
- }else{
- window_destroy(rtpstream_save_dlg);
- }
+ if (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT){
+ save_stream_ok_cb(rtpstream_save_dlg, rtpstream_save_dlg);
+ }else{
+ window_destroy(rtpstream_save_dlg);
+ }
#endif
- /* "Run" the GtkFileChooserDialog. */
- /* Upon exit: If "Accept" run the OK callback. */
- /* If the OK callback returns with a FALSE status, re-run the dialog.*/
- /* If not accept (ie: cancel) destroy the window. */
- /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */
- /* return with a TRUE status so that the dialog window will be destroyed. */
- /* Trying to re-run the dialog after popping up an alert box will not work */
- /* since the user will not be able to dismiss the alert box. */
- /* The (somewhat unfriendly) effect: the user must re-invoke the */
- /* GtkFileChooserDialog whenever the OK callback pops up an alert box. */
- /* */
- /* ToDo: use GtkFileChooserWidget in a dialog window instead of */
- /* GtkFileChooserDialog. */
- while (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT) {
- if (save_stream_ok_cb(NULL, rtpstream_save_dlg)) {
- break; /* we're done */
- }
- }
- window_destroy(rtpstream_save_dlg);
+ /* "Run" the GtkFileChooserDialog. */
+ /* Upon exit: If "Accept" run the OK callback. */
+ /* If the OK callback returns with a FALSE status, re-run the dialog.*/
+ /* If not accept (ie: cancel) destroy the window. */
+ /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */
+ /* return with a TRUE status so that the dialog window will be destroyed. */
+ /* Trying to re-run the dialog after popping up an alert box will not work */
+ /* since the user will not be able to dismiss the alert box. */
+ /* The (somewhat unfriendly) effect: the user must re-invoke the */
+ /* GtkFileChooserDialog whenever the OK callback pops up an alert box. */
+ /* */
+ /* ToDo: use GtkFileChooserWidget in a dialog window instead of */
+ /* GtkFileChooserDialog. */
+ while (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT) {
+ if (save_stream_ok_cb(NULL, rtpstream_save_dlg)) {
+ break; /* we're done */
+ }
+ }
+ window_destroy(rtpstream_save_dlg);
}
@@ -372,9 +372,9 @@ rtpstream_on_save(GtkButton *button _U_, gpointer data _U_)
static void
rtpstream_on_mark(GtkButton *button _U_, gpointer user_data _U_)
{
- if (selected_stream_fwd==NULL && selected_stream_rev==NULL)
- return;
- rtpstream_mark(selected_stream_fwd, selected_stream_rev);
+ if (selected_stream_fwd==NULL && selected_stream_rev==NULL)
+ return;
+ rtpstream_mark(selected_stream_fwd, selected_stream_rev);
}
@@ -382,67 +382,67 @@ rtpstream_on_mark(GtkButton *button _U_, gpointer user_data _U_)
static void
rtpstream_on_filter(GtkButton *button _U_, gpointer user_data _U_)
{
- gchar *filter_string = NULL;
- gchar *filter_string_fwd = NULL;
- gchar *filter_string_rev = NULL;
- gchar ip_version[3];
-
- if (selected_stream_fwd==NULL && selected_stream_rev==NULL)
- return;
-
- if (selected_stream_fwd)
- {
- if (selected_stream_fwd->src_addr.type==AT_IPv6) {
- g_strlcpy(ip_version,"v6",sizeof(ip_version));
- } else {
- ip_version[0] = '\0';
- }
- filter_string_fwd = g_strdup_printf(
- "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)",
- ip_version,
- ep_address_to_str(&(selected_stream_fwd->src_addr)),
- selected_stream_fwd->src_port,
- ip_version,
- ep_address_to_str(&(selected_stream_fwd->dest_addr)),
- selected_stream_fwd->dest_port,
- selected_stream_fwd->ssrc);
-
- filter_string = filter_string_fwd;
- }
-
- if (selected_stream_rev)
- {
- if (selected_stream_rev->src_addr.type==AT_IPv6) {
- g_strlcpy(ip_version,"v6",sizeof(ip_version));
- } else {
- ip_version[0] = '\0';
- }
- filter_string_rev = g_strdup_printf(
- "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)",
- ip_version,
- ep_address_to_str(&(selected_stream_rev->src_addr)),
- selected_stream_rev->src_port,
- ip_version,
- ep_address_to_str(&(selected_stream_rev->dest_addr)),
- selected_stream_rev->dest_port,
- selected_stream_rev->ssrc);
-
- filter_string = filter_string_rev;
- }
-
- if ((selected_stream_fwd) && (selected_stream_rev))
- {
- filter_string = g_strdup_printf("%s || %s", filter_string_fwd, filter_string_rev);
- g_free(filter_string_fwd);
- g_free(filter_string_rev);
- }
-
- gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string);
- g_free(filter_string);
+ gchar *filter_string = NULL;
+ gchar *filter_string_fwd = NULL;
+ gchar *filter_string_rev = NULL;
+ gchar ip_version[3];
+
+ if (selected_stream_fwd==NULL && selected_stream_rev==NULL)
+ return;
+
+ if (selected_stream_fwd)
+ {
+ if (selected_stream_fwd->src_addr.type==AT_IPv6) {
+ g_strlcpy(ip_version,"v6",sizeof(ip_version));
+ } else {
+ ip_version[0] = '\0';
+ }
+ filter_string_fwd = g_strdup_printf(
+ "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)",
+ ip_version,
+ ep_address_to_str(&(selected_stream_fwd->src_addr)),
+ selected_stream_fwd->src_port,
+ ip_version,
+ ep_address_to_str(&(selected_stream_fwd->dest_addr)),
+ selected_stream_fwd->dest_port,
+ selected_stream_fwd->ssrc);
+
+ filter_string = filter_string_fwd;
+ }
+
+ if (selected_stream_rev)
+ {
+ if (selected_stream_rev->src_addr.type==AT_IPv6) {
+ g_strlcpy(ip_version,"v6",sizeof(ip_version));
+ } else {
+ ip_version[0] = '\0';
+ }
+ filter_string_rev = g_strdup_printf(
+ "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)",
+ ip_version,
+ ep_address_to_str(&(selected_stream_rev->src_addr)),
+ selected_stream_rev->src_port,
+ ip_version,
+ ep_address_to_str(&(selected_stream_rev->dest_addr)),
+ selected_stream_rev->dest_port,
+ selected_stream_rev->ssrc);
+
+ filter_string = filter_string_rev;
+ }
+
+ if ((selected_stream_fwd) && (selected_stream_rev))
+ {
+ filter_string = g_strdup_printf("%s || %s", filter_string_fwd, filter_string_rev);
+ g_free(filter_string_fwd);
+ g_free(filter_string_rev);
+ }
+
+ gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string);
+ g_free(filter_string);
/*
- main_filter_packets(&cfile, filter_string, FALSE);
- rtpstream_dlg_update(rtpstream_get_info()->strinfo_list);
+ main_filter_packets(&cfile, filter_string, FALSE);
+ rtpstream_dlg_update(rtpstream_get_info()->strinfo_list);
*/
}
@@ -451,104 +451,104 @@ rtpstream_on_filter(GtkButton *button _U_, gpointer user_data _U_)
static void
rtpstream_on_copy_as_csv(GtkWindow *win _U_, gpointer data _U_)
{
- GtkTreeViewColumn *column;
- const gchar *title;
- GtkTreeIter iter;
- guint i,j;
- gchar *table_entry;
- guint table_entry_uint;
-
- GString *CSV_str;
- GtkClipboard *cb;
-
- CSV_str = g_string_sized_new(240*(1+streams_nb));
- /* Add the column headers to the CSV data */
- for (j=0; j<NUM_COLS-1; j++) {
- column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), j);
- title = gtk_tree_view_column_get_title(column);
- g_string_append_printf(CSV_str, "\"%s\"", title);
- if (j<NUM_COLS-2) g_string_append(CSV_str, ",");
- }
- g_string_append(CSV_str,"\n");
-
- /* Add the column values to the CSV data */
- if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) {
- for (i=0; i<streams_nb; i++) {
- for (j=0; j<NUM_COLS-1; j++) {
- if (j == RTP_COL_SRC_PORT || j == RTP_COL_DST_PORT || j == RTP_COL_PACKETS) {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry_uint, -1);
- g_string_append_printf(CSV_str, "\"%u\"", table_entry_uint);
- } else {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry, -1);
- g_string_append_printf(CSV_str, "\"%s\"", table_entry);
- g_free(table_entry);
- }
- if (j<NUM_COLS-2) g_string_append(CSV_str,",");
- }
- g_string_append(CSV_str,"\n");
- gtk_tree_model_iter_next (GTK_TREE_MODEL(list_store),&iter);
- }
- }
-
- /* Now that we have the CSV data, copy it into the default clipboard */
- cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text(cb, CSV_str->str, (gint)CSV_str->len);
- g_string_free(CSV_str, TRUE);
+ GtkTreeViewColumn *column;
+ const gchar *title;
+ GtkTreeIter iter;
+ guint i,j;
+ gchar *table_entry;
+ guint table_entry_uint;
+
+ GString *CSV_str;
+ GtkClipboard *cb;
+
+ CSV_str = g_string_sized_new(240*(1+streams_nb));
+ /* Add the column headers to the CSV data */
+ for (j=0; j<NUM_COLS-1; j++) {
+ column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), j);
+ title = gtk_tree_view_column_get_title(column);
+ g_string_append_printf(CSV_str, "\"%s\"", title);
+ if (j<NUM_COLS-2) g_string_append(CSV_str, ",");
+ }
+ g_string_append(CSV_str,"\n");
+
+ /* Add the column values to the CSV data */
+ if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) {
+ for (i=0; i<streams_nb; i++) {
+ for (j=0; j<NUM_COLS-1; j++) {
+ if (j == RTP_COL_SRC_PORT || j == RTP_COL_DST_PORT || j == RTP_COL_PACKETS) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry_uint, -1);
+ g_string_append_printf(CSV_str, "\"%u\"", table_entry_uint);
+ } else {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry, -1);
+ g_string_append_printf(CSV_str, "\"%s\"", table_entry);
+ g_free(table_entry);
+ }
+ if (j<NUM_COLS-2) g_string_append(CSV_str,",");
+ }
+ g_string_append(CSV_str,"\n");
+ gtk_tree_model_iter_next (GTK_TREE_MODEL(list_store),&iter);
+ }
+ }
+
+ /* Now that we have the CSV data, copy it into the default clipboard */
+ cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text(cb, CSV_str->str, (gint)CSV_str->len);
+ g_string_free(CSV_str, TRUE);
}
/****************************************************************************/
static void
rtpstream_on_analyse(GtkButton *button _U_, gpointer user_data _U_)
{
- address src_fwd;
- guint32 port_src_fwd = 0;
- address dst_fwd;
- guint32 port_dst_fwd = 0;
- guint32 ssrc_fwd = 0;
- address src_rev;
- guint32 port_src_rev = 0;
- address dst_rev;
- guint32 port_dst_rev = 0;
- guint32 ssrc_rev = 0;
-
- if (!(selected_stream_fwd || selected_stream_rev))
- {
- return;
- }
-
- SET_ADDRESS(&src_fwd,AT_NONE,0,NULL);
- SET_ADDRESS(&dst_fwd,AT_NONE,0,NULL);
- SET_ADDRESS(&src_rev,AT_NONE,0,NULL);
- SET_ADDRESS(&dst_rev,AT_NONE,0,NULL);
-
- if (selected_stream_fwd) {
- COPY_ADDRESS(&(src_fwd), &(selected_stream_fwd->src_addr));
- port_src_fwd = selected_stream_fwd->src_port;
- COPY_ADDRESS(&(dst_fwd), &(selected_stream_fwd->dest_addr));
- port_dst_fwd = selected_stream_fwd->dest_port;
- ssrc_fwd = selected_stream_fwd->ssrc;
- }
-
- if (selected_stream_rev) {
- COPY_ADDRESS(&(src_rev), &(selected_stream_rev->src_addr));
- port_src_rev = selected_stream_rev->src_port;
- COPY_ADDRESS(&(dst_rev), &(selected_stream_rev->dest_addr));
- port_dst_rev = selected_stream_rev->dest_port;
- ssrc_rev = selected_stream_rev->ssrc;
- }
-
- rtp_analysis(
- &src_fwd,
- port_src_fwd,
- &dst_fwd,
- port_dst_fwd,
- ssrc_fwd,
- &src_rev,
- port_src_rev,
- &dst_rev,
- port_dst_rev,
- ssrc_rev
- );
+ address src_fwd;
+ guint32 port_src_fwd = 0;
+ address dst_fwd;
+ guint32 port_dst_fwd = 0;
+ guint32 ssrc_fwd = 0;
+ address src_rev;
+ guint32 port_src_rev = 0;
+ address dst_rev;
+ guint32 port_dst_rev = 0;
+ guint32 ssrc_rev = 0;
+
+ if (!(selected_stream_fwd || selected_stream_rev))
+ {
+ return;
+ }
+
+ SET_ADDRESS(&src_fwd,AT_NONE,0,NULL);
+ SET_ADDRESS(&dst_fwd,AT_NONE,0,NULL);
+ SET_ADDRESS(&src_rev,AT_NONE,0,NULL);
+ SET_ADDRESS(&dst_rev,AT_NONE,0,NULL);
+
+ if (selected_stream_fwd) {
+ COPY_ADDRESS(&(src_fwd), &(selected_stream_fwd->src_addr));
+ port_src_fwd = selected_stream_fwd->src_port;
+ COPY_ADDRESS(&(dst_fwd), &(selected_stream_fwd->dest_addr));
+ port_dst_fwd = selected_stream_fwd->dest_port;
+ ssrc_fwd = selected_stream_fwd->ssrc;
+ }
+
+ if (selected_stream_rev) {
+ COPY_ADDRESS(&(src_rev), &(selected_stream_rev->src_addr));
+ port_src_rev = selected_stream_rev->src_port;
+ COPY_ADDRESS(&(dst_rev), &(selected_stream_rev->dest_addr));
+ port_dst_rev = selected_stream_rev->dest_port;
+ ssrc_rev = selected_stream_rev->ssrc;
+ }
+
+ rtp_analysis(
+ &src_fwd,
+ port_src_fwd,
+ &dst_fwd,
+ port_dst_fwd,
+ ssrc_fwd,
+ &src_rev,
+ port_src_rev,
+ &dst_rev,
+ port_dst_rev,
+ ssrc_rev
+ );
}
@@ -558,111 +558,111 @@ rtpstream_on_analyse(GtkButton *button _U_, gpointer user_data _U_)
static gboolean
rtpstream_view_selection_func(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer userdata _U_)
{
- GtkTreeIter iter;
- gint nb_selected;
- rtp_stream_info_t* selected_stream;
- gboolean result = TRUE;
- gchar label_text[80];
-
- /* Logic
- * nb_selected path_currently_selected forward reverse action result
- * 0 must be false any any assign forward true
- * 1 true match any delete forward true
- * 1 true other any delete reverse true
- * 1 false match any invalid true
- * 1 false other none assign reverse true
- * 1 false other any assign forward true
- * 2 true match any delete forward path_currently_selected
- * 2 true other match delete reverse path_currently_selected
- * 2 true other other invalid path_currently_selected
- * 2 false match any invalid path_currently_selected
- * 2 false any match invalid path_currently_selected
- * 2 false other other assign reverse path_currently_selected
- * >2 any any any invalid path_currently_selected
- */
-
- nb_selected = gtk_tree_selection_count_selected_rows(selection);
- if (gtk_tree_model_get_iter(model, &iter, path)) {
- gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &selected_stream, -1);
-
- switch (nb_selected)
- {
- case 0:
- {
- if (path_currently_selected)
- g_print("Select: He, we've got a selected path while none is selected?\n");
- else
- selected_stream_fwd = selected_stream;
- break;
- }
- case 1:
- {
- if (path_currently_selected)
- if (selected_stream == selected_stream_fwd)
- selected_stream_fwd = NULL;
- else
- selected_stream_rev = NULL;
- else
- if (selected_stream == selected_stream_fwd)
- g_print("Select: He, this can't be. 1 not selected but equal to fwd\n");
- else
- if (selected_stream_rev)
- selected_stream_fwd = selected_stream;
- else
- selected_stream_rev = selected_stream;
- break;
- }
- case 2:
- {
- if (path_currently_selected) {
- if (selected_stream == selected_stream_fwd)
- selected_stream_fwd = NULL;
- else if (selected_stream == selected_stream_rev)
- selected_stream_rev = NULL;
- else
- g_print("Select: He, this can't be. 2 selected but not equal to fwd or rev\n");
- }
- result = path_currently_selected;
- break;
- }
- default:
- {
- g_print("Select: He, we're getting a too high selection count\n");
- result = path_currently_selected;
- }
- }
- }
-
- if (selected_stream_fwd) {
- g_snprintf(label_text, sizeof(label_text), "Forward: %s:%u -> %s:%u, SSRC=0x%X",
- ep_address_to_display(&(selected_stream_fwd->src_addr)),
- selected_stream_fwd->src_port,
- ep_address_to_display(&(selected_stream_fwd->dest_addr)),
- selected_stream_fwd->dest_port,
- selected_stream_fwd->ssrc
- );
- gtk_label_set_text(GTK_LABEL(label_fwd), label_text);
- } else {
- if (selected_stream_rev)
- gtk_label_set_text(GTK_LABEL(label_fwd), FWD_ONLY_LABEL_TEXT);
- else
- gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
- }
-
- if (selected_stream_rev) {
- g_snprintf(label_text, sizeof(label_text), "Reverse: %s:%u -> %s:%u, SSRC=0x%X",
- ep_address_to_display(&(selected_stream_rev->src_addr)),
- selected_stream_rev->src_port,
- ep_address_to_display(&(selected_stream_rev->dest_addr)),
- selected_stream_rev->dest_port,
- selected_stream_rev->ssrc
- );
- gtk_label_set_text(GTK_LABEL(label_rev), label_text);
- } else {
- gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT);
- }
-
- return result;
+ GtkTreeIter iter;
+ gint nb_selected;
+ rtp_stream_info_t* selected_stream;
+ gboolean result = TRUE;
+ gchar label_text[80];
+
+ /* Logic
+ * nb_selected path_currently_selected forward reverse action result
+ * 0 must be false any any assign forward true
+ * 1 true match any delete forward true
+ * 1 true other any delete reverse true
+ * 1 false match any invalid true
+ * 1 false other none assign reverse true
+ * 1 false other any assign forward true
+ * 2 true match any delete forward path_currently_selected
+ * 2 true other match delete reverse path_currently_selected
+ * 2 true other other invalid path_currently_selected
+ * 2 false match any invalid path_currently_selected
+ * 2 false any match invalid path_currently_selected
+ * 2 false other other assign reverse path_currently_selected
+ * >2 any any any invalid path_currently_selected
+ */
+
+ nb_selected = gtk_tree_selection_count_selected_rows(selection);
+ if (gtk_tree_model_get_iter(model, &iter, path)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &selected_stream, -1);
+
+ switch (nb_selected)
+ {
+ case 0:
+ {
+ if (path_currently_selected)
+ g_print("Select: He, we've got a selected path while none is selected?\n");
+ else
+ selected_stream_fwd = selected_stream;
+ break;
+ }
+ case 1:
+ {
+ if (path_currently_selected)
+ if (selected_stream == selected_stream_fwd)
+ selected_stream_fwd = NULL;
+ else
+ selected_stream_rev = NULL;
+ else
+ if (selected_stream == selected_stream_fwd)
+ g_print("Select: He, this can't be. 1 not selected but equal to fwd\n");
+ else
+ if (selected_stream_rev)
+ selected_stream_fwd = selected_stream;
+ else
+ selected_stream_rev = selected_stream;
+ break;
+ }
+ case 2:
+ {
+ if (path_currently_selected) {
+ if (selected_stream == selected_stream_fwd)
+ selected_stream_fwd = NULL;
+ else if (selected_stream == selected_stream_rev)
+ selected_stream_rev = NULL;
+ else
+ g_print("Select: He, this can't be. 2 selected but not equal to fwd or rev\n");
+ }
+ result = path_currently_selected;
+ break;
+ }
+ default:
+ {
+ g_print("Select: He, we're getting a too high selection count\n");
+ result = path_currently_selected;
+ }
+ }
+ }
+
+ if (selected_stream_fwd) {
+ g_snprintf(label_text, sizeof(label_text), "Forward: %s:%u -> %s:%u, SSRC=0x%X",
+ ep_address_to_display(&(selected_stream_fwd->src_addr)),
+ selected_stream_fwd->src_port,
+ ep_address_to_display(&(selected_stream_fwd->dest_addr)),
+ selected_stream_fwd->dest_port,
+ selected_stream_fwd->ssrc
+ );
+ gtk_label_set_text(GTK_LABEL(label_fwd), label_text);
+ } else {
+ if (selected_stream_rev)
+ gtk_label_set_text(GTK_LABEL(label_fwd), FWD_ONLY_LABEL_TEXT);
+ else
+ gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
+ }
+
+ if (selected_stream_rev) {
+ g_snprintf(label_text, sizeof(label_text), "Reverse: %s:%u -> %s:%u, SSRC=0x%X",
+ ep_address_to_display(&(selected_stream_rev->src_addr)),
+ selected_stream_rev->src_port,
+ ep_address_to_display(&(selected_stream_rev->dest_addr)),
+ selected_stream_rev->dest_port,
+ selected_stream_rev->ssrc
+ );
+ gtk_label_set_text(GTK_LABEL(label_rev), label_text);
+ } else {
+ gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT);
+ }
+
+ return result;
}
/****************************************************************************/
@@ -672,82 +672,82 @@ rtpstream_view_selection_func(GtkTreeSelection *selection, GtkTreeModel *model,
static void
add_to_list_store(rtp_stream_info_t* strinfo)
{
- gchar label_text[256];
- gchar *data[NUM_COLS];
- guint32 expected;
- gint32 lost;
- double perc;
- int i;
- char *savelocale;
-
- /* save the current locale */
- savelocale = g_strdup(setlocale(LC_NUMERIC, NULL));
- /* switch to "C" locale to avoid problems with localized decimal separators
- in g_snprintf("%f") functions */
- setlocale(LC_NUMERIC, "C");
-
- data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr)));
- data[1] = NULL;
- data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr)));
- data[3] = NULL;
- data[4] = g_strdup_printf("0x%X", strinfo->ssrc);
- if (strinfo->info_payload_type_str != NULL) {
- data[5] = g_strdup(strinfo->info_payload_type_str);
- } else {
- data[5] = g_strdup(val_to_str_ext(strinfo->pt, &rtp_payload_type_short_vals_ext,
- "Unknown (%u)"));
- }
- data[6] = NULL;
-
- expected = (strinfo->rtp_stats.stop_seq_nr + strinfo->rtp_stats.cycles*65536)
- - strinfo->rtp_stats.start_seq_nr + 1;
- lost = expected - strinfo->rtp_stats.total_nr;
- if (expected) {
- perc = (double)(lost*100)/(double)expected;
- } else {
- perc = 0;
- }
- data[7] = g_strdup_printf("%d (%.1f%%)", lost, perc);
- data[8] = NULL;
- data[9] = NULL;
- data[10] = NULL;
- if (strinfo->problem)
- data[11] = g_strdup("X");
- else
- data[11] = g_strdup("");
-
- /* restore previous locale setting */
- setlocale(LC_NUMERIC, savelocale);
- g_free(savelocale);
-
- /* Acquire an iterator */
- gtk_list_store_append(list_store, &list_iter);
-
- /* Fill the new row */
- gtk_list_store_set(list_store, &list_iter,
- RTP_COL_SRC_ADDR, data[0],
- RTP_COL_SRC_PORT, strinfo->src_port,
- RTP_COL_DST_ADDR, data[2],
- RTP_COL_DST_PORT, strinfo->dest_port,
- RTP_COL_SSRC, data[4],
- RTP_COL_PAYLOAD, data[5],
- RTP_COL_PACKETS, strinfo->npackets,
- RTP_COL_LOST, data[7],
- RTP_COL_MAX_DELTA, strinfo->rtp_stats.max_delta,
- RTP_COL_MAX_JITTER, strinfo->rtp_stats.max_jitter,
- RTP_COL_MEAN_JITTER, strinfo->rtp_stats.mean_jitter,
- RTP_COL_PROBLEM, data[11],
- RTP_COL_DATA, strinfo,
- -1);
-
- for (i = 0; i < NUM_COLS-1; i++)
- g_free(data[i]);
-
- /* Update the top label with the number of detected streams */
- g_snprintf(label_text, sizeof(label_text),
- "Detected %d RTP streams. Choose one for forward and reverse direction for analysis",
- ++streams_nb);
- gtk_label_set_text(GTK_LABEL(top_label), label_text);
+ gchar label_text[256];
+ gchar *data[NUM_COLS];
+ guint32 expected;
+ gint32 lost;
+ double perc;
+ int i;
+ char *savelocale;
+
+ /* save the current locale */
+ savelocale = g_strdup(setlocale(LC_NUMERIC, NULL));
+ /* switch to "C" locale to avoid problems with localized decimal separators
+ in g_snprintf("%f") functions */
+ setlocale(LC_NUMERIC, "C");
+
+ data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr)));
+ data[1] = NULL;
+ data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr)));
+ data[3] = NULL;
+ data[4] = g_strdup_printf("0x%X", strinfo->ssrc);
+ if (strinfo->info_payload_type_str != NULL) {
+ data[5] = g_strdup(strinfo->info_payload_type_str);
+ } else {
+ data[5] = g_strdup(val_to_str_ext(strinfo->pt, &rtp_payload_type_short_vals_ext,
+ "Unknown (%u)"));
+ }
+ data[6] = NULL;
+
+ expected = (strinfo->rtp_stats.stop_seq_nr + strinfo->rtp_stats.cycles*65536)
+ - strinfo->rtp_stats.start_seq_nr + 1;
+ lost = expected - strinfo->rtp_stats.total_nr;
+ if (expected) {
+ perc = (double)(lost*100)/(double)expected;
+ } else {
+ perc = 0;
+ }
+ data[7] = g_strdup_printf("%d (%.1f%%)", lost, perc);
+ data[8] = NULL;
+ data[9] = NULL;
+ data[10] = NULL;
+ if (strinfo->problem)
+ data[11] = g_strdup("X");
+ else
+ data[11] = g_strdup("");
+
+ /* restore previous locale setting */
+ setlocale(LC_NUMERIC, savelocale);
+ g_free(savelocale);
+
+ /* Acquire an iterator */
+ gtk_list_store_append(list_store, &list_iter);
+
+ /* Fill the new row */
+ gtk_list_store_set(list_store, &list_iter,
+ RTP_COL_SRC_ADDR, data[0],
+ RTP_COL_SRC_PORT, strinfo->src_port,
+ RTP_COL_DST_ADDR, data[2],
+ RTP_COL_DST_PORT, strinfo->dest_port,
+ RTP_COL_SSRC, data[4],
+ RTP_COL_PAYLOAD, data[5],
+ RTP_COL_PACKETS, strinfo->npackets,
+ RTP_COL_LOST, data[7],
+ RTP_COL_MAX_DELTA, strinfo->rtp_stats.max_delta,
+ RTP_COL_MAX_JITTER, strinfo->rtp_stats.max_jitter,
+ RTP_COL_MEAN_JITTER, strinfo->rtp_stats.mean_jitter,
+ RTP_COL_PROBLEM, data[11],
+ RTP_COL_DATA, strinfo,
+ -1);
+
+ for (i = 0; i < NUM_COLS-1; i++)
+ g_free(data[i]);
+
+ /* Update the top label with the number of detected streams */
+ g_snprintf(label_text, sizeof(label_text),
+ "Detected %d RTP streams. Choose one for forward and reverse direction for analysis",
+ ++streams_nb);
+ gtk_label_set_text(GTK_LABEL(top_label), label_text);
}
/****************************************************************************/
@@ -755,202 +755,202 @@ add_to_list_store(rtp_stream_info_t* strinfo)
static void
create_list_view(void)
{
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeSortable *sortable;
- GtkTreeView *list_view;
- GtkTreeSelection *selection;
-
- /* Create the store */
- list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */
- G_TYPE_STRING, /* Source address */
- G_TYPE_UINT, /* Source port */
- G_TYPE_STRING, /* Destination address */
- G_TYPE_UINT, /* Destination port */
- G_TYPE_STRING, /* SSRC */
- G_TYPE_STRING, /* Payload */
- G_TYPE_UINT, /* Packets */
- G_TYPE_STRING, /* Lost */
- G_TYPE_DOUBLE, /* Max. delta */
- G_TYPE_DOUBLE, /* Max. jitter */
- G_TYPE_DOUBLE, /* Mean jitter */
- G_TYPE_STRING, /* Problem */
- G_TYPE_POINTER /* Data */
- );
-
- /* Create a view */
- list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
-
- list_view = GTK_TREE_VIEW(list);
- sortable = GTK_TREE_SORTABLE(list_store);
-
- /* Speed up the list display */
- gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
-
- /* Setup the sortable columns */
- gtk_tree_sortable_set_sort_column_id(sortable, RTP_COL_SRC_ADDR, GTK_SORT_ASCENDING);
- gtk_tree_view_set_headers_clickable(list_view, FALSE);
-
- /* The view now holds a reference. We can get rid of our own reference */
- g_object_unref(G_OBJECT(list_store));
-
- /*
- * Create the first column packet, associating the "text" attribute of the
- * cell_renderer to the first column of the model
- */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Src addr", renderer,
- "text", RTP_COL_SRC_ADDR,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_ADDR);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 100);
- /* Add the column to the view. */
- gtk_tree_view_append_column(list_view, column);
-
- /* Source port */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Src port", renderer,
- "text", RTP_COL_SRC_PORT,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_PORT);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* Destination address */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Dst addr", renderer,
- "text", RTP_COL_DST_ADDR,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_ADDR);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 100);
- gtk_tree_view_append_column(list_view, column);
-
- /* Destination port */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Dst port", renderer,
- "text", RTP_COL_DST_PORT,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_PORT);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 80);
- gtk_tree_view_append_column(list_view, column);
-
- /* SSRC */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("SSRC", renderer,
- "text", RTP_COL_SSRC,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SSRC);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 70);
- gtk_tree_view_column_set_fixed_width(column, 90);
- gtk_tree_view_append_column(list_view, column);
-
- /* Payload */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Payload", renderer,
- "text", RTP_COL_PAYLOAD,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PAYLOAD);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 80);
- gtk_tree_view_column_set_fixed_width(column, 100);
- gtk_tree_view_append_column(list_view, column);
-
- /* Packets */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Packets", renderer,
- "text", RTP_COL_PACKETS,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PACKETS);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 70);
- gtk_tree_view_append_column(list_view, column);
-
- /* Lost */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Lost", renderer,
- "text", RTP_COL_LOST,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_LOST);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 60);
- gtk_tree_view_column_set_fixed_width(column, 90);
- gtk_tree_view_append_column(list_view, column);
-
- /* Max Delta (ms) */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Max Delta (ms)", renderer,
- "text", RTP_COL_MAX_DELTA,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_DELTA);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 90);
- gtk_tree_view_column_set_fixed_width(column, 130);
- gtk_tree_view_append_column(list_view, column);
-
- /* Max Jitter (ms) */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Max Jitter (ms)", renderer,
- "text", RTP_COL_MAX_JITTER,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_JITTER);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 50);
- gtk_tree_view_column_set_fixed_width(column, 120);
- gtk_tree_view_append_column(list_view, column);
-
- /* Mean Jitter (ms) */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Mean Jitter (ms)", renderer,
- "text", RTP_COL_MEAN_JITTER,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MEAN_JITTER);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 50);
- gtk_tree_view_column_set_fixed_width(column, 130);
- gtk_tree_view_append_column(list_view, column);
-
- /* Problems? */
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Pb?", renderer,
- "text", RTP_COL_PROBLEM,
- NULL);
- gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PROBLEM);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 30);
- gtk_tree_view_column_set_fixed_width(column, 50);
- gtk_tree_view_append_column(list_view, column);
-
- /* Now enable the sorting of each column */
- gtk_tree_view_set_rules_hint(list_view, TRUE);
- gtk_tree_view_set_headers_clickable(list_view, TRUE);
-
- /* Setup the selection handler */
- selection = gtk_tree_view_get_selection(list_view);
-
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
- gtk_tree_selection_set_select_function(selection, rtpstream_view_selection_func, NULL, NULL);
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeSortable *sortable;
+ GtkTreeView *list_view;
+ GtkTreeSelection *selection;
+
+ /* Create the store */
+ list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */
+ G_TYPE_STRING, /* Source address */
+ G_TYPE_UINT, /* Source port */
+ G_TYPE_STRING, /* Destination address */
+ G_TYPE_UINT, /* Destination port */
+ G_TYPE_STRING, /* SSRC */
+ G_TYPE_STRING, /* Payload */
+ G_TYPE_UINT, /* Packets */
+ G_TYPE_STRING, /* Lost */
+ G_TYPE_DOUBLE, /* Max. delta */
+ G_TYPE_DOUBLE, /* Max. jitter */
+ G_TYPE_DOUBLE, /* Mean jitter */
+ G_TYPE_STRING, /* Problem */
+ G_TYPE_POINTER /* Data */
+ );
+
+ /* Create a view */
+ list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
+
+ list_view = GTK_TREE_VIEW(list);
+ sortable = GTK_TREE_SORTABLE(list_store);
+
+ /* Speed up the list display */
+ gtk_tree_view_set_fixed_height_mode(list_view, TRUE);
+
+ /* Setup the sortable columns */
+ gtk_tree_sortable_set_sort_column_id(sortable, RTP_COL_SRC_ADDR, GTK_SORT_ASCENDING);
+ gtk_tree_view_set_headers_clickable(list_view, FALSE);
+
+ /* The view now holds a reference. We can get rid of our own reference */
+ g_object_unref(G_OBJECT(list_store));
+
+ /*
+ * Create the first column packet, associating the "text" attribute of the
+ * cell_renderer to the first column of the model
+ */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Src addr", renderer,
+ "text", RTP_COL_SRC_ADDR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_ADDR);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ /* Add the column to the view. */
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Source port */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Src port", renderer,
+ "text", RTP_COL_SRC_PORT,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_PORT);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Destination address */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Dst addr", renderer,
+ "text", RTP_COL_DST_ADDR,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_ADDR);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Destination port */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Dst port", renderer,
+ "text", RTP_COL_DST_PORT,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_PORT);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 80);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* SSRC */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("SSRC", renderer,
+ "text", RTP_COL_SSRC,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SSRC);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 70);
+ gtk_tree_view_column_set_fixed_width(column, 90);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Payload */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Payload", renderer,
+ "text", RTP_COL_PAYLOAD,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PAYLOAD);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 80);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Packets */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Packets", renderer,
+ "text", RTP_COL_PACKETS,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PACKETS);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 70);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Lost */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Lost", renderer,
+ "text", RTP_COL_LOST,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_LOST);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 90);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Max Delta (ms) */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Max Delta (ms)", renderer,
+ "text", RTP_COL_MAX_DELTA,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_DELTA);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 90);
+ gtk_tree_view_column_set_fixed_width(column, 130);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Max Jitter (ms) */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Max Jitter (ms)", renderer,
+ "text", RTP_COL_MAX_JITTER,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_JITTER);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 50);
+ gtk_tree_view_column_set_fixed_width(column, 120);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Mean Jitter (ms) */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Mean Jitter (ms)", renderer,
+ "text", RTP_COL_MEAN_JITTER,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MEAN_JITTER);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 50);
+ gtk_tree_view_column_set_fixed_width(column, 130);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Problems? */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Pb?", renderer,
+ "text", RTP_COL_PROBLEM,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PROBLEM);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 30);
+ gtk_tree_view_column_set_fixed_width(column, 50);
+ gtk_tree_view_append_column(list_view, column);
+
+ /* Now enable the sorting of each column */
+ gtk_tree_view_set_rules_hint(list_view, TRUE);
+ gtk_tree_view_set_headers_clickable(list_view, TRUE);
+
+ /* Setup the selection handler */
+ selection = gtk_tree_view_get_selection(list_view);
+
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
+ gtk_tree_selection_set_select_function(selection, rtpstream_view_selection_func, NULL, NULL);
}
@@ -1068,7 +1068,7 @@ rtpstream_dlg_create (void)
/****************************************************************************/
-/* PUBLIC */
+/* PUBLIC */
/****************************************************************************/
/****************************************************************************/
@@ -1076,21 +1076,21 @@ rtpstream_dlg_create (void)
/* list: pointer to list of rtp_stream_info_t* */
void rtpstream_dlg_update(GList *list_lcl)
{
- if (rtp_stream_dlg != NULL) {
- gtk_list_store_clear(list_store);
- streams_nb = 0;
+ if (rtp_stream_dlg != NULL) {
+ gtk_list_store_clear(list_store);
+ streams_nb = 0;
- list_lcl = g_list_first(list_lcl);
- while (list_lcl)
- {
- add_to_list_store((rtp_stream_info_t*)(list_lcl->data));
- list_lcl = g_list_next(list_lcl);
- }
+ list_lcl = g_list_first(list_lcl);
+ while (list_lcl)
+ {
+ add_to_list_store((rtp_stream_info_t*)(list_lcl->data));
+ list_lcl = g_list_next(list_lcl);
+ }
- rtpstream_on_unselect(NULL, NULL);
- }
+ rtpstream_on_unselect(NULL, NULL);
+ }
- last_list = list_lcl;
+ last_list = list_lcl;
}
@@ -1099,19 +1099,19 @@ void rtpstream_dlg_update(GList *list_lcl)
/* list: pointer to list of rtp_stream_info_t* */
void rtpstream_dlg_show(GList *list_lcl)
{
- if (rtp_stream_dlg != NULL) {
- /* There's already a dialog box; reactivate it. */
- reactivate_window(rtp_stream_dlg);
- /* Another list since last call? */
- if (list_lcl != last_list) {
- rtpstream_dlg_update(list_lcl);
- }
- }
- else {
- /* Create and show the dialog box */
- rtpstream_dlg_create();
- rtpstream_dlg_update(list_lcl);
- }
+ if (rtp_stream_dlg != NULL) {
+ /* There's already a dialog box; reactivate it. */
+ reactivate_window(rtp_stream_dlg);
+ /* Another list since last call? */
+ if (list_lcl != last_list) {
+ rtpstream_dlg_update(list_lcl);
+ }
+ }
+ else {
+ /* Create and show the dialog box */
+ rtpstream_dlg_create();
+ rtpstream_dlg_update(list_lcl);
+ }
}
@@ -1119,16 +1119,16 @@ void rtpstream_dlg_show(GList *list_lcl)
/* entry point when called via the GTK menu */
void rtpstream_launch(GtkAction *action _U_, gpointer user_data _U_)
{
- /* Register the tap listener */
- register_tap_listener_rtp_stream();
+ /* Register the tap listener */
+ register_tap_listener_rtp_stream();
- /* Scan for RTP streams (redissect all packets) */
- rtpstream_scan();
+ /* Scan for RTP streams (redissect all packets) */
+ rtpstream_scan();
- /* Show the dialog box with the list of streams */
- rtpstream_dlg_show(rtpstream_get_info()->strinfo_list);
+ /* Show the dialog box with the list of streams */
+ rtpstream_dlg_show(rtpstream_get_info()->strinfo_list);
- /* Tap listener will be removed and cleaned up in rtpstream_on_destroy */
+ /* Tap listener will be removed and cleaned up in rtpstream_on_destroy */
}
/****************************************************************************/
@@ -1143,9 +1143,9 @@ register_tap_listener_rtp_stream_dlg(void)
* Local variables:
* c-basic-offset: 4
* tab-width: 8
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
* End:
*
- * vi: set shiftwidth=4 tabstop=8 noexpandtab:
- * :indentSize=4:tabSize=8:noTabs=false:
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
*/