/* 
 * $Id: qrpc_private.h,v 1.10 90/07/25 16:54:42 qjb Exp $
 * $Source: /afs/athena.mit.edu/user/q/qjb/source/qrpc/src/RCS/qrpc_private.h,v $
 * $Author: qjb $
 *
 */

#ifndef __QRPC_PRIVATE_H__
#define __QRPC_PRIVATE_H__

#if !defined(lint) && !defined(SABER) && !defined(RCS_HDRS)
static char *rcsid_qrpc_private_h = "$Id: qrpc_private.h,v 1.10 90/07/25 16:54:42 qjb Exp $";
#endif /* lint || SABER || RCS_HDRS */

#include <sys/types.h>

#ifndef __QRPC_H__
#include "qrpc.h"
#endif /* __QRPC_H__ */

#define QRPC_IS_CLIENT 1
#define QRPC_IS_SERVER 2

#define QRPC_ST_EXP_HEADER 1
#define QRPC_ST_EXP_DATA 2

#include "internal_opcodes.h"

typedef qrpc_byte bit16[2];
typedef qrpc_byte bit32[4];

/* Useful definitions */
#define BCLEAR(a) bzero((char *)(a), sizeof(a))
#define SBCLEAR(a) bzero((char *)&(a), sizeof(a))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))

#define IS16BIT(x) (((u_long)(x) & 0xFFFF) == (x))
#define IS32BIT(x) (((u_long)(x) & 0XFFFFFFFF) == (x))

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif

#ifndef __STDC__
#define volatile
#endif /* __STDC__ */

/*
 * Function prototypes of internal routines 
 */

qrpc_error_t qrpci_send_packet
    QRPC_PROTO((qrpc_t, qrpc_opcode_t, qrpc_data_t, qrpc_length_t));
qrpc_error_t qrpci_recv_packet
    QRPC_PROTO((qrpc_t, qrpc_opcode_t, qrpc_data_t, qrpc_length_t *));
qrpc_error_t qrpci_send_success
    QRPC_PROTO((qrpc_t)); 
qrpc_error_t qrpci_send_error
    QRPC_PROTO((qrpc_t, char *));
qrpc_error_t qrpci_recv_status
    QRPC_PROTO((qrpc_t, qrpc_data_t, qrpc_length_t *)); 
qrpc_error_t qrpci_ushort_to_bit16
    QRPC_PROTO((u_short, bit16));
qrpc_error_t qrpci_ulong_to_bit32
    QRPC_PROTO((u_long, bit32));
qrpc_error_t qrpci_bit16_to_ushort
    QRPC_PROTO((bit16, u_short *));
qrpc_error_t qrpci_bit32_to_ulong
    QRPC_PROTO((bit32, u_long *));
void qrpci_dprint
    QRPC_PROTO((qrpc_t, char *));

#endif /* __QRPC_PRIVATE_H__ */
