Source file msgutils.icn
############################################################################
#
#	File:     msgutils.icn
#
#	Subject:  Miscellaneous routines for messaging
#
#	Author:   Steve Lumos
#
#	Date:     22 Apr 2000
#
############################################################################
#
#  Requires:  Unicon Messaging Language Extensions
#
############################################################################
#
#  Links: base64
#
############################################################################

link base64

# Opens the URL, submits the form, and returns the server handle
procedure FormOpen(url, fields)
    local boundry, formdata, web, nam

    boundry := "--"
    every 1 to 30 do boundry ||:= ?(&letters++&digits)
    
    formdata := boundry
    every nam := key(fields) do {
	formdata ||:= "\r\n" ||
	    "Content-Disposition: form-data; name=\"" || nam || "\"\r\n" ||
	    "Content-Type: text/plain\r\n" || "\r\n"
	formdata ||:= fields[nam] || "\r\n"
	formdata ||:= boundry
    }
    formdata ||:= "--\r\n"

    web := open(url, "m", 
		"Content-Type: multipart/form-data; " ||
                               "boundry=" || boundry[3:0],
		"Content-Length: " || *formdata)
    writes(web, formdata)
    return web
end

# Uploads a file to a web server, returns the server handle
procedure UploadFile(filename, url)
    local server, f, s, length, typ, enc

    length := stat(filename).size | fail
    typ := ContentType(filename)

    f := open(filename) | fail
    if match(typ, "text/") then {
	enc := "7bit"
	s := reads(f, 1000000)
    }
    else {
	enc := "base64"
	s := base64encode(reads(f, 10000000))
    }
    close(f)	

    server := open(url, "m",
		   "Content-Type: " || typ,
		   "Content-Transfer-Encoding: " || enc,
		   "Content-Length: " || *s) | fail
    writes(server, s)
    return server
end

