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); } }
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); } } }
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); }
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); }
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); }
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; }