added: std::wstring Request::subdomain
support for subdomains git-svn-id: svn://ttmath.org/publicrep/winix/trunk@828 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
@@ -446,6 +446,7 @@ void App::ReadRequest()
|
||||
CheckRequestMethod();
|
||||
CheckFCGIRole();
|
||||
CheckSSL();
|
||||
SetSubdomain();
|
||||
|
||||
LogAccess();
|
||||
|
||||
@@ -531,6 +532,12 @@ void App::CheckSSL()
|
||||
}
|
||||
|
||||
|
||||
void App::SetSubdomain()
|
||||
{
|
||||
CreateSubdomain(config.base_url.c_str(), cur.request->env_http_host, cur.request->subdomain);
|
||||
}
|
||||
|
||||
|
||||
void App::LogAccess()
|
||||
{
|
||||
log.PutDate(log1);
|
||||
|
@@ -146,6 +146,7 @@ private:
|
||||
void CheckRequestMethod();
|
||||
void CheckFCGIRole();
|
||||
void CheckSSL();
|
||||
void SetSubdomain();
|
||||
|
||||
void PrepareSessionCookie();
|
||||
void AddDebugInfo(std::wstring & out);
|
||||
|
45
core/misc.h
45
core/misc.h
@@ -711,4 +711,49 @@ void RemovePostFileTmp(PostFileTab & post_file_tab);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
short_str is removed from long_str (and a last dots are removed too)
|
||||
and the result is stored in out
|
||||
|
||||
sample:
|
||||
short_str: "mydomain.tld"
|
||||
long_str: "www.subdomain.mydomain.tld"
|
||||
out: "www.subdomain"
|
||||
|
||||
short_str: "mydomain.tld"
|
||||
long_str: "otherdifferentstring"
|
||||
out: ""
|
||||
*/
|
||||
template<class StringType1, class StringType2, class StringType3>
|
||||
void CreateSubdomain(const StringType1 * short_str, const StringType2 * long_str, StringType3 & out)
|
||||
{
|
||||
size_t i1, i2;
|
||||
|
||||
out.clear();
|
||||
|
||||
for(i1=0 ; short_str[i1] != 0 ; ++i1);
|
||||
for(i2=0 ; long_str[i2] != 0 ; ++i2);
|
||||
|
||||
if( i1 >= i2 )
|
||||
return;
|
||||
|
||||
// i1 is < i2
|
||||
|
||||
while( i1-- > 0 )
|
||||
{
|
||||
i2 -= 1;
|
||||
|
||||
if( short_str[i1] != long_str[i2] )
|
||||
return; // short_str is not a last substring of long_str
|
||||
}
|
||||
|
||||
while( i2>0 && long_str[i2-1] == '.' )
|
||||
i2 -= 1;
|
||||
|
||||
for(i1=0 ; i1 < i2 ; ++i1)
|
||||
out += long_str[i1];
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@@ -86,6 +86,8 @@ void Request::Clear()
|
||||
|
||||
start_time = 0;
|
||||
memset(&start_tm, 0, sizeof(start_tm));
|
||||
|
||||
subdomain.clear();
|
||||
}
|
||||
|
||||
|
||||
|
@@ -133,6 +133,10 @@ struct Request
|
||||
time_t start_time;
|
||||
tm start_tm;
|
||||
|
||||
// a subdomain
|
||||
// subdomain = HTTP_HOST environment variable - config->base_url
|
||||
std::wstring subdomain;
|
||||
|
||||
|
||||
|
||||
Request();
|
||||
|
@@ -126,6 +126,13 @@ bool ssl = false;
|
||||
void System::RedirectTo(const Item & item, const wchar_t * postfix)
|
||||
{
|
||||
PutUrlProto(config->use_ssl, cur->request->redirect_to);
|
||||
|
||||
if( !cur->request->subdomain.empty() )
|
||||
{
|
||||
cur->request->redirect_to += cur->request->subdomain;
|
||||
cur->request->redirect_to += '.';
|
||||
}
|
||||
|
||||
cur->request->redirect_to += config->base_url;
|
||||
|
||||
if( item.type == Item::dir )
|
||||
@@ -152,6 +159,13 @@ void System::RedirectTo(const Item & item, const wchar_t * postfix)
|
||||
void System::RedirectTo(long item_id, const wchar_t * postfix)
|
||||
{
|
||||
PutUrlProto(config->use_ssl, cur->request->redirect_to);
|
||||
|
||||
if( !cur->request->subdomain.empty() )
|
||||
{
|
||||
cur->request->redirect_to += cur->request->subdomain;
|
||||
cur->request->redirect_to += '.';
|
||||
}
|
||||
|
||||
cur->request->redirect_to += config->base_url;
|
||||
Item * pdir = dirs.GetDir(item_id);
|
||||
|
||||
@@ -193,6 +207,13 @@ void System::RedirectTo(long item_id, const wchar_t * postfix)
|
||||
void System::RedirectTo(const wchar_t * url)
|
||||
{
|
||||
PutUrlProto(config->use_ssl, cur->request->redirect_to);
|
||||
|
||||
if( !cur->request->subdomain.empty() )
|
||||
{
|
||||
cur->request->redirect_to += cur->request->subdomain;
|
||||
cur->request->redirect_to += '.';
|
||||
}
|
||||
|
||||
cur->request->redirect_to += config->base_url;
|
||||
|
||||
if( url[0] == '/' )
|
||||
|
Reference in New Issue
Block a user