85 lines
2.6 KiB
C#
85 lines
2.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
|
|
namespace System.Net.Sockets
|
|
{
|
|
// Token: 0x020001F3 RID: 499
|
|
internal static class SocketPolicyClient
|
|
{
|
|
// Token: 0x060010BE RID: 4286 RVA: 0x00030878 File Offset: 0x0002EA78
|
|
private static void Log(string msg)
|
|
{
|
|
Console.WriteLine(string.Concat(new object[]
|
|
{
|
|
"SocketPolicyClient",
|
|
SocketPolicyClient.session,
|
|
": ",
|
|
msg
|
|
}));
|
|
}
|
|
|
|
// Token: 0x060010BF RID: 4287 RVA: 0x000308AC File Offset: 0x0002EAAC
|
|
private static Stream GetPolicyStreamForIP(string ip, int policyport, int timeout)
|
|
{
|
|
SocketPolicyClient.session++;
|
|
SocketPolicyClient.Log("Incoming GetPolicyStreamForIP");
|
|
IPEndPoint ipendPoint = new IPEndPoint(IPAddress.Parse(ip), policyport);
|
|
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
byte[] array = new byte[5000];
|
|
MemoryStream memoryStream = new MemoryStream();
|
|
try
|
|
{
|
|
SocketPolicyClient.Log("About to BeginConnect to " + ipendPoint);
|
|
IAsyncResult asyncResult = socket.BeginConnect(ipendPoint, null, null, false);
|
|
SocketPolicyClient.Log("About to WaitOne");
|
|
DateTime now = DateTime.Now;
|
|
if (!asyncResult.AsyncWaitHandle.WaitOne(timeout))
|
|
{
|
|
SocketPolicyClient.Log("WaitOne timed out. Duration: " + (DateTime.Now - now).TotalMilliseconds);
|
|
socket.Close();
|
|
throw new Exception("BeginConnect timed out");
|
|
}
|
|
socket.EndConnect(asyncResult);
|
|
SocketPolicyClient.Log("Socket connected");
|
|
byte[] bytes = Encoding.ASCII.GetBytes("<policy-file-request/>\0");
|
|
SocketError socketError;
|
|
socket.Send_nochecks(bytes, 0, bytes.Length, SocketFlags.None, out socketError);
|
|
if (socketError != SocketError.Success)
|
|
{
|
|
SocketPolicyClient.Log("Socket error: " + socketError);
|
|
return memoryStream;
|
|
}
|
|
int num = socket.Receive_nochecks(array, 0, array.Length, SocketFlags.None, out socketError);
|
|
if (socketError != SocketError.Success)
|
|
{
|
|
SocketPolicyClient.Log("Socket error: " + socketError);
|
|
return memoryStream;
|
|
}
|
|
try
|
|
{
|
|
socket.Shutdown(SocketShutdown.Both);
|
|
socket.Close();
|
|
}
|
|
catch (SocketException)
|
|
{
|
|
}
|
|
memoryStream = new MemoryStream(array, 0, num);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SocketPolicyClient.Log("Caught exception: " + ex.Message);
|
|
return memoryStream;
|
|
}
|
|
memoryStream.Seek(0L, SeekOrigin.Begin);
|
|
return memoryStream;
|
|
}
|
|
|
|
// Token: 0x04000F1C RID: 3868
|
|
private const string policy_request = "<policy-file-request/>\0";
|
|
|
|
// Token: 0x04000F1D RID: 3869
|
|
private static int session;
|
|
}
|
|
}
|