예제 #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);
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
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);
        }