Make PITEntry keep the Interest object. Make getEntryForExpressedInterest search for longest matches_name. Moved PITEntry and PITTable to NDN.js.
diff --git a/js/NDN.js b/js/NDN.js
index b0f929d..eb67d76 100644
--- a/js/NDN.js
+++ b/js/NDN.js
@@ -39,6 +39,31 @@
this.port=port;
}
+// For fetching data
+NDN.PITTable = new Array();
+
+var PITEntry = function PITEntry(interest, closure) {
+ this.interest = interest; // Interest
+ this.closure = closure; // Closure
+};
+
+// Return the longest entry from NDN.PITTable that matches name.
+NDN.getEntryForExpressedInterest = function(/*Name*/ name) {
+ // TODO: handle multiple matches? Maybe not from registerPrefix because multiple ContentObject
+ // could be sent for one Interest?
+ var result = null;
+
+ for (var i = 0; i < NDN.PITTable.length; i++) {
+ if (NDN.PITTable[i].interest.matches_name(name)) {
+ if (result == null ||
+ NDN.PITTable[i].interest.name.components.length > result.interest.name.components.length)
+ result = NDN.PITTable[i];
+ }
+ }
+
+ return result;
+};
+
/** Encode name as an Interest. If template is not null, use its attributes.
* Send the interest to host:port, read the entire response and call
* closure.upcall(Closure.UPCALL_CONTENT (or Closure.UPCALL_CONTENT_UNVERIFIED),
diff --git a/js/WebSocketTransport.js b/js/WebSocketTransport.js
index 7c6406d..6b9ca53 100644
--- a/js/WebSocketTransport.js
+++ b/js/WebSocketTransport.js
@@ -113,7 +113,7 @@
//console.log("NDN.onopen event fired.");
}
} else {
- var pitEntry = getEntryForExpressedInterest(nameStr);
+ var pitEntry = NDN.getEntryForExpressedInterest(co.name);
if (pitEntry != null) {
//console.log(pitEntry);
@@ -122,9 +122,9 @@
//console.log("Clear interest timer");
//console.log(pitEntry.closure.timerID);
- // Remove PIT entry from PITTable
- var index = PITTable.indexOf(pitEntry);
- PITTable.splice(index, 1);
+ // Remove PIT entry from NDN.PITTable
+ var index = NDN.PITTable.indexOf(pitEntry);
+ NDN.PITTable.splice(index, 1);
// Raise callback
pitEntry.closure.upcall(Closure.UPCALL_CONTENT, new UpcallInfo(ndn, null, 0, co));
@@ -176,25 +176,7 @@
ndn.onclose();
//console.log("NDN.onclose event fired.");
}
-}
-
-
-// For fetching data
-var PITTable = new Array();
-
-var PITEntry = function PITEntry(interest, closure) {
- this.interest = interest; // String
- this.closure = closure; // Closure
-}
-
-function getEntryForExpressedInterest(name) {
- for (var i = 0; i < PITTable.length; i++) {
- if (name.match(PITTable[i].interest) != null)
- return PITTable[i];
- // TODO: handle multiple matching prefixes
- }
- return null;
-}
+};
WebSocketTransport.prototype.expressInterest = function(ndn, interest, closure) {
if (this.ws != null) {
@@ -204,8 +186,8 @@
var bytearray = new Uint8Array(binaryInterest.length);
bytearray.set(binaryInterest);
- var pitEntry = new PITEntry(interest.name.getName(), closure);
- PITTable.push(pitEntry);
+ var pitEntry = new PITEntry(interest, closure);
+ NDN.PITTable.push(pitEntry);
this.ws.send(bytearray.buffer);
if (LOG > 3) console.log('ws.send() returned.');
@@ -214,11 +196,11 @@
closure.timerID = setTimeout(function() {
if (LOG > 3) console.log("Interest time out.");
- // Remove PIT entry from PITTable
- var index = PITTable.indexOf(pitEntry);
- //console.log(PITTable);
- PITTable.splice(index, 1);
- //console.log(PITTable);
+ // Remove PIT entry from NDN.PITTable
+ var index = NDN.PITTable.indexOf(pitEntry);
+ //console.log(NDN.PITTable);
+ NDN.PITTable.splice(index, 1);
+ //console.log(NDN.PITTable);
// Raise closure callback
closure.upcall(Closure.UPCALL_INTEREST_TIMED_OUT, new UpcallInfo(ndn, interest, 0, null));
}, interest.interestLifetime * 1000); // convert interestLifetime from seconds to ms.
@@ -235,7 +217,7 @@
var CSEntry = function CSEntry(name, closure) {
this.name = name; // String
this.closure = closure; // Closure
-}
+};
function getEntryForRegisteredPrefix(name) {
for (var i = 0; i < CSTable.length; i++) {
@@ -290,5 +272,5 @@
console.log('WebSocket connection is not established.');
return -1;
}
-}
+};