libzypp  17.22.0
networkrequestdispatcher_p.h
Go to the documentation of this file.
1 #ifndef ZYPP_NG_MEDIA_CURL_PRIVATE_CURL_P_H_INCLUDED
2 #define ZYPP_NG_MEDIA_CURL_PRIVATE_CURL_P_H_INCLUDED
3 
6 #include <curl/curl.h>
7 #include <deque>
8 #include <set>
9 
10 namespace zyppng {
11 
12 class Timer;
13 class SocketNotifier;
14 
16 {
17  ZYPP_DECLARE_PUBLIC(NetworkRequestDispatcher)
18 public:
21 
22  size_t _maxConnections = 10;
23 
24  std::deque< std::shared_ptr<NetworkRequest> > _pendingDownloads;
25  std::vector< std::shared_ptr<NetworkRequest> > _runningDownloads;
26 
27  std::shared_ptr<Timer> _timer;
28  std::map< curl_socket_t, std::shared_ptr<SocketNotifier> > _socketHandler;
29 
30  bool _isRunning = false;
31  bool _locked = false; //if set to true, no new requests will be dequeued
32  CURLM *_multi = nullptr;
33 
35 
36  //signals
37  signal<void ( NetworkRequestDispatcher &, NetworkRequest & )> _sigDownloadStarted;
38  signal<void ( NetworkRequestDispatcher &, NetworkRequest & )> _sigDownloadFinished;
39  signal<void ( NetworkRequestDispatcher & )> _sigQueueFinished;
40  signal<void ( NetworkRequestDispatcher & )> _sigError;
41 
42 private:
43  static int multi_timer_cb ( CURLM *multi, long timeout_ms, void *g );
44  static int static_socket_callback(CURL *easy, curl_socket_t s, int what, void *userp, SocketNotifier *socketp );
45 
46  void multiTimerTimout ( const Timer &t );
47  int socketCallback(CURL *easy, curl_socket_t s, int what, void * );
48 
49  void cancelAll ( NetworkRequestError result );
50  void setFinished( NetworkRequest &req , NetworkRequestError result );
51 
52  void onSocketActivated ( const SocketNotifier &listener, int events );
53 
54  void handleMultiSocketAction ( curl_socket_t nativeSocket, int evBitmask );
55  void dequeuePending ();
56 };
57 }
58 
59 #endif
static int multi_timer_cb(CURLM *multi, long timeout_ms, void *g)
void cancelAll(NetworkRequestError result)
int socketCallback(CURL *easy, curl_socket_t s, int what, void *)
signal< void(NetworkRequestDispatcher &, NetworkRequest &)> _sigDownloadFinished
signal< void(NetworkRequestDispatcher &)> _sigQueueFinished
std::map< curl_socket_t, std::shared_ptr< SocketNotifier > > _socketHandler
static int static_socket_callback(CURL *easy, curl_socket_t s, int what, void *userp, SocketNotifier *socketp)
std::deque< std::shared_ptr< NetworkRequest > > _pendingDownloads
void handleMultiSocketAction(curl_socket_t nativeSocket, int evBitmask)
The NetworkRequestError class Represents a error that occured in.
The Timer class provides repetitive and single-shot timers.
Definition: timer.h:42
signal< void(NetworkRequestDispatcher &)> _sigError
signal< void(NetworkRequestDispatcher &, NetworkRequest &)> _sigDownloadStarted
void setFinished(NetworkRequest &req, NetworkRequestError result)
std::vector< std::shared_ptr< NetworkRequest > > _runningDownloads
#define ZYPP_DECLARE_PUBLIC(Class)
Definition: zyppglobal.h:39
void onSocketActivated(const SocketNotifier &listener, int events)