/xbmc/URL.h
http://github.com/xbmc/xbmc · C Header · 202 lines · 142 code · 34 blank · 26 comment · 3 complexity · d3df16328e2675a26ade0bdcefec6405 MD5 · raw file
- /*
- * Copyright (C) 2005-2018 Team Kodi
- * This file is part of Kodi - https://kodi.tv
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- * See LICENSES/README.md for more information.
- */
- #pragma once
- #include "utils/UrlOptions.h"
- #include <stdlib.h>
- #include <string>
- #ifdef TARGET_WINDOWS
- #undef SetPort // WIN32INCLUDES this is defined as SetPortA in WinSpool.h which is being included _somewhere_
- #endif
- class CURL
- {
- public:
- explicit CURL(const std::string& strURL)
- {
- Parse(strURL);
- }
- CURL() = default;
- virtual ~CURL(void);
- // explicit equals operator for std::string comparison
- bool operator==(const std::string &url) const { return Get() == url; }
- void Reset();
- void Parse(const std::string& strURL);
- void SetFileName(const std::string& strFileName);
- void SetHostName(const std::string& strHostName)
- {
- m_strHostName = strHostName;
- }
- void SetUserName(const std::string& strUserName)
- {
- m_strUserName = strUserName;
- }
- void SetDomain(const std::string& strDomain)
- {
- m_strDomain = strDomain;
- }
- void SetPassword(const std::string& strPassword)
- {
- m_strPassword = strPassword;
- }
- void SetProtocol(const std::string& strProtocol);
- void SetOptions(const std::string& strOptions);
- void SetProtocolOptions(const std::string& strOptions);
- void SetPort(int port)
- {
- m_iPort = port;
- }
- bool HasPort() const
- {
- return (m_iPort != 0);
- }
- int GetPort() const
- {
- return m_iPort;
- }
- const std::string& GetHostName() const
- {
- return m_strHostName;
- }
- const std::string& GetDomain() const
- {
- return m_strDomain;
- }
- const std::string& GetUserName() const
- {
- return m_strUserName;
- }
- const std::string& GetPassWord() const
- {
- return m_strPassword;
- }
- const std::string& GetFileName() const
- {
- return m_strFileName;
- }
- const std::string& GetProtocol() const
- {
- return m_strProtocol;
- }
- const std::string GetTranslatedProtocol() const;
- const std::string& GetFileType() const
- {
- return m_strFileType;
- }
- const std::string& GetShareName() const
- {
- return m_strShareName;
- }
- const std::string& GetOptions() const
- {
- return m_strOptions;
- }
- const std::string& GetProtocolOptions() const
- {
- return m_strProtocolOptions;
- }
- const std::string GetFileNameWithoutPath() const; /* return the filename excluding path */
- char GetDirectorySeparator() const;
- std::string Get() const;
- std::string GetWithoutOptions() const;
- std::string GetWithoutUserDetails(bool redact = false) const;
- std::string GetWithoutFilename() const;
- std::string GetRedacted() const;
- static std::string GetRedacted(const std::string& path);
- bool IsLocal() const;
- bool IsLocalHost() const;
- static bool IsFileOnly(const std::string &url); ///< return true if there are no directories in the url.
- static bool IsFullPath(const std::string &url); ///< return true if the url includes the full path
- static std::string Decode(const std::string& strURLData);
- static std::string Encode(const std::string& strURLData);
- /*! \brief Check whether a URL is a given URL scheme.
- Comparison is case-insensitive as per RFC1738
- \param type a lower-case scheme name, e.g. "smb".
- \return true if the url is of the given scheme, false otherwise.
- */
- bool IsProtocol(const char *type) const
- {
- return IsProtocolEqual(m_strProtocol, type);
- }
- /*! \brief Check whether a URL protocol is a given URL scheme.
- Both parameters MUST be lower-case. Typically this would be called using
- the result of TranslateProtocol() which enforces this for protocol.
- \param protocol a lower-case scheme name, e.g. "ftp"
- \param type a lower-case scheme name, e.g. "smb".
- \return true if the url is of the given scheme, false otherwise.
- */
- static bool IsProtocolEqual(const std::string& protocol, const char *type);
- /*! \brief Check whether a URL is a given filetype.
- Comparison is effectively case-insensitive as both the parameter
- and m_strFileType are lower-case.
- \param type a lower-case filetype, e.g. "mp3".
- \return true if the url is of the given filetype, false otherwise.
- */
- bool IsFileType(const char *type) const
- {
- return m_strFileType == type;
- }
- void GetOptions(std::map<std::string, std::string> &options) const;
- bool HasOption(const std::string &key) const;
- bool GetOption(const std::string &key, std::string &value) const;
- std::string GetOption(const std::string &key) const;
- void SetOption(const std::string &key, const std::string &value);
- void RemoveOption(const std::string &key);
- void GetProtocolOptions(std::map<std::string, std::string> &options) const;
- bool HasProtocolOption(const std::string &key) const;
- bool GetProtocolOption(const std::string &key, std::string &value) const;
- std::string GetProtocolOption(const std::string &key) const;
- void SetProtocolOption(const std::string &key, const std::string &value);
- void RemoveProtocolOption(const std::string &key);
- protected:
- int m_iPort = 0;
- std::string m_strHostName;
- std::string m_strShareName;
- std::string m_strDomain;
- std::string m_strUserName;
- std::string m_strPassword;
- std::string m_strFileName;
- std::string m_strProtocol;
- std::string m_strFileType;
- std::string m_strOptions;
- std::string m_strProtocolOptions;
- CUrlOptions m_options;
- CUrlOptions m_protocolOptions;
- };