ONC+ 開発ガイド

隠されたデータ

プロトコルによっては、サーバーからクライアントにハンドルが渡され、クライアントは後からハンドルをサーバーに送り返します。クライアントではハンドルの内容を調べることはなく、受け取ったものをそのまま送り返します。すなわち、ハンドルは隠されたデータ (内容が隠されたデータ) です。固定長の隠されたデータを記述するには、xdr_opaque() プリミティブを使用します。

bool_t
xdr_opaque(xdrs, p, len)
   XDR *xdrs;
   char *p;
   u_int len;

引数 p は隠されたオブジェクトのアドレスを、 len は隠されたオブジェクト内のバイト数を示します。隠されたデータの定義からすると、実際に隠れたオブジェクトに入っているデータはマシン間で移植不可能です。

SunOS/SVR4 システムには、隠されたデータの操作用にもう 1 つのルーチンが提供されています。そのルーチン xdr_netobj xdr_opaque() と同様にカウント付きの隠されたデータを送信します。次のコーディング例は xdr_netobj() の構文を示します。


例 A–10 xdr_netobj ルーチン

struct netobj {
	u_int   n_len;
 char    *n_bytes;
};
typedef struct netobj netobj;
 
bool_t
xdr_netobj(xdrs, np)
	XDR *xdrs;
	struct netobj *np;

xdr_netobj() はフィルタプリミティブで、可変長の隠されたデータとその外部表現との変換を行います。引数 npnetobj 構造体のアドレスです。netobj 構造体には隠されたデータの長さと隠されたデータへのポインタが入っています。 長さは、MAX_NETOBJ_SZ バイトを超えることはできません。変換に成功すれば TRUE、失敗すれば FALSE が返されます。