X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=ImplantFile.hs;h=c3cff030271fd2e881be0d0db07180291858c9b2;hb=45e3770f440c9fa8668f7e33063d630d73bcbe55;hp=b085a9876b859c4463c11609524da25082b48f4d;hpb=ac2ff93f647d60d43ca3cc54eb776fe0f701ac9e;p=Lucu.git diff --git a/ImplantFile.hs b/ImplantFile.hs index b085a98..c3cff03 100644 --- a/ImplantFile.hs +++ b/ImplantFile.hs @@ -41,27 +41,27 @@ data CmdOpt deriving (Eq, Show) options ∷ [OptDescr CmdOpt] -options = [ Option ['o'] ["output"] +options = [ Option "o" ["output"] (ReqArg OptOutput "FILE") "Output to the FILE." - , Option ['m'] ["module"] + , Option "m" ["module"] (ReqArg OptModName "MODULE") "Specify the resulting module name. (required)" - , Option ['s'] ["symbol"] + , Option "s" ["symbol"] (ReqArg OptSymName "SYMBOL") "Specify the resulting symbol name." - , Option ['t'] ["mime-type"] + , Option "t" ["mime-type"] (ReqArg OptMIMEType "TYPE") "Specify the MIME Type of the file." - , Option ['e'] ["etag"] + , Option "e" ["etag"] (ReqArg OptETag "TAG") "Specify the ETag of the file." - , Option ['h'] ["help"] + , Option "h" ["help"] (NoArg OptHelp) "Print this message." ] @@ -161,8 +161,7 @@ mkImports useGZip ⧺ [ ImportDecl (⊥) (ModuleName "Codec.Compression.GZip") False False Nothing Nothing Nothing - | useGZip - ] + | useGZip ] resourceDecl ∷ Name → Bool → [Decl] resourceDecl symName useGZip @@ -171,7 +170,7 @@ resourceDecl symName useGZip ] where valExp ∷ Exp - valExp = RecUpdate (var $ name "emptyResource") + valExp = RecUpdate (function "emptyResource") [ FieldUpdate (UnQual (name "resGet" )) resGet , FieldUpdate (UnQual (name "resHead")) resHead ] @@ -213,19 +212,18 @@ resGetGZipped = qualStmt $ If (var condVarName) (doE [ setContentEncodingGZipStmt - , outputStmt (var dataVarName) + , putChunksStmt (var dataVarName) ]) - ( function "output" - `app` - paren (function "decompress" `app` var dataVarName) - ) + (putChunksExp + (paren + (function "decompress" `app` var dataVarName))) resGetRaw ∷ Exp resGetRaw = function "Just" `app` paren (doE [ foundEntityStmt , setContentTypeStmt - , outputStmt (var $ name "rawData") + , putChunksStmt (function "rawData") ]) setContentEncodingGZipStmt ∷ Stmt @@ -240,8 +238,8 @@ foundEntityStmt ∷ Stmt foundEntityStmt = qualStmt $ metaFunction "foundEntity" - [ var $ name "entityTag" - , var $ name "lastModified" + [ var (name "entityTag") + , var (name "lastModified") ] setContentTypeStmt ∷ Stmt @@ -249,12 +247,14 @@ setContentTypeStmt = qualStmt ( function "setContentType" `app` - var (name "contentType") + function "contentType" ) -outputStmt ∷ Exp → Stmt -outputStmt e - = qualStmt $ function "output" `app` e +putChunksExp ∷ Exp → Exp +putChunksExp = app (function "putChunks") + +putChunksStmt ∷ Exp → Stmt +putChunksStmt = qualStmt ∘ putChunksExp entityTagDecl ∷ ETag → [Decl] entityTagDecl eTag @@ -272,6 +272,7 @@ lastModifiedDecl ∷ UTCTime → [Decl] lastModifiedDecl lastMod = [ TypeSig (⊥) [varName] (TyCon (UnQual (name "UTCTime"))) , nameBind (⊥) varName valExp + , InlineSig (⊥) False AlwaysActive (UnQual varName) ] where varName ∷ Name @@ -284,6 +285,7 @@ contentTypeDecl ∷ MIMEType → [Decl] contentTypeDecl mime = [ TypeSig (⊥) [varName] (TyCon (UnQual (name "MIMEType"))) , nameBind (⊥) varName valExp + , InlineSig (⊥) False AlwaysActive (UnQual varName) ] where varName ∷ Name @@ -299,6 +301,7 @@ dataDecl ∷ Name → [Strict.ByteString] → [Decl] dataDecl varName chunks = [ TypeSig (⊥) [varName] (TyCon (Qual (ModuleName "Lazy") (name "ByteString"))) , nameBind (⊥) varName valExp + , InlineSig (⊥) False AlwaysActive (UnQual varName) ] where valExp ∷ Exp @@ -472,7 +475,7 @@ openOutput opts , resGet = Just $ do foundEntity entityTag lastModified setContentType contentType - output rawData + putChunk rawData , resHead = Just $ do foundEntity entityTag lastModified setContentType contentType @@ -485,12 +488,15 @@ openOutput opts entityTag = strongETag "d41d8cd98f00b204e9800998ecf8427e" lastModified ∷ UTCTime + {-# NOINLINE lastModified #-} lastModified = read "2007-11-05 04:47:56.008366 UTC" contentType ∷ MIMEType + {-# NOINLINE contentType #-} contentType = parseMIMEType "image/png" rawData ∷ Lazy.ByteString + {-# NOINLINE rawData #-} rawData = Lazy.fromChunks [ B64.decodeLenient "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQgRG..." , B64.decodeLenient "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGAAAA..." @@ -500,7 +506,7 @@ openOutput opts 壓縮される場合は次のやうに變はる: ------------------------------------------------------------------------------ -- import に追加 - import Codec.Compression.GZip + import Codec.Compression.Zlib -- ResourceDef は次のやうに變化 baz ∷ ResourceDef @@ -514,9 +520,9 @@ openOutput opts gzipAllowed ← isEncodingAcceptable "gzip" if gzipAllowed then do setContentEncoding ["gzip"] - output gzippedData + putChunks gzippedData else - output (decompress gzippedData) + putChunks (decompress gzippedData) , resHead = Just $ do foundEntity entityTag lastModified setContentType contentType @@ -524,9 +530,10 @@ openOutput opts , resPut = Nothing , resDelete = Nothing } - + -- rawData の代はりに gzippedData gzippedData ∷ Lazy.ByteString + {-# NOINLINE gzippedData #-} gzippedData = Lazy.fromChunks [ B64.decodeLenient "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQ..." , B64.decodeLenient "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGA..."