Qore Mime Module Reference 1.6.1
Loading...
Searching...
No Matches
Mime.qm.dox.h
1// -*- mode: c++; indent-tabs-mode: nil -*-
3
4/* Mime.qm Copyright (C) 2012 - 2024 Qore Technologies, s.r.o.
5
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the "Software"),
8 to deal in the Software without restriction, including without limitation
9 the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 and/or sell copies of the Software, and to permit persons to whom the
11 Software is furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 DEALINGS IN THE SOFTWARE.
23*/
24
25// minimum required Qore version
26
27
28// assume local var scope, do not use "$" for vars, members, and method calls
29
30
175namespace Mime {
177
179 public hashdecl MessageInfo {
181 hash hdr;
183 data body;
185 list<hash<MessageInfo>> part();
186 };
187
189 public hashdecl MessagePartInfo {
193 hash hdr;
194 };
195
197 public hashdecl FormDataMessageInfo {
199 string name;
201 *string filename;
203 hash hdr;
205 data body;
206 };
207
214
216 const MimeTypeOctetStream = "application/octet-stream";
217
219 const MimeTypeText = "text/plain";
220
222 const MimeTypeHtml = "text/html";
223
225 const MimeTypeCsv = "text/csv";
226
228 const MimeTypeJpeg = "image/jpeg";
229
231 const MimeTypePng = "image/png";
232
234 const MimeTypeSoapXml = "application/soap+xml";
235
237 const MimeTypeYaml = "text/x-yaml";
238
240 const MimeTypeXml = "text/xml";
241
243 const MimeTypeXmlApp = "application/xml";
244
246 const MimeTypeJson = "application/json";
247
250
253
255 const MimeTypeYamlRpc = "application/x-yaml";
256
258 const MimeTypeJavascript = "application/javascript";
259
261 const MimeTypeCss = "text/css";
262
264 const MimeTypeFormUrlEncoded = "application/x-www-form-urlencoded";
265
267 const MimeTypeMultipartFormData = "multipart/form-data";
268
270 const MimeTypeMultipartRelated = "multipart/related";
271
273 const MimeTypeMultipartMixed = "multipart/mixed";
274
276 const MimeTypeSvg = "image/svg+xml";
277
279 const MimeTypeQore = "text/x-qore";
280
282 const MimeTypeJavaSource = "text/x-java-source";
283
285 const MimeTypeJava = "application/java";
286
288 const MimeTypeJar = "application/java-archive";
289
291 const MimeTypePython = "text/x-python-source";
292
294 const MimeTypePythonCode = "application/x-python-code";
295
297 const MimeTypePhp = "application/x-httpd-php";
298
300 const MimeTypeSse = "text/event-stream";
301
303
305 const MimeTypes = ...;
306
307
309
315 const UrlEncodedChars = ...;
316
318
323 const ContentTransEnc7Bit = "7bit";
324
326 const ContentTransEnc8Bit = "8bit";
327
329 const ContentTransEncBinary = "binary";
330
332 const ContentTransEncBase64 = "base64";
333
335 const ContentTransEncQuotedPrintable = "quoted-printable";
336
338
341
343
347
352
357 string mime_encode_base64(data str, int len = MimeBase64LineLen);
358
359
361
366 string mime_encode_quoted_printable(string str, bool hdr = False, *string encoding);
367
368
370
375 data mime_encode_transfer_data(data mime_data, string enc);
376
377
379
381 string mime_encode_header_word_b(string str);
382
383
385
387 string mime_encode_header_word_q(string str);
388
390
395
401 binary mime_decode_base64(data str);
402
403
405
412 string mime_decode_base64_to_string(data str, *string encoding);
413
414
416
423 string mime_decode_quoted_printable(string str, *string encoding, *bool is_body);
424
425
427
435 data mime_decode_transfer_data(data mime_data, string enc, *string ct, *bool is_body);
436
437
439
446 string mime_decode_header(string hdr);
447
449
454
460 bool is_mime_text(string mime);
461
462
464
470 bool is_filename_text(string path);
471
472
474 string get_mime_type_from_ext(string path, string def_type = MimeTypeUnknown);
475
476
478
496
497
499
514
515
517
529
530
532
543 hash<auto> mime_parse_form_urlencoded_string(string str);
544
546
551 const MPT_FORM_DATA = "form-data";
552
554 const MPT_MIXED = "mixed";
555
557 const MPT_MESSAGE = "message";
558
560 const MPT_DIGEST = "digest";
561
563 const MPT_ALTERNATIVE = "alternative";
564
566 const MPT_RELATED = "related";
567
569 const MPT_SIGNED = "signed";
570
572 const MPT_ENCRYPTED = "encrypted";
573
575 const MPT_BYTERANGES = "byteranges";
577
580
581public:
582 const MP_DEFAULT_MSG = "This is a MIME multipart message";
583
585protected:
587 string mptype;
588
590 string boundary;
591
593 string ct;
594
596 list<hash<MessagePartInfo>> l();
597
599 hash hdr;
600
602 const ASCII_CR = 13;
603 const ASCII_LF = 10;
604
605public:
607
609
612 constructor(string mptype, string boundary = MultiPartMessage::getBoundary());
613
614
616 binary serialize();
617
618
620
623
624
626
630 int size();
631
632
634
638 string getBoundary();
639
640
642
646 static binary serializeHeaders(hash hdr);
647
649 static string getBoundary();
650
652
656 static string getRandomString(int len);
657
659
718 static hash<MessageInfo> parseBody(string boundary, data body, bool decode = True);
719
721
725 abstract hash<MessageInfo> getMsgAndHeaders();
726
728 // don't reimplement this method; fix/enhance it in the module
729protected:
730 final hash<MessageInfo> getMsgAndHeadersIntern(*string content_type, bool conlen = True);
731public:
732
733
734 // don't reimplement this method; fix/enhance it in the module
735protected:
736 splicePartIntern(data mime_data, hash<auto> hdr);
737public:
738
739
740 // don't reimplement this method; fix/enhance it in the module
741protected:
742 addPartIntern(data mime_data, hash<auto> hdr);
743public:
744
745
746protected:
747 static hash<MessagePartInfo> getPart(data mime_data, hash<auto> hdr);
748public:
749
751 };
752
755
756public:
758protected:
759 // the starting part ID
760 string startid;
761
762public:
764
766
769
770
772
779 splicePart(data mime_data, string id, string content_type, *hash<auto> hdr);
780
781
783
790 addPart(data mime_data, string id, string content_type, *hash hdr);
791
792
794
798 hash<MessageInfo> getMsgAndHeaders();
799
800 };
801
804
805public:
807
810
811
813
825 splicePart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
826
827
829
841 addPart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
842
843
845
859 spliceEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
860
861
863
877 addEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
878
879
881
885 hash<MessageInfo> getMsgAndHeaders();
886
887 };
888
891
892public:
894
897
898
900
914 splicePart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
915
916
918
930 addPart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
931
932
934
948 spliceEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
949
950
952
966 addEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
967
968
970
974 hash<MessageInfo> getMsgAndHeaders();
975
976 };
977
979
982
983public:
984protected:
986 hash parts;
987
988public:
989
991
994
995
997
1003 splicePart(data mime_data, string name, *hash hdr);
1004
1005
1007
1015 splicePart(data mime_data, string name, string filename, string content_type, *hash hdr);
1016
1017
1019
1023 splicePart(hash<FormDataMessageInfo> h);
1024
1025
1027
1033 addPart(data mime_data, string name, *hash hdr);
1034
1035
1037
1045 addPart(data mime_data, string name, string filename, string content_type, *hash hdr);
1046
1047
1049
1053 addPart(hash<FormDataMessageInfo> h);
1054
1055
1057
1061 hash<MessageInfo> getMsgAndHeaders();
1062
1063
1065
1074 static hash<string, hash<FormDataMessageInfo>> parseMessage(string content, string body);
1075
1077
1081 static MultiPartFormDataMessage makeMessage(hash<string, hash<FormDataMessageInfo>> parts);
1082
1084
1088 static binary makeMessageBody(hash<string, hash<FormDataMessageInfo>> parts);
1089
1091protected:
1092 checkPartName(string name);
1093public:
1094
1095
1097protected:
1098 hash getPartHeader(string name, *string filename, *string content_type, *hash<auto> hdr);
1099public:
1100
1101 };
1102};
implements the MultiPartAlternativeMessage class, a specialization of MultiPartMessage
Definition Mime.qm.dox.h:890
spliceEncodePart(data mime_data, string enc, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the start of the list; encodes the data according to the transfer encoding arg...
splicePart(data mime_data, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the start of the list
addPart(data mime_data, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the end of the list; the data muyst already be encoded and any Content-Transfe...
hash< MessageInfo > getMsgAndHeaders()
returns a hash of the message
constructor(string boundary=MultiPartMessage::getBoundary())
creates the object
addEncodePart(data mime_data, string enc, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the end of the list; encodes the data according to the transfer encoding argum...
implements the MultiPartFormDataMessage class, a specialization of MultiPartMessage
Definition Mime.qm.dox.h:981
static MultiPartFormDataMessage makeMessage(hash< string, hash< FormDataMessageInfo > > parts)
creates a multipart/form-data message from a hash of FormDataMessageInfo hashes keyed by part name
static binary makeMessageBody(hash< string, hash< FormDataMessageInfo > > parts)
creates a multipart/form-data message body from a hash of FormDataMessageInfo hashes keyed by part na...
addPart(hash< FormDataMessageInfo > h)
adds a message part to the end of the list
addPart(data mime_data, string name, *hash hdr)
adds a message part to the end of the list
hash< MessageInfo > getMsgAndHeaders()
returns a hash of the message
hash parts
hash of part names to ensure uniqueness
Definition Mime.qm.dox.h:986
constructor(string boundary=MultiPartMessage::getBoundary())
creates the object
hash getPartHeader(string name, *string filename, *string content_type, *hash< auto > hdr)
builds the header for the part
checkPartName(string name)
check for unique part names and adds the part to the unique name hash
splicePart(data mime_data, string name, *hash hdr)
adds a message part to the start of the list
static hash< string, hash< FormDataMessageInfo > > parseMessage(string content, string body)
parses a multipart/form-data encoded message and returns a hash of its ContentTransEnc7Bit
splicePart(data mime_data, string name, string filename, string content_type, *hash hdr)
adds a message part to the start of the list
addPart(data mime_data, string name, string filename, string content_type, *hash hdr)
adds a message part to the end of the list
splicePart(hash< FormDataMessageInfo > h)
adds a message part to the start of the list
MultiPartMessage class implementation.
Definition Mime.qm.dox.h:579
binary serializeBody()
serializes the message body only and returns a binary object ready to send over a socket
int size()
returns the number of parts in the message
binary serialize()
serializes the message with the Content-Type header first and returns a binary object ready to send o...
static hash< MessageInfo > parseBody(string boundary, data body, bool decode=True)
returns a hash representing a parsed multipart message body from a boundary string and body arguments
static binary serializeHeaders(hash hdr)
serializes a header hash to a binary object
abstract hash< MessageInfo > getMsgAndHeaders()
returns a hash of the message
static string getRandomString(int len)
returns a string of random characters
string getBoundary()
returns the message boundary string used
constructor(string mptype, string boundary=MultiPartMessage::getBoundary())
creates the object
static string getBoundary()
returns a string embedded with the current timestamp designed to be used as MultiPart boundary string
implements the MultiPartMixedMessage class, a specialization of MultiPartMessage
Definition Mime.qm.dox.h:803
spliceEncodePart(data mime_data, string enc, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the start of the list; encodes the data according to the transfer encoding arg...
splicePart(data mime_data, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the start of the list; the data muyst already be encoded and any Content-Trans...
hash< MessageInfo > getMsgAndHeaders()
returns a hash of the message
addPart(data mime_data, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the end of the list; the data muyst already be encoded and any Content-Transfe...
addEncodePart(data mime_data, string enc, string content_type=MimeTypeText, string disp='inline', *hash< auto > hdr)
adds a message part to the end of the list; encodes the data according to the transfer encoding argum...
constructor(string boundary=MultiPartMessage::getBoundary())
creates the object
const ContentTransEncBase64
base-64 Content-Transfer-Encoding
Definition Mime.qm.dox.h:332
const ContentTransEncBinary
binary transfer encoding; implies no maximum line length (= no encoding)
Definition Mime.qm.dox.h:329
const ContentTransEnc7Bit
Definition Mime.qm.dox.h:323
const ContentTransEncQuotedPrintable
quoted-printable Content-Transfer-Encoding
Definition Mime.qm.dox.h:335
const MimeBase64LineLen
maximum line length for base64 encoding
Definition Mime.qm.dox.h:340
const MimeQuotedPrintableLineLen
maximum line length for quoted-printable encoding
Definition Mime.qm.dox.h:345
const ContentTransEnc8Bit
implies lines < 1000 chars (= no encoding)
Definition Mime.qm.dox.h:326
binary mime_decode_base64(data str)
data mime_decode_transfer_data(data mime_data, string enc, *string ct, *bool is_body)
decodes data according to the given encoding
string mime_decode_header(string hdr)
decodes a header string
string mime_decode_quoted_printable(string str, *string encoding, *bool is_body)
returns a string parsed from "quoted-printable" (or "QP") encoding
string mime_decode_base64_to_string(data str, *string encoding)
returns a string value from a string in "BASE64" encoding
string mime_encode_header_word_b(string str)
returns a string in "B" ("BASE64") encoding for MIME header string words
string mime_encode_quoted_printable(string str, bool hdr=False, *string encoding)
returns a string in "quoted-printable" (or "QP") encoding
data mime_encode_transfer_data(data mime_data, string enc)
encodes data according to the given encoding
string mime_encode_header_word_q(string str)
returns a string in "Q" ("quoted-printable") encoding for MIME header string words
string mime_encode_base64(data str, int len=MimeBase64LineLen)
string get_mime_type_from_ext(string path, string def_type=MimeTypeUnknown)
returns the mime type for the given filename from the extension or the default type if the extension ...
bool is_mime_text(string mime)
bool is_filename_text(string path)
Returns True if the given filename / path is known to provide text content, False if not.
string mime_decode_urlencoded_string(string str)
decodes the given string from URL encoded format
string mime_get_urlencoded_string(auto val)
Returns a single string in MIME URL encoded format.
string mime_get_form_urlencoded_string(hash< auto > h)
returns a string in MIME multipart form URL encoded format (for use with "Content-Type: application/x...
hash< auto > mime_parse_form_urlencoded_string(string str)
returns a hash corresponding to the string in MIME multipart form URL encoded format (for use with "C...
const MimeTypeMultipartRelated
Mime type for multipart related.
Definition Mime.qm.dox.h:270
const MimeTypeJavascript
Mime type for Javascript.
Definition Mime.qm.dox.h:258
const MimeTypeSvg
Mime type for SVG files.
Definition Mime.qm.dox.h:276
const UrlEncodedChars
hash of non-alphanumeric characters that can be used unencoded in URL encoded format
Definition Mime.qm.dox.h:315
const MimeTypeMultipartFormData
Mime type for multipart form data.
Definition Mime.qm.dox.h:267
const MimeTypePythonCode
Mime type for Python compiled code.
Definition Mime.qm.dox.h:294
const MimeTypeUnknown
Definition Mime.qm.dox.h:213
const MimeTypePng
MIME type for png images.
Definition Mime.qm.dox.h:231
const MimeTypeFormUrlEncoded
Mime type for multipart form URL encoding.
Definition Mime.qm.dox.h:264
const MimeTypeText
MIME type for text.
Definition Mime.qm.dox.h:219
const MimeTypes
A map of default mime types per file extension; the hash keys are file extensions in lower-case witho...
Definition Mime.qm.dox.h:305
const MimeTypeCsv
MIME type for csv files (http://tools.ietf.org/html/rfc4180)
Definition Mime.qm.dox.h:225
const MimeTypeHtml
MIME type for HTML.
Definition Mime.qm.dox.h:222
const MimeTypeXmlApp
Mime type for more complicated (not human-readable) xml files.
Definition Mime.qm.dox.h:243
const MimeTypePython
Mime type for Python sources.
Definition Mime.qm.dox.h:291
const MimeTypePhp
Mime type for PHP sources.
Definition Mime.qm.dox.h:297
const MimeTypeJsonRpc
Mime type for JSON-RPC.
Definition Mime.qm.dox.h:249
const MimeTypeSse
Mime type for server-sent events.
Definition Mime.qm.dox.h:300
const MimeTypeJavaSource
Mime type for Java sources.
Definition Mime.qm.dox.h:282
const MimeTypeQore
Mime type for Qore sources.
Definition Mime.qm.dox.h:279
const MimeTypeOctetStream
MIME type for unknown file types.
Definition Mime.qm.dox.h:216
const MimeTypeJar
Mime type for Java jar files.
Definition Mime.qm.dox.h:288
const MimeTypeXml
Mime type for plain (human-readable) xml files.
Definition Mime.qm.dox.h:240
const MimeTypeMultipartMixed
Mime type for multipart mixed.
Definition Mime.qm.dox.h:273
const MimeTypeSoapXml
Mime type for SOAP XML messages (XML MIME type reference: http://tools.ietf.org/html/rfc3023)
Definition Mime.qm.dox.h:234
const MimeTypeYaml
Mime type for yaml data files.
Definition Mime.qm.dox.h:237
const MimeTypeYamlRpc
Mime type for YAML-RPC.
Definition Mime.qm.dox.h:255
const MimeTypeJpeg
MIME type for jpeg images.
Definition Mime.qm.dox.h:228
const MimeTypeXmlRpc
Mime type for XML-RPC.
Definition Mime.qm.dox.h:252
const MimeTypeCss
Mime type for css.
Definition Mime.qm.dox.h:261
const MimeTypeJava
Mime type for Java class files.
Definition Mime.qm.dox.h:285
const MimeTypeJson
Mime type for JSON.
Definition Mime.qm.dox.h:246
const MPT_DIGEST
for sending multiple text messages (http://tools.ietf.org/html/rfc2046#section-5.1....
Definition Mime.qm.dox.h:560
const MPT_SIGNED
to attach a digital signature to a message (http://tools.ietf.org/html/rfc1847#section-2....
Definition Mime.qm.dox.h:569
const MPT_ENCRYPTED
for sending encrypted messages (http://tools.ietf.org/html/rfc1847#section-2.2)
Definition Mime.qm.dox.h:572
const MPT_MIXED
for sending files with different "Content-Type" headers (http://tools.ietf.org/html/rfc2046#section-5...
Definition Mime.qm.dox.h:554
const MPT_RELATED
for sending multiple components of an aggregated whole (http://tools.ietf.org/html/rfc2387)
Definition Mime.qm.dox.h:566
const MPT_BYTERANGES
for sending noncontiguous byte ranges of a single message (http://tools.ietf.org/html/rfc2616)
Definition Mime.qm.dox.h:575
const MPT_ALTERNATIVE
for sending multiple "alternatives" of the same content (http://tools.ietf.org/html/rfc2046#section-5...
Definition Mime.qm.dox.h:563
const MPT_FORM_DATA
Definition Mime.qm.dox.h:551
const MPT_MESSAGE
for email/MIME messages with headers (http://tools.ietf.org/html/rfc2046)
Definition Mime.qm.dox.h:557
public Mime namespace defines constants and functions relevant to MIME
Definition Mime.qm.dox.h:175
parsed form-data message part info
Definition Mime.qm.dox.h:197
hash hdr
message or part headers
Definition Mime.qm.dox.h:203
string name
the name of the part
Definition Mime.qm.dox.h:199
data body
the data for the message or part
Definition Mime.qm.dox.h:205
*string filename
the optional filename for the part
Definition Mime.qm.dox.h:201
message and part info hash
Definition Mime.qm.dox.h:179
hash hdr
message or part headers
Definition Mime.qm.dox.h:181
data body
the data for the message or part
Definition Mime.qm.dox.h:183
list< hash< MessageInfo > > part()
parts of the message or subparts of the part
message part hash
Definition Mime.qm.dox.h:189
data data
part body data
Definition Mime.qm.dox.h:191
hash hdr
part header hash
Definition Mime.qm.dox.h:193