Initial commit

This commit is contained in:
mykola2312 2018-08-14 01:21:54 +03:00
commit ad59e94d89
26 changed files with 516 additions and 0 deletions

BIN
Release/CL.read.1.tlog Normal file

Binary file not shown.

BIN
Release/CL.write.1.tlog Normal file

Binary file not shown.

BIN
Release/buf.obj Normal file

Binary file not shown.

BIN
Release/cl.command.1.tlog Normal file

Binary file not shown.

BIN
Release/link.command.1.tlog Normal file

Binary file not shown.

BIN
Release/link.read.1.tlog Normal file

Binary file not shown.

BIN
Release/link.write.1.tlog Normal file

Binary file not shown.

BIN
Release/main.obj Normal file

Binary file not shown.

BIN
Release/mt.command.1.tlog Normal file

Binary file not shown.

BIN
Release/mt.read.1.tlog Normal file

Binary file not shown.

BIN
Release/mt.write.1.tlog Normal file

Binary file not shown.

BIN
Release/net.obj Normal file

Binary file not shown.

View file

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View file

@ -0,0 +1,2 @@
#v4.0:v100:false
Release|Win32|D:\WinAPI\|

36
Release/rulez.log Normal file
View file

@ -0,0 +1,36 @@
Build started 14.08.2018 0:47:12.
1>Project "D:\WinAPI\rulez\rulez.vcxproj" on node 2 (build target(s)).
1>InitializeBuildStatus:
Creating "Release\rulez.unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D _MBCS /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt buf.cpp main.cpp
buf.cpp
1>d:\winapi\rulez\buf.h(37): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(188): см. объявление "strncpy"
main.cpp
1>d:\winapi\rulez\buf.h(37): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(188): см. объявление "strncpy"
1>main.cpp(15): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(234): см. объявление "fopen"
1>main.cpp(93): warning C4996: '_snprintf': This function or variable may be unsafe. Consider using _snprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(363): см. объявление "_snprintf"
1>main.cpp(94): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(234): см. объявление "fopen"
Link:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"D:\WinAPI\Release\rulez.exe" /NOLOGO WS2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Release\rulez.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\WinAPI\Release\rulez.pdb" /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\WinAPI\Release\rulez.lib" /MACHINE:X86 Release\buf.obj
Release\main.obj
Release\net.obj
Создание кода
1>d:\winapi\rulez\main.cpp(68): warning C4700: использована неинициализированная локальная переменная "sp"
Создание кода завершено
rulez.vcxproj -> D:\WinAPI\Release\rulez.exe
Manifest:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /outputresource:"D:\WinAPI\Release\rulez.exe;#1" /manifest Release\rulez.exe.intermediate.manifest
FinalizeBuildStatus:
Deleting file "Release\rulez.unsuccessfulbuild".
Touching "Release\rulez.lastbuildstate".
1>Done Building Project "D:\WinAPI\rulez\rulez.vcxproj" (build target(s)).
Построение успешно завершено.
Time Elapsed 00:00:00.80

Binary file not shown.

View file

BIN
Release/vc100.pdb Normal file

Binary file not shown.

35
buf.cpp Normal file
View file

@ -0,0 +1,35 @@
#include "buf.h"
CBuf::CBuf(size_t uSize)
{
m_bAlloc = true;
m_pBuf = (char*)calloc(uSize,1);
m_pSp = m_pBuf;
}
CBuf::CBuf(char* pBuf)
{
m_bAlloc = false;
m_pBuf = pBuf;
m_pSp = m_pBuf;
}
CBuf::~CBuf()
{
if(m_bAlloc)
free(m_pBuf);
}
void CBuf::WriteBuf(const void* pBuf,size_t uSize)
{
if(pBuf)
memcpy(m_pSp,pBuf,uSize);
m_pSp += uSize;
}
void CBuf::ReadBuf(void* pDst,size_t uSize)
{
if(pDst)
memcpy(pDst,m_pSp,uSize);
m_pSp += uSize;
}

61
buf.h Normal file
View file

