open Login_protocol type var_c = C of principal type var_w = W of principal type var_p = P of principal type var_d = D of principal type var_q = Q of string type var_r = R of int (* Proxy function for role c *) type result_c = string type msg0 = Login of (var_c * var_p * var_d * var_q * msg1) and msg1 = { hRedirect : (var_w -> msg2) ; hBasicreply : (var_r -> result_c)} and msg2 = Request of (var_q * msg3) and msg3 = { hReply : (var_r -> msg4) ; hFault : (unit -> result_c)} and msg4 = Extra of (var_q * msg3) val c : principal -> msg0 -> result_c (* Proxy function for role w *) type result_w = string type msg7 = { hRequest : (var_c * var_p * var_w * var_q -> msg8)} and msg8 = Reply of (var_r * msg9) | Fault of (result_w) and msg9 = { hExtra : (var_q -> msg8)} val w : principal -> msg7 -> result_w (* Proxy function for role p *) type result_p = string type msg11 = { hLogin : (var_p * var_d * var_c * var_q -> msg12)} and msg12 = Redirect of (var_w * result_p) | Reject of (result_p) val p : principal -> msg11 -> result_p (* Proxy function for role d *) type result_d = string type msg15 = { hReject : (var_p * var_d * var_c -> msg16)} and msg16 = Basicreply of (var_r * result_d) val d : principal -> msg15 -> result_d