The Trunk: Network-pre.223.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Network-pre.223.mcz

commits-2
Patrick Rein uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-pre.223.mcz

==================== Summary ====================

Name: Network-pre.223
Author: pre
Time: 2 May 2018, 3:19:58.805873 pm
UUID: 6308303d-2839-b54d-9e44-90d16685e6be
Ancestors: Network-pre.222

Makes MIMEHeaderValue objects aware of qencoding by resolving the encoding issue at creation time.

=============== Diff against Network-pre.222 ===============

Item was changed:
  ----- Method: MIMEHeaderValue class>>forField:fromString: (in category 'instance creation') -----
  forField: aFName fromString: aString
  "Create a MIMEHeaderValue from aString.  How it is parsed depends on whether it is a MIME specific field or a generic header field."
 
+ | decodedString |
+ decodedString := [aString decodeMimeHeader]
+ on: InvalidUTF8 , NoConverterFound do: [:e | aString].
  (aFName beginsWith: 'content-')
+ ifTrue: [^self fromMIMEHeader: decodedString]
+ ifFalse: [^self fromTraditionalHeader: decodedString]
- ifTrue: [^self fromMIMEHeader: aString]
- ifFalse: [^self fromTraditionalHeader: aString]
  !

Item was changed:
  ----- Method: MIMEHeaderValue class>>fromMIMEHeader: (in category 'instance creation') -----
  fromMIMEHeader: aString
+ "This is the value of a MIME header field and so is parsed to extract the various parts.
+ This assumes a string without any special encodings (e.g. q encoding)."
- "This is the value of a MIME header field and so is parsed to extract the various parts"
 
  | parts newValue parms |
 
  newValue := self new.
 
  parts := ReadStream on: (aString findTokens: ';').
  newValue mainValue: parts next.
  parms := Dictionary new.
  parts do:
  [:e | | separatorPos parmName parmValue |
  separatorPos := e findAnySubStr: '=' startingAt: 1.
  separatorPos <= e size
  ifTrue:
  [parmName := (e copyFrom: 1 to: separatorPos - 1) withBlanksTrimmed asLowercase.
  parmValue := (e copyFrom: separatorPos + 1 to: e size) withBlanksTrimmed withoutQuoting.
  parms at: parmName put: parmValue]].
  newValue parameters: parms.
  ^ newValue
  !

Item was changed:
  ----- Method: MIMEHeaderValue class>>fromTraditionalHeader: (in category 'instance creation') -----
  fromTraditionalHeader: aString
+ "This is a traditional non-MIME header (like Subject:) and so should be stored whole.
+ This assumes a string without any special encodings (e.g. q encoding)."
- "This is a traditional non-MIME header (like Subject:) and so should be stored whole"
 
  | newValue |
 
  newValue := self new.
  newValue mainValue: aString.
  newValue parameters: #().
  ^newValue.
  !

Item was changed:
  ----- Method: MIMEHeaderValue>>asHeaderValue (in category 'printing') -----
  asHeaderValue
+ | strm result |
- | strm |
  strm := WriteStream on: (String new: 20).
  strm nextPutAll: mainValue.
  parameters associationsDo: [:e |
  strm
  nextPut: $; ;
  nextPutAll: e key;
  nextPutAll: '=';
  nextPutAll: e value].
+ ^ ((result := strm contents) anySatisfy: [:c | c isAscii not])
+ ifTrue: [QEncodingMimeConverter mimeEncode: result]
+ ifFalse: [result]
+ !
- ^ QEncodingMimeConverter mimeEncode: strm contents!

Item was changed:
  ----- Method: MIMEHeaderValue>>mainValue (in category 'accessing') -----
  mainValue
+ ^ mainValue!
- ^ [mainValue decodeMimeHeader]
- on: InvalidUTF8 , NoConverterFound do: [:e | mainValue]!