@ -0,0 +1,61 @@
#ifndef __BUF_H
#define __BUF_H
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long u64;
class CBuf
{
public:
CBuf(size_t uSize);
CBuf(char* pBuf);
~CBuf();
void WriteBuf(const void* pSrc,size_t uSize);
inline void WriteStr(const char* pStr){
WriteBuf(pStr,strlen(pStr)+1);
}
template<typename T>
void Write(T Obj){
*(T*)m_pSp = Obj;
m_pSp += sizeof(T);
}
void ReadBuf(void* pDst,size_t uSize);
inline size_t ReadString(char* pDst,size_t uMaxLen){
size_t uLen = strlen(m_pSp)+1;
if(pDst)
strncpy(pDst,m_pSp,uMaxLen);
m_pSp += uLen;
return uLen;
}
template<typename T>
T Read(){
T Obj = *(T*)m_pSp;
m_pSp += sizeof(T);
return Obj;
}
inline size_t GetSize(){
return (size_t)(m_pSp-m_pBuf);
}
inline void Reset(){
m_pSp = m_pBuf;
}
char* m_pBuf;
char* m_pSp;
bool m_bAlloc;
};
#endif

106
main.cpp Normal file
View file

@ -0,0 +1,106 @@
#include "net.h"
#include "buf.h"
#include <stdio.h>
#include <stdlib.h>
typedef struct {
u32 id;
u8 total;
u8 current;
u16 size;
} sp_t;
void writebuf(CBuf& bf,size_t sz,const char* pFile)
{
FILE* fout = fopen(pFile,"wb");
fwrite(bf.m_pBuf,sz,1,fout);
fclose(fout);
}
void readsplit(CBuf& bf,sp_t& sp)
{
bf.Read<u32>();
sp.id = bf.Read<u32>();
sp.total = bf.Read<u8>();
sp.current = bf.Read<u8>();
sp.size = bf.Read<u16>();
}
int main(int argc,char** argv)
{
CSocket sd;
CBuf tt(1024*1024); //UP to 1 MB
CBuf rd(4096);
CBuf wd(4096);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(argv[1]);
addr.sin_port = htons(atoi(argv[2]));
sd = CSocket(addr);
sd.InitSocket();
wd.Write<u32>(-1);
wd.Write<u8>(0x56);
wd.Write<u32>(-1);
sd.Send(sd,wd.m_pBuf,wd.GetSize());
wd.Reset();
sd.Recv(sd,rd.m_pBuf,4096);
rd.Read<u32>();
rd.Read<u8>();
u32 token = rd.Read<u32>();
rd.Reset();
printf("Received A2S_RULES token %p\n",token);
wd.Write<u32>(-1);
wd.Write<u8>(0x56);
wd.Write<u32>(token);
sd.Send(sd,wd.m_pBuf,wd.GetSize());
wd.Reset();
int psize = sd.Recv(sd,rd.m_pBuf,4096);
sp_t sp;
sp.total = 2;
u16 num = 0;
int totalsize = 0;
while(sp.current+1 != sp.total)
{
int xsize = 12;
psize -= 12;
readsplit(rd,sp);
if(!sp.current) //First packet
{
psize -= 7;
xsize += 7;
rd.Read<u32>();
rd.Read<u8>();
num = rd.Read<u16>();
printf("%d cvars\n",num);
}
tt.WriteBuf((char*)rd.m_pBuf+xsize,psize);
totalsize += psize;
rd.Reset();
printf("%d/%d packet\n",sp.current+1,sp.total);
if(sp.current+1 == sp.total)
break;
psize = sd.Recv(sd,rd.m_pBuf,4096);
}
char szName[MAX_PATH];
_snprintf(szName,MAX_PATH,"%s_%s.txt",argv[1],argv[2]);
FILE* fdump = fopen(szName,"w");
tt.Reset();
for(int i = 0; i < num; i++)
{
char szVarName[MAX_PATH];
char szVarValue[MAX_PATH];
tt.ReadString(szVarName,MAX_PATH);
tt.ReadString(szVarValue,MAX_PATH);
fprintf(fdump,"%s = %s\n",szVarName,szVarValue);
}
fclose(fdump);
return 0;
}

87
net.cpp Normal file
View file

