2009-11-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Code cleanup
	* src/Request.cc
	* src/Request.h
pull/1/head
Tatsuhiro Tsujikawa 2009-11-12 15:07:18 +00:00
parent 7a94ae6af2
commit 48175dcb3a
3 changed files with 61 additions and 57 deletions

View File

@ -1,3 +1,9 @@
2009-11-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Code cleanup
* src/Request.cc
* src/Request.h
2009-11-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Rewritten Request::parseUrl()

View File

@ -56,18 +56,18 @@ const std::string Request::PROTO_HTTPS("https");
const std::string Request::PROTO_FTP("ftp");
Request::Request():
port(0), tryCount(0),
_port(0), _tryCount(0),
_redirectCount(0),
_supportsPersistentConnection(true),
_keepAliveHint(false),
_pipeliningHint(false),
_maxPipelinedRequest(1),
method(METHOD_GET),
_method(METHOD_GET),
_hasPassword(false),
_ipv6LiteralAddress(false)
{}
static std::string removeFragment(const std::string url)
static std::string removeFragment(const std::string& url)
{
std::string::size_type sharpIndex = url.find("#");
if(sharpIndex == std::string::npos) {
@ -109,23 +109,23 @@ static std::string urlencode(const std::string& src)
bool Request::setUrl(const std::string& url) {
_supportsPersistentConnection = true;
this->url = url;
return parseUrl(urlencode(removeFragment(url)));
_url = url;
return parseUrl(urlencode(removeFragment(_url)));
}
bool Request::resetUrl() {
previousUrl = referer;
_previousUrl = _referer;
_supportsPersistentConnection = true;
return parseUrl(urlencode(removeFragment(url)));
return parseUrl(urlencode(removeFragment(_url)));
}
void Request::setReferer(const std::string& url)
{
referer = previousUrl = urlencode(removeFragment(url));
_referer = _previousUrl = urlencode(removeFragment(url));
}
bool Request::redirectUrl(const std::string& url) {
previousUrl = A2STR::NIL;
_previousUrl = A2STR::NIL;
_supportsPersistentConnection = true;
++_redirectCount;
if(url.find("://") == std::string::npos) {
@ -133,10 +133,10 @@ bool Request::redirectUrl(const std::string& url) {
// field, but some servers don't obey this rule.
if(util::startsWith(url, "/")) {
// abosulute path
return parseUrl(strconcat(protocol, "://", host, url));
return parseUrl(strconcat(_protocol, "://", _host, url));
} else {
// relative path
return parseUrl(strconcat(protocol, "://", host, dir, "/", url));
return parseUrl(strconcat(_protocol, "://", _host, _dir, "/", url));
}
} else {
return parseUrl(url);
@ -144,11 +144,11 @@ bool Request::redirectUrl(const std::string& url) {
}
bool Request::parseUrl(const std::string& url) {
currentUrl = url;
host = A2STR::NIL;
port = 0;
dir = A2STR::NIL;
file = A2STR::NIL;
_currentUrl = url;
_host = A2STR::NIL;
_port = 0;
_dir = A2STR::NIL;
_file = A2STR::NIL;
_query = A2STR::NIL;
_username = A2STR::NIL;
_password = A2STR::NIL;
@ -178,9 +178,9 @@ bool Request::parseUrl(const std::string& url) {
// find protocol
std::string::size_type protocolOffset = url.find("://");
if(protocolOffset == std::string::npos) return false;
protocol = std::string(url.begin(), url.begin()+protocolOffset);
_protocol = std::string(url.begin(), url.begin()+protocolOffset);
uint16_t defPort;
if((defPort = FeatureConfig::getInstance()->getDefaultPort(protocol)) == 0) {
if((defPort = FeatureConfig::getInstance()->getDefaultPort(_protocol)) == 0) {
return false;
}
// find authority
@ -250,7 +250,7 @@ bool Request::parseUrl(const std::string& url) {
if(portFirst == authorityLast) {
// If port is not specified, then we set it to default port of
// its protocol..
port = defPort;
_port = defPort;
} else {
try {
unsigned int tempPort =
@ -258,15 +258,15 @@ bool Request::parseUrl(const std::string& url) {
if(65535 < tempPort) {
return false;
}
port = tempPort;
_port = tempPort;
} catch(RecoverableException& e) {
return false;
}
}
if(_ipv6LiteralAddress) {
host = std::string(hostPortFirst+1, hostLast-1);
_host = std::string(hostPortFirst+1, hostLast-1);
} else {
host = std::string(hostPortFirst, hostLast);
_host = std::string(hostPortFirst, hostLast);
}
// find directory and file part
std::string::const_iterator dirLast = authorityLast;
@ -277,7 +277,7 @@ bool Request::parseUrl(const std::string& url) {
}
}
if(dirLast != queryFirst) {
file = std::string(dirLast+1, queryFirst);
_file = std::string(dirLast+1, queryFirst);
}
// Erase duplicated slashes.
std::string::const_iterator dirFirst = authorityLast;
@ -294,9 +294,9 @@ bool Request::parseUrl(const std::string& url) {
}
}
if(dirFirst == dirLast) {
dir = A2STR::SLASH_C;
_dir = A2STR::SLASH_C;
} else {
dir = std::string(dirFirst, dirLast);
_dir = std::string(dirFirst, dirLast);
}
return true;
}
@ -313,7 +313,7 @@ void Request::setMaxPipelinedRequest(unsigned int num)
const SharedHandle<PeerStat>& Request::initPeerStat()
{
_peerStat.reset(new PeerStat(0, host, protocol));
_peerStat.reset(new PeerStat(0, _host, _protocol));
return _peerStat;
}

View File

@ -47,24 +47,24 @@ namespace aria2 {
class Request {
private:
std::string url;
std::string currentUrl;
std::string _url;
std::string _currentUrl;
/**
* URL previously requested to the server. This is used as Referer
*/
std::string previousUrl;
std::string _previousUrl;
/**
* URL used as Referer in the initial request
*/
std::string referer;
std::string protocol;
std::string host;
uint16_t port;
std::string dir;
std::string file;
std::string _referer;
std::string _protocol;
std::string _host;
uint16_t _port;
std::string _dir;
std::string _file;
/* after ? mark(includes '?' itself) */
std::string _query;
unsigned int tryCount;
unsigned int _tryCount;
unsigned int _redirectCount;
@ -77,7 +77,7 @@ private:
// maximum number of pipelined requests
unsigned int _maxPipelinedRequest;
std::string method;
std::string _method;
std::string _username;
@ -93,18 +93,16 @@ private:
public:
Request();
// Parses URL and sets url, host, port, dir, file fields.
// Returns true if parsing goes successful, otherwise returns false.
// Sets url to _url and parses URL. Returns true if parsing goes
// successful, otherwise returns false.
bool setUrl(const std::string& url);
// Parses URL and sets host, port, dir, file fields.
// url field are not altered by this method.
// Returns true if parsing goes successful, otherwise returns false.
// Parses URL. _url field are not altered by this method. Returns
// true if parsing goes successful, otherwise returns false.
bool redirectUrl(const std::string& url);
bool resetUrl();
void resetTryCount() { tryCount = 0; }
void addTryCount() { ++tryCount; }
unsigned int getTryCount() const { return tryCount; }
//bool noMoreTry() const { return tryCount >= PREF_MAX_TRY; }
void resetTryCount() { _tryCount = 0; }
void addTryCount() { ++_tryCount; }
unsigned int getTryCount() const { return _tryCount; }
void resetRedirectCount();
@ -114,13 +112,13 @@ public:
}
// Returns URI passed by setUrl()
const std::string& getUrl() const { return url; }
const std::string& getCurrentUrl() const { return currentUrl; }
const std::string& getPreviousUrl() const { return previousUrl; }
const std::string& getReferer() const { return referer; }
const std::string& getUrl() const { return _url; }
const std::string& getCurrentUrl() const { return _currentUrl; }
const std::string& getPreviousUrl() const { return _previousUrl; }
const std::string& getReferer() const { return _referer; }
void setReferer(const std::string& url);
const std::string& getProtocol() const { return protocol; }
const std::string& getHost() const { return host; }
const std::string& getProtocol() const { return _protocol; }
const std::string& getHost() const { return _host; }
// Same as getHost(), but for IPv6 literal addresses, enclose them
// with square brackets and return.
std::string getURIHost() const
@ -131,9 +129,9 @@ public:
return getHost();
}
}
uint16_t getPort() const { return port; }
const std::string& getDir() const { return dir; }
const std::string& getFile() const { return file;}
uint16_t getPort() const { return _port; }
const std::string& getDir() const { return _dir; }
const std::string& getFile() const { return _file;}
const std::string& getQuery() const { return _query; }
bool isIPv6LiteralAddress() const { return _ipv6LiteralAddress; }
@ -180,7 +178,7 @@ public:
}
void setMethod(const std::string& method) {
this->method = method;
_method = method;
}
const std::string& getUsername() const
@ -200,7 +198,7 @@ public:
}
const std::string& getMethod() const {
return method;
return _method;
}
const SharedHandle<PeerStat>& getPeerStat() const { return _peerStat; }