Research Article

A Mechanically Proved and an Incremental Development of the Session Initiation Protocol INVITE Transaction

Algorithm 2

Events of first refinement.
INITIALISATION
BEGIN
  act7: cl_sent
  act8: cl_got
  act9: sr_sent
  act10: sr_got
  act11: c_st Ready
  act12: s_st Ready
END
client_Send_INVITE
REFINES
  client_Send
ANY
  msg
WHERE
  grd4: msg REQUESTS
  grd3: msg cl_sent
  grd5: msg = INVITE
  grd6: c_st = Ready
THEN
  act6: cl_sent     cl_sent   {msg}
  act7: c_st Calling
END
server_receive_INVITE
REFINES
  server_Receive
ANY
  msg
WHERE
  grd5: msg REQUESTS
  grd6: msg cl_sent
  grd7: msg = INVITE
  grd8: s_st = Ready
THEN
  act5: sr_got     sr_got   {msg}
  act6: s_st Proceeding
END
server_send_1xx
REFINES
  server_send
ANY
  msg
WHERE
  grd1: msg RESPONSES
  grd2: msg sr_sent
  grd3: sr_got
  grd4: msg = r1xx
  grd5: s_st = Proceeding
THEN
  act2: sr_sent     sr_sent   {msg}
  act3: s_st Proceeding
END
client_Receive_1xx
REFINES
  client_Receive
ANY
  msg
WHERE
  grd5: msg RESPONSES
  grd6: msg sr_sent
  grd7: msg = r1xx
  grd8: c_st = Calling
THEN
  act5: cl_got     cl_got   {msg}
  act6: c_st Proceeding
END
server_send_2xx
REFINES
  server_send
ANY
  msg
WHERE
  grd1: msg RESPONSES
  grd2: msg sr_sent
  grd3: sr_got
  grd4: msg = r2xx
  grd5: s_st = Proceeding
THEN
  act2: sr_sent sr_sent   {msg}
  act3: s_st Accepted
END
client_Receive_2xx
REFINES
  client_Receive
ANY
  msg
WHERE
  grd5: msg RESPONSES
  grd6: msg sr_sent
  grd7: msg = r2xx
  grd8: c_st = Calling c_st = Proceeding
THEN
  act5: cl_got cl_got   {msg}
  act6: c_st Accepted
END
server_send_3xx-699
REFINES
  server_send
ANY
  msg
WHERE
  grd1: msg RESPONSES
  grd2: msg sr_sent
  grd3: sr_got
  grd4: msg = r3xx_r699
  grd5: s_st = Proceeding
THEN
  act2: sr_sent sr_sent   {msg}
  act3: s_st Completed
END
client_Receive_3xx-699
REFINES
  client_Receive
ANY
  msg
WHERE
  grd5: msg RESPONSES
  grd6: msg sr_sent
  grd7: msg = r3xx_r699
  grd8: c_st = Calling c_st = Proceeding
THEN
  act5: cl_got     cl_got   {msg}
  act6: c_st Completed
END
client_send_ACK
REFINES
  client_Send
ANY
  msg
WHERE
  grd4: msg REQUESTS
  grd3: msg cl_sent
  grd5: msg = ACK
  grd6: c_st = Completed
THEN
  act6: cl_sent     cl_sent   {msg}
  act7: c_st Completed
END
server_Receive_ACK
REFINES
  server_Receive
ANY
  msg
WHERE
  grd5: msg REQUESTS
  grd6: msg cl_sent
  grd7: msg = ACK
  grd8: s_st = Completed
THEN
  act5: sr_got     sr_got   {msg}
  act6: s_st Confirmed
END
  Client_final_state
   STATUS
  anticipated
BEGIN
  act1: c_st Terminated
END
Server_final_state
   STATUS
  anticipated
BEGIN
  act1: s_st Terminated
END