/* */ #ifndef _D_REQUEST_H_ #define _D_REQUEST_H_ #include #include #include #include "CookieBox.h" #include "common.h" using namespace std; #define SAFE_CHARS "abcdefghijklmnopqrstuvwxyz"\ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\ "0123456789"\ ":/?[]@"\ "!$&'()*+,;="\ "-._~"\ "%" class Request { private: string url; string currentUrl; /** * URL previously requested to the server. This is used as Referer */ string previousUrl; /** * URL used as Referer in the initial request */ string referer; string protocol; string host; int port; string dir; string file; map defaultPorts; int tryCount; int trackerEvent; bool parseUrl(const string& url); public: Segment seg; CookieBox* cookieBox; bool isTorrent; public: Request(); virtual ~Request(); // Parses URL and sets url, host, port, dir, file fields. // Returns true if parsing goes successful, otherwise returns false. bool setUrl(const 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. bool redirectUrl(const string& url); bool resetUrl(); void resetTryCount() { tryCount = 0; } void addTryCount() { tryCount++; } int getTryCount() const { return tryCount; } //bool noMoreTry() const { return tryCount >= PREF_MAX_TRY; } string getUrl() const { return url; } string getCurrentUrl() const { return currentUrl; } string getPreviousUrl() const { return previousUrl; } string getReferer() const { return referer; } void setReferer(const string& url) { referer = previousUrl = url; } string getProtocol() const { return protocol; } string getHost() const { return host; } int getPort() const { return port; } string getDir() const { return dir; } string getFile() const { return file;} void setTrackerEvent(int event) { trackerEvent = event; } int getTrackerEvent() const { return trackerEvent; } enum TRACKER_EVENT { AUTO, STARTED, STOPPED, COMPLETED, AFTER_COMPLETED }; }; typedef deque Requests; #endif // _D_REQUEST_H_