[wip] port to C17/C++20
This commit is contained in:
parent
a56d0f3407
commit
18d4c312e5
@ -2,7 +2,7 @@
|
|||||||
#define HGL_NETWORK_HTTP_INPUT_STREAM_INCLUDE
|
#define HGL_NETWORK_HTTP_INPUT_STREAM_INCLUDE
|
||||||
|
|
||||||
#include<hgl/io/InputStream.h>
|
#include<hgl/io/InputStream.h>
|
||||||
#include<hgl/util/plist/PList.h>
|
#include<hgl/util/plist/PAttrib.h>
|
||||||
#include<hgl/network/IP.h>
|
#include<hgl/network/IP.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
@ -39,7 +39,7 @@ namespace hgl
|
|||||||
uint response_code; //HTTP响应代码
|
uint response_code; //HTTP响应代码
|
||||||
UTF8String response_info; //HTTP响应信息
|
UTF8String response_info; //HTTP响应信息
|
||||||
|
|
||||||
UTF8PList response_list; //响应信息
|
UTF8PAttribSet response_list; //响应信息
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -49,9 +49,9 @@ namespace hgl
|
|||||||
bool Open(IPAddress *,const UTF8String &,const UTF8String &); ///<打开一个网址
|
bool Open(IPAddress *,const UTF8String &,const UTF8String &); ///<打开一个网址
|
||||||
void Close() override; ///<
|
void Close() override; ///<
|
||||||
|
|
||||||
uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码
|
uint GetResponseCode()const{return response_code;} ///<返回HTTP响应代码
|
||||||
const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息
|
const UTF8String & GetResponseInfo()const{return response_info;} ///<返回HTTP响应信息
|
||||||
const UTF8PList & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表
|
const UTF8PAttribSet & GetResponseList()const{return response_list;} ///<返回HTTP响应信息列表
|
||||||
|
|
||||||
int64 Read(void *,int64) override; ///<读取数据
|
int64 Read(void *,int64) override; ///<读取数据
|
||||||
int64 Peek(void *,int64) override{return 0;} ///<预览数据
|
int64 Peek(void *,int64) override{return 0;} ///<预览数据
|
||||||
|
@ -234,15 +234,15 @@ namespace hgl
|
|||||||
/**
|
/**
|
||||||
* 转换当前地址到一个可视字符串,字符串所需长度请使用GetIPStringMaxSize()获取
|
* 转换当前地址到一个可视字符串,字符串所需长度请使用GetIPStringMaxSize()获取
|
||||||
*/
|
*/
|
||||||
virtual void ToString(char *,int)const=0;
|
virtual void ToString(u8char *,int)const=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个可视字符串地址,需自行delete[]
|
* 创建一个可视字符串地址,需自行delete[]
|
||||||
*/
|
*/
|
||||||
virtual char *CreateString()const
|
virtual u8char *CreateString()const
|
||||||
{
|
{
|
||||||
const int max_size=GetIPStringMaxSize();
|
const int max_size=GetIPStringMaxSize();
|
||||||
char *ipstr=new char[max_size+1];
|
u8char *ipstr=new u8char[max_size+1];
|
||||||
|
|
||||||
ToString(ipstr,max_size);
|
ToString(ipstr,max_size);
|
||||||
|
|
||||||
@ -324,9 +324,9 @@ namespace hgl
|
|||||||
const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;}
|
const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;}
|
||||||
const ushort GetPort()const override;
|
const ushort GetPort()const override;
|
||||||
|
|
||||||
static void ToString(char *str,const int,const in_addr *);
|
static void ToString(u8char *str,const int,const in_addr *);
|
||||||
static void ToString(char *str,const int,const sockaddr_in *);
|
static void ToString(u8char *str,const int,const sockaddr_in *);
|
||||||
void ToString(char *str,const int)const override;
|
void ToString(u8char *str,const int)const override;
|
||||||
|
|
||||||
static int GetDomainIPList(List<in_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得当指定域名的IPv4地址列表
|
static int GetDomainIPList(List<in_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得当指定域名的IPv4地址列表
|
||||||
static int GetLocalIPList(List<in_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表
|
static int GetLocalIPList(List<in_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表
|
||||||
@ -392,9 +392,9 @@ namespace hgl
|
|||||||
|
|
||||||
const ushort GetPort()const override;
|
const ushort GetPort()const override;
|
||||||
|
|
||||||
static void ToString(char *str,const int,const in6_addr *);
|
static void ToString(u8char *str,const int,const in6_addr *);
|
||||||
static void ToString(char *str,const int,const sockaddr_in6 *);
|
static void ToString(u8char *str,const int,const sockaddr_in6 *);
|
||||||
void ToString(char *str,const int)const override;
|
void ToString(u8char *str,const int)const override;
|
||||||
|
|
||||||
static int GetDomainIPList(List<in6_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得指定域名的IPv6地址列表
|
static int GetDomainIPList(List<in6_addr> &addr_list,const char *domain,int _socktype,int _protocol); ///<取得指定域名的IPv6地址列表
|
||||||
static int GetLocalIPList(List<in6_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表
|
static int GetLocalIPList(List<in6_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define HGL_NETWORK_SOCKET_MANAGE_INCLUDE
|
#define HGL_NETWORK_SOCKET_MANAGE_INCLUDE
|
||||||
|
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
|
#include<hgl/type/SortedSets.h>
|
||||||
#include<hgl/network/SocketEvent.h>
|
#include<hgl/network/SocketEvent.h>
|
||||||
#include<hgl/network/TCPAccept.h>
|
#include<hgl/network/TCPAccept.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
|
@ -6,7 +6,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace network
|
namespace network
|
||||||
{
|
{
|
||||||
bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const char *data,const uint size);
|
bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const u8char *data,const uint size);
|
||||||
void MakeWebSocketAccept(UTF8String &result,const UTF8String &sec_websocket_key,const UTF8String &sec_websocket_protocol);
|
void MakeWebSocketAccept(UTF8String &result,const UTF8String &sec_websocket_key,const UTF8String &sec_websocket_protocol);
|
||||||
}//namespace network
|
}//namespace network
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
|
@ -13,7 +13,7 @@ namespace hgl
|
|||||||
class WebSocketAccept:public TCPAccept
|
class WebSocketAccept:public TCPAccept
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
DataArray<char> data_out_str;
|
DataArray<u8char> data_out_str;
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ namespace hgl
|
|||||||
|
|
||||||
addr->ToString(ipstr,IP_STR_MAX_SIZE);
|
addr->ToString(ipstr,IP_STR_MAX_SIZE);
|
||||||
|
|
||||||
LOG_INFO(U8_TEXT("AcceptServer Accept IP:")+UTF8String(ipstr)+U8_TEXT(" ,sock:")+UTF8String::numberOf(new_sock));
|
LOG_INFO(U8_TEXT("AcceptServer Accept IP:")+UTF8String((u8char *)ipstr)+U8_TEXT(" ,sock:")+UTF8String::numberOf(new_sock));
|
||||||
|
|
||||||
return(new_sock);
|
return(new_sock);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ namespace hgl
|
|||||||
if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV))
|
if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
name=hostname;
|
name=(u8char *)hostname;
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
int count=ip_stack.GetCount();
|
int count=ip_stack.GetCount();
|
||||||
|
|
||||||
ip_stack.SetMaxCount(count+1024);
|
ip_stack.PreAlloc(count+1024);
|
||||||
|
|
||||||
server->CreateIPAddress(ip_stack.GetData()+count,1024);
|
server->CreateIPAddress(ip_stack.GetData()+count,1024);
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ namespace hgl
|
|||||||
RETURN_ERROR(-3);
|
RETURN_ERROR(-3);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO(U8_TEXT("Create ")+UTF8String(addr->GetProtocolName())+U8_TEXT(" Socket OK: ")+UTF8String::numberOf(s));
|
LOG_INFO(U8_TEXT("Create ")+UTF8String((u8char *)(addr->GetProtocolName()))+U8_TEXT(" Socket OK: ")+UTF8String::numberOf(s));
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ namespace hgl
|
|||||||
int SocketManage::Update(const double &time_out)
|
int SocketManage::Update(const double &time_out)
|
||||||
{
|
{
|
||||||
//将error_set放在这里,是为了保留它给外面的调用者使用
|
//将error_set放在这里,是为了保留它给外面的调用者使用
|
||||||
error_sets.ClearData();
|
error_sets.Clear();
|
||||||
|
|
||||||
const int count=manage->Update(time_out,sock_recv_list,sock_send_list,sock_error_list);
|
const int count=manage->Update(time_out,sock_recv_list,sock_send_list,sock_error_list);
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ namespace hgl
|
|||||||
SAFE_CLEAR(ipstr);
|
SAFE_CLEAR(ipstr);
|
||||||
ipstr=ThisAddress->CreateString();
|
ipstr=ThisAddress->CreateString();
|
||||||
|
|
||||||
LOG_HINT(U8_TEXT("Don't Connect to TCPServer ")+UTF8String(ipstr));
|
LOG_HINT(U8_TEXT("Don't Connect to TCPServer ")+UTF8String((u8char *)ipstr));
|
||||||
this->CloseSocket();
|
this->CloseSocket();
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
@ -13,23 +13,23 @@ namespace hgl
|
|||||||
* @param size 信息头长度
|
* @param size 信息头长度
|
||||||
* @return 是否解晰成功
|
* @return 是否解晰成功
|
||||||
*/
|
*/
|
||||||
bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const char *data,const uint size)
|
bool GetWebSocketInfo(UTF8String &sec_websocket_key,UTF8String &sec_websocket_protocol,uint &sec_websocket_version,const u8char *data,const uint size)
|
||||||
{
|
{
|
||||||
constexpr char SEC_WEBSOCKET_KEY[]="Sec-WebSocket-Key: ";
|
constexpr u8char SEC_WEBSOCKET_KEY[]=U8_TEXT("Sec-WebSocket-Key: ");
|
||||||
constexpr uint SEC_WEBSOCKET_KEY_SIZE=sizeof(SEC_WEBSOCKET_KEY)-1; //sizeof的带\0所以要-1
|
constexpr uint SEC_WEBSOCKET_KEY_SIZE=sizeof(SEC_WEBSOCKET_KEY)-1; //sizeof的带\0所以要-1
|
||||||
|
|
||||||
constexpr char SEC_WEBSOCKET_PROTOCOL[]="Sec-WebSocket-Protocol: ";
|
constexpr u8char SEC_WEBSOCKET_PROTOCOL[]=U8_TEXT("Sec-WebSocket-Protocol: ");
|
||||||
constexpr uint SEC_WEBSOCKET_PROTOCOL_SIZE=sizeof(SEC_WEBSOCKET_PROTOCOL)-1;
|
constexpr uint SEC_WEBSOCKET_PROTOCOL_SIZE=sizeof(SEC_WEBSOCKET_PROTOCOL)-1;
|
||||||
|
|
||||||
constexpr char SEC_WEBSOCKET_VERSION[]="Sec-WebSocket-Version: ";
|
constexpr u8char SEC_WEBSOCKET_VERSION[]=U8_TEXT("Sec-WebSocket-Version: ");
|
||||||
constexpr uint SEC_WEBSOCKET_VERSION_SIZE=sizeof(SEC_WEBSOCKET_VERSION)-1;
|
constexpr uint SEC_WEBSOCKET_VERSION_SIZE=sizeof(SEC_WEBSOCKET_VERSION)-1;
|
||||||
|
|
||||||
if(!data||size<40)return(false);
|
if(!data||size<40)return(false);
|
||||||
|
|
||||||
const char *end;
|
const u8char *end;
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *key=hgl::strstr(data,size,SEC_WEBSOCKET_KEY,SEC_WEBSOCKET_KEY_SIZE);
|
const u8char *key=hgl::strstr(data,size,SEC_WEBSOCKET_KEY,SEC_WEBSOCKET_KEY_SIZE);
|
||||||
|
|
||||||
if(!key)return(false);
|
if(!key)return(false);
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *protocol=hgl::strstr(data,size,SEC_WEBSOCKET_PROTOCOL,SEC_WEBSOCKET_PROTOCOL_SIZE);
|
const u8char *protocol=hgl::strstr(data,size,SEC_WEBSOCKET_PROTOCOL,SEC_WEBSOCKET_PROTOCOL_SIZE);
|
||||||
|
|
||||||
if(protocol) //也有可能是不存在的
|
if(protocol) //也有可能是不存在的
|
||||||
{
|
{
|
||||||
@ -55,7 +55,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *version=hgl::strstr(data,size,SEC_WEBSOCKET_VERSION,SEC_WEBSOCKET_VERSION_SIZE);
|
const u8char *version=hgl::strstr(data,size,SEC_WEBSOCKET_VERSION,SEC_WEBSOCKET_VERSION_SIZE);
|
||||||
|
|
||||||
if(version)
|
if(version)
|
||||||
{
|
{
|
||||||
|
@ -20,16 +20,16 @@ namespace hgl
|
|||||||
|
|
||||||
void WebSocketAccept::WebSocketHandshake()
|
void WebSocketAccept::WebSocketHandshake()
|
||||||
{
|
{
|
||||||
constexpr char HTTP_HEADER_END_STR[4]={'\r','\n','\r','\n'}; //别用"\r\n\r\n",不然sizeof会得出来5
|
constexpr u8char HTTP_HEADER_END_STR[4]={'\r','\n','\r','\n'}; //别用"\r\n\r\n",不然sizeof会得出来5
|
||||||
constexpr int HTTP_HEADER_END_SIZE=sizeof(HTTP_HEADER_END_STR);
|
constexpr int HTTP_HEADER_END_SIZE=sizeof(HTTP_HEADER_END_STR);
|
||||||
|
|
||||||
DataArray<char> ws_header(1024);
|
DataArray<u8char> ws_header(1024);
|
||||||
|
|
||||||
int pos=0;
|
int pos=0;
|
||||||
int total=0;
|
int total=0;
|
||||||
int size=0;
|
int size=0;
|
||||||
|
|
||||||
const char *end;
|
const u8char *end;
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
@ -45,7 +45,7 @@ namespace hgl
|
|||||||
recv_total+=size;
|
recv_total+=size;
|
||||||
pos+=size;
|
pos+=size;
|
||||||
|
|
||||||
end=hgl::strrstr<const char>(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE);
|
end=hgl::strrstr<const u8char>(ws_header.data(),pos,HTTP_HEADER_END_STR,HTTP_HEADER_END_SIZE);
|
||||||
|
|
||||||
if(!end)
|
if(!end)
|
||||||
continue;
|
continue;
|
||||||
@ -233,7 +233,7 @@ namespace hgl
|
|||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
data_out_str.SetCount(msg_length*3);
|
data_out_str.SetCount(msg_length*3);
|
||||||
|
|
||||||
DataToLowerHexStr(data_out_str.data(),(uint8 *)pack,msg_length,',');
|
DataToLowerHexStr(data_out_str.data(),(uint8 *)pack,msg_length,u8char(','));
|
||||||
|
|
||||||
LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Recv binary [")+UTF8String::numberOf(msg_length)+U8_TEXT("]: ")+UTF8String(data_out_str.data()));
|
LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Recv binary [")+UTF8String::numberOf(msg_length)+U8_TEXT("]: ")+UTF8String(data_out_str.data()));
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
@ -336,7 +336,7 @@ namespace hgl
|
|||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
data_out_str.SetCount(size*3);
|
data_out_str.SetCount(size*3);
|
||||||
|
|
||||||
DataToLowerHexStr(data_out_str.data(),(uint8 *)data,size,',');
|
DataToLowerHexStr(data_out_str.data(),(uint8 *)data,size,u8char(','));
|
||||||
|
|
||||||
LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Send binary [")+UTF8String::numberOf(size)+U8_TEXT("]: ")+UTF8String(data_out_str.data()));
|
LOG_INFO(U8_TEXT("WebSocket[")+UTF8String::numberOf(ThisSocket)+U8_TEXT("] Send binary [")+UTF8String::numberOf(size)+U8_TEXT("]: ")+UTF8String(data_out_str.data()));
|
||||||
#endif//_DEBUG
|
#endif//_DEBUG
|
||||||
|
@ -6,7 +6,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg)
|
UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg)
|
||||||
{
|
{
|
||||||
UTF8String agent="Mozilla/5.0 ";
|
UTF8String agent=U8_TEXT("Mozilla/5.0 ");
|
||||||
|
|
||||||
if(cfg.os>=OS_WindowsX86
|
if(cfg.os>=OS_WindowsX86
|
||||||
&&cfg.os<=OS_LinuxX86_64)
|
&&cfg.os<=OS_LinuxX86_64)
|
||||||
@ -14,52 +14,52 @@ namespace hgl
|
|||||||
if(cfg.os>=OS_WindowsX86
|
if(cfg.os>=OS_WindowsX86
|
||||||
&&cfg.os<=OS_WindowsWOW64)
|
&&cfg.os<=OS_WindowsWOW64)
|
||||||
{
|
{
|
||||||
agent+="(Windows NT "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; ";
|
agent+=U8_TEXT("(Windows NT ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; ");
|
||||||
|
|
||||||
if(cfg.os==OS_WindowsAMD64)agent+="Win64; x64; ";else
|
if(cfg.os==OS_WindowsAMD64)agent+=U8_TEXT("Win64; x64; ");else
|
||||||
if(cfg.os==OS_WindowsWOW64)agent+="WOW64; ";
|
if(cfg.os==OS_WindowsWOW64)agent+=U8_TEXT("WOW64; ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(cfg.os==OS_macOS)
|
if(cfg.os==OS_macOS)
|
||||||
agent+="(Macintosh; Intel Mac OS X "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; ";
|
agent+=U8_TEXT("(Macintosh; Intel Mac OS X ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; ");
|
||||||
else
|
else
|
||||||
if(cfg.os==OS_Linuxi686)
|
if(cfg.os==OS_Linuxi686)
|
||||||
agent+="(X11; Linux i686; ";
|
agent+=U8_TEXT("(X11; Linux i686; ");
|
||||||
else
|
else
|
||||||
if(cfg.os==OS_LinuxX86_64)
|
if(cfg.os==OS_LinuxX86_64)
|
||||||
agent+="(X11; Linux x86_64; ";
|
agent+=U8_TEXT("(X11; Linux x86_64; ");
|
||||||
|
|
||||||
agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/"+UTF8String::numberOf(cfg.gecko_version)+" Firefox/"
|
agent+=U8_TEXT("rv:")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(") Gecko/")+UTF8String::numberOf(cfg.gecko_version)+U8_TEXT(" Firefox/")
|
||||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor);
|
+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(cfg.os>=OS_iPod
|
if(cfg.os>=OS_iPod
|
||||||
&&cfg.os<=OS_iPad)
|
&&cfg.os<=OS_iPad)
|
||||||
{
|
{
|
||||||
if(cfg.os==OS_iPod) agent+="(iPod touch; ";else
|
if(cfg.os==OS_iPod) agent+=U8_TEXT("(iPod touch; ");else
|
||||||
if(cfg.os==OS_iPad) agent+="(iPad; ";else
|
if(cfg.os==OS_iPad) agent+=U8_TEXT("(iPad; ");else
|
||||||
agent+="(iPhone; ";
|
agent+=U8_TEXT("(iPhone; ");
|
||||||
|
|
||||||
agent+= "CPU iPhone OS "+UTF8String::numberOf(cfg.os_ver.major)+"_"+UTF8String::numberOf(cfg.os_ver.minor)+" like Mac OS X) "+
|
agent+= U8_TEXT("CPU iPhone OS ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT("_")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT(" like Mac OS X) ")+
|
||||||
"AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4";
|
U8_TEXT("AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(cfg.os>=OS_AndroidPhone
|
if(cfg.os>=OS_AndroidPhone
|
||||||
&&cfg.os<=OS_AndroidTV)
|
&&cfg.os<=OS_AndroidTV)
|
||||||
{
|
{
|
||||||
agent+="(Android "+UTF8String::numberOf(cfg.os_ver.major)+"."+UTF8String::numberOf(cfg.os_ver.minor)+"; ";
|
agent+=U8_TEXT("(Android ")+UTF8String::numberOf(cfg.os_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.os_ver.minor)+U8_TEXT("; ");
|
||||||
|
|
||||||
if(cfg.os==OS_AndroidPhone )agent+="Mobile; ";
|
if(cfg.os==OS_AndroidPhone )agent+=U8_TEXT("Mobile; ");
|
||||||
if(cfg.os==OS_AndroidTablet )agent+="Tablet; ";
|
if(cfg.os==OS_AndroidTablet )agent+=U8_TEXT("Tablet; ");
|
||||||
if(cfg.os==OS_AndroidTV )agent+="TV; ";
|
if(cfg.os==OS_AndroidTV )agent+=U8_TEXT("TV; ");
|
||||||
|
|
||||||
agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/"
|
agent+=U8_TEXT("rv:")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(") Gecko/")
|
||||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+" Firefox/"
|
+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(" Firefox/")
|
||||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor);
|
+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
agent+="Firefox/"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor);
|
agent+=U8_TEXT("Firefox/")+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return agent;
|
return agent;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user