[Winpcap-users] linked list problem urgent help needed!

David Chang dchang at fsautomation.com
Mon Apr 24 16:38:17 GMT 2006


I'm a C programmer rather than a C++ programmer, but it sounds like you're 
copying the pointer to the header record rather than the entire struct.

Specifically, does

tail->pkt_header = this->SniffEther->pkt_header;

copy just the pointer to the header or the entire struct?

DC

----- Original Message ----- 
From: "Steve Mc Donnell" <s-mc-d at hotmail.com>
To: <winpcap-users at winpcap.org>
Sent: Monday, April 24, 2006 7:42 AM
Subject: [Winpcap-users] linked list problem urgent help needed!


> I'm having a serious problem using a linked list at the moment. I'm using 
> Visual C++ .NET 2003. When a packet is captured it is added to a linked 
> list, the structure for this is:
> typedef struct packet{
> int packet_number;
>                struct pcap_pkthdr *pkt_header; //points to the header of a 
> packet
>                const u_char *pkt_data; //packet data
> struct packet *next; //pointer to next node in list
> } packet;
>
> the original pkt_header and pkt_data retrieved are part of a class, and 
> these get added to the linked list with this:
>
> //below the packet is added to linked list
> //done even if a real time update is checked
> if(head==NULL)
>        {          //create the first node in the linked list
>          head =new packet;
>          tail=head;
>          tail->next=NULL;
>        }
>        else
>        {
>          tail->next= new packet;
>          tail=tail->next;
>          tail->next=NULL;
>        }
>        tail->packet_number =packet_num++;         //add the packet to 
> linked list
>        tail->pkt_header = this->SniffEther->pkt_header;
>        tail->pkt_data = this->SniffEther->pkt_data;
>
>
> The data is eventually displayed in a listview control. This listview is 
> filled with a function 'fillPacketList(const struct pcap_pkthdr 
> *header,const u_char *pkt_data);' The user is given the option to update 
> the gui in real time or it can be filled when the capture has taken place. 
> When its updated in real time the packet header and data is taken directly 
> from the originals and not from the linked list. To fill the listview 
> after a capture, I loop through each packet in the linked list and pass it 
> to the fillPacketList function with this code:
>
> current = head;
>
> while(current)
> {
> fillPacketList(current->pkt_header,current->pkt_data);
> current=current->next;
> }
>
> When I update the list in real time everything is fine and displays the 
> data correctly, but when I update the listview by using the above code the 
> data from the header is the same for every single packet, they all have 
> the exact same timestamp, length and time to live, yet data taken from 
> pkt_data seems to be correct for each packet!! Saving packets with this:
>
> while(current)
> {
>     pcap_dump((unsigned char *)dumpfile, current->pkt_header, 
> current->pkt_data);
>     current=current->next;
>
> }
>
> Shows the same behaviour when reopened, all packets act as if they have 
> the same header >:(
> Can anyone please help!!
>
> _________________________________________________________________
> Is your PC infected? Get a FREE online computer virus scan from McAfee® 
> Security. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
>
> _______________________________________________
> Winpcap-users mailing list
> Winpcap-users at winpcap.org
> https://www.winpcap.org/mailman/listinfo/winpcap-users
> 



More information about the Winpcap-users mailing list