From a1b22add5a6e1f16f33740ef8bc6d75111d29a3d Mon Sep 17 00:00:00 2001 From: Jim Norman Date: Thu, 1 Mar 2007 23:30:48 +0000 Subject: [PATCH] Revert changes made by mistake in the trunk. --- .../ICommunication.cs => IClientChannel.cs} | 25 +- ...nicationFactory.cs => IPCClientFactory.cs} | 40 ++- .../lib/communication/MiCasaRequestReply.cs | 191 +++++++++++++ .../micasad/lib/communication/SAS.Designer.cs | 52 ---- CASA/micasad/lib/communication/SAS.cs | 18 -- .../lib/communication/UnixIPCClientChannel.cs | 182 ++++++++++++ .../lib/communication/WinIPCClientChannel.cs | 103 +++++++ .../lib/communication/iss/MethodCall.cs | 125 --------- .../lib/communication/server/AppHandler.cs | 125 --------- .../lib/communication/server/IPCChannel.cs | 62 ----- .../lib/communication/server/ISSVerb.cs | 55 ---- .../lib/communication/server/RequestParser.cs | 88 ------ .../communication/server/WinCommunication.cs | 60 ---- .../lib/communication/server/WinIPCChannel.cs | 102 ------- .../lib/communication/verbs/CMWebClient.cs | 73 ----- .../lib/communication/verbs/SelectCard.cs | 262 ------------------ .../lib/communication/win/PipeManager.cs | 174 ------------ .../lib/communication/win/ServerNamedPipe.cs | 132 --------- 18 files changed, 509 insertions(+), 1360 deletions(-) rename CASA/micasad/lib/communication/{server/ICommunication.cs => IClientChannel.cs} (77%) rename CASA/micasad/lib/communication/{server/CommunicationFactory.cs => IPCClientFactory.cs} (63%) create mode 100644 CASA/micasad/lib/communication/MiCasaRequestReply.cs delete mode 100644 CASA/micasad/lib/communication/SAS.Designer.cs delete mode 100644 CASA/micasad/lib/communication/SAS.cs create mode 100644 CASA/micasad/lib/communication/UnixIPCClientChannel.cs create mode 100644 CASA/micasad/lib/communication/WinIPCClientChannel.cs delete mode 100644 CASA/micasad/lib/communication/iss/MethodCall.cs delete mode 100644 CASA/micasad/lib/communication/server/AppHandler.cs delete mode 100644 CASA/micasad/lib/communication/server/IPCChannel.cs delete mode 100644 CASA/micasad/lib/communication/server/ISSVerb.cs delete mode 100644 CASA/micasad/lib/communication/server/RequestParser.cs delete mode 100644 CASA/micasad/lib/communication/server/WinCommunication.cs delete mode 100644 CASA/micasad/lib/communication/server/WinIPCChannel.cs delete mode 100644 CASA/micasad/lib/communication/verbs/CMWebClient.cs delete mode 100644 CASA/micasad/lib/communication/verbs/SelectCard.cs delete mode 100644 CASA/micasad/lib/communication/win/PipeManager.cs delete mode 100644 CASA/micasad/lib/communication/win/ServerNamedPipe.cs diff --git a/CASA/micasad/lib/communication/server/ICommunication.cs b/CASA/micasad/lib/communication/IClientChannel.cs similarity index 77% rename from CASA/micasad/lib/communication/server/ICommunication.cs rename to CASA/micasad/lib/communication/IClientChannel.cs index 7a644f7d..0138551b 100644 --- a/CASA/micasad/lib/communication/server/ICommunication.cs +++ b/CASA/micasad/lib/communication/IClientChannel.cs @@ -21,17 +21,20 @@ ***********************************************************************/ using System; +using System.Net; +using System.Net.Sockets; -/* This is an interface which would be implemented - * by UnixCommunication and WinCommunication. - */ +//using sscs.communication.win.NamedPipes; -namespace Novell.CASA.MiCasa.Communication.Server + +namespace Novell.CASA.MiCasa.Communication { - -public interface Communication -{ - void StartCommunicationEndPoint(); - void CloseCommunicationEndPoint(); -} -} + public interface ClientChannel + { + void Open(); + int Read(byte[] buf); + byte[] Read(); + int Write(byte[] buf); + void Close(); + } +} \ No newline at end of file diff --git a/CASA/micasad/lib/communication/server/CommunicationFactory.cs b/CASA/micasad/lib/communication/IPCClientFactory.cs similarity index 63% rename from CASA/micasad/lib/communication/server/CommunicationFactory.cs rename to CASA/micasad/lib/communication/IPCClientFactory.cs index 493d130f..3e487562 100644 --- a/CASA/micasad/lib/communication/server/CommunicationFactory.cs +++ b/CASA/micasad/lib/communication/IPCClientFactory.cs @@ -21,32 +21,30 @@ ***********************************************************************/ using System; -/* This class would have only static methods. - */ -namespace Novell.CASA.MiCasa.Communication.Server + +namespace Novell.CASA.MiCasa.Communication { + /// + /// Summary description for IPCClientFactory. + /// + public class IPCClientFactory + { + private IPCClientFactory() + { + } -public class CommunicationFactory -{ - /* Make the constructor private, to avoid instances of this - * class. - */ - private CommunicationFactory() - { + public static ClientChannel CreateClientConnection() + { - } - - /* This method must check for platform and return - * an appropriate class. As of now, it assumes platform as Linux. - */ - public static Communication CreateCommunicationEndPoint() - { #if LINUX - return( new UnixCommunication()); + return( new UnixIPCClientChannel()); #endif #if W32 - return (new WinCommunication()); + return (new WinIPCClientChannel()); #endif - } -} + } + + + } } + diff --git a/CASA/micasad/lib/communication/MiCasaRequestReply.cs b/CASA/micasad/lib/communication/MiCasaRequestReply.cs new file mode 100644 index 00000000..c15162ff --- /dev/null +++ b/CASA/micasad/lib/communication/MiCasaRequestReply.cs @@ -0,0 +1,191 @@ +/*********************************************************************** + * + * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, Novell, Inc. + * + * To contact Novell about this file by physical or electronic mail, + * you may find current contact information at www.novell.com. + * + ***********************************************************************/ + + +using System; +using System.Text; +using System.Runtime.Serialization.Formatters.Binary; +using System.IO; + +using Novell.CASA.MiCasa.Common; + +namespace Novell.CASA.MiCasa.Communication +{ + /// + /// Summary description for MiCasaRequestReply. + /// + public class MiCasaRequestReply + { + + //public const int VERB_GET_SECRET = 1; + //public const int VERB_SET_SECRET = 2; + //public const int VERB_GET_KEYCHAIN = 3; + //public const int VERB_GET_STORE = 4; + //public const int VERB_SET_KEYVALUE = 5; + //public const int VERB_GET_KEYVALUE = 6; + public const int VERB_SET_LINKED_KEY = 7; + public const int VERB_GET_LINKED_KEYS = 8; + public const int VERB_REMOVE_LINKED_KEY = 9; + public const int VERB_WRITE_KEY = 10; + public const int VERB_REMOVE_ALL_SECRETS = 11; + public const int VERB_LOCK_STORE = 12; + public const int VERB_UNLOCK_STORE = 13; + public const int VERB_GET_STORE_STATUS = 14; + public const int VERB_REMOVE_KEY = 15; + public const int VERB_READ_KEY = 16; + public const int VERB_GET_KEY_LIST = 17; + public const int VERB_RESET_MASTER_PASSWORD = 18; + public const int VERB_GET_SECRETIDS = 19; + public const int VERB_VALIDATE_DESKTOP_PWD = 20; + public const int VERB_EXPORT_SECRETS = 21; + public const int VERB_ADD_XML_SECRETS = 22; + public const int VERB_CHANGE_PERSIST_DIR = 23; + public const int VERB_CREATE_POLICY_DIR = 24; + public const int VERB_GET_CREATE_TIME = 25; + public const int VERB_GET_MODIFIED_TIME = 26; + + public const int VERB_DUMP_LINKED_KEYS = 96; + public const int VERB_CREATE_TEST_SECRETS = 97; + public const int VERB_REMOVE_TEST_SECRETS = 98; + public const int VERB_PING_MICASAD = 99; + + public MiCasaRequestReply() + { + // + // TODO: Add constructor logic here + // + } + + public static object Send(int verb) + { + return Send(verb, null, null, null, null); + } + + public static object Send(int verb, object wo) + { + return Send(verb, null, null, null, wo); + } + + public static object Send(int verb, + string sKeyChainID, + string sSecretID, + string sKeyID, + object theObject) + { + + // Lengths of message fields + int MSGID_LEN = 2; + int MSG_LEN = 4; + WrappedObject request; + WrappedObject reply = null; + + // open a client connection + //IInterProcessConnection clientConnection = null; + + ClientChannel ipcChannel = IPCClientFactory.CreateClientConnection(); + ipcChannel.Open(); + + + + try + { + // contruct and serialize the Message Object + request = new WrappedObject(verb, sKeyChainID, sSecretID, sKeyID, theObject); + + BinaryFormatter formatter = new BinaryFormatter(); + MemoryStream ms = new MemoryStream(); + formatter.Serialize(ms, request); + ms.Flush(); + ms.Position = 0; + + byte[] rawBytes = new byte[2+4+ms.Length]; + + byte[] t = new byte[10]; + + // set message id + int destIndex = 0; + ushort msgId = 20; + t = BitConverter.GetBytes((ushort)msgId); + Array.Copy(t,0,rawBytes,destIndex,MSGID_LEN); + destIndex += MSGID_LEN; + + // set the object length +//Poorna + int msgLen = 2+4+(int)ms.Length; +// int msgLen = (int)ms.Length; + t = BitConverter.GetBytes(msgLen); +// t = BitConverter.GetBytes(ms.Length); + Array.Copy(t,0,rawBytes,destIndex,MSG_LEN); + destIndex += MSG_LEN; + + // copy in the object + Array.Copy(ms.GetBuffer(), 0, rawBytes, destIndex, ms.Length); + + //clientConnection = new ClientPipeConnection("MyPipe", "."); + //clientConnection = new ClientPipeConnection(XTIER_RPC_PIPE, "."); + //clientConnection.Connect(); + + // write the bytes + //clientConnection.WriteBytes(rawBytes); + ipcChannel.Write(rawBytes); + + // read the bytes + //byte[] returnBuffer = clientConnection.ReadBytes(); + byte[] returnBuffer = ipcChannel.Read(); + + if (returnBuffer != null) + { + // deserialize MessageObject + uint iMsgLen = BitConverter.ToUInt32(returnBuffer,0); + ms = new MemoryStream(returnBuffer, 4, (int)iMsgLen); + ms.Position = 0; + reply = (WrappedObject)formatter.Deserialize(ms); + + if (reply.GetReturnCode() != 0) + { + ipcChannel.Close(); + throw new Exception(reply.GetReturnCode().ToString()); + } + + } + + // close the connection + //clientConnection.Close(); + ipcChannel.Close(); + + + } + catch (Exception) + { + //Console.WriteLine(e1.ToString()); + //clientConnection.Dispose(); + //throw new Exception(e1.ToString()); + } + + if (reply != null) + return reply.GetObject(); + else + return null; + } + } + } + diff --git a/CASA/micasad/lib/communication/SAS.Designer.cs b/CASA/micasad/lib/communication/SAS.Designer.cs deleted file mode 100644 index 3d178fbe..00000000 --- a/CASA/micasad/lib/communication/SAS.Designer.cs +++ /dev/null @@ -1,52 +0,0 @@ -namespace Novell.CASA.communication -{ - partial class SAS - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // SAS - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.ControlDark; - this.ClientSize = new System.Drawing.Size(292, 266); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SAS"; - this.Opacity = 0.8; - this.ShowInTaskbar = false; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - this.ResumeLayout(false); - - } - - #endregion - } -} \ No newline at end of file diff --git a/CASA/micasad/lib/communication/SAS.cs b/CASA/micasad/lib/communication/SAS.cs deleted file mode 100644 index 3561e1f6..00000000 --- a/CASA/micasad/lib/communication/SAS.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace Novell.CASA.communication -{ - public partial class SAS: Form - { - public SAS() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/CASA/micasad/lib/communication/UnixIPCClientChannel.cs b/CASA/micasad/lib/communication/UnixIPCClientChannel.cs new file mode 100644 index 00000000..156f6d08 --- /dev/null +++ b/CASA/micasad/lib/communication/UnixIPCClientChannel.cs @@ -0,0 +1,182 @@ +/*********************************************************************** + * + * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, Novell, Inc. + * + * To contact Novell about this file by physical or electronic mail, + * you may find current contact information at www.novell.com. + * + ***********************************************************************/ + +using System; +using System.Net; +using System.IO; +using System.Net.Sockets; +using Mono.Unix; +using System.Text; + +namespace Novell.CASA.MiCasa.Communication +{ + /// + /// Summary description for UnixIPCClientChannel. + /// + public class UnixIPCClientChannel : ClientChannel + { + + private Socket mSocket = null; + private string socketFileName = "/tmp/.novellCASA"; + private EndPoint sockEndPoint; + + public UnixIPCClientChannel() + { + } + + public void Open() + { + mSocket = new Socket(AddressFamily.Unix, + SocketType.Stream, + ProtocolType.IP); + + if (mSocket == null) + { + throw new Exception("could not get socket"); + } + + sockEndPoint = new UnixEndPoint(socketFileName); + UnixFileSystemInfo sockFileInfo = new UnixFileInfo(socketFileName); + UnixUserInfo sockFileOwner = sockFileInfo.OwnerUser; + + // root is the owner of the file "/tmp/.novellCASA" + if (sockFileOwner.UserId == 0) + { + mSocket.Connect(sockEndPoint); + } + else + { + throw new Exception("not a valid miCASA service"); + } + + } + + public int Read(byte[] buf) + { + buf = Read(); + + if (buf != null) + { + //Console.WriteLine("Bytes read = " + buf.Length); + return buf.Length; + } + else + return 0; + } + + public byte[] Read() + { + byte[] returnBuffer = null; + int bytesRecvd = 0; + + try + { + /* We need to read 'msgLen' to know how many bytes to + * allocate. + */ + + byte[] msgIdBytes = new byte[2]; + bytesRecvd = mSocket.Receive(msgIdBytes); + if (0 == bytesRecvd) + { + return null; + } + byte[] msgLenBytes = new byte[4]; + bytesRecvd = mSocket.Receive(msgLenBytes); + if (0 == bytesRecvd) + { + return null; + } + + uint msgLen = BitConverter.ToUInt32(msgLenBytes, 0); + if (msgLen > 6) + { + byte[] buf = null; + int bytesAvailable; + int totalBytes = 0; + int msgLencount = 0; + string bufstring = null; + + // buffer for data + MemoryStream ms = new MemoryStream(); + + while (totalBytes < (msgLen - 6)) + { + bytesAvailable = mSocket.Available; + if (0 == bytesAvailable) + { + break; + } + buf = new byte[bytesAvailable]; + bytesRecvd = mSocket.Receive(buf); + ms.Write(buf, 0, bytesRecvd); + + totalBytes = totalBytes + bytesAvailable; + } + if (totalBytes == 0) + return null; + + byte[] finalbuf = ms.ToArray(); + + int returnBufferLen = msgIdBytes.Length + msgLenBytes.Length + totalBytes; + returnBuffer = new byte[returnBufferLen]; + Array.Copy(msgIdBytes, returnBuffer, 2); + Array.Copy(msgLenBytes, 0, returnBuffer, 2, 4); + Array.Copy(finalbuf, 0, returnBuffer, 6, finalbuf.Length); + return returnBuffer; + } + else + { + returnBuffer = new byte[6]; + Array.Copy(msgIdBytes, returnBuffer, 2); + Array.Copy(msgLenBytes, 0, returnBuffer, 2, 4); + return returnBuffer; + } + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + return null; + } + } + + public int Write(byte[] buf) + { + try + { + mSocket.Send(buf); + //Console.WriteLine("Bytes written = " + buf.Length); + return buf.Length; + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + return 0; + } + } + + public void Close() + { + mSocket.Close(); + } + } +} diff --git a/CASA/micasad/lib/communication/WinIPCClientChannel.cs b/CASA/micasad/lib/communication/WinIPCClientChannel.cs new file mode 100644 index 00000000..ebe27f82 --- /dev/null +++ b/CASA/micasad/lib/communication/WinIPCClientChannel.cs @@ -0,0 +1,103 @@ +/*********************************************************************** + * + * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, Novell, Inc. + * + * To contact Novell about this file by physical or electronic mail, + * you may find current contact information at www.novell.com. + * + ***********************************************************************/ + + +using System; + +using AppModule.InterProcessComm; +using AppModule.NamedPipes; + +namespace Novell.CASA.MiCasa.Communication +{ + /// + /// Summary description for WinIPCClientChannel. + /// + public class WinIPCClientChannel : ClientChannel + { + + private static IInterProcessConnection clientConnection = null; + private static string XTIER_RPC_PIPE = "SS_RPC_PIPE"; + + public WinIPCClientChannel() + { + + } + + public void Open() + { + if (clientConnection == null) + { + clientConnection = new ClientPipeConnection(XTIER_RPC_PIPE, "."); + clientConnection.Connect(); + } + + } + + public int Read(byte[] buf) + { + buf = Read(); + + if (buf != null) + return 0; + else + return -1; + } + + public byte[] Read() + { + byte[] returnBuffer; + + try + { + returnBuffer = clientConnection.ReadBytes(); + return returnBuffer; + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + return null; + } + } + + public int Write(byte[] buf) + { + try + { + clientConnection.WriteBytes(buf); + return 0; + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + return -1; + } + } + + public void Close() + { + + //clientConnection.Close(); + //clientConnection.Dispose(); + } + + } +} diff --git a/CASA/micasad/lib/communication/iss/MethodCall.cs b/CASA/micasad/lib/communication/iss/MethodCall.cs deleted file mode 100644 index 28c66339..00000000 --- a/CASA/micasad/lib/communication/iss/MethodCall.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections; -using System.Text; - -using System.Xml; - -namespace Novell.CASA -{ - class MethodCall - { - internal static string GetCard = "getCard"; - internal static string GetSecurityToken = "getSecurityToken"; - - //private string m_methodname; - private Hashtable m_htParams = new Hashtable(); - private ArrayList m_alReqClaims = new ArrayList(); - private ArrayList m_alOptClaims = new ArrayList(); - - private XmlDocument m_doc = new XmlDocument(); - private XmlNode m_methodCall; - private XmlNode m_methodName; - private XmlNode m_params; - private XmlNode m_param; - private XmlNode m_struct; - - - public MethodCall(string sMethodName) - { - //m_methodname = sMethodName; - //m_methodCall = m_doc.CreateNode(XmlNodeType.Element, "methodCall", ""); - m_methodCall = m_doc.CreateElement("methodCall"); - - m_methodName = m_doc.CreateElement("methodName"); - m_methodName.InnerText = sMethodName; - - m_params = m_doc.CreateElement("params"); - m_param = m_doc.CreateElement("param"); - m_struct = m_doc.CreateElement("struct"); - - m_param.AppendChild(m_struct); - m_params.AppendChild(m_param); - - m_methodCall.AppendChild(m_methodName); - m_methodCall.AppendChild(m_params); - - m_doc.AppendChild(m_methodCall); - - } - - - public void AddMember(string sName, string sValue) - { - XmlNode nodeMember = m_doc.CreateElement("member"); - - XmlNode nodeName = m_doc.CreateNode(XmlNodeType.Element, "name", null); - nodeName.InnerText = sName; - - XmlNode nodeValue = m_doc.CreateNode(XmlNodeType.Element, "value", null); - nodeValue.InnerText = sValue; - - nodeMember.AppendChild(nodeName); - nodeMember.AppendChild(nodeValue); - - m_struct.AppendChild(nodeMember); - } - - - public void AddRequiredClaim(string sClaim) - { - m_alReqClaims.Add(sClaim); - } - - public void AddOptionalClaim(string sOptClaim) - { - m_alOptClaims.Add(sOptClaim); - } - - internal string GetXmlRpc() - { - - // add claims to doc - if (m_alReqClaims.Count > 0) - { - AppendClaims("requiredclaims", m_alReqClaims); - } - - if (m_alOptClaims.Count > 0) - { - AppendClaims("optionalclaims", m_alOptClaims); - } - - return m_doc.InnerXml; -// return null; - - } - - private void AppendClaims(string sClaimType, ArrayList al) - { - - XmlNode member = m_doc.CreateNode(XmlNodeType.Element, "member", null); - XmlNode name = m_doc.CreateNode(XmlNodeType.Element, "name", null); - name.InnerText = sClaimType; - - XmlNode array = m_doc.CreateElement("array"); - XmlNode data = m_doc.CreateElement("data"); - array.AppendChild(data); - - foreach (string sClaim in al) - { - XmlNode valueNode = m_doc.CreateNode(XmlNodeType.Element, "value", null); - valueNode.InnerText = sClaim; - data.AppendChild(valueNode); - } - - member.AppendChild(name); - member.AppendChild(array); - - m_struct.AppendChild(member); - - } - - - - } -} diff --git a/CASA/micasad/lib/communication/server/AppHandler.cs b/CASA/micasad/lib/communication/server/AppHandler.cs deleted file mode 100644 index 3f70cf07..00000000 --- a/CASA/micasad/lib/communication/server/AppHandler.cs +++ /dev/null @@ -1,125 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - - -using System; -using System.Collections; -using System.Text; -using Novell.CASA.MiCasa.Communication.Server; - -class AppHandler -{ - //Data - private IPCChannel clientChannel; - - //Methods - internal AppHandler(IPCChannel ipcChannel) - { - clientChannel = ipcChannel; - //CSSSLogger.ExecutionTrace(this); - } - - ~AppHandler() - { - //CSSSLogger.ExecutionTrace(this); - } - - /* Starts servicing the application. This is called as soon - * as a new client connection is established. - */ - internal int ServiceApp(RequestParser reqParser) - { - SSVerb verb = null; - //CSSSLogger.ExecutionTrace(this); - - while(true) - { - byte[] buf = null; - - try - { - buf = clientChannel.Read(); - if( null == buf ) - { - return RetCodes.SUCCESS; - } - //RequestParser reqParser = new RequestParser(); - verb = reqParser.ParseRequest(buf); - //CSSSLogger.logbreak(); - //CSSSLogger.DbgLog("SSCS going to sevice a :: ** " + verb.GetVerbName() + " **"); - - - buf = verb.ProcessRequest(); - if ( buf != null) - { - int retVal = clientChannel.Write(buf); - if(retVal < 0) - { -// CSSSLogger.DbgLog("Write failed"); - return RetCodes.FAILURE; - } - } - else - { - //There must always be something written back to client. - return RetCodes.FAILURE; - } - } -// catch(CommunicationException e) -// { -// CSSSLogger.ExpLog(e.ToString()); -// throw e; -// } - catch(FormatException e) - { -// CSSSLogger.ExpLog(e.ToString()); - throw e; - } - catch(Exception e) - { - // CSSSLogger.ExpLog(e.ToString()); - throw e; - } - - /* TBD define verb specific heirarchy of exceptions catch - * (Some processing problem) - */ - - finally - { -// CSSSLogger.DbgLog("SSCS finished processing a SS Verb :: ** " + verb.GetVerbName() + " **"); -// CSSSLogger.logbreak(); - } - } - } - - internal class RetCodes - { - internal static int SUCCESS = 0; - internal static int FAILURE = -1; - internal static int LOAD_HIDDEN_ONLY = 1; - internal static int LOAD_ALL_EXCEPT_HIDDEN = 2; - internal static int WRITE_HIDDEN_ONLY = 3; - internal static int WRITE_ALL_EXCEPT_HIDDEN = 4; - internal static int WRITE_ALL = 5; - } -} diff --git a/CASA/micasad/lib/communication/server/IPCChannel.cs b/CASA/micasad/lib/communication/server/IPCChannel.cs deleted file mode 100644 index 0fd9d275..00000000 --- a/CASA/micasad/lib/communication/server/IPCChannel.cs +++ /dev/null @@ -1,62 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Net; -using System.Net.Sockets; -#if W32 -using AppModule.NamedPipes; -#endif - -namespace Novell.CASA.MiCasa.Communication.Server -{ - -abstract class IPCChannel -{ - /* This must check for the platform and return an - * appropriate IPCChannel. - */ -#if LINUX - internal static IPCChannel Create(Socket socket) - { - int platform = (int)Environment.OSVersion.Platform; - if(( platform ==4 ) || ( platform == 128 )) - return (new UnixIPCChannel(socket) ) ; - else - return null; - } - -#endif - -#if W32 - internal static IPCChannel Create(ServerPipeConnection serverPipe) - { - return (new WinIPCChannel(serverPipe)); - } -#endif - abstract internal int Read(byte[] buf); - abstract internal byte[] Read(); - abstract internal int Write(byte[] buf); - abstract internal void Close(); - -} -} diff --git a/CASA/micasad/lib/communication/server/ISSVerb.cs b/CASA/micasad/lib/communication/server/ISSVerb.cs deleted file mode 100644 index 85d9189e..00000000 --- a/CASA/micasad/lib/communication/server/ISSVerb.cs +++ /dev/null @@ -1,55 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Collections; -using System.Text; -using System.Threading; - - - -namespace Novell.CASA.MiCasa.Communication.Server - { - - /* - * Defines the interfaces to be implemenetd by all Secret Store Verbs. - */ - public interface SSVerb - { - /* Takes in the raw bytes and sets them for a Verb, - * so that the verb will execute in the bytes given. - * TBD: In case we are able to send the byte[] through constructor, - * we can avoid this interface. - */ - - void SetMessageContent(byte[] rawbytes); - - /* Takes in the SecretStore Reeference and returns the correct SSVerb - */ - byte[] ProcessRequest(); - - //Gives the name of operation performed.Can be used in case of error. - string GetVerbName(); - } - - } - diff --git a/CASA/micasad/lib/communication/server/RequestParser.cs b/CASA/micasad/lib/communication/server/RequestParser.cs deleted file mode 100644 index 9d931d1c..00000000 --- a/CASA/micasad/lib/communication/server/RequestParser.cs +++ /dev/null @@ -1,88 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Collections; -using System.Text; -using System.Threading; - - -/* - * After the bytes format is finalized for Windows this class might need to - * be modified.. - * Depending upon impact either a new method can be invoked after platfrom - * check or a Factory pattern can be used to redesign this class. - */ - - -namespace Novell.CASA.MiCasa.Communication.Server -{ - /* This class will be used to convert raw bytes to one of the SecretStore - * Verbs. Although there is no need to have many instances, - * this class will NOT be singleton class since we - * do not want a hit on performance (synchronization, obtaining locks, - * releasing locks...etc ) - * Making it singleton is not giving us any advantage versus performance. - */ - internal class RequestParser - { - Hashtable msgIdMap = new Hashtable(); - - internal RequestParser() - { - msgIdMap.Add(0,"casa.verbs.SelectCard"); - msgIdMap.Add(1, "casa.verbs.SelectCard"); - } - - /* Processes the request and returns the corrrect SSverb. - * This interface works on the class member rawbytes and - * returns the result. - */ - internal SSVerb ParseRequest(byte[] rawbytes) - { - if (rawbytes == null) - throw new FormatException("Message format incorrect"); - - String className = GetClassName(rawbytes); - - SSVerb theVerb = (SSVerb)Activator.CreateInstance(null, className ).Unwrap(); - theVerb.SetMessageContent(rawbytes); - - /* - * TBD: We can send the activation params in the same call. - */ - //SSVerb theVerb = (SSVerb)Activator.CreateInstance(Type.GetType(className)).Unwrap(); - - return theVerb; - } - - private string GetClassName(byte[] ipcbytes) - { - /* - * Read first two bytes and get ushort - * Look up table and send class name - */ - ushort msgId = BitConverter.ToUInt16(ipcbytes,0); - return ((String)(msgIdMap[(int)msgId])); - } - } -} diff --git a/CASA/micasad/lib/communication/server/WinCommunication.cs b/CASA/micasad/lib/communication/server/WinCommunication.cs deleted file mode 100644 index 79aab51e..00000000 --- a/CASA/micasad/lib/communication/server/WinCommunication.cs +++ /dev/null @@ -1,60 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * z - ***********************************************************************/ - -using System; - -using AppModule.InterProcessComm; -using AppModule.NamedPipes; -using Novell.CASA.MiCasa.Communication.win; - - -namespace Novell.CASA.MiCasa.Communication.Server -{ - /// - /// Summary description for WinCommunication. - /// - public class WinCommunication : Server.Communication - { - - public static IChannelManager PipeManager; - - public WinCommunication() - { - PipeManager = new PipeManager(); - PipeManager.Initialize(); - } - - public void StartCommunicationEndPoint() - { - Console.WriteLine("StartCommunctionEndPointed called"); - //PipeManager = new PipeManager(); - //PipeManager.Initialize(); - //PipeManager.Start(); - PipeManager.Start(); - } - - public void CloseCommunicationEndPoint() - { - PipeManager.Stop(); - } - } -} diff --git a/CASA/micasad/lib/communication/server/WinIPCChannel.cs b/CASA/micasad/lib/communication/server/WinIPCChannel.cs deleted file mode 100644 index dcf69760..00000000 --- a/CASA/micasad/lib/communication/server/WinIPCChannel.cs +++ /dev/null @@ -1,102 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - - -using System; -using System.IO; -using System.Text; - -using AppModule.NamedPipes; -using Novell.CASA.MiCasa.Communication.win; - -namespace Novell.CASA.MiCasa.Communication.Server -{ - - class WinIPCChannel : IPCChannel - { - // Data - private ServerPipeConnection m_serverPipeConnection; - - //Methods - public WinIPCChannel(ServerPipeConnection serverPipeConnection) - { - m_serverPipeConnection = serverPipeConnection; - } - - private WinIPCChannel() - { - //CSSSLogger.DbgLog("WinIPCChannel constructor must be called with a serverPipe"); - - } - ~WinIPCChannel() - { - // Console.WriteLine("WinIPCChannel::~~WinIPCChannel"); - } - - override internal byte[] Read() - { - - - byte[] incoming = null; - try - { - incoming = m_serverPipeConnection.ReadBytes(); - return incoming; - } - catch(Exception) - { - return null; - //CSSSLogger.DbgLog("Exception in reading data from client" + e.ToString()); - //throw new CommunicationException(e.ToString()); - } - } - - override internal int Read(byte[] buf) - { - return 0; - } - - override internal int Write(byte[] buf) - { - - int bytesSent = 0; - try - { - m_serverPipeConnection.WriteBytes(buf); - bytesSent = buf.Length; - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - //CSSSLogger.DbgLog("WinIPCChannel::Write - Bytes sent is {0}" +bytesSent); - return bytesSent; - - } - override internal void Close() - { - //CSSSLogger.DbgLog("WinIPCChannel Closed"); - //clientSocket.Close(); - m_serverPipeConnection.Close(); - } - } -} diff --git a/CASA/micasad/lib/communication/verbs/CMWebClient.cs b/CASA/micasad/lib/communication/verbs/CMWebClient.cs deleted file mode 100644 index 3ba1560f..00000000 --- a/CASA/micasad/lib/communication/verbs/CMWebClient.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Specialized; -using System.Text; -using System.Net; -using System.IO; - -using Novell.CASA.GUI; - -namespace Novell.CASA.communication -{ - class CMWebClient - { - private WebClient m_wc = new WebClient(); - private Config m_config; - - public CMWebClient(Config config) - { - m_config = config; - } - - public byte[] GetData() - { - return GetData(null); - } - - public byte[] GetData(byte[] baDataToSend) - { - - try - { - string sISSAddr = m_config.GetConfigSetting("ISS_Address", "http://localhost:2020"); - byte[] responseData; - - if (baDataToSend != null) - { - responseData = m_wc.UploadData(sISSAddr, "POST", baDataToSend); - } - else - { - responseData = m_wc.DownloadData(sISSAddr); - } - - //NameValueCollection form = new NameValueCollection(); - //form.Add("MyName", "MyValue"); - //byte[] responseData = m_wc.UploadValues("http://buydotcom:8080/auction/innerweb.jsp", form); - return responseData; - } - catch (Exception e) - { - e.ToString(); - - } - - return null; - - //byte[] new data = m_wc.UploadData("http://www.novell.com", "POST", responseData); - - /* - - Stream s = m_wc.OpenRead("http://buydotcom:8080/auction/innerweb.jsp"); - StreamReader sr = new StreamReader(s); - string line = sr.ReadLine(); - while (line != null) - { - Console.WriteLine(line); - line = sr.ReadLine(); - } - */ - - - } - } -} diff --git a/CASA/micasad/lib/communication/verbs/SelectCard.cs b/CASA/micasad/lib/communication/verbs/SelectCard.cs deleted file mode 100644 index 1df2449c..00000000 --- a/CASA/micasad/lib/communication/verbs/SelectCard.cs +++ /dev/null @@ -1,262 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Collections; -using System.Text; -using System.Threading; - -using Novell.CASA.MiCasa.Communication.Server; -using Novell.CASA.GUI; - -namespace casa.verbs -{ - - /* - * This class is implementation of OpenSecretStore call. - * There will be one instance existing for every call made by the client. - */ - - internal class SelectCard : SSVerb - { - ushort msgId = 0; - uint inMsgLen = 0; - uint outMsgLen = 0; - uint ssVersion = 0; - uint ssNameLen = 0; - private string ssName; //Name of SecretStore to open - private byte[] inBuf; - - private byte[] outBuf; - int retCode = 0; - - private static int MAX_SS_NAME_LEN = 256; - - /* - * This method sets the class member with the byte array received. - */ - - public void SetMessageContent(byte[] ipcBytes) - { - inBuf = ipcBytes; - } - - /* - * This method does the actual implementation of OpenSecretStore - * - */ - - public byte[] ProcessRequest() - { - /* If an exception occurs in message format decoding, - * it is handled by AppHandler - */ - string sCardSelected = null; - byte[] baToken = null; - - - //parse incoming data - uint iLenIssuerUri = 0; - uint iLenRecipientUrl = 0; - uint iLenRequiredClaims = 0; - uint iLenOptionalClaims = 0; - uint iLenTokenType = 0; - uint iLenPolicy = 0; - - // get issuer - string sIssueUri = null; - iLenIssuerUri = BitConverter.ToUInt32(inBuf, 6); - if (iLenIssuerUri > 0) - { - byte[] baIssuerUri = new Byte[iLenIssuerUri]; - Array.Copy(inBuf, 10, baIssuerUri, 0, iLenIssuerUri); - sIssueUri = Encoding.Unicode.GetString(baIssuerUri); - } - - string sRecipientUrl = null; - iLenRecipientUrl = BitConverter.ToUInt32(inBuf, 6 + (4 + (int)iLenIssuerUri)); - if (iLenRecipientUrl > 0) - { - byte[] baRecipentUrl = new byte[iLenRecipientUrl]; - Array.Copy(inBuf, 10 + (4 + iLenIssuerUri), baRecipentUrl, 0, iLenRecipientUrl); - sRecipientUrl = Encoding.Unicode.GetString(baRecipentUrl); - } - - - // get requested claims - string sClaims = null; - iLenRequiredClaims = BitConverter.ToUInt32(inBuf, 6 + (4 + (int)iLenIssuerUri) + (4 + (int)iLenRecipientUrl)); - if (iLenRequiredClaims > 0) - { - byte[] baRequiredClaims = new byte[iLenRequiredClaims]; - Array.Copy(inBuf, 10 + (4 + iLenIssuerUri) + (4 + iLenRecipientUrl), baRequiredClaims, 0, iLenRequiredClaims); - sClaims = Encoding.Unicode.GetString(baRequiredClaims); - } - - // get optional claims - string sOptClaims = null; - iLenOptionalClaims = BitConverter.ToUInt32(inBuf, - 6 + - (4 + (int)iLenIssuerUri) + - (4 + (int)iLenRecipientUrl) + - (4 + (int)iLenRequiredClaims)); - - if (iLenOptionalClaims > 0) - { - byte[] baOptClaims = new byte[iLenOptionalClaims]; - Array.Copy(inBuf, 10 + (4 + iLenIssuerUri) + (4 + iLenRecipientUrl) + (4 + iLenRequiredClaims), baOptClaims, 0, iLenOptionalClaims); - sOptClaims = Encoding.Unicode.GetString(baOptClaims); - } - - string sTokenType = null; - iLenTokenType = BitConverter.ToUInt32(inBuf, - 6 + - (4 + (int)iLenIssuerUri) + - (4 + (int)iLenRecipientUrl) + - (4 + (int)iLenRequiredClaims) + - (4 + (int)iLenOptionalClaims)); - - if (iLenTokenType > 0) - { - byte[] baTokenType = new byte[iLenTokenType]; - Array.Copy(inBuf, - 10 + (4 + iLenIssuerUri) + (4 + iLenRecipientUrl) + (4 + iLenRequiredClaims) + (4 + iLenOptionalClaims), - baTokenType, - 0, - iLenTokenType); - sTokenType = Encoding.Unicode.GetString(baTokenType); - - } - - - string sPolicy = null; - iLenPolicy = BitConverter.ToUInt32(inBuf, - 6 + - (4 + (int)iLenIssuerUri) + - (4 + (int)iLenRecipientUrl) + - (4 + (int)iLenRequiredClaims) + - (4 + (int)iLenOptionalClaims) + - (4 + (int)iLenTokenType)); - - if (iLenPolicy > 0) - { - byte[] baPolicy = new byte[iLenPolicy]; - Array.Copy(inBuf, - 10 + (4 + iLenIssuerUri) + (4 + iLenRecipientUrl) + (4 + iLenRequiredClaims) + (4 + iLenOptionalClaims) + (4 + iLenTokenType), - baPolicy, - 0, - iLenPolicy); - sPolicy = Encoding.Unicode.GetString(baPolicy); - } - - if (true) - { - // display Card Selector - CardSelector cs = new CardSelector(); - //sCardSelected = cs.DisplaySelector(); - baToken = cs.GetToken(); - - retCode = 0; - } - else - { - - msgId = BitConverter.ToUInt16(inBuf, 0); - inMsgLen = BitConverter.ToUInt32(inBuf, 2); - - if (inMsgLen != inBuf.Length) - throw new FormatException(" MsgLen sent does not match the length of the message received."); - - ssVersion = BitConverter.ToUInt32(inBuf, 6); - ssNameLen = BitConverter.ToUInt32(inBuf, 10); - - if (ssNameLen > MAX_SS_NAME_LEN) - throw new FormatException(" SecretStore Name length exceeds length allowed"); - - byte[] tempArr = new byte[ssNameLen]; - Array.Copy(inBuf, 14, tempArr, 0, ssNameLen); - ssName = Encoding.UTF8.GetString(tempArr); - - } - - try - { - msgId = 0; - outMsgLen = 14; - if (baToken.Length > 0) - { - outBuf = new byte[14 + baToken.Length]; - outMsgLen = 14 + (uint)baToken.Length; - } - else - { - outBuf = new byte[14]; - } - - byte[] t = new byte[10]; - - t = BitConverter.GetBytes((ushort)msgId); - Array.Copy(t,0,outBuf,0,2); - - t = BitConverter.GetBytes((uint)outMsgLen); - Array.Copy(t,0,outBuf,2,4); - - t = BitConverter.GetBytes((uint)ssVersion); - Array.Copy(t,0,outBuf,6,4); - - t = BitConverter.GetBytes(retCode); - Array.Copy(t,0,outBuf,10,4); - - // copy card selected if there is one - //if (sCardSelected != null) - //{ - // byte[] baCard = Encoding.ASCII.GetBytes(sCardSelected); - // Array.Copy(baCard, 0, outBuf, 14, baCard.Length); - //} - if (baToken.Length > 0) - { - Array.Copy(baToken, 0, outBuf, 14, baToken.Length); - } - - - - - } - catch(Exception e) - { - - throw new FormatException("Unable to form the response " + e.ToString()); - } - return outBuf; - } - - - /* - * Gives the name of operation performed. Will be used in case - * of error. - */ - public string GetVerbName() - { - return this.ToString(); - } - } -} diff --git a/CASA/micasad/lib/communication/win/PipeManager.cs b/CASA/micasad/lib/communication/win/PipeManager.cs deleted file mode 100644 index 5e2e65e8..00000000 --- a/CASA/micasad/lib/communication/win/PipeManager.cs +++ /dev/null @@ -1,174 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Collections; -using System.Threading; -using System.Web; -using System.IO; -using System.Configuration; -using System.Diagnostics; - -using AppModule.InterProcessComm; -using AppModule.NamedPipes; - -using Novell.CASA.MiCasa.Communication.Server; - -namespace Novell.CASA.MiCasa.Communication.win -{ - - public class PipeManager : IChannelManager { - - public Hashtable Pipes; - - private uint NumberPipes = 16; - private uint OutBuffer = 65536; //512; - private uint InBuffer = 65536; //512; - private const int MAX_READ_BYTES = 15000; - private bool _listen = true; - public bool Listen { - get { - return _listen; - } - set { - _listen=value; - } - } - private int numChannels = 0; - private Hashtable _pipes = new Hashtable(); - - //private Thread MainThread; - private string CASA_RPC_PIPE = "\\\\.\\PIPE\\CASA_MANAGER"; - private ManualResetEvent Mre; - private const int PIPE_MAX_STUFFED_TIME = 5000; - - public object SyncRoot = new object(); - - public void Initialize() { - Pipes = Hashtable.Synchronized(_pipes); - Mre = new ManualResetEvent(false); - /* - MainThread = new Thread(new ThreadStart(Start)); - MainThread.IsBackground = true; - MainThread.Name = "Main Pipe Thread"; - MainThread.Start(); - */ - Thread.Sleep(1000); - } - public string HandleRequest(string request) { - string returnVal; - - //Form1.ActivityRef.AppendText(request + Environment.NewLine); - returnVal = "Response to: " + request; - - return returnVal; - } - - public void Start() { - try { - while (_listen) { - int[] keys = new int[Pipes.Keys.Count]; - Pipes.Keys.CopyTo(keys,0); - foreach (int key in keys) { - ServerNamedPipe serverPipe = (ServerNamedPipe)Pipes[key]; - if (serverPipe != null && DateTime.Now.Subtract(serverPipe.LastAction).Milliseconds > PIPE_MAX_STUFFED_TIME && serverPipe.PipeConnection.GetState() != InterProcessConnectionState.WaitingForClient) { - serverPipe.Listen = false; - serverPipe.PipeThread.Abort(); - RemoveServerChannel(serverPipe.PipeConnection.NativeHandle); - } - } - if (numChannels <= NumberPipes) { - ServerNamedPipe pipe = new ServerNamedPipe(CASA_RPC_PIPE, OutBuffer, InBuffer, MAX_READ_BYTES); - - // register all verbs with this pipe - - - try { - pipe.Connect(); - pipe.LastAction = DateTime.Now; - System.Threading.Interlocked.Increment(ref numChannels); - pipe.Start(); - Pipes.Add(pipe.PipeConnection.NativeHandle, pipe); - } - catch (InterProcessIOException) { - RemoveServerChannel(pipe.PipeConnection.NativeHandle); - pipe.Dispose(); - } - } - else { - Mre.Reset(); - Mre.WaitOne(1000, false); - } - } - } - catch (Exception e) - { - Console.WriteLine("Exception starting server: "+e.ToString()); - // Log exception - } - } - public void Stop() { - _listen = false; - Mre.Set(); - try { - int[] keys = new int[Pipes.Keys.Count]; - Pipes.Keys.CopyTo(keys,0); - foreach (int key in keys) { - ((ServerNamedPipe)Pipes[key]).Listen = false; - } - int i = numChannels * 3; - for (int j = 0; j < i; j++) { - StopServerPipe(); - } - Pipes.Clear(); - Mre.Close(); - Mre = null; - } - catch { - // Log exception - } - } - - public void WakeUp() { - if (Mre != null) { - Mre.Set(); - } - } - private void StopServerPipe() { - try { - ClientPipeConnection pipe = new ClientPipeConnection(CASA_RPC_PIPE); - if (pipe.TryConnect()) { - pipe.Close(); - } - } catch { - // Log exception - } - } - - public void RemoveServerChannel(object param) { - int handle = (int)param; - System.Threading.Interlocked.Decrement(ref numChannels); - Pipes.Remove(handle); - this.WakeUp(); - } - } -} \ No newline at end of file diff --git a/CASA/micasad/lib/communication/win/ServerNamedPipe.cs b/CASA/micasad/lib/communication/win/ServerNamedPipe.cs deleted file mode 100644 index 1b91169b..00000000 --- a/CASA/micasad/lib/communication/win/ServerNamedPipe.cs +++ /dev/null @@ -1,132 +0,0 @@ -/*********************************************************************** - * - * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 - * of the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, Novell, Inc. - * - * To contact Novell about this file by physical or electronic mail, - * you may find current contact information at www.novell.com. - * - ***********************************************************************/ - -using System; -using System.Threading; -using System.IO; - -using AppModule.InterProcessComm; -using AppModule.NamedPipes; - -using Novell.CASA.MiCasa.Communication.Server; - - -namespace Novell.CASA.MiCasa.Communication.win -{ - - public sealed class ServerNamedPipe : IDisposable { - internal Thread PipeThread; - internal ServerPipeConnection PipeConnection; - internal bool Listen = true; - internal DateTime LastAction; - private bool disposed = false; - - private void PipeListener() { - CheckIfDisposed(); - try { - Listen = true; - while (Listen) { - LastAction = DateTime.Now; - - // Service Client (new code) - IPCChannel ipcChannel = IPCChannel.Create(PipeConnection); - AppHandler appHandler = new AppHandler(ipcChannel); - - try - { - int retVal = appHandler.ServiceApp(new RequestParser()); - } - catch(Exception) - { - ipcChannel.Close(); - } - - LastAction = DateTime.Now; - PipeConnection.Disconnect(); - if (Listen) { - Connect(); - } - WinCommunication.PipeManager.WakeUp(); - } - } - catch (System.Threading.ThreadAbortException) { } - catch (System.Threading.ThreadStateException) { } - catch (Exception) { - // Log exception - - } - finally { - this.Close(); - } - } - internal void Connect() { - CheckIfDisposed(); - PipeConnection.Connect(); - } - internal void Close() { - CheckIfDisposed(); - this.Listen = false; - WinCommunication.PipeManager.RemoveServerChannel(this.PipeConnection.NativeHandle); - this.Dispose(); - } - internal void Start() { - CheckIfDisposed(); - PipeThread.Start(); - } - private void CheckIfDisposed() { - if(this.disposed) { - throw new ObjectDisposedException("ServerNamedPipe"); - } - } - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - private void Dispose(bool disposing) { - if(!this.disposed) { - PipeConnection.Dispose(); - if (PipeThread != null) { - try { - PipeThread.Abort(); - } - catch (System.Threading.ThreadAbortException) { } - catch (System.Threading.ThreadStateException) { } - catch (Exception) { - // Log exception - } - } - } - disposed = true; - } - ~ServerNamedPipe() { - Dispose(false); - } - - internal ServerNamedPipe(string name, uint outBuffer, uint inBuffer, int maxReadBytes) { - PipeConnection = new ServerPipeConnection(name, outBuffer, inBuffer, maxReadBytes, false); - PipeThread = new Thread(new ThreadStart(PipeListener)); - PipeThread.IsBackground = true; - PipeThread.Name = "Pipe Thread " + this.PipeConnection.NativeHandle.ToString(); - LastAction = DateTime.Now; - } - } -} \ No newline at end of file