Browse files

A little better FileController, get~controller still bugs

  • Loading branch information...
1 parent 36da27a commit 15e14f34c0fa6c072e799df92401a401f382ba27 @shamanas committed Sep 18, 2011
Showing with 668 additions and 8 deletions.
  1. +2 −1 Controller.ooc
  2. +22 −6 Core.ooc
  3. +2 −1 Server.ooc
  4. +642 −0 mimetypes.cfg
View
3 Controller.ooc
@@ -1,12 +1,13 @@
import Server
+import Core
Controller: class {
// FILL ME! :O
run: func(ctx: HttpContext)->String { "Controller" }
}
extend LlamaServer {
- // Segfaults
+ // Segfaults because of the context :-/
get: func~controller(route: String, contr: Controller) {
get(route, |ctx| contr run(ctx))
}
View
28 Core.ooc
@@ -1,15 +1,30 @@
import Server,Controller
+import structs/HashMap
+import text/StringTokenizer
+import io/File
FileController: class extends Controller {
- base := ""
+ mimetypes: static HashMap<String,String>
+ loadMimeTypes: static func {
+ This mimetypes = HashMap<String,String> new()
+ mimeFile := File new("mimetypes.cfg")
+ if(mimeFile file?()) {
+ mimeFile read() split('\n',false) each(|line|
+ if(!line empty?()) {
+ parts := line split(':',false)
+ This mimetypes[parts first()] = parts last()
+ }
+ )
+ }
+ }
+
+ base := ""
run: func(ctx: HttpContext)->String {
path := base + ctx path trimLeft('/')
- if(file := FStream open(path,"rb")) {
- size := file getSize()
- cdata := CString new(size)
- file read(cdata,size)
- return cdata toString()
+ if((file := File new(path)) file?()) {
+ ctx server contentType = This mimetypes get(path split('.') last())
+ return file read()
}
"FileController could not find specified file."
}
@@ -19,3 +34,4 @@ Llama: class {
fileController := static FileController new()
}
+FileController loadMimeTypes()
View
3 Server.ooc
@@ -64,6 +64,7 @@ HttpContext: class {
}
LlamaServer: class {
+ contentType := "text/html; charset=utf-8"
getM := HashMap<String,Func(HttpContext)->String> new()
postM := HashMap<String,Func(HttpContext)->String> new()
@@ -119,7 +120,7 @@ LlamaServer: class {
}
}
- head := "HTTP/1.1 " + ((matched?) ? "200 OK" : "404 NOT FOUND") + "\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n"
+ head := "HTTP/1.1 " + ((matched?) ? "200 OK" : "404 NOT FOUND") + "\r\nContent-Type: " + contentType + "\r\nConnection: close\r\n\r\n"
resp := head + html + "\r\n\r\n"
client out write(resp _buffer data, resp length())
client out close()
View
642 mimetypes.cfg
@@ -0,0 +1,642 @@
+3dm:x-world/x-3dmf
+3dmf:x-world/x-3dmf
+a:application/octet-stream
+aab:application/x-authorware-bin
+aam:application/x-authorware-map
+aas:application/x-authorware-seg
+abc:text/vnd.abc
+acgi:text/html
+afl:video/animaflex
+ai:application/postscript
+aif:audio/aiff
+aif:audio/x-aiff
+aifc:audio/aiff
+aifc:audio/x-aiff
+aiff:audio/aiff
+aiff:audio/x-aiff
+aim:application/x-aim
+aip:text/x-audiosoft-intra
+ani:application/x-navi-animation
+aos:application/x-nokia-9000-communicator-add-on-software
+aps:application/mime
+arc:application/octet-stream
+arj:application/arj
+arj:application/octet-stream
+art:image/x-jg
+asf:video/x-ms-asf
+asm:text/x-asm
+asp:text/asp
+asx:application/x-mplayer2
+asx:video/x-ms-asf
+asx:video/x-ms-asf-plugin
+au:audio/basic
+au:audio/x-au
+avi:application/x-troff-msvideo
+avi:video/avi
+avi:video/msvideo
+avi:video/x-msvideo
+avs:video/avs-video
+bcpio:application/x-bcpio
+bin:application/mac-binary
+bin:application/macbinary
+bin:application/octet-stream
+bin:application/x-binary
+bin:application/x-macbinary
+bm:image/bmp
+bmp:image/bmp
+bmp:image/x-windows-bmp
+boo:application/book
+book:application/book
+boz:application/x-bzip2
+bsh:application/x-bsh
+bz:application/x-bzip
+bz2:application/x-bzip2
+c:text/plain
+c:text/x-c
+c++:text/plain
+cat:application/vnd.ms-pki.seccat
+cc:text/plain
+cc:text/x-c
+ccad:application/clariscad
+cco:application/x-cocoa
+cdf:application/cdf
+cdf:application/x-cdf
+cdf:application/x-netcdf
+cer:application/pkix-cert
+cer:application/x-x509-ca-cert
+cha:application/x-chat
+chat:application/x-chat
+class:application/java
+class:application/java-byte-code
+class:application/x-java-class
+com:application/octet-stream
+com:text/plain
+conf:text/plain
+cpio:application/x-cpio
+cpp:text/x-c
+cpt:application/mac-compactpro
+cpt:application/x-compactpro
+cpt:application/x-cpt
+crl:application/pkcs-crl
+crl:application/pkix-crl
+crt:application/pkix-cert
+crt:application/x-x509-ca-cert
+crt:application/x-x509-user-cert
+csh:application/x-csh
+csh:text/x-script.csh
+css:application/x-pointplus
+css:text/css
+cxx:text/plain
+dcr:application/x-director
+deepv:application/x-deepv
+def:text/plain
+der:application/x-x509-ca-cert
+dif:video/x-dv
+dir:application/x-director
+dl:video/dl
+dl:video/x-dl
+doc:application/msword
+dot:application/msword
+dp:application/commonground
+drw:application/drafting
+dump:application/octet-stream
+dv:video/x-dv
+dvi:application/x-dvi
+dwf:drawing/x-dwf(old)
+dwf:model/vnd.dwf
+dwg:application/acad
+dwg:image/vnd.dwg
+dwg:image/x-dwg
+dxf:application/dxf
+dxf:image/vnd.dwg
+dxf:image/x-dwg
+dxr:application/x-director
+el:text/x-script.elisp
+elc:application/x-bytecode.elisp(compiledelisp)
+elc:application/x-elc
+env:application/x-envoy
+eps:application/postscript
+es:application/x-esrehber
+etx:text/x-setext
+evy:application/envoy
+evy:application/x-envoy
+exe:application/octet-stream
+f:text/plain
+f:text/x-fortran
+f77:text/x-fortran
+f90:text/plain
+f90:text/x-fortran
+fdf:application/vnd.fdf
+fif:application/fractals
+fif:image/fif
+fli:video/fli
+fli:video/x-fli
+flo:image/florian
+flx:text/vnd.fmi.flexstor
+fmf:video/x-atomic3d-feature
+for:text/plain
+for:text/x-fortran
+fpx:image/vnd.fpx
+fpx:image/vnd.net-fpx
+frl:application/freeloader
+funk:audio/make
+g:text/plain
+g3:image/g3fax
+gif:image/gif
+gl:video/gl
+gl:video/x-gl
+gsd:audio/x-gsm
+gsm:audio/x-gsm
+gsp:application/x-gsp
+gss:application/x-gss
+gtar:application/x-gtar
+gz:application/x-compressed
+gz:application/x-gzip
+gzip:application/x-gzip
+gzip:multipart/x-gzip
+h:text/plain
+h:text/x-h
+hdf:application/x-hdf
+help:application/x-helpfile
+hgl:application/vnd.hp-hpgl
+hh:text/plain
+hh:text/x-h
+hlb:text/x-script
+hlp:application/hlp
+hlp:application/x-helpfile
+hlp:application/x-winhelp
+hpg:application/vnd.hp-hpgl
+hpgl:application/vnd.hp-hpgl
+hqx:application/binhex
+hqx:application/binhex4
+hqx:application/mac-binhex
+hqx:application/mac-binhex40
+hqx:application/x-binhex40
+hqx:application/x-mac-binhex40
+hta:application/hta
+htc:text/x-component
+htm:text/html
+html:text/html
+htmls:text/html
+htt:text/webviewhtml
+htx:text/html
+ice:x-conference/x-cooltalk
+ico:image/x-icon
+idc:text/plain
+ief:image/ief
+iefs:image/ief
+iges:application/iges
+iges:model/iges
+igs:application/iges
+igs:model/iges
+ima:application/x-ima
+imap:application/x-httpd-imap
+inf:application/inf
+ins:application/x-internett-signup
+ip:application/x-ip2
+isu:video/x-isvideo
+it:audio/it
+iv:application/x-inventor
+ivr:i-world/i-vrml
+ivy:application/x-livescreen
+jam:audio/x-jam
+jav:text/plain
+jav:text/x-java-source
+java:text/plain
+java:text/x-java-source
+jcm:application/x-java-commerce
+jfif:image/jpeg
+jfif:image/pjpeg
+jfif-tbnl:image/jpeg
+jpe:image/jpeg
+jpe:image/pjpeg
+jpeg:image/jpeg
+jpeg:image/pjpeg
+jpg:image/jpeg
+jpg:image/pjpeg
+jps:image/x-jps
+js:application/x-javascript
+jut:image/jutvision
+kar:audio/midi
+kar:music/x-karaoke
+ksh:application/x-ksh
+ksh:text/x-script.ksh
+la:audio/nspaudio
+la:audio/x-nspaudio
+lam:audio/x-liveaudio
+latex:application/x-latex
+lha:application/lha
+lha:application/octet-stream
+lha:application/x-lha
+lhx:application/octet-stream
+list:text/plain
+lma:audio/nspaudio
+lma:audio/x-nspaudio
+log:text/plain
+lsp:application/x-lisp
+lsp:text/x-script.lisp
+lst:text/plain
+lsx:text/x-la-asf
+ltx:application/x-latex
+lzh:application/octet-stream
+lzh:application/x-lzh
+lzx:application/lzx
+lzx:application/octet-stream
+lzx:application/x-lzx
+m:text/plain
+m:text/x-m
+m1v:video/mpeg
+m2a:audio/mpeg
+m2v:video/mpeg
+m3u:audio/x-mpequrl
+man:application/x-troff-man
+map:application/x-navimap
+mar:text/plain
+mbd:application/mbedlet
+mc$:application/x-magic-cap-package-1.0
+mcd:application/mcad
+mcd:application/x-mathcad
+mcf:image/vasa
+mcf:text/mcf
+mcp:application/netmc
+me:application/x-troff-me
+mht:message/rfc822
+mhtml:message/rfc822
+mid:application/x-midi
+mid:audio/midi
+mid:audio/x-mid
+mid:audio/x-midi
+mid:music/crescendo
+mid:x-music/x-midi
+midi:application/x-midi
+midi:audio/midi
+midi:audio/x-mid
+midi:audio/x-midi
+midi:music/crescendo
+midi:x-music/x-midi
+mif:application/x-frame
+mif:application/x-mif
+mime:message/rfc822
+mime:www/mime
+mjf:audio/x-vnd.audioexplosion.mjuicemediafile
+mjpg:video/x-motion-jpeg
+mm:application/base64
+mm:application/x-meme
+mme:application/base64
+mod:audio/mod
+mod:audio/x-mod
+moov:video/quicktime
+mov:video/quicktime
+movie:video/x-sgi-movie
+mp2:audio/mpeg
+mp2:audio/x-mpeg
+mp2:video/mpeg
+mp2:video/x-mpeg
+mp2:video/x-mpeq2a
+mp3:audio/mpeg3
+mp3:audio/x-mpeg-3
+mp3:video/mpeg
+mp3:video/x-mpeg
+mpa:audio/mpeg
+mpa:video/mpeg
+mpc:application/x-project
+mpe:video/mpeg
+mpeg:video/mpeg
+mpg:audio/mpeg
+mpg:video/mpeg
+mpga:audio/mpeg
+mpp:application/vnd.ms-project
+mpt:application/x-project
+mpv:application/x-project
+mpx:application/x-project
+mrc:application/marc
+ms:application/x-troff-ms
+mv:video/x-sgi-movie
+my:audio/make
+mzz:application/x-vnd.audioexplosion.mzz
+nap:image/naplps
+naplps:image/naplps
+nc:application/x-netcdf
+ncm:application/vnd.nokia.configuration-message
+nif:image/x-niff
+niff:image/x-niff
+nix:application/x-mix-transfer
+nsc:application/x-conference
+nvd:application/x-navidoc
+o:application/octet-stream
+oda:application/oda
+omc:application/x-omc
+omcd:application/x-omcdatamaker
+omcr:application/x-omcregerator
+p:text/x-pascal
+p10:application/pkcs10
+p10:application/x-pkcs10
+p12:application/pkcs-12
+p12:application/x-pkcs12
+p7a:application/x-pkcs7-signature
+p7c:application/pkcs7-mime
+p7c:application/x-pkcs7-mime
+p7m:application/pkcs7-mime
+p7m:application/x-pkcs7-mime
+p7r:application/x-pkcs7-certreqresp
+p7s:application/pkcs7-signature
+part:application/pro_eng
+pas:text/pascal
+pbm:image/x-portable-bitmap
+pcl:application/vnd.hp-pcl
+pcl:application/x-pcl
+pct:image/x-pict
+pcx:image/x-pcx
+pdb:chemical/x-pdb
+pdf:application/pdf
+pfunk:audio/make
+pfunk:audio/make.my.funk
+pgm:image/x-portable-graymap
+pgm:image/x-portable-greymap
+pic:image/pict
+pict:image/pict
+pkg:application/x-newton-compatible-pkg
+pko:application/vnd.ms-pki.pko
+pl:text/html
+plx:application/x-pixclscript
+pm:image/x-xpixmap
+pm:text/x-script.perl-module
+pm4:application/x-pagemaker
+pm5:application/x-pagemaker
+png:image/png
+pnm:application/x-portable-anymap
+pnm:image/x-portable-anymap
+pot:application/mspowerpoint
+pot:application/vnd.ms-powerpoint
+pov:model/x-pov
+ppa:application/vnd.ms-powerpoint
+ppm:image/x-portable-pixmap
+pps:application/mspowerpoint
+pps:application/vnd.ms-powerpoint
+ppt:application/mspowerpoint
+ppt:application/powerpoint
+ppt:application/vnd.ms-powerpoint
+ppt:application/x-mspowerpoint
+ppz:application/mspowerpoint
+pre:application/x-freelance
+prt:application/pro_eng
+ps:application/postscript
+psd:application/octet-stream
+pvu:paleovu/x-pv
+pwz:application/vnd.ms-powerpoint
+py:text/x-script.phyton
+pyc:applicaiton/x-bytecode.python
+qcp:audio/vnd.qcelp
+qd3:x-world/x-3dmf
+qd3d:x-world/x-3dmf
+qif:image/x-quicktime
+qt:video/quicktime
+qtc:video/x-qtc
+qti:image/x-quicktime
+qtif:image/x-quicktime
+ra:audio/x-pn-realaudio
+ra:audio/x-pn-realaudio-plugin
+ra:audio/x-realaudio
+ram:audio/x-pn-realaudio
+ras:application/x-cmu-raster
+ras:image/cmu-raster
+ras:image/x-cmu-raster
+rast:image/cmu-raster
+rexx:text/x-script.rexx
+rf:image/vnd.rn-realflash
+rgb:image/x-rgb
+rm:application/vnd.rn-realmedia
+rm:audio/x-pn-realaudio
+rmi:audio/mid
+rmm:audio/x-pn-realaudio
+rmp:audio/x-pn-realaudio
+rmp:audio/x-pn-realaudio-plugin
+rng:application/ringing-tones
+rng:application/vnd.nokia.ringing-tone
+rnx:application/vnd.rn-realplayer
+roff:application/x-troff
+rp:image/vnd.rn-realpix
+rpm:audio/x-pn-realaudio-plugin
+rt:text/richtext
+rt:text/vnd.rn-realtext
+rtf:application/rtf
+rtf:application/x-rtf
+rtf:text/richtext
+rtx:application/rtf
+rtx:text/richtext
+rv:video/vnd.rn-realvideo
+s:text/x-asm
+s3m:audio/s3m
+saveme:application/octet-stream
+sbk:application/x-tbook
+scm:application/x-lotusscreencam
+scm:text/x-script.guile
+scm:text/x-script.scheme
+scm:video/x-scm
+sdml:text/plain
+sdp:application/sdp
+sdp:application/x-sdp
+sdr:application/sounder
+sea:application/sea
+sea:application/x-sea
+set:application/set
+sgm:text/sgml
+sgm:text/x-sgml
+sgml:text/sgml
+sgml:text/x-sgml
+sh:application/x-bsh
+sh:application/x-sh
+sh:application/x-shar
+sh:text/x-script.sh
+shar:application/x-bsh
+shar:application/x-shar
+shtml:text/html
+shtml:text/x-server-parsed-html
+sid:audio/x-psid
+sit:application/x-sit
+sit:application/x-stuffit
+skd:application/x-koan
+skm:application/x-koan
+skp:application/x-koan
+skt:application/x-koan
+sl:application/x-seelogo
+smi:application/smil
+smil:application/smil
+snd:audio/basic
+snd:audio/x-adpcm
+sol:application/solids
+spc:application/x-pkcs7-certificates
+spc:text/x-speech
+spl:application/futuresplash
+spr:application/x-sprite
+sprite:application/x-sprite
+src:application/x-wais-source
+ssi:text/x-server-parsed-html
+ssm:application/streamingmedia
+sst:application/vnd.ms-pki.certstore
+step:application/step
+stl:application/sla
+stl:application/vnd.ms-pki.stl
+stl:application/x-navistyle
+stp:application/step
+sv4cpio:application/x-sv4cpio
+sv4crc:application/x-sv4crc
+svf:image/vnd.dwg
+svf:image/x-dwg
+svr:application/x-world
+svr:x-world/x-svr
+swf:application/x-shockwave-flash
+t:application/x-troff
+talk:text/x-speech
+tar:application/x-tar
+tbk:application/toolbook
+tbk:application/x-tbook
+tcl:application/x-tcl
+tcl:text/x-script.tcl
+tcsh:text/x-script.tcsh
+tex:application/x-tex
+texi:application/x-texinfo
+texinfo:application/x-texinfo
+text:application/plain
+text:text/plain
+tgz:application/gnutar
+tgz:application/x-compressed
+tif:image/tiff
+tif:image/x-tiff
+tiff:image/tiff
+tiff:image/x-tiff
+tr:application/x-troff
+tsi:audio/tsp-audio
+tsp:application/dsptype
+tsp:audio/tsplayer
+tsv:text/tab-separated-values
+turbot:image/florian
+txt:text/plain
+uil:text/x-uil
+uni:text/uri-list
+unis:text/uri-list
+unv:application/i-deas
+uri:text/uri-list
+uris:text/uri-list
+ustar:application/x-ustar
+ustar:multipart/x-ustar
+uu:application/octet-stream
+uu:text/x-uuencode
+uue:text/x-uuencode
+vcd:application/x-cdlink
+vcs:text/x-vcalendar
+vda:application/vda
+vdo:video/vdo
+vew:application/groupwise
+viv:video/vivo
+viv:video/vnd.vivo
+vivo:video/vivo
+vivo:video/vnd.vivo
+vmd:application/vocaltec-media-desc
+vmf:application/vocaltec-media-file
+voc:audio/voc
+voc:audio/x-voc
+vos:video/vosaic
+vox:audio/voxware
+vqe:audio/x-twinvq-plugin
+vqf:audio/x-twinvq
+vql:audio/x-twinvq-plugin
+vrml:application/x-vrml
+vrml:model/vrml
+vrml:x-world/x-vrml
+vrt:x-world/x-vrt
+vsd:application/x-visio
+vst:application/x-visio
+vsw:application/x-visio
+w60:application/wordperfect6.0
+w61:application/wordperfect6.1
+w6w:application/msword
+wav:audio/wav
+wav:audio/x-wav
+wb1:application/x-qpro
+wbmp:image/vnd.wap.wbmp
+web:application/vnd.xara
+wiz:application/msword
+wk1:application/x-123
+wmf:windows/metafile
+wml:text/vnd.wap.wml
+wmlc:application/vnd.wap.wmlc
+wmls:text/vnd.wap.wmlscript
+wmlsc:application/vnd.wap.wmlscriptc
+word:application/msword
+wp:application/wordperfect
+wp5:application/wordperfect
+wp5:application/wordperfect6.0
+wp6:application/wordperfect
+wpd:application/wordperfect
+wpd:application/x-wpwin
+wq1:application/x-lotus
+wri:application/mswrite
+wri:application/x-wri
+wrl:application/x-world
+wrl:model/vrml
+wrl:x-world/x-vrml
+wrz:model/vrml
+wrz:x-world/x-vrml
+wsc:text/scriplet
+wsrc:application/x-wais-source
+wtk:application/x-wintalk
+xbm:image/x-xbitmap
+xbm:image/x-xbm
+xbm:image/xbm
+xdr:video/x-amt-demorun
+xgz:xgl/drawing
+xif:image/vnd.xiff
+xl:application/excel
+xla:application/excel
+xla:application/x-excel
+xla:application/x-msexcel
+xlb:application/excel
+xlb:application/vnd.ms-excel
+xlb:application/x-excel
+xlc:application/excel
+xlc:application/vnd.ms-excel
+xlc:application/x-excel
+xld:application/excel
+xld:application/x-excel
+xlk:application/excel
+xlk:application/x-excel
+xll:application/excel
+xll:application/vnd.ms-excel
+xll:application/x-excel
+xlm:application/excel
+xlm:application/vnd.ms-excel
+xlm:application/x-excel
+xls:application/excel
+xls:application/vnd.ms-excel
+xls:application/x-excel
+xls:application/x-msexcel
+xlt:application/excel
+xlt:application/x-excel
+xlv:application/excel
+xlv:application/x-excel
+xlw:application/excel
+xlw:application/vnd.ms-excel
+xlw:application/x-excel
+xlw:application/x-msexcel
+xm:audio/xm
+xml:application/xml
+xml:text/xml
+xmz:xgl/movie
+xpix:application/x-vnd.ls-xpix
+xpm:image/x-xpixmap
+xpm:image/xpm
+x-png:image/png
+xsr:video/x-amt-showrun
+xwd:image/x-xwd
+xwd:image/x-xwindowdump
+xyz:chemical/x-pdb
+z:application/x-compress
+z:application/x-compressed
+zip:application/x-compressed
+zip:application/x-zip-compressed
+zip:application/zip
+zip:multipart/x-zip
+zoo:application/octet-stream
+zsh:text/x-script.zsh
+

0 comments on commit 15e14f3

Please sign in to comment.