[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
|
||||
|
||||
#include<hgl/io/InputStream.h>
|
||||
#include<hgl/util/plist/PList.h>
|
||||
#include<hgl/util/plist/PAttrib.h>
|
||||
#include<hgl/network/IP.h>
|
||||
namespace hgl
|
||||
{
|
||||
@ -39,7 +39,7 @@ namespace hgl
|
||||
uint response_code; //HTTP响应代码
|
||||
UTF8String response_info; //HTTP响应信息
|
||||
|
||||
UTF8PList response_list; //响应信息
|
||||
UTF8PAttribSet response_list; //响应信息
|
||||
|
||||
public:
|
||||
|
||||
@ -51,7 +51,7 @@ namespace hgl
|
||||
|
||||
uint GetResponseCode()const{return response_code;} ///<返回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 Peek(void *,int64) override{return 0;} ///<预览数据
|
||||
|
@ -234,15 +234,15 @@ namespace hgl
|
||||
/**
|
||||
* 转换当前地址到一个可视字符串,字符串所需长度请使用GetIPStringMaxSize()获取
|
||||
*/
|
||||
virtual void ToString(char *,int)const=0;
|
||||
virtual void ToString(u8char *,int)const=0;
|
||||
|
||||
/**
|
||||
* 创建一个可视字符串地址,需自行delete[]
|
||||
*/
|
||||
virtual char *CreateString()const
|
||||
virtual u8char *CreateString()const
|
||||
{
|
||||
const int max_size=GetIPStringMaxSize();
|
||||
char *ipstr=new char[max_size+1];
|
||||
u8char *ipstr=new u8char[max_size+1];
|
||||
|
||||
ToString(ipstr,max_size);
|
||||
|
||||
@ -324,9 +324,9 @@ namespace hgl
|
||||
const uint32 GetInt32IP()const{return addr.sin_addr.s_addr;}
|
||||
const ushort GetPort()const override;
|
||||
|
||||
static void ToString(char *str,const int,const in_addr *);
|
||||
static void ToString(char *str,const int,const sockaddr_in *);
|
||||
void ToString(char *str,const int)const override;
|
||||
static void ToString(u8char *str,const int,const in_addr *);
|
||||
static void ToString(u8char *str,const int,const sockaddr_in *);
|
||||
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 GetLocalIPList(List<in_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv4地址列表
|
||||
@ -392,9 +392,9 @@ namespace hgl
|
||||
|
||||
const ushort GetPort()const override;
|
||||
|
||||
static void ToString(char *str,const int,const in6_addr *);
|
||||
static void ToString(char *str,const int,const sockaddr_in6 *);
|
||||
void ToString(char *str,const int)const override;
|
||||
static void ToString(u8char *str,const int,const in6_addr *);
|
||||
static void ToString(u8char *str,const int,const sockaddr_in6 *);
|
||||
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 GetLocalIPList(List<in6_addr> &addr_list,int _socktype,int _protocol); ///<取得本机的IPv6地址列表
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define HGL_NETWORK_SOCKET_MANAGE_INCLUDE
|
||||
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/type/SortedSets.h>
|
||||
#include<hgl/network/SocketEvent.h>
|
||||
#include<hgl/network/TCPAccept.h>
|
||||
namespace hgl
|
||||
|
@ -6,7 +6,7 @@ namespace hgl
|
||||
{
|
||||
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);
|
||||
}//namespace network
|
||||
}//namespace hgl
|
||||
|
@ -13,7 +13,7 @@ namespace hgl
|
||||
class WebSocketAccept:public TCPAccept
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
DataArray<char> data_out_str;
|
||||
DataArray<u8char> data_out_str;
|
||||
#endif//_DEBUG
|
||||
protected:
|
||||
|
||||
|
@ -67,7 +67,7 @@ namespace hgl
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ namespace hgl
|
||||
if(getnameinfo(addr,sizeof(struct sockaddr),hostname,NI_MAXHOST,server_info,NI_MAXSERV,NI_NUMERICSERV))
|
||||
return(false);
|
||||
|
||||
name=hostname;
|
||||
name=(u8char *)hostname;
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ namespace hgl
|
||||
{
|
||||
int count=ip_stack.GetCount();
|
||||
|
||||
ip_stack.SetMaxCount(count+1024);
|
||||
ip_stack.PreAlloc(count+1024);
|
||||
|
||||
server->CreateIPAddress(ip_stack.GetData()+count,1024);
|
||||
|
||||
|
@ -66,7 +66,7 @@ namespace hgl
|
||||
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;
|
||||
}
|
||||
|
@ -190,7 +190,7 @@ namespace hgl
|
||||
int SocketManage::Update(const double &time_out)
|
||||
{
|
||||
//将error_set放在这里,是为了保留它给外面的调用者使用
|
||||
error_sets.ClearData();
|
||||
error_sets.Clear();
|
||||
|
||||
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);
|
||||
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();
|
||||
return(false);
|
||||
}
|
||||
|
@ -13,23 +13,23 @@ namespace hgl
|
||||
* @param size 信息头长度
|
||||
* @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 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 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;
|
||||
|
||||
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);
|
||||
|
||||
@ -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) //也有可能是不存在的
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
|
@ -20,16 +20,16 @@ namespace hgl
|
||||
|
||||
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);
|
||||
|
||||
DataArray<char> ws_header(1024);
|
||||
DataArray<u8char> ws_header(1024);
|
||||
|
||||
int pos=0;
|
||||
int total=0;
|
||||
int size=0;
|
||||
|
||||
const char *end;
|
||||
const u8char *end;
|
||||
|
||||
while(true)
|
||||
{
|
||||
@ -45,7 +45,7 @@ namespace hgl
|
||||
recv_total+=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)
|
||||
continue;
|
||||
@ -233,7 +233,7 @@ namespace hgl
|
||||
#ifdef _DEBUG
|
||||
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()));
|
||||
#endif//_DEBUG
|
||||
@ -336,7 +336,7 @@ namespace hgl
|
||||
#ifdef _DEBUG
|
||||
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()));
|
||||
#endif//_DEBUG
|
||||
|
@ -6,7 +6,7 @@ namespace hgl
|
||||
{
|
||||
UTF8String FirefoxUserAgent(FirefoxUserAgentConfig &cfg)
|
||||
{
|
||||
UTF8String agent="Mozilla/5.0 ";
|
||||
UTF8String agent=U8_TEXT("Mozilla/5.0 ");
|
||||
|
||||
if(cfg.os>=OS_WindowsX86
|
||||
&&cfg.os<=OS_LinuxX86_64)
|
||||
@ -14,52 +14,52 @@ namespace hgl
|
||||
if(cfg.os>=OS_WindowsX86
|
||||
&&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_WindowsWOW64)agent+="WOW64; ";
|
||||
if(cfg.os==OS_WindowsAMD64)agent+=U8_TEXT("Win64; x64; ");else
|
||||
if(cfg.os==OS_WindowsWOW64)agent+=U8_TEXT("WOW64; ");
|
||||
}
|
||||
else
|
||||
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
|
||||
if(cfg.os==OS_Linuxi686)
|
||||
agent+="(X11; Linux i686; ";
|
||||
agent+=U8_TEXT("(X11; Linux i686; ");
|
||||
else
|
||||
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/"
|
||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||
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)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||
}
|
||||
else
|
||||
if(cfg.os>=OS_iPod
|
||||
&&cfg.os<=OS_iPad)
|
||||
{
|
||||
if(cfg.os==OS_iPod) agent+="(iPod touch; ";else
|
||||
if(cfg.os==OS_iPad) agent+="(iPad; ";else
|
||||
agent+="(iPhone; ";
|
||||
if(cfg.os==OS_iPod) agent+=U8_TEXT("(iPod touch; ");else
|
||||
if(cfg.os==OS_iPad) agent+=U8_TEXT("(iPad; ");else
|
||||
agent+=U8_TEXT("(iPhone; ");
|
||||
|
||||
agent+= "CPU iPhone OS "+UTF8String::numberOf(cfg.os_ver.major)+"_"+UTF8String::numberOf(cfg.os_ver.minor)+" like Mac OS X) "+
|
||||
"AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4";
|
||||
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) ")+
|
||||
U8_TEXT("AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4");
|
||||
}
|
||||
else
|
||||
if(cfg.os>=OS_AndroidPhone
|
||||
&&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_AndroidTablet )agent+="Tablet; ";
|
||||
if(cfg.os==OS_AndroidTV )agent+="TV; ";
|
||||
if(cfg.os==OS_AndroidPhone )agent+=U8_TEXT("Mobile; ");
|
||||
if(cfg.os==OS_AndroidTablet )agent+=U8_TEXT("Tablet; ");
|
||||
if(cfg.os==OS_AndroidTV )agent+=U8_TEXT("TV; ");
|
||||
|
||||
agent+="rv:"+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+") Gecko/"
|
||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor)+" Firefox/"
|
||||
+UTF8String::numberOf(cfg.ff_ver.major)+"."+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||
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)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor)+U8_TEXT(" Firefox/")
|
||||
+UTF8String::numberOf(cfg.ff_ver.major)+U8_TEXT(".")+UTF8String::numberOf(cfg.ff_ver.minor);
|
||||
}
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user