# Guess the content-type of a file based on its name
procedure ContentType(filename)
    static typemap
    local  ext

    initial {
	typemap := table("application/octet-stream")

	# These are from the mime.types included with Apache
	typemap["ez"]   := "application/andrew-inset"
	typemap["hqx"]  := "application/mac-binhex40"
	typemap["cpt"]  := "application/mac-compactpro"
	typemap["doc"]  := "application/msword"
	typemap["oda"]  := "application/oda"
	typemap["pdf"]  := "application/pdf"
	typemap["ai"]   := "application/postscript"
	typemap["ps"]   := "application/postscript"
	typemap["eps"]  := "application/postscript"
	typemap["rtf"]  := "application/rtf"
	typemap["smi"]  := "application/smil"
	typemap["smil"] := "application/smil"
	typemap["mif"]  := "application/vnd.mif"
	typemap["xls"]  := "application/vnd.ms-excel"
	typemap["ppt"]  := "application/vnd.ms-powerpoint"
	typemap["bcpio"] := "application/x-bcpio"
	typemap["vcd"]  := "application/x-cdlink"
	typemap["pgn"]  := "application/x-chess-pgn"
	typemap["cpio"] := "application/x-cpio"
	typemap["csh"]  := "application/x-csh"
	typemap["dcr"]  := "application/x-director"
	typemap["dir"]  := "application/x-director"
	typemap["dxr"]  := "application/x-director"
	typemap["dvi"]  := "application/x-dvi"
	typemap["spl"]  := "application/x-futuresplash"
	typemap["gtar"] := "application/x-gtar"
	typemap["hdf"]  := "application/x-hdf"
	typemap["js"]   := "application/x-javascript"
	typemap["skp"]  := "application/x-koan"
	typemap["skd"]  := "application/x-koan"
	typemap["skt"]  := "application/x-koan"
	typemap["skm"]  := "application/x-koan"
	typemap["latex"] := "application/x-latex"
	typemap["nc"]   := "application/x-netcdf"
	typemap["cdf"]   := "application/x-netcdf"
	typemap["sh"]   := "application/x-sh"
	typemap["shar"] := "application/x-shar"
	typemap["swf"]  := "application/x-shockwave-flash"
	typemap["sit"]  := "application/x-stuffit"
	typemap["sv4cpio"] := "application/x-sv4cpio"
	typemap["sv4crc"] := "application/x-sv4crc"
	typemap["tar"]  := "application/x-tar"
	typemap["tcl"] := "application/x-tcl"
	typemap["tex"] := "application/x-tex"
	typemap["texi"] := "application/x-texinfo"
	typemap["texinfo"] := "application/x-texinfo"
	typemap["t"] := "application/x-troff"
	typemap["tr"] := "application/x-troff"
	typemap["roff"] := "application/x-troff"
	typemap["man"] := "application/x-troff-man"
	typemap["me"] := "application/x-troff-me"
	typemap["ms"] := "application/x-troff-ms"
	typemap["ustar"] := "application/x-ustar"
	typemap["src"] := "application/x-wais-source"
	typemap["zip"] := "application/zip"
	typemap["au"] := "audio/basic"
	typemap["snd"] := "audio/basic"
	typemap["mid"] :=  "audio/midi"
	typemap["midi"] :=  "audio/midi"
	typemap["kar"]  := "audio/midi"
	typemap["mpga"] :=  "audio/mpeg"
	typemap["mp2"] :=  "audio/mpeg"
	typemap["mp3"] := "audio/mpeg"
	typemap["aif"] :=  "audio/x-aiff"
	typemap["aiff"] :=  "audio/x-aiff"
	typemap["aifc"] := "audio/x-aiff"
	typemap["ram"] :=  "audio/x-pn-realaudio"
	typemap["rm"] := "audio/x-pn-realaudio"
	typemap["rpm"] := "audio/x-pn-realaudio-plugin"
	typemap["ra"] := "audio/x-realaudio"
	typemap["wav"] := "audio/x-wav"
	typemap["pdb"] :=  "chemical/x-pdb"
	typemap["xyz"] := "chemical/x-pdb"
	typemap["bmp"] := "image/bmp"
	typemap["gif"] := "image/gif"
	typemap["ief"] := "image/ief"
	typemap["jpeg"] :=  "image/jpeg"
	typemap["jpg"] :=  "image/jpeg"
	typemap["jpe"] := "image/jpeg"
	typemap["png"] := "image/png"
	typemap["tiff"] :=  "image/tiff"
	typemap["tif"] := "image/tiff"
	typemap["ras"] := "image/x-cmu-raster"
	typemap["pnm"] := "image/x-portable-anymap"
	typemap["pbm"] := "image/x-portable-bitmap"
	typemap["pgm"] := "image/x-portable-graymap"
	typemap["ppm"] := "image/x-portable-pixmap"
	typemap["rgb"] := "image/x-rgb"
	typemap["xbm"] := "image/x-xbitmap"
	typemap["xpm"] := "image/x-xpixmap"
	typemap["xwd"] := "image/x-xwindowdump"
	typemap["igs"] :=  "model/iges"
	typemap["iges"] := "model/iges"
	typemap["msh"] :=  "model/mesh"
	typemap["mesh"] :=  "model/mesh"
	typemap["silo"] := "model/mesh"
	typemap["wrl"] :=  "model/vrml"
	typemap["vrml"] := "model/vrml"
	typemap["css"] := "text/css"
	typemap["html"] :=  "text/html"
	typemap["htm"] := "text/html"
	typemap["asc"] :=  "text/plain"
	typemap["txt"] := "text/plain"
	typemap["rtx"] := "text/richtext"
	typemap["rtf"] := "text/rtf"
	typemap["sgml"] :=  "text/sgml"
	typemap["sgm"] := "text/sgml"
	typemap["tsv"] := "text/tab-separated-values"
	typemap["etx"] := "text/x-setext"
	typemap["xml"] := "text/xml"
	typemap["mpeg"] :=  "video/mpeg"
	typemap["mpg"] :=  "video/mpeg"
	typemap["mpe"] := "video/mpeg"
	typemap["qt"] :=  "video/quicktime"
	typemap["mov"] := "video/quicktime"
	typemap["avi"] := "video/x-msvideo"
	typemap["movie"] := "video/x-sgi-movie"
	typemap["ice"] := "x-conference/x-cooltalk"
    }

    filename ? {
	while tab(upto('.')+1)
	ext := tab(0)
    }

    return typemap[ext]
end


This page produced by UniDoc on 2021/04/15 @ 23:59:44.