From d727d430d7c744a516d4c68d156ed6bf8262f7b7 Mon Sep 17 00:00:00 2001
From: Nguyen Quoc Dinh <nqdinh@ubisen.com>
Date: Sun, 15 Jun 2014 23:58:55 +0700
Subject: [PATCH] max packet size defined

---
 lib/parameters.js | 3 +++
 lib/server.js     | 7 +++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/parameters.js b/lib/parameters.js
index 34a0322e..db019eae 100644
--- a/lib/parameters.js
+++ b/lib/parameters.js
@@ -47,4 +47,7 @@ p.exchangeLifetime = p.maxTransmitSpan + p.maxRTT
 // default port for CoAP
 p.coapPort = 5683
 
+// default max packet size
+p.maxPacketSize = 1280
+
 module.exports = p
diff --git a/lib/server.js b/lib/server.js
index a0793cf1..12a2f081 100644
--- a/lib/server.js
+++ b/lib/server.js
@@ -202,7 +202,10 @@ function OutMessage() {
 }
 util.inherits(OutMessage, OutgoingMessage)
 
-var maxBlock2   = 1024    //16, 32, 64, must <= 2**(6+4)
+// maxBlock2 is in formular 2**(i+4), and must <= 2**(6+4)
+var maxBlock2 = Math.pow(2, Math.floor(Math.log(parameters.maxPacketSize)/Math.log(2)))
+if (maxBlock2 > Math.pow(2, (6+4)))
+  maxBlock2 = Math.pow(2, (6+4))
 
 OutMessage.prototype.end= function(payload) {
   var that = this
@@ -210,7 +213,7 @@ OutMessage.prototype.end= function(payload) {
 
   // if payload is suitable for ONE message, shoot it out
   if (!payload || 
-    ((!requestedBlockOption) && (payload.length < maxBlock2)))
+    ((!requestedBlockOption) && (payload.length < parameters.maxPacketSize)))
     return OutgoingMessage.prototype.end.call(this, payload)
 
   // for the first request, block2 option may be missed