blob: 5ed0c9dfba86695de109a4890a2d89bcc82f91ef [file] [log] [blame]
Meki Cherkaouif441d3a2012-04-22 15:17:52 -07001/*
2 * @author: ucla-cs
3 * This class represents Interest Objects
4 */
5
Meki Cherkaouiabb973b2012-05-09 14:25:57 -07006var LOG = 5;
7
Meki Cherkaouif441d3a2012-04-22 15:17:52 -07008// Global variables
9var java_socket_bridge_ready_flag = false;
10
11var ndnport =null;
12var ndnurl=null;
13
Meki Cherkaouiabb973b2012-05-09 14:25:57 -070014var registeredPrefixes ={};
15
16String.prototype.trim = function() {
17 return this.replace(/^\s+|\s+$/g, "");
18};
19
Meki Cherkaouif441d3a2012-04-22 15:17:52 -070020// Applet reports it is ready to use
21function java_socket_bridge_ready(){
22 java_socket_bridge_ready_flag = true;
23}
24
25//Sets the route to ccnx router
26function createRoute(url, port){
27 ndnport = port;
28 ndnurl=url;
Meki Cherkaouiabb973b2012-05-09 14:25:57 -070029
30 console.log(new BinaryXMLDecoder());
31
32 //SEND INTERST TO CCNX NODE
33 startRegisterPrefix();
34
35 //Now Start the receiving thread
36 var result = get_java_socket_bridge().connectAndStartAndPublish();
37
38
Meki Cherkaouif441d3a2012-04-22 15:17:52 -070039}
40
41// Connect to a given url and port
42//Error -1 No countent found
43//Error -2 Empty query
44function queryPrefix(message){
45 if(ndnport!=null && ndnurl!=null){
46 var newMessage ='';
Meki Cherkaouiabb973b2012-05-09 14:25:57 -070047
Meki Cherkaouif441d3a2012-04-22 15:17:52 -070048
49 message = message.trim();
50
51
52
53 if(message==null || message =="" || message=="/"){
54 return -2;
55 }
56
57 //message = decodeURIComponent(message);
58 message = unescape(message);
59
60 var array = message.split('/');
61
62
63 if(message[0]=="/")
64 array=array.slice(1,array.length);
65
66 if(message[message.length-1]=="/")
67 array=array.slice(0,array.length-1);
68
69
70 //console.log('ARRAY IS '+ array);
71
72 enc = new BinaryXMLEncoder();
73
74 int = new Interest(new ContentName(array));
75
76 int.encode(enc);
77
78 var hex = toHex(enc.getReducedOstream());
79
80
81
82 //console.log('Connecting and start '+ ndnurl +':'+ndnport+'-'+message);
83
84
Meki Cherkaouiabb973b2012-05-09 14:25:57 -070085
86
Meki Cherkaouif441d3a2012-04-22 15:17:52 -070087 var result = get_java_socket_bridge().connectAndStart(ndnurl,ndnport,hex);
88
89 console.log('BINARY RESPONSE IS ' +result);
90
91
92 //result[0] and result[1] should be 0 and 4 if there is a content object found
93 if(result==null || result==undefined || result =="" || result[0] != '0'||result[1]!='4'){
94 return -1;
95 }
96
97 else{
98
99 var numbers = toNumbers(result);
100
101 console.log('HEX RESPONSE IS \n'+numbers);
102 decoder = new BinaryXMLDecoder(numbers);
103
104
105 co = new ContentObject();
106
107 co.decode(decoder);
108
109 //console.log(co);
110
111 return co;
112
113
114 }
115
Meki Cherkaouiabb973b2012-05-09 14:25:57 -0700116
117 }
118
119 else{
120
121 alert('ERROR URL OR PORT NOT SET');
122
123 return -3;
124
125 }
126
127}
128
129
130function on_socket_received_interest(IP, port, interestBinary){
131 var interest = decodeHexInterest(interestBinary);
132
133 console.log('WOOO received interest' + interest.Name.Components);
134
135 var stringName = "";
136
137 for(var i=0;i<interest.Name.Components.length;i++){
138 stringName += "/"+ interest.Name.Components[i];
139 }
140
141 if(registeredPrefix[stringName]!=null){
142 if(LOG>1)console.log("CANNOT FIND THE OBJECT OF NAME " + stringName );
143 }
144 else{
145 var co = new ContentObject(interest.Name, null,registeredPrefix[stringName],null );
146
147 var hex = encodeToHexContentObject(co);
148
149 get_java_socket_bridge().sendContentObject(IP,port,hex);
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700150
151
152 }
Meki Cherkaouiabb973b2012-05-09 14:25:57 -0700153}
154
155function registerPrefix(name, content){
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700156
Meki Cherkaouiabb973b2012-05-09 14:25:57 -0700157 registeredPrefixes[name] = content ;
158
159}
160
161
162function unRegisterPrefix(name){
163
164 delete registeredPrefixes[name];
165
166}
167
168
169
170
171
172// Connect to a given url and port
173//Error -1 No countent found
174//Error -2 Empty query
175function startRegisterPrefix(){
176 if(LOG>2) console.log('START REGISTER PREFIX');
177
178 if(ndnport!=null && ndnurl!=null){
179 var newMessage ='';
180
181
182
183 name = name.trim();
184
185
186
187 ///////////////////////
188 var face = new FaceInstance('newface',null,null, 17, '127.0.0.1',9876,null,null,null);
189
190 var encoder1 = new BinaryXMLEncoder();
191
192 face.encode(encoder1);
193
194 var faceInstanceBinary = encoder1.getReducedOstream();
195
196
197
198 var co = new ContentObject(null,null,faceInstanceBinary,null);
199
200 var encoder2 = new BinaryXMLEncoder();
201
202 co.encode(encoder2);
203
204 var coBinary = encoder2.getReducedOstream();
205
206
207
208 var interestName = new ContentName(['ccnx','1234','newface',faceInstanceBinary]);
209 //var interestName = new ContentName(['ccnx','1234','newface',coBinary]);
210
211 int = new Interest(interestName,face);
212
213 var hex = encodeToHexInterest(int);
214 /////////////////
215
216
217
218 if(LOG>4)console.log('Interst name of Conntection Message is '+ interestName);
219
220
221 if(LOG>4) console.log('Connecting and start '+ ndnurl +':'+ndnport+'-'+hex);
222 //console.log('Connecting and start '+ ndnurl +':'+ndnport+'-'+message);
223
224 var result = get_java_socket_bridge().connectAndStart(ndnurl,ndnport,hex);
225
226 console.log('BINARY RESPONSE IS ' +result);
227
228 //TODO MOVE THIS
229 sendForwardingEntry(10);
230
231 //result[0] and result[1] should be 0 and 4 if there is a content object found
232 if(result==null || result==undefined || result =="" || result[0] != '0'||result[1]!='4'){
233 return -1;
234 }
235
236 if(LOG>4) console.log('RECEIVED THE FOLLOWING DATA: ' +co.Content);
237
238 else{
239
240 co = decodeHexContentObject(result);
241
242 if(LOG>4) console.log('RECEIVED THE FOLLOWING DATA: ' +co.Content);
243
244 return co;
245 }
246 }
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700247 else{
248
249 alert('ERROR URL OR PORT NOT SET');
250
251 return -3;
252
253 }
254
255}
256
Meki Cherkaouiabb973b2012-05-09 14:25:57 -0700257
258// Connect to a given url and port
259//Error -1 No countent found
260//Error -2 Empty query
261function sendForwardingEntry(faceID){
262 if(LOG>2) console.log('START REGISTER PREFIX');
263
264 if(ndnport!=null && ndnurl!=null){
265 var newMessage ='';
266
267
268
269 name = name.trim();
270
271
272
273 ///////////////////////
274 var face = new ForwardingEntry('prefixreg',new ContentName('helloworld'),null, faceID, 1,null);
275
276 var encoder1 = new BinaryXMLEncoder();
277
278 face.encode(encoder1);
279
280 var faceInstanceBinary = encoder1.getReducedOstream();
281
282
283
284 var co = new ContentObject(null,null,faceInstanceBinary,null);
285
286 var encoder2 = new BinaryXMLEncoder();
287
288 co.encode(encoder2);
289
290 var coBinary = encoder2.getReducedOstream();
291
292
293
294 var interestName = new ContentName(['ccnx','1234','prefixreg',faceInstanceBinary]);
295 //var interestName = new ContentName(['ccnx','1234','newface',coBinary]);
296
297 int = new Interest(interestName,face);
298
299 var hex = encodeToHexInterest(int);
300 /////////////////
301
302
303
304 if(LOG>4)console.log('Interst name of Conntection Message is '+ interestName);
305
306
307 if(LOG>4) console.log('Connecting and start '+ ndnurl +':'+ndnport+'-'+hex);
308 //console.log('Connecting and start '+ ndnurl +':'+ndnport+'-'+message);
309
310 var result = get_java_socket_bridge().connectAndStart(ndnurl,ndnport,hex);
311
312 console.log('BINARY RESPONSE IS ' +result);
313
314
315 //result[0] and result[1] should be 0 and 4 if there is a content object found
316 if(result==null || result==undefined || result =="" || result[0] != '0'||result[1]!='4'){
317 return -1;
318 }
319
320 if(LOG>4) console.log('RECEIVED THE FOLLOWING DATA: ' +co.Content);
321
322 else{
323
324 co = decodeHexContentObject(result);
325
326 if(LOG>4) console.log('RECEIVED THE FOLLOWING DATA: ' +co.Content);
327
328 return co;
329 }
330 }
331 else{
332
333 alert('ERROR URL OR PORT NOT SET');
334
335 return -3;
336
337 }
338
339}
340
341
342
343function createNameArray(name){
344 if(name==null || name =="" || name=="/"){
345 return -2;
346 }
347
348 //message = decodeURIComponent(message);
349 name = unescape(name);
350
351 var array = name.split('/');
352
353
354 if(name[0]=="/")
355 array=array.slice(1,array.length);
356
357 if(name[name.length-1]=="/")
358 array=array.slice(0,array.length-1);
359
360 return array;
361}
362
363function encodeToHexInterest(int){
364
365 var enc = new BinaryXMLEncoder();
366
367 int.encode(enc);
368
369 var hex = toHex(enc.getReducedOstream());
370
371 return hex;
372
373
374}
375
376
377function encodeToHexContentObject(co){
378 var enc = new BinaryXMLEncoder();
379
380 co.encode(enc);
381
382 var hex = toHex(enc.getReducedOstream());
383
384 return hex;
385
386
387}
388
389function decodeHexInterest(result){
390 var numbers = toNumbers(result);
391
392
393 decoder = new BinaryXMLDecoder(numbers);
394 console.log('DECODED HEX INTERST \n'+numbers);
395
396
397 i = new Interest();
398
399 i.decode(decoder);
400
401 return i;
402
403}
404
405function decodeHexContentObject(result){
406 var numbers = toNumbers(result);
407
408 decoder = new BinaryXMLDecoder(numbers);
409 console.log('DECODED HEX CONTENT OBJECT \n'+numbers);
410
411 co = new ContentObject();
412
413 co.decode(decoder);
414
415 return co;
416
417}
418
419
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700420//http://ejohn.org/blog/numbers-hex-and-colors/
421function toHex(arguments){
422 //console.log(arguments);
423 var ret = "";
424 for ( var i = 0; i < arguments.length; i++ )
425 ret += (arguments[i] < 16 ? "0" : "") + arguments[i].toString(16);
426 return ret.toUpperCase();
427}
428
429function toString(arguments){
430 //console.log(arguments);
431 var ret = "";
432 for ( var i = 0; i < arguments.length; i++ )
433 ret += String.fromCharCode(arguments[i]);
434 return ret;
435}
436
437function toNumbers( str ){
438 var ret = [];
439 str.replace(/(..)/g, function(str){
440 ret.push( parseInt( str, 16 ) );
441 });
442 return ret;
443}
444
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700445// Get something from the socket
446function on_socket_get(message){}
447
448// Report an error
449function on_socket_error(message){
Meki Cherkaouiabb973b2012-05-09 14:25:57 -0700450 alert('Received error message \n' +message);
Meki Cherkaouif441d3a2012-04-22 15:17:52 -0700451}
452
453// Get the applet object
454function get_java_socket_bridge(){
455 return document.getElementById('JavaSocketBridge');
456}