Merge lp:~djlauk/epics-appdev/ca-protocol into lp:~epics-documenters/epics-appdev/3.16
- ca-protocol
- Merge into 3.16
Status: | Merged |
---|---|
Merged at revision: | 81 |
Proposed branch: | lp:~djlauk/epics-appdev/ca-protocol |
Merge into: | lp:~epics-documenters/epics-appdev/3.16 |
Diff against target: |
5146 lines (+5072/-1) 7 files modified
.bzrignore (+2/-0) Makefile (+18/-1) ca_protocol/ca_protocol.txt (+2610/-0) ca_protocol/dia/README.txt (+2/-0) ca_protocol/dia/connection-states.dia (+614/-0) ca_protocol/dia/repeater.dia (+458/-0) ca_protocol/dia/virtual-circuit.dia (+1368/-0) |
To merge this branch: | bzr merge lp:~djlauk/epics-appdev/ca-protocol |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Johnson | Approve | ||
mdavidsaver | Approve | ||
Review via email: mp+232494@code.launchpad.net |
Commit message
Description of the change
Converted the CA protocol documentation from Cosylab to AsciiDoc.
Generating the HTML documentation requires asciidoc and dia.
Please double check the Makefile.
- 57. By Daniel J. Lauk
-
Makefile fix by Michael Davidsaver
- 58. By Daniel J. Lauk
-
Patch from Michael Davidsaver: Add license, move rev. history, add core-talk email address
Andrew Johnson (anj) wrote : | # |
I haven't looked at it properly yet but I am working on 3.15 AppDevGuide updates right now and will merge it and publish the output once I've finished them.
Andrew Johnson (anj) wrote : | # |
Merging.
I reorganized the Makefile somewhat so it now installs into a different directory to the source, so I can install the result onto our webserver by rsyncing a whole directory. The version of asciidoc that I have on my RHEL6.6 system doesn't support the html5 backend; my default backend generates xhtml11 which looks much better than the original html backend. The generated output is now online at http://
It would be nice to be able to use the a2x toolchain wrapper script to generate a PDF file as well, but I get errors when I run that, implying that the source text isn't quite suitable yet for the Docbook processing steps which that invokes.
Preview Diff
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2010-11-15 18:04:26 +0000 |
3 | +++ .bzrignore 2014-09-29 14:22:53 +0000 |
4 | @@ -1,3 +1,5 @@ |
5 | pdf/ |
6 | AppDevGuide* |
7 | *.backup |
8 | +ca_protocol/index.html |
9 | +ca_protocol/*.png |
10 | |
11 | === modified file 'Makefile' |
12 | --- Makefile 2013-10-14 18:38:30 +0000 |
13 | +++ Makefile 2014-09-29 14:22:53 +0000 |
14 | @@ -1,9 +1,11 @@ |
15 | # requires: |
16 | # latex2html and pdflatex |
17 | +# asciidoc, dia |
18 | |
19 | TEXD=tex |
20 | PDFD=pdf |
21 | EPSD=eps |
22 | +CADIAD=ca_protocol/dia |
23 | |
24 | PDFS = \ |
25 | $(PDFD)/overview_1.pdf \ |
26 | @@ -47,6 +49,13 @@ |
27 | $(TEXD)/registry.tex \ |
28 | $(TEXD)/databaseStructures.tex |
29 | |
30 | +DIAS = \ |
31 | +$(CADIAD)/virtual-circuit.dia \ |
32 | +$(CADIAD)/connection-states.dia \ |
33 | +$(CADIAD)/repeater.dia \ |
34 | + |
35 | +GENPNG = $(DIAS:$(CADIAD)/%.dia=ca_protocol/%.png) |
36 | + |
37 | # Options for latex2html: |
38 | L2H_OPTS += -split +1 |
39 | L2H_OPTS += -link 2 |
40 | @@ -59,7 +68,7 @@ |
41 | all: pdf html |
42 | |
43 | pdf: AppDevGuide.pdf |
44 | -html: AppDevGuide |
45 | +html: AppDevGuide ca_protocol/index.html |
46 | |
47 | AppDevGuide.pdf: AppDevGuide.tex $(TEXS) $(PDFS) |
48 | pdflatex $(basename $@) |
49 | @@ -74,9 +83,17 @@ |
50 | mkdir -p $(PDFD) |
51 | epstopdf $< -o=$@ |
52 | |
53 | +ca_protocol/%.png: $(CADIAD)/%.dia |
54 | + dia -t png -e $@ $< |
55 | + |
56 | +ca_protocol/index.html: ca_protocol/ca_protocol.txt $(GENPNG) |
57 | + asciidoc -n -b html5 -o $@ $< |
58 | + |
59 | clean: cleanidx |
60 | rm -rf AppDevGuide |
61 | rm -rf pdf |
62 | + rm -f ca_protocol/index.html |
63 | + rm -f $(GENPNG) |
64 | |
65 | cleanidx: |
66 | rm -f *.idx *.ind *.ilg *.log *.out *.pdf *.toc *.aux |
67 | |
68 | === added directory 'ca_protocol' |
69 | === added file 'ca_protocol/ca_protocol.txt' |
70 | --- ca_protocol/ca_protocol.txt 1970-01-01 00:00:00 +0000 |
71 | +++ ca_protocol/ca_protocol.txt 2014-09-29 14:22:53 +0000 |
72 | @@ -0,0 +1,2610 @@ |
73 | +Channel Access Protocol Specification |
74 | +===================================== |
75 | +:Email: core-talk@aps.anl.gov |
76 | +:Date: 2014-08-27 |
77 | +:Revision: 1.4.1 |
78 | + |
79 | + |
80 | +[[license]] |
81 | +== License |
82 | + |
83 | +This document is distributed under the terms of the |
84 | +http://www.gnu.org/licenses/old-licenses/fdl-1.2.html[GNU Free Documentation License, version 1.2]. |
85 | + |
86 | +[[document-history]] |
87 | +== Document History |
88 | + |
89 | +[options="header"] |
90 | +|==================== |
91 | +|Revision|Date|Author|Section|Modification |
92 | +|1.0|2003-12-12|mailto:klemen.zagar@cosylab.com[Klemen Žagar]|all|Created. |
93 | +|1.1|2004-01-08|mailto:ales.pucelj@cosylab.com[Aleš Pucelj]|all|Finalized structure. |
94 | +| |2004-01-10|mailto:matej.sekoranja@cosylab.com[Matej Šekoranja]|all|Review. |
95 | +|1.2|2004-04-19|mailto:ales.pucelj@cosylab.com[Aleš Pucelj]|all|Draft completed. |
96 | +|1.3|2004-05-31|mailto:ales.pucelj@cosylab.com[Aleš Pucelj]|all|Matej's comments considered (after Channel Access for Java implementation). |
97 | +| |2004-06-01|mailto:matej.sekoranja@cosylab.com[Matej Šekoranja]|all|Review. |
98 | +| |2004-08-12|mailto:klemen.zagar@cosylab.com[Klemen Žagar]|all|Released |
99 | +|1.4|2008-02-07|mailto:matej.sekoranja@cosylab.com[Matej Šekoranja]|all|Description of `CA_PROTO_READ` and `CA_PROTO_READ_SYNC` added. |
100 | +| |2008-02-07|mailto:klemen.zagar@cosylab.com[Klemen Žagar]|all|Released |
101 | +|1.4.1|2014-08-27|mailto:daniel.lauk@psi.ch[Daniel J. Lauk]|all|Transformed to link:http://asciidoc.org/[AsciiDoc] format. Recreated graphics. |
102 | +|==================== |
103 | + |
104 | +== Introduction |
105 | + |
106 | +This document is a specification of the EPICS Channel Access (CA) protocol. |
107 | +Structure of messages exchanged between communicating nodes is defined, as well as semantics of the exchange. |
108 | +The documentation is focused on version 4.11 of the CA protocol, which comes with EPICS 3.14, and later versions. |
109 | + |
110 | +=== Implementation Requirements |
111 | + |
112 | +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", |
113 | +"SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" in this document are to be |
114 | +interpreted as described in link:http://www.ietf.org/rfc/rfc2119.txt[RFC 2119: |
115 | +Key words for use in RFCs to Indicate Requirement Levels]<<references,[3]>>. |
116 | + |
117 | +An implementation is not compliant if it fails to satisfy one or more of the |
118 | +MUST or REQUIRED level requirements for the protocols it implements. |
119 | +An implementation that satisfies all the MUST or REQUIRED level and all the |
120 | +SHOULD level requirements for its protocols is said to be "unconditionally |
121 | +compliant"; one that satisfies all the MUST level requirements but not all the |
122 | +SHOULD level requirements for its protocols is said to be "conditionally |
123 | +compliant." |
124 | + |
125 | +This document is based on the original CA protocol implementation that |
126 | +accompanies EPICS. Wherever the MAY, OPTIONAL or RECOMMENDED is specified, it |
127 | +implies that experience has shown such behaviour to improve either |
128 | +performance, portability or memory consumption. |
129 | + |
130 | +A protocol implementation that is not unconditionally compliant MUST NOT be |
131 | +used in any production environment or used with EPICS databases controlling |
132 | +physical devices. |
133 | + |
134 | + |
135 | +=== Basic Concepts |
136 | + |
137 | + |
138 | +==== Process Variables |
139 | + |
140 | +A Process Variable (PV) is representation of a single value within an EPICS |
141 | +host. |
142 | + |
143 | + |
144 | +==== Channels |
145 | + |
146 | +A channel is created whenever a PV is connected using CA. |
147 | + |
148 | +From implementation point of view, a channel is a connection, established over |
149 | +virtual circuit, between server and client through which a single PV is |
150 | +accessed. Both the client and the server will provide a way of uniquely |
151 | +identifying channels. These identifiers are explained in section |
152 | +<<message-identifiers,Message Identifiers>>. |
153 | + |
154 | + |
155 | +==== Monitors |
156 | + |
157 | +A monitor is created on a channel as a means of registering for asynchronous |
158 | +change notifications. CA protocol defines the subscription mechanism through |
159 | +which clients register for notifications. These changes will then be provided |
160 | +through monitor object or callback, depending on implementation and |
161 | +environment. Monitors may be filtered to receive only a subset of events, |
162 | +such as value or alarm changes. Several different monitors may be created for |
163 | +each channel. |
164 | + |
165 | + |
166 | +==== Channel Access Client Library |
167 | + |
168 | +A client library implements channel access protocol and exposes it through a |
169 | +programmer-friendly API. How the protocol and its mechanisms are implemented |
170 | +in the library depends on the programming language and no specific |
171 | +requirements are made with respect to this. |
172 | + |
173 | + |
174 | +==== Repeater |
175 | + |
176 | +Repeater is a standalone process that allows several clients on one machine to |
177 | +share a predefined UDP port for recieving broadcast messages. Broadcast |
178 | +messages are sent without prior knowledge of which port the CA clients and |
179 | +hosts are listening at, so predefined port numbers are used. Since most |
180 | +network stack implementations do not allow multiple clients to listen on the |
181 | +same port, repeater is installed to listen on a single port, used for |
182 | +broadcast notifications. Repeater will fan-out unmodified incoming datagram |
183 | +messages to all the clients on the same host, that have previously registered |
184 | +with the repeater. |
185 | + |
186 | +Typically, a client library will attempt to register with the repeater during |
187 | +startup. If repeater cannot be found or is not available, the library will |
188 | +attempt to spawn a new repeater process. Repeater and client communicate using |
189 | +a minimal set of messages over UDP. |
190 | + |
191 | + |
192 | +==== Server Beacons |
193 | + |
194 | +Server beacons are simple protocol messages that allow servers to broadcast |
195 | +their availability. These messages are sent out periodically to announce their |
196 | +presence. Additionally, these beacons are used to restore virtual circuits |
197 | +that have lost connections. |
198 | + |
199 | + |
200 | +==== Virtual Circuit |
201 | + |
202 | +Channel Access protocol is designed to minimize resources used on both client |
203 | +and server. Virtual circuits minimize number of TCP connections used between |
204 | +clients and servers. Each client will have exactly one active and open TCP |
205 | +connection to an individual server, regardless of how many channels it |
206 | +accesses over it. This helps to ensure that servers do not get overwhelmed by |
207 | +too many connections. |
208 | + |
209 | +The life-cycle of a virtual circuit is defined in section |
210 | +<<virtual-circuit-operation,Virtual Circuit Operation>>. |
211 | + |
212 | + |
213 | +==== Message Buffering |
214 | + |
215 | +When sending packets over network, channel access allows huge savings to be |
216 | +made by grouping individual messages in a single TCP packet. This is performed |
217 | +by maintaining per virtual circuit buffers that collect all outgoing messages. |
218 | +These buffers are flushed upon application's explicit request. This mechanism |
219 | +is independent of the TCP/IP stack, which maintains its own send queue and |
220 | +defines a maximum frame size. Messages sent over virtual circuit may be larger |
221 | +than this and will not always be aligned on frame boundary. Implementation |
222 | +should also be aware that messages received may not yet be available entirely |
223 | +or will be split over several TCP frames. |
224 | + |
225 | + |
226 | +==== Version compatibility |
227 | + |
228 | +Certain aspects of Channel Access protocol have changed between releases. |
229 | +In this document, Channel Access versions are identified using `CA_VXYY`, |
230 | +where X represents single-digit major version number and YY represents a |
231 | +single- or double-digit minor version number. Stating that a feature is |
232 | +available in `CA_VXYY` implies that any client supporting version XYY must |
233 | +support the feature. Implementation must be backward compatible with all |
234 | +versions up to and including its declared supported minor version number. |
235 | + |
236 | +.Channel Access version number |
237 | +==================== |
238 | +`CA_V43`, denotes version 4.3 (major version 4, minor version 3). |
239 | +==================== |
240 | + |
241 | +Currently, all protocol definitions are assumed to have major version 4. |
242 | +Minor version ranges from 1 through 11. |
243 | + |
244 | + |
245 | +==== Exceptions |
246 | + |
247 | +This document uses the concept of exceptions to refer to the mechanism of |
248 | +reporting errors that occur during command request execution. An exception |
249 | +defines reporting of error condition on the server. This can occur either due |
250 | +to client problem or due to some unexpected condition on the server (such as |
251 | +running out of resources). Exceptions are reported either within the command's |
252 | +response or using a specialized message. Actual form and method (response or |
253 | +asynchronously received message) depends on circumstances where the exception |
254 | +occurs. Individual commands and messages determine which method is used. |
255 | + |
256 | + |
257 | +=== Overall Operation |
258 | + |
259 | +This section is intended as a quick overview of channel access functionality |
260 | +and behaviour. For more information, please refer to |
261 | +link:http://www.aps.anl.gov/epics/base/R3-14/5-docs/CAref.html[Channel Access |
262 | +Reference Manual]<<references,[1]>>. |
263 | + |
264 | +The goal of channel access (CA) is to provide remote access to records and |
265 | +fields managed by <<glossary,IOC>>, including search and discovery of hosts |
266 | +and minimal flow contol. Protocol itself is designed to provide minimal |
267 | +overhead and maximize network throughput for transfer of large number of small |
268 | +data packets. Additionaly, implementation overhead of the protocol can be kept |
269 | +very small, to allow operation with limited resources. |
270 | + |
271 | +All commands and events in CA are encapsulated in predefined messages, which |
272 | +can be sent in one of three forms: |
273 | + |
274 | +* As a *beacon*, which requires no confirmation. Used for host discovery and |
275 | + keep-alive notification. |
276 | +* As a *request/response pair*. Most commands use this method. |
277 | +* As a *subscriber notification*, where the client registers with the host and |
278 | + receives updates. Event notification uses this method to report value |
279 | + changes. |
280 | + |
281 | +Communication between server and client is performed by sending command |
282 | +messages over UDP and TCP. Client will use UDP to search for hosts and PVs, |
283 | +server will use them to notify its startup and shutdown. Once client requests |
284 | +a specific <<glossary,PV>> (by specifying its name), UDP message will be |
285 | +broadcast to either a subnet or a list of predefined addresses, and the server |
286 | +which hosts requested PV will respond. |
287 | + |
288 | +Data exchange between client and server is performed over TCP. After locating |
289 | +the PV, the client will establish a TCP connection to the server. If more that |
290 | +one PV is found to be on the same server, client will use existing TCP |
291 | +connection. Reusable TCP connection between client and server is called |
292 | +<<glossary,Virtual circuit>>. |
293 | + |
294 | +Once a virtual circuit is established or already available, channels can be |
295 | +created to PVs. |
296 | + |
297 | +Let's assume the following setup of PVs and hosts: |
298 | + |
299 | +* PV "A" is located on host IOC1. |
300 | +* PV "B" is located on host IOC2. |
301 | +* PV "C" does not exist on either host. |
302 | +* PV "D" is located both hosts, IOC1 and IOC2. |
303 | + |
304 | +A typical scenario would be similar to this: |
305 | + |
306 | +. User application starts and initializes channel access client library. |
307 | + During initialization, client library might spawn a new repeater process or |
308 | + register with an existing one. If successful, the library is ready to start |
309 | + using the channel access. |
310 | +. Application will start searching for PVs named "A", "B", "C" and "D". |
311 | + Client will send UDP search packets with "A", "B", "C" and "D" PV names, |
312 | + and wait for an application-specified amount of time. |
313 | + To which network hosts (broadcast or specific IP) these packets are actually |
314 | + sent depends on configuration of the client. |
315 | +. All hosts that receive this message will check their database and if they |
316 | + know about any of these PV names, they will respond using UDP search |
317 | + response message. Thus, IOC1 will respond with "A" and "D", whereas IOC2 |
318 | + will respond with "B" and "D". |
319 | +. For each search packet sent, the client will wait for a predefined amount of |
320 | + time or until response is received. |
321 | +. In this case (assuming no packet loss in the network), the client will |
322 | + establish a virtual circuit (TCP connection) to IOC1 and IOC2. PV "C" will |
323 | + be assumed to be unavailable at this point and will be ignored. |
324 | + Since "D" is located on both hosts, client will be unable to distinguish |
325 | + between them. First response received will be considered to be proper answer |
326 | + and any additional responses will be considered erroneous and reported to |
327 | + user. |
328 | +. Once virtual circuits are established, client can access values of "A", "B" |
329 | + and "D". From now on, all messages for either of the PVs will be sent via a |
330 | + corresponding virtual circuit. |
331 | +. If virtual circuit looses TCP connection or the host disconnects, client |
332 | + will notify application appropriately. Client will also listen for server |
333 | + beacon messages (sent whenever IOC host starts), to be able to restore any |
334 | + lost connections. Beacons are also used to detect when a host stops |
335 | + responding. |
336 | +. Once the application is done using the channel access library, it will |
337 | + gracefully close any open connections. |
338 | + |
339 | + |
340 | +== Data Types |
341 | + |
342 | +This section defines all primitive data types employed by the CA, as well as |
343 | +their C/C++ equivalents. These data types are referred to in the subsequent |
344 | +sections. |
345 | + |
346 | +[options="header"] |
347 | +|==================== |
348 | +|Type Name|C/C++|Description |
349 | +|`BYTE`|`char`|Signed 8-bit integer. |
350 | +|`UBYTE`|`unsigned char`|Unsigned 8-bit integer. |
351 | +|`INT16`|`short`|Signed 16-bit integer. |
352 | +|`UINT16`|`unsigned short`|Unsigned 16-bit integer. |
353 | +|`INT32`|`int`|Signed 32-bit integer. |
354 | +|`UINT32`|`unsigned int`|Unsigned 32-bit integer. |
355 | +|`FLOAT`|`float`|IEEE 32-bit float. |
356 | +|`DOUBLE`|`double`|IEEE 64-bit float. |
357 | +|`STRING[n]`|`char[]`|Array of `UBYTE`s. If `[n]` is specified, it indicates maximum allowed number of characters in this string including (if neccessary) termination character. |
358 | +|`TIMESTAMP`|None|Timestamp represented with two `UINT32` values. First is number of seconds since 0000 Jan 1, 1990. Second is number of nanoseconds within second |
359 | +|==================== |
360 | + |
361 | +All values are transmitted over the network in big-endian (network) order. |
362 | +For example: `UINT32` 3145 (`0x00000C49`) would be sent over the network |
363 | +represented as `00 00 0C 49`. |
364 | + |
365 | + |
366 | +== Messages |
367 | + |
368 | + |
369 | +=== Message Structure |
370 | + |
371 | +All channel access messages are composed of a *header*, followed by the |
372 | +*payload*. |
373 | + |
374 | +Header is always present. Its structure is fixed, and contains predefined |
375 | +fields. At the very least, this will be command ID and payload size. |
376 | +Other header fields may carry command-specific meaning. If a field is not used |
377 | +within a certain message, its value must be 0 (`0x00`). |
378 | + |
379 | +Payload is a sequence of bytes, which are command and version dependent. |
380 | +Implementation is required to provide proper payload with respect to |
381 | +individual command specification. |
382 | + |
383 | +Total size of an individual message is limited. With CA versions older than |
384 | +`CA_V49`, the maximum message size is limited to 16384 (`0x4000`) bytes. |
385 | +Out of these, header has a fixed size of 16 (`0x10`) bytes, with the payload |
386 | +having a maximum size of 16368 (`0x3ff0`) bytes. |
387 | + |
388 | +Versions `CA_V49` and higher may use the *extended message form*, which allows |
389 | +for larger payloads. The extended message form is indicated by the header |
390 | +fields `Payload Size` and `Data Count` being set to `0xffff` and 0, |
391 | +respectively. Real payload size and data count are then given as `UINT32` type |
392 | +values immediately following the header. Maximum message size is limited by |
393 | +32-bit unsigned integer representation, 4294967295 (`0xffffffff`). |
394 | +Maximum payload size is limited to 4294967255 (`0xffffffe7`). |
395 | + |
396 | +Extended message form should only be used if payload size actualy exceeds the |
397 | +pre-`CA_V49` message size limit of 16368 bytes. |
398 | + |
399 | + |
400 | +==== Header |
401 | + |
402 | +.Standard Message Header |
403 | +[options="header"] |
404 | +|==================== |
405 | +|0|1|2|3|4|5|6|7 |
406 | +2+|Command 2+|Payload size 2+|Data type 2+|Data count |
407 | +4+|Parameter 1 4+|Parameter 2 |
408 | +|==================== |
409 | + |
410 | +.Extended Message Header |
411 | +[options="header"] |
412 | +|==================== |
413 | +|0|1|2|3|4|5|6|7 |
414 | +2+|Command 2+|`0xFFFF` 2+|Data type 2+|`0x0000` |
415 | +4+|Parameter 1 4+|Parameter 2 |
416 | +4+|Payload size 4+|Data count |
417 | +|==================== |
418 | + |
419 | +Names of header fields are based on their most common use. Certain messages |
420 | +will use individual fields for purposes other than those described here. These |
421 | +variations are documented for each message individually. All of values in |
422 | +header are unsigned integers. |
423 | + |
424 | +The common header present in all messages is structured as follows: |
425 | + |
426 | +[options="header"] |
427 | +|==================== |
428 | +|Parameter|Type|Description |
429 | +|Command|`UINT16`|Identifier of the command this message requests. The meaning of other header fields and the payload depends on the command. |
430 | +|Payload Size|`UINT16`|Size of the payload (in bytes). Must not exceed `0x4000`. Value of `0xFFFF` indicates extended message. |
431 | +|Data Type|`UINT16`|Identifier of the data type carried in the payload. Data types are defined in section <<payload-data-types,Payload Data Types>>. |
432 | +|Data Count|`UINT16`|Number of elements in the payload. |
433 | +|Parameter 1|`UINT32`|Command dependent parameter. |
434 | +|Parameter 2|`UINT32`|Command dependent parameter. |
435 | +|==================== |
436 | + |
437 | +The extended message header (`CA_V49` and newer) has the following structure: |
438 | + |
439 | +[options="header"] |
440 | +|==================== |
441 | +|Parameter|Type|Description |
442 | +|Command|`UINT16`|Identifier of the command this message requests. The meaning of other header fields and the payload depends on the command. |
443 | +|`0xFFFF`|`UINT16`|Extended message marker. |
444 | +|Data Type|`UINT16`|Identifier of the data type carried in the payload. Data types are defined in section <<payload-data-types,Payload Data Types>>. |
445 | +|`0x0000`|`UINT16`|Extended message marker. |
446 | +|Parameter 1|`UINT32`|Command dependent parameter. |
447 | +|Parameter 2|`UINT32`|Command dependent parameter. |
448 | +|Payload Size|`UINT32`|Size of the payload (in bytes). |
449 | +|Data Count|`UINT32`|Number of elements in the payload. |
450 | +|==================== |
451 | + |
452 | + |
453 | +==== Payload |
454 | + |
455 | +The structure of the payload depends on the type of the message. The size of |
456 | +the payload matches the `Payload Size` header field. |
457 | + |
458 | +[NOTE] |
459 | +If the payload size is not a multiple of 8, zero-padding must be performed to |
460 | +achieve 8-byte alignment. |
461 | + |
462 | + |
463 | +=== Message Identifiers |
464 | + |
465 | +Some fields in messages serve as identifiers, which must be properly handled |
466 | +by the implementation. These fields serve as identification tokens in |
467 | +asynchronous communication and must be unique within the context of the client |
468 | +library. Recommended scheme for allocating these values is to create them |
469 | +sequentially starting at 0. All IDs are represented with `UINT32`. |
470 | + |
471 | +Overflow must be anticipated! Although it is unlikely that an application will |
472 | +need more than 2^32^ different channel IDs, such an overflow can occur with |
473 | +the IOID identifier (see below). |
474 | + |
475 | + |
476 | +[[cid-client-id]] |
477 | +==== CID - Client ID |
478 | + |
479 | +CID identifies individual channel within client library context. When a |
480 | +message requires the CID, this value must be passed. CID for a given channel |
481 | +may not change within the lifetime of the channel. |
482 | + |
483 | +Recommended way of allocating CIDs is sequential 0-based indexing. |
484 | +First client library channel reference that is created has value of 0, |
485 | +second 1, etc. Duplicate CIDs within a single active instance of client |
486 | +library are not allowed. |
487 | + |
488 | +CID value is passed to the server when the channel is actually connected. |
489 | + |
490 | +Overflow should be potentially handled, since an application with expected |
491 | +long lifetime and frequent channel allocation and destruction might increase |
492 | +the index frequently. The best way to handle it is to ignore the problem until |
493 | +the first overflow. When that occurs, old CIDs should be no longer relevant, |
494 | +and CID value can be restarted from 0, but excluding any already used values. |
495 | + |
496 | + |
497 | +[[sid-server-id]] |
498 | +==== SID - Server ID |
499 | + |
500 | +Performs the same function as CID, but is provided by the server when the |
501 | +channel is connected. SID of channel will never change, unless the channel |
502 | +represented by particular SID is removed from the server during runtime. |
503 | +In that case, the channel will be no longer available. |
504 | + |
505 | +To handle overflows, the same method could be used as for the Client Channel |
506 | +ID. |
507 | + |
508 | + |
509 | +[[subscription-id]] |
510 | +==== Subscription ID |
511 | + |
512 | +When a subscription is created on a channel (monitor), a unique subscription |
513 | +ID must be provided. Client library will use this ID to identify different |
514 | +subscriptions on the same channel. This value will allow the client library to |
515 | +dispatch monitors appropriately. |
516 | + |
517 | +Any subscription ID is only valid during the subscription's lifespan. After |
518 | +that, IDs may be reused. |
519 | + |
520 | + |
521 | +==== IOID |
522 | + |
523 | +Unique ID is given to all read and write messages sent by the client library. |
524 | + |
525 | +ID passed with the request will be returned in the matching response. |
526 | + |
527 | +Properly handling the wrapping of identifiers is vital to IOID, since an |
528 | +individual ID is used each time a request is made. |
529 | + |
530 | + |
531 | +== Commands (TCP and UDP) |
532 | + |
533 | +The following commands are sent as either UDP datagrams or TCP messages. |
534 | +Some of the messages are also used within the context of a Virtual Circuit. |
535 | + |
536 | + |
537 | +[[ca-proto-version]] |
538 | +=== `CA_PROTO_VERSION` |
539 | + |
540 | +[horizontal] |
541 | +Command:: |
542 | + `CA_PROTO_VERSION` |
543 | +ID:: |
544 | + 0 (`0x00`) |
545 | +Description:: |
546 | + Exchanges client and server protocol versions and desired circuit |
547 | + priority. This is the first message sent when a new TCP (Virtual Circuit) |
548 | + connection is established. Must be sent before any other exchange between |
549 | + client, server and repeater. The communication is not strictly request |
550 | + response, but will be perceived as such by the implementation. |
551 | + When a new TCP connection is established by the client, `CA_PROTO_VERSION` |
552 | + is sent. Likewise, the server will accept the connection and send the |
553 | + response form back. Sent over UDP or TCP. |
554 | + |
555 | + |
556 | +==== Request |
557 | + |
558 | +.Header |
559 | +[options="header"] |
560 | +|==================== |
561 | +|Field|Value|Description |
562 | +|Command|0|Command identifier for `CA_PROTO_VERSION`. |
563 | +|Payload size|0|Must be 0. |
564 | +|Priority|Desired priority|Virtual circuit priority. |
565 | +|Version|Version number|Minor protocol version number. Only used when sent over TCP. |
566 | +|Reserved|0|Must be 0. |
567 | +|Reserved|0|Must be 0. |
568 | +|==================== |
569 | + |
570 | +.Compatibility |
571 | +[options="header"] |
572 | +|==================== |
573 | +|Version|Comment |
574 | +|>= `CA_V411`|Server will send response immediately after establishing a virtual circuit. |
575 | +|< `CA_V411`|Message does not include minor version number (it is always 0) and is interpreted as an echo command that carries no data. Version exchange is performed immediately after <<ca-proto-create-chan,`CA_PROTO_CREATE_CHAN`>>. |
576 | +|==================== |
577 | + |
578 | +.Comments |
579 | +* Priority indicates the server's dispatch scheduling priority which might be |
580 | + implemented by a circuit dedicated thread's scheduling priority in a |
581 | + preemptive scheduled OS. |
582 | + |
583 | + |
584 | +==== Response |
585 | + |
586 | +.Header |
587 | +[options="header"] |
588 | +|==================== |
589 | +|Field|Value|Description |
590 | +|Command|0|Command identifier for `CA_PROTO_VERSION`. |
591 | +|Reserved|0|Must be 0. |
592 | +|Priority|0|Must be 0. |
593 | +|Version|Version number|Minor protocol version number. Only used when sent over TCP. |
594 | +|Reserved|0|Must be 0. |
595 | +|Reserved|0|Must be 0. |
596 | +|==================== |
597 | + |
598 | +.Compatibility |
599 | +[options="header"] |
600 | +|==================== |
601 | +|Version|Comment |
602 | +|>= `CA_V411`|Server will not respond to request, but send response immediately after establishing a virtual circuit. |
603 | +|< `CA_V411`|Message does not include minor version number (it is always 0). |
604 | +|==================== |
605 | + |
606 | + |
607 | +[[ca-proto-search]] |
608 | +=== `CA_PROTO_SEARCH` |
609 | + |
610 | +[horizontal] |
611 | +Command:: |
612 | + `CA_PROTO_SEARCH` |
613 | +ID:: |
614 | + 6 (`0x06`) |
615 | +Description:: |
616 | + Searches for a given channel name. Sent over UDP or TCP. |
617 | + |
618 | + |
619 | +==== Request |
620 | + |
621 | +.Header |
622 | +[options="header"] |
623 | +|==================== |
624 | +|Field|Value|Description |
625 | +|Command|6|Command identifier for `CA_PROTO_SEARCH`. |
626 | +|Payload Size|>= 0|Padded size of channel name. |
627 | +|Reply|Reply Flag|<<search-reply-flag,Search Reply Flag>>, indicating whether failed search response should be returned. |
628 | +|Version|Version Number|Client minor protocol version number. |
629 | +|CID|Channel CID|Client allocated CID. |
630 | +|CID|Channel CID|Client allocated CID. |
631 | +|==================== |
632 | + |
633 | +.Payload |
634 | +[options="header"] |
635 | +|==================== |
636 | +|Name|Type|Value|Description |
637 | +|Channel name|`STRING`||Name of channel to search for. |
638 | +|==================== |
639 | + |
640 | +.Comments |
641 | +* Sent as a UDP datagram. |
642 | +* It is illegal to specify `DO_REPLY` flag whenever the message is sending as |
643 | + UDP datagram, regardless of whether broadcast or multicast is used. |
644 | +* CID will be allocated by the client before this message is sent. |
645 | +* CID field value is duplicated. |
646 | +* Reply flag will be generally `DONT_REPLY` when searching using broadcast and |
647 | + `DO_REPLY` when searching using unicast. When `DO_REPLY` is set, server will |
648 | + send a <<ca-proto-not-found,`CA_PROTO_NOT_FOUND`>> message indicating it |
649 | + does not have the requested channel. |
650 | + |
651 | + |
652 | +==== Response |
653 | + |
654 | +.Header |
655 | +[options="header"] |
656 | +|==================== |
657 | +|Field|Value|Description |
658 | +|Command|6|Command identifier for `CA_PROTO_SEARCH`. |
659 | +|Payload Size|8|Payload size is constant. |
660 | +|Data Type|Port number|TCP Port number of server that responded. |
661 | +|Data Count|0|Must be 0. |
662 | +|SID|`0xffffffff`|Temporary <<sid-server-id,SID>>. |
663 | +|CID|Same as request|Channel <<cid-client-id,CID>>. |
664 | +|==================== |
665 | + |
666 | +.Payload |
667 | +[options="header"] |
668 | +|==================== |
669 | +|Name|Type|Value|Description |
670 | +|Server protocol version|`UINT16`||Server protocol version. |
671 | +|==================== |
672 | + |
673 | +.Comments |
674 | +* Received as UDP datagram. |
675 | +* Client channel ID field value (CID) is copied from the request. |
676 | +* Port number of the server indicates on which port the server that replied |
677 | + listens to. This is used in case more than one server share the same IP. |
678 | +* Server-assigned channel ID will have value of `0xffffffff`, since the SID is |
679 | + not known at this time. Real value will be returned when channel is actually |
680 | + created using `CA_CREATE_CHAN`. |
681 | +* In `CA_V411` the server's IP address is optionally returned in the CID field |
682 | + of the header allowing a CA server to act as a directory service. |
683 | + If not, then the CID field is set to `0xffffffff`. |
684 | +* The port number included in the header is the *TCP* port of the server. |
685 | + Two servers on the same host can share a UDP port number, but not a TCP port |
686 | + number. Therefore, the port the client needs to connect to in that situation |
687 | + may not be the same as expected if this field in the response is not used. |
688 | + |
689 | + |
690 | +[[ca-proto-not-found]] |
691 | +=== `CA_PROTO_NOT_FOUND` |
692 | + |
693 | +[horizontal] |
694 | +Command:: |
695 | + `CA_PROTO_NOT_FOUND` |
696 | +ID:: |
697 | + 14 (`0x0E`) |
698 | +Description:: |
699 | + Indicates that a channel with requested name does not exist. |
700 | + Sent in response to <<ca-proto-search,`CA_PROTO_SEARCH`>>, but only when |
701 | + its `DO_REPLY` flag was set. Sent over UDP. |
702 | + |
703 | + |
704 | +==== Response |
705 | + |
706 | +.Header |
707 | +[options="header"] |
708 | +|==================== |
709 | +|Field|Value|Description |
710 | +|Command|14|Command identifier for `CA_PROTO_NOT_FOUND`. |
711 | +|Reserved|0|Must be 0. |
712 | +|Reply Flag|`DO_REPLY`|Same reply flag as in request: always `DO_REPLY`. |
713 | +|Version|Same as request|Client minor protocol version number. |
714 | +|CID|Same as request|CID of the channel. |
715 | +|CID|Same as request|CID of the channel. |
716 | +|==================== |
717 | + |
718 | +.Comments |
719 | +* Contents of the header are copied from the request. |
720 | +* CID fields are diplicated. |
721 | +* Original request payload is not returned with the response. |
722 | + |
723 | + |
724 | +[[ca-proto-echo]] |
725 | +=== `CA_PROTO_ECHO` |
726 | + |
727 | +[horizontal] |
728 | +Command:: |
729 | + `CA_PROTO_ECHO` |
730 | +ID:: |
731 | + 23 (`0x17`) |
732 | +Description:: |
733 | + Connection verify used by `CA_V43`. Sent over TCP. |
734 | + |
735 | + |
736 | +==== Request |
737 | + |
738 | +.Header |
739 | +[options="header"] |
740 | +|==================== |
741 | +|Field|Value|Description |
742 | +|Command|23|Command identifier for `CA_PROTO_ECHO`. |
743 | +|Reserved|0|Must be 0. |
744 | +|Reserved|0|Must be 0. |
745 | +|Reserved|0|Must be 0. |
746 | +|Reserved|0|Must be 0. |
747 | +|Reserved|0|Must be 0. |
748 | +|==================== |
749 | + |
750 | + |
751 | +==== Response |
752 | + |
753 | +.Header |
754 | +[options="header"] |
755 | +|==================== |
756 | +|Field|Value|Description |
757 | +|Command|23|Command identifier for `CA_PROTO_ECHO`. |
758 | +|Reserved|0|Must be 0. |
759 | +|Reserved|0|Must be 0. |
760 | +|Reserved|0|Must be 0. |
761 | +|Reserved|0|Must be 0. |
762 | +|Reserved|0|Must be 0. |
763 | +|==================== |
764 | + |
765 | + |
766 | +== Commands (UDP) |
767 | + |
768 | +The following commands are sent as UDP datagrams. |
769 | + |
770 | + |
771 | +[[ca-proto-rsrv-is-up]] |
772 | +=== `CA_PROTO_RSRV_IS_UP` |
773 | + |
774 | +[horizontal] |
775 | +Command:: |
776 | + `CA_PROTO_RSRV_IS_UP` |
777 | +ID:: |
778 | + 13 (`0x0D`) |
779 | +Description:: |
780 | + Beacon sent by a server when it becomes available. Beacons are also sent |
781 | + out periodically to announce the server is still alive. Another function |
782 | + of beacons is to allow detection of changes in network topology. |
783 | + Sent over UDP. |
784 | + |
785 | + |
786 | +==== Response |
787 | + |
788 | +.Header |
789 | +[options="header"] |
790 | +|==================== |
791 | +|Field|Value|Description |
792 | +|Command|13|Command identifier for `CA_PROTO_RSRV_IS_UP`. |
793 | +|Reserved|0|Must be 0. |
794 | +|Server port|>= 0|TCP Port the server is listening on. |
795 | +|Reserved|0|Must be 0. |
796 | +|BeaconID|Sequential integers|Sequential Beacon ID. |
797 | +|Address|0 or IP|May contain IP address of the server. |
798 | +|==================== |
799 | + |
800 | +.Comments |
801 | +* IP field may contain IP of the server. If IP is not present (field Address |
802 | + value is 0), then IP may be substituted by the receiver of the packet |
803 | + (usually repeater) if it is capable of identifying where this packet came |
804 | + from. Any non-zero address must be interpreted as server's IP address. |
805 | +* BeaconIDs are useful in detecting network topology changes. In certain |
806 | + cases, same packet may be routed using two different routes, causing |
807 | + problems with datagrams. If multiple beacons are received from the same |
808 | + server with same BeaconID, multiple routes are the cause. |
809 | +* If a server is restarted, it will most likely start sending BeaconID values |
810 | + from beggining (0). Such situation must be anticipated. |
811 | + |
812 | + |
813 | +[[ca-repeater-confirm]] |
814 | +=== `CA_REPEATER_CONFIRM` |
815 | + |
816 | +[horizontal] |
817 | +Command:: |
818 | + `CA_REPEATER_CONFIRM` |
819 | +ID:: |
820 | + 17 (`0x11`) |
821 | +Description:: |
822 | + Confirms successful client registration with repeater. Sent over UDP. |
823 | + |
824 | + |
825 | +==== Response |
826 | + |
827 | +.Header |
828 | +[options="header"] |
829 | +|==================== |
830 | +|Field|Value|Description |
831 | +|Command|17|Command identifier for `CA_REPEATER_CONFIRM`. |
832 | +|Reserved|0|Must be 0. |
833 | +|Reserved|0|Must be 0. |
834 | +|Reserved|0|Must be 0. |
835 | +|Reserved|0|Must be 0. |
836 | +|Repeater address|IP address|Address with which the registration succeeded. |
837 | +|==================== |
838 | + |
839 | +.Comments |
840 | +* Since repeater can bind to different local address, its IP is reported in |
841 | + Repeater address. This address will be either `0.0.0.0` or `127.0.0.1`. |
842 | + |
843 | + |
844 | +[[ca-repeater-register]] |
845 | +=== `CA_REPEATER_REGISTER` |
846 | + |
847 | +[horizontal] |
848 | +Command:: |
849 | + `CA_REPEATER_REGISTER` |
850 | +ID:: |
851 | + 24 (`0x18`) |
852 | +Description:: |
853 | + Requests registration with the repeater. Repeater will confirm successful |
854 | + registration using `CA_REPEATER_CONFIRM`. Sent over TCP. |
855 | + |
856 | + |
857 | +==== Request |
858 | + |
859 | +.Header |
860 | +[options="header"] |
861 | +|==================== |
862 | +|Field|Value|Description |
863 | +|Command|`CA_REPEATER_REGISTER`|Command identifier |
864 | +|Reserved|0|Must be 0 |
865 | +|Reserved|0|Must be 0 |
866 | +|Reserved|0|Must be 0 |
867 | +|Reserved|0|Must be 0 |
868 | +|Client IP address|IP address|IP address on which the client is listening |
869 | +|==================== |
870 | + |
871 | + |
872 | +== Commands (TCP) |
873 | + |
874 | +The following commands are used within the context of Virtual Circuit and are |
875 | +sent using TCP. |
876 | + |
877 | + |
878 | +[[ca-proto-event-add]] |
879 | +=== `CA_PROTO_EVENT_ADD` |
880 | + |
881 | +[horizontal] |
882 | +Command:: |
883 | + `CA_PROTO_EVENT_ADD` |
884 | +ID:: |
885 | + 1 (`0x01`) |
886 | +Description:: |
887 | + Creates a subscription on a channel, allowing the client to be notified of |
888 | + changes in value. A request will produce at least one response. |
889 | + Sent over TCP. |
890 | + |
891 | + |
892 | +==== Request |
893 | + |
894 | +.Header |
895 | +[options="header"] |
896 | +|==================== |
897 | +|Field|Value|Description |
898 | +|Command|1|Command identifier for `CA_PROTO_EVENT_ADD` |
899 | +|Payload Size|16|Payload size is constant |
900 | +|Data Type||Desired DBR type of the return value. |
901 | +|Data Count|>= 0|Desired number of elements |
902 | +|SID|SID of the channel.|SID of the channel on which to register this subscription. See <<sid-server-id,SID - Server ID>>. |
903 | +|SubscriptionID|Client provided Subscription ID|Subscription ID identifying this subscription.See <<subscription-id,Subscription ID>>. |
904 | +|==================== |
905 | + |
906 | +Payload |
907 | +[options="header"] |
908 | +|==================== |
909 | +|Name|Type|Value|Description |
910 | +|Low val|`FLOAT32`|0.0|Low value |
911 | +|High val|`FLOAT32`|0.0|High value |
912 | +|To val|`FLOAT32`|0.0|To value |
913 | +|Mask|`UINT16`|Monitor mask|<<monitor-mask,Mask>> indicating which events to report |
914 | +|==================== |
915 | + |
916 | +.Comments |
917 | +* All payload fields except Mask are initialized to 0 and are present only for |
918 | + backward compatibility. |
919 | +* Successful subscription will result in an immediate response with the |
920 | + current value. Additional responses will be sent as the change occurs based |
921 | + on the Mask parameter. |
922 | +* Mask defines a filter on which events will be sent. |
923 | +* A subscription should be destroyed when no longer needed to reduce load on |
924 | + server. See <<ca-proto-event-cancel,`CA_PROTO_EVENT_CANCEL`>>. |
925 | + |
926 | + |
927 | +==== Response |
928 | + |
929 | +.Header |
930 | +[options="header"] |
931 | +|==================== |
932 | +|Field|Value|Description |
933 | +|Command|1|Command identifier for `CA_PROTO_EVENT_ADD` |
934 | +|Payload Size|>= 0|Size of the response. |
935 | +|Data Type|same as request|Payload data type. |
936 | +|Data Count|same as request|Payload data count. |
937 | +|Status code|One of ECA codes|<<return-codes,Status code>> (`ECA_NORMAL` on success). |
938 | +|SubscriptionID|same as request|Subscription ID |
939 | +|==================== |
940 | + |
941 | +.Payload |
942 | +[options="header"] |
943 | +|==================== |
944 | +|Name|Type|Value|Description |
945 | +|Values|DBR||Value stored as DBR type specified in Data Type field. See <<payload-data-types,Payload Data Types>>. |
946 | +|==================== |
947 | + |
948 | +.Comments |
949 | +* Response data type and count match that of the request. |
950 | +* To confirm successful subscription, first response will be sent immediately. |
951 | + Additional responses will be sent as the change occurs based on mask |
952 | + parameters. |
953 | + |
954 | + |
955 | +[[ca-proto-event-cancel]] |
956 | +=== `CA_PROTO_EVENT_CANCEL` |
957 | + |
958 | +[horizontal] |
959 | +Command:: |
960 | + `CA_PROTO_EVENT_CANCEL` |
961 | +ID:: |
962 | + 2 (`0x02`) |
963 | +Description:: |
964 | + Clears event subscription. This message will stop event updates for |
965 | + specified channel. Sent over TCP. |
966 | + |
967 | + |
968 | +==== Request |
969 | + |
970 | +.Header |
971 | +[options="header"] |
972 | +|==================== |
973 | +|Field|Value|Description |
974 | +|Command|2|Command identifier for `CA_PROTO_EVENT_CANCEL`. |
975 | +|Payload Size|0|Must be 0. |
976 | +|Data Type||Same value as in corresponding <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>>. |
977 | +|Data Count|>= 0|Same value as in corresponding <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>>. |
978 | +|SID|SID of channel|Same value as in corresponding <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>>. |
979 | +|SubscriptionID|Subscription ID|Same value as in corresponding <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>>. |
980 | +|==================== |
981 | + |
982 | +.Comments |
983 | +* Both SID and SubscriptionID are used to identify which subscription on which |
984 | + monitor to destroy. |
985 | +* Actual data type and count values are not important, but should be the same |
986 | + as used with corresponding <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>>. |
987 | + |
988 | + |
989 | +==== Response |
990 | + |
991 | +.Header |
992 | +[options="header"] |
993 | +|==================== |
994 | +|Field|Value|Description |
995 | +|Command|1|Command identifier for `CA_PROTO_EVENT_ADD`. |
996 | +|Payload Size|0|Must be 0. |
997 | +|Data Type|Same as request.|Same value as `CA_PROTO_EVENT_ADD` request. |
998 | +|Data Count|0|Must be 0. |
999 | +|SID|Same as request.|Same value as `CA_PROTO_EVENT_ADD` request. |
1000 | +|SubscriptionID|Same as request.|Same value as `CA_PROTO_EVENT_ADD` request. |
1001 | +|==================== |
1002 | + |
1003 | +.Comments |
1004 | +* Notice that the response has <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> |
1005 | + command identifier! |
1006 | +* Regardless of data type and count, this response has no payload. |
1007 | + |
1008 | + |
1009 | +[[ca-proto-read]] |
1010 | +=== `CA_PROTO_READ` |
1011 | + |
1012 | +[horizontal] |
1013 | +Command:: |
1014 | + `CA_PROTO_READ` |
1015 | +ID:: |
1016 | + 3 (`0x03`) |
1017 | +Description:: |
1018 | + |
1019 | +Read value of a channel. Sent over TCP. |
1020 | + |
1021 | +*Deprecated since protocol version 3.13.* |
1022 | + |
1023 | + |
1024 | +==== Request |
1025 | + |
1026 | +.Header |
1027 | +[options="header"] |
1028 | +|==================== |
1029 | +|Field|Value|Description |
1030 | +|Command|3|Command identifier for `CA_PROTO_READ_NOTIFY`. |
1031 | +|Payload Size|0|Must be 0. |
1032 | +|Data Type|DBR type|Desired type of the return value. |
1033 | +|Data Count|>= 0|Desired number of elements to read. |
1034 | +|SID|Channel SID|SID of the channel to read. |
1035 | +|IOID|Client provided IOID|IOID of this operation. |
1036 | +|==================== |
1037 | + |
1038 | +.Comments |
1039 | +* Channel from which to read is identified using SID. |
1040 | +* Response will contain the same IOID as the request, making it possible to |
1041 | + distinguish multiple responses. |
1042 | + |
1043 | + |
1044 | +==== Response |
1045 | + |
1046 | +.Header |
1047 | +[options="header"] |
1048 | +|==================== |
1049 | +|Field|Value|Description |
1050 | +|Command|3|Command identifier for `CA_PROTO_READ_NOTIFY`. |
1051 | +|Payload size|Size of payload|Size of DBR formatted data in payload. |
1052 | +|Data type|DBR type|Payload format. |
1053 | +|Data count|>= 0|Payload element count. |
1054 | +|SID|Same as request|SID of the channel. |
1055 | +|IOID|Same as request|IOID of this operation. |
1056 | +|==================== |
1057 | + |
1058 | +.Payload |
1059 | +[options="header"] |
1060 | +|==================== |
1061 | +|Name|Type|Value|Description |
1062 | +|DBR formatted data|DBR|DBR formatted data|Value stored as DBR type specified in Data type field. Data count specifies number of elements of DBR value field. |
1063 | +|==================== |
1064 | + |
1065 | + |
1066 | +[[ca-proto-write]] |
1067 | +=== `CA_PROTO_WRITE` |
1068 | + |
1069 | +[horizontal] |
1070 | +Command:: |
1071 | + `CA_PROTO_WRITE` |
1072 | +ID:: |
1073 | + 4 (`0x04`) |
1074 | +Description:: |
1075 | + Writes new channel value. Sent over TCP. |
1076 | + |
1077 | + |
1078 | +==== Request |
1079 | + |
1080 | +.Header |
1081 | +[options="header"] |
1082 | +|==================== |
1083 | +|Field|Value|Description |
1084 | +|Command|`CA_PROTO_WRITE`|Command identifier |
1085 | +|Payload size|Size of DBR formatted payload|Size of padded payload |
1086 | +|Data type|DBR type|Format of payload |
1087 | +|Data count|`ELEMENT_COUNT`|Number of elements in payload |
1088 | +|SID|SID provided by server|Server channel ID |
1089 | +|IOID|Client provided IOID|Request ID |
1090 | +|==================== |
1091 | + |
1092 | +.Payload |
1093 | +[options="header"] |
1094 | +|==================== |
1095 | +|Name|Type|Value|Description |
1096 | +|DBR formatted data|DBR|DBR formatted data|Value stored as DBR type specified in Data type field. Data count specifies number of elements of DBR value field. |
1097 | +|==================== |
1098 | + |
1099 | +.Comments |
1100 | +* There is no response to this command. |
1101 | + |
1102 | + |
1103 | +[[ca-proto-snapshot]] |
1104 | +=== `CA_PROTO_SNAPSHOT` |
1105 | + |
1106 | +[horizontal] |
1107 | +Command:: |
1108 | + `CA_PROTO_SNAPSHOT` |
1109 | +ID:: |
1110 | + 5 (`0x05`) |
1111 | +Description:: |
1112 | + Obsolete. |
1113 | + |
1114 | + |
1115 | +[[ca-proto-build]] |
1116 | +=== `CA_PROTO_BUILD` |
1117 | + |
1118 | +[horizontal] |
1119 | +Command:: |
1120 | + `CA_PROTO_BUILD` |
1121 | +ID:: |
1122 | + 7 (`0x07`) |
1123 | +Description:: |
1124 | + Obsolete. |
1125 | + |
1126 | + |
1127 | +[[ca-proto-events-off]] |
1128 | +=== `CA_PROTO_EVENTS_OFF` |
1129 | + |
1130 | +[horizontal] |
1131 | +Command:: |
1132 | + `CA_PROTO_EVENTS_OFF` |
1133 | +ID:: |
1134 | + 8 (`0x08`) |
1135 | +Description:: |
1136 | + Disables a server from sending any subscription updates over this virtual |
1137 | + circuit. Sent over TCP. This mechanism is used by clients with slow CPU to |
1138 | + prevent congestion when they are unable to handle all updates received. |
1139 | + Effective automated handling of flow control is beyond the scope of this |
1140 | + document. |
1141 | + |
1142 | + |
1143 | +==== Request |
1144 | + |
1145 | +.Header |
1146 | +[options="header"] |
1147 | +|==================== |
1148 | +|Field|Value|Description |
1149 | +|Command|8|Command identifier for `CA_PROTO_EVENTS_OFF` |
1150 | +|Reserved|0|Must be 0. |
1151 | +|Reserved|0|Must be 0. |
1152 | +|Reserved|0|Must be 0. |
1153 | +|Reserved|0|Must be 0. |
1154 | +|Reserved|0|Must be 0. |
1155 | +|==================== |
1156 | + |
1157 | +.Comments |
1158 | +* This request will disable sending of subscription updates on the server to |
1159 | + which it is sent. |
1160 | +* Command applies to a single virtual circuit, so having multiple priority |
1161 | + virtual circuit connections to the server would only affect the one on which |
1162 | + the message is sent. |
1163 | +* No response will be sent for this request. |
1164 | + |
1165 | + |
1166 | +[[ca-proto-events-on]] |
1167 | +=== `CA_PROTO_EVENTS_ON` |
1168 | + |
1169 | +[horizontal] |
1170 | +Command:: |
1171 | + `CA_PROTO_EVENTS_ON` |
1172 | +ID:: |
1173 | + 9 (`0x09`) |
1174 | +Description:: |
1175 | + Enables the server to resume sending subscription updates for this virtual |
1176 | + circuit. Sent over TCP. This mechanism is used by clients with slow CPU to |
1177 | + prevent congestion when they are unable to handle all updates received. |
1178 | + Effective automated handling of flow control is beyond the scope of this |
1179 | + document. |
1180 | + |
1181 | + |
1182 | +==== Request |
1183 | + |
1184 | +.Header |
1185 | +[options="header"] |
1186 | +|==================== |
1187 | +|Field|Value|Description |
1188 | +|Command|9|Command identifier for `CA_PROTO_EVENTS_ON` |
1189 | +|Reserved|0|Must be 0. |
1190 | +|Reserved|0|Must be 0. |
1191 | +|Reserved|0|Must be 0. |
1192 | +|Reserved|0|Must be 0. |
1193 | +|Reserved|0|Must be 0. |
1194 | +|==================== |
1195 | + |
1196 | +.Comments |
1197 | +* This request will enable sending of subscription updates on the server to |
1198 | + which it is sent. |
1199 | +* Command applies to a single virtual circuit, so having multiple priority |
1200 | + virtual circuit connections to the server would only affect the one on which |
1201 | + the message is sent. |
1202 | +* No response will be sent for this request. |
1203 | + |
1204 | + |
1205 | +[[ca-proto-read-sync]] |
1206 | +=== `CA_PROTO_READ_SYNC` |
1207 | + |
1208 | +[horizontal] |
1209 | +Command:: |
1210 | + `CA_PROTO_READ_SYNC` |
1211 | +ID:: |
1212 | + 10 (`0x0A`) |
1213 | +Description:: |
1214 | + *Deprecated since protocol version 3.13.* |
1215 | + |
1216 | + |
1217 | +==== Request |
1218 | + |
1219 | +.Header |
1220 | +[options="header"] |
1221 | +|==================== |
1222 | +|Field|Value|Description |
1223 | +|Command|10|Command identifier for `CA_PROTO_READ_SYNC`. |
1224 | +|Reserved|0|Must be 0. |
1225 | +|Reserved|0|Must be 0. |
1226 | +|Reserved|0|Must be 0. |
1227 | +|Reserved|0|Must be 0. |
1228 | +|Reserved|0|Must be 0. |
1229 | +|==================== |
1230 | + |
1231 | + |
1232 | +[[ca-proto-error]] |
1233 | +=== `CA_PROTO_ERROR` |
1234 | + |
1235 | +[horizontal] |
1236 | +Command:: |
1237 | + `CA_PROTO_ERROR` |
1238 | +ID:: |
1239 | + 11 (`0x0B`) |
1240 | +Description:: |
1241 | + Sends error message and code. This message is only sent from server to |
1242 | + client in response to any request that fails and does not include error |
1243 | + code in response. This applies to all asynchronous commands. Error message |
1244 | + will contain a copy of original request and textual description of the |
1245 | + error. Sent over UDP. |
1246 | + |
1247 | + |
1248 | +==== Response |
1249 | + |
1250 | +.Header |
1251 | +[options="header"] |
1252 | +|==================== |
1253 | +|Field|Value|Description |
1254 | +|Command|11|Command identifier for `CA_PROTO_ERROR` |
1255 | +|Payload Size||Size of the request header that triggered the error plus size of the error message. |
1256 | +|Reserved|0|Must be 0. |
1257 | +|Reserved|0|Must be 0. |
1258 | +|CID|Channel CID|<<cid-client-id,CID>> of the channel for which request failed. |
1259 | +|Status Code|One of ECA codes|<<return-codes,Error status code>>. |
1260 | +|==================== |
1261 | + |
1262 | +.Payload |
1263 | +[options="header"] |
1264 | +|==================== |
1265 | +|Name|Type|Value|Description |
1266 | +|Original Request|Message Header||Header of the request that caused the error. |
1267 | +|Error Message|`STRING`||A null-terminated string conveying the error message. |
1268 | +|==================== |
1269 | + |
1270 | +.Comments |
1271 | +* Complete exception report is returned. This includes error message code, CID |
1272 | + of channel on which the request failed, original request and string |
1273 | + description of the message. |
1274 | +* CID value depends on original request and may not actually identify a |
1275 | + channel. |
1276 | +* First part of payload is original request header with the same structure as |
1277 | + sent. Any payload that was part of this request is not included. |
1278 | + Textual error message starts immediately after the header. |
1279 | + |
1280 | + |
1281 | +[[ca-proto-clear-channel]] |
1282 | +=== `CA_PROTO_CLEAR_CHANNEL` |
1283 | + |
1284 | +[horizontal] |
1285 | +Command:: |
1286 | + `CA_PROTO_CLEAR_CHANNEL` |
1287 | +ID:: |
1288 | + 12 (`0x0C`) |
1289 | +Description:: |
1290 | + Clears a channel. This command will cause server to release the associated |
1291 | + channel resources and no longer accept any requests for this SID/CID. |
1292 | + |
1293 | + |
1294 | +==== Request |
1295 | + |
1296 | +.Header |
1297 | +[options="header"] |
1298 | +|==================== |
1299 | +|Field|Value|Description |
1300 | +|Command|12|Command identifier of `CA_PROTO_CLEAR_COMMAND` |
1301 | +|Reserved|0|Must be 0. |
1302 | +|Reserved|0|Must be 0. |
1303 | +|Reserved|0|Must be 0. |
1304 | +|SID|SID of the channel|SID of channel to clear. |
1305 | +|CID|CID of the channel|CID of channel to clear. |
1306 | +|==================== |
1307 | + |
1308 | + |
1309 | +==== Response |
1310 | + |
1311 | +.Header |
1312 | +[options="header"] |
1313 | +|==================== |
1314 | +|Field|Value|Description |
1315 | +|Command|12|Command identifier of `CA_PROTO_CLEAR_COMMAND` |
1316 | +|Reserved|0|Must be 0. |
1317 | +|Reserved|0|Must be 0. |
1318 | +|Reserved|0|Must be 0. |
1319 | +|SID|Same as request|SID of cleared channel. |
1320 | +|CID|Same as request|CID of cleared channel. |
1321 | +|==================== |
1322 | + |
1323 | +.Comments |
1324 | +* Server responds immediately and only then releases channel resources. |
1325 | +* Once a channel with a given SID has been cleared, any request sent with this |
1326 | + SID will fail. |
1327 | +* Sent over TCP. |
1328 | + |
1329 | + |
1330 | +[[ca-proto-read-notify]] |
1331 | +=== `CA_PROTO_READ_NOTIFY` |
1332 | + |
1333 | +[horizontal] |
1334 | +Command:: |
1335 | + `CA_PROTO_READ_NOTIFY` |
1336 | +ID:: |
1337 | + 15 (`0x0F`) |
1338 | +Description:: |
1339 | + Read value of a channel. Sent over TCP. |
1340 | + |
1341 | + |
1342 | +==== Request |
1343 | + |
1344 | +.Header |
1345 | +[options="header"] |
1346 | +|==================== |
1347 | +|Field|Value|Description |
1348 | +|Command|15|Command identifier for `CA_PROTO_READ_NOTIFY`. |
1349 | +|Payload Size|0|Must be 0. |
1350 | +|Data Type|DBR type|Desired type of the return value. |
1351 | +|Data Count|>= 0|Desired number of elements to read. |
1352 | +|SID|Channel SID|SID of the channel to read. |
1353 | +|IOID|Client provided IOID|IOID of this operation. |
1354 | +|==================== |
1355 | + |
1356 | +.Comments |
1357 | +* Channel from which to read is identified using SID. |
1358 | +* Response will contain the same IOID as the request, making it possible to |
1359 | + distinguish multiple responses. |
1360 | + |
1361 | + |
1362 | +==== Response |
1363 | + |
1364 | +.Header |
1365 | +[options="header"] |
1366 | +|==================== |
1367 | +|Field|Value|Description |
1368 | +|Command|15|Command identifier for `CA_PROTO_READ_NOTIFY`. |
1369 | +|Payload size|Size of payload|Size of DBR formatted data in payload. |
1370 | +|Data type|DBR type|Payload format. |
1371 | +|Data count|>= 0|Payload element count. |
1372 | +|SID|Same as request|SID of the channel. |
1373 | +|IOID|Same as request|IOID of this operation. |
1374 | +|==================== |
1375 | + |
1376 | +.Payload |
1377 | +[options="header"] |
1378 | +|==================== |
1379 | +|Name|Type|Value|Description |
1380 | +|DBR formatted data|DBR|DBR formatted data|Value stored as DBR type specified in Data type field. Data count specifies number of elements of DBR value field. |
1381 | +|==================== |
1382 | + |
1383 | + |
1384 | +[[ca-proto-read-build]] |
1385 | +=== `CA_PROTO_READ_BUILD` |
1386 | + |
1387 | +[horizontal] |
1388 | +Command:: |
1389 | + `CA_PROTO_READ_BUILD` |
1390 | +ID:: |
1391 | + 16 (`0x10`) |
1392 | +Description:: |
1393 | + Obsolete |
1394 | + |
1395 | + |
1396 | +==== Request |
1397 | + |
1398 | + |
1399 | +[[ca-proto-create-chan]] |
1400 | +=== `CA_PROTO_CREATE_CHAN` |
1401 | + |
1402 | +[horizontal] |
1403 | +Command:: |
1404 | + `CA_PROTO_CREATE_CHAN` |
1405 | +ID:: |
1406 | + 18 (`0x12`) |
1407 | +Description:: |
1408 | + Requests creation of channel. Server will allocate required resources and |
1409 | + return initialized SID. Sent over TCP. |
1410 | + |
1411 | + |
1412 | +==== Request |
1413 | + |
1414 | +.Header |
1415 | +[options="header"] |
1416 | +|==================== |
1417 | +|Field|Value|Description |
1418 | +|Command|18|Command identifier for `CA_PROTO_CREATE_CHAN` |
1419 | +|Payload size|Size of payload|Padded length of channel name. |
1420 | +|Reserved|0|Must be 0. |
1421 | +|Reserved|0|Must be 0. |
1422 | +|CID|Channel CID|CID of the channel to create. |
1423 | +|Client version|Version number|Client minor protocol version. |
1424 | +|==================== |
1425 | + |
1426 | +.Payload |
1427 | +|[options="header"] |
1428 | +|==================== |
1429 | +|Name|Type|Value|Description |
1430 | +|Channel name|`STRING`||Name of channel to create. |
1431 | +|==================== |
1432 | + |
1433 | +.Comments |
1434 | +* CID sent should be the same as used with `CA_PROTO_SEARCH`. |
1435 | + |
1436 | + |
1437 | +==== Response |
1438 | + |
1439 | +.Header |
1440 | +[options="header"] |
1441 | +|==================== |
1442 | +|Field|Value|Description |
1443 | +|Command|`CA_PROTO_CREATE_CHAN`| |
1444 | +|Payload size|0|Must be 0 |
1445 | +|Data type|DBR type|Native channel data type |
1446 | +|Data count|>= 0|Native channel data count |
1447 | +|CID|Same as request|Channel client ID |
1448 | +|SID|SID provided by server|Channel server ID |
1449 | +|==================== |
1450 | + |
1451 | +.Comments |
1452 | +* SID will be associated with CID on the server and will be reused sending |
1453 | + certain commands that require it as a parameter. |
1454 | +* SID will be valid until the channel is cleared using `CA_PROTO_CLEAR` or |
1455 | + server destroys the PV the channel references. |
1456 | + |
1457 | + |
1458 | +[[ca-proto-write-notify]] |
1459 | +=== `CA_PROTO_WRITE_NOTIFY` |
1460 | + |
1461 | +[horizontal] |
1462 | +Command:: |
1463 | + `CA_PROTO_WRITE_NOTIFY` |
1464 | +ID:: |
1465 | + 19 (`0x13`) |
1466 | +Description:: |
1467 | + Writes new channel value. Sent over TCP. |
1468 | + |
1469 | + |
1470 | +==== Request |
1471 | + |
1472 | +.Header |
1473 | +[options="header"] |
1474 | +|==================== |
1475 | +|Field|Value|Description |
1476 | +|Command|`CA_PROTO_WRITE_NOTIFY`|Command identifier |
1477 | +|Payload size|Size of DBR formatted payload|Size of padded payload |
1478 | +|Data type|DBR type|Format of payload |
1479 | +|Data count|`ELEMENT_COUNT`|Number of elements in payload |
1480 | +|SID|SID provided by server|Server channel ID |
1481 | +|IOID|Client provided IOID|Request ID |
1482 | +|==================== |
1483 | + |
1484 | +.Payload |
1485 | +[options="header"] |
1486 | +|==================== |
1487 | +|Name|Type|Value|Description |
1488 | +|DBR formatted data|DBR|DBR formatted data|Value stored as DBR type specified in Data type field. Data count specifies number of elements of DBR value field. |
1489 | +|==================== |
1490 | + |
1491 | + |
1492 | +==== Response |
1493 | + |
1494 | +.Header |
1495 | +[options="header"] |
1496 | +|==================== |
1497 | +|Field|Value|Description |
1498 | +|Command|`CA_PROTO_WRITE_NOTIFY`|Command identifier |
1499 | +|Payload size|0|Must be 0 |
1500 | +|Data type|Same as request|Format of data written |
1501 | +|Data count|Same as request|Number of elements written |
1502 | +|Status|Status code|Status of write success |
1503 | +|IOID|Same as request|Request ID |
1504 | +|==================== |
1505 | + |
1506 | + |
1507 | +[[ca-proto-client-name]] |
1508 | +=== `CA_PROTO_CLIENT_NAME` |
1509 | + |
1510 | +[horizontal] |
1511 | +Command:: |
1512 | + `CA_PROTO_CLIENT_NAME` |
1513 | +ID:: |
1514 | + 20 (`0x14`) |
1515 | +Description:: |
1516 | + Sends local username to virtual circuit peer. This name identifies the |
1517 | + user and affects access rights. |
1518 | + |
1519 | + |
1520 | +==== Request |
1521 | + |
1522 | +.Header |
1523 | +[options="header"] |
1524 | +|==================== |
1525 | +|Field|Value|Description |
1526 | +|Command|`CA_PROTO_CLIENT_NAME`|Command identifier |
1527 | +|Payload size|>=0|Length of string in payload |
1528 | +|Reserved|0|Must be 0 |
1529 | +|Reserved|0|Must be 0 |
1530 | +|Reserved|0|Must be 0 |
1531 | +|Reserved|0|Must be 0 |
1532 | +|==================== |
1533 | + |
1534 | +.Payload |
1535 | +[options="header"] |
1536 | +|==================== |
1537 | +|Name|Type|Value|Description |
1538 | +|User name|`STRING`||0-terminated username string |
1539 | +|==================== |
1540 | + |
1541 | +.Comments |
1542 | +* This is a one-way message and will not receive response. |
1543 | +* String in payload must be 0 padded to a length that is multiple of 8. |
1544 | +* Sent over TCP. |
1545 | + |
1546 | + |
1547 | +[[ca-proto-host-name]] |
1548 | +=== `CA_PROTO_HOST_NAME` |
1549 | + |
1550 | +[horizontal] |
1551 | +Command:: |
1552 | + `CA_PROTO_HOST_NAME` |
1553 | +ID:: |
1554 | + 21 (`0x15`) |
1555 | +Description:: |
1556 | + Sends local host name to virtual circuit peer. This name will affect |
1557 | + access rights. Sent over TCP. |
1558 | + |
1559 | + |
1560 | +==== Request |
1561 | + |
1562 | +.Header |
1563 | +[options="header"] |
1564 | +|==================== |
1565 | +|Field|Value|Description |
1566 | +|Command|21|Command identifier for `CA_PROTO_HOST_NAME`. |
1567 | +|Payload size|Size of payload|Length of host name string. |
1568 | +|Reserved|0|Must be 0. |
1569 | +|Reserved|0|Must be 0. |
1570 | +|Reserved|0|Must be 0. |
1571 | +|Reserved|0|Must be 0. |
1572 | +|==================== |
1573 | + |
1574 | +.Payload |
1575 | +[options="header"] |
1576 | +|==================== |
1577 | +|Name|Type|Value|Description |
1578 | +|Host name|`STRING`||Client host name. |
1579 | +|==================== |
1580 | + |
1581 | +.Comments |
1582 | +* This is one-way message and will receive no response. |
1583 | + |
1584 | + |
1585 | +[[ca-proto-access-rights]] |
1586 | +=== `CA_PROTO_ACCESS_RIGHTS` |
1587 | + |
1588 | +[horizontal] |
1589 | +Command:: |
1590 | + `CA_PROTO_ACCESS_RIGHTS` |
1591 | +ID:: |
1592 | + 22 (`0x16`) |
1593 | +Description:: |
1594 | + Notifies of access rights for a channel. This value is determined based on |
1595 | + host and client name and may change during runtime. Client cannot change |
1596 | + access rights nor can it explicitly query its value, so last received |
1597 | + value must be stored. |
1598 | + |
1599 | + |
1600 | +==== Response |
1601 | + |
1602 | +.Header |
1603 | +[options="header"] |
1604 | +|==================== |
1605 | +|Field|Value|Description |
1606 | +|Command|22|Command identifier for `CA_PROTO_ACCESS_RIGHTS`. |
1607 | +|Payload size|0|Must be 0. |
1608 | +|Reserved|0|Must be 0. |
1609 | +|Reserved|0|Must be 0. |
1610 | +|CID|Channel CID|Channel affected by change. |
1611 | +|Access Rights|Access Rights|<<access-rights,Access rights>> for given channel. |
1612 | +|==================== |
1613 | + |
1614 | +.Comments |
1615 | +* Access Rights affect `CA_PROTO_READ_NOTIFY`, `CA_PROTO_WRITE_NOTIFY` and |
1616 | + `CA_PROTO_WRITE`. |
1617 | +* `CA_PROTO_ACCESS_RIGHTS` will be sent immediately after a channel is created |
1618 | + using `CA_PROTO_CREATE_CHAN`. If they change during runtime, this message |
1619 | + sent to report new value. |
1620 | +* Changes are only sent to currently connected channels, since it requires |
1621 | + valid CID. |
1622 | +* Sent over TCP. |
1623 | + |
1624 | + |
1625 | +[[ca-proto-signal]] |
1626 | +=== `CA_PROTO_SIGNAL` |
1627 | + |
1628 | +[horizontal] |
1629 | +Command:: |
1630 | + `CA_PROTO_SIGNAL` |
1631 | +ID:: |
1632 | + 25 (`0x19`) |
1633 | +Description:: |
1634 | + Obsolete. |
1635 | + |
1636 | + |
1637 | +[[ca-proto-create-ch-fail]] |
1638 | +=== `CA_PROTO_CREATE_CH_FAIL` |
1639 | + |
1640 | +[horizontal] |
1641 | +Command:: |
1642 | + `CA_PROTO_CREATE_CH_FAIL` |
1643 | +ID:: |
1644 | + 26 (`0x1A`) |
1645 | +Description:: |
1646 | + Reports that channel creation failed. This response is sent to when |
1647 | + channel creation in `CA_PROTO_CREATE_CHAN` fails. |
1648 | + |
1649 | + |
1650 | +==== Response |
1651 | + |
1652 | +.Header |
1653 | +[options="header"] |
1654 | +|==================== |
1655 | +|Field|Value|Description |
1656 | +|Command|`CA_PROTO_CREATE_CH_FAIL`|Command identifier |
1657 | +|Reserved|0|Must be 0 |
1658 | +|Reserved|0|Must be 0 |
1659 | +|Reserved|0|Must be 0 |
1660 | +|CID|Same as request|Client channel ID |
1661 | +|Reserved|0|Must be 0 |
1662 | +|==================== |
1663 | + |
1664 | +.Comments |
1665 | +* Sent over TCP. |
1666 | + |
1667 | + |
1668 | +[[ca-proto-server-disconn]] |
1669 | +=== `CA_PROTO_SERVER_DISCONN` |
1670 | + |
1671 | +[horizontal] |
1672 | +Command:: |
1673 | + `CA_PROTO_SERVER_DISCONN` |
1674 | +ID:: |
1675 | + 27 (`0x1B`) |
1676 | +Description:: |
1677 | + Notifies the client that server has disconnected the channel. This may be |
1678 | + since the channel has been destroyed on server. Sent over TCP. |
1679 | + |
1680 | + |
1681 | +==== Response |
1682 | + |
1683 | +.Header |
1684 | +[options="header"] |
1685 | +|==================== |
1686 | +|Field|Value|Description |
1687 | +|Command|`CA_PROTO_SERVER_DISCONN`|Command identifier |
1688 | +|Reserved|0|Must be 0 |
1689 | +|Reserved|0|Must be 0 |
1690 | +|Reserved|0|Must be 0 |
1691 | +|CID|CID provided by client|CID that was provided during `CA_PROTO_CREATE_CHAN` |
1692 | +|Reserved|0|Must be 0 |
1693 | +|==================== |
1694 | + |
1695 | + |
1696 | +[[payload-data-types]] |
1697 | +== Payload Data Types |
1698 | + |
1699 | +Channel access defines special structures to transferring data. Main reason is |
1700 | +efficiency, since in many cases more than one value can be transferred. These |
1701 | +types are organized in typed hierarchies with loose inheritance. There are |
1702 | +seven basic data types: `DBR_STRING`, `DBR_SHORT`, `DBR_INT`, `DBR_FLOAT`, |
1703 | +`DBR_ENUM`, `DBR_CHAR`, `DBR_LONG` and `DBR_DOUBLE`. Each of these types can |
1704 | +be represented as an array, if the corresponding field in header indicates |
1705 | +that. |
1706 | + |
1707 | +Additional to basic data types, structured types allow access to more than one |
1708 | +value within the same record. These structures are status (STS), time stamp |
1709 | +(TIME), graphic (GR) and control (CTRL). All these structures contain value as |
1710 | +the last field. |
1711 | + |
1712 | +Status structure adds alarm severity. Time stamp structures extends the status |
1713 | +structure by adding time stamp of the value. Graphic extends status structure |
1714 | +by providing alarm limits, units and precision. Control structure extends |
1715 | +graphic by adding control limits. |
1716 | + |
1717 | +Following is the list of all structures as transmitted over network. |
1718 | + |
1719 | + |
1720 | +=== `DBR_STS_STRING` |
1721 | + |
1722 | +[horizontal] |
1723 | +Type:: |
1724 | + `DBR_STS_STRING` |
1725 | +ID:: |
1726 | + 7 (`0x07`) |
1727 | +Description:: |
1728 | + `DBR_STS` structure for `STRING` type. |
1729 | + |
1730 | + |
1731 | +=== `DBR_STS_SHORT` |
1732 | + |
1733 | +[horizontal] |
1734 | +Type:: |
1735 | + `DBR_STS_SHORT` |
1736 | +ID:: |
1737 | + 8 (`0x08`) |
1738 | +Description:: |
1739 | + `DBR_STS` structure for `UINT16` type. May be referred to as |
1740 | + `DBR_STS_INT`. |
1741 | + |
1742 | + |
1743 | +=== `DBR_STS_FLOAT` |
1744 | + |
1745 | +[horizontal] |
1746 | +Type:: |
1747 | + `DBR_STS_FLOAT` |
1748 | +ID:: |
1749 | + 9 (`0x09`) |
1750 | +Description:: |
1751 | + `DBR_STS` structure for `FLOAT` type. |
1752 | + |
1753 | + |
1754 | +=== `DBR_STS_ENUM` |
1755 | + |
1756 | +[horizontal] |
1757 | +Type:: |
1758 | + `DBR_STS_ENUM` |
1759 | +ID:: |
1760 | + 10 (`0x0A`) |
1761 | +Description:: |
1762 | + `DBR_STS` structure for `ENUM` type. |
1763 | + |
1764 | + |
1765 | +=== `DBR_STS_CHAR` |
1766 | + |
1767 | +[horizontal] |
1768 | +Type:: |
1769 | + `DBR_STS_CHAR` |
1770 | +ID:: |
1771 | + 11 (`0x0B`) |
1772 | +Description:: |
1773 | + `DBR_STS` structure for `CHAR` type. |
1774 | + |
1775 | + |
1776 | +=== `DBR_STS_LONG` |
1777 | + |
1778 | +[horizontal] |
1779 | +Type:: |
1780 | + `DBR_STS_LONG` |
1781 | +ID:: |
1782 | + 12 (`0x0C`) |
1783 | +Description:: |
1784 | + `DBR_STS` structure for `LONG` type. |
1785 | + |
1786 | + |
1787 | +=== `DBR_STS_DOUBLE` |
1788 | + |
1789 | +[horizontal] |
1790 | +Type:: |
1791 | + `DBR_STS_DOUBLE` |
1792 | +ID:: |
1793 | + 13 (`0x0D`) |
1794 | +Description:: |
1795 | + `DBR_STS` structure for `LONG` type. |
1796 | + |
1797 | + |
1798 | +=== `DBR_TIME_STRING` |
1799 | + |
1800 | +[horizontal] |
1801 | +Type:: |
1802 | + `DBR_TIME_STRING` |
1803 | +ID:: |
1804 | + 14 (`0x0E`) |
1805 | +Description:: |
1806 | + `DBR_TIME` structure for `STRING` type. |
1807 | + |
1808 | + |
1809 | +=== `DBR_TIME_SHORT` |
1810 | + |
1811 | +[horizontal] |
1812 | +Type:: |
1813 | + `DBR_TIME_SHORT` |
1814 | +ID:: |
1815 | + 15 (`0x0F`) |
1816 | +Description:: |
1817 | + `DBR_TIME` structure for `UINT16` type. May be referred to as |
1818 | + `DBR_TIME_INT`. |
1819 | + |
1820 | + |
1821 | +=== `DBR_TIME_FLOAT` |
1822 | + |
1823 | +[horizontal] |
1824 | +Type:: |
1825 | + `DBR_TIME_FLOAT` |
1826 | +ID:: |
1827 | + 16 (`0x10`) |
1828 | +Description:: |
1829 | + `DBR_TIME` structure for `FLOAT` type. |
1830 | + |
1831 | + |
1832 | +=== `DBR_TIME_ENUM` |
1833 | + |
1834 | +[horizontal] |
1835 | +Type:: |
1836 | + `DBR_TIME_ENUM` |
1837 | +ID:: |
1838 | + 17 (`0x11`) |
1839 | +Description:: |
1840 | + `DBR_TIME` structure for `ENUM` type. |
1841 | + |
1842 | + |
1843 | +=== `DBR_TIME_CHAR` |
1844 | + |
1845 | +[horizontal] |
1846 | +Type:: |
1847 | + `DBR_TIME_CHAR` |
1848 | +ID:: |
1849 | + 18 (`0x12`) |
1850 | +Description:: |
1851 | + `DBR_TIME` structure for `CHAR` type. |
1852 | + |
1853 | + |
1854 | +=== `DBR_TIME_LONG` |
1855 | + |
1856 | +[horizontal] |
1857 | +Type:: |
1858 | + `DBR_TIME_LONG` |
1859 | +ID:: |
1860 | + 19 (`0x13`) |
1861 | +Description:: |
1862 | + `DBR_TIME` structure for `LONG` type. |
1863 | + |
1864 | + |
1865 | +=== `DBR_TIME_DOUBLE` |
1866 | + |
1867 | +[horizontal] |
1868 | +Type:: |
1869 | + `DBR_TIME_DOUBLE` |
1870 | +ID:: |
1871 | + 20 (`0x14`) |
1872 | +Description:: |
1873 | + `DBR_TIME` structure for `DOUBLE` type. |
1874 | + |
1875 | + |
1876 | +=== `DBR_GR_STRING` |
1877 | + |
1878 | +[horizontal] |
1879 | +Type:: |
1880 | + `DBR_GR_STRING` |
1881 | +ID:: |
1882 | + 21 (`0x15`) |
1883 | +Description:: |
1884 | + `DBR_GR` structure for `STRING` type. |
1885 | + |
1886 | + |
1887 | +=== `DBR_GR_SHORT` |
1888 | + |
1889 | +[horizontal] |
1890 | +Type:: |
1891 | + `DBR_GR_SHORT` |
1892 | +ID:: |
1893 | + 22 (`0x16`) |
1894 | +Description:: |
1895 | + `DBR_GR` structure for `SHORT` type. |
1896 | + |
1897 | + |
1898 | +=== `DBR_GR_INT` |
1899 | + |
1900 | +[horizontal] |
1901 | +Type:: |
1902 | + `DBR_GR_INT` |
1903 | +ID:: |
1904 | + 22 (`0x16`) |
1905 | +Description:: |
1906 | + `DBR_GR` structure for `INT` type. |
1907 | + |
1908 | + |
1909 | +=== `DBR_GR_FLOAT` |
1910 | + |
1911 | +[horizontal] |
1912 | +Type:: |
1913 | + `DBR_GR_FLOAT` |
1914 | +ID:: |
1915 | + 23 (`0x17`) |
1916 | +Description:: |
1917 | + `DBR_GR` structure for `FLOAT` type. |
1918 | + |
1919 | + |
1920 | +=== `DBR_GR_ENUM` |
1921 | + |
1922 | +[horizontal] |
1923 | +Type:: |
1924 | + `DBR_GR_ENUM` |
1925 | +ID:: |
1926 | + 24 (`0x18`) |
1927 | +Description:: |
1928 | + `DBR_GR` structure for `ENUM` type. |
1929 | + |
1930 | + |
1931 | +=== `DBR_GR_CHAR` |
1932 | + |
1933 | +[horizontal] |
1934 | +Type:: |
1935 | + `DBR_GR_CHAR` |
1936 | +ID:: |
1937 | + 25 (`0x19`) |
1938 | +Description:: |
1939 | + `DBR_GR` structure for `CHAR` type (`UINT8` representation). |
1940 | + |
1941 | + |
1942 | +=== `DBR_GR_LONG` |
1943 | + |
1944 | +[horizontal] |
1945 | +Type:: |
1946 | + `DBR_GR_LONG` |
1947 | +ID:: |
1948 | + 26 (`0x1A`) |
1949 | +Description:: |
1950 | + `DBR_GR` structure for `LONG` type (`INT32` representation). |
1951 | + |
1952 | + |
1953 | +=== `DBR_GR_DOUBLE` |
1954 | + |
1955 | +[horizontal] |
1956 | +Type:: |
1957 | + `DBR_GR_DOUBLE` |
1958 | +ID:: |
1959 | + 27 (`0x1B`) |
1960 | +Description:: |
1961 | + `DBR_GR` structure for `DOUBLE` type. |
1962 | + |
1963 | + |
1964 | +=== `DBR_CTRL_STRING` |
1965 | + |
1966 | +[horizontal] |
1967 | +Type:: |
1968 | + `DBR_CTRL_STRING` |
1969 | +ID:: |
1970 | + 28 (`0x1C`) |
1971 | +Description:: |
1972 | + `DBR_CTRL` structure for `STRING` type. |
1973 | + |
1974 | + |
1975 | +=== `DBR_CTRL_SHORT` |
1976 | + |
1977 | +[horizontal] |
1978 | +Type:: |
1979 | + `DBR_CTRL_SHORT` |
1980 | +ID:: |
1981 | + 29 (`0x1D`) |
1982 | +Description:: |
1983 | + `DBR_CTRL` structure for `SHORT` type. |
1984 | + |
1985 | + |
1986 | +=== `DBR_CTRL_INT` |
1987 | + |
1988 | +[horizontal] |
1989 | +Type:: |
1990 | + `DBR_CTRL_INT` |
1991 | +ID:: |
1992 | + 29 (`0x1D`) |
1993 | +Description:: |
1994 | + `DBR_CTRL` structure for `INT16` type. |
1995 | + |
1996 | + |
1997 | +=== `DBR_CTRL_FLOAT` |
1998 | + |
1999 | +[horizontal] |
2000 | +Type:: |
2001 | + `DBR_CTRL_FLOAT` |
2002 | +ID:: |
2003 | + 30 (`0x1E`) |
2004 | +Description:: |
2005 | + `DBR_CTRL` structure for `FLOAT` type. |
2006 | + |
2007 | + |
2008 | +=== `DBR_CTRL_ENUM` |
2009 | + |
2010 | +[horizontal] |
2011 | +Type:: |
2012 | + `DBR_CTRL_ENUM` |
2013 | +ID:: |
2014 | + 31 (`0x1F`) |
2015 | +Description:: |
2016 | + `DBR_CTRL` structure for `ENUM` type. |
2017 | + |
2018 | + |
2019 | +=== `DBR_CTRL_CHAR` |
2020 | + |
2021 | +[horizontal] |
2022 | +Type:: |
2023 | + `DBR_CTRL_CHAR` |
2024 | +ID:: |
2025 | + 32 (`0x20`) |
2026 | +Description:: |
2027 | + `DBR_CTRL` structure for `CHAR` type (`UINT8` representation). |
2028 | + |
2029 | + |
2030 | +=== `DBR_CTRL_LONG` |
2031 | + |
2032 | +[horizontal] |
2033 | +Type:: |
2034 | + `DBR_CTRL_LONG` |
2035 | +ID:: |
2036 | + 33 (`0x21`) |
2037 | +Description:: |
2038 | + `DBR_CTRL` structure for `INT32` type. |
2039 | + |
2040 | + |
2041 | +=== `DBR_CTRL_DOUBLE` |
2042 | + |
2043 | +[horizontal] |
2044 | +Type:: |
2045 | + `DBR_CTRL_DOUBLE` |
2046 | +ID:: |
2047 | + 34 (`0x22`) |
2048 | +Description:: |
2049 | + `DBR_CTRL` structure for `DOUBLE` type. |
2050 | + |
2051 | + |
2052 | +== Constants |
2053 | + |
2054 | + |
2055 | +=== Port numbers |
2056 | + |
2057 | +Although there is no requirement as to which port numbers are used by either |
2058 | +servers or clients, there are some standard values which must be used as |
2059 | +defaults, unless overriden by application. |
2060 | + |
2061 | +Port numbers are dependant on protocol versions and are calculated using the |
2062 | +folowing definitions: |
2063 | + |
2064 | +`CA_PORT_BASE` = 5056 |
2065 | + |
2066 | +`CA_SERVER_PORT` = `CA_PORT_BASE` + `MAJOR_PROTOCOL_VERSION` * 2 |
2067 | + |
2068 | +`CA_REPEATER_PORT` = `CA_PORT_BASE` + `MAJOR_PROTOCOL_VERSION` * 2 + 1 |
2069 | + |
2070 | +Based on protocol version described in this document (4.11), port numbers used |
2071 | +are `CA_SERVER_PORT` = 5064 and `CA_REPEATER_PORT` = 5065. |
2072 | + |
2073 | +Since registration of port numbers with link:https://iana.org[IANA] and in the |
2074 | +interest of compatibility, the version numbers are unlikely to change. |
2075 | +Therefore, the port numbers described here (5064 and 5065) may be considered |
2076 | +final. |
2077 | + |
2078 | + |
2079 | +=== Representation of constants |
2080 | + |
2081 | +This section lists various constants, their types and values used by protocol. |
2082 | + |
2083 | +Some constants can be combined using logical OR operation. Example: Monitor |
2084 | +mask of `DBE_VALUE` and `DBE_ALARM` are combined using `(DBE_VALUE or |
2085 | +DBE_ALARM)` resulting in `(1 or 4 == 5)`. |
2086 | + |
2087 | +To query the whether certain value is present in such combined value, and |
2088 | +operation is used. Example: to query whether `DBE_ALARM` of monitor mask is |
2089 | +set, `(DBE_VALUE and MASK > 0)` will return 0 if `DBE_VALUE` is not present, |
2090 | +otherwise `DBE_ALARM` is present. |
2091 | + |
2092 | + |
2093 | +[[monitor-mask]] |
2094 | +=== Monitor Mask |
2095 | + |
2096 | +Indicates which changes to the value should be reported back to client |
2097 | +library. Different values can be combined using logical OR operation. |
2098 | + |
2099 | +*Type:* not defined, depends on the field it is in (usually `UINT16`) |
2100 | + |
2101 | +* `DBE_VALUE` - value 1 (`0x01`) - Value change events are reported. Value |
2102 | + changes take into consideration a dead band within which the value changes |
2103 | + are not reported. |
2104 | +* `DBE_LOG` - value 2 (`0x02`) - Log events are reported. Similiar to |
2105 | + `DBR_VALUE`, `DBE_LOG` defines a different dead band value that determines |
2106 | + frequency of updates. |
2107 | +* `DBE_ALARM` - value 4 (`0x04`) - Alarm events are reported whenever alarm |
2108 | + value of the channel changes. |
2109 | + |
2110 | + |
2111 | +[[search-reply-flag]] |
2112 | +=== Search Reply Flag |
2113 | + |
2114 | +Indicates whether server should reply to failed search messages. If a server |
2115 | +does not know about channel name, it has the option of replying to request or |
2116 | +ignoring it. Usually, servers contacted through address list will receive |
2117 | +request for reply. |
2118 | + |
2119 | +*Type:* not defined, depends on the field it is in (usually `UINT16`). |
2120 | + |
2121 | +* `DO_REPLY` - value 10 (`0x0a`) - Server should reply to failed search |
2122 | + requests. |
2123 | +* `DONT_REPLY` - value 5 (`0x05`) - Server should ignore failed requests. |
2124 | + |
2125 | + |
2126 | +[[access-rights]] |
2127 | +=== Access Rights |
2128 | + |
2129 | +Defines access rights for a given channel. Accss rights are defined as |
2130 | +logicaly ORred value of allowed access. |
2131 | + |
2132 | +*Type:* not defined, depends on the field it is in (usually `UINT16`). |
2133 | + |
2134 | +* `CA_PROTO_ACCESS_RIGHT_READ` - value 1 (`0x01`) - Read access is allowed |
2135 | +* `CA_PROTO_ACCESS_RIGHT_WRITE` - value 2 (`0x02`) - Write access is allowed. |
2136 | + |
2137 | +As a reference, the following values are valid. |
2138 | + |
2139 | +* 0 - No access |
2140 | +* 1 - Read access only |
2141 | +* 2 - Write access only |
2142 | +* 3 - Read and write access |
2143 | + |
2144 | + |
2145 | +== Example message |
2146 | + |
2147 | +This example shows construction of messages. For details of individual |
2148 | +structures, see message and data type reference (`CA_PROTO_READ_NOTIFY` and |
2149 | +`DBR_GR_INT16`). |
2150 | + |
2151 | +A client will send `CA_PROTO_READ_NOTIFY` message with the following contents. |
2152 | + |
2153 | +* Data type: `DBR_GR_INT16` |
2154 | +* Element count: 5 |
2155 | +* Server ID: 22 (obtained during channel creation) |
2156 | +* Sequence ID: 56 (each read or write request increases value by one) |
2157 | + |
2158 | +The messsage would be represented as follows: |
2159 | + |
2160 | +---- |
2161 | +00 0F (command) 00 00 (payload size) 00 16 (data type) 00 05 (element count) |
2162 | +00 00 00 16 (server ID) 00 00 00 38 (sequence ID) |
2163 | +---- |
2164 | + |
2165 | +Server would respond with success and return requested value with individual |
2166 | +`DBR_GR_INT16` fields having the following values. |
2167 | + |
2168 | +* Status: `ECA_NORMAL` |
2169 | +* Severity: `NO_ALARM` (0) |
2170 | + |
2171 | +---- |
2172 | +00 0f (command) 00 20 (payload size) 00 16 (data type) 00 05 (element count) |
2173 | +00 00 00 16 (server ID) 00 00 00 38 (sequence ID) |
2174 | +00 05 00 02 43 6f 75 6e 74 73 00 00 00 0a 00 00 |
2175 | +00 08 00 06 00 04 00 02 00 00 00 00 00 00 00 00 |
2176 | + 8 6 4 2 0 0 0 0 |
2177 | +---- |
2178 | + |
2179 | +[[virtual-circuit-operation]] |
2180 | +== Virtual Circuit Operation |
2181 | + |
2182 | +image:virtual-circuit.png[Virtual Circuit Schematic] |
2183 | + |
2184 | + |
2185 | +=== Establishing virtual circuit |
2186 | + |
2187 | +Virtual circuit is a TCP connection between a client and a server. Each |
2188 | +virtual circuit has an associated priority, which can be used by server to |
2189 | +prioritize requests depending on current load. An independent circuit for |
2190 | +each priority level selected by the client might be used because it allows |
2191 | +for preemptive prioritized dispatch scheduling in the server when the OS |
2192 | +supports that, and also allows specifying the networks scheduling priority |
2193 | +when the router and or LAN support that. Regardless of how many channels are |
2194 | +handled by either client or server, each client-server pair will be connected |
2195 | +with exactly one TCP connection for each priority level. This level is |
2196 | +specified when creating a virtual circuit. |
2197 | + |
2198 | +When establishing a virtual circuit, a simple handshake will be performed. |
2199 | +Client will open a TCP connection to the server. After that, it sends |
2200 | +<<ca-proto-version,`CA_PROTO_VERSION`>>, |
2201 | +<<ca-proto-client-name,`CA_PROTO_CLIENT_NAME`>> and |
2202 | +<<ca-proto-host-name,`CA_PROTO_HOST_NAME`>> messages. |
2203 | +If server accepts all the supplied parameters and the client and host are |
2204 | +permitted to connect, the server will respond with |
2205 | +<<ca-proto-version,`CA_PROTO_VERSION`>>. |
2206 | +After that, client may start sending requests. |
2207 | + |
2208 | +Virtual circuit will remain active as long as there is at least one channel |
2209 | +active. If the TCP connection is lost, all channels using this circuit must be |
2210 | +notified. |
2211 | + |
2212 | + |
2213 | +=== Basic mode of operation |
2214 | + |
2215 | +In most basic role, the client will send requests to the server and await one |
2216 | +or more responses, or in some special cases, no response will be expected. |
2217 | +For each type of request, one of three events will occur: |
2218 | + |
2219 | +* Matching response will be received |
2220 | +* Error response will be received by client indicating either user or client error |
2221 | +* The client will receive no response, and one was expected. |
2222 | +* Network failure occurs |
2223 | + |
2224 | +When a matching response is received, the operation has completed |
2225 | +successfully. Any result returned will report any applicable return |
2226 | +information. Client library will then notify the client about completion. |
2227 | + |
2228 | +If a request fails and server could handle this failure, |
2229 | +<<ca-proto-error,`CA_PROTO_ERROR`>> response will be received or error code is |
2230 | +received in response, depending on the request sent. This response contains |
2231 | +original request header, error code and text description of error. |
2232 | + |
2233 | +Although servers are designed to always return a response, in some cases this |
2234 | +will not occur. An unlikely case is that a server has failed or stopped |
2235 | +responding. A more common case is broadcast search, where no replies are sent |
2236 | +to search messages. The later case is designed to not overload the network by |
2237 | +sending failure notifications. This however does not allow client library to |
2238 | +determine, whether a search has failed, or the server load is simply too high |
2239 | +and the response will arrive later. In this case, client library may assume |
2240 | +that search yielded no results and notify on search failure. Regardless of |
2241 | +this, should any such response arrive late, the client must be notified. |
2242 | + |
2243 | +In case of network failure, two situations should be anticipated. One is TCP |
2244 | +connection loss for a virtual circuit. Virtual circuit has mechanisms for |
2245 | +dealing with such case and should attempt to restore the connection itself. |
2246 | +Repeater has no such mechanisms, since it depends on reliability of UDP |
2247 | +protocol. There will be in most cases no way for repeater to determine, |
2248 | +whether the packets sent actually arrive at destination. Repeater can however |
2249 | +verify the clients registered with it, by attempting to bind to their port. |
2250 | +If binding succeeds, the client no longer exists. Alternate way is using |
2251 | +connected UDP sockets and checking ICMP destination unreachable error. |
2252 | + |
2253 | + |
2254 | +=== Detecting virtual circuit unresponsiveness |
2255 | + |
2256 | +During virtual circuit life-time, the circuit may become unresponsive. |
2257 | +Since this is tightly related to network availability and server load, |
2258 | +determining actual cause for unresponsiveness is difficult. Basic criteria on |
2259 | +which unresponsiveness should be determined are: |
2260 | + |
2261 | +* No beacon received from server in expected time period |
2262 | +* No response received from server for a predetermined ammount of time |
2263 | + (usually 30 seconds) |
2264 | +* Server does not immediatelly respond to <<ca-proto-echo,`CA_PROTO_ECHO`>> |
2265 | + |
2266 | +Behaviour of virtual circuit implementation under such conditions is |
2267 | +undefined. Experience has shown however, that virtual circuit should not be |
2268 | +disconnected when it becomes unresponsive, since this negatively impacts |
2269 | +network performance under load. |
2270 | + |
2271 | + |
2272 | +=== Channel life-cycle |
2273 | + |
2274 | +image:connection-states.png[Connection States] |
2275 | + |
2276 | +A channel discussed here is based on two levels. One is channel as seen from |
2277 | +client application, the other is channel implementation in client library. |
2278 | +This difference will be pointed out where applicable. |
2279 | + |
2280 | +When a channel is created by client application, it is initialized in |
2281 | +_NEVER_CONN_ state. This indicates that channel is currently being connected |
2282 | +for the first time. If connection process fails, channel moves into _FAILED_ |
2283 | +state and is not usable. Connection proccess within the client library will |
2284 | +attempt to connect the channel repeatedly. Intervals between consecutive |
2285 | +attempts should be increased, before finally giving up and determining the |
2286 | +channel cannot be connected and signaling _FAILED_ state. A total number of |
2287 | +attempts can be on the order of 100. |
2288 | + |
2289 | +When connection is established, the channel will signal to client with |
2290 | +_CONN_UP_ event and changing its state to connected. |
2291 | + |
2292 | +Should the virtual circuit connection be lost, _CONN_DOWN_ event will change |
2293 | +channel state to disconnected. Whenever virtual circuit is reconnected, the |
2294 | +channel state is restored to connected. Note that reconnection process follows |
2295 | +the same rules as initial process. It is also possible, that the PV will move |
2296 | +between the servers, but client application should not be aware of such |
2297 | +internal changes to channel. |
2298 | + |
2299 | +Once client application is done using the channel, it will be closed and its |
2300 | +state moved changed to _CLOSED_. After that, this channel can no longer be |
2301 | +used. |
2302 | + |
2303 | +Detailed description of channel operations is outlined below. |
2304 | + |
2305 | + |
2306 | +=== Connecting a Channel |
2307 | + |
2308 | +Connection of a channel is a two phase process. First, server that hosts |
2309 | +channel with a given name must be located. Second, client and server must both |
2310 | +register a connection. |
2311 | + |
2312 | +Before connection, client library allocates CID identifier that will be used |
2313 | +to reference new channel. Next it sends <<ca-proto-search,`CA_PROTO_SEARCH`>> |
2314 | +with channel name request via broadcast and/or to address list. Each server |
2315 | +that receives such message checks to see if it knows about this name. If it |
2316 | +does, response to <<ca-proto-search,`CA_PROTO_SEARCH`>> is sent back to |
2317 | +client. If not, the server checks if reply field of request is `DO_REPLY` and |
2318 | +responds with <<ca-proto-not-found,`CA_PROTO_NOT_FOUND`>>, otherwise does |
2319 | +nothing. |
2320 | + |
2321 | +Client library may receive more than one response. In this case, first |
2322 | +response should be used and others rejected. The cause of multiple responses |
2323 | +is same PV hosted on multiple different hosts. Client or server has no method |
2324 | +of knowing which PV is 'right'. Multiple responses should be reported by the |
2325 | +client to the application or user. |
2326 | + |
2327 | +After extracting server address and port, client library checks to see if this |
2328 | +server is already known and connected via virtual circuit. If not, virtual |
2329 | +circuit is established. Any requests sent through this channel will use this |
2330 | +circuit. |
2331 | + |
2332 | +For this it sends <<ca-proto-create-chan,`CA_PROTO_CREATE_CHAN`>> request with |
2333 | +channels CID and channel name. Server will respond with |
2334 | +<<ca-proto-create-chan,`CA_PROTO_CREATE_CHAN`>> response which will provide |
2335 | +channel type, data count and server identifier SID. In case the channel could |
2336 | +not be created, error message will be returned. |
2337 | + |
2338 | +Having initialized both CID and SID and registered the channel with the |
2339 | +server, this channel is ready for use. Client library should store these |
2340 | +values for further use. |
2341 | + |
2342 | + |
2343 | +=== Read and Write operations |
2344 | + |
2345 | +Read and write operations require the channel to be properly initialized and |
2346 | +connected and its virtual circuit to be active. These operations use |
2347 | +<<ca-proto-read-notify,`CA_PROTO_READ_NOTIFY`>> and |
2348 | +<<ca-proto-write-notify,`CA_PROTO_WRITE_NOTIFY`>> messages. |
2349 | + |
2350 | +To read a value from a channel client library will create a |
2351 | +<<ca-proto-read-notify,`CA_PROTO_READ_NOTIFY`>> request. This request will |
2352 | +contain desired data type and data count parameters which may differ from |
2353 | +channels native type as obtained during connect. Additionally, IOID is stored |
2354 | +in request to provide unique identification. Channel that is used will be |
2355 | +identified by SID that was obtained during channel creation. No payload is |
2356 | +sent with request. |
2357 | + |
2358 | +After server processes the message reponse is either valid |
2359 | +<<ca-proto-read-notify,`CA_PROTO_READ_NOTIFY`>> response or |
2360 | +<<ca-proto-error,`CA_PROTO_ERROR`>> to indicate error. In case of success, |
2361 | +response contains same field values as request, but has additional payload. |
2362 | +This payload is formatted as requested data type with desired number of |
2363 | +elements. |
2364 | + |
2365 | +Write operation is performed identically with payload roles reversed. Here the |
2366 | +request will contain payload with DBR formatted value to write and response |
2367 | +will have no payload. |
2368 | + |
2369 | + |
2370 | +=== Subscriptions and Monitors |
2371 | + |
2372 | +Client creates monitors by registering a subscription on a channel. This |
2373 | +causes server to notify subscribers of value changes. |
2374 | + |
2375 | +Subscriptions are created by first allocating unique Subscription ID. This |
2376 | +identifier is used to uniquely identify various subscriptions. Next, |
2377 | +<<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> request is created using SID and |
2378 | +Subscription ID. Data type and data count indicate desired value format in |
2379 | +response. Additional information is provided in payload as specified in |
2380 | +<<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> reference. |
2381 | + |
2382 | +First <<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> response is received |
2383 | +immediately to confirm successful subscription. If error occurs, |
2384 | +<<ca-proto-error,`CA_PROTO_ERROR`>> response is received. |
2385 | + |
2386 | +Responses arrive asynchronously until client cancels the subscription using |
2387 | +<<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> response and payload containing |
2388 | +DBR formatted value. If server is shutdown during this time, events will no |
2389 | +longer arrive, but the subscription will not be cancelled. Once the server is |
2390 | +restarted, client library will reestablish the subscription silently without |
2391 | +notifying client application. |
2392 | + |
2393 | +Subscription is cancelled by sending |
2394 | +<<ca-proto-event-cancel,`CA_PROTO_EVENT_CANCEL`>> request with relevant |
2395 | +parameters identical to those in original |
2396 | +<<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> request that created the |
2397 | +subscription. Successful cancelation is confirmed by |
2398 | +<<ca-proto-event-add,`CA_PROTO_EVENT_ADD`>> response without payload. |
2399 | + |
2400 | +Cancelling the subscription while the server is down should be handled by |
2401 | +cancelling the subscription locally and not reestablishing it once the server |
2402 | +is up again. |
2403 | + |
2404 | + |
2405 | +=== Connection events |
2406 | + |
2407 | +If a virtual circuit is disconnected (server goes down or stops sending |
2408 | +beacons), any connected channels that use this circuit should be notified. |
2409 | +There is no direct way to reconnect the channel from client side, but this |
2410 | +will be done by the library. Once the circuit is reestablished, client |
2411 | +application is notified of status change for all channels. Even if a channel |
2412 | +is reported to be disconnect as a result of virtual circuit failure, the |
2413 | +channel is not closed. The only way a channel connection is actually closed |
2414 | +is by explicitly closing it using |
2415 | +<<ca-proto-clear-channel,`CA_PROTO_CLEAR_CHANNEL`>> thereby invalidating its |
2416 | +resources. |
2417 | + |
2418 | + |
2419 | +=== Closing the channel |
2420 | + |
2421 | +Channel is closed by sending |
2422 | +<<ca-proto-clear-channel,`CA_PROTO_CLEAR_CHANNEL`>> request. |
2423 | +Regardless of whether response confirmes closing or reports an error, CID and |
2424 | +SID associated with the channel are no longer valid. Any resources still |
2425 | +available to the client application are considered invalid. A channel that was |
2426 | +cleared may no longer be reconnected. |
2427 | + |
2428 | + |
2429 | +== Repeater Operation |
2430 | + |
2431 | +image:repeater.png[Repeater Schematic] |
2432 | + |
2433 | + |
2434 | +=== Role |
2435 | + |
2436 | +Simple demonstration of repeater operation. A repeater will be used both on |
2437 | +client and server side to forward incoming UDP requests to multiple clients |
2438 | +and/or server on same host. Each host or client will then respond on its own. |
2439 | + |
2440 | +Since role of the repeater is related to host, not the client, its |
2441 | +implementation must be independent from individual client instance or process. |
2442 | +Repeater must not stop operation until all clients depending on it registered |
2443 | +with it have shut down. |
2444 | + |
2445 | + |
2446 | +=== Startup |
2447 | + |
2448 | +Each client must check for presence of repeater on startup, before any access |
2449 | +to EPICS hosts is made. This check is made by attempting to bind to |
2450 | +`CA_REPEATER_PORT`. If binding fails, the client may assume the repeater is |
2451 | +already running and may attempt to register. This is done by sending |
2452 | +`CA_REPEATER_REGISTER` datagram to `CA_REPEATER_PORT`. If repeater is already |
2453 | +active, it will respond with `CA_REPEATER_CONFIRM` datagram back to client, |
2454 | +otherwise the client can assume, the repeater is invalid, the process bound to |
2455 | +the port is not even a repeater or that some unknown error occured. In this |
2456 | +case, client will spawn new repeater and attempt registration again. Attempt |
2457 | +to detect the repeater and register should be made several times with some |
2458 | +reasonable delay to avoid any transient unresponsiveness that might occur. |
2459 | + |
2460 | +After the client has received registration confirmation from the repeater, it |
2461 | +should keep listening for messages from the repeater. Any broadcasts sent by |
2462 | +servers will be received by the repeater and forwarded to registered clients. |
2463 | + |
2464 | + |
2465 | +=== Client detection |
2466 | + |
2467 | +The repeater tests to see if its clients exist by periodically attempting to |
2468 | +bind to their ports. If unsuccessful when attempting to bind to the client's |
2469 | +port, then the repeater concludes that the client no longer exists. |
2470 | +A technique using connected UDP sockets and ICMP destination unreachable can |
2471 | +also used. If a client is determined to no longer be present then the repeater |
2472 | +un-registers that client and no longer sends messages to it. |
2473 | + |
2474 | + |
2475 | +=== Operation |
2476 | + |
2477 | +Each message, the repeater receives, must be forwarded to local clients, to |
2478 | +the address provided during registration. No assumption should be made about |
2479 | +existence or state of clients. |
2480 | + |
2481 | + |
2482 | +=== Shutdown |
2483 | + |
2484 | +Repeater should not shutdown on its own, if it does, there should be no active |
2485 | +clients registered with it. |
2486 | + |
2487 | + |
2488 | +== Server Beacons |
2489 | + |
2490 | +Each EPICS server will send beacons periodically to report it is still active. |
2491 | +Beacon messages will contain server's IP and port, as well as sequential |
2492 | +beacon ID. Beacons will be broadcast and sent to servers address list. |
2493 | + |
2494 | +When a server becomes active, it will immediately start sending beacons with |
2495 | +an increasing delay. Time between beacons will start at 0.02 seconds. After |
2496 | +each beacon is sent, this time is doubled. Maximum delay between beacons will |
2497 | +be limited by server specified parameter, but is commonly 15 seconds. |
2498 | + |
2499 | +If a beacon is not received within expexted time, virtual circuits connected |
2500 | +to this server should be notified and virtual circuit must handle this |
2501 | +situation. |
2502 | + |
2503 | + |
2504 | +[[return-codes]] |
2505 | +== Return Codes |
2506 | + |
2507 | +This section covers return codes and exceptions that can occur during CA |
2508 | +command processing. In general, exceptions will be used to report various |
2509 | +events to the application. Return codes are predefined values for conditions |
2510 | +that can occur, where as exceptions are actually reported. Apart from |
2511 | +exceptions that occur on server or due to network transport, additional error |
2512 | +conditions may be reported on the client side as local exceptions. |
2513 | + |
2514 | +Implementation is required to handle all return codes. Local exceptions should |
2515 | +be thrown whenever implied, but only if such exception is reasonable within |
2516 | +the scope of implementation. Certain local exceptions that deal with state |
2517 | +dependent exception must always be provided. |
2518 | + |
2519 | +*Naming convention:* All return codes defined within the scope of CA are |
2520 | +listed with all capitals, with underscore character (`_`) replacing spaces. |
2521 | +Additionally, all exception names are prefixed with string `ECA_`. |
2522 | + |
2523 | +Return codes are represented as `UINT16`. First 3 least signifficant bits |
2524 | +indicate severity, remaining 13 bits are return code ID. |
2525 | + |
2526 | +Return codes are communicated in the protocol by the `CA_PROTO_READ_NOTIFY`, |
2527 | +`CA_PROTO_WRITE_NOTIFY`, monitor subscription responses, and the |
2528 | +`CA_PROTO_ERROR` responses. |
2529 | + |
2530 | +[options="header"] |
2531 | +|==================== |
2532 | +|Code|Severity|ID|Value|Description |
2533 | +|`ECA_NORMAL`|`CA_K_SUCCESS`|0|0|Normal successful completion" |
2534 | +|`ECA_MAXIOC`|`CA_K_ERROR`|1|1|Maximum simultaneous IOC connections exceeded |
2535 | +|`ECA_UKNHOST`|`CA_K_ERROR`|2|2|Unknown internet host |
2536 | +|`ECA_UKNSERV`|`CA_K_ERROR`|3|3|Unknown internet service |
2537 | +|`ECA_SOCK`|`CA_K_ERROR`|4|4|Unable to allocate a new socket |
2538 | +|`ECA_CONN`|`CA_K_WARNING`|5|5|Unable to connect to internet host or service |
2539 | +|`ECA_ALLOCMEM`|`CA_K_WARNING`|6|6|Unable to allocate additional dynamic memory |
2540 | +|`ECA_UKNCHAN`|`CA_K_WARNING`|7|7|Unknown IO channel |
2541 | +|`ECA_UKNFIELD`|`CA_K_WARNING`|8|8|Record field specified inappropriate for channel specified |
2542 | +|`ECA_TOLARGE`|`CA_K_WARNING`|9|9|The requested data transfer is greater than available memory or `EPICS_CA_MAX_ARRAY_BYTES` |
2543 | +|`ECA_TIMEOUT`|`CA_K_WARNING`|10|10|User specified timeout on IO operation expired |
2544 | +|`ECA_NOSUPPORT`|`CA_K_WARNING`|11|11|Sorry, that feature is planned but not supported at this time |
2545 | +|`ECA_STRTOBIG`|`CA_K_WARNING`|12|12|The supplied string is unusually large |
2546 | +|`ECA_DISCONNCHID`|`CA_K_ERROR`|13|13|The request was ignored because the specified channel is disconnected |
2547 | +|`ECA_BADTYPE`|`CA_K_ERROR`|14|14|The data type specifed is invalid |
2548 | +|`ECA_CHIDNOTFND`|`CA_K_INFO`|15|15|Remote Channel not found |
2549 | +|`ECA_CHIDRETRY`|`CA_K_INFO`|16|16|Unable to locate all user specified channels |
2550 | +|`ECA_INTERNAL`|`CA_K_FATAL`|17|17|Channel Access Internal Failure |
2551 | +|`ECA_DBLCLFAIL`|`CA_K_WARNING`|18|18|The requested local DB operation failed |
2552 | +|`ECA_GETFAIL`|`CA_K_WARNING`|19|19|Channel read request failed |
2553 | +|`ECA_PUTFAIL`|`CA_K_WARNING`|20|20|Channel write request failed |
2554 | +|`ECA_ADDFAIL`|`CA_K_WARNING`|21|21|Channel subscription request failed |
2555 | +|`ECA_BADCOUNT`|`CA_K_WARNING`|22|22|Invalid element count requested |
2556 | +|`ECA_BADSTR`|`CA_K_ERROR`|23|23|Invalid string |
2557 | +|`ECA_DISCONN`|`CA_K_WARNING`|24|24|Virtual circuit disconnect |
2558 | +|`ECA_DBLCHNL`|`CA_K_WARNING`|25|25|Identical process variable name on multiple servers |
2559 | +|`ECA_EVDISALLOW`|`CA_K_ERROR`|26|26|Request inappropriate within subscription (monitor) update callback |
2560 | +|`ECA_BUILDGET`|`CA_K_WARNING`|27|27|Database value get for that channel failed during channel search |
2561 | +|`ECA_NEEDSFP`|`CA_K_WARNING`|28|28|Unable to initialize without the vxWorks `VX_FP_TASK` task option set |
2562 | +|`ECA_OVEVFAIL`|`CA_K_WARNING`|29|29|Event queue overflow has prevented first pass event after event add |
2563 | +|`ECA_BADMONID`|`CA_K_ERROR`|30|30|Bad event subscription (monitor) identifier |
2564 | +|`ECA_NEWADDR`|`CA_K_WARNING`|31|31|Remote channel has new network address |
2565 | +|`ECA_NEWCONN`|`CA_K_INFO`|32|32|New or resumed network connection |
2566 | +|`ECA_NOCACTX`|`CA_K_WARNING`|33|33|Specified task isnt a member of a CA context |
2567 | +|`ECA_DEFUNCT`|`CA_K_FATAL`|34|34|Attempt to use defunct CA feature failed |
2568 | +|`ECA_EMPTYSTR`|`CA_K_WARNING`|35|35|The supplied string is empty |
2569 | +|`ECA_NOREPEATER`|`CA_K_WARNING`|36|36|Unable to spawn the CA repeater thread- auto reconnect will fail |
2570 | +|`ECA_NOCHANMSG`|`CA_K_WARNING`|37|37|No channel id match for search reply- search reply ignored |
2571 | +|`ECA_DLCKREST`|`CA_K_WARNING`|38|38|Reseting dead connection- will try to reconnect |
2572 | +|`ECA_SERVBEHIND`|`CA_K_WARNING`|39|39|Server (IOC) has fallen behind or is not responding- still waiting |
2573 | +|`ECA_NOCAST`|`CA_K_WARNING`|40|40|No internet interface with broadcast available |
2574 | +|`ECA_BADMASK`|`CA_K_ERROR`|41|41|Invalid event selection mask |
2575 | +|`ECA_IODONE`|`CA_K_INFO`|42|42|IO operations have completed |
2576 | +|`ECA_IOINPROGRESS`|`CA_K_INFO`|43|43|IO operations are in progress |
2577 | +|`ECA_BADSYNCGRP`|`CA_K_ERROR`|44|44|Invalid synchronous group identifier |
2578 | +|`ECA_PUTCBINPROG`|`CA_K_ERROR`|45|45|Put callback timed out |
2579 | +|`ECA_NORDACCESS`|`CA_K_WARNING`|46|46|Read access denied |
2580 | +|`ECA_NOWTACCESS`|`CA_K_WARNING`|47|47|Write access denied |
2581 | +|`ECA_ANACHRONISM`|`CA_K_ERROR`|48|48|Requested feature is no longer supported |
2582 | +|`ECA_NOSEARCHADDR`|`CA_K_WARNING`|49|49|Empty PV search address list |
2583 | +|`ECA_NOCONVERT`|`CA_K_WARNING`|50|50|No reasonable data conversion between client and server types |
2584 | +|`ECA_BADCHID`|`CA_K_ERROR`|51|51|Invalid channel identifier |
2585 | +|`ECA_BADFUNCPTR`|`CA_K_ERROR`|52|52|Invalid function pointer |
2586 | +|`ECA_ISATTACHED`|`CA_K_WARNING`|53|53|Thread is already attached to a client context |
2587 | +|`ECA_UNAVAILINSERV`|`CA_K_WARNING`|54|54|Not supported by attached service |
2588 | +|`ECA_CHANDESTROY`|`CA_K_WARNING`|55|55|User destroyed channel |
2589 | +|`ECA_BADPRIORITY`|`CA_K_ERROR`|56|56|Invalid channel priority |
2590 | +|`ECA_NOTTHREADED`|`CA_K_ERROR`|57|57|Preemptive callback not enabled - additional threads may not join context |
2591 | +|`ECA_16KARRAYCLIENT`|`CA_K_WARNING`|58|58|Client's protocol revision does not support transfers exceeding 16k bytes |
2592 | +|`ECA_CONNSEQTMO`|`CA_K_WARNING`|59|59|Virtual circuit connection sequence aborted |
2593 | +|==================== |
2594 | + |
2595 | + |
2596 | +== Example conversation |
2597 | + |
2598 | +This is example conversation between client and server. Client first |
2599 | +establishes TCP connection to the server and immediately requests creation of |
2600 | +a channel. After server aknowledges channel creation, client reads the value |
2601 | +of the channel twice. First as a single string value and second as a |
2602 | +`DBR_GR_INT16` type. After the response to both queries has been received, |
2603 | +the channel is destroyed. |
2604 | + |
2605 | +---- |
2606 | +Client to Server |
2607 | +CA_PROTO_VERSION (handshake) |
2608 | +00 00 00 00 00 00 00 0b 00 00 00 00 00 00 00 00 |
2609 | + 0 0 0 11 0 0 |
2610 | +CA_PROTO_CLIENT_NAME (handshake) |
2611 | +00 14 00 08 00 00 00 00 00 00 00 00 00 00 00 00 61 70 75 63 65 6c 6a 00 |
2612 | + 20 8 8 0 0 0 a p u c e l j \0 |
2613 | +CA_PROTO_HOST_NAME (handshake) |
2614 | +00 15 00 08 00 00 00 00 00 00 00 00 00 00 00 00 63 73 6c 30 36 00 00 00 |
2615 | + 21 8 0 0 0 0 c s l 0 6 \0 \0 \0 |
2616 | +CA_PROTO_CREATE_CHAN (request) |
2617 | +00 12 00 18 00 00 00 00 00 00 00 01 00 00 00 0b |
2618 | + 18 24 0 0 1 11 |
2619 | +61 70 75 63 65 6c 6a 3a 61 69 45 78 61 6d 70 6c 65 31 00 00 00 00 00 00 |
2620 | + a p u c e l j : a i E x a m p l e 1 \0 \0 \0 \0 \0 \0 |
2621 | + |
2622 | +Server to Client |
2623 | +CA_PROTO_ACCESS_RIGHTS (handshake) |
2624 | +00 16 00 00 00 00 00 00 00 00 00 01 00 00 00 03 |
2625 | + 22 0 0 0 1 3 |
2626 | +CA_PROTO_CREATE_CHAN (response) |
2627 | +00 12 00 00 00 06 00 01 00 00 00 01 00 00 00 04 |
2628 | + 18 0 6 1 1 4 |
2629 | +| |
2630 | +Client to Server |
2631 | +CA_PROTO_READ_NOTIFY (request) |
2632 | +00 0f 00 00 00 00 00 01 00 00 00 04 00 00 00 01 |
2633 | + 15 0 0 1 4 1 |
2634 | +CA_PROTO_READ_NOTIFY (request) |
2635 | +00 0f 00 00 00 16 00 01 00 00 00 04 00 00 00 02 |
2636 | + 15 0 22 1 4 02 |
2637 | + |
2638 | +Server to Client |
2639 | +CA_PROTO_READ_NOTIFY (response) |
2640 | +00 0f 00 08 00 00 00 01 00 00 00 01 00 00 00 01 30 00 00 00 00 06 00 01 |
2641 | + 15 8 0 1 1 1 0 |
2642 | +CA_PROTO_READ_NOTIFY (response) |
2643 | +00 0f 00 20 00 16 00 01 00 00 00 01 00 00 00 02 |
2644 | + 15 32 22 1 1 02 |
2645 | +00 05 00 02 43 6f 75 6e 74 73 00 00 00 0a 00 00 |
2646 | + 5 2 C o u n t s \0 \0 10 0 |
2647 | +00 08 00 06 00 04 00 02 00 00 00 00 00 00 00 00 |
2648 | + 8 6 4 2 0 0 0 0 |
2649 | + |
2650 | +Client to Server |
2651 | +CA_PROTO_CLEAR_CHANNEL (request) |
2652 | +00 0c 00 00 00 00 00 00 00 00 00 04 00 00 00 01 |
2653 | + 12 0 0 0 4 1 |
2654 | + |
2655 | +Server to Client |
2656 | +CA_PROTO_CLEAR_CHANNEL (response) |
2657 | +00 0c 00 00 00 00 00 00 00 00 00 04 00 00 00 01 |
2658 | + 12 0 0 0 4 1 |
2659 | +---- |
2660 | + |
2661 | +[[glossary]] |
2662 | +== Glossary of Terms |
2663 | + |
2664 | +IOC:: |
2665 | + Input/Output Controller. |
2666 | +PV:: |
2667 | + Process variable. |
2668 | +Virtual circuit:: |
2669 | + Reusable TCP connection between client and server, through which all PVs |
2670 | + hosted by the server can be conveyed to the client. |
2671 | + |
2672 | + |
2673 | +[[references]] |
2674 | +== References |
2675 | + |
2676 | +[options="header"] |
2677 | +|==================== |
2678 | +|ID|Author|Reference|Revision|Date|Publisher |
2679 | +|1|Jeffrey O. Hill|Channel Access Reference Manual|R3.14|2003| |
2680 | +|2| |Java Channel Access|2.0.1|2003| |
2681 | +|3|Bradner, S.|RFC 2119: Key words for use in RFCs to Indicate Requirement Levels| |1997-03| |
2682 | +|==================== |
2683 | |
2684 | === added directory 'ca_protocol/dia' |
2685 | === added file 'ca_protocol/dia/README.txt' |
2686 | --- ca_protocol/dia/README.txt 1970-01-01 00:00:00 +0000 |
2687 | +++ ca_protocol/dia/README.txt 2014-09-29 14:22:53 +0000 |
2688 | @@ -0,0 +1,2 @@ |
2689 | +The diagrams are created with Dia. |
2690 | +See http://sourceforge.net/projects/dia-installer/ |
2691 | \ No newline at end of file |
2692 | |
2693 | === added file 'ca_protocol/dia/connection-states.dia' |
2694 | --- ca_protocol/dia/connection-states.dia 1970-01-01 00:00:00 +0000 |
2695 | +++ ca_protocol/dia/connection-states.dia 2014-09-29 14:22:53 +0000 |
2696 | @@ -0,0 +1,614 @@ |
2697 | +<?xml version="1.0" encoding="UTF-8"?> |
2698 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
2699 | + <dia:diagramdata> |
2700 | + <dia:attribute name="background"> |
2701 | + <dia:color val="#ffffff"/> |
2702 | + </dia:attribute> |
2703 | + <dia:attribute name="pagebreak"> |
2704 | + <dia:color val="#000099"/> |
2705 | + </dia:attribute> |
2706 | + <dia:attribute name="paper"> |
2707 | + <dia:composite type="paper"> |
2708 | + <dia:attribute name="name"> |
2709 | + <dia:string>#A4#</dia:string> |
2710 | + </dia:attribute> |
2711 | + <dia:attribute name="tmargin"> |
2712 | + <dia:real val="2.8222000598907471"/> |
2713 | + </dia:attribute> |
2714 | + <dia:attribute name="bmargin"> |
2715 | + <dia:real val="2.8222000598907471"/> |
2716 | + </dia:attribute> |
2717 | + <dia:attribute name="lmargin"> |
2718 | + <dia:real val="2.8222000598907471"/> |
2719 | + </dia:attribute> |
2720 | + <dia:attribute name="rmargin"> |
2721 | + <dia:real val="2.8222000598907471"/> |
2722 | + </dia:attribute> |
2723 | + <dia:attribute name="is_portrait"> |
2724 | + <dia:boolean val="true"/> |
2725 | + </dia:attribute> |
2726 | + <dia:attribute name="scaling"> |
2727 | + <dia:real val="1"/> |
2728 | + </dia:attribute> |
2729 | + <dia:attribute name="fitto"> |
2730 | + <dia:boolean val="false"/> |
2731 | + </dia:attribute> |
2732 | + </dia:composite> |
2733 | + </dia:attribute> |
2734 | + <dia:attribute name="grid"> |
2735 | + <dia:composite type="grid"> |
2736 | + <dia:attribute name="width_x"> |
2737 | + <dia:real val="1"/> |
2738 | + </dia:attribute> |
2739 | + <dia:attribute name="width_y"> |
2740 | + <dia:real val="1"/> |
2741 | + </dia:attribute> |
2742 | + <dia:attribute name="visible_x"> |
2743 | + <dia:int val="1"/> |
2744 | + </dia:attribute> |
2745 | + <dia:attribute name="visible_y"> |
2746 | + <dia:int val="1"/> |
2747 | + </dia:attribute> |
2748 | + <dia:composite type="color"/> |
2749 | + </dia:composite> |
2750 | + </dia:attribute> |
2751 | + <dia:attribute name="color"> |
2752 | + <dia:color val="#d8e5e5"/> |
2753 | + </dia:attribute> |
2754 | + <dia:attribute name="guides"> |
2755 | + <dia:composite type="guides"> |
2756 | + <dia:attribute name="hguides"/> |
2757 | + <dia:attribute name="vguides"/> |
2758 | + </dia:composite> |
2759 | + </dia:attribute> |
2760 | + </dia:diagramdata> |
2761 | + <dia:layer name="Hintergrund" visible="true" active="true"> |
2762 | + <dia:object type="UML - State Term" version="0" id="O0"> |
2763 | + <dia:attribute name="obj_pos"> |
2764 | + <dia:point val="9.22938,10.75"/> |
2765 | + </dia:attribute> |
2766 | + <dia:attribute name="obj_bb"> |
2767 | + <dia:rectangle val="9.17938,10.7;10.2794,11.8"/> |
2768 | + </dia:attribute> |
2769 | + <dia:attribute name="meta"> |
2770 | + <dia:composite type="dict"/> |
2771 | + </dia:attribute> |
2772 | + <dia:attribute name="elem_corner"> |
2773 | + <dia:point val="9.22938,10.75"/> |
2774 | + </dia:attribute> |
2775 | + <dia:attribute name="elem_width"> |
2776 | + <dia:real val="1"/> |
2777 | + </dia:attribute> |
2778 | + <dia:attribute name="elem_height"> |
2779 | + <dia:real val="1"/> |
2780 | + </dia:attribute> |
2781 | + <dia:attribute name="line_colour"> |
2782 | + <dia:color val="#000000"/> |
2783 | + </dia:attribute> |
2784 | + <dia:attribute name="fill_colour"> |
2785 | + <dia:color val="#ffffff"/> |
2786 | + </dia:attribute> |
2787 | + <dia:attribute name="is_final"> |
2788 | + <dia:boolean val="false"/> |
2789 | + </dia:attribute> |
2790 | + </dia:object> |
2791 | + <dia:object type="UML - State" version="0" id="O1"> |
2792 | + <dia:attribute name="obj_pos"> |
2793 | + <dia:point val="7.24437,14.3625"/> |
2794 | + </dia:attribute> |
2795 | + <dia:attribute name="obj_bb"> |
2796 | + <dia:rectangle val="7.19438,14.3125;12.2644,16.2125"/> |
2797 | + </dia:attribute> |
2798 | + <dia:attribute name="meta"> |
2799 | + <dia:composite type="dict"/> |
2800 | + </dia:attribute> |
2801 | + <dia:attribute name="elem_corner"> |
2802 | + <dia:point val="7.24437,14.3625"/> |
2803 | + </dia:attribute> |
2804 | + <dia:attribute name="elem_width"> |
2805 | + <dia:real val="4.9700000000000006"/> |
2806 | + </dia:attribute> |
2807 | + <dia:attribute name="elem_height"> |
2808 | + <dia:real val="1.8"/> |
2809 | + </dia:attribute> |
2810 | + <dia:attribute name="line_colour"> |
2811 | + <dia:color val="#000000"/> |
2812 | + </dia:attribute> |
2813 | + <dia:attribute name="fill_colour"> |
2814 | + <dia:color val="#ffffff"/> |
2815 | + </dia:attribute> |
2816 | + <dia:attribute name="text"> |
2817 | + <dia:composite type="text"> |
2818 | + <dia:attribute name="string"> |
2819 | + <dia:string>#NEVER_CONN#</dia:string> |
2820 | + </dia:attribute> |
2821 | + <dia:attribute name="font"> |
2822 | + <dia:font family="sans" style="0" name="Helvetica"/> |
2823 | + </dia:attribute> |
2824 | + <dia:attribute name="height"> |
2825 | + <dia:real val="0.80000000000000004"/> |
2826 | + </dia:attribute> |
2827 | + <dia:attribute name="pos"> |
2828 | + <dia:point val="9.72938,15.5025"/> |
2829 | + </dia:attribute> |
2830 | + <dia:attribute name="color"> |
2831 | + <dia:color val="#000000"/> |
2832 | + </dia:attribute> |
2833 | + <dia:attribute name="alignment"> |
2834 | + <dia:enum val="1"/> |
2835 | + </dia:attribute> |
2836 | + </dia:composite> |
2837 | + </dia:attribute> |
2838 | + <dia:attribute name="entry_action"> |
2839 | + <dia:string>##</dia:string> |
2840 | + </dia:attribute> |
2841 | + <dia:attribute name="do_action"> |
2842 | + <dia:string>##</dia:string> |
2843 | + </dia:attribute> |
2844 | + <dia:attribute name="exit_action"> |
2845 | + <dia:string>##</dia:string> |
2846 | + </dia:attribute> |
2847 | + </dia:object> |
2848 | + <dia:object type="UML - State" version="0" id="O2"> |
2849 | + <dia:attribute name="obj_pos"> |
2850 | + <dia:point val="7.42563,20"/> |
2851 | + </dia:attribute> |
2852 | + <dia:attribute name="obj_bb"> |
2853 | + <dia:rectangle val="7.37563,19.95;12.0831,21.85"/> |
2854 | + </dia:attribute> |
2855 | + <dia:attribute name="meta"> |
2856 | + <dia:composite type="dict"/> |
2857 | + </dia:attribute> |
2858 | + <dia:attribute name="elem_corner"> |
2859 | + <dia:point val="7.42563,20"/> |
2860 | + </dia:attribute> |
2861 | + <dia:attribute name="elem_width"> |
2862 | + <dia:real val="4.6074999999999999"/> |
2863 | + </dia:attribute> |
2864 | + <dia:attribute name="elem_height"> |
2865 | + <dia:real val="1.8"/> |
2866 | + </dia:attribute> |
2867 | + <dia:attribute name="line_colour"> |
2868 | + <dia:color val="#000000"/> |
2869 | + </dia:attribute> |
2870 | + <dia:attribute name="fill_colour"> |
2871 | + <dia:color val="#ffffff"/> |
2872 | + </dia:attribute> |
2873 | + <dia:attribute name="text"> |
2874 | + <dia:composite type="text"> |
2875 | + <dia:attribute name="string"> |
2876 | + <dia:string>#CONNECTED#</dia:string> |
2877 | + </dia:attribute> |
2878 | + <dia:attribute name="font"> |
2879 | + <dia:font family="sans" style="0" name="Helvetica"/> |
2880 | + </dia:attribute> |
2881 | + <dia:attribute name="height"> |
2882 | + <dia:real val="0.80000000000000004"/> |
2883 | + </dia:attribute> |
2884 | + <dia:attribute name="pos"> |
2885 | + <dia:point val="9.72938,21.14"/> |
2886 | + </dia:attribute> |
2887 | + <dia:attribute name="color"> |
2888 | + <dia:color val="#000000"/> |
2889 | + </dia:attribute> |
2890 | + <dia:attribute name="alignment"> |
2891 | + <dia:enum val="1"/> |
2892 | + </dia:attribute> |
2893 | + </dia:composite> |
2894 | + </dia:attribute> |
2895 | + <dia:attribute name="entry_action"> |
2896 | + <dia:string>##</dia:string> |
2897 | + </dia:attribute> |
2898 | + <dia:attribute name="do_action"> |
2899 | + <dia:string>##</dia:string> |
2900 | + </dia:attribute> |
2901 | + <dia:attribute name="exit_action"> |
2902 | + <dia:string>##</dia:string> |
2903 | + </dia:attribute> |
2904 | + </dia:object> |
2905 | + <dia:object type="UML - State" version="0" id="O3"> |
2906 | + <dia:attribute name="obj_pos"> |
2907 | + <dia:point val="6.90938,26"/> |
2908 | + </dia:attribute> |
2909 | + <dia:attribute name="obj_bb"> |
2910 | + <dia:rectangle val="6.85938,25.95;12.5994,27.85"/> |
2911 | + </dia:attribute> |
2912 | + <dia:attribute name="meta"> |
2913 | + <dia:composite type="dict"/> |
2914 | + </dia:attribute> |
2915 | + <dia:attribute name="elem_corner"> |
2916 | + <dia:point val="6.90938,26"/> |
2917 | + </dia:attribute> |
2918 | + <dia:attribute name="elem_width"> |
2919 | + <dia:real val="5.6399999999999997"/> |
2920 | + </dia:attribute> |
2921 | + <dia:attribute name="elem_height"> |
2922 | + <dia:real val="1.8"/> |
2923 | + </dia:attribute> |
2924 | + <dia:attribute name="line_colour"> |
2925 | + <dia:color val="#000000"/> |
2926 | + </dia:attribute> |
2927 | + <dia:attribute name="fill_colour"> |
2928 | + <dia:color val="#ffffff"/> |
2929 | + </dia:attribute> |
2930 | + <dia:attribute name="text"> |
2931 | + <dia:composite type="text"> |
2932 | + <dia:attribute name="string"> |
2933 | + <dia:string>#DISCONNECTED#</dia:string> |
2934 | + </dia:attribute> |
2935 | + <dia:attribute name="font"> |
2936 | + <dia:font family="sans" style="0" name="Helvetica"/> |
2937 | + </dia:attribute> |
2938 | + <dia:attribute name="height"> |
2939 | + <dia:real val="0.80000000000000004"/> |
2940 | + </dia:attribute> |
2941 | + <dia:attribute name="pos"> |
2942 | + <dia:point val="9.72938,27.14"/> |
2943 | + </dia:attribute> |
2944 | + <dia:attribute name="color"> |
2945 | + <dia:color val="#000000"/> |
2946 | + </dia:attribute> |
2947 | + <dia:attribute name="alignment"> |
2948 | + <dia:enum val="1"/> |
2949 | + </dia:attribute> |
2950 | + </dia:composite> |
2951 | + </dia:attribute> |
2952 | + <dia:attribute name="entry_action"> |
2953 | + <dia:string>##</dia:string> |
2954 | + </dia:attribute> |
2955 | + <dia:attribute name="do_action"> |
2956 | + <dia:string>##</dia:string> |
2957 | + </dia:attribute> |
2958 | + <dia:attribute name="exit_action"> |
2959 | + <dia:string>##</dia:string> |
2960 | + </dia:attribute> |
2961 | + </dia:object> |
2962 | + <dia:object type="UML - Transition" version="2" id="O4"> |
2963 | + <dia:attribute name="obj_pos"> |
2964 | + <dia:point val="9.72938,11.8003"/> |
2965 | + </dia:attribute> |
2966 | + <dia:attribute name="obj_bb"> |
2967 | + <dia:rectangle val="8.98438,10.9062;10.2294,14.362"/> |
2968 | + </dia:attribute> |
2969 | + <dia:attribute name="meta"> |
2970 | + <dia:composite type="dict"/> |
2971 | + </dia:attribute> |
2972 | + <dia:attribute name="orth_points"> |
2973 | + <dia:point val="9.72938,11.8003"/> |
2974 | + <dia:point val="9.72938,12.3003"/> |
2975 | + <dia:point val="9.72938,13.812"/> |
2976 | + <dia:point val="9.72938,14.312"/> |
2977 | + </dia:attribute> |
2978 | + <dia:attribute name="orth_orient"> |
2979 | + <dia:enum val="1"/> |
2980 | + <dia:enum val="0"/> |
2981 | + <dia:enum val="1"/> |
2982 | + </dia:attribute> |
2983 | + <dia:attribute name="orth_autoroute"> |
2984 | + <dia:boolean val="true"/> |
2985 | + </dia:attribute> |
2986 | + <dia:attribute name="text_colour"> |
2987 | + <dia:color val="#000000"/> |
2988 | + </dia:attribute> |
2989 | + <dia:attribute name="line_colour"> |
2990 | + <dia:color val="#000000"/> |
2991 | + </dia:attribute> |
2992 | + <dia:attribute name="trigger"> |
2993 | + <dia:string>##</dia:string> |
2994 | + </dia:attribute> |
2995 | + <dia:attribute name="action"> |
2996 | + <dia:string>##</dia:string> |
2997 | + </dia:attribute> |
2998 | + <dia:attribute name="guard"> |
2999 | + <dia:string>##</dia:string> |
3000 | + </dia:attribute> |
3001 | + <dia:attribute name="trigger_text_pos"> |
3002 | + <dia:point val="9.22938,11.5562"/> |
3003 | + </dia:attribute> |
3004 | + <dia:attribute name="guard_text_pos"> |
3005 | + <dia:point val="9.22938,12.5562"/> |
3006 | + </dia:attribute> |
3007 | + <dia:attribute name="direction_inverted"> |
3008 | + <dia:boolean val="false"/> |
3009 | + </dia:attribute> |
3010 | + <dia:connections> |
3011 | + <dia:connection handle="0" to="O0" connection="8"/> |
3012 | + <dia:connection handle="1" to="O1" connection="8"/> |
3013 | + </dia:connections> |
3014 | + </dia:object> |
3015 | + <dia:object type="UML - Transition" version="2" id="O5"> |
3016 | + <dia:attribute name="obj_pos"> |
3017 | + <dia:point val="9.72938,16.2125"/> |
3018 | + </dia:attribute> |
3019 | + <dia:attribute name="obj_bb"> |
3020 | + <dia:rectangle val="6.01813,16.1625;10.2294,20"/> |
3021 | + </dia:attribute> |
3022 | + <dia:attribute name="meta"> |
3023 | + <dia:composite type="dict"/> |
3024 | + </dia:attribute> |
3025 | + <dia:attribute name="orth_points"> |
3026 | + <dia:point val="9.72938,16.2125"/> |
3027 | + <dia:point val="9.72938,18.0812"/> |
3028 | + <dia:point val="9.72938,18.0812"/> |
3029 | + <dia:point val="9.72938,19.95"/> |
3030 | + </dia:attribute> |
3031 | + <dia:attribute name="orth_orient"> |
3032 | + <dia:enum val="1"/> |
3033 | + <dia:enum val="0"/> |
3034 | + <dia:enum val="1"/> |
3035 | + </dia:attribute> |
3036 | + <dia:attribute name="orth_autoroute"> |
3037 | + <dia:boolean val="false"/> |
3038 | + </dia:attribute> |
3039 | + <dia:attribute name="text_colour"> |
3040 | + <dia:color val="#000000"/> |
3041 | + </dia:attribute> |
3042 | + <dia:attribute name="line_colour"> |
3043 | + <dia:color val="#000000"/> |
3044 | + </dia:attribute> |
3045 | + <dia:attribute name="trigger"> |
3046 | + <dia:string>#CONN_UP#</dia:string> |
3047 | + </dia:attribute> |
3048 | + <dia:attribute name="action"> |
3049 | + <dia:string>##</dia:string> |
3050 | + </dia:attribute> |
3051 | + <dia:attribute name="guard"> |
3052 | + <dia:string>##</dia:string> |
3053 | + </dia:attribute> |
3054 | + <dia:attribute name="trigger_text_pos"> |
3055 | + <dia:point val="7.42563,18"/> |
3056 | + </dia:attribute> |
3057 | + <dia:attribute name="guard_text_pos"> |
3058 | + <dia:point val="9.22938,17.5812"/> |
3059 | + </dia:attribute> |
3060 | + <dia:attribute name="direction_inverted"> |
3061 | + <dia:boolean val="false"/> |
3062 | + </dia:attribute> |
3063 | + <dia:connections> |
3064 | + <dia:connection handle="0" to="O1" connection="8"/> |
3065 | + <dia:connection handle="1" to="O2" connection="8"/> |
3066 | + </dia:connections> |
3067 | + </dia:object> |
3068 | + <dia:object type="UML - Transition" version="2" id="O6"> |
3069 | + <dia:attribute name="obj_pos"> |
3070 | + <dia:point val="7.37534,20.9"/> |
3071 | + </dia:attribute> |
3072 | + <dia:attribute name="obj_bb"> |
3073 | + <dia:rectangle val="1.13812,20.4;7.42534,27.4"/> |
3074 | + </dia:attribute> |
3075 | + <dia:attribute name="meta"> |
3076 | + <dia:composite type="dict"/> |
3077 | + </dia:attribute> |
3078 | + <dia:attribute name="orth_points"> |
3079 | + <dia:point val="7.37534,20.9"/> |
3080 | + <dia:point val="5.40938,20.9"/> |
3081 | + <dia:point val="5.40938,26.9"/> |
3082 | + <dia:point val="6.90938,26.9"/> |
3083 | + </dia:attribute> |
3084 | + <dia:attribute name="orth_orient"> |
3085 | + <dia:enum val="0"/> |
3086 | + <dia:enum val="1"/> |
3087 | + <dia:enum val="0"/> |
3088 | + </dia:attribute> |
3089 | + <dia:attribute name="orth_autoroute"> |
3090 | + <dia:boolean val="true"/> |
3091 | + </dia:attribute> |
3092 | + <dia:attribute name="text_colour"> |
3093 | + <dia:color val="#000000"/> |
3094 | + </dia:attribute> |
3095 | + <dia:attribute name="line_colour"> |
3096 | + <dia:color val="#000000"/> |
3097 | + </dia:attribute> |
3098 | + <dia:attribute name="trigger"> |
3099 | + <dia:string>#CONN_DOWN#</dia:string> |
3100 | + </dia:attribute> |
3101 | + <dia:attribute name="action"> |
3102 | + <dia:string>##</dia:string> |
3103 | + </dia:attribute> |
3104 | + <dia:attribute name="guard"> |
3105 | + <dia:string>##</dia:string> |
3106 | + </dia:attribute> |
3107 | + <dia:attribute name="trigger_text_pos"> |
3108 | + <dia:point val="3.10562,23.5"/> |
3109 | + </dia:attribute> |
3110 | + <dia:attribute name="guard_text_pos"> |
3111 | + <dia:point val="4.90938,23.4"/> |
3112 | + </dia:attribute> |
3113 | + <dia:attribute name="direction_inverted"> |
3114 | + <dia:boolean val="false"/> |
3115 | + </dia:attribute> |
3116 | + <dia:connections> |
3117 | + <dia:connection handle="0" to="O2" connection="8"/> |
3118 | + <dia:connection handle="1" to="O3" connection="3"/> |
3119 | + </dia:connections> |
3120 | + </dia:object> |
3121 | + <dia:object type="UML - State Term" version="0" id="O7"> |
3122 | + <dia:attribute name="obj_pos"> |
3123 | + <dia:point val="17,14.5125"/> |
3124 | + </dia:attribute> |
3125 | + <dia:attribute name="obj_bb"> |
3126 | + <dia:rectangle val="16.95,14.4625;18.55,16.0625"/> |
3127 | + </dia:attribute> |
3128 | + <dia:attribute name="meta"> |
3129 | + <dia:composite type="dict"/> |
3130 | + </dia:attribute> |
3131 | + <dia:attribute name="elem_corner"> |
3132 | + <dia:point val="17,14.5125"/> |
3133 | + </dia:attribute> |
3134 | + <dia:attribute name="elem_width"> |
3135 | + <dia:real val="1.5"/> |
3136 | + </dia:attribute> |
3137 | + <dia:attribute name="elem_height"> |
3138 | + <dia:real val="1.5"/> |
3139 | + </dia:attribute> |
3140 | + <dia:attribute name="line_colour"> |
3141 | + <dia:color val="#000000"/> |
3142 | + </dia:attribute> |
3143 | + <dia:attribute name="fill_colour"> |
3144 | + <dia:color val="#ffffff"/> |
3145 | + </dia:attribute> |
3146 | + <dia:attribute name="is_final"> |
3147 | + <dia:boolean val="true"/> |
3148 | + </dia:attribute> |
3149 | + </dia:object> |
3150 | + <dia:object type="UML - Transition" version="2" id="O8"> |
3151 | + <dia:attribute name="obj_pos"> |
3152 | + <dia:point val="12.2634,15.2625"/> |
3153 | + </dia:attribute> |
3154 | + <dia:attribute name="obj_bb"> |
3155 | + <dia:rectangle val="12.2134,13.1125;17,15.7625"/> |
3156 | + </dia:attribute> |
3157 | + <dia:attribute name="meta"> |
3158 | + <dia:composite type="dict"/> |
3159 | + </dia:attribute> |
3160 | + <dia:attribute name="orth_points"> |
3161 | + <dia:point val="12.2634,15.2625"/> |
3162 | + <dia:point val="14.3943,15.2625"/> |
3163 | + <dia:point val="14.3943,15.2625"/> |
3164 | + <dia:point val="16.95,15.2625"/> |
3165 | + </dia:attribute> |
3166 | + <dia:attribute name="orth_orient"> |
3167 | + <dia:enum val="0"/> |
3168 | + <dia:enum val="1"/> |
3169 | + <dia:enum val="0"/> |
3170 | + </dia:attribute> |
3171 | + <dia:attribute name="orth_autoroute"> |
3172 | + <dia:boolean val="false"/> |
3173 | + </dia:attribute> |
3174 | + <dia:attribute name="text_colour"> |
3175 | + <dia:color val="#ff0000"/> |
3176 | + </dia:attribute> |
3177 | + <dia:attribute name="line_colour"> |
3178 | + <dia:color val="#000000"/> |
3179 | + </dia:attribute> |
3180 | + <dia:attribute name="trigger"> |
3181 | + <dia:string>#FAILED#</dia:string> |
3182 | + </dia:attribute> |
3183 | + <dia:attribute name="action"> |
3184 | + <dia:string>##</dia:string> |
3185 | + </dia:attribute> |
3186 | + <dia:attribute name="guard"> |
3187 | + <dia:string>##</dia:string> |
3188 | + </dia:attribute> |
3189 | + <dia:attribute name="trigger_text_pos"> |
3190 | + <dia:point val="13.8943,13.7625"/> |
3191 | + </dia:attribute> |
3192 | + <dia:attribute name="guard_text_pos"> |
3193 | + <dia:point val="13.8943,14.7625"/> |
3194 | + </dia:attribute> |
3195 | + <dia:attribute name="direction_inverted"> |
3196 | + <dia:boolean val="false"/> |
3197 | + </dia:attribute> |
3198 | + <dia:connections> |
3199 | + <dia:connection handle="0" to="O1" connection="8"/> |
3200 | + <dia:connection handle="1" to="O7" connection="8"/> |
3201 | + </dia:connections> |
3202 | + </dia:object> |
3203 | + <dia:object type="UML - Transition" version="2" id="O9"> |
3204 | + <dia:attribute name="obj_pos"> |
3205 | + <dia:point val="12.0331,20.9"/> |
3206 | + </dia:attribute> |
3207 | + <dia:attribute name="obj_bb"> |
3208 | + <dia:rectangle val="11.5331,16.0127;18.25,21.05"/> |
3209 | + </dia:attribute> |
3210 | + <dia:attribute name="meta"> |
3211 | + <dia:composite type="dict"/> |
3212 | + </dia:attribute> |
3213 | + <dia:attribute name="orth_points"> |
3214 | + <dia:point val="12.0331,20.9"/> |
3215 | + <dia:point val="12.0331,21"/> |
3216 | + <dia:point val="17.75,21"/> |
3217 | + <dia:point val="17.75,16.0627"/> |
3218 | + </dia:attribute> |
3219 | + <dia:attribute name="orth_orient"> |
3220 | + <dia:enum val="1"/> |
3221 | + <dia:enum val="0"/> |
3222 | + <dia:enum val="1"/> |
3223 | + </dia:attribute> |
3224 | + <dia:attribute name="orth_autoroute"> |
3225 | + <dia:boolean val="false"/> |
3226 | + </dia:attribute> |
3227 | + <dia:attribute name="text_colour"> |
3228 | + <dia:color val="#ff0000"/> |
3229 | + </dia:attribute> |
3230 | + <dia:attribute name="line_colour"> |
3231 | + <dia:color val="#000000"/> |
3232 | + </dia:attribute> |
3233 | + <dia:attribute name="trigger"> |
3234 | + <dia:string>#CLOSED#</dia:string> |
3235 | + </dia:attribute> |
3236 | + <dia:attribute name="action"> |
3237 | + <dia:string>##</dia:string> |
3238 | + </dia:attribute> |
3239 | + <dia:attribute name="guard"> |
3240 | + <dia:string>##</dia:string> |
3241 | + </dia:attribute> |
3242 | + <dia:attribute name="trigger_text_pos"> |
3243 | + <dia:point val="14.3916,19.5"/> |
3244 | + </dia:attribute> |
3245 | + <dia:attribute name="guard_text_pos"> |
3246 | + <dia:point val="14.3916,20.5"/> |
3247 | + </dia:attribute> |
3248 | + <dia:attribute name="direction_inverted"> |
3249 | + <dia:boolean val="false"/> |
3250 | + </dia:attribute> |
3251 | + <dia:connections> |
3252 | + <dia:connection handle="0" to="O2" connection="4"/> |
3253 | + <dia:connection handle="1" to="O7" connection="8"/> |
3254 | + </dia:connections> |
3255 | + </dia:object> |
3256 | + <dia:object type="UML - Transition" version="2" id="O10"> |
3257 | + <dia:attribute name="obj_pos"> |
3258 | + <dia:point val="9.72938,25.9495"/> |
3259 | + </dia:attribute> |
3260 | + <dia:attribute name="obj_bb"> |
3261 | + <dia:rectangle val="8.98438,21.8005;12.8331,25.9995"/> |
3262 | + </dia:attribute> |
3263 | + <dia:attribute name="meta"> |
3264 | + <dia:composite type="dict"/> |
3265 | + </dia:attribute> |
3266 | + <dia:attribute name="orth_points"> |
3267 | + <dia:point val="9.72938,25.9495"/> |
3268 | + <dia:point val="9.72938,25.4495"/> |
3269 | + <dia:point val="9.72938,22.3505"/> |
3270 | + <dia:point val="9.72938,21.8505"/> |
3271 | + </dia:attribute> |
3272 | + <dia:attribute name="orth_orient"> |
3273 | + <dia:enum val="1"/> |
3274 | + <dia:enum val="0"/> |
3275 | + <dia:enum val="1"/> |
3276 | + </dia:attribute> |
3277 | + <dia:attribute name="orth_autoroute"> |
3278 | + <dia:boolean val="true"/> |
3279 | + </dia:attribute> |
3280 | + <dia:attribute name="text_colour"> |
3281 | + <dia:color val="#000000"/> |
3282 | + </dia:attribute> |
3283 | + <dia:attribute name="line_colour"> |
3284 | + <dia:color val="#000000"/> |
3285 | + </dia:attribute> |
3286 | + <dia:attribute name="trigger"> |
3287 | + <dia:string>#CONN_UP#</dia:string> |
3288 | + </dia:attribute> |
3289 | + <dia:attribute name="action"> |
3290 | + <dia:string>##</dia:string> |
3291 | + </dia:attribute> |
3292 | + <dia:attribute name="guard"> |
3293 | + <dia:string>##</dia:string> |
3294 | + </dia:attribute> |
3295 | + <dia:attribute name="trigger_text_pos"> |
3296 | + <dia:point val="11.4256,23.5"/> |
3297 | + </dia:attribute> |
3298 | + <dia:attribute name="guard_text_pos"> |
3299 | + <dia:point val="9.22938,23.4"/> |
3300 | + </dia:attribute> |
3301 | + <dia:attribute name="direction_inverted"> |
3302 | + <dia:boolean val="false"/> |
3303 | + </dia:attribute> |
3304 | + <dia:connections> |
3305 | + <dia:connection handle="0" to="O3" connection="8"/> |
3306 | + <dia:connection handle="1" to="O2" connection="8"/> |
3307 | + </dia:connections> |
3308 | + </dia:object> |
3309 | + </dia:layer> |
3310 | +</dia:diagram> |
3311 | |
3312 | === added file 'ca_protocol/dia/repeater.dia' |
3313 | --- ca_protocol/dia/repeater.dia 1970-01-01 00:00:00 +0000 |
3314 | +++ ca_protocol/dia/repeater.dia 2014-09-29 14:22:53 +0000 |
3315 | @@ -0,0 +1,458 @@ |
3316 | +<?xml version="1.0" encoding="UTF-8"?> |
3317 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
3318 | + <dia:diagramdata> |
3319 | + <dia:attribute name="background"> |
3320 | + <dia:color val="#ffffff"/> |
3321 | + </dia:attribute> |
3322 | + <dia:attribute name="pagebreak"> |
3323 | + <dia:color val="#000099"/> |
3324 | + </dia:attribute> |
3325 | + <dia:attribute name="paper"> |
3326 | + <dia:composite type="paper"> |
3327 | + <dia:attribute name="name"> |
3328 | + <dia:string>#A4#</dia:string> |
3329 | + </dia:attribute> |
3330 | + <dia:attribute name="tmargin"> |
3331 | + <dia:real val="2.8222000598907471"/> |
3332 | + </dia:attribute> |
3333 | + <dia:attribute name="bmargin"> |
3334 | + <dia:real val="2.8222000598907471"/> |
3335 | + </dia:attribute> |
3336 | + <dia:attribute name="lmargin"> |
3337 | + <dia:real val="2.8222000598907471"/> |
3338 | + </dia:attribute> |
3339 | + <dia:attribute name="rmargin"> |
3340 | + <dia:real val="2.8222000598907471"/> |
3341 | + </dia:attribute> |
3342 | + <dia:attribute name="is_portrait"> |
3343 | + <dia:boolean val="true"/> |
3344 | + </dia:attribute> |
3345 | + <dia:attribute name="scaling"> |
3346 | + <dia:real val="1"/> |
3347 | + </dia:attribute> |
3348 | + <dia:attribute name="fitto"> |
3349 | + <dia:boolean val="false"/> |
3350 | + </dia:attribute> |
3351 | + </dia:composite> |
3352 | + </dia:attribute> |
3353 | + <dia:attribute name="grid"> |
3354 | + <dia:composite type="grid"> |
3355 | + <dia:attribute name="width_x"> |
3356 | + <dia:real val="1"/> |
3357 | + </dia:attribute> |
3358 | + <dia:attribute name="width_y"> |
3359 | + <dia:real val="1"/> |
3360 | + </dia:attribute> |
3361 | + <dia:attribute name="visible_x"> |
3362 | + <dia:int val="1"/> |
3363 | + </dia:attribute> |
3364 | + <dia:attribute name="visible_y"> |
3365 | + <dia:int val="1"/> |
3366 | + </dia:attribute> |
3367 | + <dia:composite type="color"/> |
3368 | + </dia:composite> |
3369 | + </dia:attribute> |
3370 | + <dia:attribute name="color"> |
3371 | + <dia:color val="#d8e5e5"/> |
3372 | + </dia:attribute> |
3373 | + <dia:attribute name="guides"> |
3374 | + <dia:composite type="guides"> |
3375 | + <dia:attribute name="hguides"/> |
3376 | + <dia:attribute name="vguides"/> |
3377 | + </dia:composite> |
3378 | + </dia:attribute> |
3379 | + </dia:diagramdata> |
3380 | + <dia:layer name="Hintergrund" visible="true" active="true"> |
3381 | + <dia:object type="Standard - Box" version="0" id="O0"> |
3382 | + <dia:attribute name="obj_pos"> |
3383 | + <dia:point val="-1,-1"/> |
3384 | + </dia:attribute> |
3385 | + <dia:attribute name="obj_bb"> |
3386 | + <dia:rectangle val="-1.05,-1.05;16.05,11.05"/> |
3387 | + </dia:attribute> |
3388 | + <dia:attribute name="elem_corner"> |
3389 | + <dia:point val="-1,-1"/> |
3390 | + </dia:attribute> |
3391 | + <dia:attribute name="elem_width"> |
3392 | + <dia:real val="17"/> |
3393 | + </dia:attribute> |
3394 | + <dia:attribute name="elem_height"> |
3395 | + <dia:real val="12"/> |
3396 | + </dia:attribute> |
3397 | + <dia:attribute name="border_width"> |
3398 | + <dia:real val="0.10000000149011612"/> |
3399 | + </dia:attribute> |
3400 | + <dia:attribute name="inner_color"> |
3401 | + <dia:color val="#e5e5e5"/> |
3402 | + </dia:attribute> |
3403 | + <dia:attribute name="show_background"> |
3404 | + <dia:boolean val="true"/> |
3405 | + </dia:attribute> |
3406 | + </dia:object> |
3407 | + <dia:object type="Flowchart - Box" version="0" id="O1"> |
3408 | + <dia:attribute name="obj_pos"> |
3409 | + <dia:point val="1,3"/> |
3410 | + </dia:attribute> |
3411 | + <dia:attribute name="obj_bb"> |
3412 | + <dia:rectangle val="0.95,2.95;6.05,4.95"/> |
3413 | + </dia:attribute> |
3414 | + <dia:attribute name="elem_corner"> |
3415 | + <dia:point val="1,3"/> |
3416 | + </dia:attribute> |
3417 | + <dia:attribute name="elem_width"> |
3418 | + <dia:real val="5"/> |
3419 | + </dia:attribute> |
3420 | + <dia:attribute name="elem_height"> |
3421 | + <dia:real val="1.9000000000000001"/> |
3422 | + </dia:attribute> |
3423 | + <dia:attribute name="show_background"> |
3424 | + <dia:boolean val="true"/> |
3425 | + </dia:attribute> |
3426 | + <dia:attribute name="padding"> |
3427 | + <dia:real val="0.5"/> |
3428 | + </dia:attribute> |
3429 | + <dia:attribute name="text"> |
3430 | + <dia:composite type="text"> |
3431 | + <dia:attribute name="string"> |
3432 | + <dia:string>#Repeater#</dia:string> |
3433 | + </dia:attribute> |
3434 | + <dia:attribute name="font"> |
3435 | + <dia:font family="sans" style="0" name="Helvetica"/> |
3436 | + </dia:attribute> |
3437 | + <dia:attribute name="height"> |
3438 | + <dia:real val="0.80000000000000004"/> |
3439 | + </dia:attribute> |
3440 | + <dia:attribute name="pos"> |
3441 | + <dia:point val="3.5,4.19"/> |
3442 | + </dia:attribute> |
3443 | + <dia:attribute name="color"> |
3444 | + <dia:color val="#000000"/> |
3445 | + </dia:attribute> |
3446 | + <dia:attribute name="alignment"> |
3447 | + <dia:enum val="1"/> |
3448 | + </dia:attribute> |
3449 | + </dia:composite> |
3450 | + </dia:attribute> |
3451 | + </dia:object> |
3452 | + <dia:object type="Flowchart - Box" version="0" id="O2"> |
3453 | + <dia:attribute name="obj_pos"> |
3454 | + <dia:point val="10,0"/> |
3455 | + </dia:attribute> |
3456 | + <dia:attribute name="obj_bb"> |
3457 | + <dia:rectangle val="9.95,-0.05;15.05,1.95"/> |
3458 | + </dia:attribute> |
3459 | + <dia:attribute name="elem_corner"> |
3460 | + <dia:point val="10,0"/> |
3461 | + </dia:attribute> |
3462 | + <dia:attribute name="elem_width"> |
3463 | + <dia:real val="5"/> |
3464 | + </dia:attribute> |
3465 | + <dia:attribute name="elem_height"> |
3466 | + <dia:real val="1.9000000000000001"/> |
3467 | + </dia:attribute> |
3468 | + <dia:attribute name="show_background"> |
3469 | + <dia:boolean val="true"/> |
3470 | + </dia:attribute> |
3471 | + <dia:attribute name="padding"> |
3472 | + <dia:real val="0.5"/> |
3473 | + </dia:attribute> |
3474 | + <dia:attribute name="text"> |
3475 | + <dia:composite type="text"> |
3476 | + <dia:attribute name="string"> |
3477 | + <dia:string>#CA Server 1#</dia:string> |
3478 | + </dia:attribute> |
3479 | + <dia:attribute name="font"> |
3480 | + <dia:font family="sans" style="0" name="Helvetica"/> |
3481 | + </dia:attribute> |
3482 | + <dia:attribute name="height"> |
3483 | + <dia:real val="0.80000000000000004"/> |
3484 | + </dia:attribute> |
3485 | + <dia:attribute name="pos"> |
3486 | + <dia:point val="12.5,1.19"/> |
3487 | + </dia:attribute> |
3488 | + <dia:attribute name="color"> |
3489 | + <dia:color val="#000000"/> |
3490 | + </dia:attribute> |
3491 | + <dia:attribute name="alignment"> |
3492 | + <dia:enum val="1"/> |
3493 | + </dia:attribute> |
3494 | + </dia:composite> |
3495 | + </dia:attribute> |
3496 | + </dia:object> |
3497 | + <dia:object type="Flowchart - Box" version="0" id="O3"> |
3498 | + <dia:attribute name="obj_pos"> |
3499 | + <dia:point val="10,3"/> |
3500 | + </dia:attribute> |
3501 | + <dia:attribute name="obj_bb"> |
3502 | + <dia:rectangle val="9.95,2.95;15.05,4.95"/> |
3503 | + </dia:attribute> |
3504 | + <dia:attribute name="elem_corner"> |
3505 | + <dia:point val="10,3"/> |
3506 | + </dia:attribute> |
3507 | + <dia:attribute name="elem_width"> |
3508 | + <dia:real val="5"/> |
3509 | + </dia:attribute> |
3510 | + <dia:attribute name="elem_height"> |
3511 | + <dia:real val="1.9000000000000004"/> |
3512 | + </dia:attribute> |
3513 | + <dia:attribute name="show_background"> |
3514 | + <dia:boolean val="true"/> |
3515 | + </dia:attribute> |
3516 | + <dia:attribute name="padding"> |
3517 | + <dia:real val="0.5"/> |
3518 | + </dia:attribute> |
3519 | + <dia:attribute name="text"> |
3520 | + <dia:composite type="text"> |
3521 | + <dia:attribute name="string"> |
3522 | + <dia:string>#CA Client#</dia:string> |
3523 | + </dia:attribute> |
3524 | + <dia:attribute name="font"> |
3525 | + <dia:font family="sans" style="0" name="Helvetica"/> |
3526 | + </dia:attribute> |
3527 | + <dia:attribute name="height"> |
3528 | + <dia:real val="0.80000000000000004"/> |
3529 | + </dia:attribute> |
3530 | + <dia:attribute name="pos"> |
3531 | + <dia:point val="12.5,4.19"/> |
3532 | + </dia:attribute> |
3533 | + <dia:attribute name="color"> |
3534 | + <dia:color val="#000000"/> |
3535 | + </dia:attribute> |
3536 | + <dia:attribute name="alignment"> |
3537 | + <dia:enum val="1"/> |
3538 | + </dia:attribute> |
3539 | + </dia:composite> |
3540 | + </dia:attribute> |
3541 | + </dia:object> |
3542 | + <dia:object type="Standard - Line" version="0" id="O4"> |
3543 | + <dia:attribute name="obj_pos"> |
3544 | + <dia:point val="6,3.95"/> |
3545 | + </dia:attribute> |
3546 | + <dia:attribute name="obj_bb"> |
3547 | + <dia:rectangle val="5.95,3.5882;10.1118,4.3118"/> |
3548 | + </dia:attribute> |
3549 | + <dia:attribute name="conn_endpoints"> |
3550 | + <dia:point val="6,3.95"/> |
3551 | + <dia:point val="10,3.95"/> |
3552 | + </dia:attribute> |
3553 | + <dia:attribute name="numcp"> |
3554 | + <dia:int val="1"/> |
3555 | + </dia:attribute> |
3556 | + <dia:attribute name="end_arrow"> |
3557 | + <dia:enum val="22"/> |
3558 | + </dia:attribute> |
3559 | + <dia:attribute name="end_arrow_length"> |
3560 | + <dia:real val="0.5"/> |
3561 | + </dia:attribute> |
3562 | + <dia:attribute name="end_arrow_width"> |
3563 | + <dia:real val="0.5"/> |
3564 | + </dia:attribute> |
3565 | + <dia:connections> |
3566 | + <dia:connection handle="0" to="O1" connection="8"/> |
3567 | + <dia:connection handle="1" to="O3" connection="7"/> |
3568 | + </dia:connections> |
3569 | + </dia:object> |
3570 | + <dia:object type="Standard - ZigZagLine" version="1" id="O5"> |
3571 | + <dia:attribute name="obj_pos"> |
3572 | + <dia:point val="6.05031,3.95"/> |
3573 | + </dia:attribute> |
3574 | + <dia:attribute name="obj_bb"> |
3575 | + <dia:rectangle val="6.00031,0.588197;10.1118,4"/> |
3576 | + </dia:attribute> |
3577 | + <dia:attribute name="orth_points"> |
3578 | + <dia:point val="6.05031,3.95"/> |
3579 | + <dia:point val="8.02516,3.95"/> |
3580 | + <dia:point val="8.02516,0.95"/> |
3581 | + <dia:point val="10,0.95"/> |
3582 | + </dia:attribute> |
3583 | + <dia:attribute name="orth_orient"> |
3584 | + <dia:enum val="0"/> |
3585 | + <dia:enum val="1"/> |
3586 | + <dia:enum val="0"/> |
3587 | + </dia:attribute> |
3588 | + <dia:attribute name="autorouting"> |
3589 | + <dia:boolean val="true"/> |
3590 | + </dia:attribute> |
3591 | + <dia:attribute name="end_arrow"> |
3592 | + <dia:enum val="22"/> |
3593 | + </dia:attribute> |
3594 | + <dia:attribute name="end_arrow_length"> |
3595 | + <dia:real val="0.5"/> |
3596 | + </dia:attribute> |
3597 | + <dia:attribute name="end_arrow_width"> |
3598 | + <dia:real val="0.5"/> |
3599 | + </dia:attribute> |
3600 | + <dia:connections> |
3601 | + <dia:connection handle="0" to="O1" connection="16"/> |
3602 | + <dia:connection handle="1" to="O2" connection="7"/> |
3603 | + </dia:connections> |
3604 | + </dia:object> |
3605 | + <dia:object type="Flowchart - Box" version="0" id="O6"> |
3606 | + <dia:attribute name="obj_pos"> |
3607 | + <dia:point val="10,6"/> |
3608 | + </dia:attribute> |
3609 | + <dia:attribute name="obj_bb"> |
3610 | + <dia:rectangle val="9.95,5.95;15.05,7.95"/> |
3611 | + </dia:attribute> |
3612 | + <dia:attribute name="elem_corner"> |
3613 | + <dia:point val="10,6"/> |
3614 | + </dia:attribute> |
3615 | + <dia:attribute name="elem_width"> |
3616 | + <dia:real val="5"/> |
3617 | + </dia:attribute> |
3618 | + <dia:attribute name="elem_height"> |
3619 | + <dia:real val="1.9000000000000001"/> |
3620 | + </dia:attribute> |
3621 | + <dia:attribute name="show_background"> |
3622 | + <dia:boolean val="true"/> |
3623 | + </dia:attribute> |
3624 | + <dia:attribute name="padding"> |
3625 | + <dia:real val="0.5"/> |
3626 | + </dia:attribute> |
3627 | + <dia:attribute name="text"> |
3628 | + <dia:composite type="text"> |
3629 | + <dia:attribute name="string"> |
3630 | + <dia:string>#CA Server 2#</dia:string> |
3631 | + </dia:attribute> |
3632 | + <dia:attribute name="font"> |
3633 | + <dia:font family="sans" style="0" name="Helvetica"/> |
3634 | + </dia:attribute> |
3635 | + <dia:attribute name="height"> |
3636 | + <dia:real val="0.80000000000000004"/> |
3637 | + </dia:attribute> |
3638 | + <dia:attribute name="pos"> |
3639 | + <dia:point val="12.5,7.19"/> |
3640 | + </dia:attribute> |
3641 | + <dia:attribute name="color"> |
3642 | + <dia:color val="#000000"/> |
3643 | + </dia:attribute> |
3644 | + <dia:attribute name="alignment"> |
3645 | + <dia:enum val="1"/> |
3646 | + </dia:attribute> |
3647 | + </dia:composite> |
3648 | + </dia:attribute> |
3649 | + </dia:object> |
3650 | + <dia:object type="Standard - ZigZagLine" version="1" id="O7"> |
3651 | + <dia:attribute name="obj_pos"> |
3652 | + <dia:point val="6.05031,3.95"/> |
3653 | + </dia:attribute> |
3654 | + <dia:attribute name="obj_bb"> |
3655 | + <dia:rectangle val="6.00031,3.9;10.1118,6.8368"/> |
3656 | + </dia:attribute> |
3657 | + <dia:attribute name="orth_points"> |
3658 | + <dia:point val="6.05031,3.95"/> |
3659 | + <dia:point val="8.02516,3.95"/> |
3660 | + <dia:point val="8.02516,6.475"/> |
3661 | + <dia:point val="10,6.475"/> |
3662 | + </dia:attribute> |
3663 | + <dia:attribute name="orth_orient"> |
3664 | + <dia:enum val="0"/> |
3665 | + <dia:enum val="1"/> |
3666 | + <dia:enum val="0"/> |
3667 | + </dia:attribute> |
3668 | + <dia:attribute name="autorouting"> |
3669 | + <dia:boolean val="true"/> |
3670 | + </dia:attribute> |
3671 | + <dia:attribute name="end_arrow"> |
3672 | + <dia:enum val="22"/> |
3673 | + </dia:attribute> |
3674 | + <dia:attribute name="end_arrow_length"> |
3675 | + <dia:real val="0.5"/> |
3676 | + </dia:attribute> |
3677 | + <dia:attribute name="end_arrow_width"> |
3678 | + <dia:real val="0.5"/> |
3679 | + </dia:attribute> |
3680 | + <dia:connections> |
3681 | + <dia:connection handle="0" to="O1" connection="16"/> |
3682 | + <dia:connection handle="1" to="O6" connection="5"/> |
3683 | + </dia:connections> |
3684 | + </dia:object> |
3685 | + <dia:object type="Standard - Text" version="1" id="O8"> |
3686 | + <dia:attribute name="obj_pos"> |
3687 | + <dia:point val="7.5,10"/> |
3688 | + </dia:attribute> |
3689 | + <dia:attribute name="obj_bb"> |
3690 | + <dia:rectangle val="6.37125,8.87;8.62875,10.2325"/> |
3691 | + </dia:attribute> |
3692 | + <dia:attribute name="text"> |
3693 | + <dia:composite type="text"> |
3694 | + <dia:attribute name="string"> |
3695 | + <dia:string>#Host#</dia:string> |
3696 | + </dia:attribute> |
3697 | + <dia:attribute name="font"> |
3698 | + <dia:font family="sans" style="0" name="Helvetica"/> |
3699 | + </dia:attribute> |
3700 | + <dia:attribute name="height"> |
3701 | + <dia:real val="1.4111111193350803"/> |
3702 | + </dia:attribute> |
3703 | + <dia:attribute name="pos"> |
3704 | + <dia:point val="7.5,10"/> |
3705 | + </dia:attribute> |
3706 | + <dia:attribute name="color"> |
3707 | + <dia:color val="#000000"/> |
3708 | + </dia:attribute> |
3709 | + <dia:attribute name="alignment"> |
3710 | + <dia:enum val="1"/> |
3711 | + </dia:attribute> |
3712 | + </dia:composite> |
3713 | + </dia:attribute> |
3714 | + <dia:attribute name="valign"> |
3715 | + <dia:enum val="3"/> |
3716 | + </dia:attribute> |
3717 | + </dia:object> |
3718 | + <dia:object type="Standard - Line" version="0" id="O9"> |
3719 | + <dia:attribute name="obj_pos"> |
3720 | + <dia:point val="-3,3.96847"/> |
3721 | + </dia:attribute> |
3722 | + <dia:attribute name="obj_bb"> |
3723 | + <dia:rectangle val="-3.05023,3.59103;1.1118,4.31462"/> |
3724 | + </dia:attribute> |
3725 | + <dia:attribute name="conn_endpoints"> |
3726 | + <dia:point val="-3,3.96847"/> |
3727 | + <dia:point val="1,3.95"/> |
3728 | + </dia:attribute> |
3729 | + <dia:attribute name="numcp"> |
3730 | + <dia:int val="1"/> |
3731 | + </dia:attribute> |
3732 | + <dia:attribute name="end_arrow"> |
3733 | + <dia:enum val="22"/> |
3734 | + </dia:attribute> |
3735 | + <dia:attribute name="end_arrow_length"> |
3736 | + <dia:real val="0.5"/> |
3737 | + </dia:attribute> |
3738 | + <dia:attribute name="end_arrow_width"> |
3739 | + <dia:real val="0.5"/> |
3740 | + </dia:attribute> |
3741 | + <dia:connections> |
3742 | + <dia:connection handle="1" to="O1" connection="7"/> |
3743 | + </dia:connections> |
3744 | + </dia:object> |
3745 | + <dia:object type="Standard - Line" version="0" id="O10"> |
3746 | + <dia:attribute name="obj_pos"> |
3747 | + <dia:point val="10,7.37045"/> |
3748 | + </dia:attribute> |
3749 | + <dia:attribute name="obj_bb"> |
3750 | + <dia:rectangle val="-3.1118,7.01201;10.05,7.73561"/> |
3751 | + </dia:attribute> |
3752 | + <dia:attribute name="conn_endpoints"> |
3753 | + <dia:point val="10,7.37045"/> |
3754 | + <dia:point val="-3,7.37398"/> |
3755 | + </dia:attribute> |
3756 | + <dia:attribute name="numcp"> |
3757 | + <dia:int val="1"/> |
3758 | + </dia:attribute> |
3759 | + <dia:attribute name="end_arrow"> |
3760 | + <dia:enum val="22"/> |
3761 | + </dia:attribute> |
3762 | + <dia:attribute name="end_arrow_length"> |
3763 | + <dia:real val="0.5"/> |
3764 | + </dia:attribute> |
3765 | + <dia:attribute name="end_arrow_width"> |
3766 | + <dia:real val="0.5"/> |
3767 | + </dia:attribute> |
3768 | + <dia:connections> |
3769 | + <dia:connection handle="0" to="O6" connection="7"/> |
3770 | + </dia:connections> |
3771 | + </dia:object> |
3772 | + </dia:layer> |
3773 | +</dia:diagram> |
3774 | |
3775 | === added file 'ca_protocol/dia/virtual-circuit.dia' |
3776 | --- ca_protocol/dia/virtual-circuit.dia 1970-01-01 00:00:00 +0000 |
3777 | +++ ca_protocol/dia/virtual-circuit.dia 2014-09-29 14:22:53 +0000 |
3778 | @@ -0,0 +1,1368 @@ |
3779 | +<?xml version="1.0" encoding="UTF-8"?> |
3780 | +<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/"> |
3781 | + <dia:diagramdata> |
3782 | + <dia:attribute name="background"> |
3783 | + <dia:color val="#ffffff"/> |
3784 | + </dia:attribute> |
3785 | + <dia:attribute name="pagebreak"> |
3786 | + <dia:color val="#000099"/> |
3787 | + </dia:attribute> |
3788 | + <dia:attribute name="paper"> |
3789 | + <dia:composite type="paper"> |
3790 | + <dia:attribute name="name"> |
3791 | + <dia:string>#A4#</dia:string> |
3792 | + </dia:attribute> |
3793 | + <dia:attribute name="tmargin"> |
3794 | + <dia:real val="2.8222000598907471"/> |
3795 | + </dia:attribute> |
3796 | + <dia:attribute name="bmargin"> |
3797 | + <dia:real val="2.8222000598907471"/> |
3798 | + </dia:attribute> |
3799 | + <dia:attribute name="lmargin"> |
3800 | + <dia:real val="2.8222000598907471"/> |
3801 | + </dia:attribute> |
3802 | + <dia:attribute name="rmargin"> |
3803 | + <dia:real val="2.8222000598907471"/> |
3804 | + </dia:attribute> |
3805 | + <dia:attribute name="is_portrait"> |
3806 | + <dia:boolean val="true"/> |
3807 | + </dia:attribute> |
3808 | + <dia:attribute name="scaling"> |
3809 | + <dia:real val="1"/> |
3810 | + </dia:attribute> |
3811 | + <dia:attribute name="fitto"> |
3812 | + <dia:boolean val="false"/> |
3813 | + </dia:attribute> |
3814 | + </dia:composite> |
3815 | + </dia:attribute> |
3816 | + <dia:attribute name="grid"> |
3817 | + <dia:composite type="grid"> |
3818 | + <dia:attribute name="width_x"> |
3819 | + <dia:real val="1"/> |
3820 | + </dia:attribute> |
3821 | + <dia:attribute name="width_y"> |
3822 | + <dia:real val="1"/> |
3823 | + </dia:attribute> |
3824 | + <dia:attribute name="visible_x"> |
3825 | + <dia:int val="1"/> |
3826 | + </dia:attribute> |
3827 | + <dia:attribute name="visible_y"> |
3828 | + <dia:int val="1"/> |
3829 | + </dia:attribute> |
3830 | + <dia:composite type="color"/> |
3831 | + </dia:composite> |
3832 | + </dia:attribute> |
3833 | + <dia:attribute name="color"> |
3834 | + <dia:color val="#d8e5e5"/> |
3835 | + </dia:attribute> |
3836 | + <dia:attribute name="guides"> |
3837 | + <dia:composite type="guides"> |
3838 | + <dia:attribute name="hguides"/> |
3839 | + <dia:attribute name="vguides"/> |
3840 | + </dia:composite> |
3841 | + </dia:attribute> |
3842 | + </dia:diagramdata> |
3843 | + <dia:layer name="Hintergrund" visible="true" active="true"> |
3844 | + <dia:object type="Standard - Polygon" version="0" id="O0"> |
3845 | + <dia:attribute name="obj_pos"> |
3846 | + <dia:point val="11,12"/> |
3847 | + </dia:attribute> |
3848 | + <dia:attribute name="obj_bb"> |
3849 | + <dia:rectangle val="10.95,11.95;23.05,22.05"/> |
3850 | + </dia:attribute> |
3851 | + <dia:attribute name="poly_points"> |
3852 | + <dia:point val="11,12"/> |
3853 | + <dia:point val="23,12"/> |
3854 | + <dia:point val="23,22"/> |
3855 | + <dia:point val="21,22"/> |
3856 | + <dia:point val="21,14"/> |
3857 | + <dia:point val="11,14"/> |
3858 | + </dia:attribute> |
3859 | + <dia:attribute name="line_width"> |
3860 | + <dia:real val="0.10000000149011612"/> |
3861 | + </dia:attribute> |
3862 | + <dia:attribute name="inner_color"> |
3863 | + <dia:color val="#90ee90"/> |
3864 | + </dia:attribute> |
3865 | + <dia:attribute name="show_background"> |
3866 | + <dia:boolean val="true"/> |
3867 | + </dia:attribute> |
3868 | + </dia:object> |
3869 | + <dia:object type="Standard - Box" version="0" id="O1"> |
3870 | + <dia:attribute name="obj_pos"> |
3871 | + <dia:point val="40,18"/> |
3872 | + </dia:attribute> |
3873 | + <dia:attribute name="obj_bb"> |
3874 | + <dia:rectangle val="39.95,17.95;50.05,31.05"/> |
3875 | + </dia:attribute> |
3876 | + <dia:attribute name="elem_corner"> |
3877 | + <dia:point val="40,18"/> |
3878 | + </dia:attribute> |
3879 | + <dia:attribute name="elem_width"> |
3880 | + <dia:real val="10"/> |
3881 | + </dia:attribute> |
3882 | + <dia:attribute name="elem_height"> |
3883 | + <dia:real val="13"/> |
3884 | + </dia:attribute> |
3885 | + <dia:attribute name="show_background"> |
3886 | + <dia:boolean val="true"/> |
3887 | + </dia:attribute> |
3888 | + </dia:object> |
3889 | + <dia:object type="Standard - Box" version="0" id="O2"> |
3890 | + <dia:attribute name="obj_pos"> |
3891 | + <dia:point val="11,23"/> |
3892 | + </dia:attribute> |
3893 | + <dia:attribute name="obj_bb"> |
3894 | + <dia:rectangle val="10.95,22.95;23.05,28.05"/> |
3895 | + </dia:attribute> |
3896 | + <dia:attribute name="elem_corner"> |
3897 | + <dia:point val="11,23"/> |
3898 | + </dia:attribute> |
3899 | + <dia:attribute name="elem_width"> |
3900 | + <dia:real val="12"/> |
3901 | + </dia:attribute> |
3902 | + <dia:attribute name="elem_height"> |
3903 | + <dia:real val="5"/> |
3904 | + </dia:attribute> |
3905 | + <dia:attribute name="border_width"> |
3906 | + <dia:real val="0.10000000149011612"/> |
3907 | + </dia:attribute> |
3908 | + <dia:attribute name="inner_color"> |
3909 | + <dia:color val="#90ee90"/> |
3910 | + </dia:attribute> |
3911 | + <dia:attribute name="show_background"> |
3912 | + <dia:boolean val="true"/> |
3913 | + </dia:attribute> |
3914 | + </dia:object> |
3915 | + <dia:object type="Standard - Box" version="0" id="O3"> |
3916 | + <dia:attribute name="obj_pos"> |
3917 | + <dia:point val="11,6"/> |
3918 | + </dia:attribute> |
3919 | + <dia:attribute name="obj_bb"> |
3920 | + <dia:rectangle val="10.95,5.95;23.05,11.05"/> |
3921 | + </dia:attribute> |
3922 | + <dia:attribute name="elem_corner"> |
3923 | + <dia:point val="11,6"/> |
3924 | + </dia:attribute> |
3925 | + <dia:attribute name="elem_width"> |
3926 | + <dia:real val="12"/> |
3927 | + </dia:attribute> |
3928 | + <dia:attribute name="elem_height"> |
3929 | + <dia:real val="5"/> |
3930 | + </dia:attribute> |
3931 | + <dia:attribute name="border_width"> |
3932 | + <dia:real val="0.10000000149011612"/> |
3933 | + </dia:attribute> |
3934 | + <dia:attribute name="inner_color"> |
3935 | + <dia:color val="#90ee90"/> |
3936 | + </dia:attribute> |
3937 | + <dia:attribute name="show_background"> |
3938 | + <dia:boolean val="true"/> |
3939 | + </dia:attribute> |
3940 | + </dia:object> |
3941 | + <dia:object type="Standard - Box" version="0" id="O4"> |
3942 | + <dia:attribute name="obj_pos"> |
3943 | + <dia:point val="1,5"/> |
3944 | + </dia:attribute> |
3945 | + <dia:attribute name="obj_bb"> |
3946 | + <dia:rectangle val="0.95,4.95;10.05,15.05"/> |
3947 | + </dia:attribute> |
3948 | + <dia:attribute name="elem_corner"> |
3949 | + <dia:point val="1,5"/> |
3950 | + </dia:attribute> |
3951 | + <dia:attribute name="elem_width"> |
3952 | + <dia:real val="9"/> |
3953 | + </dia:attribute> |
3954 | + <dia:attribute name="elem_height"> |
3955 | + <dia:real val="10"/> |
3956 | + </dia:attribute> |
3957 | + <dia:attribute name="border_width"> |
3958 | + <dia:real val="0.10000000149011612"/> |
3959 | + </dia:attribute> |
3960 | + <dia:attribute name="inner_color"> |
3961 | + <dia:color val="#1e90ff"/> |
3962 | + </dia:attribute> |
3963 | + <dia:attribute name="show_background"> |
3964 | + <dia:boolean val="true"/> |
3965 | + </dia:attribute> |
3966 | + </dia:object> |
3967 | + <dia:object type="Standard - Box" version="0" id="O5"> |
3968 | + <dia:attribute name="obj_pos"> |
3969 | + <dia:point val="24,5"/> |
3970 | + </dia:attribute> |
3971 | + <dia:attribute name="obj_bb"> |
3972 | + <dia:rectangle val="23.95,4.95;36.05,17.05"/> |
3973 | + </dia:attribute> |
3974 | + <dia:attribute name="elem_corner"> |
3975 | + <dia:point val="24,5"/> |
3976 | + </dia:attribute> |
3977 | + <dia:attribute name="elem_width"> |
3978 | + <dia:real val="12"/> |
3979 | + </dia:attribute> |
3980 | + <dia:attribute name="elem_height"> |
3981 | + <dia:real val="12"/> |
3982 | + </dia:attribute> |
3983 | + <dia:attribute name="border_width"> |
3984 | + <dia:real val="0.10000000149011612"/> |
3985 | + </dia:attribute> |
3986 | + <dia:attribute name="inner_color"> |
3987 | + <dia:color val="#1e90ff"/> |
3988 | + </dia:attribute> |
3989 | + <dia:attribute name="show_background"> |
3990 | + <dia:boolean val="true"/> |
3991 | + </dia:attribute> |
3992 | + </dia:object> |
3993 | + <dia:object type="Standard - Text" version="1" id="O6"> |
3994 | + <dia:attribute name="obj_pos"> |
3995 | + <dia:point val="30,16"/> |
3996 | + </dia:attribute> |
3997 | + <dia:attribute name="obj_bb"> |
3998 | + <dia:rectangle val="27.8863,14.8359;32.1478,16.3006"/> |
3999 | + </dia:attribute> |
4000 | + <dia:attribute name="text"> |
4001 | + <dia:composite type="text"> |
4002 | + <dia:attribute name="string"> |
4003 | + <dia:string>#Server A#</dia:string> |
4004 | + </dia:attribute> |
4005 | + <dia:attribute name="font"> |
4006 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4007 | + </dia:attribute> |
4008 | + <dia:attribute name="height"> |
4009 | + <dia:real val="1.4111111193350803"/> |
4010 | + </dia:attribute> |
4011 | + <dia:attribute name="pos"> |
4012 | + <dia:point val="30,16"/> |
4013 | + </dia:attribute> |
4014 | + <dia:attribute name="color"> |
4015 | + <dia:color val="#000000"/> |
4016 | + </dia:attribute> |
4017 | + <dia:attribute name="alignment"> |
4018 | + <dia:enum val="1"/> |
4019 | + </dia:attribute> |
4020 | + </dia:composite> |
4021 | + </dia:attribute> |
4022 | + <dia:attribute name="valign"> |
4023 | + <dia:enum val="3"/> |
4024 | + </dia:attribute> |
4025 | + </dia:object> |
4026 | + <dia:object type="Standard - Box" version="0" id="O7"> |
4027 | + <dia:attribute name="obj_pos"> |
4028 | + <dia:point val="26,6"/> |
4029 | + </dia:attribute> |
4030 | + <dia:attribute name="obj_bb"> |
4031 | + <dia:rectangle val="25.95,5.95;34.05,8.05"/> |
4032 | + </dia:attribute> |
4033 | + <dia:attribute name="elem_corner"> |
4034 | + <dia:point val="26,6"/> |
4035 | + </dia:attribute> |
4036 | + <dia:attribute name="elem_width"> |
4037 | + <dia:real val="8"/> |
4038 | + </dia:attribute> |
4039 | + <dia:attribute name="elem_height"> |
4040 | + <dia:real val="2"/> |
4041 | + </dia:attribute> |
4042 | + <dia:attribute name="border_width"> |
4043 | + <dia:real val="0.10000000149011612"/> |
4044 | + </dia:attribute> |
4045 | + <dia:attribute name="inner_color"> |
4046 | + <dia:color val="#e5e5e5"/> |
4047 | + </dia:attribute> |
4048 | + <dia:attribute name="show_background"> |
4049 | + <dia:boolean val="true"/> |
4050 | + </dia:attribute> |
4051 | + </dia:object> |
4052 | + <dia:object type="Standard - Text" version="1" id="O8"> |
4053 | + <dia:attribute name="obj_pos"> |
4054 | + <dia:point val="30,7"/> |
4055 | + </dia:attribute> |
4056 | + <dia:attribute name="obj_bb"> |
4057 | + <dia:rectangle val="29.2937,6.575;30.7063,7.425"/> |
4058 | + </dia:attribute> |
4059 | + <dia:attribute name="text"> |
4060 | + <dia:composite type="text"> |
4061 | + <dia:attribute name="string"> |
4062 | + <dia:string>#PV 1#</dia:string> |
4063 | + </dia:attribute> |
4064 | + <dia:attribute name="font"> |
4065 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4066 | + </dia:attribute> |
4067 | + <dia:attribute name="height"> |
4068 | + <dia:real val="0.88194444958442519"/> |
4069 | + </dia:attribute> |
4070 | + <dia:attribute name="pos"> |
4071 | + <dia:point val="30,7.28"/> |
4072 | + </dia:attribute> |
4073 | + <dia:attribute name="color"> |
4074 | + <dia:color val="#000000"/> |
4075 | + </dia:attribute> |
4076 | + <dia:attribute name="alignment"> |
4077 | + <dia:enum val="1"/> |
4078 | + </dia:attribute> |
4079 | + </dia:composite> |
4080 | + </dia:attribute> |
4081 | + <dia:attribute name="valign"> |
4082 | + <dia:enum val="2"/> |
4083 | + </dia:attribute> |
4084 | + <dia:connections> |
4085 | + <dia:connection handle="0" to="O7" connection="8"/> |
4086 | + </dia:connections> |
4087 | + </dia:object> |
4088 | + <dia:object type="Standard - Box" version="0" id="O9"> |
4089 | + <dia:attribute name="obj_pos"> |
4090 | + <dia:point val="26,9"/> |
4091 | + </dia:attribute> |
4092 | + <dia:attribute name="obj_bb"> |
4093 | + <dia:rectangle val="25.95,8.95;34.05,11.05"/> |
4094 | + </dia:attribute> |
4095 | + <dia:attribute name="elem_corner"> |
4096 | + <dia:point val="26,9"/> |
4097 | + </dia:attribute> |
4098 | + <dia:attribute name="elem_width"> |
4099 | + <dia:real val="8"/> |
4100 | + </dia:attribute> |
4101 | + <dia:attribute name="elem_height"> |
4102 | + <dia:real val="2"/> |
4103 | + </dia:attribute> |
4104 | + <dia:attribute name="border_width"> |
4105 | + <dia:real val="0.10000000149011612"/> |
4106 | + </dia:attribute> |
4107 | + <dia:attribute name="inner_color"> |
4108 | + <dia:color val="#e5e5e5"/> |
4109 | + </dia:attribute> |
4110 | + <dia:attribute name="show_background"> |
4111 | + <dia:boolean val="true"/> |
4112 | + </dia:attribute> |
4113 | + </dia:object> |
4114 | + <dia:object type="Standard - Text" version="1" id="O10"> |
4115 | + <dia:attribute name="obj_pos"> |
4116 | + <dia:point val="30,10"/> |
4117 | + </dia:attribute> |
4118 | + <dia:attribute name="obj_bb"> |
4119 | + <dia:rectangle val="29.2937,9.575;30.7063,10.425"/> |
4120 | + </dia:attribute> |
4121 | + <dia:attribute name="text"> |
4122 | + <dia:composite type="text"> |
4123 | + <dia:attribute name="string"> |
4124 | + <dia:string>#PV 2#</dia:string> |
4125 | + </dia:attribute> |
4126 | + <dia:attribute name="font"> |
4127 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4128 | + </dia:attribute> |
4129 | + <dia:attribute name="height"> |
4130 | + <dia:real val="0.88194444958442519"/> |
4131 | + </dia:attribute> |
4132 | + <dia:attribute name="pos"> |
4133 | + <dia:point val="30,10.28"/> |
4134 | + </dia:attribute> |
4135 | + <dia:attribute name="color"> |
4136 | + <dia:color val="#000000"/> |
4137 | + </dia:attribute> |
4138 | + <dia:attribute name="alignment"> |
4139 | + <dia:enum val="1"/> |
4140 | + </dia:attribute> |
4141 | + </dia:composite> |
4142 | + </dia:attribute> |
4143 | + <dia:attribute name="valign"> |
4144 | + <dia:enum val="2"/> |
4145 | + </dia:attribute> |
4146 | + <dia:connections> |
4147 | + <dia:connection handle="0" to="O9" connection="8"/> |
4148 | + </dia:connections> |
4149 | + </dia:object> |
4150 | + <dia:object type="Standard - Box" version="0" id="O11"> |
4151 | + <dia:attribute name="obj_pos"> |
4152 | + <dia:point val="26,12"/> |
4153 | + </dia:attribute> |
4154 | + <dia:attribute name="obj_bb"> |
4155 | + <dia:rectangle val="25.95,11.95;34.05,14.05"/> |
4156 | + </dia:attribute> |
4157 | + <dia:attribute name="elem_corner"> |
4158 | + <dia:point val="26,12"/> |
4159 | + </dia:attribute> |
4160 | + <dia:attribute name="elem_width"> |
4161 | + <dia:real val="8"/> |
4162 | + </dia:attribute> |
4163 | + <dia:attribute name="elem_height"> |
4164 | + <dia:real val="2"/> |
4165 | + </dia:attribute> |
4166 | + <dia:attribute name="border_width"> |
4167 | + <dia:real val="0.10000000149011612"/> |
4168 | + </dia:attribute> |
4169 | + <dia:attribute name="inner_color"> |
4170 | + <dia:color val="#e5e5e5"/> |
4171 | + </dia:attribute> |
4172 | + <dia:attribute name="show_background"> |
4173 | + <dia:boolean val="true"/> |
4174 | + </dia:attribute> |
4175 | + </dia:object> |
4176 | + <dia:object type="Standard - Text" version="1" id="O12"> |
4177 | + <dia:attribute name="obj_pos"> |
4178 | + <dia:point val="30,13"/> |
4179 | + </dia:attribute> |
4180 | + <dia:attribute name="obj_bb"> |
4181 | + <dia:rectangle val="29.1675,12.575;30.8325,13.425"/> |
4182 | + </dia:attribute> |
4183 | + <dia:attribute name="text"> |
4184 | + <dia:composite type="text"> |
4185 | + <dia:attribute name="string"> |
4186 | + <dia:string>#PV ...#</dia:string> |
4187 | + </dia:attribute> |
4188 | + <dia:attribute name="font"> |
4189 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4190 | + </dia:attribute> |
4191 | + <dia:attribute name="height"> |
4192 | + <dia:real val="0.88194444958442519"/> |
4193 | + </dia:attribute> |
4194 | + <dia:attribute name="pos"> |
4195 | + <dia:point val="30,13.28"/> |
4196 | + </dia:attribute> |
4197 | + <dia:attribute name="color"> |
4198 | + <dia:color val="#000000"/> |
4199 | + </dia:attribute> |
4200 | + <dia:attribute name="alignment"> |
4201 | + <dia:enum val="1"/> |
4202 | + </dia:attribute> |
4203 | + </dia:composite> |
4204 | + </dia:attribute> |
4205 | + <dia:attribute name="valign"> |
4206 | + <dia:enum val="2"/> |
4207 | + </dia:attribute> |
4208 | + <dia:connections> |
4209 | + <dia:connection handle="0" to="O11" connection="8"/> |
4210 | + </dia:connections> |
4211 | + </dia:object> |
4212 | + <dia:object type="Standard - Text" version="1" id="O13"> |
4213 | + <dia:attribute name="obj_pos"> |
4214 | + <dia:point val="5.48297,14"/> |
4215 | + </dia:attribute> |
4216 | + <dia:attribute name="obj_bb"> |
4217 | + <dia:rectangle val="3.57047,12.87;7.39547,14.2325"/> |
4218 | + </dia:attribute> |
4219 | + <dia:attribute name="text"> |
4220 | + <dia:composite type="text"> |
4221 | + <dia:attribute name="string"> |
4222 | + <dia:string>#Client A#</dia:string> |
4223 | + </dia:attribute> |
4224 | + <dia:attribute name="font"> |
4225 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4226 | + </dia:attribute> |
4227 | + <dia:attribute name="height"> |
4228 | + <dia:real val="1.4111111193350803"/> |
4229 | + </dia:attribute> |
4230 | + <dia:attribute name="pos"> |
4231 | + <dia:point val="5.48297,14"/> |
4232 | + </dia:attribute> |
4233 | + <dia:attribute name="color"> |
4234 | + <dia:color val="#000000"/> |
4235 | + </dia:attribute> |
4236 | + <dia:attribute name="alignment"> |
4237 | + <dia:enum val="1"/> |
4238 | + </dia:attribute> |
4239 | + </dia:composite> |
4240 | + </dia:attribute> |
4241 | + <dia:attribute name="valign"> |
4242 | + <dia:enum val="3"/> |
4243 | + </dia:attribute> |
4244 | + </dia:object> |
4245 | + <dia:object type="Standard - Line" version="0" id="O14"> |
4246 | + <dia:attribute name="obj_pos"> |
4247 | + <dia:point val="9,7"/> |
4248 | + </dia:attribute> |
4249 | + <dia:attribute name="obj_bb"> |
4250 | + <dia:rectangle val="8.92929,6.67929;27.0707,7.32071"/> |
4251 | + </dia:attribute> |
4252 | + <dia:attribute name="conn_endpoints"> |
4253 | + <dia:point val="9,7"/> |
4254 | + <dia:point val="27,7"/> |
4255 | + </dia:attribute> |
4256 | + <dia:attribute name="numcp"> |
4257 | + <dia:int val="1"/> |
4258 | + </dia:attribute> |
4259 | + <dia:attribute name="start_arrow"> |
4260 | + <dia:enum val="8"/> |
4261 | + </dia:attribute> |
4262 | + <dia:attribute name="start_arrow_length"> |
4263 | + <dia:real val="0.5"/> |
4264 | + </dia:attribute> |
4265 | + <dia:attribute name="start_arrow_width"> |
4266 | + <dia:real val="0.5"/> |
4267 | + </dia:attribute> |
4268 | + <dia:attribute name="end_arrow"> |
4269 | + <dia:enum val="8"/> |
4270 | + </dia:attribute> |
4271 | + <dia:attribute name="end_arrow_length"> |
4272 | + <dia:real val="0.5"/> |
4273 | + </dia:attribute> |
4274 | + <dia:attribute name="end_arrow_width"> |
4275 | + <dia:real val="0.5"/> |
4276 | + </dia:attribute> |
4277 | + </dia:object> |
4278 | + <dia:object type="Standard - Box" version="0" id="O15"> |
4279 | + <dia:attribute name="obj_pos"> |
4280 | + <dia:point val="24,19"/> |
4281 | + </dia:attribute> |
4282 | + <dia:attribute name="obj_bb"> |
4283 | + <dia:rectangle val="23.95,18.95;36.05,31.05"/> |
4284 | + </dia:attribute> |
4285 | + <dia:attribute name="elem_corner"> |
4286 | + <dia:point val="24,19"/> |
4287 | + </dia:attribute> |
4288 | + <dia:attribute name="elem_width"> |
4289 | + <dia:real val="12"/> |
4290 | + </dia:attribute> |
4291 | + <dia:attribute name="elem_height"> |
4292 | + <dia:real val="12"/> |
4293 | + </dia:attribute> |
4294 | + <dia:attribute name="border_width"> |
4295 | + <dia:real val="0.10000000149011612"/> |
4296 | + </dia:attribute> |
4297 | + <dia:attribute name="inner_color"> |
4298 | + <dia:color val="#1e90ff"/> |
4299 | + </dia:attribute> |
4300 | + <dia:attribute name="show_background"> |
4301 | + <dia:boolean val="true"/> |
4302 | + </dia:attribute> |
4303 | + </dia:object> |
4304 | + <dia:object type="Standard - Text" version="1" id="O16"> |
4305 | + <dia:attribute name="obj_pos"> |
4306 | + <dia:point val="30,30"/> |
4307 | + </dia:attribute> |
4308 | + <dia:attribute name="obj_bb"> |
4309 | + <dia:rectangle val="27.8925,28.87;32.1075,30.2325"/> |
4310 | + </dia:attribute> |
4311 | + <dia:attribute name="text"> |
4312 | + <dia:composite type="text"> |
4313 | + <dia:attribute name="string"> |
4314 | + <dia:string>#Server B#</dia:string> |
4315 | + </dia:attribute> |
4316 | + <dia:attribute name="font"> |
4317 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4318 | + </dia:attribute> |
4319 | + <dia:attribute name="height"> |
4320 | + <dia:real val="1.4111111193350803"/> |
4321 | + </dia:attribute> |
4322 | + <dia:attribute name="pos"> |
4323 | + <dia:point val="30,30"/> |
4324 | + </dia:attribute> |
4325 | + <dia:attribute name="color"> |
4326 | + <dia:color val="#000000"/> |
4327 | + </dia:attribute> |
4328 | + <dia:attribute name="alignment"> |
4329 | + <dia:enum val="1"/> |
4330 | + </dia:attribute> |
4331 | + </dia:composite> |
4332 | + </dia:attribute> |
4333 | + <dia:attribute name="valign"> |
4334 | + <dia:enum val="3"/> |
4335 | + </dia:attribute> |
4336 | + </dia:object> |
4337 | + <dia:object type="Standard - Box" version="0" id="O17"> |
4338 | + <dia:attribute name="obj_pos"> |
4339 | + <dia:point val="26,20"/> |
4340 | + </dia:attribute> |
4341 | + <dia:attribute name="obj_bb"> |
4342 | + <dia:rectangle val="25.95,19.95;34.05,22.05"/> |
4343 | + </dia:attribute> |
4344 | + <dia:attribute name="elem_corner"> |
4345 | + <dia:point val="26,20"/> |
4346 | + </dia:attribute> |
4347 | + <dia:attribute name="elem_width"> |
4348 | + <dia:real val="8"/> |
4349 | + </dia:attribute> |
4350 | + <dia:attribute name="elem_height"> |
4351 | + <dia:real val="2"/> |
4352 | + </dia:attribute> |
4353 | + <dia:attribute name="border_width"> |
4354 | + <dia:real val="0.10000000149011612"/> |
4355 | + </dia:attribute> |
4356 | + <dia:attribute name="inner_color"> |
4357 | + <dia:color val="#e5e5e5"/> |
4358 | + </dia:attribute> |
4359 | + <dia:attribute name="show_background"> |
4360 | + <dia:boolean val="true"/> |
4361 | + </dia:attribute> |
4362 | + </dia:object> |
4363 | + <dia:object type="Standard - Text" version="1" id="O18"> |
4364 | + <dia:attribute name="obj_pos"> |
4365 | + <dia:point val="30,21"/> |
4366 | + </dia:attribute> |
4367 | + <dia:attribute name="obj_bb"> |
4368 | + <dia:rectangle val="29.2937,20.575;30.7063,21.425"/> |
4369 | + </dia:attribute> |
4370 | + <dia:attribute name="text"> |
4371 | + <dia:composite type="text"> |
4372 | + <dia:attribute name="string"> |
4373 | + <dia:string>#PV 3#</dia:string> |
4374 | + </dia:attribute> |
4375 | + <dia:attribute name="font"> |
4376 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4377 | + </dia:attribute> |
4378 | + <dia:attribute name="height"> |
4379 | + <dia:real val="0.88194444958442519"/> |
4380 | + </dia:attribute> |
4381 | + <dia:attribute name="pos"> |
4382 | + <dia:point val="30,21.28"/> |
4383 | + </dia:attribute> |
4384 | + <dia:attribute name="color"> |
4385 | + <dia:color val="#000000"/> |
4386 | + </dia:attribute> |
4387 | + <dia:attribute name="alignment"> |
4388 | + <dia:enum val="1"/> |
4389 | + </dia:attribute> |
4390 | + </dia:composite> |
4391 | + </dia:attribute> |
4392 | + <dia:attribute name="valign"> |
4393 | + <dia:enum val="2"/> |
4394 | + </dia:attribute> |
4395 | + <dia:connections> |
4396 | + <dia:connection handle="0" to="O17" connection="8"/> |
4397 | + </dia:connections> |
4398 | + </dia:object> |
4399 | + <dia:object type="Standard - Box" version="0" id="O19"> |
4400 | + <dia:attribute name="obj_pos"> |
4401 | + <dia:point val="26,23"/> |
4402 | + </dia:attribute> |
4403 | + <dia:attribute name="obj_bb"> |
4404 | + <dia:rectangle val="25.95,22.95;34.05,25.05"/> |
4405 | + </dia:attribute> |
4406 | + <dia:attribute name="elem_corner"> |
4407 | + <dia:point val="26,23"/> |
4408 | + </dia:attribute> |
4409 | + <dia:attribute name="elem_width"> |
4410 | + <dia:real val="8"/> |
4411 | + </dia:attribute> |
4412 | + <dia:attribute name="elem_height"> |
4413 | + <dia:real val="2"/> |
4414 | + </dia:attribute> |
4415 | + <dia:attribute name="border_width"> |
4416 | + <dia:real val="0.10000000149011612"/> |
4417 | + </dia:attribute> |
4418 | + <dia:attribute name="inner_color"> |
4419 | + <dia:color val="#e5e5e5"/> |
4420 | + </dia:attribute> |
4421 | + <dia:attribute name="show_background"> |
4422 | + <dia:boolean val="true"/> |
4423 | + </dia:attribute> |
4424 | + </dia:object> |
4425 | + <dia:object type="Standard - Text" version="1" id="O20"> |
4426 | + <dia:attribute name="obj_pos"> |
4427 | + <dia:point val="30,24"/> |
4428 | + </dia:attribute> |
4429 | + <dia:attribute name="obj_bb"> |
4430 | + <dia:rectangle val="29.2937,23.575;30.7063,24.425"/> |
4431 | + </dia:attribute> |
4432 | + <dia:attribute name="text"> |
4433 | + <dia:composite type="text"> |
4434 | + <dia:attribute name="string"> |
4435 | + <dia:string>#PV 4#</dia:string> |
4436 | + </dia:attribute> |
4437 | + <dia:attribute name="font"> |
4438 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4439 | + </dia:attribute> |
4440 | + <dia:attribute name="height"> |
4441 | + <dia:real val="0.88194444958442519"/> |
4442 | + </dia:attribute> |
4443 | + <dia:attribute name="pos"> |
4444 | + <dia:point val="30,24.28"/> |
4445 | + </dia:attribute> |
4446 | + <dia:attribute name="color"> |
4447 | + <dia:color val="#000000"/> |
4448 | + </dia:attribute> |
4449 | + <dia:attribute name="alignment"> |
4450 | + <dia:enum val="1"/> |
4451 | + </dia:attribute> |
4452 | + </dia:composite> |
4453 | + </dia:attribute> |
4454 | + <dia:attribute name="valign"> |
4455 | + <dia:enum val="2"/> |
4456 | + </dia:attribute> |
4457 | + <dia:connections> |
4458 | + <dia:connection handle="0" to="O19" connection="8"/> |
4459 | + </dia:connections> |
4460 | + </dia:object> |
4461 | + <dia:object type="Standard - Box" version="0" id="O21"> |
4462 | + <dia:attribute name="obj_pos"> |
4463 | + <dia:point val="26,26"/> |
4464 | + </dia:attribute> |
4465 | + <dia:attribute name="obj_bb"> |
4466 | + <dia:rectangle val="25.95,25.95;34.05,28.05"/> |
4467 | + </dia:attribute> |
4468 | + <dia:attribute name="elem_corner"> |
4469 | + <dia:point val="26,26"/> |
4470 | + </dia:attribute> |
4471 | + <dia:attribute name="elem_width"> |
4472 | + <dia:real val="8"/> |
4473 | + </dia:attribute> |
4474 | + <dia:attribute name="elem_height"> |
4475 | + <dia:real val="2"/> |
4476 | + </dia:attribute> |
4477 | + <dia:attribute name="border_width"> |
4478 | + <dia:real val="0.10000000149011612"/> |
4479 | + </dia:attribute> |
4480 | + <dia:attribute name="inner_color"> |
4481 | + <dia:color val="#e5e5e5"/> |
4482 | + </dia:attribute> |
4483 | + <dia:attribute name="show_background"> |
4484 | + <dia:boolean val="true"/> |
4485 | + </dia:attribute> |
4486 | + </dia:object> |
4487 | + <dia:object type="Standard - Text" version="1" id="O22"> |
4488 | + <dia:attribute name="obj_pos"> |
4489 | + <dia:point val="30,27"/> |
4490 | + </dia:attribute> |
4491 | + <dia:attribute name="obj_bb"> |
4492 | + <dia:rectangle val="29.2937,26.575;30.7063,27.425"/> |
4493 | + </dia:attribute> |
4494 | + <dia:attribute name="text"> |
4495 | + <dia:composite type="text"> |
4496 | + <dia:attribute name="string"> |
4497 | + <dia:string>#PV 5#</dia:string> |
4498 | + </dia:attribute> |
4499 | + <dia:attribute name="font"> |
4500 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4501 | + </dia:attribute> |
4502 | + <dia:attribute name="height"> |
4503 | + <dia:real val="0.88194444958442519"/> |
4504 | + </dia:attribute> |
4505 | + <dia:attribute name="pos"> |
4506 | + <dia:point val="30,27.28"/> |
4507 | + </dia:attribute> |
4508 | + <dia:attribute name="color"> |
4509 | + <dia:color val="#000000"/> |
4510 | + </dia:attribute> |
4511 | + <dia:attribute name="alignment"> |
4512 | + <dia:enum val="1"/> |
4513 | + </dia:attribute> |
4514 | + </dia:composite> |
4515 | + </dia:attribute> |
4516 | + <dia:attribute name="valign"> |
4517 | + <dia:enum val="2"/> |
4518 | + </dia:attribute> |
4519 | + <dia:connections> |
4520 | + <dia:connection handle="0" to="O21" connection="8"/> |
4521 | + </dia:connections> |
4522 | + </dia:object> |
4523 | + <dia:object type="Standard - Box" version="0" id="O23"> |
4524 | + <dia:attribute name="obj_pos"> |
4525 | + <dia:point val="1,21"/> |
4526 | + </dia:attribute> |
4527 | + <dia:attribute name="obj_bb"> |
4528 | + <dia:rectangle val="0.95,20.95;10.05,31.05"/> |
4529 | + </dia:attribute> |
4530 | + <dia:attribute name="elem_corner"> |
4531 | + <dia:point val="1,21"/> |
4532 | + </dia:attribute> |
4533 | + <dia:attribute name="elem_width"> |
4534 | + <dia:real val="9"/> |
4535 | + </dia:attribute> |
4536 | + <dia:attribute name="elem_height"> |
4537 | + <dia:real val="10"/> |
4538 | + </dia:attribute> |
4539 | + <dia:attribute name="border_width"> |
4540 | + <dia:real val="0.10000000149011612"/> |
4541 | + </dia:attribute> |
4542 | + <dia:attribute name="inner_color"> |
4543 | + <dia:color val="#1e90ff"/> |
4544 | + </dia:attribute> |
4545 | + <dia:attribute name="show_background"> |
4546 | + <dia:boolean val="true"/> |
4547 | + </dia:attribute> |
4548 | + </dia:object> |
4549 | + <dia:object type="Standard - Text" version="1" id="O24"> |
4550 | + <dia:attribute name="obj_pos"> |
4551 | + <dia:point val="5.5,30"/> |
4552 | + </dia:attribute> |
4553 | + <dia:attribute name="obj_bb"> |
4554 | + <dia:rectangle val="3.59375,28.87;7.40625,30.2325"/> |
4555 | + </dia:attribute> |
4556 | + <dia:attribute name="text"> |
4557 | + <dia:composite type="text"> |
4558 | + <dia:attribute name="string"> |
4559 | + <dia:string>#Client B#</dia:string> |
4560 | + </dia:attribute> |
4561 | + <dia:attribute name="font"> |
4562 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4563 | + </dia:attribute> |
4564 | + <dia:attribute name="height"> |
4565 | + <dia:real val="1.4111111193350803"/> |
4566 | + </dia:attribute> |
4567 | + <dia:attribute name="pos"> |
4568 | + <dia:point val="5.5,30"/> |
4569 | + </dia:attribute> |
4570 | + <dia:attribute name="color"> |
4571 | + <dia:color val="#000000"/> |
4572 | + </dia:attribute> |
4573 | + <dia:attribute name="alignment"> |
4574 | + <dia:enum val="1"/> |
4575 | + </dia:attribute> |
4576 | + </dia:composite> |
4577 | + </dia:attribute> |
4578 | + <dia:attribute name="valign"> |
4579 | + <dia:enum val="3"/> |
4580 | + </dia:attribute> |
4581 | + </dia:object> |
4582 | + <dia:object type="Standard - Line" version="0" id="O25"> |
4583 | + <dia:attribute name="obj_pos"> |
4584 | + <dia:point val="9,10"/> |
4585 | + </dia:attribute> |
4586 | + <dia:attribute name="obj_bb"> |
4587 | + <dia:rectangle val="8.92929,9.67929;27.0707,10.3207"/> |
4588 | + </dia:attribute> |
4589 | + <dia:attribute name="conn_endpoints"> |
4590 | + <dia:point val="9,10"/> |
4591 | + <dia:point val="27,10"/> |
4592 | + </dia:attribute> |
4593 | + <dia:attribute name="numcp"> |
4594 | + <dia:int val="1"/> |
4595 | + </dia:attribute> |
4596 | + <dia:attribute name="start_arrow"> |
4597 | + <dia:enum val="8"/> |
4598 | + </dia:attribute> |
4599 | + <dia:attribute name="start_arrow_length"> |
4600 | + <dia:real val="0.5"/> |
4601 | + </dia:attribute> |
4602 | + <dia:attribute name="start_arrow_width"> |
4603 | + <dia:real val="0.5"/> |
4604 | + </dia:attribute> |
4605 | + <dia:attribute name="end_arrow"> |
4606 | + <dia:enum val="8"/> |
4607 | + </dia:attribute> |
4608 | + <dia:attribute name="end_arrow_length"> |
4609 | + <dia:real val="0.5"/> |
4610 | + </dia:attribute> |
4611 | + <dia:attribute name="end_arrow_width"> |
4612 | + <dia:real val="0.5"/> |
4613 | + </dia:attribute> |
4614 | + </dia:object> |
4615 | + <dia:object type="Standard - Line" version="0" id="O26"> |
4616 | + <dia:attribute name="obj_pos"> |
4617 | + <dia:point val="9,24"/> |
4618 | + </dia:attribute> |
4619 | + <dia:attribute name="obj_bb"> |
4620 | + <dia:rectangle val="8.92929,23.6793;27.0707,24.3207"/> |
4621 | + </dia:attribute> |
4622 | + <dia:attribute name="conn_endpoints"> |
4623 | + <dia:point val="9,24"/> |
4624 | + <dia:point val="27,24"/> |
4625 | + </dia:attribute> |
4626 | + <dia:attribute name="numcp"> |
4627 | + <dia:int val="1"/> |
4628 | + </dia:attribute> |
4629 | + <dia:attribute name="start_arrow"> |
4630 | + <dia:enum val="8"/> |
4631 | + </dia:attribute> |
4632 | + <dia:attribute name="start_arrow_length"> |
4633 | + <dia:real val="0.5"/> |
4634 | + </dia:attribute> |
4635 | + <dia:attribute name="start_arrow_width"> |
4636 | + <dia:real val="0.5"/> |
4637 | + </dia:attribute> |
4638 | + <dia:attribute name="end_arrow"> |
4639 | + <dia:enum val="8"/> |
4640 | + </dia:attribute> |
4641 | + <dia:attribute name="end_arrow_length"> |
4642 | + <dia:real val="0.5"/> |
4643 | + </dia:attribute> |
4644 | + <dia:attribute name="end_arrow_width"> |
4645 | + <dia:real val="0.5"/> |
4646 | + </dia:attribute> |
4647 | + </dia:object> |
4648 | + <dia:object type="Standard - Line" version="0" id="O27"> |
4649 | + <dia:attribute name="obj_pos"> |
4650 | + <dia:point val="9,27"/> |
4651 | + </dia:attribute> |
4652 | + <dia:attribute name="obj_bb"> |
4653 | + <dia:rectangle val="8.92929,26.6793;27.0707,27.3207"/> |
4654 | + </dia:attribute> |
4655 | + <dia:attribute name="conn_endpoints"> |
4656 | + <dia:point val="9,27"/> |
4657 | + <dia:point val="27,27"/> |
4658 | + </dia:attribute> |
4659 | + <dia:attribute name="numcp"> |
4660 | + <dia:int val="1"/> |
4661 | + </dia:attribute> |
4662 | + <dia:attribute name="start_arrow"> |
4663 | + <dia:enum val="8"/> |
4664 | + </dia:attribute> |
4665 | + <dia:attribute name="start_arrow_length"> |
4666 | + <dia:real val="0.5"/> |
4667 | + </dia:attribute> |
4668 | + <dia:attribute name="start_arrow_width"> |
4669 | + <dia:real val="0.5"/> |
4670 | + </dia:attribute> |
4671 | + <dia:attribute name="end_arrow"> |
4672 | + <dia:enum val="8"/> |
4673 | + </dia:attribute> |
4674 | + <dia:attribute name="end_arrow_length"> |
4675 | + <dia:real val="0.5"/> |
4676 | + </dia:attribute> |
4677 | + <dia:attribute name="end_arrow_width"> |
4678 | + <dia:real val="0.5"/> |
4679 | + </dia:attribute> |
4680 | + </dia:object> |
4681 | + <dia:object type="Standard - Box" version="0" id="O28"> |
4682 | + <dia:attribute name="obj_pos"> |
4683 | + <dia:point val="41,22"/> |
4684 | + </dia:attribute> |
4685 | + <dia:attribute name="obj_bb"> |
4686 | + <dia:rectangle val="40.95,21.95;49.05,24.05"/> |
4687 | + </dia:attribute> |
4688 | + <dia:attribute name="elem_corner"> |
4689 | + <dia:point val="41,22"/> |
4690 | + </dia:attribute> |
4691 | + <dia:attribute name="elem_width"> |
4692 | + <dia:real val="8"/> |
4693 | + </dia:attribute> |
4694 | + <dia:attribute name="elem_height"> |
4695 | + <dia:real val="2"/> |
4696 | + </dia:attribute> |
4697 | + <dia:attribute name="border_width"> |
4698 | + <dia:real val="0.10000000149011612"/> |
4699 | + </dia:attribute> |
4700 | + <dia:attribute name="inner_color"> |
4701 | + <dia:color val="#e5e5e5"/> |
4702 | + </dia:attribute> |
4703 | + <dia:attribute name="show_background"> |
4704 | + <dia:boolean val="true"/> |
4705 | + </dia:attribute> |
4706 | + </dia:object> |
4707 | + <dia:object type="Standard - Text" version="1" id="O29"> |
4708 | + <dia:attribute name="obj_pos"> |
4709 | + <dia:point val="45,23"/> |
4710 | + </dia:attribute> |
4711 | + <dia:attribute name="obj_bb"> |
4712 | + <dia:rectangle val="42.4675,22.575;47.5325,23.425"/> |
4713 | + </dia:attribute> |
4714 | + <dia:attribute name="text"> |
4715 | + <dia:composite type="text"> |
4716 | + <dia:attribute name="string"> |
4717 | + <dia:string>#Process Variable#</dia:string> |
4718 | + </dia:attribute> |
4719 | + <dia:attribute name="font"> |
4720 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4721 | + </dia:attribute> |
4722 | + <dia:attribute name="height"> |
4723 | + <dia:real val="0.88194444958442519"/> |
4724 | + </dia:attribute> |
4725 | + <dia:attribute name="pos"> |
4726 | + <dia:point val="45,23.28"/> |
4727 | + </dia:attribute> |
4728 | + <dia:attribute name="color"> |
4729 | + <dia:color val="#000000"/> |
4730 | + </dia:attribute> |
4731 | + <dia:attribute name="alignment"> |
4732 | + <dia:enum val="1"/> |
4733 | + </dia:attribute> |
4734 | + </dia:composite> |
4735 | + </dia:attribute> |
4736 | + <dia:attribute name="valign"> |
4737 | + <dia:enum val="2"/> |
4738 | + </dia:attribute> |
4739 | + <dia:connections> |
4740 | + <dia:connection handle="0" to="O28" connection="8"/> |
4741 | + </dia:connections> |
4742 | + </dia:object> |
4743 | + <dia:object type="Standard - Box" version="0" id="O30"> |
4744 | + <dia:attribute name="obj_pos"> |
4745 | + <dia:point val="41,25"/> |
4746 | + </dia:attribute> |
4747 | + <dia:attribute name="obj_bb"> |
4748 | + <dia:rectangle val="40.95,24.95;49.05,27.05"/> |
4749 | + </dia:attribute> |
4750 | + <dia:attribute name="elem_corner"> |
4751 | + <dia:point val="41,25"/> |
4752 | + </dia:attribute> |
4753 | + <dia:attribute name="elem_width"> |
4754 | + <dia:real val="8"/> |
4755 | + </dia:attribute> |
4756 | + <dia:attribute name="elem_height"> |
4757 | + <dia:real val="2"/> |
4758 | + </dia:attribute> |
4759 | + <dia:attribute name="border_width"> |
4760 | + <dia:real val="0.10000000149011612"/> |
4761 | + </dia:attribute> |
4762 | + <dia:attribute name="inner_color"> |
4763 | + <dia:color val="#1e90ff"/> |
4764 | + </dia:attribute> |
4765 | + <dia:attribute name="show_background"> |
4766 | + <dia:boolean val="true"/> |
4767 | + </dia:attribute> |
4768 | + </dia:object> |
4769 | + <dia:object type="Standard - Text" version="1" id="O31"> |
4770 | + <dia:attribute name="obj_pos"> |
4771 | + <dia:point val="45,26"/> |
4772 | + </dia:attribute> |
4773 | + <dia:attribute name="obj_bb"> |
4774 | + <dia:rectangle val="43.825,25.575;46.175,26.425"/> |
4775 | + </dia:attribute> |
4776 | + <dia:attribute name="text"> |
4777 | + <dia:composite type="text"> |
4778 | + <dia:attribute name="string"> |
4779 | + <dia:string>#Process#</dia:string> |
4780 | + </dia:attribute> |
4781 | + <dia:attribute name="font"> |
4782 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4783 | + </dia:attribute> |
4784 | + <dia:attribute name="height"> |
4785 | + <dia:real val="0.88194444958442519"/> |
4786 | + </dia:attribute> |
4787 | + <dia:attribute name="pos"> |
4788 | + <dia:point val="45,26.28"/> |
4789 | + </dia:attribute> |
4790 | + <dia:attribute name="color"> |
4791 | + <dia:color val="#000000"/> |
4792 | + </dia:attribute> |
4793 | + <dia:attribute name="alignment"> |
4794 | + <dia:enum val="1"/> |
4795 | + </dia:attribute> |
4796 | + </dia:composite> |
4797 | + </dia:attribute> |
4798 | + <dia:attribute name="valign"> |
4799 | + <dia:enum val="2"/> |
4800 | + </dia:attribute> |
4801 | + <dia:connections> |
4802 | + <dia:connection handle="0" to="O30" connection="8"/> |
4803 | + </dia:connections> |
4804 | + </dia:object> |
4805 | + <dia:object type="Standard - Box" version="0" id="O32"> |
4806 | + <dia:attribute name="obj_pos"> |
4807 | + <dia:point val="41,28"/> |
4808 | + </dia:attribute> |
4809 | + <dia:attribute name="obj_bb"> |
4810 | + <dia:rectangle val="40.95,27.95;49.05,30.05"/> |
4811 | + </dia:attribute> |
4812 | + <dia:attribute name="elem_corner"> |
4813 | + <dia:point val="41,28"/> |
4814 | + </dia:attribute> |
4815 | + <dia:attribute name="elem_width"> |
4816 | + <dia:real val="8"/> |
4817 | + </dia:attribute> |
4818 | + <dia:attribute name="elem_height"> |
4819 | + <dia:real val="2"/> |
4820 | + </dia:attribute> |
4821 | + <dia:attribute name="border_width"> |
4822 | + <dia:real val="0.10000000149011612"/> |
4823 | + </dia:attribute> |
4824 | + <dia:attribute name="inner_color"> |
4825 | + <dia:color val="#90ee90"/> |
4826 | + </dia:attribute> |
4827 | + <dia:attribute name="show_background"> |
4828 | + <dia:boolean val="true"/> |
4829 | + </dia:attribute> |
4830 | + </dia:object> |
4831 | + <dia:object type="Standard - Text" version="1" id="O33"> |
4832 | + <dia:attribute name="obj_pos"> |
4833 | + <dia:point val="45,29"/> |
4834 | + </dia:attribute> |
4835 | + <dia:attribute name="obj_bb"> |
4836 | + <dia:rectangle val="42.9137,28.575;47.0862,29.425"/> |
4837 | + </dia:attribute> |
4838 | + <dia:attribute name="text"> |
4839 | + <dia:composite type="text"> |
4840 | + <dia:attribute name="string"> |
4841 | + <dia:string>#Virtual Circuit#</dia:string> |
4842 | + </dia:attribute> |
4843 | + <dia:attribute name="font"> |
4844 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4845 | + </dia:attribute> |
4846 | + <dia:attribute name="height"> |
4847 | + <dia:real val="0.88194444958442519"/> |
4848 | + </dia:attribute> |
4849 | + <dia:attribute name="pos"> |
4850 | + <dia:point val="45,29.28"/> |
4851 | + </dia:attribute> |
4852 | + <dia:attribute name="color"> |
4853 | + <dia:color val="#000000"/> |
4854 | + </dia:attribute> |
4855 | + <dia:attribute name="alignment"> |
4856 | + <dia:enum val="1"/> |
4857 | + </dia:attribute> |
4858 | + </dia:composite> |
4859 | + </dia:attribute> |
4860 | + <dia:attribute name="valign"> |
4861 | + <dia:enum val="2"/> |
4862 | + </dia:attribute> |
4863 | + <dia:connections> |
4864 | + <dia:connection handle="0" to="O32" connection="8"/> |
4865 | + </dia:connections> |
4866 | + </dia:object> |
4867 | + <dia:object type="Standard - Line" version="0" id="O34"> |
4868 | + <dia:attribute name="obj_pos"> |
4869 | + <dia:point val="41,20"/> |
4870 | + </dia:attribute> |
4871 | + <dia:attribute name="obj_bb"> |
4872 | + <dia:rectangle val="40.9293,19.6793;49.0707,20.3207"/> |
4873 | + </dia:attribute> |
4874 | + <dia:attribute name="conn_endpoints"> |
4875 | + <dia:point val="41,20"/> |
4876 | + <dia:point val="49,20"/> |
4877 | + </dia:attribute> |
4878 | + <dia:attribute name="numcp"> |
4879 | + <dia:int val="1"/> |
4880 | + </dia:attribute> |
4881 | + <dia:attribute name="start_arrow"> |
4882 | + <dia:enum val="8"/> |
4883 | + </dia:attribute> |
4884 | + <dia:attribute name="start_arrow_length"> |
4885 | + <dia:real val="0.5"/> |
4886 | + </dia:attribute> |
4887 | + <dia:attribute name="start_arrow_width"> |
4888 | + <dia:real val="0.5"/> |
4889 | + </dia:attribute> |
4890 | + <dia:attribute name="end_arrow"> |
4891 | + <dia:enum val="8"/> |
4892 | + </dia:attribute> |
4893 | + <dia:attribute name="end_arrow_length"> |
4894 | + <dia:real val="0.5"/> |
4895 | + </dia:attribute> |
4896 | + <dia:attribute name="end_arrow_width"> |
4897 | + <dia:real val="0.5"/> |
4898 | + </dia:attribute> |
4899 | + </dia:object> |
4900 | + <dia:object type="Standard - Text" version="1" id="O35"> |
4901 | + <dia:attribute name="obj_pos"> |
4902 | + <dia:point val="45,20"/> |
4903 | + </dia:attribute> |
4904 | + <dia:attribute name="obj_bb"> |
4905 | + <dia:rectangle val="42.2875,19.15;47.7125,20"/> |
4906 | + </dia:attribute> |
4907 | + <dia:attribute name="text"> |
4908 | + <dia:composite type="text"> |
4909 | + <dia:attribute name="string"> |
4910 | + <dia:string>#(CID, name, SID)#</dia:string> |
4911 | + </dia:attribute> |
4912 | + <dia:attribute name="font"> |
4913 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4914 | + </dia:attribute> |
4915 | + <dia:attribute name="height"> |
4916 | + <dia:real val="0.88194444958442519"/> |
4917 | + </dia:attribute> |
4918 | + <dia:attribute name="pos"> |
4919 | + <dia:point val="45,19.855"/> |
4920 | + </dia:attribute> |
4921 | + <dia:attribute name="color"> |
4922 | + <dia:color val="#000000"/> |
4923 | + </dia:attribute> |
4924 | + <dia:attribute name="alignment"> |
4925 | + <dia:enum val="1"/> |
4926 | + </dia:attribute> |
4927 | + </dia:composite> |
4928 | + </dia:attribute> |
4929 | + <dia:attribute name="valign"> |
4930 | + <dia:enum val="1"/> |
4931 | + </dia:attribute> |
4932 | + <dia:connections> |
4933 | + <dia:connection handle="0" to="O34" connection="0"/> |
4934 | + </dia:connections> |
4935 | + </dia:object> |
4936 | + <dia:object type="Standard - Text" version="1" id="O36"> |
4937 | + <dia:attribute name="obj_pos"> |
4938 | + <dia:point val="18,7"/> |
4939 | + </dia:attribute> |
4940 | + <dia:attribute name="obj_bb"> |
4941 | + <dia:rectangle val="15.36,6.08625;20.6612,7"/> |
4942 | + </dia:attribute> |
4943 | + <dia:attribute name="text"> |
4944 | + <dia:composite type="text"> |
4945 | + <dia:attribute name="string"> |
4946 | + <dia:string>#(1, Channel 1, 1)#</dia:string> |
4947 | + </dia:attribute> |
4948 | + <dia:attribute name="font"> |
4949 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4950 | + </dia:attribute> |
4951 | + <dia:attribute name="height"> |
4952 | + <dia:real val="0.88194444958442519"/> |
4953 | + </dia:attribute> |
4954 | + <dia:attribute name="pos"> |
4955 | + <dia:point val="18,6.8125"/> |
4956 | + </dia:attribute> |
4957 | + <dia:attribute name="color"> |
4958 | + <dia:color val="#000000"/> |
4959 | + </dia:attribute> |
4960 | + <dia:attribute name="alignment"> |
4961 | + <dia:enum val="1"/> |
4962 | + </dia:attribute> |
4963 | + </dia:composite> |
4964 | + </dia:attribute> |
4965 | + <dia:attribute name="valign"> |
4966 | + <dia:enum val="1"/> |
4967 | + </dia:attribute> |
4968 | + <dia:connections> |
4969 | + <dia:connection handle="0" to="O14" connection="0"/> |
4970 | + </dia:connections> |
4971 | + </dia:object> |
4972 | + <dia:object type="Standard - Text" version="1" id="O37"> |
4973 | + <dia:attribute name="obj_pos"> |
4974 | + <dia:point val="18,10"/> |
4975 | + </dia:attribute> |
4976 | + <dia:attribute name="obj_bb"> |
4977 | + <dia:rectangle val="15.36,9.08625;20.6612,10"/> |
4978 | + </dia:attribute> |
4979 | + <dia:attribute name="text"> |
4980 | + <dia:composite type="text"> |
4981 | + <dia:attribute name="string"> |
4982 | + <dia:string>#(2, Channel 2, 2)#</dia:string> |
4983 | + </dia:attribute> |
4984 | + <dia:attribute name="font"> |
4985 | + <dia:font family="sans" style="0" name="Helvetica"/> |
4986 | + </dia:attribute> |
4987 | + <dia:attribute name="height"> |
4988 | + <dia:real val="0.88194444958442519"/> |
4989 | + </dia:attribute> |
4990 | + <dia:attribute name="pos"> |
4991 | + <dia:point val="18,9.8125"/> |
4992 | + </dia:attribute> |
4993 | + <dia:attribute name="color"> |
4994 | + <dia:color val="#000000"/> |
4995 | + </dia:attribute> |
4996 | + <dia:attribute name="alignment"> |
4997 | + <dia:enum val="1"/> |
4998 | + </dia:attribute> |
4999 | + </dia:composite> |
5000 | + </dia:attribute> |
What is the status of this? It seems ready to merge to me.