Merge lp:~djlauk/epics-appdev/ca-protocol into lp:~epics-documenters/epics-appdev/3.16

Proposed by Daniel J. Lauk
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
Reviewer Review Type Date Requested Status
Andrew Johnson Approve
mdavidsaver Approve
Review via email: mp+232494@code.launchpad.net

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.

To post a comment you must log in.
lp:~djlauk/epics-appdev/ca-protocol updated
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

Revision history for this message
mdavidsaver (mdavidsaver) wrote :

What is the status of this? It seems ready to merge to me.

review: Approve
Revision history for this message
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.

Revision history for this message
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://www.aps.anl.gov/epics/base/R3-15/1-docs/CAproto/index.html in case anyone wants to take a look.

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.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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>
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches