.
.
( ) . , , . .
: , ; ; ; , ; ; ; .
- . , : ; , ; ; ; ; ; ; ; .
, , .
:
T-CONNECT-request; T-CONNECT-indication; T-CONNECT-response; T-CONNECT-confirmation.
, T-DISCONNECT-request T-DISCONNECT-indication . (T-DATA-) - - . - , .. - -.
- 8.1. .
8.2.
. 8.3. , , ().
|
|
, , , . , , , . , .
8.4. - . -. . , , , , .
.
, - .
T_CONNECT.REQ:
down N_CONNECT.REQ address $address
N_CONNECT.IND:
up T_CONNECT.IND
T_CONNECT.RESP:
down N_CONNECT.RESP address $address
N_CONNECT.CONF:
up T_CONNECT.CONF
T_DATA.REQ:
down N_DATA.REQ userdata $userdata address $address
N_DATA.IND:
up T_DATA.IND userdata $userdata
T_DISCONNECT.REQ:
down N_DISCONNECT.REQ address $address
N_DISCONNECT.IND:
up T_DISCONNECT.IND
- . , - . , ( ). .
( A c B):
A:
T_CONNECT.REQ:
set addrB $address
down N_CONNECT.REQ address $addrB
;
set connect_try 5
;
timer con_try CONNECT_TRY 200
;
N_CONNECT.CONF:
untimer $con_try
; -
up T_CONNECT.CONF
;
CONNECT_TRY:
set connect_try $connect_try-1
;
if $connect_try == 0 terminate
; ?
down N_CONNECT.REQ address $addrB
;
timer con_try CONNECT_TRY 200
;
goto exit
terminate:
down N_DISCONNECT.REQ address $addrB
; -
up T_DISCONNECT.IND
|
|
;
exit:
B:
N_CONNECT.IND:
up T_CONNECT.IND
T_CONNECT.RESP:
set addrA $address
down N_CONNECT.RESP address $addrA
, . . , , . , .. , .
8.2.1 , 8.2.1 -, 8.2.2, 8.2.3 8.2.4 , .
. 8.2.1. .
8.2.1. -.
T_CON.REQ | N_CON.CONF | CON_TRY | * | |
2,- | -,- | -,- | -,- | |
-,- | -,- | -,- | 3,N_CON.REQ | |
-,- | 4,T_CON.CONF | 5,N_CON.REQ | -,- | |
-,- | -,- | -,- | -,- | |
-,- | 4,T_CON.CONF | 6,N_CON.REQ | -,- | |
-,- | 4,T_CON.CONF | 7,N_CON.REQ | -,- | |
-,- | 4,T_CON.CONF | 8,N_CON.REQ | -,- | |
-,- | 4,T_CON.CONF | 9,N_CON.REQ | -,- | |
-,- | -,- | -,- | -,- |
8.2.2. .
/ | |
T_CON.REQ | _ |
N_CON.CONF | _ |
CON_TRY | |
* |
8.2.3. C .
/ | |
N_CON.REQ | _ |
T_CON.CONF | _ |
T_DISCON.REQ | _ |
N_DISCON.REQ | _ |
8.2.3. C .
/ | |
, | |
, | |
, | |
, | |
, | |
, |
. , , . . .
:
: [ ][]
:
{num_pac - ; data - ; buf - }
|
|
buffer buf sizeof(data)+4 $num_pac 4 $data sizeof(data)
. ( ):
{ num_pac - ; data - ; buf - , }
set num_pac 0
buffer 20 data 0 4
unbuffer buf num_pac 4 data sizeof(buf)-4
, :
: [crc(4)][ (4)][]
:
{num_pac - ; data - ; buf - ; buf1- ; crc - }
buffer buf1 sizeof(data)+4 $num_pac 4 $data sizeof(data)
crc crc $buf1
buffer buf sizeof(data)+8 $crc 4 $buf1 sizeof(data)+4
. ( ):
{num_pac - ; data - ; buf - , ; crc - ; crc1 - ; buf1- }
set num_pac 0
;
set crc1 0
;
buffer 20 data 0 4
;
buffer 20 buf1 0 4
;
unbuffer buf crc 4 buf1 sizeof(buf)-4
;
crc crc $buf1
;
if $crc!= $crc1 corrupted
;
;
unbuffer buf1 num_pac 4 data sizeof(data)-8
;
...
goto exit
:corrupted
;
...
goto exit
...
:exit
, . :
;
( , ), . . :
, ( ). , . .
.
1.1 .
. , .. , .. , . , ( , ) , , :
- , , ;
- , , ;
- ;
- , .. ;
- .
: , , .
|
|
, S-CONNECT , , .
.
S-DATA, S-GIVE-TOKENS, S-PLEASE-TOKENS, S-GIVE-CONTROL S-SYNC-MINOR, S-SYNC-MAJOR, S-RESYNCHRONIZE.
: S-RELEASE - ( TR), S-P-ABORT S-U-ABORT - .
(, provider, P), (, user, U), , - S-P-ABORT S-U-ABORT.
. , . . . : . , , . : , , , , .
- . - - .
, . .
. , . : , .
, , T-CONNECT, - , . , T-DATA, , .
, , . . 11 -, -.
1.1.1 , , .
1.1.2 - .
1.2 .
1.2.1 () . , . , , (), , ( 1.2.1()).
)
)
. 1.2.1. () ().
: | |
, | .. |
, | ..() |
, | ..() |
, | .. |
, | ._. |
, | ._. |
, | .. |
, | .. |
, | ._. |
, |
|
|
2. .
( ) ( , ) :
- , , ;
- , , ;
- ;
- , .. .
: , . ( ). . , .
: , , .
, S-CONNECT.
S-CONNECT - :
S_CONNECT.REQ:
down T_CONNECT.REQ address $sysB
T_CONNECT.IND:
up S_CONNECT.IND
S_CONNECT.RESP:
down T_CONNECT.RESP address $sysA
T_CONNECT.CONF:
up S_CONNECT.CONF
sysB - , sysA - .
(, ) () , . 2.1, 2.1, 2.2 2.3 , . ( ), . , .
2.1. .
/ | |
S_CON.REQ | _ |
T_CON.CONF | _ |
T_DATA.IND2 | _ - |
T_DATA.IND1 | _ - |
T_CON.IND | _ |
2.2. C .
/ | |
T_CON.REQ | _ |
T_DATA.REQ1 | _ - |
S_CON.CONF | _ |
T_CON.RESP | _ |
T_DATA.REQ2 | _- |
S_CON.IND | _ |
2.3. C .
/ | |
1, 1 | |
2 | |
3 | |
4 | |
5 | |
6 | - |
7 | |
2 | |
3 | |
4 | |
5 | - , |
. S-DATA, S-GIVE-TOKENS, S-PLEASE-TOKENS S-SYNC-MINOR, S-SYNC-MAJOR, S-RESYNCHRONIZE.
, , :
, - . S-DATA :
S_DATA.REQ:
if $DK!=1 gettoken DK , gettoken
if qcount(outgoingq)==0 send
queue outgoingq $userdata , ,
goto exit
send:
buffer buf1 8 3 4 $userdata 4 3
down T_DATA.REQ userdata $buf1
set SP $SP+1
queue senddata $userdata
goto exit
gettoken:
timer timer45 S_RESYNC.REQ 0 token 1
queue outgoingq $userdata
goto exit
exit:
( ) T_DATA.IND. :
T_DATA.IND:
set ID 4
buffer data 4 4 4
unbuffer userdata ID 4 data 4 -
if $ID == 1 major_sync_ind
if $ID == 2 minor_sync_ind
if $ID == 3 data_ind
if $ID == 4 major_sync_conf
if $ID == 5 resync_ind
if $ID == 6 resync_conf
if $ID == 7 give_toc_ind
if $ID == 8 please_toc_ind
if $ID == 9 release_ind
if $ID == 10 u_abort_ind
goto exit
major_sync_ind:
timer t0 S_SYNC_MAJOR.IND 0 syncpoint $data
goto exit
minor_sync_ind:
timer t0 S_SYNC_MINOR.IND 0 syncpoint $data
goto exit
data_ind:
set SP $SP+1
queue ingoingq $data
if $SP % $SN == 0 major_sync SN ,
goto exit SN - ,
( )
major_sync:
timer t0 S_SYNC_MAJOR.REQ 0
goto exit
major_sync_conf:
timer t0 S_SYNC_MAJOR.CONF 0 syncpoint $data
goto exit
resync_ind:
timer t0 S_RESYNC.IND 0 syncpoint $data
goto exit
resync_conf:
timer t0 S_RESYNC.CONF 0 syncpoint $data
goto exit
give_toc_ind:
timer t0 S_GIVE_TOKEN.IND 0 syncpoint $data
goto exit
please_toc_ind:
timer t0 S_PLEASE_TOKEN.IND 0 syncpoint $data
goto exit
release_ind:
timer t0 S_RELEASE.IND 0 syncpoint $data
goto exit
u_abort_ind:
timer t0 S_U_ABORT.IND 0 syncpoint $data
goto exit
goto exit
exit:
DK - (1- , 0- ); ID - ( . 2.4.); data - ; senddata - , ; outgoingq - ; ingoingq - , .
2.4. .
, . .. , , , . , , . , , , , , .
, , , , , .
: , . , .
( ). , , .
: S-RELEASE - , S-P-ABORT S-U-ABORT - . , , . S-P-ABORT S-U-ABORT T_DISCONNECT. S_RELEASE , . :
S_P_ABORT.REQ:
buffer buf 8 10 4 $SP 4
down T_DATA.REQ userdata $buf
down T_DISCONNECT.REQ
.
1.1 .
() - - , . . , ( ).
, ( ) . . , .
. () , - , . , - .
1, , n - . . 1.1.1, 1, , m.
1 n
1 m 1 m
. 1.1.1. , .
. . , , .
, .
, ( ) . , - .
, .
. , .
, , , :
- ,
- ,
- ,
- .
() - . .
: (), , .
, , . . , . .
. , . , , , .. . . , , : . .
, . . , , . , , .
, , , .
1.2 .
1.2.1 () . , . , , (), , ( 1.2.1()).
)
. 1.2.1. () ().
.. | |
..(+) | |
..(-) | |
.. | |
._. | () |
._. | () |
, , - . , , . ., , .
1.3 .
1.3.1 , , .
1.3.2 -.
2. .
( ) .
. , , , - - - , , , .
. 1.1.1 , . , - . 2.1., - . 2.1. - . .
1 2 1 2
1 2
) )
. 2.1. , .
ASN. 1, - , . - , , , - . : {{}{}{}{}} ( - {}).
, , . . 1.1.1. , . .. ASN. 1, .
, , . .
:
, , . .
:
{{}{}{}{}} :
:
. , - .
( ), , 1.
.
, . 1.
.
:
. - , - 47.
. - , - 3.
sound 3 . sound =
. - , - 7.
move 7 . move =
. - , - 5.
color 5 . color =
. - , - 0.
smell 0 . smell =
, .
([]), [[+$sound+][+$move][+$color][+$smell]] [[][][][]].
{{}{}{}{}} [[][][][]].
:
, , , , 255.
:
'd1f'e4f'f0f'e8 |
{{}{}{}{}} :
, (.. , ..) , . , ( ) .
3. .
( ) . : , , . .
, P-CONNECT.
P-CONNECT - :
P_CONNECT.REQ:
down S_CONNECT.REQ address $sysB
S_CONNECT.IND:
up P_CONNECT.IND
P_CONNECT.RESP:
down S_CONNECT.RESP address $sysA
S_CONNECT.CONF:
up P_CONNECT.CONF
sysB - , sysA - .
. , . . , , 866- 1251-. , , , . . . , , , .
.
P-DATA, . (. 2). , ( ), ({}), - ([]) {{}{}}. . .
P_DATA.REQ:
;datatype - ()
; clbrack - - ( 1) ( })
unbuffer userdata datatype 4 s sizeof(userdata)-4
if $datatype == 1 struct
if $datatype == 2 number
if $datatype == 3 string
if $datatype == 4 buff
goto send1
number:
buffer buf 12 2 4 4 4 $s 4
goto send1
string:
buffer buf sizeof(s)+8 3 4 sizeof(s) 4 $s 4
goto send1
buff:
buffer buf sizeof(s)+8 4 4 sizeof(s) 4 $s 4
goto send1
struct:
; userdata {{}{}{}{}}
; ( , .. {{)
;s {{}{}}
unbuffer s c 2 t sizeof(s)-2 t }{}}
;
unbuffer t sound pos($clbrack,t)-1 c 2 s sizeof(t)-2-$q s }} sound
unbuffer s move pos($clbrack,s)-1 c 2 t sizeof(s)-2-$q t move
;
buffer bufsound sizeof(sound)+8 10 4 sizeof(sound) 4 $sound sizeof(sound) bufsound 10 3
buffer bufmove sizeof(move)+8 20 4 sizeof(move) 4 $move sizeof(move) bufmove 20 7
;
set q sizeof(bufsound)+sizeof(bufmove)
;
buffer buf $q+8 1 4 $q 4 $bufsound sizeof(bufsound) $bufmove sizeof(bufmove)
;buf 1 26 10 3 20 7
goto send1
send1:
down S_DATA.REQ userdata $buf
goto exit
T_DATA.IND:
; clbrack - - ( 1) ( ])
; opbrack - - ( 1) ( [)
; (type - ; len - )
unbuffer userdata type 4 len 4 buf sizeof(userdata)-8
if $type == 1 struct1
if $type == 2 number1
if $type == 3 string1
if $type == 4 buff1
goto exit
number1:
unbuffer buf num $len
buffer data 8 2 4 $num 4
out $num
goto send
string1:
unbuffer buf str $len
buffer data sizeof(str)+4 3 4 $str sizeof(str)
out $str
goto send
buff1:
unbuffer buf buff $len
buffer data sizeof(buff)+4 4 4 $buff sizeof(buff)
goto send
struct1:
;userdata -1 26 10 3 20 7
; type - 1 len - 26 buf -10 3 20 7
next:
if sizeof(buf)==0 done
unbuffer buf type 4 len 4 buf1 sizeof(buf)-8 type - 10 len - 3 buf1 - 20 7
if $type==10 sound
if $type==20 move
goto error
sound:
unbuffer buf1 ssound $len buf sizeof(buf1)-$len ssound - buf - 20 7
goto next
move:
unbuffer buf1 smove $len buf sizeof(buf1)-$len smove - buf -
goto next
error:
out " "
goto exit
;
done:
set str $opscob+$opscob+$ssound+$clscob+$opscob+$smove+$clscob+$clscob str - [[][]]
buffer data sizeof(str)+4 1 4 $str sizeof(str)
goto send
send:
up P_DATA.IND userdata $data
exit:
, . : P-GIVE-TOKENS, P-PLEASE-TOKENS, P-GIVE-CONTROL P-SYNC-MINOR, P-SYNC-MAJOR, P-RESYNCHRONIZE. , . :
P_SYNC_MAJOR.REQ:
down S_SYNC_MAJOR.REQ
: S-RELEASE - , S-P-ABORT S-U-ABORT - . , .
1. .
1.1 .
() . , . . , , , .
, , . (application process, AP). - , . (Application Entity, AE).
, , (Application Service Elements, ASE). , , (, ACSE), (, SASE), , - (, UE), .1.1.1.
, .
() () - , . .
. , . , .
.
.