Структуры сообщений протокола. - Механизм вызова удаленных процедур - RPC

При передаче RPC-сообщений поверх транспортного протокола, несколько RPC-сообщений могут располагаться внутри одного транспортного пакета. Для того чтобы отделять одно сообщение от другого, используется маркер записи (RM - Record Marker). Каждое RPC-сообщение "маркируется" ровно одним RM.

RPC-сообщение может состоять из нескольких фрагментов. Каждый фрагмент состоит из четырех байт заголовка и (от 0 до 2**31-1) данных. Первый бит заголовка указывает, является ли данный фрагмент последним, а остальные 31 бит указывают длину пакета данных.

Структура RPC формально описана на языке описания и представления форматов данных - XDR с дополнениями, касающимися описания процедур. Можно даже сказать, что язык описания RPC является расширением XDR, дополненным работой с процедурами.

Структура RPC-пакета выглядит следующим образом:

Struct rpc_msg {

Unsigned int xid;

Union switch (msg_type mtype) {

Case CALL:

Call_body cbody;

Case REPLY:

Reply body rbody;

} body;

};

Где xid - идентификатор текущей транзакции, call_body - пакет запроса, reply_body - пакет ответа. Структура запроса выглядит примерно так:

Struct call body {

Unsigned int rpcvers;

Unsigned int prog;

Unsigned int vers;

Unsigned int proc;

Opaque_auth cred;

Opaque_auth verf;

/* procedure parameters */

};

Структура ответа (reply_body) может содержать либо структуру, передаваемую в случае ошибки (тогда она содержит код ошибки), либо структуру успешной обработки запроса (тогда она содержит возвращаемые данные).

Похожие статьи




Структуры сообщений протокола. - Механизм вызова удаленных процедур - RPC

Предыдущая | Следующая