2006-01-19 00:34:21 +01:00
|
|
|
/***********************************************************************
|
|
|
|
*
|
2006-01-31 23:01:47 +01:00
|
|
|
* Copyright (C) 2005-2006 Novell, Inc. Inc. All Rights Reserved.
|
2006-01-19 00:34:21 +01:00
|
|
|
*
|
|
|
|
* 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
|
2006-01-31 23:01:47 +01:00
|
|
|
* Library Lesser General Public License for more details.
|
2006-01-19 00:34:21 +01:00
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
2006-01-31 23:01:47 +01:00
|
|
|
* License along with this library; if not, Novell, Inc.
|
2006-01-19 00:34:21 +01:00
|
|
|
*
|
|
|
|
* To contact Novell about this file by physical or electronic mail,
|
|
|
|
* you may find current contact information at www.novell.com.
|
|
|
|
*
|
|
|
|
***********************************************************************/
|
|
|
|
|
2006-01-31 23:01:47 +01:00
|
|
|
|
2005-10-11 21:51:00 +02:00
|
|
|
using System;
|
|
|
|
using System.IO;
|
|
|
|
using System.Text;
|
|
|
|
|
2006-01-18 00:07:05 +01:00
|
|
|
using AppModule.NamedPipes;
|
|
|
|
using sscs.communication.win;
|
2005-10-11 21:51:00 +02:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|