CASA/c_micasad/communication/WinIPCChannel.cs
2006-02-01 17:48:29 +00:00

127 lines
3.1 KiB
C#

/***********************************************************************
*
* 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();
}
}
}