Lines Matching +full:- +full:glib2
21 * SPDX-License-Identifier: curl
25 * multi socket API usage together with glib2
33 Requires glib-2.x and a (POSIX?) system that has mkfifo().
35 This is an adaptation of libcurl's "hipev.c" and libevent's "event-test.c"
49 % cat my-url-list > hiper.fifo
69 #define SHOW_VERBOSE 0 /* Set to non-zero for libcurl messages */
70 #define SHOW_PROGRESS 0 /* Set to non-zero to enable progress callback */
124 MSG_OUT("REMAINING: %d\n", g->still_running); in check_multi_info()
125 while((msg = curl_multi_info_read(g->multi, &msgs_left))) { in check_multi_info()
126 if(msg->msg == CURLMSG_DONE) { in check_multi_info()
127 CURL *easy = msg->easy_handle; in check_multi_info()
128 CURLcode res = msg->data.result; in check_multi_info()
133 MSG_OUT("DONE: %s => (%d) %s\n", eff_url, res, conn->error); in check_multi_info()
134 curl_multi_remove_handle(g->multi, easy); in check_multi_info()
135 free(conn->url); in check_multi_info()
148 rc = curl_multi_socket_action(g->multi, in timer_cb()
149 CURL_SOCKET_TIMEOUT, 0, &g->still_running); in timer_cb()
167 * if timeout_ms is -1, just delete the timer in update_timeout_cb()
173 g->timer_event = g_timeout_add(timeout_ms, timer_cb, g); in update_timeout_cb()
188 rc = curl_multi_socket_action(g->multi, fd, action, &g->still_running); in event_cb()
192 if(g->still_running) { in event_cb()
197 if(g->timer_event) { in event_cb()
198 g_source_remove(g->timer_event); in event_cb()
210 if(f->ev) { in remsock()
211 g_source_remove(f->ev); in remsock()
224 f->sockfd = s; in setsock()
225 f->action = act; in setsock()
226 f->easy = e; in setsock()
227 if(f->ev) { in setsock()
228 g_source_remove(f->ev); in setsock()
230 f->ev = g_io_add_watch(f->ch, kind, event_cb, g); in setsock()
238 fdp->global = g; in addsock()
239 fdp->ch = g_io_channel_unix_new(s); in addsock()
241 curl_multi_assign(g->multi, s, fdp); in addsock()
265 "Changing action from %d to %d\n", fdp->action, what); in sock_cb()
291 "/%" CURL_FORMAT_CURL_OFF_T ")\n", conn->url, dlnow, dltotal); in xferinfo_cb()
302 conn->error[0] = '\0'; in new_conn()
303 conn->easy = curl_easy_init(); in new_conn()
304 if(!conn->easy) { in new_conn()
308 conn->global = g; in new_conn()
309 conn->url = g_strdup(url); in new_conn()
310 curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url); in new_conn()
311 curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb); in new_conn()
312 curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn); in new_conn()
313 curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, (long)SHOW_VERBOSE); in new_conn()
314 curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error); in new_conn()
315 curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn); in new_conn()
316 curl_easy_setopt(conn->easy, CURLOPT_NOPROGRESS, SHOW_PROGRESS ? 0L : 1L); in new_conn()
317 curl_easy_setopt(conn->easy, CURLOPT_XFERINFOFUNCTION, xferinfo_cb); in new_conn()
318 curl_easy_setopt(conn->easy, CURLOPT_PROGRESSDATA, conn); in new_conn()
319 curl_easy_setopt(conn->easy, CURLOPT_FOLLOWLOCATION, 1L); in new_conn()
320 curl_easy_setopt(conn->easy, CURLOPT_CONNECTTIMEOUT, 30L); in new_conn()
321 curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_LIMIT, 1L); in new_conn()
322 curl_easy_setopt(conn->easy, CURLOPT_LOW_SPEED_TIME, 30L); in new_conn()
324 MSG_OUT("Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url); in new_conn()
325 rc = curl_multi_add_handle(g->multi, conn->easy); in new_conn()
377 g_error("fifo_cb: %s", err->message); in fifo_cb()
400 if(mkfifo (fifo, 0600) == -1) { in init_fifo()
407 if(socket == -1) { in init_fifo()
427 g->multi = curl_multi_init(); in main()
428 curl_multi_setopt(g->multi, CURLMOPT_SOCKETFUNCTION, sock_cb); in main()
429 curl_multi_setopt(g->multi, CURLMOPT_SOCKETDATA, g); in main()
430 curl_multi_setopt(g->multi, CURLMOPT_TIMERFUNCTION, update_timeout_cb); in main()
431 curl_multi_setopt(g->multi, CURLMOPT_TIMERDATA, g); in main()
437 curl_multi_cleanup(g->multi); in main()