Merge with develop
--HG-- branch : compatibility-develop
This commit is contained in:
commit
60a739955b
5 changed files with 47 additions and 43 deletions
|
@ -39,7 +39,6 @@ namespace NLGUI
|
|||
class CGroupParagraph;
|
||||
|
||||
extern std::string CurrentCookie;
|
||||
extern std::string HTTPCurrentDomain;
|
||||
|
||||
// HTML group
|
||||
/**
|
||||
|
@ -376,6 +375,7 @@ namespace NLGUI
|
|||
std::string _URL;
|
||||
// Current URL
|
||||
std::string _DocumentUrl;
|
||||
std::string _DocumentDomain;
|
||||
// Valid base href was found
|
||||
bool _IgnoreBaseUrlTag;
|
||||
// Fragment from loading url
|
||||
|
|
|
@ -51,7 +51,8 @@ namespace NLGUI
|
|||
|
||||
public:
|
||||
std::string scheme;
|
||||
std::string domain;
|
||||
std::string authority;
|
||||
std::string host;
|
||||
std::string path;
|
||||
std::string query;
|
||||
std::string hash;
|
||||
|
|
|
@ -506,7 +506,7 @@ namespace NLGUI
|
|||
}
|
||||
else
|
||||
{
|
||||
receiveCookies(_CurlWWW->Request, HTTPCurrentDomain, _TrustedDomain);
|
||||
receiveCookies(_CurlWWW->Request, _DocumentDomain, _TrustedDomain);
|
||||
|
||||
// redirect, get the location and try browse again
|
||||
// we cant use curl redirection because 'addHTTPGetParams()' must be called on new destination
|
||||
|
@ -533,7 +533,7 @@ namespace NLGUI
|
|||
}
|
||||
else
|
||||
{
|
||||
receiveCookies(_CurlWWW->Request, HTTPCurrentDomain, _TrustedDomain);
|
||||
receiveCookies(_CurlWWW->Request, _DocumentDomain, _TrustedDomain);
|
||||
|
||||
_RedirectsRemaining = DEFAULT_RYZOM_REDIRECT_LIMIT;
|
||||
|
||||
|
@ -2548,6 +2548,7 @@ namespace NLGUI
|
|||
_SelectOption = false;
|
||||
_GroupListAdaptor = NULL;
|
||||
_DocumentUrl = "";
|
||||
_DocumentDomain = "";
|
||||
_UrlFragment.clear();
|
||||
_RefreshUrl.clear();
|
||||
_NextRefreshTime = 0.0;
|
||||
|
@ -4657,9 +4658,12 @@ namespace NLGUI
|
|||
string finalUrl;
|
||||
bool isLocal = lookupLocalFile (finalUrl, _URL.c_str(), true);
|
||||
|
||||
// Save new url
|
||||
_URL = finalUrl;
|
||||
|
||||
CUrlParser uri (_URL);
|
||||
_TrustedDomain = isTrustedDomain(uri.host);
|
||||
_DocumentDomain = uri.host;
|
||||
|
||||
// file is probably from bnp (ingame help)
|
||||
if (isLocal)
|
||||
{
|
||||
|
@ -4667,8 +4671,6 @@ namespace NLGUI
|
|||
}
|
||||
else
|
||||
{
|
||||
_TrustedDomain = isTrustedDomain(setCurrentDomain(finalUrl));
|
||||
|
||||
SFormFields formfields;
|
||||
if (_PostNextTime)
|
||||
{
|
||||
|
@ -4704,9 +4706,11 @@ namespace NLGUI
|
|||
// Ref the form
|
||||
CForm &form = _Forms[_PostFormId];
|
||||
|
||||
// Save new url
|
||||
_URL = form.Action;
|
||||
_TrustedDomain = isTrustedDomain(setCurrentDomain(_URL));
|
||||
|
||||
CUrlParser uri(_URL);
|
||||
_TrustedDomain = isTrustedDomain(uri.host);
|
||||
_DocumentDomain = uri.host;
|
||||
|
||||
for (i=0; i<form.Entries.size(); i++)
|
||||
{
|
||||
|
@ -4814,6 +4818,7 @@ namespace NLGUI
|
|||
#endif
|
||||
|
||||
_TrustedDomain = true;
|
||||
_DocumentDomain = "localhost";
|
||||
|
||||
// Stop previous browse, remove content
|
||||
stopBrowse ();
|
||||
|
@ -4899,7 +4904,7 @@ namespace NLGUI
|
|||
curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent.c_str());
|
||||
|
||||
// Cookies
|
||||
sendCookies(curl, HTTPCurrentDomain, _TrustedDomain);
|
||||
sendCookies(curl, _DocumentDomain, _TrustedDomain);
|
||||
|
||||
// Referer
|
||||
if (!referer.empty())
|
||||
|
@ -4983,9 +4988,6 @@ namespace NLGUI
|
|||
nlwarning("(%s) HTML download finished, content length %d, type '%s', code %d", _Id.c_str(), content.size(), type.c_str(), code);
|
||||
#endif
|
||||
|
||||
// set trusted domain for parsing
|
||||
_TrustedDomain = isTrustedDomain(setCurrentDomain(_URL));
|
||||
|
||||
// create <html> markup for image downloads
|
||||
if (type.find("image/") == 0 && content.size() > 0)
|
||||
{
|
||||
|
|
|
@ -31,7 +31,6 @@ namespace NLGUI
|
|||
|
||||
/// store all cookies we receive and resent them depending of the domain
|
||||
static std::map<std::string, std::map<std::string, std::string> > HTTPCookies;
|
||||
std::string HTTPCurrentDomain; // The current domain that will be used to get which cookies to send
|
||||
|
||||
// ***************************************************************************
|
||||
|
||||
|
@ -332,24 +331,6 @@ namespace NLGUI
|
|||
return dst;
|
||||
}
|
||||
|
||||
// set current HTTPCurrentDomain for cookie selection, return new domain
|
||||
const std::string &setCurrentDomain(const std::string &uri)
|
||||
{
|
||||
if (uri.find("http://") == 0)
|
||||
HTTPCurrentDomain = uri.substr(7, uri.find("/", 7) - 7);
|
||||
else
|
||||
if (uri.find("https://") == 0)
|
||||
HTTPCurrentDomain = uri.substr(8, uri.find("/", 8) - 8);
|
||||
else
|
||||
if (uri.find("//") == 0)
|
||||
HTTPCurrentDomain = uri.substr(2, uri.find("/", 2) - 2);
|
||||
else
|
||||
if (uri.find("/") != std::string::npos)
|
||||
HTTPCurrentDomain = uri.substr(0, uri.find("/") - 1);
|
||||
|
||||
return HTTPCurrentDomain;
|
||||
}
|
||||
|
||||
// update HTTPCookies list
|
||||
static void receiveCookie(const char *nsformat, const std::string &domain, bool trusted)
|
||||
{
|
||||
|
@ -371,6 +352,9 @@ namespace NLGUI
|
|||
chunks[0] = chunks[0].substr(10);
|
||||
}
|
||||
|
||||
// make sure domain is lowercase
|
||||
chunks[0] = toLower(chunks[0]);
|
||||
|
||||
if (chunks[0] != domain && chunks[0] != std::string("." + domain))
|
||||
{
|
||||
// cookie is for different domain
|
||||
|
|
|
@ -14,8 +14,7 @@
|
|||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <string>
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/common.h"
|
||||
#include "nel/gui/url_parser.h"
|
||||
|
||||
using namespace std;
|
||||
|
@ -63,15 +62,33 @@ namespace NLGUI
|
|||
}
|
||||
}
|
||||
|
||||
// scan for domain
|
||||
// scan for authority
|
||||
if (uri.substr(0, 2) == "//")
|
||||
{
|
||||
pos = uri.find("/", 3);
|
||||
domain = uri.substr(0, pos);
|
||||
pos = uri.find_first_of("/?", 2);
|
||||
authority = uri.substr(0, pos);
|
||||
if (pos != npos)
|
||||
uri = uri.substr(pos);
|
||||
else
|
||||
uri.clear();
|
||||
|
||||
// strip empty port from authority
|
||||
if (authority.find_last_of(":") == authority.length() - 1)
|
||||
authority = authority.substr(0, authority.length() - 1);
|
||||
|
||||
// extract host from user:pass@host:port
|
||||
pos = authority.find("@");
|
||||
if (pos != npos)
|
||||
host = authority.substr(pos + 1);
|
||||
else
|
||||
host = authority.substr(2);
|
||||
|
||||
// case-insensitive
|
||||
host = NLMISC::toLower(host);
|
||||
|
||||
pos = host.find(":");
|
||||
if (pos != npos)
|
||||
host = host.substr(0, pos);
|
||||
}
|
||||
|
||||
// scan for query
|
||||
|
@ -99,11 +116,11 @@ namespace NLGUI
|
|||
|
||||
scheme = base.scheme;
|
||||
|
||||
// if we already have domain, then ignore base path
|
||||
if (!domain.empty())
|
||||
// if we already have authority, then ignore base path
|
||||
if (!authority.empty())
|
||||
return;
|
||||
|
||||
domain = base.domain;
|
||||
authority = base.authority;
|
||||
if (path.empty())
|
||||
{
|
||||
path = base.path;
|
||||
|
@ -190,7 +207,7 @@ namespace NLGUI
|
|||
|
||||
bool CUrlParser::isAbsolute() const
|
||||
{
|
||||
return !scheme.empty() && !domain.empty();
|
||||
return !scheme.empty() && !authority.empty();
|
||||
}
|
||||
|
||||
// serialize URL back to string
|
||||
|
@ -200,9 +217,9 @@ namespace NLGUI
|
|||
if (!scheme.empty())
|
||||
result += scheme + ":";
|
||||
|
||||
if (!domain.empty())
|
||||
if (!authority.empty())
|
||||
{
|
||||
result += domain;
|
||||
result += authority;
|
||||
}
|
||||
|
||||
// path already has leading slash
|
||||
|
|
Loading…
Reference in a new issue