mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
source code checkin
This commit is contained in:
parent
5f8fb2c825
commit
7e57b72e35
675 changed files with 168433 additions and 0 deletions
88
src/QueryMaster/RconGoldSource.cs
Normal file
88
src/QueryMaster/RconGoldSource.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Net;
|
||||
|
||||
namespace QueryMaster
|
||||
{
|
||||
class RconGoldSource : Rcon
|
||||
{
|
||||
internal static readonly byte[] RconChIdQuery = { 0xFF, 0xFF, 0xFF, 0xFF, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x20, 0x72, 0x63, 0x6f, 0x6e };
|
||||
|
||||
internal static readonly byte[] RconQuery = { 0xFF, 0xFF, 0xFF, 0xFF, 0x72, 0x63, 0x6f, 0x6e, 0x20 };//+<challenge id>+"<rcon password>"+<value>
|
||||
internal string RConPass = string.Empty;
|
||||
internal UdpQuery socket;
|
||||
private RconGoldSource(IPEndPoint address)
|
||||
{
|
||||
socket = new UdpQuery(address, 3000, 3000);
|
||||
}
|
||||
|
||||
internal string ChallengeId = string.Empty;
|
||||
internal static Rcon Authorize(IPEndPoint address, string pass)
|
||||
{
|
||||
RconGoldSource Obj = new RconGoldSource(address);
|
||||
Obj.GetChallengeId();
|
||||
Obj.RConPass = pass;
|
||||
if (!Obj.SendCommand("").Contains("Bad rcon_password"))
|
||||
{
|
||||
return Obj;
|
||||
}
|
||||
Obj.socket.Dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
public override string SendCommand(string command)
|
||||
{
|
||||
byte[] rconMsg = Util.MergeByteArrays(RconQuery, Util.StringToBytes(ChallengeId), Util.StringToBytes(" \"" + RConPass + "\" " + command));
|
||||
byte[] recvData = new byte[2000];
|
||||
string s;
|
||||
recvData = socket.GetResponse(rconMsg, EngineType.GoldSource);
|
||||
try
|
||||
{
|
||||
s= Util.BytesToString(recvData).Remove(0, 1);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.Data.Add("ReceivedData", recvData);
|
||||
throw;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
private void GetChallengeId()
|
||||
{
|
||||
byte[] recvData=null;
|
||||
try
|
||||
{
|
||||
recvData = socket.GetResponse(RconChIdQuery, EngineType.GoldSource);
|
||||
Parser parser = new Parser(recvData);
|
||||
ChallengeId = parser.ReadString().Split(' ')[2].Trim();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.Data.Add("ReceivedData", recvData);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (socket != null)
|
||||
socket.Dispose();
|
||||
}
|
||||
|
||||
|
||||
public override void AddlogAddress(string ip, ushort port)
|
||||
{
|
||||
SendCommand("logaddress_add " + ip + " " + port);
|
||||
}
|
||||
|
||||
public override void RemovelogAddress(string ip, ushort port)
|
||||
{
|
||||
SendCommand("logaddress_del " + ip + " " + port);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue