126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
/***********************************************************************
|
|
*
|
|
* Copyright (C) 2005-2006 Novell, Inc. 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 sscs.communication;
|
|
using sscs.common;
|
|
using sscs.verbs;
|
|
using sscs.constants;
|
|
|
|
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()
|
|
{
|
|
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() + " **");
|
|
|
|
UserIdentifier userId = clientChannel.GetIPCChannelUserId();
|
|
|
|
if(null == userId)
|
|
{
|
|
CSSSLogger.log(ConstStrings.DEBUG, "In " + CSSSLogger.GetExecutionPath(this) + " a null user is obtained.");
|
|
return RetCodes.FAILURE;
|
|
|
|
}
|
|
|
|
buf = verb.ProcessRequest(userId);
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|