mirror of https://github.com/vitalif/grive2
Implement upload/download speed limit (fix #60)
parent
5327016d36
commit
44d3ddf928
|
@ -75,6 +75,7 @@ Enjoy!
|
||||||
- no-remote-new and upload-only modes
|
- no-remote-new and upload-only modes
|
||||||
- ignore regexp does not persist anymore (note that Grive will still track it to not
|
- ignore regexp does not persist anymore (note that Grive will still track it to not
|
||||||
accidentally delete remote files when changing ignore regexp)
|
accidentally delete remote files when changing ignore regexp)
|
||||||
|
- added options to limit upload and download speed
|
||||||
|
|
||||||
### Grive2 v0.5
|
### Grive2 v0.5
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,8 @@ int Main( int argc, char **argv )
|
||||||
( "dry-run", "Only detect which files need to be uploaded/downloaded, "
|
( "dry-run", "Only detect which files need to be uploaded/downloaded, "
|
||||||
"without actually performing them." )
|
"without actually performing them." )
|
||||||
( "ignore", po::value<std::string>(), "Perl RegExp to ignore files (matched against relative paths, remembered for next runs)." )
|
( "ignore", po::value<std::string>(), "Perl RegExp to ignore files (matched against relative paths, remembered for next runs)." )
|
||||||
|
( "upload-speed,U", po::value<unsigned>(), "Limit upload speed in kbytes per second" )
|
||||||
|
( "download-speed,D", po::value<unsigned>(), "Limit download speed in kbytes per second" )
|
||||||
;
|
;
|
||||||
|
|
||||||
po::variables_map vm;
|
po::variables_map vm;
|
||||||
|
@ -195,6 +197,11 @@ int Main( int argc, char **argv )
|
||||||
AuthAgent agent( token, http.get() ) ;
|
AuthAgent agent( token, http.get() ) ;
|
||||||
v2::Syncer2 syncer( &agent );
|
v2::Syncer2 syncer( &agent );
|
||||||
|
|
||||||
|
if ( vm.count( "upload-speed" ) > 0 )
|
||||||
|
agent.SetUploadSpeed( vm["upload-speed"].as<unsigned>() * 1000 );
|
||||||
|
if ( vm.count( "download-speed" ) > 0 )
|
||||||
|
agent.SetDownloadSpeed( vm["download-speed"].as<unsigned>() * 1000 );
|
||||||
|
|
||||||
Drive drive( &syncer, config.GetAll() ) ;
|
Drive drive( &syncer, config.GetAll() ) ;
|
||||||
drive.DetectChanges() ;
|
drive.DetectChanges() ;
|
||||||
|
|
||||||
|
|
|
@ -64,4 +64,14 @@ long Agent::Post(
|
||||||
return Request( "POST", url, &s, dest, h );
|
return Request( "POST", url, &s, dest, h );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Agent::SetUploadSpeed( unsigned kbytes )
|
||||||
|
{
|
||||||
|
mMaxUpload = kbytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Agent::SetDownloadSpeed( unsigned kbytes )
|
||||||
|
{
|
||||||
|
mMaxDownload = kbytes;
|
||||||
|
}
|
||||||
|
|
||||||
} } // end of namespace
|
} } // end of namespace
|
||||||
|
|
|
@ -34,6 +34,9 @@ class Header ;
|
||||||
|
|
||||||
class Agent
|
class Agent
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
unsigned mMaxUpload, mMaxDownload ;
|
||||||
|
|
||||||
public :
|
public :
|
||||||
virtual ~Agent() {}
|
virtual ~Agent() {}
|
||||||
|
|
||||||
|
@ -70,6 +73,9 @@ public :
|
||||||
DataStream *dest,
|
DataStream *dest,
|
||||||
const Header& hdr ) = 0 ;
|
const Header& hdr ) = 0 ;
|
||||||
|
|
||||||
|
virtual void SetUploadSpeed( unsigned kbytes ) ;
|
||||||
|
virtual void SetDownloadSpeed( unsigned kbytes ) ;
|
||||||
|
|
||||||
virtual std::string LastError() const = 0 ;
|
virtual std::string LastError() const = 0 ;
|
||||||
virtual std::string LastErrorHeaders() const = 0 ;
|
virtual std::string LastErrorHeaders() const = 0 ;
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,10 @@ void CurlAgent::Init()
|
||||||
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADERFUNCTION, &CurlAgent::HeaderCallback ) ;
|
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADERFUNCTION, &CurlAgent::HeaderCallback ) ;
|
||||||
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADERDATA, this ) ;
|
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADERDATA, this ) ;
|
||||||
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADER, 0L ) ;
|
::curl_easy_setopt( m_pimpl->curl, CURLOPT_HEADER, 0L ) ;
|
||||||
|
if ( mMaxUpload > 0 )
|
||||||
|
::curl_easy_setopt( m_pimpl->curl, CURLOPT_MAX_SEND_SPEED_LARGE, mMaxUpload ) ;
|
||||||
|
if ( mMaxDownload > 0 )
|
||||||
|
::curl_easy_setopt( m_pimpl->curl, CURLOPT_MAX_RECV_SPEED_LARGE, mMaxDownload ) ;
|
||||||
m_pimpl->error = false;
|
m_pimpl->error = false;
|
||||||
m_pimpl->error_headers = "";
|
m_pimpl->error_headers = "";
|
||||||
m_pimpl->error_data = "";
|
m_pimpl->error_data = "";
|
||||||
|
|
|
@ -47,6 +47,16 @@ void AuthAgent::SetLog( http::ResponseLog *log )
|
||||||
return m_agent->SetLog( log );
|
return m_agent->SetLog( log );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AuthAgent::SetUploadSpeed( unsigned kbytes )
|
||||||
|
{
|
||||||
|
m_agent->SetUploadSpeed( kbytes );
|
||||||
|
}
|
||||||
|
|
||||||
|
void AuthAgent::SetDownloadSpeed( unsigned kbytes )
|
||||||
|
{
|
||||||
|
m_agent->SetDownloadSpeed( kbytes );
|
||||||
|
}
|
||||||
|
|
||||||
http::Header AuthAgent::AppendHeader( const http::Header& hdr ) const
|
http::Header AuthAgent::AppendHeader( const http::Header& hdr ) const
|
||||||
{
|
{
|
||||||
http::Header h(hdr) ;
|
http::Header h(hdr) ;
|
||||||
|
|
|
@ -54,6 +54,9 @@ public :
|
||||||
std::string Escape( const std::string& str ) ;
|
std::string Escape( const std::string& str ) ;
|
||||||
std::string Unescape( const std::string& str ) ;
|
std::string Unescape( const std::string& str ) ;
|
||||||
|
|
||||||
|
void SetUploadSpeed( unsigned kbytes ) ;
|
||||||
|
void SetDownloadSpeed( unsigned kbytes ) ;
|
||||||
|
|
||||||
private :
|
private :
|
||||||
http::Header AppendHeader( const http::Header& hdr ) const ;
|
http::Header AppendHeader( const http::Header& hdr ) const ;
|
||||||
bool CheckRetry( long response ) ;
|
bool CheckRetry( long response ) ;
|
||||||
|
|
Loading…
Reference in New Issue