/* * Check that the user has access to RPI servers, but this isnt checking if they actually have pstat access */ private void do_auth() { rpiCode = new RPI_Auth(); if (rpiCode.rpi_authent(setableUsername.Text, setablePassword.Text)) { Login.Visible = false; PrintGroup.Visible = true; } else { MessageBox.Show("Bad Username/Password"); } }
/* * This code goes and returns a arrray of print jobs, give it a printer name and the authorication object */ public printJob[] get_prints_printer(string passedPrinter, RPI_Auth passedAuth) { printer = passedPrinter; // store the data in hte private object List<printJob> returnData = new List<printJob>(); // we start with a list then transfer to a array string print_info = passedAuth.returnSSH("lpc stat " + passedPrinter); // check which server handles that printer int startOfString = print_info.IndexOf("sends to") + 9; int endOfString = print_info.IndexOf(")", startOfString); if (print_info.Contains("unknown printer")) return returnData.ToArray(); string printServer = print_info.Substring(startOfString, endOfString - startOfString); //go and get the log for that printer from the server string returnedLog = passedAuth.returnSSHFrom("cat /var/adm/lpd/" + passedPrinter + "/log", printServer); //split up the log by line string[] returnedBroken = returnedLog.Split('\n'); //null out the string, for the tiny memory savings! returnedLog = ""; //Create a temporary job that will be our object to add to the array printJob tempJob = new printJob(); //go line by line through log for (int i = 0; i < returnedBroken.Length; i++) { if (tempJob.JobStart == "") //are we finding the start of a job or the end { //look for start if (returnedBroken[i].Contains("papif: Starting")) { if (returnedBroken[i].Contains("papif: Starting job")) startOfString = returnedBroken[i].IndexOf(" for ") + 5; else startOfString = returnedBroken[i].IndexOf(" Starting ") + 10; endOfString = returnedBroken[i].IndexOf(':', startOfString); int secondEnd = returnedBroken[i].IndexOf('@', startOfString); if (secondEnd != -1 && secondEnd < endOfString) endOfString = secondEnd; tempJob.JobUser = returnedBroken[i].Substring(startOfString, endOfString - startOfString).TrimStart(); startOfString = endOfString; startOfString = returnedBroken[i].IndexOf(" at ",startOfString) + 4; endOfString = returnedBroken[i].IndexOf(" on ", startOfString); tempJob.JobStart = returnedBroken[i].Substring(startOfString, endOfString - startOfString); } } else { //look for end if (returnedBroken[i].Contains("papif: Finished")) { startOfString = returnedBroken[i].IndexOf(" at ") + 4; endOfString = returnedBroken[i].IndexOf("(", startOfString); tempJob.JobStop = returnedBroken[i].Substring(startOfString, endOfString - startOfString); startOfString = returnedBroken[i].IndexOf(" bytes, ") + 8; endOfString = returnedBroken[i].IndexOf("pages", startOfString); tempJob.JobPages = int.Parse(returnedBroken[i].Substring(startOfString, endOfString - startOfString).Trim()); returnData.Add(tempJob); tempJob = new printJob(); } } if (i == returnedBroken.Length) // if we are at the end, and the job hasnt finished { returnData.Add(tempJob); } } STORAGE = returnData.ToArray(); return STORAGE; // return the array of data }
private printJob[] STORAGE; //This stores all the printer data /* * This code goes and returns a arrray of print jobs, give it a printer name and the authorication object */ public printJob[] get_prints_printer(string passedPrinter, RPI_Auth passedAuth) { printer = passedPrinter; // store the data in hte private object List <printJob> returnData = new List <printJob>(); // we start with a list then transfer to a array string print_info = passedAuth.returnSSH("lpc stat " + passedPrinter); // check which server handles that printer int startOfString = print_info.IndexOf("sends to") + 9; int endOfString = print_info.IndexOf(")", startOfString); if (print_info.Contains("unknown printer")) { return(returnData.ToArray()); } string printServer = print_info.Substring(startOfString, endOfString - startOfString); //go and get the log for that printer from the server string returnedLog = passedAuth.returnSSHFrom("cat /var/adm/lpd/" + passedPrinter + "/log", printServer); //split up the log by line string[] returnedBroken = returnedLog.Split('\n'); //null out the string, for the tiny memory savings! returnedLog = ""; //Create a temporary job that will be our object to add to the array printJob tempJob = new printJob(); //go line by line through log for (int i = 0; i < returnedBroken.Length; i++) { if (tempJob.JobStart == "") //are we finding the start of a job or the end { //look for start if (returnedBroken[i].Contains("papif: Starting")) { if (returnedBroken[i].Contains("papif: Starting job")) { startOfString = returnedBroken[i].IndexOf(" for ") + 5; } else { startOfString = returnedBroken[i].IndexOf(" Starting ") + 10; } endOfString = returnedBroken[i].IndexOf(':', startOfString); int secondEnd = returnedBroken[i].IndexOf('@', startOfString); if (secondEnd != -1 && secondEnd < endOfString) { endOfString = secondEnd; } tempJob.JobUser = returnedBroken[i].Substring(startOfString, endOfString - startOfString).TrimStart(); startOfString = endOfString; startOfString = returnedBroken[i].IndexOf(" at ", startOfString) + 4; endOfString = returnedBroken[i].IndexOf(" on ", startOfString); tempJob.JobStart = returnedBroken[i].Substring(startOfString, endOfString - startOfString); } } else { //look for end if (returnedBroken[i].Contains("papif: Finished")) { startOfString = returnedBroken[i].IndexOf(" at ") + 4; endOfString = returnedBroken[i].IndexOf("(", startOfString); tempJob.JobStop = returnedBroken[i].Substring(startOfString, endOfString - startOfString); startOfString = returnedBroken[i].IndexOf(" bytes, ") + 8; endOfString = returnedBroken[i].IndexOf("pages", startOfString); tempJob.JobPages = int.Parse(returnedBroken[i].Substring(startOfString, endOfString - startOfString).Trim()); returnData.Add(tempJob); tempJob = new printJob(); } } if (i == returnedBroken.Length) // if we are at the end, and the job hasnt finished { returnData.Add(tempJob); } } STORAGE = returnData.ToArray(); return(STORAGE); // return the array of data }