commit ad59e94d8958ede3683f0c6f2f9dea3800e8c4a8 Author: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Tue Aug 14 01:21:54 2018 +0300 Initial commit diff --git a/Release/CL.read.1.tlog b/Release/CL.read.1.tlog new file mode 100644 index 0000000..08416d8 Binary files /dev/null and b/Release/CL.read.1.tlog differ diff --git a/Release/CL.write.1.tlog b/Release/CL.write.1.tlog new file mode 100644 index 0000000..537a928 Binary files /dev/null and b/Release/CL.write.1.tlog differ diff --git a/Release/buf.obj b/Release/buf.obj new file mode 100644 index 0000000..58f5880 Binary files /dev/null and b/Release/buf.obj differ diff --git a/Release/cl.command.1.tlog b/Release/cl.command.1.tlog new file mode 100644 index 0000000..4aed99e Binary files /dev/null and b/Release/cl.command.1.tlog differ diff --git a/Release/link.command.1.tlog b/Release/link.command.1.tlog new file mode 100644 index 0000000..d56c5e8 Binary files /dev/null and b/Release/link.command.1.tlog differ diff --git a/Release/link.read.1.tlog b/Release/link.read.1.tlog new file mode 100644 index 0000000..404ecac Binary files /dev/null and b/Release/link.read.1.tlog differ diff --git a/Release/link.write.1.tlog b/Release/link.write.1.tlog new file mode 100644 index 0000000..6d97d46 Binary files /dev/null and b/Release/link.write.1.tlog differ diff --git a/Release/main.obj b/Release/main.obj new file mode 100644 index 0000000..0abed02 Binary files /dev/null and b/Release/main.obj differ diff --git a/Release/mt.command.1.tlog b/Release/mt.command.1.tlog new file mode 100644 index 0000000..674d954 Binary files /dev/null and b/Release/mt.command.1.tlog differ diff --git a/Release/mt.read.1.tlog b/Release/mt.read.1.tlog new file mode 100644 index 0000000..35c2377 Binary files /dev/null and b/Release/mt.read.1.tlog differ diff --git a/Release/mt.write.1.tlog b/Release/mt.write.1.tlog new file mode 100644 index 0000000..16855c7 Binary files /dev/null and b/Release/mt.write.1.tlog differ diff --git a/Release/net.obj b/Release/net.obj new file mode 100644 index 0000000..2d324d4 Binary files /dev/null and b/Release/net.obj differ diff --git a/Release/rulez.exe.intermediate.manifest b/Release/rulez.exe.intermediate.manifest new file mode 100644 index 0000000..ecea6f7 --- /dev/null +++ b/Release/rulez.exe.intermediate.manifest @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Release/rulez.lastbuildstate b/Release/rulez.lastbuildstate new file mode 100644 index 0000000..5fe59f0 --- /dev/null +++ b/Release/rulez.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100:false +Release|Win32|D:\WinAPI\| diff --git a/Release/rulez.log b/Release/rulez.log new file mode 100644 index 0000000..51a0754 --- /dev/null +++ b/Release/rulez.log @@ -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 diff --git a/Release/rulez.vcxprojResolveAssemblyReference.cache b/Release/rulez.vcxprojResolveAssemblyReference.cache new file mode 100644 index 0000000..3f01681 Binary files /dev/null and b/Release/rulez.vcxprojResolveAssemblyReference.cache differ diff --git a/Release/rulez.write.1.tlog b/Release/rulez.write.1.tlog new file mode 100644 index 0000000..e69de29 diff --git a/Release/vc100.pdb b/Release/vc100.pdb new file mode 100644 index 0000000..adc3599 Binary files /dev/null and b/Release/vc100.pdb differ diff --git a/buf.cpp b/buf.cpp new file mode 100644 index 0000000..5fa2251 --- /dev/null +++ b/buf.cpp @@ -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; +} \ No newline at end of file diff --git a/buf.h b/buf.h new file mode 100644 index 0000000..4a53c29 --- /dev/null +++ b/buf.h @@ -0,0 +1,61 @@ +#ifndef __BUF_H +#define __BUF_H + +#include +#include +#include + +#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 + 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 + 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 \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b1d01d7 --- /dev/null +++ b/main.cpp @@ -0,0 +1,106 @@ +#include "net.h" +#include "buf.h" +#include +#include + +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(); + sp.id = bf.Read(); + sp.total = bf.Read(); + sp.current = bf.Read(); + sp.size = bf.Read(); +} + +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(-1); + wd.Write(0x56); + wd.Write(-1); + sd.Send(sd,wd.m_pBuf,wd.GetSize()); + wd.Reset(); + sd.Recv(sd,rd.m_pBuf,4096); + + rd.Read(); + rd.Read(); + u32 token = rd.Read(); + rd.Reset(); + printf("Received A2S_RULES token %p\n",token); + + wd.Write(-1); + wd.Write(0x56); + wd.Write(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(); + rd.Read(); + num = rd.Read(); + 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; +} \ No newline at end of file diff --git a/net.cpp b/net.cpp new file mode 100644 index 0000000..71d772a --- /dev/null +++ b/net.cpp @@ -0,0 +1,87 @@ +#include "net.h" +#include +#include +#include + +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); +} \ No newline at end of file diff --git a/net.h b/net.h new file mode 100644 index 0000000..c3284c7 --- /dev/null +++ b/net.h @@ -0,0 +1,61 @@ +#ifndef __NET_H +#define __NET_H + +#include + +#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 \ No newline at end of file diff --git a/rulez.vcxproj b/rulez.vcxproj new file mode 100644 index 0000000..de5d0b7 --- /dev/null +++ b/rulez.vcxproj @@ -0,0 +1,75 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {F7614CC9-D3FF-4D25-81C8-E260CC621512} + rulez + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + Level3 + Disabled + + + true + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + WS2_32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rulez.vcxproj.filters b/rulez.vcxproj.filters new file mode 100644 index 0000000..d1d57b6 --- /dev/null +++ b/rulez.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Файлы исходного кода + + + Файлы исходного кода + + + Файлы исходного кода + + + + + Заголовочные файлы + + + Заголовочные файлы + + + \ No newline at end of file diff --git a/rulez.vcxproj.user b/rulez.vcxproj.user new file mode 100644 index 0000000..88587c4 --- /dev/null +++ b/rulez.vcxproj.user @@ -0,0 +1,7 @@ + + + + 46.174.49.136 27015 + WindowsLocalDebugger + + \ No newline at end of file