#ifndef _INTERNETURIREQUEST_H #define _INTERNETURIREQUEST_H #include "extensions.h" #include "InternetResource.h" #include "FilterGroup.h" #include "ContentType.h" #include "Parsers.h" #include using namespace std; //Otherwise known as a Link //also a container class for the Retrieved InternetResource (Page, PDF, CSS, JS, etc.) class InternetURIRequest: public vector { static Filter m_fParseAbsoluteToParts; //parameter parts for incomplete url s (protocol:\1 domain:\2 port:\3 href:\4 folder:\5 file:\6 extension:\7 query:\8) enum URLParts { part_whole = 0, part_protocol, part_domain, part_port, part_href, part_folder, part_file, part_extension, part_query }; //URL parts Domain *m_domain; const char *m_absoluteURL; const char *m_protocolText; const char *m_port; const char *m_href; const char *m_folder; const char *m_file; const char *m_extension; const char *m_query; //enums protocol m_protocol; ContentType *m_contentType; vector m_parents; //a page can be referenced in several places. The Domain::createPage makes sure they get linked up bool m_isRepeating; InternetResource *m_ir; bool m_processed; //if the IRQ has been processed (does not necessarily mean that it has an IR) unsigned int m_sweep; //swept as part of which sweep in the Domain friend class Report_Full; friend class Report_DomainSummary; public: InternetURIRequest(Domain *_domain, const char *_absoluteURL, unsigned int _sweep = 0); //use _sweep to override m_sweep from the Domain ~InternetURIRequest(); void parse(); //parameters e.g. a
. Usually x-www-encoded (name=value&name=value&...) vector > m_parameters; //accessors Domain *domain() const {return m_domain;} const char *absoluteURL() const {return m_absoluteURL;} protocol protocolEnum() const {return m_protocol;} const char *protocolText() const {return m_protocolText;} const char *folder() const {return m_folder;} const char *file() const {return m_file;} const char *relativeHREF() const {return m_href;} unsigned int sweep() const {return m_sweep;} const bool setProcessed() {return m_processed = true;} //state that the IRQ has been processed in some way const bool processed() const {return m_processed;} const ContentType *type() const {return m_contentType;} //exceptions class DomainMismatch {}; class InvalidAbsoluteURL {}; class URLParsingFailure {}; const bool addRelationship(InternetURIRequest *_parent); //will update children and parents const bool isRepeating(); const bool isRepeatingParents(const InternetURIRequest *checkIRQ, const int checkLevels) const; void setInternetResource(InternetResource *_ir) {m_ir = _ir; setProcessed();} void releaseInternetResource(); void addParameter(const char *name, const char *value); }; #endif