[Winpcap-users] Compilation Error - Send queues

Gianluca Varenni gianluca.varenni at cacetech.com
Tue May 2 16:45:38 GMT 2006


After I sent the mail, another possible issue came to my mind.

You should *not* include "win32-extensions.h" and "remote-ext.h" directly. Those are private include files. You should just include pcap.h, and add the preprocessor definitions WPCAP and HAVE_REMOTE to automatically include the remote extensions and the win32 winpcap specific extensions.

If you don't define those preprocessor definitions and include those header files directly, you'll end up having linking issues because of some function name decoration issues between C and C++ (long story...)

Have a nice day
GV

  ----- Original Message ----- 
  From: Marta Perez 
  To: winpcap-users at winpcap.org 
  Sent: Tuesday, May 02, 2006 9:19 AM
  Subject: Re: [Winpcap-users] Compilation Error - Send queues


  Thanks Gianluca,
    This morning I made the change you suggested, but then I got all the following errors (and assumed this wasn't right):

  SendQWin32 error LNK2019: unresolved external symbol "int __cdecl pcap_sendqueue_queue(struct pcap_send_queue *,struct pcap_pkthdr const *,unsigned char const *)" ([email protected]@[email protected]@[email protected]@PBE at Z) referenced in function _main
  SendQWin32 error LNK2019: unresolved external symbol "struct pcap_send_queue * __cdecl pcap_sendqueue_alloc(unsigned int)" ([email protected]@[email protected]@I at Z) referenced in function _main
  SendQWin32 error LNK2019: unresolved external symbol "unsigned int __cdecl pcap_sendqueue_transmit(struct pcap *,struct pcap_send_queue *,int)" ([email protected]@[email protected]@[email protected]@H at Z) referenced in function _main
  SendQWin32 error LNK2019: unresolved external symbol "void __cdecl pcap_sendqueue_destroy(struct pcap_send_queue *)" ([email protected]@[email protected]@@Z) referenced in function _main

  I might be totally wrong, but it sounds like I am missing out some #include directives...

  Thanks in advance,
  Marta

  Gianluca Varenni <gianluca.varenni at cacetech.com> wrote:
    Marta,

    it's a known bug in the documentation (due to a "const" qualifier that was added to the prototype of pcap_next_ex(), without reflecting the change to the samples).

    Here is the patch to solve your problem (marked with <------)

    int caplen,
    sync;
    u_int res;
    pcap_send_queue *squeue;
    struct pcap_pkthdr *pktheader;
    const u_char *pktdata;      <------
    /* Check the validity of the command line */
    if (argc <= 2 || argc >= 5)
    {
    usage();
    return 0;
    }

    Have a nice day
    GV




      ----- Original Message ----- 
      From: Marta Perez 
      To: winpcap-users at winpcap.org 
      Sent: Monday, May 01, 2006 7:03 AM
      Subject: [Winpcap-users] Compilation Error - Send queues


      Hello everybody,
         I am having problems with the compilation of the example code found in:
      http://www.winpcap.org/docs/man/html/group__wpcap__tut8.html
      Precisely, the first example  (sendpacket()) is fine; the problem is with send queues' code example. I tried both VS 6.0 and .NET2003. These are the errors I am getting:

      VS6.0:
      error C2664: 'pcap_next_ex' : cannot convert parameter 3 from 'unsigned char ** ' to 'const unsigned char ** '
              Conversion loses qualifiers

      .NET2003:
      error C2664: 'pcap_next_ex' : cannot convert parameter 3 from 'u_char **__w64  ' to 'const u_char ** '

      The code is exactly the one in the tutorial because I usually start by getting the example code to work and then modify what needs to be modified.

      I am really working in .NET2003, but I also tried VS6.0 just to make sure it was not a small mistake I might have overlooked. Any help with be greatly appreciated,
      Marta

      P.S: Just in case, here it is my code

      #include "stdafx.h"
      #include <stdlib.h>
      #include <stdio.h>
      #include <pcap.h>
      #include <Win32-Extensions.h>
      #include <remote-ext.h>
      void usage();
      int _tmain(int argc, _TCHAR* argv[])
      {
      pcap_t *indesc,*outdesc;
      char error[PCAP_ERRBUF_SIZE];
      FILE *capfile;
      int caplen,
      sync;
      u_int res;
      pcap_send_queue *squeue;
      struct pcap_pkthdr *pktheader;
      u_char *pktdata;
      /* Check the validity of the command line */
      if (argc <= 2 || argc >= 5)
      {
      usage();
      return 0;
      }
      /* Retrieve the length of the capture file */
      capfile=fopen(argv[1],"rb");
      if(!capfile){
      printf("Capture file not found!\n");
      return 0;
      }
      fseek(capfile , 0, SEEK_END);
      caplen= ftell(capfile)- sizeof(struct pcap_file_header);
      fclose(capfile);
      /* Chek if the timestamps must be respected */
      if(argc == 4 && argv[3][0] == 's')
      sync = TRUE;
      else
      sync = FALSE;
      /* Open the capture */
      if((indesc = pcap_open_offline(argv[1], error)) == NULL){
      fprintf(stderr,"\nError opening the input file: %s\n", error);
      return 0; 
      }
      /* Open the output adapter */
      if((outdesc = pcap_open_live(argv[2], 100, 1, 1000, error) ) == NULL)
      {
      fprintf(stderr,"\nError opening adapter: %s\n", error);
      return 0;
      }
      /* Check the MAC type */
      if(pcap_datalink(indesc) != pcap_datalink(outdesc)){
      printf("Warning: the datalink of the capture differs from the one of the selected interface.\n");
      printf("Press a key to continue, or CTRL+C to stop.\n");
      getchar();
      }
      /* Allocate a send queue */
      squeue = pcap_sendqueue_alloc(caplen);
      /* Fill the queue with the packets from the file */
      while((res = pcap_next_ex( indesc, &pktheader, &pktdata)) == 1){
      if(pcap_sendqueue_queue(squeue, pktheader, pktdata) == -1){
      printf("Warning: packet buffer too small, not all the packets will be sent.\n");
      break;
      }
      }
      if(res == -1){
      printf("Corrupted input file.\n");
      pcap_sendqueue_destroy(squeue);
      return 0;
      }
      /* Transmit the queue */
      if((res = pcap_sendqueue_transmit(outdesc, squeue, sync)) < squeue->len)
      {
      printf("An error occurred sending the packets: %s. Only %d bytes were sent\n", error, res);
      }
      /* free the send queue */
      pcap_sendqueue_destroy(squeue);
      return 0;
      }
      void usage()
      {
      printf("\nSendcap, sends a libpcap/tcpdump capture file to the net. Copyright (C) 2002 Loris Degioanni.\n");
      printf("\nUsage:\n");
      printf("\t sendcap file_name adapter [s]\n");
      printf("\nParameters:\n");
      printf("\nfile_name: the name of the dump file that will be sent to the network\n");
      printf("\nadapter: the device to use. Use \"WinDump -D\" for a list of valid devices\n");
      printf("\ns: if present, forces the packets to be sent synchronously, i.e. respecting the timestamps in the dump file. This option will work only under Windows NTx.\n\n");
      exit(0);
      }

      __________________________________________________
      Do You Yahoo!?
      Tired of spam? Yahoo! Mail has the best spam protection around 
      http://mail.yahoo.com 

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

      _______________________________________________
      Winpcap-users mailing list
      Winpcap-users at winpcap.org
      https://www.winpcap.org/mailman/listinfo/winpcap-users

    _______________________________________________
    Winpcap-users mailing list
    Winpcap-users at winpcap.org
    https://www.winpcap.org/mailman/listinfo/winpcap-users





------------------------------------------------------------------------------
  Share your photos with the people who matter at Yahoo! Canada Photos


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


  _______________________________________________
  Winpcap-users mailing list
  Winpcap-users at winpcap.org
  https://www.winpcap.org/mailman/listinfo/winpcap-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winpcap.org/pipermail/winpcap-users/attachments/20060502/4f369410/attachment.htm


More information about the Winpcap-users mailing list