public RESTStatus CloseWSServerMappingPort(SQLLib sql, NetString GUID, NetworkConnectionInfo ni) { if (ni.HasAcl(ACLFlags.ComputerLogin) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } RemoteNetworkConnectionWSCrosser.CloseSession(ni.Username, GUID.Data); Res = new PushConnectNetworkResult(); Res.Result = 0; return(RESTStatus.Success); }
public static PushConnectNetworkResult CloseConnection(string ReqString, Network net) { PushConnectNetworkResult Res = new PushConnectNetworkResult(); bool res = MainNetRedirWS.CloseConnection(ReqString); if (res == true) { Res.Result = 0; } else { Res.Result = 1; } return(Res); }
public RESTStatus PushNetworkDataCreateConnection(SQLLib sql, PushConnectNetwork data, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string SessionConnectionGUID = RemoteNetworkConnectionWSCrosser.CreateSession(ni.Username, MachineID); data.SessionID = SessionConnectionGUID; string sess = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "netcreatedata2"; p.ReplyID = sess; p.AdditionalData1 = JsonConvert.SerializeObject(data); PushServiceHelper.SendPushService(MachineID, p, 1); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 1, sess); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; RemoteNetworkConnectionWSCrosser.CloseSession(SessionConnectionGUID); return(RESTStatus.NoContent); } try { res1 = JsonConvert.DeserializeObject <PushConnectNetworkResult>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; RemoteNetworkConnectionWSCrosser.CloseSession(SessionConnectionGUID); return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public static PushConnectNetworkResult SendData(string ReqString, Network net) { PushConnectNetworkResult Res = new PushConnectNetworkResult(); bool res = MainNetRedir.ProcessData(ReqString); if (res == true) { Res.Result = 0; } else { Res.Result = 1; } return(Res); }
public static PushConnectNetworkResult StartNet(string ReqString, Network net) { PushConnectNetworkResult Res = new PushConnectNetworkResult(); PushConnectNetwork req; try { req = JsonConvert.DeserializeObject <PushConnectNetwork>(ReqString); } catch (Exception ee) { Debug.WriteLine(ee.ToString()); Res.Result = 0x16; return(Res); } Res.Result = 0; Res.ConnectedGUID = MainNetRedirWS.StartNetRedir(net, req.SessionID, req.Address, req.Port); return(Res); }
public RESTStatus WSCreateScreenConnection(SQLLib sql, object dummy, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string SessionConnectionGUID = RemoteNetworkConnectionWSCrosser.CreateSession(ni.Username, MachineID); string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "startwsscreen"; p.ReplyID = guid; p.AdditionalData1 = SessionConnectionGUID; PushServiceHelper.SendPushService(MachineID, p, 2); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 2, guid, Timeout: 240); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { res1 = JsonConvert.DeserializeObject <PushConnectNetworkResult>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public static PushConnectNetworkResult StartRemoteScreen(Network net, string SessionID) { PushConnectNetworkResult Res = new PushConnectNetworkResult(); Res.Result = 0; Res.ConnectedGUID = ""; ScreenDataWS scr = new ScreenDataWS(net, SessionID); if (scr.InitSuccess == false) { Res.Result = 0x16; return(Res); } Res.ConnectedGUID = scr.SessionID; lock (SessionsLocker) { Sessions.Add(scr.SessionID, scr); } return(Res); }
void RunningConnectionAccepterAndGetter(object s) { #region Websockets NetworkConnectionThreadPasser p = (NetworkConnectionThreadPasser)s; WSURL = p.net.GetWebsocketURL(); PushConnectNetworkResult res = p.net.PushConnectToRemote2(MachineID, RemoteAddress, RemotePort); if (res == null) { OnStatusEvent(StatusID.RemoteConnectionError); p.sock.Close(); return; } if (res.Result != 0) { OnStatusEvent(StatusID.RemoteConnectionStatusError); p.sock.Close(); return; } Debug.WriteLine("WS SOCKET: " + res.ConnectedGUID + " Create connection"); p.URL = WSURL + "websocket/mgmt-" + Uri.EscapeUriString(res.ConnectedGUID); Debug.WriteLine("WS URL: " + p.URL); Connections.Add(p); p.ws = new WebSocket(p.URL); p.ws.OnMessage += Ws_OnMessage; p.ws.SetCookie(new WebSocketSharp.Net.Cookie("MGMT-SessionID", net.Session)); p.ws.Connect(); OnStatusEvent(StatusID.Success); while (p.sock.Connected == true && StopThread == false) { int av = p.sock.Available; if (av == 0) { Thread.Sleep(10); continue; } byte[] data = new byte[av]; int av2 = p.sock.Receive(data); if (av2 == 0) { Thread.Sleep(10); continue; } if (av != av2) { byte[] data2 = new byte[av2]; for (int i = 0; i < av2; i++) { data2[i] = data[i]; } data = data2; } OnRXTXEvent(null, true, 0, data.LongLength); try { p.ws.Send(data); } catch (Exception ee) { Debug.WriteLine(ee.ToString()); OnStatusEvent(StatusID.RemoteConnectionStatusError); CloseAll(res.ConnectedGUID, p); return; } OnRXTXEvent(null, false, 0, 0); } OnStatusEvent(StatusID.Success); CloseAll(res.ConnectedGUID, p); #endregion }
public RESTStatus ConnectWSServerMappingPort(SQLLib sql, NetInt64 ID, NetworkConnectionInfo ni) { if (ni.HasAcl(ACLFlags.ComputerLogin) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } List <PolicyObject> pols = Policies.GetPolicyForComputerInternal(sql, ni.Username); PolicyObject FoundPolicy = null; foreach (PolicyObject p in pols) { if (p.ID == ID.Data && p.Type == PolicyIDs.PortMapping) { FoundPolicy = p; break; } } if (FoundPolicy == null) { ni.Error = "Not found"; ni.ErrorID = ErrorFlags.NotAccepted; return(RESTStatus.Denied); } PortMappingPolicy pmp = JsonConvert.DeserializeObject <PortMappingPolicy>(Policies.GetPolicy(sql, FoundPolicy.ID).Data); IPAddress ip; IPHostEntry ipaddr; if (IPAddress.TryParse(pmp.ServerServer, out ip) == false) { ipaddr = Dns.GetHostEntry(pmp.ServerServer); } else { ipaddr = new IPHostEntry(); ipaddr.AddressList = new IPAddress[] { ip }; } if (ipaddr == null) { ni.Error = "Cannot resolve"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.Fail); } if (ipaddr.AddressList.Length == 0) { ni.Error = "Resolve - no data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.Fail); } Socket socket; try { socket = new Socket(ipaddr.AddressList[0].AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipaddr.AddressList[0], pmp.ServerPort); } catch (Exception ee) { Debug.WriteLine("Cannot connect " + ee.ToString()); ni.Error = "Resolve - no data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.Fail); } string SessionID = ""; RemoteNetworkConnectionWSCrosser.CreateCustomAgentConnection <WS_ServerPortMappingConnection>(ni.Username, ref SessionID, i => i.InitThis(ref SessionID, socket)); Res = new PushConnectNetworkResult(); Res.ConnectedGUID = SessionID; Res.Result = 0; return(RESTStatus.Success); }
void Connect(bool Reset = false) { MouseEventsEnabled = false; KeyboardEventsEnabled = false; #if DEBUG UpdateText("Connecting"); #endif if (Reset == true) { ThreadRunning = false; if (UpdateScreenThreadHandle != null) { if (UpdateScreenThreadHandle.Join(10000) == false) { MessageBox.Show(this, "Thread did not close. Reset not performed", Program.Title, MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } try { ws.Close(); } catch { } } } try { this.Text = Program.Title + " Connecting ..... Server: " + Program.Net.serverinfo.Name + " Computer: " + cd.Computername; string WSURL = Program.Net.GetWebsocketURL(); PushConnectNetworkResult res = Program.Net.PushCreateWSScreenconnection(ComputerID); if (res == null) { return; } if (res.Result != 0) { return; } Debug.WriteLine("WS SOCKET: " + res.ConnectedGUID + " Create connection"); this.WSURL = WSURL + "websocket/mgmt-" + Uri.EscapeUriString(res.ConnectedGUID); Debug.WriteLine("WS URL: " + this.WSURL); ws = new WebSocket(this.WSURL); ws.OnMessage += Ws_OnMessage; ws.SetCookie(new WebSocketSharp.Net.Cookie("MGMT-SessionID", Program.Net.Session)); ws.Connect(); SendData(SendDataType.RefreshScreen, 0, 0, 0, 0); ThreadRunning = true; UpdateScreenThreadHandle = new Thread(new ThreadStart(UpdateScreenThread)); UpdateScreenThreadHandle.Start(); MouseEventsEnabled = true; KeyboardEventsEnabled = true; this.Text = Program.Title + " Server: " + Program.Net.serverinfo.Name + " Computer: " + cd.Computername; } catch (Exception ee) { MessageBox.Show(this, "SEH: " + ee.ToString(), Program.Title, MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
void RunningConnectionAccepterAndGetter(object s) { NetworkConnectionThreadPasser p = (NetworkConnectionThreadPasser)s; string WSURL = p.net.GetWebsocketURL(); PushConnectNetworkResult res = p.net.CreateWSServerPortMappingConnection(Mapping.ID); if (res == null) { p.sock.Close(); return; } if (res.Result != 0) { p.sock.Close(); return; } Debug.WriteLine("WS SOCKET: " + res.ConnectedGUID + " Create connection"); p.URL = WSURL + "websocket/agent-" + Uri.EscapeUriString(res.ConnectedGUID); Debug.WriteLine("WS URL: " + p.URL); Connections.Add(p); p.ws = new WebSocket(p.URL); p.ws.OnMessage += Ws_OnMessage; p.ws.SetCookie(new WebSocketSharp.Net.Cookie("Agent-SessionID", net.Session)); p.ws.Connect(); DateTime pingtestdt = DateTime.Now; while (p.sock.Connected == true && StopThread == false) { int av = p.sock.Available; if (av == 0) { if (pingtestdt.AddMinutes(1) < DateTime.Now) { pingtestdt = DateTime.Now; p.ws.Ping(); if (p.ws.IsAlive == false) { break; } } Thread.Sleep(10); continue; } byte[] data = new byte[av]; int av2 = p.sock.Receive(data); if (av2 == 0) { if (pingtestdt.AddMinutes(1) < DateTime.Now) { pingtestdt = DateTime.Now; p.ws.Ping(); if (p.ws.IsAlive == false) { break; } } Thread.Sleep(10); continue; } if (av != av2) { byte[] data2 = new byte[av2]; for (int i = 0; i < av2; i++) { data2[i] = data[i]; } data = data2; } if (pingtestdt.AddMinutes(1) < DateTime.Now) { pingtestdt = DateTime.Now; p.ws.Ping(); if (p.ws.IsAlive == false) { break; } } try { if (p.ws.IsAlive == false) { break; } p.ws.Send(data); } catch (Exception ee) { Debug.WriteLine(ee.ToString()); CloseAll(res.ConnectedGUID, p); return; } } CloseAll(res.ConnectedGUID, p); }