<?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 Request Example</title>
	<script type="text/javascript" src="java_socket_bridge.js"></script>
	
	<script type="text/javascript" src="CCNProtocolDTags.js"></script>
	
	<script type="text/javascript" src="CCNTime.js"></script>
	
	<script type="text/javascript" src="ContentName.js"></script>
	
	<script type="text/javascript" src="ContentObject.js"></script>
	
	<script type="text/javascript" src="DateFormat.js"></script>
	
	<script type="text/javascript" src="Exclude.js"></script>

	<script type="text/javascript" src="ExcludeAny.js"></script>

	<script type="text/javascript" src="ExcludeComponent.js"></script>

	<script type="text/javascript" src="Interest.js"></script>
	
	<script type="text/javascript" src="KeyLocator.js"></script>
	
	<script type="text/javascript" src="KeyName.js"></script>

	<script type="text/javascript" src="PublisherID.js"></script>
	
	<script type="text/javascript" src="Signature.js"></script>
	
	<script type="text/javascript" src="SignedInfo.js"></script>
	
	<script type="text/javascript" src="PublisherPublicKeyDigest.js"></script>
	
	<script type="text/javascript" src="FaceInstance.js"></script>

	<script type="text/javascript" src="ForwardingEntry.js"></script>
	
	<script type="text/javascript" src="encoding/BinaryXMLEncoder.js"></script>
	
	<script type="text/javascript" src="encoding/BinaryXMLCodec.js"></script>
	
	<script type="text/javascript" src="encoding/BinaryXMLDecoder.js"></script>
	
	<script type="text/javascript" src="encoding/DataUtils.js"></script>
	
	<script type="text/javascript">
		function run(){

			var ContentName = document.getElementById('contentname').value;
		
			var Content = document.getElementById('content').value;
			
			//createRoute('borges.metwi.ucla.edu', 9695);
			
			createRoute('localhost', 9695);
			
			registerPrefix(ContentName, Content);
			
			
			
			///////////////////////////////////////
		    //createRoute('localhost', 9695);

		    //createRoute('131.179.141.15', 9695);
		    //createRoute('borges.metwi.ucla.edu', 9695);
		    
			//content object
			//var co = queryPrefix( ContentName );
			
			
			
			///////////////////////////////////////
			
			/*var output ="";
			
			if(co==-1)
				output+= "NO CONTENT FOUND"
			else if (co==-2)
				output+= "CONTENT NAME IS EMPTY"
			else{
				if(co.Name!=null && co.Name.Components!=null){
					output+= "NAME: ";
					
					for(var i=0;i<co.Name.Components.length;i++){
						output+= "/"+ toString(co.Name.Components[i]);
					}
					output+= "<br />";
					output+= "<br />";
				}
	
				if(co.Content !=null){
					output += "CONTENT(ASCII): "+ toString(co.Content);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.Content !=null){
					output += "CONTENT(hex): "+ toHex(co.Content);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.Signature !=null && co.Signature.Signature!=null){
					
					output += "SIGNATURE(hex): "+ toHex(co.Signature.Signature);
					
					output+= "<br />";
					output+= "<br />";
				}
				if(co.SignedInfo!=null && co.SignedInfo.Locator!=null && co.SignedInfo.Locator.Key!=null){
					
					output += "PUBLISHER KEY: "+ toHex(co.SignedInfo.Locator.Key);
					
					output+= "<br />";
					output+= "<br />";
	
				}
			}*/
			
			//document.getElementById('result').innerHTML = output;
			document.getElementById('result').innerHTML = 'Content \'' + Content + '\' was published with content name \'' + ContentName +'\'';

		}
	
		</script>
	
</head>
<body >
	<form>

		Please Enter a Content Name:<br />
		
		<input id="contentname" type="text" name="CONTENTNAME" value="/PARC/abc" /> 
		
		Please Enter the Content:<br />
		
		<textarea id="content" cols="40" rows="5" name="CONTENT" value="SUCCESS"  >SUCCESS!</textarea> 
		
		
		<br />
	</form>
	<button onclick="run()">Publish</button>
	<div >
		<applet id="JavaSocketBridge" archive="JavaSocketBridge.jar" code="JavaSocketBridge.class" width="0" height="0">
		</applet>
	</div>

		<p id="result"></p>

</body>
</html>