MPD  0.20.15
Global.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2016 Max Kellermann <max.kellermann@gmail.com>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * - Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20  * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27  * OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef CURL_GLOBAL_HXX
31 #define CURL_GLOBAL_HXX
32 
33 #include "Multi.hxx"
34 #include "event/TimeoutMonitor.hxx"
36 
37 class CurlSocket;
38 class CurlRequest;
39 
44  CurlMulti multi;
45 
46 public:
47  explicit CurlGlobal(EventLoop &_loop);
48 
50 
51  void Add(CURL *easy, CurlRequest &request);
52  void Remove(CURL *easy);
53 
59  void ReadInfo();
60 
61  void Assign(curl_socket_t fd, CurlSocket &cs) {
62  curl_multi_assign(multi.Get(), fd, &cs);
63  }
64 
65  void SocketAction(curl_socket_t fd, int ev_bitmask);
66 
68  SocketAction(CURL_SOCKET_TIMEOUT, 0);
69  }
70 
76  void ResumeSockets() {
77  int running_handles;
78  curl_multi_socket_all(multi.Get(), &running_handles);
79  }
80 
81 private:
82  void UpdateTimeout(long timeout_ms);
83  static int TimerFunction(CURLM *global, long timeout_ms, void *userp);
84 
85  /* virtual methods from class TimeoutMonitor */
86  void OnTimeout() override;
87 
88  /* virtual methods from class DeferredMonitor */
89  void RunDeferred() override;
90 };
91 
92 #endif
void InvalidateSockets()
Definition: Global.hxx:67
This class monitors a timeout.
An event loop that polls for events on file/socket descriptors.
Definition: Loop.hxx:51
Defer execution of an event into an EventLoop.
void Add(CURL *easy, CurlRequest &request)
EventLoop & GetEventLoop()
An OO wrapper for a "CURLM*" (a libCURL "multi" handle).
Definition: Multi.hxx:42
void SocketAction(curl_socket_t fd, int ev_bitmask)
void ReadInfo()
Check for finished HTTP responses.
void Remove(CURL *easy)
CurlGlobal(EventLoop &_loop)
void ResumeSockets()
This is a kludge to allow pausing/resuming a stream with libcurl < 7.32.0.
Definition: Global.hxx:76
Manager for the global CURLM object.
Definition: Global.hxx:43
void Assign(curl_socket_t fd, CurlSocket &cs)
Definition: Global.hxx:61