Example #1
0
void glibcurl_init() {
  int fd;
  /* Create source object for curl file descriptors, and hook it into the
     default main context. */
  curlSrc = (CurlGSource*)g_source_new(&curlFuncs, sizeof(CurlGSource));
  g_source_attach(&curlSrc->source, NULL);

  /* Init rest of our data */
  memset(&curlSrc->lastPollFd, 0, sizeof(curlSrc->lastPollFd));
  for (fd = 1; fd <= GLIBCURL_FDMAX; ++fd)
    curlSrc->lastPollFd[fd].fd = fd;
  curlSrc->lastPollFdMax = 0;
  curlSrc->callPerform = 0;

  /* Init libcurl */
  curl_global_init(CURL_GLOBAL_ALL);
  curlSrc->multiHandle = curl_multi_init();
  curl_multi_setopt(curlSrc->multiHandle, CURLMOPT_MAXCONNECTS, 4);
  g_source_set_priority((GSource*)glibcurl_handle(), G_PRIORITY_DEFAULT_IDLE);
  D((stderr, "events: R=%x W=%x X=%x\n", GLIBCURL_READ, GLIBCURL_WRITE,
     GLIBCURL_EXC));

  s_numEasyHandles = 0;
  s_currTimeout = 0;
  s_timeAtLastDispatch.tv_sec = 0;
  s_timeAtLastDispatch.tv_nsec = 0;
}
Example #2
0
void curlCallback(void* data) {
  CURLMsg* msg;
  int inQueue;

  /*   putchar(' '); */
  while (1) {
    msg = curl_multi_info_read(glibcurl_handle(), &inQueue);
    if (msg == 0) break;
    if (msg->msg != CURLMSG_DONE) continue;
    /* Cause the above call to g_main_loop_run() to terminate once all
       requests are finished. */
    if (--numRunning == 0) g_main_loop_quit((GMainLoop*)data);
  }
}