Replace idiomatic perl checksum code, which seems to fail on
authordjfiander <djfiander>
Fri, 25 Aug 2006 01:21:37 +0000 (01:21 +0000)
committerdjfiander <djfiander>
Fri, 25 Aug 2006 01:21:37 +0000 (01:21 +0000)
strings with diacriticals in them, with an explicit sum of the
ordinal values of the characters in the string, which seems to cope.

Sip/Checksum.pm

index dd5776b..07bcd9f 100644 (file)
@@ -1,4 +1,3 @@
-\r
 package Sip::Checksum;\r
 \r
 use Exporter;\r
@@ -10,8 +9,15 @@ our @EXPORT_OK = qw(checksum verify_cksum);
 \r
 sub checksum {\r
     my $pkt = shift;\r
+    my $cksum;\r
 \r
-    return (-unpack("%16C*", $pkt)) & 0xFFFF;\r
+    $cksum = 0;\r
+    foreach my $chr (map(ord, split(//, $pkt))) {\r
+       $cksum += $chr;\r
+    }\r
+    $cksum = (-$cksum) & 0xFFFF;\r
+\r
+    return $cksum;\r
 }\r
 \r
 sub verify_cksum {\r
@@ -52,3 +58,5 @@ while (<>) {
     chomp;\r
     test($_);\r
 }\r
+\r
+1;\r