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); }
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 + "/"; 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)); }