Remove JavaSocketBridge and files which depend on it. In NDN.js, remove blocking get and put which use java_socket_bridge.js.
diff --git a/java/JavaPlugin.jar b/java/JavaPlugin.jar
deleted file mode 100644
index 8fa1090..0000000
--- a/java/JavaPlugin.jar
+++ /dev/null
Binary files differ
diff --git a/java/JavaSocketBridge.java b/java/JavaSocketBridge.java
deleted file mode 100644
index d484103..0000000
--- a/java/JavaSocketBridge.java
+++ /dev/null
@@ -1,564 +0,0 @@
-// @author: ucla-cs
-// See COPYING for copyright and distribution information.
-
-
-import java.applet.*;
-import javax.swing.*;
-import netscape.javascript.*;
-
-import java.lang.reflect.InvocationTargetException;
-import java.net.*;
-import java.nio.ByteBuffer;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.DatagramChannel;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Timer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.io.*;
-
-
-
-public class JavaSocketBridge extends JApplet {
-
- static String protocol = "TCP";
-
- static volatile Hashtable<String, SocketChannel> connections = new Hashtable<String, SocketChannel>();
-
-
-
- volatile String result = "";
-
- //static ConcurrentHashMap hm = null;
- static boolean isBrowser = true;
-
-
-
-
- private final static int PACKETSIZE = 8192 ;
- // Instance variables
- static JSObject browser = null; // The browser
-
- protected Selector _ncReadSelector = null;
- protected Selector _ncWriteSelector = null;
-
-
- // Initialize automatically called by browser
- public void init(){
-
- try{
- browser = JSObject.getWindow(this);
- }
- catch(Exception e){
- error( "ERROR IN INIT" + e.toString());
- }
- }
-
- //start automatically called by browser
- public void start(){
- try {
- browser.call("java_socket_bridge_ready", null);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- error("ERROR IN START" +e.toString());
- }
-
- }
-
- public String getOLD(final String h, final int p, final String interest, final int timeout){
- return AccessController.doPrivileged(
- new PrivilegedAction<String>() {
- public String run() {
-
- Socket sock=null;
- OutputStream out=null;
- InputStream in=null;
-
- try{
-
-
- sock=new Socket(h,p);
-
-
- String word= interest;
-
-
- in = sock.getInputStream();
-
- out=sock.getOutputStream();
-
-
- System.out.println("Your string is"+word);
-
- out.write(hex2Bytes(word));
- out.flush();
- sock.shutdownOutput();
-
- ByteArrayOutputStream serverinput=new ByteArrayOutputStream();
-
- int len=0;
- byte[] buf=new byte[PACKETSIZE];
- while ((len = in.read(buf))>=0) {
- serverinput.write(buf, 0, len);
- }
-
- String outputString = bytes2Hex(buf);
-
- System.out.println("Your string is "+word+" converted to byte "+outputString);
-
- return outputString;
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- error(e);
- }
-
-
- finally{
-
- try {
- sock.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- error(e);
- }
-
- }
-
- return "ERROR";
- }
- }
-
- );
- }
-
- public String get(final String h, final int p, final String interest,final int timeout){
- return AccessController.doPrivileged(
- new PrivilegedAction<String>() {
- public String run() {
- Thread t = new Thread( new Runnable(){
- public void run(){
-
- SocketChannel sChannelCloser = null;
- try{
-
- final SocketChannel sChannel = open(h,p);
-
- sChannelCloser=sChannel;
-
- sChannel.socket().setSoTimeout(timeout);
-
- ByteBuffer buffer = ByteBuffer.wrap(hex2Bytes(interest));
-
- System.out.println("WRITING BYTES:"+interest);
-
- while(buffer.hasRemaining())
- sChannel.write(buffer);
-
- ByteBuffer bufferReceiver = ByteBuffer.allocate(PACKETSIZE);
-
- buffer.clear();
- sChannel.read(bufferReceiver);
-
- String output = bytes2Hex(bufferReceiver.array(), bufferReceiver.position());
- System.out.println("RECEIVED BYTES:" +output);
-
- result=output;
-
- return ;
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- error(e);
- }
- finally{
-
- try {
- sChannelCloser.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- error(e);
- }
-
- }
-
-
-
- //return "STARTED GETTING";
-
- }
- }
-
- );
-
- t.start();
-
- Long start = System.currentTimeMillis();
- Long current = System.currentTimeMillis();
-
- while(t.isAlive() && current-start < timeout ){
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- error(e);
- }
- current = System.currentTimeMillis();
- }
- if(current-start >= timeout){
- t.stop();
- return "TIMEOUT EXPIRED";
- }
- else{
- return result;
-
- }
-
-
- }
- }
-
- );
- }
-
-
- // Report an error
- public static void receivedInterest( String data,String name){
-
- Object[] arguments = new Object[2];
- arguments[0] = data;
- arguments[1] = name;
-
-
- try {
- browser.call("on_socket_received_interest", arguments);
- } catch (JSException e) {
- // TODO Auto-generated catch block
- error(e.getMessage());
- }
-
- }
-
- public String put(final String h, final int p, final String interest,final String name, final String toReturn){
- return AccessController.doPrivileged(
- new PrivilegedAction<String>() {
- public String run() {
-
-
- SocketChannel sChannelCloser = null;
- try{
-
- final SocketChannel sChannel = open(h,p);
- sChannelCloser=sChannel;
-
- //FIRST TIME
- //ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
-
- ByteBuffer buffer = ByteBuffer.wrap(hex2Bytes(interest));
-
- System.out.println("WRITING BYTES:"+interest);
- while(buffer.hasRemaining())
- sChannel.write(buffer);
-
- ByteBuffer bufferReceiver = ByteBuffer.allocate(PACKETSIZE);
-
- buffer.clear();
- sChannel.read(bufferReceiver);
-
- System.out.println("RECEIVED BYTES:" + bytes2Hex(bufferReceiver.array()));
-
-
-
-
- Thread t = new Thread( new Runnable(){
- public void run(){
- //sChannel.
- while(true){
-
- try{
-
- ByteBuffer bufferReceiver = ByteBuffer.allocate(PACKETSIZE);
-
- bufferReceiver.clear();
- sChannel.read(bufferReceiver);
-
- String receivedHexBytes = bytes2Hex(bufferReceiver.array());
-
- System.out.println("RECEIVED BYTES:" + receivedHexBytes);
-
-
- System.out.println("name is "+name);
-
- //connections.put(name, sChannel);
-
- //System.out.println("name is "+name);
-
- //receivedInterest(receivedHexBytes,name);
-
-
- //byte[] output = hex2Bytes("048202aa03b208855dea25cca4d3967c774cc6e709a140d91f9d74e97a665cbb106568ee94f998d8b22fbe2b8d2fc43bd9363b501a50f2d770a7882aaf0792c20359f54da27d4a5b5a29be7d349c656e60fd37c92cf4e4aae256af04161e561aa4323512b38799c43d7a2ec4e35c3e19599b12c5ee3a5f0994837461c05c294a8b596f960e9287520000f2faad726f63636f000001a203e2028548398bad0eeb58e9cc64720e84f4947fe1c1eb310055181ed0b4c2d920ef6e590002bab504fcc5336e9c0001e201da0a9530819f300d06092a864886f70d010101050003818d003081890281810092e67426906bae66a3f4910bade5a2d24e2b7ed0d7a3e16f368c258e848f30115f6e95f5e0ee64505ed3da08be6ee599d395f611ffb096a9c258171518f0c6b3612a94681d29e44619227ac268e5d450abac89820d96188f507d15fb40d8780ccb76a012f7ce4f4efe2b8ba431ef993e31da867adffb069003808bceef9ff4d10203010001000000019abd424f4e4a4f55520000");
-
- byte[] output = hex2Bytes(toReturn);
-
-
- ByteBuffer outputBuffer = ByteBuffer.wrap(output);
-
- //byte[] output = hex2Bytes("048202aa03b208857d7f003e50fc79aca1563842832db26c5e313bec0940ce795dd8adc34e7fd2cadee7b44b28737d59c061240da60d0733e2bcc760c7656a0f03b20a987c1a1fb94bb93648243c48fde222bc21b85062f186ffdc15f637cfe83f35ab11e3564e7e83a26de39a0faf3991f469f0f376fca535fb1be28ede72b433547b4977f0f3000000f2faa574657374000001a203e20285189f9df9814d134883758f9c5541ba957a4464d8756f34870cf981143f56779a0002bab504fcbf24f6f60001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100c0a2c68770c339ed3152b90cde701ba588652f358854460b36b866c6e76272013232df351f10841ac49e35a6bc644f9c9caacd9aa0cd0e1835a34162c9208049d3f1f893d0b9566854133a763756df45297328d595ba6b6459fd311d5e1c97ce5278fa076dde765090c7221670ad54689958cc5fb46699482c5ac16c301dba1f0203010001000000019abd424f4e4a4f55520000");
-
- while(outputBuffer.hasRemaining())
- sChannel.write(outputBuffer);
-
- System.out.println("SENT BACK SOME DATA");
-
-
- }
- catch(Exception e){
- error(e);
- try {
- sChannel.close();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- error(e1);
- }
- System.exit(0);
-
- }
- }
-
- }});
-
- t.start();
-
- return "STARTED PUBLISHING";
-
- //return receivedHexBytes;
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- error(e);
-
- try {
- System.out.println("CLOSING THE CONNECTION");
- sChannelCloser.close();
- } catch (IOException ex) {
- // TODO Auto-generated catch block
- error(ex);
-
- }
- }
- return "FAILURE";
-
-
-
- }
- }
- );
- }
-
-
-
- /**
- * Not used
- */
- public String putAnswer(final String s, final String dataBack){
-
- final SocketChannel sChannel = connections.get(s);
-
-
- byte[] output = hex2Bytes(dataBack);
-
- ByteBuffer outputBuffer = ByteBuffer.wrap(output);
-
- //byte[] output = hex2Bytes("048202aa03b208857d7f003e50fc79aca1563842832db26c5e313bec0940ce795dd8adc34e7fd2cadee7b44b28737d59c061240da60d0733e2bcc760c7656a0f03b20a987c1a1fb94bb93648243c48fde222bc21b85062f186ffdc15f637cfe83f35ab11e3564e7e83a26de39a0faf3991f469f0f376fca535fb1be28ede72b433547b4977f0f3000000f2faa574657374000001a203e20285189f9df9814d134883758f9c5541ba957a4464d8756f34870cf981143f56779a0002bab504fcbf24f6f60001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100c0a2c68770c339ed3152b90cde701ba588652f358854460b36b866c6e76272013232df351f10841ac49e35a6bc644f9c9caacd9aa0cd0e1835a34162c9208049d3f1f893d0b9566854133a763756df45297328d595ba6b6459fd311d5e1c97ce5278fa076dde765090c7221670ad54689958cc5fb46699482c5ac16c301dba1f0203010001000000019abd424f4e4a4f55520000");
-
-
-
- try{
- while(outputBuffer.hasRemaining())
- sChannel.write(outputBuffer);
-
-
- ByteBuffer bufferReceiver = ByteBuffer.allocate(PACKETSIZE);
-
- bufferReceiver.clear();
- sChannel.read(bufferReceiver);
-
- String receivedHexBytes = bytes2Hex(bufferReceiver.array());
- System.out.println("RECEIVED BYTES:" + receivedHexBytes);
-
-
- receivedInterest(receivedHexBytes,s);
-
- }
- catch (Exception e) {
- // TODO Auto-generated catch block
- error(e);
-
- try {
- System.out.println("CLOSING THE CONNECTION");
- sChannel.close();
- } catch (IOException ex) {
- // TODO Auto-generated catch block
- error(ex);
- return "FAILURE";
- }
- }
-
- return "SUCCESS";
-
- }
-
-
- public SocketChannel open(String host, int ip) throws IOException{
- // Create a non-blocking socket channel
- SocketChannel sChannel = SocketChannel.open();
-
- //sChannel.configureBlocking(false);
-
- // Send a connection request to the server; this method is non-blocking
- sChannel.connect(new InetSocketAddress(host, ip));
-
- // Before the socket is usable, the connection must be completed
- // by calling finishConnect(), which is non-blocking
-
- _ncReadSelector = Selector.open();
- //sChannel.configureBlocking(false);
- //sChannel.register(_ncReadSelector, SelectionKey.OP_READ);
- _ncWriteSelector = Selector.open();
- //sChannel.register(_ncWriteSelector, SelectionKey.OP_WRITE);
-
-
- while (!sChannel.finishConnect()) {
- // Do something else
- System.out.println("TRYING TO CONNECT");
- }
- System.out.println("CONNECTED TO " +host +":"+ip);
-
- return sChannel;
- }
-
-
- public static void error(Exception ex){
- StringWriter sw = new StringWriter();
- ex.printStackTrace(new PrintWriter(sw));
- String exceptionAsStrting = sw.toString();
-
- error(exceptionAsStrting );
- }
- // Report an error
- public static void error(String message){
-
- System.out.println("RECEIVED AN ERROR");
- message = "Java Socket Bridge ERROR: " + message;
- Object[] arguments = new Object[1];
- arguments[0] = message;
-
- if(isBrowser){
- try {
- browser.call("on_socket_error", arguments);
- } catch (JSException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- else{
- System.out.println(message);
- }
- }
-
-
-
-
- // Log something
- public void log(String message){
- System.out.println(message);
- }
-
-
- public static byte[] hex2Bytes(String str)
- {
- byte[] bytes = new byte[str.length() / 2];
- for (int i = 0; i < bytes.length; i++)
- {
- bytes[i] = (byte) Integer
- .parseInt(str.substring(2 * i, 2 * i + 2), 16);
- }
-
- return bytes;
- }
- public static String bytes2Hex(byte[] b, int length)
- {
- // String Buffer can be used instead
- String hs = "";
- String stmp = "";
-
- for (int n = 0; n < length; n++)
- {
- stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
-
- if (stmp.length() == 1)
- {
- hs = hs + "0" + stmp;
- }
- else
- {
- hs = hs + stmp;
- }
-
- if (n < length - 1)
- {
- hs = hs + "";
- }
- }
-
- return hs;
- }
- public static String bytes2Hex(byte[] b)
- {
- return bytes2Hex(b, b.length);
- }
-
-
- public static void main(String[] args) throws IOException {
-
- JavaSocketBridge b = new JavaSocketBridge();
-
- //System.out.println( b.get("127.0.0.1",9695 ,"01D2F2FAA4657374000000", 1000));
-
- //System.out.println( b.get("127.0.0.1",9695 ,"01D2F2FAA574657374000000", 1000));
-
- //System.out.println( b.putSend("127.0.0.1",9695 ,"01d2f2faa563636e7800fa0285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f00fabd73656c6672656700fa1bf5048202aa03b2088568cf069cdfdedad97ad9358f7e2446ca581eaa22ed9eb4e482fe616b35840533ba4f9d321155d6c34915dff7352de5e60bddb17e32f893cd89056cfd291011a5c3742312a083c2628fed4ddffb04cf51e6860eb1dbd43ff9b59736e62ec1a69218ce0acfdd9da896a617f609c12225f14a63876488b38d3a7b9fc1757d9058470000f20001a203e2028547ab87ece0e191c5e946f839507bc875c63c7032e42c347c135a952e7187c9300002bab504fcb2a6a0250001e201da0a9530819f300d06092a864886f70d010101050003818d003081890281810089b8f8b42d8aa31148d9f2a0c38d3fee7c73f60ea444d08fd886114a689cfe235c49bf9e256489390c19d961aabd5ee6d9e9e133282cd68b046609fe0a81be76c683cb150f3d035231b25745530fc887fbd137d6ef9c05d795fdb78f84eeab6f7dcbd1aa64b3920d96cfe941b66967bb2892baef1995bea231a4dc89c383e8550203010001000000019a0585058a04cabe73656c6672656700f2faad726f63636f000003e20285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f0004fa8e330003d2d63231343734383336343700000000000002d28e310000",1000));
-
- //System.out.println( b.putSend("127.0.0.1",9695 ,"01D2F2FAA574657374000000",1000));
-
-
- //System.out.println( b.getSend("127.0.0.1",9695 ,"01D2F2FAA574657374000000", 1000));
-
- //System.out.println( b.get("localhost",9695 ,"01d2f2fafd",3000));
-
- //System.out.println( b.get("localhost",9695 ,"01D2F2FAA574657374000",3000));
-
-
- //System.out.println( b.getOLD("localhost",9695 ,"01d2f2fafdc12e4d2e532e6c6f63616c686f737400fabdc12e4d2e53525600faa563636e6400fa9d4b4559000002d28e310000",1000));
-
-
- //System.out.println( b.putSend("localhost",9695 ,"01d2f2faa563636e7800fa0285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f00fabd73656c6672656700fa1bf5048202aa03b208854a18988c72aee624da28e2e1acbccb209b8e89429041985521ed68f95a1c546872fba3d854b1377dc249b6d8ec5935e5069256c97a7f6d8a62e86222ccd2cfe5097aed3fe5ede6732ce191a8680d78e39d0c5058a2b7bb0f0687994e9f045de346b66c46498547a08da1f2f0cdfafba3afdfe7107931935ede79040137ba94a90000f20001a203e202851a4860caa4991e829bcdc9429fb711d52440968d23560726606050bf147acffc0002bab504fcb3f03aa40001e201da0a9530819f300d06092a864886f70d010101050003818d00308189028181008ed27580e3d1c4c67672208665133a1ba12d8ebf5cad8e054571926b3ff0782a04c71703384021a6cefb6616b66cbd8a679b761d69d6373a851546e26f7105510b4c23be9a3c7f2e652e100ecc1471855730659f1477ce4e8504ad1fd8f44116baaeae2ff67eec33abba790157a79bf5039e5a528a471d9d67c94e70117ed7490203010001000000019a0585058a04cabe73656c6672656700f2faad726f63636f000003e20285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f0004fa8e330003d2d63231343734383336343700000000000002d28e310000", 1000));
-
- //b.putSend("localhost",9695 ,"01d2f2faa563636e7800fa0285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f00fabd73656c6672656700fa1bf5048202aa03b208854a18988c72aee624da28e2e1acbccb209b8e89429041985521ed68f95a1c546872fba3d854b1377dc249b6d8ec5935e5069256c97a7f6d8a62e86222ccd2cfe5097aed3fe5ede6732ce191a8680d78e39d0c5058a2b7bb0f0687994e9f045de346b66c46498547a08da1f2f0cdfafba3afdfe7107931935ede79040137ba94a90000f20001a203e202851a4860caa4991e829bcdc9429fb711d52440968d23560726606050bf147acffc0002bab504fcb3f03aa40001e201da0a9530819f300d06092a864886f70d010101050003818d00308189028181008ed27580e3d1c4c67672208665133a1ba12d8ebf5cad8e054571926b3ff0782a04c71703384021a6cefb6616b66cbd8a679b761d69d6373a851546e26f7105510b4c23be9a3c7f2e652e100ecc1471855730659f1477ce4e8504ad1fd8f44116baaeae2ff67eec33abba790157a79bf5039e5a528a471d9d67c94e70117ed7490203010001000000019a0585058a04cabe73656c6672656700f2faad726f63636f000003e20285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f0004fa8e330003d2d63231343734383336343700000000000002d28e310000", 1000);
-
- //NewTest(54567);
-
- //System.out.println( b.put());
-
- //connections.put("meki", SocketChannel.open());
-
- }
-
-}
\ No newline at end of file
diff --git a/js/JavaSocketBridge.jar b/js/JavaSocketBridge.jar
deleted file mode 100644
index 5be7655..0000000
--- a/js/JavaSocketBridge.jar
+++ /dev/null
Binary files differ
diff --git a/js/NDN.js b/js/NDN.js
index 8dde5c3..dd34c0d 100644
--- a/js/NDN.js
+++ b/js/NDN.js
@@ -30,142 +30,6 @@
this.port=port;
}
-NDN.prototype.get = function(message){
- if(this.host!=null && this.port!=null){
- var output ='';
- message = message.trim();
- if(message==null || message =="" ){
- console.log('INVALID INPUT TO GET');
- return null;
- }
-
-
- //var array = Name.createNameArray(message);
-
- int = new Interest(new Name(message));
-
- int.InterestLifetime = 4200;
-
- var hex = encodeToHexInterest(int);
-
- //var result = get_java_socket_bridge().connectAndStart(ndnurl,ndnport,hex);
-
- var result = get(this.host,this.port, hex);
-
-
- if(LOG>0)console.log('BINARY RESPONSE IS ' +result);
-
- if(result==null || result==undefined || result =="" ){
- /*if(result[0] != '0'||result[1]!='4') {
- if(LOG>2)console.log('INVALID ANSWER');
- }*/
- return null;
- }
-
- else{
-
- co = decodeHexContentObject(result);
-
- if(LOG>2) {
- console.log('DECODED CONTENT OBJECT');
- console.log(co);
- }
- return co;
- }
- }
- else{
-
- console.log('ERROR URL OR PORT NOT SET');
-
- return null;
-
- }
-
-
-}
-
-NDN.prototype.put = function(name,content){
- if(this.host!=null && this.port!=null){
-
- var co = this.get("/%C1.M.S.localhost/%C1.M.SRV/ccnd");
-
- if(!co || !co.signedInfo || !co.signedInfo.publisher || !co.signedInfo.publisher.publisherPublicKeyDigest){
- alert("Cannot contact router");
-
- return null;
- }
-
- var ccnxnodename = co.signedInfo.publisher.publisherPublicKeyDigest;
-
- name = name.trim();
-
- var fe = new ForwardingEntry('selfreg',new Name(name),null, null, 3,2147483647);
-
- var bytes = encodeForwardingEntry(fe);
-
-
- var si = new SignedInfo();
- si.setFields();
-
- var co = new ContentObject(new Name(),si,bytes,new Signature());
- co.sign();
-
- var coBinary = encodeToBinaryContentObject(co);
-
- //var ccnxnodename = unescape('%E0%A0%1E%099h%F9t%0C%E7%F46%1B%AB%F5%BB%05%A4%E5Z%AC%A5%E5%8Fs%ED%DE%B8%E0%13%AA%8F');
-
- var interestName = new Name(['ccnx',ccnxnodename,'selfreg',coBinary]);
-
- int = new Interest(interestName);
- int.scope = 1;
-
- var hex = encodeToHexInterest(int);
-
- console.log('GOING TO PUT INTEREST OBJECT');
-
- console.log(hex);
-
- //var result = put(this.host,this.port, hex,name);
-
-
- //if(LOG>3)console.log('received interest'); //from host'+ host +':'+port+' with name '+name);
-
- //if(LOG>3)console.log('DATA ');
-
- //if(LOG>3)console.log(result);
-
- //interest = decodeHexInterest(result);
-
- //console.log('SUCCESSFULLY PARSED INTEREST');
-
- console.log('CREATING ANSWER');
- var si = new SignedInfo();
- si.setFields();
-
- var answer = DataUtils.toNumbersFromString(content);
-
- var co = new ContentObject(new Name(name),si,answer,new Signature());
- co.sign();
-
-
- var outputHex = encodeToHexContentObject(co);
-
- //console.log('SENDING ANSWER');
-
- //return get_java_socket_bridge().putAnswer(outputHex,name);
-
- var result = put(this.host,this.port, hex,name,outputHex);
-
-
- return result;
- }
- else{
- console.log('ERROR URL OR PORT NOT SET');
-
- return null;
- }
-}
-
/** 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/java_socket_bridge.js b/js/java_socket_bridge.js
deleted file mode 100644
index 62f43b5..0000000
--- a/js/java_socket_bridge.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * @author: ucla-cs
- * See COPYING for copyright and distribution information.
- * This file provides access to the JavaSocketBridge applet.
- */
-
-
-//var ccnxnodename = unescape('%E0%A0%1E%099h%F9t%0C%E7%F46%1B%AB%F5%BB%05%A4%E5Z%AC%A5%E5%8Fs%ED%DE%B8%E0%13%AA%8F');
-
-
-var LOG = 0;
-
-
-var java_socket_bridge_ready_flag = false;
-
-var ndnport =null;
-var ndnurl=null;
-
-var registeredPrefixes ={};
-
-/**
- * Add a trim funnction for Strings
- */
-String.prototype.trim = function() {
- return this.replace(/^\s+|\s+$/g, "");
-};
-
-
-// Applet reports it is ready to use
-function java_socket_bridge_ready(){
- console.log('APPLET LOADED');
- java_socket_bridge_ready_flag = true;
-
-}
-
-// Send Test Interest
-function get(host,port,data){
- if(java_socket_bridge_ready_flag){
- return get_java_socket_bridge().get(host,port,data,1000);
- }
- else{
- on_socket_error("Java Socket Bridge send Interest until the applet has loaded");
- }
-}
-
-
-// Send Test Interest
-function put(host,port,data,name,toReturn){
-
- if(java_socket_bridge_ready_flag){
- return get_java_socket_bridge().put(host,port,data,name,toReturn);
- }
- else{
- on_socket_error("Java Socket Bridge send Interest until the applet has loaded");
- }
-}
-
-function on_socket_received_interest(hex,name){
-
- if(LOG>3)console.log('received interest from host'+ host +':'+port+' with name '+name);
-
- if(LOG>3)console.log('DATA ');
-
- if(LOG>3)console.log(hex);
-
- interest = decodeHexInterest(hex);
-
- console.log('SUCCESSFULLY PARSED INTEREST');
-
- console.log('CREATING ANSWER');
- var si = new SignedInfo();
- si.setFields();
-
- var answer = toNumbersFromString('WORLD');
-
- var co = new ContentObject(new Name(name),si,answer,new Signature());
- co.sign();
-
-
- var outputHex = encodeToHexContentObject(co);
-
- console.log('SENDING ANSWER');
-
- return get_java_socket_bridge().putAnswer(outputHex,name);
-}
-
-// Get something from the socket
-function on_socket_get(message){}
-
-// Report an error
-function on_socket_error(message){
- alert('Received error message \n' +message);
-}
-
-// Get the applet object
-function get_java_socket_bridge(){
- return document.getElementById('JavaSocketBridge');
-}
\ No newline at end of file
diff --git a/js/testing/image-loader.html b/js/testing/image-loader.html
deleted file mode 100644
index 5ef9258..0000000
--- a/js/testing/image-loader.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>NDN Image Loader</title>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
- var loadedImageString = "";
- var connector = new NDN();
- var pieceNumber = 0;
- var count = 0;
- var end = false;
- var LOG = 0;
- var pieceSize = 1000;
-
-
- function getPiece(){
- if(!pieceNumber) pieceNumber = 0;
- var contentName = "/image/piece" + pieceNumber;
- var co = connector.get( contentName );
-
- if(co){
- loadedImageString += DataUtils.toString(co.content);
- console.log("Received length: " + co.content.length);
- if(co.content.length == pieceSize){
- pieceNumber += co.content.length;
- getPiece();
- }
- else document.getElementById('image').src += loadedImageString;
- }
- }
-
-
-
-
-
- </script>
-
-</head>
-<body >
- <div>
- <button onclick="getPiece()">Get image</button>
- </div>
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <p id="result"></p>
- <div>
- <img id="image" src="data:image/png;base64," alt="Image placeholder" />
- </div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/js/testing/image-sender.html b/js/testing/image-sender.html
deleted file mode 100644
index 0033429..0000000
--- a/js/testing/image-sender.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>NDN Image Sender</title>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
- //var imageString = "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";
- //var imageString = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==";
- var imageString = "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"
- //var imageString = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAILUlEQVRYhcWXe3DU1RXHv7/fPvLLL7ubzWM3SxKSzZMQQhKCWjSPBhBiESItYqFlihSnUrHadGwZBRwYKDB2CrWOUKqd1BEoKFh5lYcMFcWqIw8JCYkQ8lg2j2Y32c3+9vF73ts/YlJCHoVOH2fm/nFf53zOuefeOZehlOL/KexYE5UP8s7rx9L2luZzzv8qAaV01Pb8U9YZiiuXih9nSMd/Yn/1ocyoeEopSqdFJ0/JMFjG2nevbcyJDT9P+I7alUtVdy4VP8mi4vksn9yY0ypdzNauvJFyYDylhmdzVpmfz507qkGbkUcabxrsj3kEhVOj8qEDwAK6VB10E3RWMHAqAY1Nt+sfX1JpemCsvcrhjjeFPW1n7hxnFqfOxx+mN+KBuLLBsREAj1WZclu+yDxa/Yhp4wjNGqAKBKBgX1piHTHPFMTGAwB1hVTqlQhTHF/ILEldyM1MKtFvLHp38spJRxM5fRomcPmDe/S3K9j8jG3uOzuTj+o5xgj1n0ZBBhrVKEABUCDdppu7pMJUsP+jYD0AMFXJ2flbph+NWZdfE9p87SQAYGlWLXL0JcWJZsyyJIMB8EGgA96smKJRI7Bup+f0qmWepU0n1L5ILwVVAfo1ACUUDMtAZzEOAFGwqx81rx7cS091Nl8727E3fM7jAgCmckIlOF0JeimCREOvEoFHiSCkaUAGv4x5bdopZo6jghntHShK5tK2LU06POdZrhiEgsgAESl0LAOqAiE3ASspgIbAQ2u6khpcsjjiOF4uPoD4qCcAwJCpQ0qMEQDQIclQIhSQAAhEHhaBb87grQBwpVN0vXCwu5zKNEhl4PIhFRfelNF6UITrhISAm4JSBgyF5fvlMdUjjKfEmGA1zgcBwFIoCkWbIKFNkAaMRyhwLdKH7derhgCWL47N27HFtvvdXcnryqfzjoZ2KQgZ9Y2nVHiaCfxhBh4fAzkIBF0qQhE9QIAFJfx3R4Tw/sR5IJSHSoAoBogA6KdACIAIsC6pk327pZR+5ftwCMDVoYiF2dz8yvv5RVevS14A2LHd/5brS+JlGIAB4AsxECIAoUB/B4FKWaQn6OcWTDRywwAyTAtAAYQJ0EeBFhW4JAF1IiBSkF7pj1p7oGlYEvp9xL3pld4Vx0+GNvoFTQWAX9T2/O6pQ+6JZ28G1xCKsEqATh8gq4Ds0yCILBgKU1kuVzYMICl6FmQCqAAkCvSrQFgDelWgQQRaQzcHlw5dw8uNogrgncF+rIFlH49LKO4W1EsAXnk4x3TsByVxx4061unuAyYmAP09QKyDQfW06DkAzgAAM8XqxLIsB0IE0OsAiQwAEApQdOML73rUefaMAKjOjnH8qMy5VaEOb2tXsOv8vJQFie32in1JBduf9jStEYh6LSPeWP5ipf2cpDCZlmgWZmgQEnWoyOEqh7x38DOgURbqQAKiTwFUCkjahzjVupj2id7bgzUEcKQ51B3ckF4B5WYmjWNBBR3Ct4BSLvaFfUlTcpP1UYs7Vdl9XwpftWpGwueuXhKfZ2Th8wNxFhSXZnP8J81iGE7TdIQIwLIDYY9oA8b/fKOKypp8Z74Ou4af9opHmBgKJooABsBgF6HjWRQYTdX7kgqOmlm98UJHuPlIY2BlSALxChQRP0GEMMbCFEMBAMDGFUAkX2etCqjUhdNti+40bn4stXgYQKHDaJ1iMy4cfHZBAF1sGDF5HhgyjZho4Oa+nZR/wMzq2SPX+t939Sv7bvkJtBBFQGZRmGIsAQAY2VyoGPSeoK5nBfWJfbcbZyrsebonM3YMA3h9tq2WFwxO1c+CSoAqsrjVFoPmBjPaOxSoky0oMFsWvpWU/2sAOFTvrxEk+H1Bgn4BcMbrixinSQ+RDDz6fgUISAdpvffsnWGnH/U0+b/98cxhAKvfDyz/3m5p9pb9/Ga1n+3r6TKg6e9R6JAZiKqG7q8EiBmxmBpv/emauPRlN7yi94I79Ct3P0E4SPFgNpcPCjsiGgcGgKCqqPeuHfJ6iiWemWyxM7mWYW/GUBLWhYQAgLMAzq4tiPv8EV3yYQYUMijrIQQcGKg3BCRkWvBDpO+eycdduALhN1MdfI0UpIlBwmQj1uhgFIAqGhCQ36OuQPOgfufSzGqpxPpG16aGHABtIwBul1/W+44V8SazRhnWpovKzedi55eZ7CtFoqXJNwU4sqz8Njlv78LWS99o7BF3ZiboXk6RdPayEnPmpyqFJqhAU+9rt+tsO9D6HsTURLjDgWH58FJZ7IzLN2X3XzrD7tFgBsWu5/SLrBOfKTMlbbIwektaViz+erVp/atK2++fK7W1lxcbuBo3Wf83ht9EuqTr9ETLpPH0DQpbbufKnNEG679a2KOK6i7vjd9u6a6f2qXJn7W1CJidl7M2XeStbT7lWCAETHIYsqBQoCu0/26MAxhZlK6tiC3ZU2Vblxqt049VdPKMTr95QkntsUlz6MnCsg9mpVvm/enJNPrcupxTzBM5FBNiCu+2Kh5RE1ZM5IoXpPHLv2WLsY8FHSKqurbz4oozfZ3b9Iz54ftIgrFPIF5JQSpVqZt2Buv+7QhQSlGayDnu1oMaW8HW04WzG9ZXOGqf/ll2FypTa+/lXzBqWX7eE+kGgKIkIzcvi08dz4HtPVdf/NIXPJ8uJhqNCuXREzl3195jnK9Zoc3I7Vqc8PqBhfZzW4sSysZaBwAb3Bd/TH1mORymgF/67D8CUOeRRVez1u7voP5z3ZGW8ZSEiEI2t9XXUA/XjIB0/V4Axj2f8kTOdC/n+WhV8qx7/RuOWpb/L+UfChIJv4n3S5MAAAAASUVORK5CYII=";
- var connector = null;
- var loadedImageString = "";
- var LOG = 0;
-
- function init(){
- connector = new NDN();
- }
-
- function run(){
-
- var ContentName = document.getElementById('contentname').value;
-
- var Content = document.getElementById('content').value;
-
- //createRoute('borges.metwi.ucla.edu', 9695);
-
-
-
-
- ///////////////////////////////////////
- //createRoute('localhost', 9695);
-
- //createRoute('131.179.141.15', 9695);
- //createRoute('borges.metwi.ucla.edu', 9695);
-
- //content object
- //var co = queryPrefix( Name );
-
- var connector = new NDN();
-
- var co = connector.put( ContentName, Content );
-
- ///////////////////////////////////////
-
-
-
- document.getElementById('result').innerHTML = 'Content \'' + Content + '\' was published with content name \'' + ContentName +'\'';
-
- }
-
- function publishImage(){
- init();
- var count = 1000;
- for(var i=0; i < imageString.length; i+=count){
- console.log("Publish substring: " + i + "; " + Math.min(count, imageString.length - i));
- const k = i + 0;
-
- var pubSub = function(y){
- return function(){ publishSubstring(y, Math.min(count, imageString.length - y));}
- }(i);
-
- setTimeout(pubSub, 500);
-
- loadedImageString += imageString.substr(i, Math.min(count, imageString.length - i));
- }
- document.getElementById("image").src += loadedImageString;
-
- }
-
- function publishSubstring(beginning, length){
- var ContentName = "/image/piece" + beginning;
- var Content = imageString.substr(beginning, length);
- console.log(beginning + "; " + length);
- var co = connector.put(ContentName, Content);
- //document.getElementById('result').innerHTML += 'Content \'' + Content + '\' was published with content name \'' + Name +'\'';
-
- }
-
- </script>
-
-</head>
-<body >
- <div>
- <button onclick="publishImage()">Publish image</button>
- </div>
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <div>
- <img id="image" src="data:image/png;base64," alt="Image placeholder" />
- </div>
-
- <p id="result"></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/js/testing/test-connection.html b/js/testing/test-connection.html
deleted file mode 100644
index be52347..0000000
--- a/js/testing/test-connection.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>Test Connection</title>
- <script type="text/javascript" src="../java_socket_bridge.js"></script>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
-
- function getAction(){
- console.log('ABOUT TO GET');
-
- // Interest for "/"
- var hex = '01d2f20000';
- var received = get('127.0.0.1', 9695, hex);
-
- var output= '<br /> received Content: <br/>' + received;
-
- console.log('INTEREST RECEIVED '+ received);
-
- document.getElementById('result').innerHTML = output;
-
- }
-
-
- function putAction(){
- console.log('ABOUT TO PUT');
-
- var hex = '01d2f2faa563636e7800fa0285e0290233a1f9da00a6b0db63b910379f6d98edd2b5ea7b0044109923286e6aaa00fabd73656c6672656700fa1a95048202aa03b20885a4024a492e588eade1bb1f94c151a617a41dde3d571d94ea1ac9d3c77f4c9f0ed5700c9722b3497124f3003320e346a2dead367b92a53bb087298023b0ac15584d3dcfb51482b6f458f24d37d46095c97b708aacaabd3fdfa981a86bd4831b2596b1ac23faa3ac6dcf3cb324dea96bc3d75aee7f1d6178ed82a09d5f31c6fa800000f20001a203e20285b5506b1aba3da7761b0f8d61a4aa7e3b6d15b426feb5bda82389aca765a3b81c0002bab505068dba9ba20001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100e17d30a7d828ab1b840b17542dcaf6207afd221e086b2a60d16cb7f54448ba9f3f08bcd099db21dd162a779e61aa89eee554d3a47de230bc7ac590d524067c3898bba6f5dc4360b845eda48cbd9cf126a723445f0e1952d7325a75faf556144f9a98af7186b0278685b8e2c08bea87171b4dee585c1828295b5395eb4a17779f0203010001000000019a03a5058a04cabe73656c6672656700f2faa564656d6f00fabd6d657373616765000004fa8e330003d2d63231343734383336343700000000000002d28e310000';
- var name = '/demo/message';
- // Signed content of "It works!".
- outputHex = '048202aa03b20885c8762b14c1df125229ecc88ff5080d042a2de01cd0b8e4357af88cff993c0c78c9774ebaf00bebfa2699ae81412fe03a155291981f3c914f2bc075446bb3dafce0314a40bc4c93890c6663da80b7798b66d97be6ddbee58ca30761d28b46ce3ac058b1fbbab7fad981626de954c54c09d68ebb8a18d31a4e1fb970677fb43f180000f2faa564656d6f00fabd6d657373616765000001a203e20285b5506b1aba3da7761b0f8d61a4aa7e3b6d15b426feb5bda82389aca765a3b81c0002bab505068dbab1f00001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100e17d30a7d828ab1b840b17542dcaf6207afd221e086b2a60d16cb7f54448ba9f3f08bcd099db21dd162a779e61aa89eee554d3a47de230bc7ac590d524067c3898bba6f5dc4360b845eda48cbd9cf126a723445f0e1952d7325a75faf556144f9a98af7186b0278685b8e2c08bea87171b4dee585c1828295b5395eb4a17779f0203010001000000019add5468697320776f726b73210000';
-
- var received = put('127.0.0.1', 9695, hex, name, outputHex);
-
- var output= '<br /> received Content: <br/>' + received;
-
- document.getElementById('result').innerHTML = output;
-
- }
-
-
- </script>
-
-</head>
-<body >
-
- <form>
- Press Buttons:<br /><!-- input id="contentname" type="text" name="CONTENTNAME" value="/PARC/abc" /--> <br />
- </form>
-
- <button onclick="putAction()">PUT!</button>
- <button onclick="getAction()">GET!</button>
-
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <p id="result"></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/js/testing/test-get.html b/js/testing/test-get.html
deleted file mode 100644
index e4709f6..0000000
--- a/js/testing/test-get.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>NDN Get</title>
- <script type="text/javascript" src="../java_socket_bridge.js"></script>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
-
- function getAction(){
- var connector = new NDN();
- var co = connector.get(document.getElementById('interest').value);
-
- var output = '<br/> received Content:<br/>' + contentObjectToHtml(co);
-
- document.getElementById('result').innerHTML = output;
- }
-
- </script>
-
-</head>
-<body >
-
- <form>
- Please Enter an Interest:<br />
- <input id="interest" type="text" name="INTEREST" size="50" value="/" />
- </form>
-
- <button onclick="getAction()">GET!</button>
-
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <p id="result"></p>
-
-</body>
-</html>
diff --git a/js/testing/test-put.html b/js/testing/test-put.html
deleted file mode 100644
index 1fdf5b9..0000000
--- a/js/testing/test-put.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>NDN Put</title>
- <script type="text/javascript" src="../java_socket_bridge.js"></script>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
- function run(){
- var contentName = document.getElementById('contentname').value;
- var content = document.getElementById('content').value;
-
- var connector = new NDN();
- var result = connector.put( contentName, content );
-
- document.getElementById('result').innerHTML = 'Content \'' + content +
- '\' was published with content name \'' + contentName +'\'. Result:<br/>' +
- result;
- }
-
- </script>
-
-</head>
-<body >
- <form>
- <div>
- <p>Please Enter a Content Name:</p>
-
- <input id="contentname" type="text" name="CONTENTNAME" value="/demo/message" />
-
- <p>Please Enter the Content:</p>
-
- <textarea id="content" cols="40" rows="5" name="CONTENT" >This works!</textarea>
-
- <br />
- </div>
- </form>
- <div>
- <button onclick="run()">PUT!</button>
- </div>
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <p id="result"></p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/js/testing/test-request-send-hex.html b/js/testing/test-request-send-hex.html
deleted file mode 100644
index 9b76e0f..0000000
--- a/js/testing/test-request-send-hex.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version = "1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"DTD/xhtml1-strict.dtd">
-<html xmlns = "http://www.w3.org/1999/xhtml">
-
-<head>
- <title>NDN Send Hex</title>
- <script type="text/javascript" src="../java_socket_bridge.js"></script>
-
- <script type="text/javascript" src="../Helper.js"></script>
-
- <script type="text/javascript">
- function run(){
- //var n = a.replace("%","");
-
- //console.log(n);
-
- var hex = document.getElementById('contentname').value;
-
- ///////////////////////////////////////
- //createRoute(, 9695);
-
-
- /// /ndn/ucla.edu/apps/hydra/mainvideo
- //createRoute('131.179.141.15', 9695);
- //createRoute('borges.metwi.ucla.edu', 9695);
-
- //content object
- //var co = queryPrefix( Name );
- console.log('HEX IS');
- console.log(hex);
-
- var result = get('127.0.0.1', 9695, hex);
-
- console.log('BINARY RESPONSE IS ' +result);
-
- var output ="";
- output += "HEX ANSWER IS: "+ result;
-
- output+= "<br />";
- output+= "<br />";
-
- //result[0] and result[1] should be 0 and 4 if there is a content object found
- if(result==null || result==undefined || result =="" ){
-
-
- if(LOG>2)console.log('INVALID ANSWER');
- output += "NO CONTENT FOUND";
-
- output+= "<br />";
- output+= "<br />";
- }
-
- else if(result[0] != '0'||result[1]!='4') {
- if(LOG>2)console.log('INVALID ANSWER');
- output += "INVALID ANSWER";
-
- output+= "<br />";
- output+= "<br />";
- }
- else{
-
- var numbers = DataUtils.toNumbers(result);
-
- console.log('HEX RESPONSE IS \n'+numbers);
- decoder = new BinaryXMLDecoder(numbers);
-
-
- co = new ContentObject();
-
- co.from_ccnb(decoder);
-
- if(LOG>2) console.log(co);
-
- output += contentObjectToHtml(co);
- }
- document.getElementById('result').innerHTML = output;
- }
-
- </script>
-
-</head>
-<body >
- <form>
- Please Enter a Hex Encoded Interest:<br /><input id="contentname" type="text" name="CONTENTNAME" value="01d2f20002d28e310000" /> <br />
- </form>
- <button onclick="run()">Request Data!</button>
- <div >
- <applet id="JavaSocketBridge" archive="../JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
- </applet>
- </div>
-
- <p id="result"></p>
-
-</body>
-</html>