EDOC034
MIDAS Register Server - RPC Program Specification and Implementation
Edition 2.0
September 2003
Nuclear Physics Group
Council for the Central Laboratory of the Research Councils
Daresbury Laboratory
Introduction
This document describes a general purpose protocol used within the MIDAS Data Acquisition System to enable clients to communicate with the various applications programs which control equipment and acquire data.
The general concepts of the Register Server are defined in the document EDOC079 (The Eurogam Register Server - An Overview) and an example of its use is described in the document EDOC024 which defines the requirements for the Eurogam Frontend Crate Server.
It is intended that this protocol be available over a number of communications media and hence the relevant Communications Protocol specification document should be consulted for detail in this area.
This protocol is an application carried by the RPC protocol which is described in the Eurogam document Remote Procedure Call.
The general structure of the protocol is described in the Eurogam document RPC Application Programs.
History
Edition 1.1 May 1991 - first entry in document server
Edition 1.2 June 1998 - conversion to HTML format only.
Edition 2.0 September 2003 - this version adds Version 2, implementing Procedures 17 & 18.
Operation
Version 2.0 of the document corresponds to versions 1 and 2 of the program protocol.
Use
Throughout this document capability is an 8 byte (64 bit) opaque field generated by the server and used by the client as an access token.
Overview
Program Specification
RPC Information
The ERS service uses only the Null authentication
ERS is supported on the UDP/IP transport only
ERS is RPC Program 28000220
This is Version 1 and Version 2 of the protocol
ERS uses UDP port number 10220
RPC Information
typedef enum { FALSE = 0, TRUE = 1 } boolean; typedef enum { OK = 0 resource_not_known = 1 resource_already_in_use = 2 capability_invalid = 3 register_not_known = 4 register_already_defined = 6 prototype_not_known = 7 application_not_responding = 8 invalid_cookie = 9 application_detected_failure = 10 illegal_register_name = 11 out_of_memory = 12 count_to_small = 13 bad_request = 14 } stat; typedef string resourece<255> typedef string register<255> typedef string class<255> typedef string pattern<255> typedef opaque capability[8] typedef opaque cookie[4] typedef opaque registervalue<1024> typedef opaque registerattribute<1024> typedef union switch {boolean valid} { TRUE: struct { register reg; registerval rval; cookie kk; regvallist nextentry; } FALSE: struct {} } regvallist; typedef union switch {boolean valid} { TRUE: struct { register reg; registerattribute rattrib; cookie kk; regattriblist nextentry; } FALSE: struct {} } regattriblist; typedef union switch {boolean valid} { TRUE: struct { register reg; cookie kk; reglist nextentry; } FALSE: struct {} } reglist;
Procedure Summary
0 |
null procedure |
1, 2 |
[go]![]() |
1 |
Claim resource |
1, 2 |
[go]![]() |
2 |
Free resource |
1, 2 |
[go]![]() |
3 |
Define register |
1, 2 |
[go]![]() |
4 |
Undefine register |
1, 2 |
[go]![]() |
5 |
Read register |
1, 2 |
[go]![]() |
6 |
Write register |
1, 2 |
[go]![]() |
7 |
Initialise register |
1, 2 |
[go]![]() |
8 |
Inquire registers |
1, 2 |
[go]![]() |
9 |
Read registers |
1, 2 |
[go]![]() |
10 |
Write registers |
1, 2 |
[go]![]() |
11 |
Initialise registers |
1, 2 |
[go]![]() |
12 |
Read attribute |
1, 2 |
[go]![]() |
13 |
Write attribute |
1, 2 |
[go]![]() |
14 |
Undefine registers |
1, 2 |
[go]![]() |
15 |
Read attributes |
1, 2 |
[go]![]() |
16 |
Write attributes |
1, 2 |
[go]![]() |
17 |
Read class name |
2 |
[go]![]() |
18 |
Read class names |
2 |
[go]![]() |