Create socket classes for socket helper methods for better organization.
This commit is contained in:
@@ -89,13 +89,13 @@ void Apps::GetAppsList(OrbisNetId Sock)
|
||||
std::vector<AppDatabase::AppInfo> AppList;
|
||||
if (!AppDatabase::GetApps(AppList))
|
||||
{
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
SockSendInt(Sock, AppList.size());
|
||||
Sockets::SendInt(Sock, AppList.size());
|
||||
|
||||
SendLargeData(Sock, (unsigned char*)AppList.data(), AppList.size() * sizeof(AppInfoPacket));
|
||||
Sockets::SendLargeData(Sock, (unsigned char*)AppList.data(), AppList.size() * sizeof(AppInfoPacket));
|
||||
}
|
||||
|
||||
void Apps::GetAppInfoString(OrbisNetId Sock, const char* TitleId)
|
||||
@@ -147,7 +147,7 @@ void Apps::SendAppStatus(OrbisNetId Sock, const char* TitleId)
|
||||
// If we have no appId that means the process is not running.
|
||||
if (appId <= 0)
|
||||
{
|
||||
SockSendInt(Sock, STATE_NOT_RUNNING);
|
||||
Sockets::SendInt(Sock, STATE_NOT_RUNNING);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -155,11 +155,11 @@ void Apps::SendAppStatus(OrbisNetId Sock, const char* TitleId)
|
||||
auto res = sceSystemServiceIsAppSuspended(appId, &state);
|
||||
if (res == 0 && state)
|
||||
{
|
||||
SockSendInt(Sock, STATE_SUSPENDED);
|
||||
Sockets::SendInt(Sock, STATE_SUSPENDED);
|
||||
}
|
||||
else
|
||||
{
|
||||
SockSendInt(Sock, STATE_RUNNING);
|
||||
Sockets::SendInt(Sock, STATE_RUNNING);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -173,7 +173,7 @@ void Apps::StartApp(OrbisNetId Sock, const char* TitleId)
|
||||
{
|
||||
klog("sceUserServiceGetForegroundUser(): Failed with error %llX\n", res);
|
||||
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -182,11 +182,11 @@ void Apps::StartApp(OrbisNetId Sock, const char* TitleId)
|
||||
{
|
||||
klog("sceLncUtilLaunchApp() : Failed with error % llX\n", res);
|
||||
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
SockSendInt(Sock, res);
|
||||
Sockets::SendInt(Sock, res);
|
||||
}
|
||||
|
||||
void Apps::KillApp(OrbisNetId Sock, const char* TitleId)
|
||||
@@ -195,11 +195,11 @@ void Apps::KillApp(OrbisNetId Sock, const char* TitleId)
|
||||
|
||||
if (appId > 0 && sceSystemServiceKillApp(appId, -1, 0, 0) == 0)
|
||||
{
|
||||
SockSendInt(Sock, 1);
|
||||
Sockets::SendInt(Sock, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,11 +209,11 @@ void Apps::SuspendApp(OrbisNetId Sock, const char* TitleId)
|
||||
|
||||
if (appId > 0 && LncUtil::sceLncUtilSuspendApp(appId, 0) == 0)
|
||||
{
|
||||
SockSendInt(Sock, 1);
|
||||
Sockets::SendInt(Sock, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,11 +223,11 @@ void Apps::ResumeApp(OrbisNetId Sock, const char* TitleId)
|
||||
|
||||
if (appId > 0 && LncUtil::sceLncUtilResumeApp(appId, 0) == 0 && sceApplicationSetApplicationFocus(appId) == 0)
|
||||
{
|
||||
SockSendInt(Sock, 1);
|
||||
Sockets::SendInt(Sock, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ void Apps::DeleteApp(OrbisNetId Sock, const char* TitleId)
|
||||
{
|
||||
auto result = sceAppInstUtilAppUnInstall(TitleId);
|
||||
|
||||
SockSendInt(Sock, (result == 0) ? 1 : 0);
|
||||
Sockets::SendInt(Sock, (result == 0) ? 1 : 0);
|
||||
}
|
||||
|
||||
void Apps::SetVisibility(OrbisNetId Sock, const char* TitleId)
|
||||
@@ -248,16 +248,16 @@ void Apps::SetVisibility(OrbisNetId Sock, const char* TitleId)
|
||||
|
||||
ShellUIIPC::RefreshContentArea();
|
||||
|
||||
SockSendInt(Sock, result ? 1 : 0);
|
||||
Sockets::SendInt(Sock, result ? 1 : 0);
|
||||
}
|
||||
|
||||
SockSendInt(Sock, 0);
|
||||
Sockets::SendInt(Sock, 0);
|
||||
}
|
||||
|
||||
void Apps::GetVisibility(OrbisNetId Sock, const char* TitleId)
|
||||
{
|
||||
auto visibility = AppDatabase::GetVisibility(TitleId);
|
||||
SockSendInt(Sock, visibility);
|
||||
Sockets::SendInt(Sock, visibility);
|
||||
}
|
||||
|
||||
Apps::Apps()
|
||||
|
||||
@@ -28,10 +28,11 @@
|
||||
#include "Utilities.h"
|
||||
#include "GoldHEN.h"
|
||||
#include "../../Misc/libjbc.h"
|
||||
#include "Sockets.h"
|
||||
#include "System.h"
|
||||
#include "Flash.h"
|
||||
|
||||
#include "APIPackets.h"
|
||||
#include "LncUtil.h"
|
||||
#include "ShellCoreUtil.h"
|
||||
#include "SystemMonitor.h"
|
||||
#include "SystemMonitor.h"
|
||||
|
||||
@@ -26,14 +26,14 @@ OrbisNetId GeneralIPC::Connect(const char* ProcessName)
|
||||
|
||||
bool GeneralIPC::SendCommand(OrbisNetId Sock, int Command)
|
||||
{
|
||||
if (!SockSendInt(Sock, Command))
|
||||
if (!Sockets::SendInt(Sock, Command))
|
||||
{
|
||||
klog("[GeneralIPC] Failed to send Command\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
int Status;
|
||||
if (!SockRecvInt(Sock, &Status))
|
||||
if (!Sockets::RecvInt(Sock, &Status))
|
||||
{
|
||||
klog("[GeneralIPC] Failed to recv status\n");
|
||||
return false;
|
||||
|
||||
@@ -76,6 +76,7 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
|
||||
<ClCompile Include="ShellCoreUtil.cpp" />
|
||||
<ClCompile Include="ShellUIIPC.cpp" />
|
||||
<ClCompile Include="SocketListener.cpp" />
|
||||
<ClCompile Include="Sockets.cpp" />
|
||||
<ClCompile Include="System.cpp" />
|
||||
<ClCompile Include="SystemMonitor.cpp" />
|
||||
<ClCompile Include="Target.cpp" />
|
||||
@@ -99,6 +100,7 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
|
||||
<ClInclude Include="ShellCoreUtil.h" />
|
||||
<ClInclude Include="ShellUIIPC.h" />
|
||||
<ClInclude Include="SocketListener.h" />
|
||||
<ClInclude Include="Sockets.h" />
|
||||
<ClInclude Include="System.h" />
|
||||
<ClInclude Include="SystemMonitor.h" />
|
||||
<ClInclude Include="Target.h" />
|
||||
|
||||
@@ -106,6 +106,9 @@
|
||||
<ClCompile Include="ShellUIIPC.cpp">
|
||||
<Filter>Source Files\Utilities</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Sockets.cpp">
|
||||
<Filter>Source Files\Utilities</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Common.h">
|
||||
@@ -174,5 +177,8 @@
|
||||
<ClInclude Include="ShellUIIPC.h">
|
||||
<Filter>Header Files\Utilities</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Sockets.h">
|
||||
<Filter>Header Files\Utilities</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -44,7 +44,7 @@ void Proc::SendProcessList(OrbisNetId Sock)
|
||||
std::vector<kinfo_proc> processList;
|
||||
GetProcessList(processList);
|
||||
|
||||
SockSendInt(Sock, processList.size());
|
||||
Sockets::SendInt(Sock, processList.size());
|
||||
|
||||
for (const auto& i : processList)
|
||||
{
|
||||
|
||||
@@ -23,14 +23,14 @@ OrbisNetId ShellUIIPC::Connect()
|
||||
|
||||
bool ShellUIIPC::SendCommand(OrbisNetId Sock, int Command)
|
||||
{
|
||||
if (!SockSendInt(Sock, Command))
|
||||
if (!Sockets::SendInt(Sock, Command))
|
||||
{
|
||||
klog("[GeneralIPC] Failed to send Command\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
int Status;
|
||||
if (!SockRecvInt(Sock, &Status))
|
||||
if (!Sockets::RecvInt(Sock, &Status))
|
||||
{
|
||||
klog("[GeneralIPC] Failed to recv status\n");
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#include "Common.h"
|
||||
#include "Sockets.h"
|
||||
|
||||
bool Sockets::SendInt(OrbisNetId Sock, int val)
|
||||
{
|
||||
return !(sceNetSend(Sock, &val, sizeof(int), 0) < 0);
|
||||
}
|
||||
|
||||
bool Sockets::RecvInt(OrbisNetId Sock, int* val)
|
||||
{
|
||||
return !(sceNetRecv(Sock, val, sizeof(int), 0) < 0);
|
||||
}
|
||||
|
||||
bool Sockets::SendLargeData(OrbisNetId Sock, unsigned char* data, size_t dataLen)
|
||||
{
|
||||
unsigned char* CurrentPosition = data;
|
||||
size_t DataLeft = dataLen;
|
||||
int res = 0;
|
||||
|
||||
while (DataLeft > 0)
|
||||
{
|
||||
size_t DataChunkSize = std::min((size_t)8192, DataLeft);
|
||||
|
||||
res = sceNetSend(Sock, CurrentPosition, DataChunkSize, 0);
|
||||
|
||||
if (res < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DataLeft -= res;
|
||||
CurrentPosition += res;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
class Sockets
|
||||
{
|
||||
public:
|
||||
static bool SendInt(OrbisNetId Sock, int val);
|
||||
static bool RecvInt(OrbisNetId Sock, int* val);
|
||||
static bool SendLargeData(OrbisNetId Sock, unsigned char* data, size_t dataLen);
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
@@ -190,46 +190,6 @@ int getMacAddress(OrbisNetIfName ifName_Num, char* strOut, size_t len)
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Networking
|
||||
|
||||
bool SockSendInt(OrbisNetId Sock, int val)
|
||||
{
|
||||
return !(sceNetSend(Sock, &val, sizeof(int), 0) < 0);
|
||||
}
|
||||
|
||||
bool SockRecvInt(OrbisNetId Sock, int* val)
|
||||
{
|
||||
return !(sceNetRecv(Sock, val, sizeof(int), 0) < 0);
|
||||
}
|
||||
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
bool SendLargeData(OrbisNetId Sock, unsigned char* data, size_t dataLen)
|
||||
{
|
||||
unsigned char* CurrentPosition = data;
|
||||
size_t DataLeft = dataLen;
|
||||
int res = 0;
|
||||
|
||||
while (DataLeft > 0)
|
||||
{
|
||||
size_t DataChunkSize = MIN(8192, DataLeft);
|
||||
|
||||
res = sceNetSend(Sock, CurrentPosition, DataChunkSize, 0);
|
||||
|
||||
if (res < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DataLeft -= res;
|
||||
CurrentPosition += res;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
void hexdump(void* ptr, int buflen) {
|
||||
unsigned char* buf = (unsigned char*)ptr;
|
||||
int i, j;
|
||||
|
||||
@@ -15,12 +15,6 @@ bool Jailbreak();
|
||||
bool CopySflash();
|
||||
int getMacAddress(OrbisNetIfName ifName_Num, char* strOut, size_t strlen);
|
||||
|
||||
//TODO: Make socket class.
|
||||
// Networking
|
||||
bool SockSendInt(OrbisNetId Sock, int val);
|
||||
bool SockRecvInt(OrbisNetId Sock, int* val);
|
||||
bool SendLargeData(OrbisNetId Sock, unsigned char* data, size_t dataLen);
|
||||
|
||||
struct kinfo_proc {
|
||||
int structSize; //0x00
|
||||
int layout; //0x04
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#pragma once
|
||||
#define ORBISLIB_MAJOR 3
|
||||
#define ORBISLIB_MINOR 0
|
||||
#define ORBISLIB_BUILDVERSION 708
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
#if defined(_DEBUG)
|
||||
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#else
|
||||
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#endif
|
||||
#pragma once
|
||||
#define ORBISLIB_MAJOR 3
|
||||
#define ORBISLIB_MINOR 0
|
||||
#define ORBISLIB_BUILDVERSION 715
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
#if defined(_DEBUG)
|
||||
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#else
|
||||
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#endif
|
||||
|
||||
@@ -84,7 +84,7 @@ int main()
|
||||
// Init App install utils.
|
||||
sceAppInstUtilInitialize();
|
||||
|
||||
//#define LOADTOOLBOX
|
||||
#define LOADTOOLBOX
|
||||
#ifdef LOADTOOLBOX
|
||||
auto handle = sys_sdk_proc_prx_load("SceShellUI", "/user/data/Orbis Toolbox/OrbisToolbox-2.0.sprx");
|
||||
if (handle > 0) {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#pragma once
|
||||
#define ORBIS_TOOLBOX_MAJOR 2
|
||||
#define ORBIS_TOOLBOX_MINOR 0
|
||||
#define ORBIS_TOOLBOX_BUILDVERSION 290
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
#if defined(ORBIS_TOOLBOX_DEBUG)
|
||||
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#else
|
||||
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#endif
|
||||
#pragma once
|
||||
#define ORBIS_TOOLBOX_MAJOR 2
|
||||
#define ORBIS_TOOLBOX_MINOR 0
|
||||
#define ORBIS_TOOLBOX_BUILDVERSION 291
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
#if defined(ORBIS_TOOLBOX_DEBUG)
|
||||
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#else
|
||||
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
|
||||
#endif
|
||||
|
||||
@@ -41,156 +41,6 @@ namespace OrbisLib2.Common.Helpers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends an object and its size to the socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="obj">The object we would like to send. (Must be serializable.)</param>
|
||||
public static void SendObject(this Socket s, object obj)
|
||||
{
|
||||
var Data = ObjectToByteArray(obj);
|
||||
s.Send(BitConverter.GetBytes(Data.Length), sizeof(int), SocketFlags.None);
|
||||
s.Send(Data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recieve an object from a socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns>Returns the object we would like to receive.</returns>
|
||||
public static object RecvObject(this Socket s)
|
||||
{
|
||||
var ObjectSize = s.RecvInt32();
|
||||
|
||||
var ObjectData = new byte[ObjectSize];
|
||||
s.Receive(ObjectData);
|
||||
|
||||
return ByteArrayToObject(ObjectData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends an int32 over socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="Data"></param>
|
||||
public static void SendInt32(this Socket s, int Data)
|
||||
{
|
||||
s.Send(BitConverter.GetBytes(Data));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Receives an int32 over sockets.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static int RecvInt32(this Socket s)
|
||||
{
|
||||
var Data = new byte[sizeof(int)];
|
||||
s.Receive(Data);
|
||||
return BitConverter.ToInt32(Data, 0);
|
||||
}
|
||||
|
||||
public static void RecvLarge(this Socket s, byte[] data)
|
||||
{
|
||||
int Left = data.Length;
|
||||
int Received = 0;
|
||||
|
||||
while(Left > 0)
|
||||
{
|
||||
var chunkSize = Math.Min(s.ReceiveBufferSize, Left);
|
||||
var res = s.Receive(data, Received, chunkSize, 0);
|
||||
|
||||
Received += res;
|
||||
Left -= res;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Easily connect to a socket and handle the time out.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="IPAddress">The address we would like to connect to.</param>
|
||||
/// <param name="Port">The port of the socket we would like to connect to.</param>
|
||||
/// <param name="TimeOut">The time we would like to wait for connection.</param>
|
||||
/// <returns></returns>
|
||||
public static bool EasyConnect(this Socket s, string IPAddress, int Port, int TimeOut)
|
||||
{
|
||||
s.ReceiveTimeout = s.SendTimeout = TimeOut * 1000;
|
||||
var result = s.BeginConnect(IPAddress, Port, null, null);
|
||||
|
||||
result.AsyncWaitHandle.WaitOne(3000, true);
|
||||
|
||||
if (!s.Connected)
|
||||
{
|
||||
Console.WriteLine("Failed to connect to socket.");
|
||||
|
||||
s.Close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// we have connected
|
||||
s.EndConnect(result);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the availability of a tcp host.
|
||||
/// </summary>
|
||||
/// <param name="Host">Host Address.</param>
|
||||
/// <param name="Port">Host Port.</param>
|
||||
/// <returns></returns>
|
||||
public static bool TestTcpConnection(string Host, int Port)
|
||||
{
|
||||
try
|
||||
{
|
||||
var client = new TcpClient();
|
||||
var result = client.BeginConnect(Host, Port, null, null);
|
||||
|
||||
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));
|
||||
|
||||
if (!success)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
client.EndConnect(result);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to ping a host.
|
||||
/// </summary>
|
||||
/// <param name="Host">Host Address</param>
|
||||
/// <returns></returns>
|
||||
public static bool PingHost(string Host)
|
||||
{
|
||||
try
|
||||
{
|
||||
var pingSender = new Ping();
|
||||
var options = new PingOptions();
|
||||
options.DontFragment = true;
|
||||
|
||||
var reply = pingSender.Send(Host, 120, Encoding.ASCII.GetBytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), options);
|
||||
return (reply.Status == IPStatus.Success);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
|
||||
namespace OrbisLib2.Common.Helpers
|
||||
{
|
||||
public static class Sockets
|
||||
{
|
||||
/// <summary>
|
||||
/// Recieve large amounts of data from a socket that is larger than the recieve buffer size.
|
||||
/// </summary>
|
||||
/// <param name="s">The current socket.</param>
|
||||
/// <param name="data">The data to be recieved.</param>
|
||||
public static void RecvLarge(this Socket s, byte[] data)
|
||||
{
|
||||
int Left = data.Length;
|
||||
int Received = 0;
|
||||
|
||||
while (Left > 0)
|
||||
{
|
||||
var chunkSize = Math.Min(s.ReceiveBufferSize, Left);
|
||||
var res = s.Receive(data, Received, chunkSize, 0);
|
||||
|
||||
Received += res;
|
||||
Left -= res;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends an object and its size to the socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="obj">The object we would like to send. (Must be serializable.)</param>
|
||||
public static void SendObject(this Socket s, object obj)
|
||||
{
|
||||
var Data = Helper.ObjectToByteArray(obj);
|
||||
s.Send(BitConverter.GetBytes(Data.Length), sizeof(int), SocketFlags.None);
|
||||
s.Send(Data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recieve an object from a socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns>Returns the object we would like to receive.</returns>
|
||||
public static object RecvObject(this Socket s)
|
||||
{
|
||||
var ObjectSize = s.RecvInt32();
|
||||
|
||||
var ObjectData = new byte[ObjectSize];
|
||||
s.Receive(ObjectData);
|
||||
|
||||
return Helper.ByteArrayToObject(ObjectData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends an int32 over socket.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="Data"></param>
|
||||
public static void SendInt32(this Socket s, int Data)
|
||||
{
|
||||
s.Send(BitConverter.GetBytes(Data));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Receives an int32 over sockets.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static int RecvInt32(this Socket s)
|
||||
{
|
||||
var Data = new byte[sizeof(int)];
|
||||
s.Receive(Data);
|
||||
return BitConverter.ToInt32(Data, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to ping a host.
|
||||
/// </summary>
|
||||
/// <param name="Host">Host Address</param>
|
||||
/// <returns></returns>
|
||||
public static bool PingHost(string Host)
|
||||
{
|
||||
try
|
||||
{
|
||||
var pingSender = new Ping();
|
||||
var options = new PingOptions();
|
||||
options.DontFragment = true;
|
||||
|
||||
var reply = pingSender.Send(Host, 120, Encoding.ASCII.GetBytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), options);
|
||||
return (reply.Status == IPStatus.Success);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the availability of a tcp host.
|
||||
/// </summary>
|
||||
/// <param name="Host">Host Address.</param>
|
||||
/// <param name="Port">Host Port.</param>
|
||||
/// <returns></returns>
|
||||
public static bool TestTcpConnection(string Host, int Port)
|
||||
{
|
||||
try
|
||||
{
|
||||
var client = new TcpClient();
|
||||
var result = client.BeginConnect(Host, Port, null, null);
|
||||
|
||||
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1));
|
||||
|
||||
if (!success)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
client.EndConnect(result);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Easily connect to a socket and handle the time out.
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="IPAddress">The address we would like to connect to.</param>
|
||||
/// <param name="Port">The port of the socket we would like to connect to.</param>
|
||||
/// <param name="TimeOut">The time we would like to wait for connection.</param>
|
||||
/// <returns></returns>
|
||||
public static bool EasyConnect(this Socket s, string IPAddress, int Port, int TimeOut)
|
||||
{
|
||||
s.ReceiveTimeout = s.SendTimeout = TimeOut * 1000;
|
||||
var result = s.BeginConnect(IPAddress, Port, null, null);
|
||||
|
||||
result.AsyncWaitHandle.WaitOne(3000, true);
|
||||
|
||||
if (!s.Connected)
|
||||
{
|
||||
Console.WriteLine("Failed to connect to socket.");
|
||||
|
||||
s.Close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// we have connected
|
||||
s.EndConnect(result);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
2161
|
||||
2163
|
||||
|
||||
@@ -1 +1 @@
|
||||
Version 3.0.2161 Debug Build Saturday December 24 2022 11:40 AM
|
||||
Version 3.0.2163 Debug Build Tuesday December 27 2022 5:28 PM
|
||||
|
||||
@@ -30,14 +30,14 @@ namespace OrbisSuiteService.Service
|
||||
var oldAvailable = Target.Info.IsAvailable;
|
||||
var OldAPIAvailable = Target.Info.IsAPIAvailable;
|
||||
|
||||
if(Helper.PingHost(Target.IPAddress))
|
||||
if(Sockets.PingHost(Target.IPAddress))
|
||||
{
|
||||
var detail = Target.Info;
|
||||
detail.IsAvailable = true;
|
||||
}
|
||||
|
||||
Target.Info.IsAvailable = Helper.PingHost(Target.IPAddress);
|
||||
Target.Info.IsAPIAvailable = Helper.TestTcpConnection(Target.IPAddress, Settings.CreateInstance().APIPort);
|
||||
Target.Info.IsAvailable = Sockets.PingHost(Target.IPAddress);
|
||||
Target.Info.IsAPIAvailable = Sockets.TestTcpConnection(Target.IPAddress, Settings.CreateInstance().APIPort);
|
||||
Target.Info.Save();
|
||||
|
||||
if (Target.Info.IsAPIAvailable)
|
||||
|
||||
Reference in New Issue
Block a user