Network-MIME

Base64MimeConverter
This class encodes and decodes data in Base64 format. This is MIME encoding. We translate a whole stream at once, taking a Stream as input and giving one as output. Returns a whole stream for the caller to use.
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Outbound: bytes are broken into 6 bit chunks, and the 0-63 value is converted to a character. 3 data bytes go into 4 characters.
Inbound: Characters are translated in to 0-63 values and shifted into 8 bit bytes.
(See: N. Borenstein, Bellcore, N. Freed, Innosoft, Network Working Group, Request for Comments: RFC 1521, September 1993, MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies. Sec 6.2)
By Ted Kaehler, based on Tim Olson's Base64Filter.
decodeInteger:
encodeInteger:
initialize
Subclasses should redefine this method to perform initializations on instance creation
mimeDecode
Convert a stream in base 64 with only a-z,A-Z,0-9,+,/ to a full byte stream of characters. Reutrn a whole stream for the user to read.
mimeDecodeToByteArray
Convert a stream in base 64 with only a-z,A-Z,0-9,+,/ to a full ByteArray of 0-255 values. Reutrn a whole stream for the user to read.
mimeDecodeToBytes:
mimeDecodeToChars:
mimeEncode
Convert from data to 6 bit characters.
mimeEncode:
nextValue
The next six bits of data char from the mimeStream, or nil. Skip all other chars
MIMEDocument
a MIME object, along with its type and the URL it was found at (if any)
asMIMEDocument
asMIMEDocumentType:
content
content:
contentStream
Answer a RWBinaryOrTextStream on the contents.
contentStream:
contentStream:mimeType:
contentStream:mimeType:uri:
contentStreamOnURI
contentType
contentType:content:
contentType:content:url:
contentTypeFormData
contentTypeGif
contentTypeHtml
contentTypeMultipart
contentTypePlainText
contentTypeTextCSS
contentTypeXml
contents
Answer the receiver's raw data. If we have a stream to read from. Read in the data, cache it and discard the stream.
contents:
contents:mimeType:
contents:mimeType:uri:
defaultContentType
defaultMIMEType
discardContentStream
discardContents
getContentFromStream
guessContentTypeFromExtension:
guessTypeFromExtension:
guessTypeFromName:
isGif
isJpeg
isMultipart
isMultipartAlternative
whether the document is in a multipart format where the parts are alternates
isPng
isPnm
mainType
mimeType
parts
Return the parts of this message. There is a far more reliable implementation of parts in MailMessage, but for now we are continuing to use this implementation
printOn:
Append to the argument, aStream, a sequence of characters that
identifies the receiver.
privateContent:
resetMIMEdatabase
subType
type
Deprecated. Use contentType instead.
type:
uri
Answer the URL the receiver was downloaded from. It may legitimately be nil.
uri:
url
Answer the URL the receiver was downloaded from. It may legitimately be nil.
MIMELocalFileDocument
For local files, we do not read the entire contents unless we absolutely have to.
content
contentStream
Answer a RWBinaryOrTextStream on the contents.
contentStream:
contentType:contentStream:
MIMEType
A MIMEType is xxxxxxxxx.
Instance Variables
main: <Object>
parameters: <Object>
sub: <Object>
main
- xxxxx
parameters
- xxxxx
sub
- xxxxx
=
Answer whether the receiver and the argument represent the same
object. If = is redefined in any subclass, consider also redefining the
message hash.
asMIMEType
beginsWith:
contentTypeURLEncoded
defaultHTML
defaultStream
defaultSuffixes
defaultText
forExtensionReturnMimeTypesOrNil:
forFileNameReturnMimeTypesOrDefault:
forFileNameReturnMimeTypesOrNil:
forFileNameReturnSingleMimeTypeOrDefault:
forFileNameReturnSingleMimeTypeOrNil:
forURIReturnMimeTypesOrNil:
forURIReturnSingleMimeTypeOrDefault:
forURIReturnSingleMimeTypeOrNil:
fromMIMEString:
hash
Answer a SmallInteger whose value is related to the receiver's identity.
May be overridden, and should be overridden in any classes that define =
huntForDashAndRemove:
initialize
Subclasses should redefine this method to perform initializations on instance creation
initializeDefaultSuffixes
initializeStandardMIMETypes
main
main:
main:sub:
main:sub:parameters:
mimeMappings
parameters:
printOn:
Append to the argument, aStream, a sequence of characters that
identifies the receiver.
simpleSuffixForMimeType:
standardMIMETypes
standardMIMETypes2
sub
sub:
suffixForMimeType:
MimeConverter
A MimeConverter is xxxxxxxxx.
Instance Variables
dataStream: <Object>
mimeStream: <Object>
dataStream
- xxxxx
mimeStream
- xxxxx
dataStream
dataStream:
forEncoding:
mimeDecode
Do conversion reading from mimeStream writing to dataStream
mimeDecode:as:
mimeDecode:to:
mimeEncode
Do conversion reading from dataStream writing to mimeStream
mimeEncode:
mimeEncode:to:
mimeStream
mimeStream:
QuotedPrintableMimeConverter
I do quoted printable MIME decoding as specified in RFC 2045 "MIME Part One: Format of Internet Message Bodies".
Short version of RFC2045, Sect. 6.7:
(1) Any octet, except a CR or LF that is part of a CRLF line break of the canonical (standard) form of the data being encoded, may be represented by an "=" followed by a two digit hexadecimal representation of the octet's value. [...]
(2) Octets with decimal values of 33 through 60 inclusive, and 62 through 126, inclusive, MAY be represented as the US-ASCII characters which correspond to those octets [...].
(3) Octets with values of 9 and 32 MAY be represented as US-ASCII TAB (HT) and SPACE characters,
respectively, but MUST NOT be so represented at the end of an encoded line. [...]
(4) A line break in a text body, represented as a CRLF sequence in the text canonical form, must be represented by a (RFC 822) line break, which is also a CRLF sequence, in the Quoted-Printable encoding. [...]
(5) The Quoted-Printable encoding REQUIRES that encoded lines be no more than 76 characters long. If longer lines are to be encoded with the Quoted-Printable encoding, "soft" line breaks
must be used. An equal sign as the last character on a encoded line indicates such a non-significant ("soft") line break in the encoded text.
--bf 11/27/1998 16:50
mimeDecode
Do conversion reading from mimeStream writing to dataStream
RFC2047MimeConverter
I do quoted printable MIME decoding as specified in RFC 2047 ""MIME Part Three: Message Header Extensions for Non-ASCII Text". See String>>decodeMimeHeader
encodeChar:to:
encodeWord:
isStructuredField:
mimeDecode
Do conversion reading from mimeStream writing to dataStream. See String>>decodeMimeHeader
mimeEncode
Do conversion reading from dataStream writing to mimeStream. Break long lines and escape non-7bit chars.
readWord