private bool HasEvents(UUID RequestID, UUID sessionID) { ConsoleConnection c = null; lock (m_Connections) { if (!m_Connections.ContainsKey(sessionID)) { return(false); } c = m_Connections[sessionID]; } c.last = Environment.TickCount; if (c.lastLineSeen < m_LineNumber) { return(true); } return(false); }
private byte[] HandleHttpStartSession(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { DoExpire(); Hashtable post = DecodePostString(request.ReadUntilEnd()); httpResponse.StatusCode = 401; httpResponse.ContentType = "text/plain"; if (m_UserName == String.Empty) return MainServer.BlankResponse; if (post["USER"] == null || post["PASS"] == null) return MainServer.BlankResponse; if (m_UserName != post["USER"].ToString() || m_Password != post["PASS"].ToString()) return MainServer.BlankResponse; ConsoleConnection c = new ConsoleConnection {last = Environment.TickCount, lastLineSeen = 0}; UUID sessionID = UUID.Random(); lock (m_Connections) { m_Connections[sessionID] = c; } string uri = "/ReadResponses/" + sessionID.ToString() + "/"; m_Server.AddPollServiceHTTPHandler(uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID)); XmlDocument xmldoc = new XmlDocument(); XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); xmldoc.AppendChild(xmlnode); XmlElement rootElement = xmldoc.CreateElement("", "ConsoleSession", ""); xmldoc.AppendChild(rootElement); XmlElement id = xmldoc.CreateElement("", "SessionID", ""); id.AppendChild(xmldoc.CreateTextNode(sessionID.ToString())); rootElement.AppendChild(id); XmlElement prompt = xmldoc.CreateElement("", "Prompt", ""); prompt.AppendChild(xmldoc.CreateTextNode(DefaultPrompt)); rootElement.AppendChild(prompt); httpResponse.StatusCode = 200; httpResponse.ContentType = "text/xml"; return Encoding.UTF8.GetBytes(xmldoc.InnerXml); }
private byte[] GetEvents(UUID RequestID, UUID sessionID, string req, OSHttpResponse response) { ConsoleConnection c = null; lock (m_Connections) { if (!m_Connections.ContainsKey(sessionID)) { return(NoEvents(RequestID, UUID.Zero, response)); } c = m_Connections[sessionID]; } c.last = Environment.TickCount; if (c.lastLineSeen >= m_LineNumber) { return(NoEvents(RequestID, UUID.Zero, response)); } XmlDocument xmldoc = new XmlDocument(); XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); xmldoc.AppendChild(xmlnode); XmlElement rootElement = xmldoc.CreateElement("", "ConsoleSession", ""); if (c.newConnection) { c.newConnection = false; Output("+++" + DefaultPrompt, Threshold); } lock (m_Scrollback) { long startLine = m_LineNumber - m_Scrollback.Count; long sendStart = startLine; if (sendStart < c.lastLineSeen) { sendStart = c.lastLineSeen; } for (long i = sendStart; i < m_LineNumber; i++) { XmlElement res = xmldoc.CreateElement("", "Line", ""); long line = i + 1; res.SetAttribute("Number", line.ToString()); res.AppendChild(xmldoc.CreateTextNode(m_Scrollback[(int)(i - startLine)])); rootElement.AppendChild(res); } } c.lastLineSeen = m_LineNumber; xmldoc.AppendChild(rootElement); response.StatusCode = 200; response.ContentType = "application/xml"; return(Encoding.UTF8.GetBytes(xmldoc.InnerXml)); }
private byte[] HandleHttpStartSession(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { DoExpire(); Hashtable post = DecodePostString(HttpServerHandlerHelpers.ReadString(request)); httpResponse.StatusCode = 401; httpResponse.ContentType = "text/plain"; if (m_UserName == String.Empty) { return(MainServer.BlankResponse); } if (post["USER"] == null || post["PASS"] == null) { return(MainServer.BlankResponse); } if (m_UserName != post["USER"].ToString() || m_Password != post["PASS"].ToString()) { return(MainServer.BlankResponse); } ConsoleConnection c = new ConsoleConnection { last = Environment.TickCount, lastLineSeen = 0 }; UUID sessionID = UUID.Random(); lock (m_Connections) { m_Connections[sessionID] = c; } string uri = "/ReadResponses/" + sessionID.ToString() + "/"; m_Server.AddPollServiceHTTPHandler(uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID)); XmlDocument xmldoc = new XmlDocument(); XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); xmldoc.AppendChild(xmlnode); XmlElement rootElement = xmldoc.CreateElement("", "ConsoleSession", ""); xmldoc.AppendChild(rootElement); XmlElement id = xmldoc.CreateElement("", "SessionID", ""); id.AppendChild(xmldoc.CreateTextNode(sessionID.ToString())); rootElement.AppendChild(id); XmlElement prompt = xmldoc.CreateElement("", "Prompt", ""); prompt.AppendChild(xmldoc.CreateTextNode(DefaultPrompt)); rootElement.AppendChild(prompt); httpResponse.StatusCode = 200; httpResponse.ContentType = "text/xml"; return(Encoding.UTF8.GetBytes(xmldoc.InnerXml)); }