package Ġio . ktor . http Ċ Ċ import Ġkotlinx . io . char sets .* Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġvalue Ġfor Ġa Ġ` Content - Type ` Ġheader . Ċ Ġ* Ġ@ property ĠcontentType Ġrepresents Ġa Ġtype Ġpart Ġof Ġthe Ġmedia Ġtype . Ċ Ġ* Ġ@ property Ġcontent Subtype Ġrepresents Ġa Ġsubtype Ġpart Ġof Ġthe Ġmedia Ġtype . Ċ Ġ*/ Ċ class ĠContentType Ġprivate Ġconstructor ( val ĠcontentType : ĠString , Ġval Ġcontent Subtype : ĠString , Ġexisting Content : ĠString , Ġparameters : ĠList < HeaderValue Param > Ġ= Ġempty List ()) ĊĠĠĠ Ġ: ĠHeader Value With Parameters ( existing Content , Ġparameters ) Ġ{ ĊĊĠĠĠ Ġconstructor ( contentType : ĠString , Ġcontent Subtype : ĠString , Ġparameters : ĠList < HeaderValue Param > Ġ= Ġempty List ()) Ġ: Ġthis ( contentType , Ġcontent Subtype , Ġ"$ contentType /$ content Subtype ", Ġparameters ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcopy Ġof Ġ` this ` Ġtype Ġwith Ġthe Ġadded Ġparameter Ġwith Ġthe Ġ[ name ] Ġand Ġ[ value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwith Parameter ( name : ĠString , Ġvalue : ĠString ): ĠContentType Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Parameter ( name , Ġvalue )) Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContentType ( contentType , Ġcontent Subtype , Ġcontent , Ġparameters Ġ+ ĠHeader Value Param ( name , Ġvalue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Parameter ( name : ĠString , Ġvalue : ĠString ): ĠBoolean Ġ= Ġwhen Ġ( parameters . size ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġparameters [ 0 ]. let Ġ{ Ġit . name . equals ( name , Ġignore Case Ġ= Ġtrue ) Ġ&& Ġit . value . equals ( value , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparameters . any Ġ{ Ġit . name . equals ( name , Ġignore Case Ġ= Ġtrue ) Ġ&& Ġit . value . equals ( value , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcopy Ġof Ġ` this ` Ġtype Ġwithout Ġany Ġparameters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwithout Parameters (): ĠContentType Ġ= ĠContentType ( contentType , Ġcontent Subtype ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġ` this ` Ġtype Ġmatches Ġa Ġ[ pattern ] Ġtype Ġtaking Ġinto Ġaccount Ġplaceholder Ġsymbols Ġ` *` Ġand Ġparameters . ĠĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmatch ( pattern : ĠContentType ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern . contentType Ġ!= Ġ"*" Ġ&& Ġ! pattern . contentType . equals ( contentType , Ġignore Case Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern . content Subtype Ġ!= Ġ"*" Ġ&& Ġ! pattern . content Subtype . equals ( content Subtype , Ġignore Case Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ(( pattern Name , Ġpattern Value ) Ġin Ġpattern . parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġwhen Ġ( pattern Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"*" Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pattern Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"*" Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparameters . any Ġ{ Ġp Ġ-> Ġp . value . equals ( pattern Value , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġparameter ( pattern Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pattern Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"*" Ġ-> Ġvalue Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue . equals ( pattern Value , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matches ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġ` this ` Ġtype Ġmatches Ġa Ġ[ pattern ] Ġtype Ġtaking Ġinto Ġaccount Ġplaceholder Ġsymbols Ġ` *` Ġand Ġparameters . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmatch ( pattern : ĠString ): ĠBoolean Ġ= Ġmatch ( ContentType . parse ( pattern )) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġis ĠContentType Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType . equals ( other . contentType , Ġignore Case Ġ= Ġtrue ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Subtype . equals ( other . content Subtype , Ġignore Case Ġ= Ġtrue ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ== Ġother . parameters ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠcontentType . toLowerCase (). hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcontent Subtype . toLowerCase (). hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ 3 1 Ġ* Ġparameters . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠParses Ġa Ġstring Ġrepresenting Ġa Ġ` Content - Type ` Ġheader Ġinto Ġa Ġ[ ContentType ] Ġinstance . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠContentType Ġ= ĠHeader Value With Parameters . parse ( value ) Ġ{ Ġparts , Ġparameters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslash Ġ= Ġparts . indexOf ('/') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slash Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parts . trim () Ġ== Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBad ContentType FormatException ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġparts . substring ( 0 , Ġslash ). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBad ContentType FormatException ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubtype Ġ= Ġparts . substring ( slash Ġ+ Ġ 1 ). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( subtype . isEmpty () Ġ|| Ġsubtype . contains ('/ ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBad ContentType FormatException ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContentType ( type , Ġsubtype , Ġparameters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRepresents Ġa Ġpattern Ġ` * Ġ/ Ġ* ` Ġto Ġmatch Ġany Ġcontent Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠAny : ĠContentType Ġ= ĠContentType ("* ", Ġ"* ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġan Ġ` application ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠApplication Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRepresents Ġa Ġpattern Ġ` application Ġ/ Ġ* ` Ġto Ġmatch Ġany Ġapplication Ġcontent Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" application ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠAtom Ġ= ĠContentType (" application ", Ġ" atom + xml ") ĊĠĠĠĠĠĠĠ Ġval ĠJson Ġ= ĠContentType (" application ", Ġ" json ") ĊĠĠĠĠĠĠĠ Ġval ĠJavaScript Ġ= ĠContentType (" application ", Ġ" javascript ") ĊĠĠĠĠĠĠĠ Ġval ĠOct et Stream Ġ= ĠContentType (" application ", Ġ" octet - stream ") ĊĠĠĠĠĠĠĠ Ġval ĠFont W off Ġ= ĠContentType (" application ", Ġ" font - woff ") ĊĠĠĠĠĠĠĠ Ġval ĠR ss Ġ= ĠContentType (" application ", Ġ" rss + xml ") ĊĠĠĠĠĠĠĠ Ġval ĠXml Ġ= ĠContentType (" application ", Ġ" xml ") ĊĠĠĠĠĠĠĠ Ġval ĠXml _ D td Ġ= ĠContentType (" application ", Ġ" xml - dtd ") ĊĠĠĠĠĠĠĠ Ġval ĠZip Ġ= ĠContentType (" application ", Ġ" zip ") ĊĠĠĠĠĠĠĠ Ġval ĠG Zip Ġ= ĠContentType (" application ", Ġ" gzip ") ĊĠĠĠĠĠĠĠ Ġval ĠForm Url Encoded Ġ= ĠContentType (" application ", Ġ" x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠ Ġval ĠC bor Ġ= ĠContentType (" application ", Ġ" cb or ") ĊĠĠĠĠĠĠĠ Ġval ĠProto Buf Ġ= ĠContentType (" application ", Ġ" protobuf ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġan Ġ` audio ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠAudio Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" audio ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠMP 4 Ġ= ĠContentType (" audio ", Ġ" mp 4 ") ĊĠĠĠĠĠĠĠ Ġval ĠM PEG Ġ= ĠContentType (" audio ", Ġ" mpeg ") ĊĠĠĠĠĠĠĠ Ġval ĠO GG Ġ= ĠContentType (" audio ", Ġ" ogg ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġan Ġ` image ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" image ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠGIF Ġ= ĠContentType (" image ", Ġ" gif ") ĊĠĠĠĠĠĠĠ Ġval ĠJPEG Ġ= ĠContentType (" image ", Ġ" jpeg ") ĊĠĠĠĠĠĠĠ Ġval ĠPNG Ġ= ĠContentType (" image ", Ġ" png ") ĊĠĠĠĠĠĠĠ Ġval ĠSVG Ġ= ĠContentType (" image ", Ġ" svg + xml ") ĊĠĠĠĠĠĠĠ Ġval ĠX Icon Ġ= ĠContentType (" image ", Ġ" x - icon ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġa Ġ` message ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" message ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠHttp Ġ= ĠContentType (" message ", Ġ" http ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġa Ġ` multipart ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠMulti Part Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" multipart ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠM ixed Ġ= ĠContentType (" multipart ", Ġ" mixed ") ĊĠĠĠĠĠĠĠ Ġval ĠAltern ative Ġ= ĠContentType (" multipart ", Ġ" alternative ") ĊĠĠĠĠĠĠĠ Ġval ĠRelated Ġ= ĠContentType (" multipart ", Ġ" related ") ĊĠĠĠĠĠĠĠ Ġval ĠFormData Ġ= ĠContentType (" multipart ", Ġ" form - data ") ĊĠĠĠĠĠĠĠ Ġval ĠSigned Ġ= ĠContentType (" multipart ", Ġ" signed ") ĊĠĠĠĠĠĠĠ Ġval ĠEn crypted Ġ= ĠContentType (" multipart ", Ġ" encrypted ") ĊĠĠĠĠĠĠĠ Ġval ĠByte Ranges Ġ= ĠContentType (" multipart ", Ġ" by ter ange s ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġa Ġ` text ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠText Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" text ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠPlain Ġ= ĠContentType (" text ", Ġ" plain ") ĊĠĠĠĠĠĠĠ Ġval ĠCSS Ġ= ĠContentType (" text ", Ġ" css ") ĊĠĠĠĠĠĠĠ Ġval ĠCSV Ġ= ĠContentType (" text ", Ġ" csv ") ĊĠĠĠĠĠĠĠ Ġval ĠHtml Ġ= ĠContentType (" text ", Ġ" html ") ĊĠĠĠĠĠĠĠ Ġval ĠJavaScript Ġ= ĠContentType (" text ", Ġ" javascript ") ĊĠĠĠĠĠĠĠ Ġval ĠV Card Ġ= ĠContentType (" text ", Ġ" v card ") ĊĠĠĠĠĠĠĠ Ġval ĠXml Ġ= ĠContentType (" text ", Ġ" xml ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġa Ġlist Ġof Ġstandard Ġsub types Ġof Ġa Ġ` video ` Ġcontent Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" K Doc Missing Documentation ", Ġ" unused ", Ġ" Public Api Implicit Type ") ĊĠĠĠ Ġobject ĠVideo Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAny Ġ= ĠContentType (" video ", Ġ"* ") ĊĠĠĠĠĠĠĠ Ġval ĠM PEG Ġ= ĠContentType (" video ", Ġ" mpeg ") ĊĠĠĠĠĠĠĠ Ġval ĠMP 4 Ġ= ĠContentType (" video ", Ġ" mp 4 ") ĊĠĠĠĠĠĠĠ Ġval ĠO GG Ġ= ĠContentType (" video ", Ġ" ogg ") ĊĠĠĠĠĠĠĠ Ġval ĠQuick Time Ġ= ĠContentType (" video ", Ġ" quick time ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠException Ġthrown Ġwhen Ġa Ġcontent Ġtype Ġstring Ġis Ġmalformed . Ċ Ġ*/ Ċ class ĠBad ContentType FormatException ( value : ĠString ) Ġ: ĠException (" Bad ĠContent - Type Ġformat : Ġ$ value ") Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġcopy Ġof Ġ` this ` Ġtype Ġwith Ġthe Ġadded Ġcharset Ġparameter Ġwith Ġ[ charset ] Ġvalue . Ċ Ġ*/ Ċ fun ĠContentType . with Charset ( charset : ĠCharset ): ĠContentType Ġ= Ġwith Parameter (" charset ", Ġcharset . name ) Ċ Ċ /** Ċ Ġ* ĠExtract s Ġa Ġ[ Charset ] Ġvalue Ġfrom Ġthe Ġgiven Ġ` Content - Type `, Ġ` Content - Disposition ` Ġor Ġsimilar Ġheader Ġvalue . ĠĠĊ Ġ*/ Ċ fun ĠHeader Value With Parameters . charset (): ĠCharset ? Ġ= Ġparameter (" charset ") ?. let Ġ{ ĠCharset . forName ( it ) Ġ} Ċ