Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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
        }
Example #9
0
        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);
        }
Example #10
0
        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);
            }
        }
Example #11
0
        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);
        }