From 7c86d1f6ecef2dc13c052b0d310f2406da4a464b Mon Sep 17 00:00:00 2001 From: pscbot Date: Thu, 24 Sep 2020 02:16:34 +0300 Subject: [PATCH] Initial commit --- .gitattributes | 60 ++++ .gitignore | 6 + PIC2005119113755769.jpg | Bin 0 -> 115820 bytes README.md | 33 ++ frmMain.frm | 652 ++++++++++++++++++++++++++++++++++++++++ modSave.bas | 74 +++++ prjGSBrowser.vbp | 47 +++ vbGSMSALG.bas | 191 ++++++++++++ 8 files changed, 1063 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 PIC2005119113755769.jpg create mode 100644 README.md create mode 100644 frmMain.frm create mode 100644 modSave.bas create mode 100644 prjGSBrowser.vbp create mode 100644 vbGSMSALG.bas diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..cc57407 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,60 @@ +# Default to binary (no diff) + +* binary + +# VB6 source files (show diff + keep CRLF in zip download) + +.bas text=auto eol=crlf +.cls text=auto eol=crlf +.ctl text=auto eol=crlf +.dob text=auto eol=crlf +.dsr text=auto eol=crlf +.frm text=auto eol=crlf +.pag text=auto eol=crlf +.vbg text=auto eol=crlf +.vbl text=auto eol=crlf +.vbp text=auto eol=crlf +.vbr text=auto eol=crlf +.vbw text=auto eol=crlf + +# Other source files (show diff + LF only in zip download) + +.asm text=auto +.asp text=auto +.bat text=auto +.c text=auto +.cpp text=auto +.dsp text=auto +.dsw text=auto +.h text=auto +.idl text=auto +.java text=auto +.js text=auto +.manifest text=auto +.odl text=auto +.php text=auto +.php3 text=auto +.rc text=auto +.sln text=auto +.sql text=auto +.vb text=auto +.vbs text=auto + +# Text files but keep as binary (no diff) + +# .cfg text=auto +# .conf text=auto +# .csi text=auto +# .css text=auto +# .csv text=auto +# .def text=auto +# .htm text=auto +# .html text=auto +# .inf text=auto +# .ini text=auto +# .log text=auto +# .reg text=auto +# .rtf text=auto +# .txt text=auto +# .url text=auto +# .xml text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d6493b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.scc +*.dca +*.oca +*.obj +vb*.tmp +@PSC* diff --git a/PIC2005119113755769.jpg b/PIC2005119113755769.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f334f5181b0c6cb606db6d6344c419e7f99a35bd GIT binary patch literal 115820 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

    8LWa!ExP>30^kzo@%S@$%>1S$a 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e463bd --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +
    + +## GS Browser \- Get Serverlists from GameSpy + + +
    + +### Description + +Get Serverlists from the public GameSpy Master! + +### More Info + + + + | +--- |--- +**Submitted On** |2004-10-15 17:49:06 +**By** |[Thomas Reiser](https://github.com/Planet-Source-Code/PSCIndex/blob/master/ByAuthor/thomas-reiser.md) +**Level** |Beginner +**User Rating** |5.0 (15 globes from 3 users) +**Compatibility** |VB 6\.0 +**Category** |[Internet/ HTML](https://github.com/Planet-Source-Code/PSCIndex/blob/master/ByCategory/internet-html__1-34.md) +**World** |[Visual Basic](https://github.com/Planet-Source-Code/PSCIndex/blob/master/ByWorld/visual-basic.md) +**Archive File** |[GS\_Browser1841661192005\.zip](https://github.com/Planet-Source-Code/thomas-reiser-gs-browser-get-serverlists-from-gamespy__1-58372/archive/master.zip) + + + + + + + + diff --git a/frmMain.frm b/frmMain.frm new file mode 100644 index 0000000..9b8f4d3 --- /dev/null +++ b/frmMain.frm @@ -0,0 +1,652 @@ +VERSION 5.00 +Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "mswinsck.ocx" +Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx" +Begin VB.Form frmMain + BorderStyle = 1 'Fest Einfach + Caption = "GS Browser [Alpha 0.1]" + ClientHeight = 8400 + ClientLeft = 45 + ClientTop = 435 + ClientWidth = 7680 + LinkTopic = "Form1" + MaxButton = 0 'False + ScaleHeight = 8400 + ScaleWidth = 7680 + StartUpPosition = 2 'Bildschirmmitte + Begin MSComDlg.CommonDialog dlgSave + Left = 6360 + Top = 6840 + _ExtentX = 847 + _ExtentY = 847 + _Version = 393216 + End + Begin VB.Timer tmrCheck2 + Enabled = 0 'False + Interval = 15000 + Left = 5280 + Top = 6720 + End + Begin VB.Timer tmrCheck + Interval = 1 + Left = 4800 + Top = 6720 + End + Begin VB.Frame fraLog + Caption = "Log:" + Height = 1330 + Left = 120 + TabIndex = 5 + Top = 6960 + Width = 7455 + Begin VB.TextBox txtLog + Height = 950 + Left = 120 + Locked = -1 'True + MultiLine = -1 'True + ScrollBars = 2 'Vertikal + TabIndex = 6 + Top = 240 + Width = 7215 + End + End + Begin VB.Frame fraServers + Caption = "Servers:" + Height = 6735 + Left = 5040 + TabIndex = 3 + Top = 120 + Width = 2535 + Begin VB.CommandButton cmdSaveServers + Caption = "Save Servers" + Height = 375 + Left = 480 + TabIndex = 9 + Top = 6240 + Width = 1575 + End + Begin VB.ListBox lstServers + Height = 5910 + Left = 120 + TabIndex = 4 + Top = 240 + Width = 2295 + End + End + Begin VB.Frame fraGames + Caption = "Games:" + Height = 6735 + Left = 120 + TabIndex = 0 + Top = 120 + Width = 4815 + Begin MSWinsockLib.Winsock wskTCP + Left = 4320 + Top = 120 + _ExtentX = 741 + _ExtentY = 741 + _Version = 393216 + End + Begin VB.CheckBox chkSave + Caption = "Save" + Height = 255 + Left = 1800 + TabIndex = 8 + Top = 6300 + Value = 1 'Aktiviert + Width = 1215 + End + Begin VB.CommandButton cmdUpdateServers + Caption = "Update Serverlist" + Height = 375 + Left = 3120 + TabIndex = 7 + Top = 6240 + Width = 1575 + End + Begin VB.CommandButton cmdUpdateGames + Caption = "Update Gamelist" + Height = 375 + Left = 120 + TabIndex = 2 + Top = 6240 + Width = 1575 + End + Begin VB.ListBox lstGames + Height = 5910 + Left = 120 + Sorted = -1 'True + TabIndex = 1 + Top = 240 + Width = 4575 + End + End +End +Attribute VB_Name = "frmMain" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +'======================================= +' +' This piece of Code really sucks, +' but I hope it's useful... :-P +' +' - Thomas Reiser +'======================================= + +Private Type Server + IP As String + Port As Long +End Type + +Private Enum Socket_State + RequestingGames + ReceivingGamelist + ReceivingGameinfos + RequestingValidateKey + ReceivingServers + Idle +End Enum + +'--------------------------------------- +' GameSpy Servers.. +'--------------------------------------- +'MotD-Master +Const GSMOTDMasterHost As String = "motd.gamespy.com" +Const GSMOTDMasterPort As Integer = 80 + +'Server-Master +Const GSServerMasterHost As String = "master.gamespy.com" +Const GSServerMasterPort As Integer = 28900 + +'---- + +Dim MOTDRequest As String +Dim Gamelist(1) As String +Dim Game() As GameData +Dim TempFilters() As GameData +Dim Serverlist As String +Dim Servers() As Server +Dim SocketState As Socket_State + +'---------------------------------------- +' Save Serverlist +'---------------------------------------- +Private Sub cmdSaveServers_Click() +Dim F As Integer +Dim IPs As String +Dim i As Integer + +With dlgSave + .DialogTitle = "Save Serverlist to.." + .Filter = "*.* (All files)|*.*" 'Accept all files + .CancelError = False + .ShowSave + + If .FileName = "" Then 'Abort-Button pressed + Exit Sub + Else + If GetUBound2(Servers()) < 0 Then + AddLog vbCrLf & "Serverlist is empty!" + Exit Sub + Else + For i = 0 To GetUBound2(Servers()) + IPs = IPs & Servers(i).IP & ":" & Servers(i).Port & vbCrLf + Next + End If + IPs = Left$(IPs, Len(IPs) - 2) + + 'Save IPs to file + F = FreeFile 'Get new File-Number + Open .FileName For Output As #F 'Open the file + Print #F, Left$(IPs, Len(IPs) - 1) 'Write Serverlist to file + Close #F 'Close + + AddLog vbCrLf & "Serverlist saved to " & Chr$(34) & .FileName & Chr$(34) & "!" + End If +End With +End Sub + +'---------------------------------------- +' Update Gamelist +'---------------------------------------- +Private Sub cmdUpdateGames_Click() +Dim i As Integer + +For i = 0 To GetUBound(Game()) + ReDim Preserve TempFilters(i) + TempFilters(i).Filter = Game(i).Filter + TempFilters(i).Gamename = Game(i).Gamename +Next + +wskTCP.Close + +'Connect to motd.gamespy.com:80.. +wskTCP.Connect GSMOTDMasterHost, GSMOTDMasterPort +lstGames.Clear +SocketState = RequestingGames +MOTDRequest = "" '!!! + +AddLog vbCrLf & "Connecting to " & GSMOTDMasterHost & ":" & GSMOTDMasterPort & "... (Gamelist)" +End Sub + +'---------------------------------------- +' Update Serverlist +'---------------------------------------- +Private Sub cmdUpdateServers_Click() +Dim RetVal As String 'Inputbox return value + +If lstGames.ListIndex = -1 Then + 'No Game selected.. + Exit Sub +Else + RetVal = InputBox("Filters for '" & Game(lstGames.ItemData(lstGames.ListIndex)).FullName & "':", _ + "Filter...", Game(lstGames.ItemData(lstGames.ListIndex)).Filter) + + If StrPtr(RetVal) = 0 Then + Exit Sub + Else + 'Add the new Filter to the Array: + Game(lstGames.ItemData(lstGames.ListIndex)).Filter = RetVal + End If +End If + +wskTCP.Close + +'Connect to master.gamespy.com:28900.. +wskTCP.Connect GSServerMasterHost, GSServerMasterPort + +AddLog vbCrLf & "Trying to get the Serverlist for '" & Game(lstGames.ItemData(lstGames.ListIndex)).FullName & "'..." +SocketState = RequestingValidateKey +End Sub + +'---------------------------------------- +' Form_Load-Event +'---------------------------------------- +Private Sub Form_Load() +Dim RetVal As String +Dim i As Long + +If Dir$(App.Path & "\serverlist.dat") <> "" Then + RetVal = ReadServerlist(Game()) + + If RetVal = "" Then + 'OK + AddLog "Reading Serverlist..." + For i = 0 To UBound(Game) + lstGames.AddItem Game(i).FullName + lstGames.ItemData(lstGames.NewIndex) = i + Next + AddLog " Done!" & vbCrLf & "GS Browser successfully started!" + Else + 'Error + AddLog "[ERROR] " & RetVal & vbCrLf & "Error while loading the Serverlist!" + End If +Else + AddLog "GS Browser successfully started!" +End If + +SocketState = Idle +End Sub + +'---------------------------------------- +' Form_Unload-Event +'---------------------------------------- +Private Sub Form_Unload(Cancel As Integer) +If chkSave.Value = vbChecked Then + 'Save the Serverlist (!!FILTERS!!) + SaveServerlist Game() +End If +End Sub + +'---------------------------------------- +' Check if the Buttons are available +'---------------------------------------- +Private Sub tmrCheck_Timer() +If SocketState = Idle Then + cmdUpdateGames.Enabled = True + + If lstGames.ListCount > 0 Then + cmdUpdateServers.Enabled = True + Else + cmdUpdateServers.Enabled = False + End If +Else + cmdUpdateGames.Enabled = False + cmdUpdateServers.Enabled = False +End If + +If lstGames.ListCount = 0 Then + cmdUpdateServers.Enabled = False +Else + cmdUpdateServers.Enabled = True +End If +End Sub + +'---------------------------------------- +' 15 seconds Timeout (Serverlist request) +'---------------------------------------- +Private Sub tmrCheck2_Timer() +If Len(Serverlist) = 0 Then + wskTCP.Close + SocketState = Idle + + AddLog " Done! (0 Servers found!)" +End If + +tmrCheck2.Enabled = False +End Sub + +'---------------------------------------- +' Request the Gamelist +'---------------------------------------- +Private Sub wskTCP_Connect() +AddLog vbCrLf & "Connected! Requesting Data..." + +If SocketState = RequestingGames Then + 'Request the Games: + wskTCP.SendData "GET /software/services/index.aspx" & MOTDRequest & " HTTP/1.0" & vbCrLf & _ + "Host: " & GSMOTDMasterHost & vbCrLf & _ + "User-Agent: GS Browser/0.1" & vbCrLf & vbCrLf +End If +End Sub + +'---------------------------------------- +' Parse IPs in an 6-Byte-IP Packet +'---------------------------------------- +Private Function DecompressIps(ByRef Servers() As Server, ByVal Data As String) As Boolean +Dim IP(3) As String +Dim Port(1) As Long +Dim i As Long +Dim c As Long + +If Len(Data) = 0 Then + DecompressIps = False + Exit Function +Else + Data = Replace$(Data, "\final\", "") +End If + +i = 1 +While i < Len(Data) - 6 + 'IP: + IP(0) = Asc(Mid$(Data, i, 1)) 'XXX.000.000.000 + IP(1) = Asc(Mid$(Data, i + 1, 1)) '000.XXX.000.000 + IP(2) = Asc(Mid$(Data, i + 2, 1)) '000.000.XXX.000 + IP(3) = Asc(Mid$(Data, i + 3, 1)) '000.000.000.XXX + + 'Port: + Port(0) = Asc(Mid$(Data, i + 4, 1)) + Port(1) = Asc(Mid$(Data, i + 5, 1)) + + c = GetUBound2(Servers) + 1 + ReDim Preserve Servers(c) + + With Servers(c) + .IP = IP(0) & "." & IP(1) & "." & IP(2) & "." & IP(3) + .Port = (Port(0) * 256) + Port(1) + End With + + i = i + 6 +Wend + +DecompressIps = True +End Function + +'---------------------------------------- +' Receive TCP-Data +'---------------------------------------- +Private Sub wskTCP_DataArrival(ByVal bytesTotal As Long) +Dim Data As String +Dim Splitted() As String +Dim i As Long + +wskTCP.GetData Data, vbString, bytesTotal + +Select Case SocketState + Case Idle 'Do nothing + Exit Sub + Case RequestingValidateKey + Dim ValidateKey As String + Dim Index As Integer + + If Left$(Data, 15) = "\basic\\secure\" Then + Index = lstGames.ItemData(lstGames.ListIndex) + + 'Create the Validate-Key: + ValidateKey = makeValidate(Right$(Data, 7), getHandoff(Game(Index).Handoff)) + + 'Request the Serverlist: + wskTCP.SendData createPacket(Game(Index).Gamename, ValidateKey, _ + Game(Index).Filter, True) + SocketState = ReceivingServers + Serverlist = "" + + Erase Servers + tmrCheck2.Enabled = True + AddLog vbCrLf & "Receiving Serverlist..." + End If + Case ReceivingServers + tmrCheck2.Enabled = False + Serverlist = Serverlist & Data + AddLog "." + + 'Check if all Servers are received: + If InStr(1, Serverlist, "\final\", vbBinaryCompare) > 0 Then + Serverlist = Replace$(Serverlist, "\final\", "") + wskTCP.Close + + AddLog " OK!" & vbCrLf & "Decompressing Servers..." + lstServers.Clear '!!! + + 'Decompress the IPs (4 Byte IP, 2 Byte Port) + If DecompressIps(Servers(), Serverlist) = True Then + If GetUBound2(Servers()) > -1 Then + For i = 0 To UBound(Servers) + 'Add Server to listbox + lstServers.AddItem Servers(i).IP & ":" & Servers(i).Port + Next + AddLog " Done! (" & UBound(Servers) + 1 & " Servers found!)" + Else + GoTo NoServers + End If + Else +NoServers: + AddLog " Done! (0 Servers found!)" + End If + + SocketState = Idle + End If + Case RequestingGames + Dim HeaderLen As Integer + + AddLog "." + + 'Split Header/Data + Splitted() = Split(Data, vbCrLf & vbCrLf, 2, vbTextCompare) + HeaderLen = Len(Splitted(0)) + Gamelist(1) = Splitted(1) + + 'Split the Header + Splitted() = Split(Data, vbCrLf, , vbTextCompare) + For i = 0 To UBound(Splitted) + + 'Get the Content-Length: + If Left$(Splitted(i), 16) = "Content-Length: " Then + Gamelist(0) = CLng(Mid$(Splitted(i), 17)) - (bytesTotal - HeaderLen) + Exit For + End If + Next + + If Len(MOTDRequest) = 0 Then + SocketState = ReceivingGamelist + Else + SocketState = ReceivingGameinfos + End If + Case ReceivingGamelist 'Parse the incoming Gamelist.. + Gamelist(0) = Gamelist(0) - bytesTotal + Gamelist(1) = Gamelist(1) & Data + AddLog "." + + 'Check if all Data is received: + If Gamelist(0) <= 0 Then + AddLog " Done!" + + Dim Split2() As String + + wskTCP.Close + MOTDRequest = "?mode=full&services=" + + 'Parse the Gamelist + Splitted() = Split(Gamelist(1), vbLf, , vbTextCompare) + For i = 0 To UBound(Splitted) + If Len(Splitted(i)) > 0 Then + Split2() = Split(Splitted(i), " - ", 2, vbTextCompare) + + 'Filter invalid games: + If Left$(Split2(0), 2) <> "g_" And _ + Left$(Split2(0), 4) <> "test" And _ + Left$(Split2(0), 1) <> "_" And _ + Split2(0) <> "fileplanet" Then + + MOTDRequest = MOTDRequest & Split2(0) & "\" 'Add game to our Request-String + End If + End If + Next + + 'Remove the "\" at the end: + MOTDRequest = Left$(MOTDRequest, Len(MOTDRequest) - 1) + + 'Connect to motd.gamespy.com:80.. + wskTCP.Connect GSMOTDMasterHost, GSMOTDMasterPort + + AddLog vbCrLf & "Connecting to " & GSMOTDMasterHost & ":" & GSMOTDMasterPort & "... (Gameinfos)" + Erase Game + SocketState = RequestingGames + End If + Case ReceivingGameinfos + Gamelist(0) = Gamelist(0) - bytesTotal + Gamelist(1) = Gamelist(1) & Data + AddLog "." + + Dim FirstSection As Boolean + Dim Key() As String + Dim c As Integer + Dim j As Integer + Dim Temp As GameData + + FirstSection = True + c = 0 + + 'Check if all Data is received: + If Gamelist(0) <= 0 Then + AddLog " OK." & vbCrLf & "Parsing Gameinfos..." + Splitted() = Split(Gamelist(1), vbLf, , vbTextCompare) + + 'Parse the INI-Strings + For i = 0 To UBound(Splitted) + Splitted(i) = Trim$(Splitted(i)) + If Left$(Splitted(i), 1) = "[" Then + '-------------------------- + ' INI-Section + '-------------------------- + If FirstSection = True Then + 'Gamename + Temp.Gamename = Mid$(Splitted(i), 2, Len(Splitted(i)) - 2) + FirstSection = False + Else + 'Check for invalid INI-Keys: + If Len(Temp.Gamename) > 0 And _ + Len(Temp.Handoff) > 0 And _ + Len(Temp.FullName) > 0 Then + + 'Add the valid game to our Array: + c = GetUBound(Game) + 1 + ReDim Preserve Game(c) + + With Game(c) + .Gamename = Temp.Gamename + .FullName = Temp.FullName + .Handoff = Temp.Handoff + + For j = 0 To GetUBound(TempFilters()) + If TempFilters(j).Gamename = Temp.Gamename Then + Game(c).Filter = TempFilters(j).Filter + Exit For + End If + Next + + lstGames.AddItem Temp.FullName + lstGames.ItemData(lstGames.NewIndex) = c + + 'Delete the Temp-Array: + Temp.Gamename = Mid$(Splitted(i), 2, Len(Splitted(i)) - 2) + Temp.FullName = "" + Temp.Handoff = "" + End With + End If + End If + Else + '-------------------------- + ' INI-Key + '-------------------------- + Key() = Split(Splitted(i), "=", 2, vbTextCompare) + If UBound(Key) > 0 Then + If LCase$(Key(0)) = "handoff" Then + Temp.Handoff = Key(1) + ElseIf LCase$(Key(0)) = "fullname" Then + Temp.FullName = Key(1) + End If + End If + End If + Next + + Dim RetVal As String + If chkSave.Value = vbChecked Then + AddLog vbCrLf & "Saving Gamelist... " + + RetVal = SaveServerlist(Game()) + If RetVal <> "" Then + 'Error + AddLog vbCrLf & "[ERROR] " & RetVal & vbCrLf + End If + End If + + AddLog "Done!" + SocketState = Idle + End If +End Select +End Sub + +'---------------------------------------- +' Log-Sub :D +'---------------------------------------- +Private Sub AddLog(ByVal Text As String) +If Len(Text) > 0 Then + txtLog.Text = txtLog.Text & Text + txtLog.SelStart = Len(txtLog.Text) +End If +End Sub + +'GRML: +Private Function GetUBound(ByRef Arr() As GameData) As Long +On Error GoTo IndexError + +GetUBound = UBound(Arr) +Exit Function + +IndexError: + GetUBound = -1 +End Function + +Private Function GetUBound2(ByRef Arr() As Server) As Long +On Error GoTo IndexError + +GetUBound2 = UBound(Arr) +Exit Function + +IndexError: + GetUBound2 = -1 +End Function diff --git a/modSave.bas b/modSave.bas new file mode 100644 index 0000000..ac15a95 --- /dev/null +++ b/modSave.bas @@ -0,0 +1,74 @@ +Attribute VB_Name = "modSave" +Option Explicit + +Public Type GameData + Gamename As String + FullName As String + Handoff As String + Filter As String +End Type + +'---------------------------------------- +' Save the Serverlist +'---------------------------------------- +Public Function SaveServerlist(ByRef Game() As GameData) As String +Dim Data As String +Dim F As Integer +Dim i As Long + +On Error GoTo SaveError +Data = "" + +For i = 0 To UBound(Game) + Data = Data & Game(i).FullName & Chr$(0) & _ + Game(i).Gamename & Chr$(0) & Game(i).Handoff & _ + Chr$(0) & Game(i).Filter & Chr$(0) +Next + +F = FreeFile 'Get new File-Number +Open App.Path & "\serverlist.dat" For Output As #F 'Open the file +Print #F, Left$(Data, Len(Data) - 1) 'Write Serverlist to file +Close #F 'Close + +Exit Function +SaveError: + SaveServerlist = "(" & Err.Number & ") " & Err.Description +End Function + +'---------------------------------------- +' Read the Serverlist +'---------------------------------------- +Public Function ReadServerlist(ByRef Game() As GameData) As String +Dim Data As String +Dim Splitted() As String +Dim F As Integer +Dim i As Long +Dim j As Long + +On Error GoTo ReadError + +F = FreeFile 'Get new File-Number +Open App.Path & "\serverlist.dat" For Binary As #F 'Open the file +Data = Space$(LOF(F)) 'Fill the String with spaces.. +Get #F, , Data 'Get the Serverlist +Close #F 'Close + +Splitted() = Split(Data, Chr$(0), , vbTextCompare) +For i = 0 To UBound(Splitted) Step 4 + ReDim Preserve Game(j) + + 'Fill the array: + With Game(j) + .FullName = Splitted(i) + .Gamename = Splitted(i + 1) + .Handoff = Splitted(i + 2) + .Filter = Splitted(i + 3) + End With + + j = j + 1 +Next + +Exit Function +ReadError: + ReadServerlist = "(" & Err.Number & ") " & Err.Description +End Function diff --git a/prjGSBrowser.vbp b/prjGSBrowser.vbp new file mode 100644 index 0000000..cfdc299 --- /dev/null +++ b/prjGSBrowser.vbp @@ -0,0 +1,47 @@ +Type=Exe +Form=frmMain.frm +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation +Module=modGameSpy; vbGSMSALG.bas +Module=modSave; modSave.bas +Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX +Object={248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0; mswinsck.ocx +Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx +IconForm="frmMain" +Startup="frmMain" +HelpFile="" +Title="GS Browser" +ExeName32="GS Browser.exe" +Command32="" +Name="prjGSBrowser" +HelpContextID="0" +Description="GameSpy Browser" +CompatibleMode="0" +MajorVer=0 +MinorVer=0 +RevisionVer=1 +AutoIncrementVer=0 +ServerSupportFiles=0 +VersionComments=":-P" +VersionCompanyName="ò_Ó" +VersionFileDescription="GameSpy Serverbrowser" +VersionLegalCopyright="Copyright © 2004 FiRe^ (fire_1@gmx.de)" +VersionLegalTrademarks="All brand and product names are trademarks and/or registered trademarks of their respective holders." +VersionProductName="GS Browser" +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 + +[MS Transaction Server] +AutoRefresh=1 diff --git a/vbGSMSALG.bas b/vbGSMSALG.bas new file mode 100644 index 0000000..b85a075 --- /dev/null +++ b/vbGSMSALG.bas @@ -0,0 +1,191 @@ +Attribute VB_Name = "modGameSpy" +'+---------------------------------------------------------------------------- +'| modGameSpy v0.4.1 +'| +'| Written by FiRe^ (fire_1@gmx.de) +'| Last edit: 2004-11-04 +'+---------------------------------------------------------------------------- +'| Information: +'| The algorithm for the function makeValidate() was converted from +'| Luigi Auriemma's C-Code gsmsalg.h (http://aluigi.altervista.org/papers/gsmsalg.h) +'| +'| +'| Public functions: +'| Create the Validate-Key: +'| str makeValidate(str SecureKey, str Handoff) +'| +'| Create a valid 6-char Handoff: +'| str getHandoff(str Handoff) +'| +'| Create a Master Packet: +'| str createPacket(str Gamename, str ValidateKey [, str Filter [, bool CompressedServers = False]]) +'| +'| +'| License (http://www.gnu.org/licenses/gpl.txt): +'| This program is free software; you can redistribute it and/or modify +'| it under the terms of the GNU General Public License as published by +'| the Free Software Foundation; either version 2 of the License, or +'| (at your option) any later version. +'| +'| This program is distributed in the hope that it will be useful, +'| but WITHOUT ANY WARRANTY; without even the implied warranty of +'| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +'| GNU General Public License for more details. +'| +'| You should have received a copy of the GNU General Public License +'| along with this program; if not, write to the Free Software +'| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +'+---------------------------------------------------------------------------- + +Option Explicit + +'+---------------------------------------------------------------------------- +'| Function: getHandoff +'| Params: Handoff: 14-char Handoff +'| Return: 6-char Handoff +'+---------------------------------------------------------------------------- +Public Function getHandoff(ByVal Handoff As String) As String +Dim newHandoff As String '// The new 6-char Handoff +Dim i As Byte '// Loop-var + +'// Handoff is too short: +If Len(Handoff) < 13 Then + getHandoff = Handoff ':-( + Exit Function +End If + +For i = 3 To 13 Step 2 + '// Add next char to the new Handoff + newHandoff = newHandoff & Mid$(Handoff, i, 1) +Next + +getHandoff = newHandoff +End Function + +'+---------------------------------------------------------------------------- +'| Function: createPacket +'| Params: Gamename: The internal Gamename (bfield1942, quake3, ...) +'| ValidateKey: The ValidateKey (created with makeValidate!) +'| [Filter]: Apply some Filters.. +'| [CompressedServers]: 'True' will return an 6-Byte-IP Packet +'| Return: A valid GameSpy Master-Packet +'+---------------------------------------------------------------------------- +Public Function createPacket(ByVal Gamename As String, ByVal ValidateKey As String, Optional ByVal Filter As String, Optional ByVal CompressedServers As Boolean) As String +'// This small function will create a GSMaster-Packet for you :) +createPacket = _ +"\gamename\" & Gamename & "\enctype\0\validate\" & ValidateKey & "\final\" & _ +"\queryid\1.1\list\" & IIf(CompressedServers = True, "cmp", "") & _ +"\gamename\" & Gamename & IIf(Len(Filter) > 0, "\where\" & Filter, "") & "\final\" +End Function + +'+---------------------------------------------------------------------------- +'| Function: makeValidate +'| Params: SecureKey: The Key received from the GS Master +'| Handoff: Your game's handoff +'| Return: Validate-Key +'+---------------------------------------------------------------------------- +Public Function makeValidate(ByVal SecureKey As String, ByVal Handoff As String) As String +Dim Table(255) As Byte '// Buffer +Dim Key() As Byte '// (Secure)Key +Dim Length(1) As Byte '// Length(0): Handoff length + '// Length(1): SecureKey length +Dim Temp(3) As Integer '// Some temporary variables +Dim i As Integer '// Loop-var +Dim Validate As String '// ValidateKey + +For i = 0 To 255 + Table(i) = i '// Fill the Buffer +Next + +'// Add the length of the Keys to the array +Length(0) = Len(Handoff) '// Should be 6 chars +Length(1) = Len(SecureKey) '// Default is 6 chars + +For i = 0 To 255 + '// Scramble the Table with the Handoff: + Temp(0) = (Temp(0) + Table(i) + Asc(Mid$(Handoff, (i Mod Length(0)) + 1, 1))) And 255 + Temp(1) = Table(Temp(0)) + + '// Update the buffer: + Table(Temp(0)) = Table(i) + Table(i) = Temp(1) +Next + +Temp(0) = 0 + +ReDim Key(Length(1) - 1) '// Set the Array-Size to the SecureKey-Length +Length(1) = Length(1) \ 3 + +'// Scramble the SecureKey with the Table: +For i = 0 To UBound(Key) + '// Add the next char to the Array + Key(i) = Asc(Mid$(SecureKey, i + 1, 1)) + + Temp(0) = (Temp(0) + Key(i) + 1) And 255 + Temp(1) = Table(Temp(0)) + + Temp(2) = (Temp(2) + Temp(1)) And 255 + Temp(3) = Table(Temp(2)) + + Table(Temp(2)) = Temp(1) + Table(Temp(0)) = Temp(3) + + '// XOR the Key with the Buffer: + Key(i) = Key(i) Xor Table((Temp(1) + Temp(3)) And 255) + + '// Encoding Type 2 (Completely useless) + 'Key(i) = Key(i) Xor Asc(Mid$(Handoff, (i Mod Length(0)) + 1, 1)) +Next + +i = 0 +'// Create the valid ValidateKey: +While Length(1) >= 1 '// Default are 3 loops + Length(1) = Length(1) - 1 + + Temp(1) = Key(i) + Temp(3) = Key(i + 1) + + '// VB has no >> << Operators :-( + addChar Validate, RShift(Temp(1), 2) + addChar Validate, LShift(Temp(1) And 3, 4) Or RShift(Temp(3), 4) + + Temp(1) = Key(i + 2) + + addChar Validate, LShift(Temp(3) And 15, 2) Or RShift(Temp(1), 6) + addChar Validate, Temp(1) And 63 + + i = i + 3 +Wend + +makeValidate = Validate '// Return the valid ValidateKey +End Function + +Private Sub addChar(ByRef Validate As String, ByVal Number As Byte) +Dim newChar As String * 1 + +'// Check the Charcode, create a new Char ... +Select Case Number + Case Is < 26 + newChar = Chr$(Number + 65) + Case Is < 52 + newChar = Chr$(Number + 71) + Case Is < 62 + newChar = Chr$(Number - 4) + Case 62 + newChar = "+" + Case 63 + newChar = "/" +End Select + +'// ... and add it to the ValidateKey +Validate = Validate & newChar +End Sub + +'// The << (LShift) and >> (RShift) functions: +Private Function LShift(ByVal Value As Byte, ByVal Shift As Byte) As Byte +LShift = Value * (2 ^ Shift) +End Function + +Private Function RShift(ByVal Value As Byte, ByVal Shift As Byte) As Byte +RShift = Value \ (2 ^ Shift) +End Function