package Ġnet . cord a . services . messaging Ċ Ċ import Ġnet . cord a . core . internal . concurrent . open Future Ċ import Ġnet . cord a . core . utilities . Network Host And Port Ċ import Ġnet . cord a . node api . internal . config . Mut ual Ssl Configuration Ċ import Ġorg . apache . q pid . jms . J ms ConnectionFactory Ċ import Ġorg . apache . q pid . jms . meta . J ms Connection Info Ċ import Ġorg . apache . q pid . jms . provider . Provider Ċ import Ġorg . apache . q pid . jms . provider . Provider Future Ċ import Ġorg . apache . q pid . jms . provider . amqp . A mq p Provider Ċ import Ġorg . apache . q pid . jms . provider . amqp . A mq p S asl Authenticator Ċ import Ġorg . apache . q pid . jms . sas l . Plain Me chanism Ċ import Ġorg . apache . q pid . jms . transport s . Transport Options Ċ import Ġorg . apache . q pid . jms . transport s . netty . Net ty Tcp Transport Ċ import Ġorg . apache . q pid . pro ton . engine . S asl Ċ import Ġorg . apache . q pid . pro ton . engine . S asl Listener Ċ import Ġorg . apache . q pid . pro ton . engine . Transport Ċ import Ġjava . net . URI Ċ import Ġjava . security . Secure Random Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . jms . Completion Listener Ċ import Ġjavax . jms . Connection Ċ import Ġjavax . jms . Message Ċ import Ġjavax . jms . Message Producer Ċ import Ġjavax . jms . Session Ċ import Ġjavax . net . ssl . Key ManagerFactory Ċ import Ġjavax . net . ssl . SSL Context Ċ import Ġjavax . net . ssl . Trust ManagerFactory Ċ Ċ /** Ċ Ġ* ĠSimple ĠAMQP Ġclient Ġconnecting Ġto Ġbroker Ġusing ĠJ MS . Ċ Ġ*/ Ċ class ĠSimple AM QP Client ( private Ġval Ġtarget : ĠNetwork Host And Port , Ġprivate Ġval Ġconfig : ĠMut ual Ssl Configuration ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSend Ġmessage Ġand Ġwait Ġfor Ġcompletion . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠException Ġon Ġfailure ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠMessage Producer . send And Verify ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġopen Future < Unit >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( message , Ġobject Ġ: ĠCompletion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Exception ( message : ĠMessage , Ġexception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . set Exception ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completion ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . set ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . get ( 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe . cause !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconnection : ĠConnection ĊĊĠĠĠ Ġprivate Ġfun Ġssl Context (): ĠSSL Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ManagerFactory Ġ= ĠKey ManagerFactory . getInstance ( Key ManagerFactory . getDefault Algorithm ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( config . key Store . get (). value . internal , Ġconfig . key Store . entry Password . toCharArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtrust ManagerFactory Ġ= ĠTrust ManagerFactory . getInstance ( Trust ManagerFactory . getDefault Algorithm ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ( config . trust Store . get (). value . internal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġssl Context Ġ= ĠSSL Context . getInstance (" TLS ") ĊĠĠĠĠĠĠĠ Ġval Ġkey Managers Ġ= Ġkey ManagerFactory . key Managers ĊĠĠĠĠĠĠĠ Ġval Ġtrust Managers Ġ= Ġtrust ManagerFactory . trust Managers ĊĠĠĠĠĠĠĠ Ġssl Context . init ( key Managers , Ġtrust Managers , ĠSecure Random ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġssl Context ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( username : ĠString , Ġpassword : ĠString ): ĠSession Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Factory Ġ= ĠTest J ms ConnectionFactory (" am q ps ://${ target . host }:${ target . port }", Ġusername , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġconnection Factory . set Ssl Context ( ssl Context ()) ĊĠĠĠĠĠĠĠ Ġconnection Ġ= Ġconnection Factory . create Connection () ĊĠĠĠĠĠĠĠ Ġconnection . start () ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection . create Session ( false , ĠSession . AUTO _ ACK NOW LED GE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconnection Ġmight Ġnot Ġhave Ġinitial ised . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTest J ms ConnectionFactory ( uri : ĠString , Ġprivate Ġval Ġuser : ĠString , Ġprivate Ġval Ġpwd : ĠString ) Ġ: ĠJ ms ConnectionFactory ( uri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Provider ( remote URI : ĠURI ): ĠProvider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransport Options Ġ= ĠTransport Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable ĠS NI Ġcheck Ġfor Ġserver Ġcertificate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Verify Host Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransport Ġ= ĠNet ty Tcp Transport ( remote URI , Ġtransport Options , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMan ually Ġoverride ĠSAS L Ġneg oti ations Ġto Ġaccept Ġfailure Ġin ĠSAS L - OUT CO ME , Ġwhich Ġis Ġproduced Ġby Ġnode ĠArt emis Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠA mq p Provider ( remote URI , Ġtransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconnect ( connection Info : ĠJ ms Connection Info ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . connect ( connection Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs asl Ġ= Ġpro ton Transport . sas l () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs asl . client () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs asl . set Remote Hostname ( remote URI . host ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth enticator Ġ= ĠA mq p S asl Authenticator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlain Me chanism (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpwd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs asl Request Ġ= ĠProvider Future () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs asl . set Listener ( object Ġ: ĠS asl Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon S asl Me chan isms ( sas l : ĠS asl , Ġtransport : ĠTransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . handle S asl Me chan isms ( sas l , Ġtransport ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon S asl Challenge ( sas l : ĠS asl , Ġtransport : ĠTransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . handle S asl Challenge ( sas l , Ġtransport ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon S asl Outcome ( sas l : ĠS asl , Ġtransport : ĠTransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator . handle S asl Outcome ( sas l , Ġtransport ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs asl Request . on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon S asl Init ( sas l : ĠS asl , Ġtransport : ĠTransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon S asl Response ( sas l : ĠS asl , Ġtransport : ĠTransport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpump To Pro ton Transport () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs asl Request . sync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis S asl Layer Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