internal bool GETDATA(string client, string pversion, string SearchString, long startoffset, long maxoffset)
{
try
{
ProcessMemoryReader pReader;
long absoluteEndOffset = maxoffset;
long absoluteStartOffset = startoffset;
string clientSearchString = SearchString;
uint bufferSize = 0x10000;
string currentClientProcessName = client.ToLower();
long currentOffset;
Encoding enc = Encoding.ASCII;
Process process1 = FindProcessByName(currentClientProcessName);
if (process1 == null)
{
return false;
}
currentOffset = absoluteStartOffset;
pReader = new ProcessMemoryReader();
pReader.ReadProcess = process1;
bool flag1 = false;
// AddLogLine("Debug: before pReader.OpenProcess();");
pReader.OpenProcess();
// AddLogLine("Debug: pReader.OpenProcess();");
while (currentOffset < absoluteEndOffset)
{
long num2;
// AddLogLine("Debug: " + currentOffset.ToString());
int num1;
byte[] buffer1 = pReader.ReadProcessMemory((IntPtr)currentOffset, bufferSize, out num1);
// pReader.saveArrayToFile(buffer1, @"D:\Projects\NRPG Ratio\NRPG RatioMaster MULTIPLE\RatioMaster source\bin\Release\tests\test" + currentOffset.ToString() + ".txt");
num2 = getStringOffsetInsideArray(buffer1, enc, clientSearchString);
if (num2 >= 0)
{
flag1 = true;
string text1 = enc.GetString(buffer1);
Match match1 = new Regex("&peer_id=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
if (match1.Success)
{
currentClient.PeerID = match1.Groups[1].ToString();
AddLogLine("====> PeerID = " + currentClient.PeerID);
}
match1 = new Regex("&key=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
if (match1.Success)
{
currentClient.Key = match1.Groups[1].ToString();
AddLogLine("====> Key = " + currentClient.Key);
}
match1 = new Regex("&port=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
if (match1.Success)
{
currentTorrent.port = match1.Groups[1].ToString();
AddLogLine("====> Port = " + currentTorrent.port);
}
match1 = new Regex("&numwant=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
if (match1.Success)
{
currentTorrent.numberOfPeers = match1.Groups[1].ToString();
AddLogLine("====> NumWant = " + currentTorrent.numberOfPeers);
int res;
if (!int.TryParse(currentTorrent.numberOfPeers, out res)) currentTorrent.numberOfPeers = currentClient.DefNumWant.ToString();
}
num2 += currentOffset;
AddLogLine("currentOffset = " + currentOffset);
break;
}
currentOffset += (int)bufferSize;
}
pReader.CloseHandle();
if (flag1)
{
AddLogLine("Search finished successfully!");
return true;
}
else
{
AddLogLine("Search failed. Make sure that torrent client {" + GetClientName() + "} is running and that at least one torrent is working.");
return false;
}
}
catch(Exception ex)
{
AddLogLine("Error when parsing: " + ex.Message);
return false;
}
}