public static bool PushResponse(string MachineID, PushDataResponse response, Int64 Channel, bool Use2ndLock = false) { string Key = MachineID + "-" + Channel.ToString(); PushServiceHelperData dd = null; lock (Lock) { if (Data.ContainsKey(Key) == false) { return(false); } dd = Data[Key]; } lock (dd.InnerLock) { response.MachineID = MachineID; dd.Responses.Add(response); if (Use2ndLock == false) { dd.ResponseEventLock.Set(); } else { dd.ResponseEventLock2.Set(); } } return(true); }
public RESTStatus RestartClientForced(SQLLib sql, object dummy, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "restartsystemforced"; p.ReplyID = guid; PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } Dummy = new NetString(); Dummy.Data = "OK"; return(RESTStatus.Success); }
public RESTStatus PushResponseB(SQLLib sql, PushDataResponse pdr, NetworkConnectionInfo ni) { if (ni.HasAcl(ACLFlags.ComputerLogin) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } if (pdr == null) { ni.Error = "Invalid data"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.Fail); } if (ni.PushChannel == null) { ni.Error = "Too early"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.Fail); } if (PushServiceHelper.PushResponse(ni.Username, pdr, ni.PushChannel.Value, true) == false) { ni.Error = "Cannot push"; ni.ErrorID = ErrorFlags.SystemError; return(RESTStatus.ServerError); } return(RESTStatus.Success); }
public RESTStatus PopSTDIOData(SQLLib sql, NetString StdIOSession, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } if (StdIOSession == null) { ni.Error = "Missing Session Data"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.Fail); } if (string.IsNullOrWhiteSpace(StdIOSession.Data) == true) { ni.Error = "Missing Session Data"; ni.ErrorID = ErrorFlags.InvalidData; return(RESTStatus.Fail); } string sess = "stdio-" + StdIOSession.Data; PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, sess, true); if (resp == null) { res = new Push_Stdio_StdOut(); res.SessionID = StdIOSession.Data; res.State = PushStdoutState.Timeout; return(RESTStatus.NoContent); } try { res = JsonConvert.DeserializeObject <Push_Stdio_StdOut>(resp.Data.ToString()); } catch { res = new Push_Stdio_StdOut(); res.SessionID = StdIOSession.Data; res.State = PushStdoutState.InternalError; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus PushNetworkDataCreateConnection(SQLLib sql, PushConnectNetwork data, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string SessionConnectionGUID = RemoteNetworkConnectionWSCrosser.CreateSession(ni.Username, MachineID); data.SessionID = SessionConnectionGUID; string sess = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "netcreatedata2"; p.ReplyID = sess; p.AdditionalData1 = JsonConvert.SerializeObject(data); PushServiceHelper.SendPushService(MachineID, p, 1); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 1, sess); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; RemoteNetworkConnectionWSCrosser.CloseSession(SessionConnectionGUID); return(RESTStatus.NoContent); } try { res1 = JsonConvert.DeserializeObject <PushConnectNetworkResult>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; RemoteNetworkConnectionWSCrosser.CloseSession(SessionConnectionGUID); return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus CheckFile(SQLLib sql, NetString Req, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "checkfile"; p.ReplyID = guid; p.AdditionalData1 = Req.Data; PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { FileRes = new NetInt32(); if (Int32.TryParse(resp.Data.ToString(), out FileRes.Data) == false) { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus PushNetworkDataPull(SQLLib sql, PushConnectNetworkData data, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string sess = Guid.NewGuid().ToString(); data.data = null; PushData p = new PushData(); p.Action = "netdatapull"; p.ReplyID = sess; p.AdditionalData1 = JsonConvert.SerializeObject(data); PushServiceHelper.SendPushService(MachineID, p, 1); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 1, sess); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { resd = JsonConvert.DeserializeObject <PushConnectNetworkData>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus WSCreateScreenConnection(SQLLib sql, object dummy, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string SessionConnectionGUID = RemoteNetworkConnectionWSCrosser.CreateSession(ni.Username, MachineID); string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "startwsscreen"; p.ReplyID = guid; p.AdditionalData1 = SessionConnectionGUID; PushServiceHelper.SendPushService(MachineID, p, 2); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 2, guid, Timeout: 240); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { res1 = JsonConvert.DeserializeObject <PushConnectNetworkResult>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus ListFiles(SQLLib sql, PushDirListReq Req, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "listfiles"; p.ReplyID = guid; p.AdditionalData1 = JsonConvert.SerializeObject(Req); PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { Lists = JsonConvert.DeserializeObject <NetStringList>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus WUCheckStatus(SQLLib sql, object dummy, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "wustatus"; p.ReplyID = guid; PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { WUStatus = JsonConvert.DeserializeObject <WUStatus>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus KillTask(SQLLib sql, NetInt32 PID, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "killtask"; p.ReplyID = guid; p.AdditionalData1 = PID.Data.ToString(); PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } OK = new NetBool(); OK.Data = false; if (resp.Data.ToString() != "ok") { OK.Data = false; return(RESTStatus.Success); } OK.Data = true; return(RESTStatus.Success); }
public RESTStatus SetNextEFIDevice(SQLLib sql, NetInt32 ID, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "efisetnextdevice"; p.ReplyID = guid; p.AdditionalData1 = ID.Data.ToString(); PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { NextBootDeviceOK = JsonConvert.DeserializeObject <NetBool>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public RESTStatus Clock(SQLLib sql, object dummy, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); PushData p = new PushData(); p.Action = "clock"; p.ReplyID = guid; PushServiceHelper.SendPushService(MachineID, p, 0); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 0, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } if (!(resp.Data is DateTime)) { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } ClockData = new PushClock(); ClockData.UTCDT = (DateTime)resp.Data; return(RESTStatus.Success); }
public RESTStatus SendChatmessageToClient(SQLLib sql, PushChatMessage ChatMessage, NetworkConnectionInfo ni, string MachineID) { if (ni.HasAcl(ACLFlags.ChangeServerSettings) == false) { ni.Error = "Access denied"; ni.ErrorID = ErrorFlags.AccessDenied; return(RESTStatus.Denied); } string guid = Guid.NewGuid().ToString(); Int64?ID = null; lock (ni.sqllock) { ID = sql.InsertMultiDataID("Chats", new SQLData("MachineID", MachineID), new SQLData("DT", DateTime.UtcNow), new SQLData("Read", 0), new SQLData("ToClient", 1), new SQLData("Name", ni.Name), new SQLData("Text", ChatMessage.Text)); } if (ID != null) { ChatMessage.ID = ID.Value; } else { ChatMessage.ID = 0; } ChatMessage.DT = DateTime.UtcNow; ChatMessage.Name = ni.Name; PushData p = new PushData(); p.Action = "chatmessage"; p.ReplyID = guid; p.AdditionalData1 = JsonConvert.SerializeObject(ChatMessage); PushServiceHelper.SendPushService(MachineID, p, 10); PushDataResponse resp = PushServiceHelper.PopResponse(MachineID, 10, guid); if (resp == null) { ni.Error = "No response"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } try { Res = JsonConvert.DeserializeObject <NetBool>(resp.Data.ToString()); } catch { ni.Error = "Faulty data"; ni.ErrorID = ErrorFlags.NoData; return(RESTStatus.NoContent); } return(RESTStatus.Success); }
public static PushDataResponse PopResponse(string MachineID, Int64 Channel, string SpecificID, bool Use2ndLock = false, int Timeout = 60) { string Key = MachineID + "-" + Channel.ToString(); PushServiceHelperData dd = null; PushDataResponse resp = null; lock (Lock) { if (Data.ContainsKey(Key) == false) { return(null); } dd = Data[Key]; } DateTime now = DateTime.UtcNow; do { if ((DateTime.UtcNow - now).TotalSeconds > 30) { break; } int Counter = 0; int Timer = 0; lock (dd.InnerLock) { Counter = dd.Responses.Count; } if (Counter == 0) { if (Use2ndLock == false) { while (Counter == 0) { lock (dd.InnerLock) { Counter = dd.Responses.Count; } dd.ResponseEventLock.WaitOne(LockWaitOne); Timer++; if (Timer > Timeout) { break; } } } else { while (Counter == 0) { lock (dd.InnerLock) { Counter = dd.Responses.Count; } dd.ResponseEventLock2.WaitOne(LockWaitOne); Timer++; if (Timer > Timeout) { break; } } } } if (string.IsNullOrWhiteSpace(SpecificID) == true) { lock (dd.InnerLock) { if (dd.Responses.Count == 0) { if (Use2ndLock == false) { dd.ResponseEventLock.Reset(); } else { dd.ResponseEventLock2.Reset(); } continue; } resp = dd.Responses[0]; dd.Responses.RemoveAt(0); if (dd.Responses.Count == 0) { if (Use2ndLock == false) { dd.ResponseEventLock.Reset(); } else { dd.ResponseEventLock2.Reset(); } } break; } } else { lock (dd.InnerLock) { if (dd.Responses.Count == 0) { if (Use2ndLock == false) { dd.ResponseEventLock.Reset(); } else { dd.ResponseEventLock2.Reset(); } continue; } foreach (PushDataResponse r in dd.Responses) { if (string.IsNullOrWhiteSpace(r.ReplyID) == false) { if (r.ReplyID.ToLower() == SpecificID.ToLower()) { resp = r; break; } } } if (resp != null) { dd.Responses.Remove(resp); if (dd.Responses.Count == 0) { if (Use2ndLock == false) { dd.ResponseEventLock.Reset(); } else { dd.ResponseEventLock2.Reset(); } } break; } if (Use2ndLock == false) { dd.ResponseEventLock.Reset(); } else { dd.ResponseEventLock2.Reset(); } } } } while (true); #if DEBUG //StackTrace stacky = new StackTrace(); //Debug.WriteLine(">> PopResponse: \n " + JsonConvert.SerializeObject(resp) + "\n for\n " + stacky.ToString()); #endif return(resp); }