1
1
var fs = require ( 'fs' ) ;
2
+ var crc32 = require ( 'buffer-crc32' ) ;
2
3
var extend = require ( 'extend' ) ;
4
+ var iconv = require ( 'iconv-lite' ) ;
3
5
var moment = require ( 'moment' ) ;
4
- var crc32 = require ( 'buffer-crc32' ) ;
5
-
6
- require ( 'iconv-lite' ) . extendNodeEncodings ( ) ;
7
-
8
- // work around https://github.com/nodejs/node/issues/2835
9
- var enc = require ( 'iconv-lite' ) . encode ;
10
6
11
7
function getSubfieldTypeFromLoID ( LoID ) {
12
8
/* jshint indent: false */
@@ -59,13 +55,11 @@ JAM.prototype.crc32 = function(inString, options){
59
55
return upperChar . toLowerCase ( ) ;
60
56
} ) ;
61
57
}
62
- if ( ! Buffer . isEncoding ( options . encoding ) ) {
58
+ if ( ! ( iconv . encodingExists ( options . encoding ) ) ) {
63
59
options . encoding = 'utf8' ;
64
60
}
65
61
66
- // work around https://github.com/nodejs/node/issues/2835
67
- // var inBuf = Buffer(inString, options.encoding);
68
- var inBuf = enc ( inString , options . encoding ) ;
62
+ var inBuf = iconv . encode ( inString , options . encoding ) ;
69
63
// 4294967295 is the maximum 32-bit integer
70
64
return 4294967295 - crc32 . unsigned ( inBuf ) ;
71
65
} ;
@@ -415,10 +409,10 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
415
409
416
410
var encoding = this . encodingFromHeader ( header ) ;
417
411
if ( encoding === null ) encoding = options . defaultEncoding ;
418
- if ( options . useDefaultIfUnknown && ! Buffer . isEncoding ( encoding ) ) {
412
+ if ( options . useDefaultIfUnknown && ! iconv . encodingExists ( encoding ) ) {
419
413
encoding = options . defaultEncoding ;
420
414
}
421
- if ( ! Buffer . isEncoding ( encoding ) ) {
415
+ if ( ! ( iconv . encodingExists ( encoding ) ) ) {
422
416
throw new Error ( this . errors . UNKNOWN_ENCODING ) ;
423
417
}
424
418
@@ -432,28 +426,36 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
432
426
for ( var i = 0 ; i < header . Subfields . length ; i ++ ) {
433
427
switch ( header . Subfields [ i ] . LoID ) {
434
428
case 0 : // OADDRESS
435
- decoded . origAddr = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
429
+ decoded . origAddr = iconv . decode (
430
+ header . Subfields [ i ] . Buffer , encoding
431
+ ) ;
436
432
break ;
437
433
case 1 : // DADDRESS
438
- decoded . toAddr = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
434
+ decoded . toAddr = iconv . decode (
435
+ header . Subfields [ i ] . Buffer , encoding
436
+ ) ;
439
437
break ;
440
438
case 2 : // SENDERNAME
441
- decoded . from = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
439
+ decoded . from = iconv . decode ( header . Subfields [ i ] . Buffer , encoding ) ;
442
440
break ;
443
441
case 3 : // RECEIVERNAME
444
- decoded . to = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
442
+ decoded . to = iconv . decode ( header . Subfields [ i ] . Buffer , encoding ) ;
445
443
break ;
446
444
case 4 : // MSGID
447
- decoded . msgid = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
445
+ decoded . msgid = iconv . decode (
446
+ header . Subfields [ i ] . Buffer , encoding
447
+ ) ;
448
448
break ;
449
449
case 5 : // REPLYID
450
- decoded . replyid = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
450
+ decoded . replyid = iconv . decode (
451
+ header . Subfields [ i ] . Buffer , encoding
452
+ ) ;
451
453
break ;
452
454
case 6 : // SUBJECT
453
- decoded . subj = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
455
+ decoded . subj = iconv . decode ( header . Subfields [ i ] . Buffer , encoding ) ;
454
456
break ;
455
457
case 7 : // PID
456
- decoded . pid = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
458
+ decoded . pid = iconv . decode ( header . Subfields [ i ] . Buffer , encoding ) ;
457
459
break ;
458
460
/*
459
461
case 8: return 'TRACE'; //break;
@@ -466,20 +468,24 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
466
468
*/
467
469
case 2000 : // FTSKLUDGE
468
470
decoded . kludges . push (
469
- header . Subfields [ i ] . Buffer . toString ( encoding )
471
+ iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
470
472
) ;
471
473
break ;
472
474
case 2001 : // SEENBY2D
473
- decoded . seenby = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
475
+ decoded . seenby = iconv . decode (
476
+ header . Subfields [ i ] . Buffer , encoding
477
+ ) ;
474
478
break ;
475
479
case 2002 : // PATH2D
476
- decoded . path = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
480
+ decoded . path = iconv . decode ( header . Subfields [ i ] . Buffer , encoding ) ;
477
481
break ;
478
482
/*
479
483
case 2003: return 'FLAGS'; //break;
480
484
*/
481
485
case 2004 : // TZUTCINFO
482
- decoded . timezone = header . Subfields [ i ] . Buffer . toString ( encoding ) ;
486
+ decoded . timezone = iconv . decode (
487
+ header . Subfields [ i ] . Buffer , encoding
488
+ ) ;
483
489
break ;
484
490
}
485
491
}
@@ -492,10 +498,10 @@ JAM.prototype.decodeKludges = function(header, decodeOptions){
492
498
493
499
var encoding = this . encodingFromHeader ( header ) ;
494
500
if ( encoding === null ) encoding = options . defaultEncoding ;
495
- if ( options . useDefaultIfUnknown && ! Buffer . isEncoding ( encoding ) ) {
501
+ if ( options . useDefaultIfUnknown && ! iconv . encodingExists ( encoding ) ) {
496
502
encoding = options . defaultEncoding ;
497
503
}
498
- if ( ! Buffer . isEncoding ( encoding ) ) {
504
+ if ( ! ( iconv . encodingExists ( encoding ) ) ) {
499
505
throw new Error ( this . errors . UNKNOWN_ENCODING ) ;
500
506
}
501
507
@@ -505,27 +511,27 @@ JAM.prototype.decodeKludges = function(header, decodeOptions){
505
511
switch ( header . Subfields [ i ] . LoID ) {
506
512
case 4 : // MSGID
507
513
kludges . push (
508
- 'MSGID: ' + header . Subfields [ i ] . Buffer . toString ( encoding )
514
+ 'MSGID: ' + iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
509
515
) ;
510
516
break ;
511
517
case 5 : // REPLYID
512
518
kludges . push (
513
- 'REPLY: ' + header . Subfields [ i ] . Buffer . toString ( encoding )
519
+ 'REPLY: ' + iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
514
520
) ;
515
521
break ;
516
522
case 7 : // PID
517
523
kludges . push (
518
- 'PID: ' + header . Subfields [ i ] . Buffer . toString ( encoding )
524
+ 'PID: ' + iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
519
525
) ;
520
526
break ;
521
527
case 2000 : // FTSKLUDGE
522
528
kludges . push (
523
- header . Subfields [ i ] . Buffer . toString ( encoding )
529
+ iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
524
530
) ;
525
531
break ;
526
532
case 2004 : // TZUTCINFO
527
533
kludges . push (
528
- 'TZUTC: ' + header . Subfields [ i ] . Buffer . toString ( encoding )
534
+ 'TZUTC: ' + iconv . decode ( header . Subfields [ i ] . Buffer , encoding )
529
535
) ;
530
536
break ;
531
537
}
@@ -544,18 +550,19 @@ JAM.prototype.decodeMessage = function(header, decodeOptions, callback){
544
550
545
551
var encoding = _JAM . encodingFromHeader ( header ) ;
546
552
if ( encoding === null ) encoding = options . defaultEncoding ;
547
- if ( options . useDefaultIfUnknown && ! Buffer . isEncoding ( encoding ) ) {
553
+ if ( options . useDefaultIfUnknown && ! iconv . encodingExists ( encoding ) ) {
548
554
encoding = options . defaultEncoding ;
549
555
}
550
- if ( ! Buffer . isEncoding ( encoding ) ) {
556
+ if ( ! ( iconv . encodingExists ( encoding ) ) ) {
551
557
return callback ( new Error ( this . errors . UNKNOWN_ENCODING ) ) ;
552
558
}
553
559
554
560
_JAM . readJDT ( function ( err ) {
555
561
if ( err ) return callback ( err ) ;
556
562
557
- callback ( null , _JAM . JDT . toString (
558
- encoding , header . Offset , header . Offset + header . TxtLen
563
+ callback ( null , iconv . decode (
564
+ _JAM . JDT . slice ( header . Offset , header . Offset + header . TxtLen ) ,
565
+ encoding
559
566
) . replace ( / \r / g, '\n' ) ) ;
560
567
} ) ;
561
568
} ;
@@ -612,11 +619,12 @@ JAM.prototype.numbersForMSGID = function(
612
619
var checkEncoding = _JAM . encodingFromHeader ( hdr ) ;
613
620
if ( checkEncoding === null ) checkEncoding = options . defaultEncoding ;
614
621
if (
615
- options . useDefaultIfUnknown && ! Buffer . isEncoding ( checkEncoding )
622
+ options . useDefaultIfUnknown &&
623
+ ! iconv . encodingExists ( checkEncoding )
616
624
) {
617
625
checkEncoding = options . defaultEncoding ;
618
626
}
619
- if ( ! Buffer . isEncoding ( checkEncoding ) ) {
627
+ if ( ! ( iconv . encodingExists ( checkEncoding ) ) ) {
620
628
checkEncoding = decodeDefaults . defaultEncoding ;
621
629
}
622
630
@@ -658,11 +666,12 @@ JAM.prototype.headersForMSGID = function(
658
666
var checkEncoding = _JAM . encodingFromHeader ( hdr ) ;
659
667
if ( checkEncoding === null ) checkEncoding = options . defaultEncoding ;
660
668
if (
661
- options . useDefaultIfUnknown && ! Buffer . isEncoding ( checkEncoding )
669
+ options . useDefaultIfUnknown &&
670
+ ! iconv . encodingExists ( checkEncoding )
662
671
) {
663
672
checkEncoding = options . defaultEncoding ;
664
673
}
665
- if ( ! Buffer . isEncoding ( checkEncoding ) ) {
674
+ if ( ! ( iconv . encodingExists ( checkEncoding ) ) ) {
666
675
checkEncoding = decodeDefaults . defaultEncoding ;
667
676
}
668
677
0 commit comments