1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <string.h>
8 #include <errno.h>
9 #include <assert.h>
10 #include <netdb.h> /* NI_MAXHOST */
11 #include <oping.h>
13 MODULE = Net::Oping PACKAGE = Net::Oping
15 PROTOTYPES: DISABLE
17 pingobj_t *
18 _ping_construct ()
19 CODE:
20 RETVAL = ping_construct ();
21 OUTPUT:
22 RETVAL
24 void
25 _ping_destroy (obj);
26 pingobj_t *obj
27 CODE:
28 ping_destroy(obj);
30 int
31 _ping_setopt_timeout (obj, timeout)
32 pingobj_t *obj
33 double timeout
34 CODE:
35 RETVAL = ping_setopt (obj, PING_OPT_TIMEOUT, &timeout);
36 OUTPUT:
37 RETVAL
39 int
40 _ping_setopt_source (obj, addr)
41 pingobj_t *obj
42 char *addr
43 CODE:
44 RETVAL = ping_setopt (obj, PING_OPT_SOURCE, addr);
45 OUTPUT:
46 RETVAL
48 int
49 _ping_host_add (obj, host);
50 pingobj_t *obj
51 const char *host
52 CODE:
53 RETVAL = ping_host_add (obj, host);
54 OUTPUT:
55 RETVAL
57 int
58 _ping_host_remove (obj, host)
59 pingobj_t *obj
60 const char *host
61 CODE:
62 RETVAL = ping_host_remove (obj, host);
63 OUTPUT:
64 RETVAL
66 int
67 _ping_send (obj)
68 pingobj_t *obj
69 CODE:
70 RETVAL=ping_send (obj);
71 OUTPUT:
72 RETVAL
74 pingobj_iter_t *
75 _ping_iterator_get (obj)
76 pingobj_t *obj
77 CODE:
78 RETVAL = ping_iterator_get (obj);
79 OUTPUT:
80 RETVAL
82 pingobj_iter_t *
83 _ping_iterator_next (iter)
84 pingobj_iter_t *iter
85 CODE:
86 RETVAL = ping_iterator_next (iter);
87 OUTPUT:
88 RETVAL
90 double
91 _ping_iterator_get_latency (iter)
92 pingobj_iter_t *iter
93 CODE:
94 double tmp;
95 size_t tmp_size;
96 int status;
98 RETVAL = -1.0;
100 tmp_size = sizeof (tmp);
101 status = ping_iterator_get_info (iter, PING_INFO_LATENCY,
102 (void *) &tmp, &tmp_size);
103 if (status == 0)
104 RETVAL = tmp;
105 OUTPUT:
106 RETVAL
108 char *
109 _ping_iterator_get_hostname (iter)
110 pingobj_iter_t *iter
111 CODE:
112 char *buffer;
113 size_t buffer_size;
114 int status;
116 RETVAL = NULL;
118 do {
119 buffer = NULL;
120 buffer_size = 0;
121 status = ping_iterator_get_info (iter, PING_INFO_HOSTNAME,
122 (void *) buffer, &buffer_size);
123 if (status != ENOMEM)
124 break;
126 /* FIXME: This is a workaround for a bug in 0.3.5. */
127 buffer_size++;
129 buffer = (char *) malloc (buffer_size);
130 if (buffer == NULL)
131 break;
133 status = ping_iterator_get_info (iter, PING_INFO_HOSTNAME,
134 (void *) buffer, &buffer_size);
135 if (status != 0)
136 break;
138 RETVAL = buffer;
139 } while (0);
140 OUTPUT:
141 RETVAL
143 const char *
144 _ping_get_error (obj)
145 pingobj_t *obj
146 CODE:
147 RETVAL = ping_get_error(obj);
148 OUTPUT:
149 RETVAL