[liboping] Re: liboping Perl wrapper

Florian Forster octo<span style="display: none;">.trailing-username</span>(a)<span style="display: none;">leading-domain.</span>verplant.org
Sat Dec 16 12:31:20 CET 2006


Hi,

On Fri, Dec 15, 2006 at 04:05:24PM +0100, Michele Bergonzoni wrote:
> construct, add_host and send work. tcpdump says that this program
> actually pings:

oh, good news :) I've had it that far, but didn't test with `tcpdump'
yet.

> Now I'm entangled with ping_iterator_get_info, which is not so
> entirely trivial.

I think the best bet is to change the Perl-interface somewhat. I think
the easiest way is to export the C-API to Perl and then write a wrapper
around it to give it a more Perly feeling.

The (Perl-)interface could behave somewhat like this:

-- 8< --
  use Net::Oping;

  # if %opts is not empty, `new' will call `set' with this hash
  my $obj = Net::Oping->new (%opts);
  $obj->add ("example.com") or die ($obj->error ());
  $obj->remove ("sample.org") or die ($obj->error ());

  $obj->set
  (
    timeout => 10,
    ttl => 100,
    af => AF_INET,
    data => 'foobar',
    source => '192.168.0.1'
  );

  # $iter if of type Net::Oping::Iterator
  my $iter;
  for ($iter = $obj->iterator (); $iter; $iter = $iter->next ())
  {
    my $host  = $iter->hostname ();
    my $addr  = $iter->address ();
    my $addrf = $iter->address_family ();
    my $delay = $iter->delay ();
    my $seq   = $iter->sequence ();
    my $ident = $iter->ident ();
  }

  # `destroy' is the same as `DESTROY'; *destroy = *DESTROY
  $obj->destroy ();
-- >8 --

The `prefix' of the XS-Functions could be changed from `ping_' to
`ping', so that these ``backend functions'' all start with an
underscore. This would make is easy to distinguish between `_destroy'
(the XS-function) and `destoy' (the Perl-method).

> As time permits, I'm starting to read "man perlguts" and "man perlxs"
> in order to have it return an hash or array of all the possible info
> that it can retrieve.

I guess it's easier to write wrappers around the `ping_setopt' and
`ping_iterator_get_info' functions, e.g.:
-- 8< --
  int _setopt_timeout (pingobj_t *obj, double t)
  {
    return ping_setopt (obj, PING_OPT_TIMEOUT, (void *) &t);
  }

  /* TODO: Can Perl handle dynamically allocated memory? */
  const char *_get_info_hostname (pingobj_iter_t *iter)
  {
    static char buffer[NI_MAXHOST];
    ping_iterator_get_info (iter, PING_INFO_HOSTNAME,
        buffer, NI_MAXHOST);
    return (buffer);
  }
-- >8 --

I'll look into the C-wrappers. Do you have experience with `git'? I'd
push a branch to the repository so you can simply send in patches for
that branch..

Regards,
-octo
-- 
Florian octo Forster
Hacker in training
GnuPG: 0x91523C3D
http://verplant.org/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mailman.verplant.org/pipermail/liboping/attachments/20061216/f79147da/attachment.pgp


More information about the liboping mailing list