File indexing completed on 2024-12-01 09:52:54
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 1999 Torben Weis <weis@kde.org> 0004 SPDX-FileCopyrightText: 2000 Waldo Bastain <bastain@kde.org> 0005 SPDX-FileCopyrightText: 2000 Dawit Alemayehu <adawit@kde.org> 0006 SPDX-FileCopyrightText: 2008 Jarosław Staniek <staniek@kde.org> 0007 SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org> 0008 0009 SPDX-License-Identifier: LGPL-2.0-only 0010 */ 0011 0012 #ifndef KPROTOCOLMANAGER_H 0013 #define KPROTOCOLMANAGER_H 0014 0015 #include <QStringList> 0016 0017 #include "kio/global.h" // KIO::CacheControl 0018 #include "kiocore_export.h" 0019 #include "kprotocolinfo.h" 0020 0021 class KSharedConfig; 0022 template<class T> 0023 class QExplicitlySharedDataPointer; 0024 typedef QExplicitlySharedDataPointer<KSharedConfig> KSharedConfigPtr; 0025 namespace KIO 0026 { 0027 class WorkerConfigPrivate; 0028 } // namespace KIO 0029 0030 /** 0031 * @class KProtocolManager kprotocolmanager.h <KProtocolManager> 0032 * 0033 * Provides information about I/O (Internet, etc.) settings chosen/set 0034 * by the end user. 0035 * 0036 * KProtocolManager has a heap of static functions that allows only read 0037 * access to KDE's IO related settings. These include proxy, cache, file 0038 * transfer resumption, timeout and user-agent related settings. 0039 * 0040 * The information provided by this class is generic enough to be applicable 0041 * to any application that makes use of KDE's IO sub-system. Note that this 0042 * mean the proxy, timeout etc. settings are saved in a separate user-specific 0043 * config file and not in the config file of the application. 0044 * 0045 * Original author: 0046 * @author Torben Weis <weis@kde.org> 0047 * 0048 * Revised by: 0049 * @author Waldo Bastain <bastain@kde.org> 0050 * @author Dawit Alemayehu <adawit@kde.org> 0051 * @see KPAC 0052 */ 0053 class KIOCORE_EXPORT KProtocolManager 0054 { 0055 public: 0056 /*=========================== USER-AGENT SETTINGS ===========================*/ 0057 0058 /** 0059 * Returns the default user-agent string used for web browsing. 0060 * 0061 * @return the default user-agent string 0062 */ 0063 static QString defaultUserAgent(); 0064 0065 /** 0066 * Returns the default user-agent value used for web browsing, for example 0067 * "Mozilla/5.0 (compatible; Konqueror/4.0; Linux; X11; i686; en_US) KHTML/4.0.1 (like Gecko)" 0068 * 0069 * @param keys can be any of the following: 0070 * @li 'o' Show OS 0071 * @li 'v' Show OS Version 0072 * @li 'p' Show platform (only for X11) 0073 * @li 'm' Show machine architecture 0074 * @li 'l' Show language 0075 * @return the default user-agent value with the given @p keys 0076 */ 0077 static QString defaultUserAgent(const QString &keys); 0078 0079 /** 0080 * Returns the application's user-agent string. 0081 * Example string is "KMail/1.9.50 (Windows/6.0; KDE/3.97.1; i686; svn-762186; 2008-01-15)", 0082 * where "KMail" is the @p appName parameter, "1.9.50" is the @p appVersion parameter, 0083 * "Windows/6.0; KDE/3.97.1; i686" part is added automatically and "svn-762186; 2008-01-15" 0084 * is provided by @p extraInfo list. 0085 * 0086 * @param appName name of the application 0087 * @param appVersion name of the application 0088 * @param extraInfo a list of elements that will be appended to the string as extra information 0089 * @return the application's user-agent string 0090 * 0091 * @since 4.1 0092 */ 0093 static QString userAgentForApplication(const QString &appName, const QString &appVersion, const QStringList &extraInfo = QStringList()); 0094 0095 /** 0096 * Returns the user-agent string configured for the 0097 * specified host. 0098 * 0099 * If hostname is not found or is empty (i.e. "" or 0100 * QString()) this function will return the default 0101 * user agent. 0102 * 0103 * @param hostname name of the host 0104 * @return specified user-agent string 0105 */ 0106 static QString userAgentForHost(const QString &hostname); 0107 0108 /** 0109 * Returns system name, version and machine type, for example "Windows", "5.1", "i686". 0110 * This information can be used for constructing custom user-agent strings. 0111 * 0112 * @param systemName system name 0113 * @param systemVersion system version 0114 * @param machine machine type 0115 0116 * @return true if system name, version and machine type has been provided 0117 * 0118 * @since 4.1 0119 */ 0120 static bool getSystemNameVersionAndMachine(QString &systemName, QString &systemVersion, QString &machine); 0121 0122 /*=========================== TIMEOUT CONFIG ================================*/ 0123 0124 /** 0125 * Returns the preferred timeout value for reading from 0126 * remote connections in seconds. 0127 * 0128 * @return timeout value for remote connection in secs. 0129 */ 0130 static int readTimeout(); 0131 0132 /** 0133 * Returns the preferred timeout value for remote connections 0134 * in seconds. 0135 * 0136 * @return timeout value for remote connection in secs. 0137 */ 0138 static int connectTimeout(); 0139 0140 /** 0141 * Returns the preferred timeout value for proxy connections 0142 * in seconds. 0143 * 0144 * @return timeout value for proxy connection in secs. 0145 */ 0146 static int proxyConnectTimeout(); 0147 0148 /** 0149 * Returns the preferred response timeout value for 0150 * remote connecting in seconds. 0151 * 0152 * @return timeout value for remote connection in seconds. 0153 */ 0154 static int responseTimeout(); 0155 0156 /*=============================== PROXY CONFIG ==============================*/ 0157 0158 /** 0159 * Returns whether or not the user specified the 0160 * use of proxy server to make connections. 0161 * @return true to use a proxy 0162 */ 0163 static bool useProxy(); 0164 0165 /** 0166 * Returns whether or not the proxy server 0167 * lookup should be reversed or not. 0168 * @return true to use a reversed proxy 0169 */ 0170 static bool useReverseProxy(); 0171 0172 /** 0173 * Types of proxy configuration 0174 * @li NoProxy - No proxy is used 0175 * @li ManualProxy - Proxies are manually configured 0176 * @li PACProxy - A Proxy configuration URL has been given 0177 * @li WPADProxy - A proxy should be automatically discovered 0178 * @li EnvVarProxy - Use the proxy values set through environment variables. 0179 */ 0180 enum ProxyType { 0181 NoProxy, 0182 ManualProxy, 0183 PACProxy, 0184 WPADProxy, 0185 EnvVarProxy, 0186 }; 0187 0188 /** 0189 * Returns the type of proxy configuration that is used. 0190 * @return the proxy type 0191 */ 0192 static ProxyType proxyType(); 0193 0194 /** 0195 * Proxy authorization modes. 0196 * 0197 * @li Prompt - Ask for authorization as needed 0198 * @li Automatic - Use auto login as defined in kionetrc files. 0199 */ 0200 enum ProxyAuthMode { 0201 Prompt, 0202 Automatic, 0203 }; 0204 0205 /** 0206 * Returns the way proxy authorization should be handled. 0207 * 0208 * @return the proxy authorization mode 0209 * @see ProxyAuthMode 0210 */ 0211 static ProxyAuthMode proxyAuthMode(); 0212 0213 /** 0214 * Returns the strings for hosts that should contacted 0215 * DIRECTLY, bypassing any proxy settings. 0216 * @return a list of (comma-separated) hostnames or partial host 0217 * names 0218 */ 0219 static QString noProxyFor(); 0220 0221 /** 0222 * Returns the proxy server address for a given 0223 * protocol. 0224 * 0225 * @param protocol the protocol whose proxy info is needed 0226 * @returns the proxy server address if one is available, 0227 * or QString() if not available 0228 */ 0229 static QString proxyFor(const QString &protocol); 0230 0231 /** 0232 * Returns the Proxy server address for a given URL. 0233 * 0234 * If the selected proxy type is @ref PACProxy or @ref WPADProxy, then a 0235 * helper kded module, proxyscout, is used to determine the proxy information. 0236 * Otherwise, @ref proxyFor is used to find the proxy to use for the given url. 0237 * 0238 * If this function returns an empty string, then the request to a proxy server 0239 * must be denied. For a direct connection, without the use of a proxy, this 0240 * function will return "DIRECT". 0241 * 0242 * @param url the URL whose proxy info is needed 0243 * @returns the proxy server address if one is available, otherwise a QString(). 0244 */ 0245 static QString proxyForUrl(const QUrl &url); 0246 0247 /** 0248 * Returns all the possible proxy server addresses for @p url. 0249 * 0250 * If the selected proxy type is @ref PACProxy or @ref WPADProxy, then a 0251 * helper kded module, proxyscout, is used to determine the proxy information. 0252 * Otherwise, @ref proxyFor is used to find the proxy to use for the given url. 0253 * 0254 * If this function returns empty list, then the request is to a proxy server 0255 * must be denied. For a direct connection, this function will return a single 0256 * entry of "DIRECT". 0257 * 0258 * @since 4.7 0259 * 0260 * @param url the URL whose proxy info is needed 0261 * @returns the proxy server address if one is available, otherwise an empty list . 0262 */ 0263 static QStringList proxiesForUrl(const QUrl &url); 0264 0265 /** 0266 * Marks this proxy as bad (down). It will not be used for the 0267 * next 30 minutes. (The script may supply an alternate proxy) 0268 * @param proxy the proxy to mark as bad (as URL) 0269 */ 0270 static void badProxy(const QString &proxy); 0271 0272 /** 0273 * Returns the URL of the script for automatic proxy configuration. 0274 * @return the proxy configuration script 0275 */ 0276 static QString proxyConfigScript(); 0277 0278 /*========================== CACHE CONFIG ===================================*/ 0279 0280 /** 0281 * Returns true/false to indicate whether a cache 0282 * should be used 0283 * 0284 * @return true to use the cache, false otherwisea 0285 */ 0286 static bool useCache(); 0287 0288 /** 0289 * Returns the maximum age in seconds cached files should be 0290 * kept before they are deleted as necessary. 0291 * 0292 * @return the maximum cache age in seconds 0293 */ 0294 static int maxCacheAge(); 0295 0296 /** 0297 * Returns the maximum size that can be used for caching. 0298 * 0299 * By default this function returns the DEFAULT_MAX_CACHE_SIZE 0300 * value as defined in http_worker_defaults.h. Not that the 0301 * value returned is in bytes, hence a value of 5120 would mean 0302 * 5 Kb. 0303 * 0304 * @return the maximum cache size in bytes 0305 */ 0306 static int maxCacheSize(); // Maximum cache size in Kb. 0307 0308 /** 0309 * The directory which contains the cache files. 0310 * @return the directory that contains the cache files 0311 */ 0312 static QString cacheDir(); 0313 0314 /** 0315 * Returns the Cache control directive to be used. 0316 * @return the cache control value 0317 */ 0318 static KIO::CacheControl cacheControl(); 0319 0320 /*============================ DOWNLOAD CONFIG ==============================*/ 0321 0322 /** 0323 * Returns true if partial downloads should be 0324 * automatically resumed. 0325 * @return true to resume partial downloads 0326 */ 0327 static bool autoResume(); 0328 0329 /** 0330 * Returns true if partial downloads should be marked 0331 * with a ".part" extension. 0332 * @return true if partial downloads should get an ".part" extension 0333 */ 0334 static bool markPartial(); 0335 0336 /** 0337 * Returns the minimum file size for keeping aborted 0338 * downloads. 0339 * 0340 * Any data downloaded that does not meet this minimum 0341 * requirement will simply be discarded. The default size 0342 * is 5 KB. 0343 * 0344 * @return the minimum keep size for aborted downloads in bytes 0345 */ 0346 static int minimumKeepSize(); 0347 0348 /*============================ NETWORK CONNECTIONS ==========================*/ 0349 /** 0350 * Returns true if proxy connections should be persistent. 0351 * @return true if proxy connections should be persistent 0352 */ 0353 static bool persistentProxyConnection(); 0354 0355 /** 0356 * Returns true if connections should be persistent 0357 * @return true if the connections should be persistent 0358 */ 0359 static bool persistentConnections(); 0360 0361 /*===================== PROTOCOL CAPABILITIES ===============================*/ 0362 0363 /** 0364 * Returns whether the protocol can list files/objects. 0365 * If a protocol supports listing it can be browsed in e.g. file-dialogs 0366 * and konqueror. 0367 * 0368 * Whether a protocol supports listing is determined by the "listing=" 0369 * field in the protocol description file. 0370 * If the protocol support listing it should list the fields it provides in 0371 * this field. If the protocol does not support listing this field should 0372 * remain empty (default.) 0373 * 0374 * @param url the url to check 0375 * @return true if the protocol support listing 0376 * @see listing() 0377 */ 0378 static bool supportsListing(const QUrl &url); 0379 0380 /** 0381 * Returns whether the protocol can retrieve data from URLs. 0382 * 0383 * This corresponds to the "reading=" field in the protocol description file. 0384 * Valid values for this field are "true" or "false" (default). 0385 * 0386 * @param url the url to check 0387 * @return true if it is possible to read from the URL 0388 */ 0389 static bool supportsReading(const QUrl &url); 0390 0391 /** 0392 * Returns whether the protocol can store data to URLs. 0393 * 0394 * This corresponds to the "writing=" field in the protocol description file. 0395 * Valid values for this field are "true" or "false" (default). 0396 * 0397 * @param url the url to check 0398 * @return true if the protocol supports writing 0399 */ 0400 static bool supportsWriting(const QUrl &url); 0401 0402 /** 0403 * Returns whether the protocol can create directories/folders. 0404 * 0405 * This corresponds to the "makedir=" field in the protocol description file. 0406 * Valid values for this field are "true" or "false" (default). 0407 * 0408 * @param url the url to check 0409 * @return true if the protocol can create directories 0410 */ 0411 static bool supportsMakeDir(const QUrl &url); 0412 0413 /** 0414 * Returns whether the protocol can delete files/objects. 0415 * 0416 * This corresponds to the "deleting=" field in the protocol description file. 0417 * Valid values for this field are "true" or "false" (default). 0418 * 0419 * @param url the url to check 0420 * @return true if the protocol supports deleting 0421 */ 0422 static bool supportsDeleting(const QUrl &url); 0423 0424 /** 0425 * Returns whether the protocol can create links between files/objects. 0426 * 0427 * This corresponds to the "linking=" field in the protocol description file. 0428 * Valid values for this field are "true" or "false" (default). 0429 * 0430 * @param url the url to check 0431 * @return true if the protocol supports linking 0432 */ 0433 static bool supportsLinking(const QUrl &url); 0434 0435 /** 0436 * Returns whether the protocol can move files/objects between different 0437 * locations. 0438 * 0439 * This corresponds to the "moving=" field in the protocol description file. 0440 * Valid values for this field are "true" or "false" (default). 0441 * 0442 * @param url the url to check 0443 * @return true if the protocol supports moving 0444 */ 0445 static bool supportsMoving(const QUrl &url); 0446 0447 /** 0448 * Returns whether the protocol can be opened using KIO::open(const QUrl&). 0449 * 0450 * This corresponds to the "opening=" field in the protocol description file. 0451 * Valid values for this field are "true" or "false" (default). 0452 * 0453 * @param url the url to check 0454 * @return true if the protocol supports opening 0455 */ 0456 static bool supportsOpening(const QUrl &url); 0457 0458 /** 0459 * Returns whether the protocol can be truncated with FileJob::truncate(KIO::filesize_t length). 0460 * 0461 * This corresponds to the "truncating=" field in the protocol description file. 0462 * Valid values for this field are "true" or "false" (default). 0463 * 0464 * @param url the url to check 0465 * @return true if the protocol supports truncating 0466 * @since 5.66 0467 */ 0468 static bool supportsTruncating(const QUrl &url); 0469 0470 /** 0471 * Returns whether the protocol can copy files/objects directly from the 0472 * filesystem itself. If not, the application will read files from the 0473 * filesystem using the file-protocol and pass the data on to the destination 0474 * protocol. 0475 * 0476 * This corresponds to the "copyFromFile=" field in the protocol description file. 0477 * Valid values for this field are "true" or "false" (default). 0478 * 0479 * @param url the url to check 0480 * @return true if the protocol can copy files from the local file system 0481 */ 0482 static bool canCopyFromFile(const QUrl &url); 0483 0484 /** 0485 * Returns whether the protocol can copy files/objects directly to the 0486 * filesystem itself. If not, the application will receive the data from 0487 * the source protocol and store it in the filesystem using the 0488 * file-protocol. 0489 * 0490 * This corresponds to the "copyToFile=" field in the protocol description file. 0491 * Valid values for this field are "true" or "false" (default). 0492 * 0493 * @param url the url to check 0494 * @return true if the protocol can copy files to the local file system 0495 */ 0496 static bool canCopyToFile(const QUrl &url); 0497 0498 /** 0499 * Returns whether the protocol can rename (i.e. move fast) files/objects 0500 * directly from the filesystem itself. If not, the application will read 0501 * files from the filesystem using the file-protocol and pass the data on 0502 * to the destination protocol. 0503 * 0504 * This corresponds to the "renameFromFile=" field in the protocol description file. 0505 * Valid values for this field are "true" or "false" (default). 0506 * 0507 * @param url the url to check 0508 * @return true if the protocol can rename/move files from the local file system 0509 */ 0510 static bool canRenameFromFile(const QUrl &url); 0511 0512 /** 0513 * Returns whether the protocol can rename (i.e. move fast) files/objects 0514 * directly to the filesystem itself. If not, the application will receive 0515 * the data from the source protocol and store it in the filesystem using the 0516 * file-protocol. 0517 * 0518 * This corresponds to the "renameToFile=" field in the protocol description file. 0519 * Valid values for this field are "true" or "false" (default). 0520 * 0521 * @param url the url to check 0522 * @return true if the protocol can rename files to the local file system 0523 */ 0524 static bool canRenameToFile(const QUrl &url); 0525 0526 /** 0527 * Returns whether the protocol can recursively delete directories by itself. 0528 * If not (the usual case) then KIO will list the directory and delete files 0529 * and empty directories one by one. 0530 * 0531 * This corresponds to the "deleteRecursive=" field in the protocol description file. 0532 * Valid values for this field are "true" or "false" (default). 0533 * 0534 * @param url the url to check 0535 * @return true if the protocol can delete non-empty directories by itself. 0536 */ 0537 static bool canDeleteRecursive(const QUrl &url); 0538 0539 /** 0540 * This setting defines the strategy to use for generating a filename, when 0541 * copying a file or directory to another directory. By default the destination 0542 * filename is made out of the filename in the source URL. However if the 0543 * KIO worker displays names that are different from the filename of the URL 0544 * (e.g. kio_fonts shows Arial for arial.ttf, or kio_trash shows foo.txt and 0545 * uses some internal URL), using Name means that the display name (UDS_NAME) 0546 * will be used to as the filename in the destination directory. 0547 * 0548 * This corresponds to the "fileNameUsedForCopying=" field in the protocol description file. 0549 * Valid values for this field are "Name" or "FromURL" (default). 0550 * 0551 * @param url the url to check 0552 * @return how to generate the filename in the destination directory when copying/moving 0553 */ 0554 static KProtocolInfo::FileNameUsedForCopying fileNameUsedForCopying(const QUrl &url); 0555 0556 /** 0557 * Returns default MIME type for this URL based on the protocol. 0558 * 0559 * This corresponds to the "defaultMimetype=" field in the protocol description file. 0560 * 0561 * @param url the url to check 0562 * @return the default MIME type of the protocol, or an empty string if unknown 0563 */ 0564 static QString defaultMimetype(const QUrl &url); 0565 0566 /** 0567 * Returns whether the protocol should be treated as a filesystem 0568 * or as a stream when reading from it. 0569 * 0570 * This corresponds to the "input=" field in the protocol description file. 0571 * Valid values for this field are "filesystem", "stream" or "none" (default). 0572 * 0573 * @param url the url to check 0574 * @return the input type of the given @p url 0575 */ 0576 static KProtocolInfo::Type inputType(const QUrl &url); 0577 0578 /** 0579 * Returns whether the protocol should be treated as a filesystem 0580 * or as a stream when writing to it. 0581 * 0582 * This corresponds to the "output=" field in the protocol description file. 0583 * Valid values for this field are "filesystem", "stream" or "none" (default). 0584 * 0585 * @param url the url to check 0586 * @return the output type of the given @p url 0587 */ 0588 static KProtocolInfo::Type outputType(const QUrl &url); 0589 0590 /** 0591 * Returns the list of fields this protocol returns when listing 0592 * The current possibilities are 0593 * Name, Type, Size, Date, AccessDate, Access, Owner, Group, Link, URL, MimeType 0594 * as well as Extra1, Extra2 etc. for extra fields (see extraFields). 0595 * 0596 * This corresponds to the "listing=" field in the protocol description file. 0597 * The supported fields should be separated with ',' in the protocol description file. 0598 * 0599 * @param url the url to check 0600 * @return a list of field names 0601 */ 0602 static QStringList listing(const QUrl &url); 0603 0604 /** 0605 * Returns whether the protocol can act as a source protocol. 0606 * 0607 * A source protocol retrieves data from or stores data to the 0608 * location specified by a URL. 0609 * A source protocol is the opposite of a filter protocol. 0610 * 0611 * The "source=" field in the protocol description file determines 0612 * whether a protocol is a source protocol or a filter protocol. 0613 * @param url the url to check 0614 * @return true if the protocol is a source of data (e.g. http), false if the 0615 * protocol is a filter (e.g. gzip) 0616 */ 0617 static bool isSourceProtocol(const QUrl &url); 0618 0619 /** 0620 * Returns which protocol handles this MIME type, if it's an archive MIME type. 0621 * For instance zip:/ handles application/x-zip. 0622 * 0623 * This is defined in the protocol description file using an entry like 0624 * "archiveMimetype=application/x-zip" 0625 * 0626 * @param mimeType the MIME type to check 0627 * @return the protocol that can handle this archive MIME type, for instance "zip". 0628 * @since 4.1 0629 */ 0630 static QString protocolForArchiveMimetype(const QString &mimeType); 0631 0632 /*=============================== OTHERS ====================================*/ 0633 0634 /** 0635 * Force a reload of the general config file of 0636 * KIO workers ( kioslaverc). 0637 */ 0638 static void reparseConfiguration(); 0639 0640 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 101) 0641 /** 0642 * Return the protocol to use in order to handle the given @p url 0643 * It's usually the same, except that FTP, when handled by a proxy, 0644 * needs an HTTP ioslave. 0645 * 0646 * When a proxy is to be used, proxy contains the URL for the proxy. 0647 * @param url the url to check 0648 * @param proxy the URL of the proxy to use 0649 * @return the slave protocol (e.g. 'http'), can be null if unknown 0650 * 0651 * @deprecated Since 5.101, use workerProtocol(const QUrl &, QString &) 0652 */ 0653 static KIOCORE_DEPRECATED_VERSION(5, 101, "Use workerProtocol(const QUrl &, QString &)") QString slaveProtocol(const QUrl &url, QString &proxy); 0654 #endif 0655 0656 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 101) 0657 /** 0658 * Overloaded function that returns a list of all available proxy servers. 0659 * 0660 * @since 4.7 0661 * 0662 * @deprecated Since 5.101, use workerProtocol(const QUrl &, QStringList &) 0663 */ 0664 static KIOCORE_DEPRECATED_VERSION(5, 101, "Use workerProtocol(const QUrl &, QStringList &)") QString slaveProtocol(const QUrl &url, QStringList &proxy); 0665 #endif 0666 0667 /** 0668 * Return the protocol to use in order to handle the given @p url 0669 * It's usually the same, except that FTP, when handled by a proxy, 0670 * needs an HTTP KIO worker. 0671 * 0672 * When a proxy is to be used, proxy contains the URL for the proxy. 0673 * @param url the url to check 0674 * @param proxy the URL of the proxy to use 0675 * @return the worker protocol (e.g. 'http'), can be null if unknown 0676 * 0677 * @since 5.101 0678 */ 0679 static QString workerProtocol(const QUrl &url, QString &proxy); 0680 0681 /** 0682 * Overloaded function that returns a list of all available proxy servers. 0683 * 0684 * @since 5.101 0685 */ 0686 static QString workerProtocol(const QUrl &url, QStringList &proxy); 0687 0688 /** 0689 * Return Accept-Languages header built up according to user's desktop 0690 * language settings. 0691 * @return Accept-Languages header string 0692 */ 0693 static QString acceptLanguagesHeader(); 0694 0695 /** 0696 * Returns the charset to use for the specified @ref url. 0697 * 0698 * @since 4.10 0699 */ 0700 static QString charsetFor(const QUrl &url); 0701 0702 /** 0703 * @brief Returns whether the protocol suppports KIO/POSIX permissions handling. 0704 * 0705 * When this is false the Permissions properties tab may be hidden, for example. The protocol may still support 0706 * permission control through other means, specific to the individual KIO worker. 0707 * 0708 * @param url the url to check 0709 * @return whether the protocol supports permissions 0710 * @since 5.98 0711 */ 0712 static bool supportsPermissions(const QUrl &url); 0713 0714 private: 0715 friend class KIO::WorkerConfigPrivate; 0716 0717 /** 0718 * @internal 0719 * (Shared with WorkerConfig) 0720 */ 0721 KIOCORE_NO_EXPORT static QMap<QString, QString> entryMap(const QString &group); 0722 }; 0723 #endif