Qore Mime Module Reference 1.6
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
168namespace Mime {
170
172 public hashdecl MessageInfo {
174 hash hdr;
176 data body;
178 list<hash<MessageInfo>> part();
179 };
180
182 public hashdecl MessagePartInfo {
186 hash hdr;
187 };
188
190 public hashdecl FormDataMessageInfo {
192 string name;
194 *string filename;
196 hash hdr;
198 data body;
199 };
200
207
209 const MimeTypeOctetStream = "application/octet-stream";
210
212 const MimeTypeText = "text/plain";
213
215 const MimeTypeHtml = "text/html";
216
218 const MimeTypeCsv = "text/csv";
219
221 const MimeTypeJpeg = "image/jpeg";
222
224 const MimeTypePng = "image/png";
225
227 const MimeTypeSoapXml = "application/soap+xml";
228
230 const MimeTypeYaml = "text/x-yaml";
231
233 const MimeTypeXml = "text/xml";
234
236 const MimeTypeXmlApp = "application/xml";
237
239 const MimeTypeJson = "application/json";
240
243
246
248 const MimeTypeYamlRpc = "application/x-yaml";
249
251 const MimeTypeJavascript = "application/javascript";
252
254 const MimeTypeCss = "text/css";
255
257 const MimeTypeFormUrlEncoded = "application/x-www-form-urlencoded";
258
260 const MimeTypeMultipartFormData = "multipart/form-data";
261
263 const MimeTypeMultipartRelated = "multipart/related";
264
266 const MimeTypeMultipartMixed = "multipart/mixed";
267
269 const MimeTypeSvg = "image/svg+xml";
270
272 const MimeTypeQore = "text/x-qore";
273
275 const MimeTypeJavaSource = "text/x-java-source";
276
278 const MimeTypeJava = "application/java";
279
281 const MimeTypeJar = "application/java-archive";
282
284 const MimeTypePython = "text/x-python-source";
285
287 const MimeTypePythonCode = "application/x-python-code";
288
290 const MimeTypePhp = "application/x-httpd-php";
291
293
295 const MimeTypes = ...;
296
297
299
305 const UrlEncodedChars = ...;
306
308
313 const ContentTransEnc7Bit = "7bit";
314
316 const ContentTransEnc8Bit = "8bit";
317
319 const ContentTransEncBinary = "binary";
320
322 const ContentTransEncBase64 = "base64";
323
325 const ContentTransEncQuotedPrintable = "quoted-printable";
326
328
331
333
337
342
347 string mime_encode_base64(data str, int len = MimeBase64LineLen);
348
349
351
356 string mime_encode_quoted_printable(string str, bool hdr = False, *string encoding);
357
358
360
365 data mime_encode_transfer_data(data mime_data, string enc);
366
367
369
371 string mime_encode_header_word_b(string str);
372
373
375
377 string mime_encode_header_word_q(string str);
378
380
385
391 binary mime_decode_base64(data str);
392
393
395
402 string mime_decode_base64_to_string(data str, *string encoding);
403
404
406
413 string mime_decode_quoted_printable(string str, *string encoding, *bool is_body);
414
415
417
425 data mime_decode_transfer_data(data mime_data, string enc, *string ct, *bool is_body);
426
427
429
436 string mime_decode_header(string hdr);
437
439
444
450 bool is_mime_text(string mime);
451
452
454
460 bool is_filename_text(string path);
461
462
464 string get_mime_type_from_ext(string path, string def_type = MimeTypeUnknown);
465
466
468
484
485
487
502
503
505
515
516
518
529 hash<auto> mime_parse_form_urlencoded_string(string str);
530
532
537 const MPT_FORM_DATA = "form-data";
538
540 const MPT_MIXED = "mixed";
541
543 const MPT_MESSAGE = "message";
544
546 const MPT_DIGEST = "digest";
547
549 const MPT_ALTERNATIVE = "alternative";
550
552 const MPT_RELATED = "related";
553
555 const MPT_SIGNED = "signed";
556
558 const MPT_ENCRYPTED = "encrypted";
559
561 const MPT_BYTERANGES = "byteranges";
563
566
567public:
568 const MP_DEFAULT_MSG = "This is a MIME multipart message";
569
571protected:
573 string mptype;
574
576 string boundary;
577
579 string ct;
580
582 list<hash<MessagePartInfo>> l();
583
585 hash hdr;
586
588 const ASCII_CR = 13;
589 const ASCII_LF = 10;
590
591public:
593
595
598 constructor(string mptype, string boundary = MultiPartMessage::getBoundary());
599
600
602 binary serialize();
603
604
606
609
610
612
616 int size();
617
618
620
624 string getBoundary();
625
626
628
632 static binary serializeHeaders(hash hdr);
633
635 static string getBoundary();
636
638
642 static string getRandomString(int len);
643
645
704 static hash<MessageInfo> parseBody(string boundary, data body, bool decode = True);
705
707
711 abstract hash<MessageInfo> getMsgAndHeaders();
712
714 // don't reimplement this method; fix/enhance it in the module
715protected:
716 final hash<MessageInfo> getMsgAndHeadersIntern(*string content_type, bool conlen = True);
717public:
718
719
720 // don't reimplement this method; fix/enhance it in the module
721protected:
722 splicePartIntern(data mime_data, hash<auto> hdr);
723public:
724
725
726 // don't reimplement this method; fix/enhance it in the module
727protected:
728 addPartIntern(data mime_data, hash<auto> hdr);
729public:
730
731
732protected:
733 static hash<MessagePartInfo> getPart(data mime_data, hash<auto> hdr);
734public:
735
737 };
738
741
742public:
744protected:
745 // the starting part ID
746 string startid;
747
748public:
750
752
755
756
758
765 splicePart(data mime_data, string id, string content_type, *hash<auto> hdr);
766
767
769
776 addPart(data mime_data, string id, string content_type, *hash hdr);
777
778
780
784 hash<MessageInfo> getMsgAndHeaders();
785
786 };
787
790
791public:
793
796
797
799
811 splicePart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
812
813
815
827 addPart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
828
829
831
845 spliceEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
846
847
849
863 addEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
864
865
867
871 hash<MessageInfo> getMsgAndHeaders();
872
873 };
874
877
878public:
880
883
884
886
900 splicePart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
901
902
904
916 addPart(data mime_data, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
917
918
920
934 spliceEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
935
936
938
952 addEncodePart(data mime_data, string enc, string content_type = MimeTypeText, string disp = 'inline', *hash<auto> hdr);
953
954
956
960 hash<MessageInfo> getMsgAndHeaders();
961
962 };
963
965
968
969public:
970protected:
972 hash parts;
973
974public:
975
977
980
981
983
989 splicePart(data mime_data, string name, *hash hdr);
990
991
993
1001 splicePart(data mime_data, string name, string filename, string content_type, *hash hdr);
1002
1003
1005
1009 splicePart(hash<FormDataMessageInfo> h);
1010
1011
1013
1019 addPart(data mime_data, string name, *hash hdr);
1020
1021
1023
1031 addPart(data mime_data, string name, string filename, string content_type, *hash hdr);
1032
1033
1035
1039 addPart(hash<FormDataMessageInfo> h);
1040
1041
1043
1047 hash<MessageInfo> getMsgAndHeaders();
1048
1049
1051
1060 static hash<string, hash<FormDataMessageInfo>> parseMessage(string content, string body);
1061
1063
1067 static MultiPartFormDataMessage makeMessage(hash<string, hash<FormDataMessageInfo>> parts);
1068
1070
1074 static binary makeMessageBody(hash<string, hash<FormDataMessageInfo>> parts);
1075
1077protected:
1078 checkPartName(string name);
1079public:
1080
1081
1083protected:
1084 hash getPartHeader(string name, *string filename, *string content_type, *hash<auto> hdr);
1085public:
1086
1087 };
1088};
implements the MultiPartAlternativeMessage class, a specialization of MultiPartMessage
Definition Mime.qm.dox.h:876
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:967
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:972
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:565
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:789
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:322
const ContentTransEncBinary
binary transfer encoding; implies no maximum line length (= no encoding)
Definition Mime.qm.dox.h:319
const ContentTransEnc7Bit
Definition Mime.qm.dox.h:313
const ContentTransEncQuotedPrintable
quoted-printable Content-Transfer-Encoding
Definition Mime.qm.dox.h:325
const MimeBase64LineLen
maximum line length for base64 encoding
Definition Mime.qm.dox.h:330
const MimeQuotedPrintableLineLen
maximum line length for quoted-printable encoding
Definition Mime.qm.dox.h:335
const ContentTransEnc8Bit
implies lines < 1000 chars (= no encoding)
Definition Mime.qm.dox.h:316
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:263
const MimeTypeJavascript
Mime type for Javascript.
Definition Mime.qm.dox.h:251
const MimeTypeSvg
Mime type for SVG files.
Definition Mime.qm.dox.h:269
const UrlEncodedChars
hash of non-alphanumeric characters that can be used unencoded in URL encoded format
Definition Mime.qm.dox.h:305
const MimeTypeMultipartFormData
Mime type for multipart form data.
Definition Mime.qm.dox.h:260
const MimeTypePythonCode
Mime type for Python compiled code.
Definition Mime.qm.dox.h:287
const MimeTypeUnknown
Definition Mime.qm.dox.h:206
const MimeTypePng
MIME type for png images.
Definition Mime.qm.dox.h:224
const MimeTypeFormUrlEncoded
Mime type for multipart form URL encoding.
Definition Mime.qm.dox.h:257
const MimeTypeText
MIME type for text.
Definition Mime.qm.dox.h:212
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:295
const MimeTypeCsv
MIME type for csv files (http://tools.ietf.org/html/rfc4180)
Definition Mime.qm.dox.h:218
const MimeTypeHtml
MIME type for HTML.
Definition Mime.qm.dox.h:215
const MimeTypeXmlApp
Mime type for more complicated (not human-readable) xml files.
Definition Mime.qm.dox.h:236
const MimeTypePython
Mime type for Python sources.
Definition Mime.qm.dox.h:284
const MimeTypePhp
Mime type for PHP sources.
Definition Mime.qm.dox.h:290
const MimeTypeJsonRpc
Mime type for JSON-RPC.
Definition Mime.qm.dox.h:242
const MimeTypeJavaSource
Mime type for Java sources.
Definition Mime.qm.dox.h:275
const MimeTypeQore
Mime type for Qore sources.
Definition Mime.qm.dox.h:272
const MimeTypeOctetStream
MIME type for unknown file types.
Definition Mime.qm.dox.h:209
const MimeTypeJar
Mime type for Java jar files.
Definition Mime.qm.dox.h:281
const MimeTypeXml
Mime type for plain (human-readable) xml files.
Definition Mime.qm.dox.h:233
const MimeTypeMultipartMixed
Mime type for multipart mixed.
Definition Mime.qm.dox.h:266
const MimeTypeSoapXml
Mime type for SOAP XML messages (XML MIME type reference: http://tools.ietf.org/html/rfc3023)
Definition Mime.qm.dox.h:227
const MimeTypeYaml
Mime type for yaml data files.
Definition Mime.qm.dox.h:230
const MimeTypeYamlRpc
Mime type for YAML-RPC.
Definition Mime.qm.dox.h:248
const MimeTypeJpeg
MIME type for jpeg images.
Definition Mime.qm.dox.h:221
const MimeTypeXmlRpc
Mime type for XML-RPC.
Definition Mime.qm.dox.h:245
const MimeTypeCss
Mime type for css.
Definition Mime.qm.dox.h:254
const MimeTypeJava
Mime type for Java class files.
Definition Mime.qm.dox.h:278
const MimeTypeJson
Mime type for JSON.
Definition Mime.qm.dox.h:239
const MPT_DIGEST
for sending multiple text messages (http://tools.ietf.org/html/rfc2046#section-5.1....
Definition Mime.qm.dox.h:546
const MPT_SIGNED
to attach a digital signature to a message (http://tools.ietf.org/html/rfc1847#section-2....
Definition Mime.qm.dox.h:555
const MPT_ENCRYPTED
for sending encrypted messages (http://tools.ietf.org/html/rfc1847#section-2.2)
Definition Mime.qm.dox.h:558
const MPT_MIXED
for sending files with different "Content-Type" headers (http://tools.ietf.org/html/rfc2046#section-5...
Definition Mime.qm.dox.h:540
const MPT_RELATED
for sending multiple components of an aggregated whole (http://tools.ietf.org/html/rfc2387)
Definition Mime.qm.dox.h:552
const MPT_BYTERANGES
for sending noncontiguous byte ranges of a single message (http://tools.ietf.org/html/rfc2616)
Definition Mime.qm.dox.h:561
const MPT_ALTERNATIVE
for sending multiple "alternatives" of the same content (http://tools.ietf.org/html/rfc2046#section-5...
Definition Mime.qm.dox.h:549
const MPT_FORM_DATA
Definition Mime.qm.dox.h:537
const MPT_MESSAGE
for email/MIME messages with headers (http://tools.ietf.org/html/rfc2046)
Definition Mime.qm.dox.h:543
public Mime namespace defines constants and functions relevant to MIME
Definition Mime.qm.dox.h:168
parsed form-data message part info
Definition Mime.qm.dox.h:190
hash hdr
message or part headers
Definition Mime.qm.dox.h:196
string name
the name of the part
Definition Mime.qm.dox.h:192
data body
the data for the message or part
Definition Mime.qm.dox.h:198
*string filename
the optional filename for the part
Definition Mime.qm.dox.h:194
message and part info hash
Definition Mime.qm.dox.h:172
hash hdr
message or part headers
Definition Mime.qm.dox.h:174
data body
the data for the message or part
Definition Mime.qm.dox.h:176
list< hash< MessageInfo > > part()
parts of the message or subparts of the part
message part hash
Definition Mime.qm.dox.h:182
data data
part body data
Definition Mime.qm.dox.h:184
hash hdr
part header hash
Definition Mime.qm.dox.h:186