@ -0,0 +1,87 @@
#include "net.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct sockaddr_in g_maddr;
class WSAInit
{
public:
WSAInit(){
WSAStartup(MAKEWORD(2,2),&m_WSA);
srand((unsigned int)time(NULL));
}
~WSAInit(){
WSACleanup();
}
WSADATA m_WSA;
} g_WSA;
CSocket::CSocket()
{
s = INVALID_SOCKET;
socklen = sizeof(struct sockaddr_in);
}
CSocket::CSocket(struct sockaddr_in& addr)
{
s = INVALID_SOCKET;
a = addr;
socklen = sizeof(struct sockaddr_in);
}
CSocket::~CSocket()
{
}
bool CSocket::InitSocket()
{
return ((s = socket(a.sin_family,SOCK_DGRAM,
IPPROTO_UDP)) != INVALID_SOCKET);
}
bool CSocket::Bind()
{
return (bind(s,(const sockaddr*)&a,
socklen)!= SOCKET_ERROR);
}
void CSocket::Close()
{
closesocket(s);
}
int CSocket::Recv(CSocket& cl,void* pBuf,size_t uSize,
DWORD dwTimeOut)
{
if(dwTimeOut)
{
setsockopt(cl.s,SOL_SOCKET,SO_RCVTIMEO,
(const char*)&dwTimeOut,sizeof(DWORD));
}
return recvfrom(s,(char*)pBuf,(int)uSize,0,
(sockaddr*)&cl.a,&cl.socklen);
}
int CSocket::Send(CSocket& cl,const void* pBuf,size_t uSize,
DWORD dwTimeOut)
{
if(dwTimeOut)
{
setsockopt(cl.s,SOL_SOCKET,SO_SNDTIMEO,
(const char*)&dwTimeOut,sizeof(DWORD));
}
return sendto(s,(const char*)pBuf,(int)uSize,0,
(const sockaddr*)&cl.a,cl.socklen);
}
void CSocket::SetNonBlocking(bool bEnable)
{
u_long uBlock = (u_long)bEnable;
ioctlsocket(s,FIONBIO,&uBlock);
}

61
net.h Normal file
View file

@ -0,0 +1,61 @@
#ifndef __NET_H
#define __NET_H
#include <WinSock2.h>
#define MASTER_DOMAIN "hl2master.steampowered.com"
#define MASTER_PORT 27011
#define MVHDR 0x31
typedef struct {
SOCKET s;
struct sockaddr_in a;
int len;
} socket_t;
class CSocket
{
public:
CSocket();
CSocket(struct sockaddr_in& addr);
~CSocket();
bool InitSocket();
bool Bind();
void Close();
int Recv(CSocket& cl,void* pBuf,size_t uLen,
DWORD dwTimeOut = 0);
int Send(CSocket& cl,const void* pBuf,size_t uLen,
DWORD dwTimeOut = 0);
void SetNonBlocking(bool bEnabled);
bool operator==(const CSocket& Other){
return (a.sin_addr.s_addr == Other.a.sin_addr.s_addr
&& a.sin_port == Other.a.sin_port);
}
SOCKET s;
struct sockaddr_in a;
int socklen;
};
class CMutex
{
public:
CMutex(){
m_hMutex = CreateMutex(0,0,0);
}
~CMutex(){
CloseHandle(m_hMutex);
}
void Lock(){/*WaitForSingleObject(m_hMutex,INFINITE);*/}
void Unlock(){/*ReleaseMutex(m_hMutex);*/}
HANDLE m_hMutex;
};
extern struct sockaddr_in g_maddr;
#endif

75
rulez.vcxproj Normal file
View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{F7614CC9-D3FF-4D25-81C8-E260CC621512}</ProjectGuid>
<RootNamespace>rulez</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="buf.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="net.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="buf.h" />
<ClInclude Include="net.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

36
rulez.vcxproj.filters Normal file
View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Файлы исходного кода">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Заголовочные файлы">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Файлы ресурсов">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="buf.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="net.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="buf.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="net.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
</ItemGroup>
</Project>

7
rulez.vcxproj.user Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerCommandArguments>46.174.49.136 27015</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>