package betty16.lec2.smtp; import static betty16.lec2.smtp.Smtp.Smtp.Smtp.*; import org.scribble.net.scribsock.LinearSocket; import org.scribble.net.session.SSLSocketChannelWrapper; import org.scribble.net.session.MPSTEndpoint; import org.scribble.net.session.SocketChannelEndpoint; import betty16.lec2.smtp.Smtp.Smtp.Smtp; import betty16.lec2.smtp.Smtp.Smtp.channels.C.EndSocket; import betty16.lec2.smtp.Smtp.Smtp.channels.C.Smtp_C_1; import betty16.lec2.smtp.Smtp.Smtp.channels.C.Smtp_C_4; import betty16.lec2.smtp.Smtp.Smtp.channels.C.Smtp_C_6; import betty16.lec2.smtp.Smtp.Smtp.channels.C.ioifaces.Select_C_S_Ehlo; import betty16.lec2.smtp.Smtp.Smtp.channels.C.ioifaces.Succ_In_S_250; import betty16.lec2.smtp.Smtp.Smtp.roles.C; import betty16.lec2.smtp.message.SmtpMessageFormatter; import betty16.lec2.smtp.message.client.Quit; import betty16.lec2.smtp.message.client.StartTls; public class MySmtpC { public static void main(String[] args) throws Exception { String host = "smtp.cc.ic.ac.uk"; int port = 25; Smtp smtp = new Smtp(); try (MPSTEndpoint<Smtp, C> client = new MPSTEndpoint<>(smtp, C, new SmtpMessageFormatter())) { client.connect(S, SocketChannelEndpoint::new, host, port); new MySmtpC().run(new Smtp_C_1(client)); } } private EndSocket run(Smtp_C_1 c1) throws Exception { /* return doInit( doStartTls( doInit(c1.async(S, _220))) ) .send(S, new Quit()); /*/ throw new RuntimeException("[TODO]: "); //*/ } private // succ(S?250) <- S!{ Ehlo: ?? } Succ_In_S_250 doInit(Select_C_S_Ehlo<?> c) throws Exception { throw new RuntimeException("[TODO]: "); } private Smtp_C_6 doStartTls(Smtp_C_4 c4) throws Exception { return LinearSocket.wrapClient( c4.send(S, new StartTls()) .async(S, _220) , S, SSLSocketChannelWrapper::new); } }