mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-04-27 23:45:14 +00:00
c1348aa54f
* SMP connection handshake v2 * hadshake v2 [mostly] works * all tests pass, some race conditions remain * fix build * fix race conditions, send CON after all HELLOs in duplexHandshake mode * add comments * comment * add comments
80 lines
2.6 KiB
Plaintext
80 lines
2.6 KiB
Plaintext
sequenceDiagram
|
|
participant A as Alice
|
|
participant AA as Alice's<br>agent
|
|
participant AS as Alice's<br>server
|
|
participant BS as Bob's<br>server
|
|
participant BA as Bob's<br>agent
|
|
participant B as Bob
|
|
|
|
note over AA, BA: status (receive/send): NONE/NONE
|
|
|
|
note over A, AA: 1. request connection from agent
|
|
A ->> AA: NEW: create<br>duplex connection
|
|
|
|
note over AA, AS: 2. create Alice's SMP queue
|
|
AA ->> AS: NEW: create SMP queue
|
|
AS ->> AA: IDS: SMP queue IDs
|
|
note over AA: status: NEW/NONE
|
|
|
|
AA ->> A: INV: invitation<br>to connect
|
|
note over AA: status: PENDING/NONE
|
|
|
|
note over A, B: 3. out-of-band invitation
|
|
A ->> B: OOB: invitation to connect
|
|
|
|
note over BA, B: 4. accept connection
|
|
B ->> BA: JOIN:<br>via invitation info
|
|
note over BA: status: NONE/NEW
|
|
|
|
note over BA, AA: 5. establish Alice's SMP queue
|
|
BA ->> AS: SEND: Bob's info and sender server key (SMP confirmation)
|
|
note over BA: status: NONE/CONFIRMED
|
|
activate BA
|
|
AS ->> AA: MSG: Bob's info and<br>sender server key
|
|
note over AA: status: CONFIRMED/NONE
|
|
AA ->> AS: ACK: confirm message
|
|
AA ->> A: CONF: connection request ID<br>and Bob's info
|
|
A ->> AA: LET: accept connection request,<br>send Alice's info
|
|
AA ->> AS: KEY: secure queue
|
|
note over AA: status: SECURED/NONE
|
|
|
|
BA ->> AS: SEND: HELLO: try sending until successful
|
|
deactivate BA
|
|
note over BA: status: NONE/ACTIVE
|
|
AS ->> AA: MSG: HELLO: Alice's agent<br>knows Bob can send
|
|
note over AA: status: ACTIVE/NONE
|
|
AA ->> AS: ACK: confirm message
|
|
|
|
note over BA, BS: 6. create Bob's SMP queue
|
|
BA ->> BS: NEW: create SMP queue
|
|
BS ->> BA: IDS: SMP queue IDs
|
|
note over BA: status: NEW/ACTIVE
|
|
|
|
note over AA, BA: 7. establish Bob's SMP queue
|
|
BA ->> AS: SEND: REPLY: invitation to the connect
|
|
note over BA: status: PENDING/ACTIVE
|
|
AS ->> AA: MSG: REPLY: invitation<br>to connect
|
|
note over AA: status: ACTIVE/NEW
|
|
AA ->> AS: ACK: confirm message
|
|
|
|
AA ->> BS: SEND: Alice's info and sender's server key
|
|
note over AA: status: ACTIVE/CONFIRMED
|
|
activate AA
|
|
BS ->> BA: MSG: Alice's info and<br>sender's server key
|
|
note over BA: status: CONFIRMED/ACTIVE
|
|
BA ->> B: INFO: Alice's info
|
|
BA ->> BS: ACK: confirm message
|
|
BA ->> BS: KEY: secure queue
|
|
note over BA: status: SECURED/ACTIVE
|
|
|
|
AA ->> BS: SEND: HELLO: try sending until successful
|
|
deactivate AA
|
|
note over AA: status: ACTIVE/ACTIVE
|
|
BS ->> BA: MSG: HELLO: Bob's agent<br>knows Alice can send
|
|
note over BA: status: ACTIVE/ACTIVE
|
|
BA ->> BS: ACK: confirm message
|
|
|
|
note over A, B: 8. notify users about connection success
|
|
AA ->> A: CON: connected
|
|
BA ->> B: CON: connected
|