Code

0cebf3d921ba6df3ba4470b3fc28a97d5dfb0ca2
[liboping.git] / bindings / perl / Oping.xs
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