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