internal String getLaunchURL(SCHostSession session)
        {
            String appName = "Elsinore.ScreenConnect.WindowsClient.application";

            if (serverVersion.StartsWith("ScreenConnect/5") || serverVersion.StartsWith("ScreenConnect/6") || serverVersion.StartsWith("ScreenConnect/4.3"))
            {
                appName = "Elsinore.ScreenConnect.Client.application";
            }
            String url = baseUrl + "/Bin/" + appName + "?";

            url += "h=" + hostName + "&";
            url += "p=" + relayPort + "&";
            url += "k=" + encryptionKey + "&";
            url += "s=" + session._sessionID + "&";
            if (serverVersion.StartsWith("ScreenConnect/4") || serverVersion.StartsWith("ScreenConnect/5") || serverVersion.StartsWith("ScreenConnect/6"))
            {
                url += "i=" + HttpUtility.UrlEncode(session._name) + "&";
            }
            else
            {
                url += "t=" + HttpUtility.UrlEncode(session._name) + "&";
            }
            if (session._token == null)
            {
                JValue accessTokenInfo = JsonConvert.DeserializeObject <JValue>(HttpPost(baseUrl + serviceAshx + "/GetAccessToken", JsonConvert.SerializeObject(new Object[] { session.category, session.sessionID })));
                session._token = accessTokenInfo.ToString();
            }
            url += "n=" + HttpUtility.UrlEncode(session._token) + "&";
            url += "e=" + session._type + "&";
            url += "y=Host";
            return(url);
        }
        internal void startHost(SCHostSession session)
        {
            String url    = getLaunchURL(session);
            int    result = LaunchApplication(url, IntPtr.Zero, 0);

            if (result != 0)
            {
                throw new Exception("Error launching Host Client: " + result);
            }
        }
Beispiel #3
0
 internal void startHost(SCHostSession session, Boolean viaScheme = false)
 {
     updateAntiforgeryToken();
     try { HttpPost(baseUrl + serviceAshx + "/LogInitiatedJoin", JsonConvert.SerializeObject(new Object[] { session.sessionID, 1, "(UrlLaunch) ScreenConnectIntegration" })); } catch { }
     if (viaScheme)
     {
         String url = getLaunchScheme(session);
         Process.Start(url);
     }
     else
     {
         String url    = getLaunchURL(session);
         int    result = LaunchApplication(url, IntPtr.Zero, 0);
         if (result != 0)
         {
             throw new Exception("Error launching Host Client: " + result);
         }
     }
 }
Beispiel #4
0
        internal String getLaunchScheme(SCHostSession session)
        {
            /*  URL SCHEME:
             *  '{0}://{1}:{2}/{3}/{4}/{5}/{6}/{7}/{8}/{9}/{10}',
             *                  scheme,
             *                  clientLaunchParameters.h,
             *                  clientLaunchParameters.p,
             *                  clientLaunchParameters.s,
             *                  encodeURIComponent(clientLaunchParameters.k || ''),
             *                  encodeURIComponent(clientLaunchParameters.n || ''),
             *                  encodeURIComponent(clientLaunchParameters.r || ''),
             *                  clientLaunchParameters.e,
             *                  encodeURIComponent(clientLaunchParameters.i || ''),
             *                  encodeURIComponent(clientLaunchParameters.a || ''),
             *                  encodeURIComponent(clientLaunchParameters.l || '')
             */

            if (session._token == null)
            {
                JValue accessTokenInfo = JsonConvert.DeserializeObject <JValue>(HttpPost(baseUrl + serviceAshx + "/GetAccessToken", JsonConvert.SerializeObject(new Object[] { session.category, session.sessionID })));
                session._token = accessTokenInfo.ToString();
            }

            String url = urlScheme + "://";

            url += hostName + ":";
            url += relayPort + "/";
            url += session._sessionID + "/";
            url += encryptionKey + "/";
            url += HttpUtility.UrlEncode(session._token) + "/";
            url += "/"; // r = User Name?
            url += session._type + "/";
            url += HttpUtility.UrlEncode(session._name) + "/";
            url += "None/";
            return(url);
        }
