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
zyppng::BasePrivate
Definition: base_p.h:12
zyppng::NetworkRequestDispatcherPrivate::_runningDownloads
std::vector< std::shared_ptr< NetworkRequest > > _runningDownloads
Definition: networkrequestdispatcher_p.h:25
zyppng::NetworkRequestDispatcherPrivate::multi_timer_cb
static int multi_timer_cb(CURLM *multi, long timeout_ms, void *g)
Definition: networkrequestdispatcher.cc:39
zyppng::NetworkRequestDispatcherPrivate::dequeuePending
void dequeuePending()
Definition: networkrequestdispatcher.cc:235
zyppng::NetworkRequestDispatcherPrivate::cancelAll
void cancelAll(NetworkRequestError result)
Definition: networkrequestdispatcher.cc:187
zyppng::NetworkRequestDispatcherPrivate::static_socket_callback
static int static_socket_callback(CURL *easy, curl_socket_t s, int what, void *userp, SocketNotifier *socketp)
Definition: networkrequestdispatcher.cc:58
zyppng::NetworkRequestDispatcherPrivate::_pendingDownloads
std::deque< std::shared_ptr< NetworkRequest > > _pendingDownloads
Definition: networkrequestdispatcher_p.h:24
zyppng::NetworkRequestDispatcherPrivate::handleMultiSocketAction
void handleMultiSocketAction(curl_socket_t nativeSocket, int evBitmask)
Definition: networkrequestdispatcher.cc:143
zyppng::NetworkRequestDispatcherPrivate::_lastError
NetworkRequestError _lastError
Definition: networkrequestdispatcher_p.h:34
networkrequestdispatcher.h
zyppng::NetworkRequestDispatcherPrivate::_isRunning
bool _isRunning
Definition: networkrequestdispatcher_p.h:30
zyppng::NetworkRequestDispatcherPrivate::_maxConnections
size_t _maxConnections
Definition: networkrequestdispatcher_p.h:22
zyppng::NetworkRequestDispatcherPrivate::_sigError
signal< void(NetworkRequestDispatcher &)> _sigError
Definition: networkrequestdispatcher_p.h:40
zyppng::NetworkRequestDispatcherPrivate::socketCallback
int socketCallback(CURL *easy, curl_socket_t s, int what, void *)
Definition: networkrequestdispatcher.cc:65
zyppng::SocketNotifier
Definition: socketnotifier.h:65
zyppng::NetworkRequestDispatcherPrivate::_sigDownloadFinished
signal< void(NetworkRequestDispatcher &, NetworkRequest &)> _sigDownloadFinished
Definition: networkrequestdispatcher_p.h:38
zyppng::NetworkRequestDispatcherPrivate::_sigQueueFinished
signal< void(NetworkRequestDispatcher &)> _sigQueueFinished
Definition: networkrequestdispatcher_p.h:39
base_p.h
zyppng::Timer
The Timer class provides repetitive and single-shot timers.
Definition: timer.h:42
zyppng::NetworkRequestDispatcherPrivate::_timer
std::shared_ptr< Timer > _timer
Definition: networkrequestdispatcher_p.h:27
zyppng::NetworkRequestDispatcherPrivate::_socketHandler
std::map< curl_socket_t, std::shared_ptr< SocketNotifier > > _socketHandler
Definition: networkrequestdispatcher_p.h:28
zyppng::NetworkRequestError
The NetworkRequestError class Represents a error that occured in.
Definition: networkrequesterror.h:20
ZYPP_DECLARE_PUBLIC
#define ZYPP_DECLARE_PUBLIC(Class)
Definition: zyppglobal.h:39
zyppng::NetworkRequestDispatcherPrivate::_locked
bool _locked
Definition: networkrequestdispatcher_p.h:31
zyppng::NetworkRequestDispatcherPrivate::~NetworkRequestDispatcherPrivate
virtual ~NetworkRequestDispatcherPrivate()
Definition: networkrequestdispatcher.cc:32
zyppng::NetworkRequestDispatcherPrivate::multiTimerTimout
void multiTimerTimout(const Timer &t)
Definition: networkrequestdispatcher.cc:53
zyppng::NetworkRequestDispatcherPrivate::NetworkRequestDispatcherPrivate
NetworkRequestDispatcherPrivate()
Definition: networkrequestdispatcher.cc:18
zyppng::NetworkRequestDispatcherPrivate::onSocketActivated
void onSocketActivated(const SocketNotifier &listener, int events)
Definition: networkrequestdispatcher.cc:130
zyppng::NetworkRequestDispatcherPrivate::setFinished
void setFinished(NetworkRequest &req, NetworkRequestError result)
Definition: networkrequestdispatcher.cc:204
zyppng
Definition: abstracteventsource.cc:8
zyppng::NetworkRequestDispatcherPrivate::_sigDownloadStarted
signal< void(NetworkRequestDispatcher &, NetworkRequest &)> _sigDownloadStarted
Definition: networkrequestdispatcher_p.h:37
zyppng::NetworkRequest
Definition: request.h:35
zyppng::NetworkRequestDispatcherPrivate::_multi
CURLM * _multi
Definition: networkrequestdispatcher_p.h:32
zyppng::NetworkRequestDispatcherPrivate
Definition: networkrequestdispatcher_p.h:15