/***********************************************************************
 * 
 *  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.Collections.Specialized;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace Novell.CASA
{
	/// <summary>
	/// Summary description for RemoteClient.
	/// </summary>
	public class RemoteClient
	{

		private SecretStore obj; 
		TcpChannel chan = null;

		public RemoteClient()
		{
		}


		public void openSocket(string serverAddr, string sPort)
		{
			// Create a channel for communicating w/ the remote object
			// Notice no port is specified on the client
			chan = new TcpChannel();


			try 
			{
				ChannelServices.RegisterChannel(chan);
			}
			catch (Exception)
			{
				
			}
			// Create an instance of the remote object
			obj = (SecretStore) Activator.GetObject(
				typeof(Novell.CASA.SecretStore),
				"tcp://"+serverAddr + ":" + sPort + "/enumerateSecretIDs" );
		}

		public void closeSocket()
		{
			if (chan != null) 
			{
				ChannelServices.UnregisterChannel(chan);
				//chan = null;
			}
		}


		public StringCollection getRemoteSecretIDS()
		{
			// Use the object
			try 
			{
				if( obj.Equals(null) )
				{
					System.Console.WriteLine("Error: unable to locate server");
					return null;
				}
				else
				{
					//Console.WriteLine(obj.enumerateSecretIDs());
					return obj.enumerateSecretIDs();
				}
			}
			catch (Exception e)
			{
				throw e;
			}
		}

		public Secret getRemoteSecret(string id)
		{

			if (obj.Equals(null))
			{
				return null;
			}
			else
			{
				return obj.getSecret(id);
			}
		}
	}
}