In order to make changes (using the tap system) to the RTP plugin I posted some time ago, 2 more questions:
From Jason House: The other way involves populating the pri paramater from the protocol you are trying to tap. ... having a structure that you define a field for what you want to access, and then having that field sent directly to your tap listener. The packet-rpc* should be a good example of that.
1. Is it allowable ("smart" would be better) to change the packet-rtp.c in a way, that when calling tap_queue_packet(rtp_tap, pinfo, *pri) the pri is a structure with information I need (seq.nr, timestemp, ssrc, data,...). That seems to me much faster than doing all the "...g_node_first_child(edt->tree), "g_node_next_sibling(),... " stuff.
2.my code looks something like:
...
rtp_packet(void *prs, packet_info *pinfo, epan_dissect_t *edt _U_, void *pri)
{
printf("in rtp packet\n");
}void gtk_rtp_init(void)
{
if(register_tap_listener("rtp", NULL, NULL, rtp_reset, rtp_packet, rtp_draw)){
printf("ethereal: rtp_init() failed to attach to tap.\n");
exit(1);
}
}void rtp_analyse_cb(GtkWidget *w _U_) {
gtk_rtp_init();
}void
register_tap_listener_gtkrtp(void)
{
register_ethereal_tap("rtp", gtk_rtp_init, NULL, NULL);
}If I first click on the button that calls rtp_analyse_cb() which registers the tap, and than do the capturing or opening a file it works OK (I get the printf statement in rtp_packet() ). But the problem for me is: what if I first do the capturing and would then like to do the analysis. How can I force the "rescaning" of the packets, so that I will get the trigger for the RTP packets? Should I call the file_reload_cmd_cb() which reloads the packets or is there another possibility with taps?
Thanks for further help, Miha.
