package Ġio . zen soft . h oot ka . api . internal . server Ċ Ċ import Ġio . netty . buffer . Byte Buf Allocator Ċ import Ġio . netty . buffer . Un p ooled Ċ import Ġio . netty . buffer . Un p ooled . EMPTY _ BUFFER Ċ import Ġio . netty . channel . Channel Handler Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġio . netty . channel . Simple Channel Inbound Handler Ċ import Ġio . netty . handler . codec . http .* Ċ import Ġio . netty . handler . codec . http . cookie . Server Cookie Encoder Ċ import Ġio . zen soft . h oot ka . api . Wrapped HttpResponse Ċ import Ġio . zen soft . h oot ka . api . internal . handler . Base Request Processor Ċ import Ġio . zen soft . h oot ka . api . internal . http . Net ty Wrapped HttpRequest Ċ import Ġio . zen soft . h oot ka . api . internal . http . Net ty Wrapped HttpResponse Ċ import Ġio . zen soft . h oot ka . api . model . HttpStatus Ċ import Ġio . zen soft . h oot ka . api . model . MimeType Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . Inet SocketAddress Ċ Ċ @ Channel Handler . Sh arable Ċ class ĠHttp Controller Handler ( ĊĠĠĠ Ġprivate Ġval Ġrequest Processor : ĠBase Request Processor Ċ ) Ġ: ĠSimple Channel Inbound Handler < Full HttpRequest >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchannel Read 0 ( ctx : ĠChannel HandlerContext , Ġrequest : ĠFull HttpRequest ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsocket Address Ġ= Ġctx . channel (). remote Address () Ġas ĠInet SocketAddress ĊĠĠĠĠĠĠĠ Ġval Ġwrapped Response Ġ= ĠNet ty Wrapped HttpResponse () ĊĠĠĠĠĠĠĠ Ġval Ġwrapped Request Ġ= ĠNet ty Wrapped HttpRequest . create ( request , Ġsocket Address . address . host Address ) ĊĠĠĠĠĠĠĠ Ġrequest Processor . process Request ( wrapped Request , Ġwrapped Response ) ĊĠĠĠĠĠĠĠ Ġwrite Response ( ctx , Ġrequest , Ġwrapped Response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMark ed Ġdeprecated Ġas Ġmethod Ġmoved Ġfrom Ġ[ io . netty . channel . Channel Handler ] Ġto Ġit 's Ġchild Ġinterface Ġ[ io . netty . channel . Channel Inbound Handler ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġ@ Suppress (" Over riding Deprecated Member ") ĊĠĠĠ Ġoverride Ġfun Ġexception Ca ught ( ctx : ĠChannel HandlerContext , Ġcause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . error (" Something Ġwent Ġwrong ", Ġcause ) ĊĠĠĠĠĠĠĠ Ġctx . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Response ( ctx : ĠChannel HandlerContext , Ġrequest : ĠFull HttpRequest ?, Ġresponse : ĠWr apped HttpResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġresponse . getContent () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġif Ġ( null Ġ!= Ġcontent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠUn p ooled . wrapped Buffer ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Full HttpResponse ( Http Version . HTTP _ 1 _ 1 , Ġresponse . get HttpStatus (). value , Ġbuf ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Full HttpResponse ( Http Version . HTTP _ 1 _ 1 , Ġresponse . get HttpStatus (). value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresponse . getHeaders (). forEach Ġ{ Ġheader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . value . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . headers (). add ( header . key , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . headers (). add ( Http Header Names . SET _ COOKIE , ĠServer Cookie Encoder . STRICT . encode ( response . getC ookies ())) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . content () Ġ!= ĠEMPTY _ BUFFER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . headers (). add ( Http Header Names . CONTENT _ TYPE , Ġresponse . get ContentType (). value . toString () Ġ+ Ġ"; Ġcharset = UTF - 8 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . headers (). set ( Http Header Names . CONTENT _ LENGTH , Ġresult . content () !!. readable Bytes ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Http Util . is KeepAlive ( request )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Util . set KeepAlive ( result . headers (), ĠHttp Version . HTTP _ 1 _ 1 , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġctx . write And Flush ( result , Ġctx . void Promise ()) ĊĠĠĠ Ġ} Ċ Ċ }