From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA19896; Sat, 22 Nov 2003 18:21:21 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id SAA19982 for ; Sat, 22 Nov 2003 18:21:20 +0100 (MET) Received: from smtp.hispeed.ch (mxout.hispeed.ch [62.2.95.247]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id hAMHLJ124442 for ; Sat, 22 Nov 2003 18:21:19 +0100 (MET) Received: from drugphish.ch (dclient80-218-180-83.hispeed.ch [80.218.180.83]) by smtp.hispeed.ch (8.12.6/8.12.6/tornado-1.0) with ESMTP id hAMHLITI032523 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Sat, 22 Nov 2003 18:21:19 +0100 Message-ID: <3FBFB616.80301@drugphish.ch> Date: Sat, 22 Nov 2003 20:16:38 +0100 From: Jonathan Heusser User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030507 X-Accept-Language: en MIME-Version: 1.0 To: caml-list@inria.fr Subject: [Caml-list] camlIDL and callbacks X-Enigmail-Version: 0.75.0.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: multipart/mixed; boundary="------------090508080604080101060907" X-Loop: caml-list@inria.fr X-Spam: no; 0.00; callbacks:01 callbacks:01 callback:01 callback:01 910:99 1333:99 struct:01 char:01 const:01 struct:01 const:01 char:01 idl:01 idl:01 bindings:01 X-Attachments: name="pcap.idl" name="pcap.idl" Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk This is a multi-part message in MIME format. --------------090508080604080101060907 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hello, I'm trying to implement libpcap bindings for ocaml using CamlIDL. Currently, I'm running into trouble with C libpcap functions which are using callbacks. Those are: pcap_loop, pcap_dispatch and indirectly pcap_next (which calls pcap_dispatch) When using e.g. pcap_next in ocaml, defined by the idl code attached, it returns a correct pcap_pkthdr though the call to pcap_dispatch is not working due to the missing callback functionality.. Can anyone give me an idea how to solve such C-to-ocaml callback issues in idl ? thank you for any help, jonathan heusser -- Key fingerprint = 2A55 EB7C B7EA 6336 7767 4A47 910A 307B 1333 BD6C --------------090508080604080101060907 Content-Type: text/plain; name="pcap.idl" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pcap.idl" quote(C, " #include typedef pcap_t *pcap_handle; typedef struct pcap_pkthdr pcap_pkthdr; typedef void (*pcap_callback)(u_char *, const struct pcap_pkthdr *, const u_char *); ") /* type defitions */ /* .............. */ typedef [abstract, ptr] void * pcap_handle; struct timeval { int tv_sec; int tv_usec; }; typedef struct { struct timeval ts; int caplen; int len; } pcap_pkthdr; /* function definitions */ /* .................... */ /* experimental callback handler */ typedef [ptr,mltype("string -> pcap_pkthdr -> string -> unit")] void *pcap_callback; /* tested, OK */ pcap_handle pcap_open_live([in,string] char *dev, [in] int snaplen, [in] int promisc, [in] int to_ms, [in,out,string] char *err); /* tested, OK */ [string] char *pcap_lookupdev([in,out,string] char *errbuf); /* broken ! */ [string] unsigned char *pcap_next([in] pcap_handle p, [in,out] pcap_pkthdr * h) quote(call, "_res = (char*) pcap_next(p,h); "); /* tested, OK */ void pcap_close(pcap_handle p); /* broken ! */ int pcap_loop([in] pcap_handle p, [in] int cnt, [in] pcap_callback callback, [in,string] char *user); int pcap_dispatch([in] pcap_handle p, [in] int cnt, [in] pcap_callback callback, [in,string] char *user); --------------090508080604080101060907-- ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners