Hello Aurelien,
 
Perhaps you can use the "Follow TCP/UDP stream" feature then save the
result.
 
Regarding your idea about having a file setting inside the preferences
it should be possible, but I do not know how to use it properly.
 
Here are some sources I use in my dissector templates to let the users
change the tcp/udp ports range for a specific protocol.
The template is not complete but I hope it can help. I also think it can
be greatly improved but it works as expected.
 
#define VRU201_DEFAULT_RANGE "5000" /* Ports TCP comma separated */
static range_t *global_vru201_tcp_range = NULL;
static range_t *vru201_tcp_range = NULL;
static void reinit_vru201(void);
static void range_delete_vru201_tcp(guint32);
static void range_add_vru201_tcp(guint32);
 
/*--- proto_register_vru201
----------------------------------------------*/
void proto_register_vru201(void)
{
  /* prefs */
  module_t* vru201_module;
 
  /* List of fields */
  static hf_register_info hf[] = {
  #include "packet-vru201-hfarr.c"
  };
 
  /* List of subtrees */
  static gint *ett[] = {
    &ett_vru201,
  #include "packet-vru201-ettarr.c"
  };
 
  /* Register protocol */
  proto_vru201 = proto_register_protocol(PNAME, PSNAME, PFNAME);
  /* Prefs VRU201 */
  vru201_module = prefs_register_protocol(proto_vru201, reinit_vru201);
  range_convert_str(&global_vru201_tcp_range, VRU201_DEFAULT_RANGE,
65535);
  vru201_tcp_range = range_empty();
  prefs_register_range_preference(vru201_module, "tcp.port", "TCP
Ports",
        "TCP Ports range",
        &global_vru201_tcp_range, 65535);
 
  /* Register fields and subtrees */
  proto_register_field_array(proto_vru201, hf, array_length(hf));
  proto_register_subtree_array(ett, array_length(ett));
 
}

/* Register the protocol if the ports list has changed */
static void reinit_vru201(void) {
 range_foreach(vru201_tcp_range, range_delete_vru201_tcp);
 g_free(vru201_tcp_range);
 vru201_tcp_range = range_copy(global_vru201_tcp_range);
 range_foreach(vru201_tcp_range, range_add_vru201_tcp);
}
 
/* Wrapper to remove a port from the dissector */
static void range_delete_vru201_tcp(guint32 port) {
 dissector_delete("tcp.port", port, vru201_handle);
}
 
/* Wrapper to add a port to the dissector */
static void range_add_vru201_tcp(guint32 port) {
 dissector_add("tcp.port", port, vru201_handle);
}
 
/*--- proto_reg_handoff_vru201
-------------------------------------------*/
void proto_reg_handoff_vru201(void) {
 static gboolean inited = FALSE;
 if( !inited ) {
  vru201_handle = create_dissector_handle(dissect_vru201, proto_vru201);
  reinit_vru201();
  inited = TRUE; 
 } 
}
 
Regards,
------------------------------------------ 
Xavier OURCIERE. 
France Telecom R&D

------------------------------------------ 

___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to