76 #define DPRINT(x...) printf(x) 78 #define MSG_OUT stdout 115 static void timer_cb(EV_P_
struct ev_timer *w,
int revents);
120 DPRINT(
"%s %li\n", __PRETTY_FUNCTION__, timeout_ms);
123 double t = timeout_ms / 1000;
127 else if(timeout_ms == 0)
139 s =
"CURLM_BAD_HANDLE";
142 s =
"CURLM_BAD_EASY_HANDLE";
145 s =
"CURLM_OUT_OF_MEMORY";
148 s =
"CURLM_INTERNAL_ERROR";
151 s =
"CURLM_UNKNOWN_OPTION";
160 s =
"CURLM_BAD_SOCKET";
201 static void event_cb(EV_P_
struct ev_io *w,
int revents)
203 DPRINT(
"%s w %p revents %i\n", __PRETTY_FUNCTION__, w, revents);
219 static void timer_cb(EV_P_
struct ev_timer *w,
int revents)
221 DPRINT(
"%s w %p revents %i\n", __PRETTY_FUNCTION__, w, revents);
235 printf(
"%s \n", __PRETTY_FUNCTION__);
238 ev_io_stop(g->
loop, &f->
ev);
249 printf(
"%s \n", __PRETTY_FUNCTION__);
257 ev_io_stop(g->
loop, &f->
ev);
261 ev_io_start(g->
loop, &f->
ev);
272 setsock(fdp, s, easy, action, g);
279 DPRINT(
"%s e %p s %i what %i cbp %p sockp %p\n",
280 __PRETTY_FUNCTION__, e, s, what, cbp, sockp);
284 const char *whatstr[]={
"none",
"IN",
"OUT",
"INOUT",
"REMOVE"};
287 "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
299 "Changing action from %s to %s\n",
300 whatstr[fdp->
action], whatstr[what]);
311 size_t realsize = size * nmemb;
320 static int prog_cb(
void *
p,
double dltotal,
double dlnow,
double ult,
362 "Adding easy %p to multi %p (%s)\n", conn->
easy, g->
multi, url);
371 static void fifo_cb(EV_P_
struct ev_io *w,
int revents)
380 rv = fscanf(g->
input,
"%1023s%n", s, &n);
394 static const char *
fifo =
"hiper.fifo";
398 if(lstat (fifo, &st) == 0) {
399 if((st.st_mode & S_IFMT) == S_IFREG) {
406 if(mkfifo (fifo, 0600) == -1) {
410 sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
415 g->
input = fdopen(sockfd,
"r");
423 int main(
int argc,
char **argv)
431 g.
loop = ev_default_loop(0);
struct _ConnInfo ConnInfo
static void new_conn(char *url, GlobalInfo *g)
int main(int argc, char **argv)
struct ev_timer timer_event
static void fifo_cb(EV_P_ struct ev_io *w, int revents)
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle)
static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act, GlobalInfo *g)
static void event_cb(EV_P_ struct ev_io *w, int revents)
int stat(const char *path, struct stat *buffer)
static void timer_cb(EV_P_ struct ev_timer *w, int revents)
static void check_multi_info(GlobalInfo *g)
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, void *sockp)
UNITTEST_START char * ptr
static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
static int prog_cb(void *p, double dltotal, double dlnow, double ult, double uln)
static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
geometry_msgs::TransformStamped t
#define curl_easy_setopt(handle, option, value)
CURL_EXTERN CURLM * curl_multi_init(void)
static void remsock(SockInfo *f, GlobalInfo *g)
#define curl_multi_setopt(handle, opt, param)
#define curl_easy_getinfo(handle, info, arg)
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle)
#define CURL_SOCKET_TIMEOUT
char error[CURL_ERROR_SIZE]
static int init_fifo(GlobalInfo *g)
CURL_EXTERN CURLMsg * curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue)
static void mcode_or_die(const char *where, CURLMcode code)
struct _SockInfo SockInfo
static CURL * easy[MAX_EASY_HANDLES]
struct _GlobalInfo GlobalInfo
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, curl_socket_t s, int ev_bitmask, int *running_handles)
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle)
static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
#define calloc(nbelem, size)