Moving micasa 1.5 trunk to Novell forge.
This commit is contained in:
156
c_micasad/lib/communication/MiCasaRequestReply.cs
Normal file
156
c_micasad/lib/communication/MiCasaRequestReply.cs
Normal file
@@ -0,0 +1,156 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.IO;
|
||||
|
||||
using Novell.CASA.MiCasa.Common;
|
||||
|
||||
namespace Novell.CASA.MiCasa.Communication
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for MiCasaRequestReply.
|
||||
/// </summary>
|
||||
public class MiCasaRequestReply
|
||||
{
|
||||
|
||||
//public const int VERB_GET_SECRET = 1;
|
||||
//public const int VERB_SET_SECRET = 2;
|
||||
//public const int VERB_GET_KEYCHAIN = 3;
|
||||
//public const int VERB_GET_STORE = 4;
|
||||
//public const int VERB_SET_KEYVALUE = 5;
|
||||
//public const int VERB_GET_KEYVALUE = 6;
|
||||
public const int VERB_SET_LINKED_KEY = 7;
|
||||
public const int VERB_GET_LINKED_KEYS = 8;
|
||||
public const int VERB_REMOVE_LINKED_KEY = 9;
|
||||
public const int VERB_WRITE_KEY = 10;
|
||||
public const int VERB_REMOVE_ALL_SECRETS = 11;
|
||||
public const int VERB_LOCK_STORE = 12;
|
||||
public const int VERB_UNLOCK_STORE = 13;
|
||||
public const int VERB_GET_STORE_STATUS = 14;
|
||||
public const int VERB_REMOVE_KEY = 15;
|
||||
public const int VERB_READ_KEY = 16;
|
||||
public const int VERB_GET_KEY_LIST = 17;
|
||||
|
||||
public const int VERB_DUMP_LINKED_KEYS = 96;
|
||||
public const int VERB_CREATE_TEST_SECRETS = 97;
|
||||
public const int VERB_REMOVE_TEST_SECRETS = 98;
|
||||
public const int VERB_PING_MICASAD = 99;
|
||||
|
||||
public MiCasaRequestReply()
|
||||
{
|
||||
//
|
||||
// TODO: Add constructor logic here
|
||||
//
|
||||
}
|
||||
|
||||
public static object Send(int verb)
|
||||
{
|
||||
return Send(verb, null, null, null, null);
|
||||
}
|
||||
|
||||
public static object Send(int verb, object wo)
|
||||
{
|
||||
return Send(verb, null, null, null, wo);
|
||||
}
|
||||
|
||||
public static object Send(int verb,
|
||||
string sKeyChainID,
|
||||
string sSecretID,
|
||||
string sKeyID,
|
||||
object theObject)
|
||||
{
|
||||
|
||||
// Lengths of message fields
|
||||
int MSGID_LEN = 2;
|
||||
int MSG_LEN = 4;
|
||||
WrappedObject request;
|
||||
WrappedObject reply = null;
|
||||
|
||||
// open a client connection
|
||||
//IInterProcessConnection clientConnection = null;
|
||||
|
||||
ClientChannel ipcChannel = IPCClientFactory.CreateClientConnection();
|
||||
ipcChannel.Open();
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
// contruct and serialize the Message Object
|
||||
request = new WrappedObject(verb, sKeyChainID, sSecretID, sKeyID, theObject);
|
||||
|
||||
BinaryFormatter formatter = new BinaryFormatter();
|
||||
MemoryStream ms = new MemoryStream();
|
||||
formatter.Serialize(ms, request);
|
||||
ms.Flush();
|
||||
ms.Position = 0;
|
||||
|
||||
byte[] rawBytes = new byte[2+4+ms.Length];
|
||||
|
||||
byte[] t = new byte[10];
|
||||
|
||||
// set message id
|
||||
int destIndex = 0;
|
||||
ushort msgId = 20;
|
||||
t = BitConverter.GetBytes((ushort)msgId);
|
||||
Array.Copy(t,0,rawBytes,destIndex,MSGID_LEN);
|
||||
destIndex += MSGID_LEN;
|
||||
|
||||
// set the object length
|
||||
//Poorna
|
||||
int msgLen = 2+4+(int)ms.Length;
|
||||
// int msgLen = (int)ms.Length;
|
||||
t = BitConverter.GetBytes(msgLen);
|
||||
// t = BitConverter.GetBytes(ms.Length);
|
||||
Array.Copy(t,0,rawBytes,destIndex,MSG_LEN);
|
||||
destIndex += MSG_LEN;
|
||||
|
||||
// copy in the object
|
||||
Array.Copy(ms.GetBuffer(), 0, rawBytes, destIndex, ms.Length);
|
||||
|
||||
//clientConnection = new ClientPipeConnection("MyPipe", ".");
|
||||
//clientConnection = new ClientPipeConnection(XTIER_RPC_PIPE, ".");
|
||||
//clientConnection.Connect();
|
||||
|
||||
// write the bytes
|
||||
//clientConnection.WriteBytes(rawBytes);
|
||||
ipcChannel.Write(rawBytes);
|
||||
|
||||
// read the bytes
|
||||
//byte[] returnBuffer = clientConnection.ReadBytes();
|
||||
byte[] returnBuffer = ipcChannel.Read();
|
||||
|
||||
if (returnBuffer != null)
|
||||
{
|
||||
// deserialize MessageObject
|
||||
uint iMsgLen = BitConverter.ToUInt32(returnBuffer,0);
|
||||
ms = new MemoryStream(returnBuffer, 4, (int)iMsgLen);
|
||||
ms.Position = 0;
|
||||
reply = (WrappedObject)formatter.Deserialize(ms);
|
||||
|
||||
if (reply.GetReturnCode() != 0)
|
||||
throw new Exception(reply.GetReturnCode().ToString());
|
||||
|
||||
}
|
||||
|
||||
// close the connection
|
||||
//clientConnection.Close();
|
||||
ipcChannel.Close();
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e1)
|
||||
{
|
||||
Console.WriteLine(e1.ToString());
|
||||
//clientConnection.Dispose();
|
||||
//throw new Exception(e1.ToString());
|
||||
}
|
||||
|
||||
if (reply != null)
|
||||
return reply.GetObject();
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user