/*********************************************************************** * * 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 sscs.communication.win; using sscs.common; using sscs.verbs; using sscs.constants; namespace sscs.communication { class WinIPCChannel : IPCChannel { // Data private ServerPipeConnection m_serverPipeConnection; private WinUserIdentifier userId = null; //Methods public WinIPCChannel(ServerPipeConnection serverPipeConnection) { m_serverPipeConnection = serverPipeConnection; } override internal UserIdentifier GetIPCChannelUserId() { CSSSLogger.DbgLog("In WinIPCChannel::GetIPCChannelUserId"); return userId; } private WinIPCChannel() { CSSSLogger.DbgLog("WinIPCChannel constructor must be called with a serverPipe"); } ~WinIPCChannel() { // Console.WriteLine("WinIPCChannel::~~WinIPCChannel"); } override internal byte[] Read() { int localUserIDLow = 0; int localUserIDHigh = 0; string sSIDString = ""; byte[] incoming = null; try { incoming = m_serverPipeConnection.ReadBytes(); // get local Userid and SID m_serverPipeConnection.GetLocalUserID(ref localUserIDLow, ref localUserIDHigh, ref sSIDString); if (localUserIDLow != 0 || localUserIDHigh !=0) { userId = new WinUserIdentifier(localUserIDLow, localUserIDHigh, sSIDString); } return incoming; } catch(Exception e) { 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) { } CSSSLogger.DbgLog("WinIPCChannel::Write - Bytes sent is {0}" +bytesSent); return bytesSent; } override internal void Close() { CSSSLogger.DbgLog("WinIPCChannel Closed"); //clientSocket.Close(); m_serverPipeConnection.Close(); } } }