Beispiel #5
0
        internal List <SCHostSession> getSessions(String category, int mode)
        {
            List <SCHostSession> sl = new List <SCHostSession>();
            JObject hsi             = getHostSessionInfo(category, mode);
            String  sssKey          = "sss";

            if (serverVersionMain >= 5)
            {
                sssKey = "Sessions";
            }
            JArray sss = (JArray)hsi[sssKey];

            foreach (JObject session in sss)
            {
                SCHostSession scsession = new SCHostSession(this, category);
                if (serverVersionMain >= 5)
                {
                    scsession._name      = session["Name"].ToString();
                    scsession._sessionID = session["SessionID"].ToString();
                    try { scsession._token = session["AccessToken"].ToString(); } catch { }
                    scsession._host = session["Host"].ToString();
                    try
                    {
                        scsession._guestOS = session["GuestOperatingSystemName"].ToString();
                        String domain = session["GuestLoggedOnUserDomain"].ToString();
                        scsession._guestUser = (domain == "" ? "" : domain + @"\") + session["GuestLoggedOnUserName"].ToString();
                    }
                    catch
                    {
                        // Attributes not supported
                    }
                    List <String> custom = new List <String>();
                    foreach (JValue cobj in (JArray)session["CustomPropertyValues"])
                    {
                        custom.Add(cobj.Value <String>());
                    }
                    scsession._custom = custom.ToArray();
                    JArray active = (JArray)session["ActiveConnections"];
                    foreach (JObject actInfo in active)
                    {
                        if (actInfo["ProcessType"].Value <int>() == 1)
                        {
                            scsession._hostConnected = true;
                        }
                        if (actInfo["ProcessType"].Value <int>() == 2)
                        {
                            scsession._guestConnected = true;
                        }
                    }
                }
                else
                {
                    scsession._host = session["h"].Value <String>();
                    if (session["hcc"] == null && session["gcc"] == null && session["acs"] != null) // ScreenConnect 4.3 Presence Information
                    {
                        JArray acs = (JArray)session["acs"];
                        foreach (JObject acsInfo in acs)
                        {
                            if (acsInfo["pt"].Value <int>() == 1)
                            {
                                scsession._hostConnected = true;
                            }
                            if (acsInfo["pt"].Value <int>() == 2)
                            {
                                scsession._guestConnected = true;
                            }
                        }
                    }
                    else
                    {
                        scsession._hostConnected  = session["hcc"].Value <int>() > 0;
                        scsession._guestConnected = session["gcc"].Value <int>() > 0;
                    }

                    JObject clp = session["clp"].Value <JObject>();
                    if (serverVersion.StartsWith("ScreenConnect/4"))
                    {
                        scsession._name = clp["i"].Value <String>();
                    }
                    else
                    {
                        scsession._name = clp["t"].Value <String>();
                    }
                    scsession._sessionID = clp["s"].Value <String>();
                    scsession._token     = clp["n"].Value <String>();
                    List <String> custom = new List <String>();
                    foreach (JValue cobj in (JArray)session["cps"])
                    {
                        custom.Add(cobj.Value <String>());
                    }
                    scsession._custom = custom.ToArray();
                }
                String stKey = "st";
                if (serverVersionMain >= 5)
                {
                    stKey = "SessionType";
                }
                if (session[stKey].Value <int>() == sessionTypeSupport)
                {
                    scsession._type = "Support";
                }
                if (session[stKey].Value <int>() == sessionTypeMeet)
                {
                    scsession._type = "Meet";
                }
                if (session[stKey].Value <int>() == sessionTypeAccess)
                {
                    scsession._type = "Access";
                }
                sl.Add(scsession);
            }
            return(sl);
        }
Beispiel #6
0
        internal SCHostSessionDetails getSessionDetails(SCHostSession session)
        {
            JObject gsd = JsonConvert.DeserializeObject <JObject>(HttpPost(baseUrl + serviceAshx + "/GetSessionDetails", JsonConvert.SerializeObject(new Object[] { session.category, session.sessionID })));
            SCHostSessionDetails details = new SCHostSessionDetails(session);

            try
            {
                JObject gsdsession = gsd["Session"] as JObject;
                details._networkAddress                 = gsdsession["GuestNetworkAddress"].ToString();
                details._machineName                    = gsdsession["GuestMachineName"].ToString();
                details._machineDomain                  = gsdsession["GuestMachineDomain"].ToString();
                details._processorName                  = gsdsession["GuestProcessorName"].ToString();
                details._processorVirtualCount          = gsdsession["GuestProcessorVirtualCount"].ToString();
                details._systemMemoryTotalMegabytes     = gsdsession["GuestSystemMemoryTotalMegabytes"].ToString();
                details._systemMemoryAvailableMegabytes = gsdsession["GuestSystemMemoryAvailableMegabytes"].ToString();
                details._screenshotContentType          = gsdsession["GuestScreenshotContentType"].ToString();
                details._infoUpdateTime                 = gsdsession["GuestInfoUpdateTime"].ToString();
                details._screenshot = Convert.FromBase64String(gsd["GuestScreenshotContent"].ToString());
            }
            catch { }
            try
            {
                List <SCHostSessionEvent> eventlist = new List <SCHostSessionEvent>();
                double basetime    = gsd["BaseTime"].Value <double>();
                JArray events      = gsd["Events"] as JArray;
                JArray connections = gsd["Connections"] as JArray;
                foreach (JObject evt in events)
                {
                    try
                    {
                        SCHostSessionEvent e = new Integration.SCHostSessionEvent();
                        e.ConnectionId = Guid.Empty;
                        e.Data         = evt["Data"].Value <String>();
                        e.EventId      = new Guid(evt["EventID"].ToString());
                        e.EventType    = (SCHostSessionEventType)evt["EventType"].Value <int>();
                        e.Host         = evt["Host"].Value <String>();
                        e.Time         = UnixEpoch.AddMilliseconds(basetime - evt["Time"].Value <long>());
                        eventlist.Add(e);
                    }
                    catch { }
                }
                foreach (JObject conn in connections)
                {
                    foreach (JObject evt in conn["Events"] as JArray)
                    {
                        try
                        {
                            SCHostSessionEvent e = new Integration.SCHostSessionEvent();
                            e.ConnectionId = new Guid(conn["ConnectionID"].ToString());
                            e.Data         = evt["Data"].Value <String>();
                            e.EventId      = new Guid(evt["EventID"].ToString());
                            e.EventType    = (SCHostSessionEventType)evt["EventType"].Value <int>();
                            e.Host         = conn["ParticipantName"].Value <String>();
                            e.Time         = UnixEpoch.AddMilliseconds(basetime - evt["Time"].Value <long>());
                            eventlist.Add(e);
                        }
                        catch { }
                    }
                }
                details._events = eventlist.ToArray();
            }
            catch { }
            return(details);
        }
Beispiel #7
0
 internal void addEventToSession(SCHostSession session, SCHostSessionEventType type, String data)
 {
     HttpPost(baseUrl + serviceAshx + "/AddEventToSessions", JsonConvert.SerializeObject(new object[] { new object[] { session.category }, new object[] { session.sessionID }, (int)type, data }));
 }
 internal SCHostSessionDetails(SCHostSession session)
 {
     this._session = session;
 }