//
// openmapi.org - CompactTeaSharp - OnRpcClientCallMessage.cs
//
// C# port Copyright 2008 by Topalis AG
//
// Author (C# port): mazurin, Johannes Roith
//
// This library is based on the RemoteTea java library:
//
// Author: Harald Albrecht
//
// Copyright (c) 1999, 2000
// Lehrstuhl fuer Prozessleittechnik (PLT), RWTH Aachen
// D-52064 Aachen, Germany. All rights reserved.
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// 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 General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this program (see the file COPYING.LIB for more
// details); if not, write to the Free Software Foundation, Inc.,
// 675 Mass Ave, Cambridge, MA 02139, USA.
//
using System;
namespace CompactTeaSharp
{
///
/// Represents a remote procedure call message on the client side.
///
public class OncRpcClientCallMessage: OncRpcCallMessage
{
///
/// Client-side authentication protocol handling object to use when
/// decoding the reply message.
///
protected OncRpcClientAuth auth;
///
/// Constructs and initialises a new ONC/RPC call message header.
///
//// An identifier choosen by an ONC/RPC client to uniquely
/// identify matching call and reply messages.
//// Program number of the remote procedure to call.
//// Program version number of the remote procedure to call.
//// Procedure number (identifier) of the procedure to call.
//// Authentication protocol handling object.
public OncRpcClientCallMessage (int messageId, int program, int version,
int procedure, OncRpcClientAuth auth) :
base (messageId, program, version, procedure)
{
this.auth = auth;
}
///
/// Encodes an ONC/RPC message header object into a XDR stream according to RFC 1831.
///
/// An encoding XDR stream where to put the mess in.
public void XdrEncode (XdrEncodingStream xdr)
{
xdr.XdrEncodeInt (MessageId);
xdr.XdrEncodeInt ((int) MessageType);
xdr.XdrEncodeInt (OncRpcVersion);
xdr.XdrEncodeInt (Program);
xdr.XdrEncodeInt (Version);
xdr.XdrEncodeInt (Procedure);
//
// Now encode the authentication data. If we have an authentication
// protocol handling object at hand, then we let do the dirty work
// for us. Otherwise, we fall back to AUTH_NONE handling.
//
if (auth != null)
auth.XdrEncodeCredVerf (xdr);
else {
xdr.XdrEncodeInt ((int) OncRpcAuthType.None);
xdr.XdrEncodeInt (0);
xdr.XdrEncodeInt ((int) OncRpcAuthType.None);
xdr.XdrEncodeInt (0);
}
}
}
}