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