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() と同様にカウント付きの隠されたデータを送信します。 例 A-10 に、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 が返されます。