29 #include <sys/types.h> 30 #include <netinet/in.h> 31 #include <arpa/inet.h> 36 #include <QtCore/QList> 37 #include <QtCore/QStringList> 38 #include <QtNetwork/QLocalSocket> 60 HTTPProtocol(
const QByteArray &protocol,
const QByteArray &pool,
61 const QByteArray &app );
65 enum HTTP_REV {HTTP_None, HTTP_Unknown, HTTP_10, HTTP_11, SHOUTCAST};
68 enum AUTH_SCHEME {AUTH_None, AUTH_Basic, AUTH_NTLM, AUTH_Digest, AUTH_Negotiate};
100 lastModifiedDate = 0;
111 QByteArray serialize()
const;
112 bool deserialize(
const QByteArray &);
132 method = KIO::HTTP_UNKNOWN;
135 allowTransferCompression =
false;
136 disablePassDialog =
false;
137 doNotWWWAuthenticate =
false;
138 doNotProxyAuthenticate =
false;
139 preferErrorPage =
false;
140 useCookieJar =
false;
143 QByteArray methodString()
const;
183 enum { CookiesAuto, CookiesManual, CookiesNone } cookieMode;
194 isPersistentProxyConnection =
false;
208 if (url.host() == request.
url.host() && url.port() == request.
url.port()) {
209 url.setUserName(request.
url.userName());
210 url.setPassword(request.
url.password());
212 if (proxyUrl.host() == request.
proxyUrl.host() &&
213 proxyUrl.port() == request.
proxyUrl.port()) {
214 proxyUrl.setUserName(request.
proxyUrl.userName());
215 proxyUrl.setPassword(request.
proxyUrl.password());
222 encoded_hostname.clear();
225 isPersistentProxyConnection =
false;
236 virtual void setHost(
const QString& host, quint16 port,
const QString& user,
237 const QString& pass);
239 virtual void slave_status();
241 virtual void get(
const KUrl& url );
242 virtual void put(
const KUrl& url,
int _mode, KIO::JobFlags flags );
246 virtual void mkdir(
const KUrl& url,
int _permissions );
248 virtual void rename(
const KUrl& src,
const KUrl& dest, KIO::JobFlags flags );
249 virtual void copy(
const KUrl& src,
const KUrl& dest,
int _permissions, KIO::JobFlags flags );
250 virtual void del(
const KUrl& url,
bool _isfile );
256 void davGeneric(
const KUrl& url, KIO::HTTP_METHOD method, qint64 size = -1 );
259 void davLock(
const KUrl& url,
const QString& scope,
260 const QString& type,
const QString& owner );
261 void davUnlock(
const KUrl& url );
267 QString davError(
int code = -1,
const QString &url = QString() );
279 virtual void special(
const QByteArray &data );
283 virtual void stat(
const KUrl& url );
285 virtual void reparseConfiguration();
290 virtual void closeConnection();
292 void post(
const KUrl& url, qint64 size = -1 );
293 void multiGet(
const QByteArray &data);
294 bool maybeSetRequestUrl(
const KUrl &);
299 bool sendHttpError();
304 bool sendErrorPageNotification();
312 void slotData(
const QByteArray &);
313 void slotFilterError(
const QString &text);
314 void error(
int errid,
const QString &text);
315 void proxyAuthenticationForSocket(
const QNetworkProxy &, QAuthenticator *);
316 void saveProxyAuthenticationForSocket();
327 ssize_t write(
const void *buf,
size_t nbytes);
335 void addEncoding(
const QString &, QStringList &);
337 quint16 defaultPort()
const;
346 bool satisfyRequestFromCache(
bool *cacheHasPage);
347 QString formatRequestUri()
const;
351 QString authenticationHeader();
357 void httpClose(
bool keepAlive);
361 bool httpOpenConnection();
365 void httpCloseConnection();
369 bool httpShouldCloseConnection();
371 void forwardHttpResponseHeader(
bool forwardImmediately =
true);
378 void fixupResponseMimetype();
384 void fixupResponseContentEncoding();
386 bool readResponseHeader();
387 bool parseHeaderFromCache();
388 void parseContentDisposition(
const QString &disposition);
391 bool sendCachedBody();
395 bool readBody(
bool dataInternal =
false );
400 void davSetRequest(
const QByteArray& requestXML );
401 void davStatList(
const KUrl& url,
bool stat =
true );
402 void davParsePropstats(
const QDomNodeList& propstats,
KIO::UDSEntry& entry );
403 void davParseActiveLocks(
const QDomNodeList& activeLocks,
409 int codeFromResponse(
const QString& response );
415 QString davProcessLocks();
420 void addCookies(
const QString &url,
const QByteArray &cookieHeader);
425 QString findCookies(
const QString &url);
429 QString cacheFilePathFromUrl(
const KUrl &url)
const;
430 bool cacheFileOpenRead();
431 bool cacheFileOpenWrite();
432 void cacheFileClose();
433 void sendCacheCleanerCommand(
const QByteArray &command);
435 QByteArray cacheFileReadPayload(
int maxLength);
436 void cacheFileWritePayload(
const QByteArray &d);
437 void cacheFileWriteTextHeader();
441 bool cacheFileReadTextHeader1(
const KUrl &desiredUrl);
445 bool cacheFileReadTextHeader2();
446 void setCacheabilityMetadata(
bool cachingAllowed);
456 void proceedUntilResponseContent(
bool dataInternal =
false );
461 bool proceedUntilResponseHeader();
466 void resetSessionSettings();
471 void resetResponseParsing();
479 void resetConnectionSettings();
487 void cachePostData(
const QByteArray&);
495 void clearPostDataBuffer();
500 bool retrieveAllData();
505 void saveAuthenticationData();
515 void copyPut(
const KUrl& src,
const KUrl& dest, KIO::JobFlags flags);
520 bool davStatDestination();
597 void clearUnreadBuffer();
598 void unread(
char *buf,
size_t size);
599 size_t readBuffered(
char *buf,
size_t size,
bool unlimited =
true);
600 bool readDelimitedText(
char *buf,
int *idx,
int end,
int numNewlines);
bool m_davHostUnsupported
SimpleJob * special(const KUrl &url, const QByteArray &data, JobFlags flags=DefaultFlags)
TransferJob * put(const KUrl &url, int permissions, JobFlags flags=DefaultFlags)
DAV-specific request elements for the current connection.
bool m_isChunked
Chunked transfer encoding.
long m_maxCacheSize
Maximum cache size in Kb.
MimetypeJob * mimetype(const KUrl &url, JobFlags flags=DefaultFlags)
QByteArray sentMethodString
bool m_isRedirection
Indicates current request is a redirection.
QString m_strCacheDir
Location of the cache.
SimpleJob * mkdir(const KUrl &url, int permissions=-1)
QLocalSocket m_cacheCleanerConnection
Connection to the cache cleaner process.
The request for the current connection.
StatJob * stat(const KUrl &url, JobFlags flags=DefaultFlags)
KIO::filesize_t m_iPostDataSize
QByteArray m_receiveBuf
Receive buffer.
virtual void write(const QByteArray &data)
QString methodStringOverride
KIO::filesize_t m_iBytesLeft
of bytes left to receive in this message.
unsigned int responseCode
ListJob * listDir(const KUrl &url, JobFlags flags=DefaultFlags, bool includeHidden=true)
QByteArray m_webDavDataBuf
QStringList m_responseHeaders
All headers.
QStringList m_contentEncodings
bool m_isLoadingErrorPage
QList< HTTPRequest > m_requestQueue
bool m_isBusy
Busy handling request queue.
SimpleJob * rename(const KUrl &src, const KUrl &dest, JobFlags flags=DefaultFlags)
QAuthenticator * m_socketProxyAuth
void updateCredentials(const HTTPRequest &request)
KAbstractHttpAuthentication * m_wwwAuth
KIO::filesize_t endoffset
bool doNotWWWAuthenticate
State of the current connection to the server.
bool isPersistentProxyConnection
KIO::filesize_t m_iContentLeft
of content bytes left
DeleteJob * del(const KUrl &src, JobFlags flags=DefaultFlags)
unsigned int prevResponseCode
bool allowTransferCompression
CopyJob * copy(const KUrl &src, const KUrl &dest, JobFlags flags=DefaultFlags)
QStringList m_davCapabilities
QByteArray m_mimeTypeBuffer
AUTH_SCHEME
Authorization method used.
KIO::filesize_t m_iSize
Expected size of message.
void initFrom(const HTTPRequest &request)
KAbstractHttpAuthentication * m_proxyAuth
bool m_dataInternal
Data is for internal consumption.
bool isPersistentProxyConnection
QStringList m_transferEncodings
bool doNotProxyAuthenticate
int m_maxCacheAge
Maximum age of a cache entry in seconds.