<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">

<!-- 
	See COPYING for copyright and distribution information.
-->

<html xmlns = "http://www.w3.org/1999/xhtml">

<head>
	<title>NDN Decode Face Instance</title>
	
	<script type="text/javascript" src="../Helper.js"></script>

	<script type="text/javascript">

		function decode(){

			var input = document.getElementById('result').innerHTML;

			
			var faceInstance = decodeHexFaceInstance(input);
			
			if(LOG>3)console.log('FACE INSTANCE DECODED');
			if(LOG>3)console.log(faceInstance);

			///////////////////////////////////////
			
			var output ="";
			
			if(faceInstance.publisherPublicKeyDigest!=null ){
				output+= "PublisherPublicKeyDigest: ";
				
					output+=  DataUtils.toHex(faceInstance.publisherPublicKeyDigest.publisherPublicKeyDigest);
					
					//output+= "PUBLISHER ID TYPE: ";
					//output+=  faceInstance.publisherPublicKeyDigest.PublisherPublicKeyDigest;
					
				output+= "<br />";
				output+= "<br />";

			}
			
			if(faceInstance.faceID!=null){
				output+= "FaceID: ";
				
				output+= faceInstance.faceID;
				output+= "<br />";
			}
			
			if(faceInstance.ipProto!=null){
				output+= "IPProto: ";
				
				output+= faceInstance.ipProto;
				output+= "<br />";
			}
			
			if(faceInstance.host!=null){
				output+= "Host: ";
				
				output+= faceInstance.host;
				output+= "<br />";
			}
			
			if(faceInstance.Port!=null){
				output+= "Port: ";
				
				output+= faceInstance.Port;
				output+= "<br />";
			}
			if(faceInstance.freshnessSeconds!=null){
				output+= "FreshnessSeconds: ";
				
				output+= faceInstance.freshnessSeconds;
				output+= "<br />";
			}
			
			/*if(interest.name!=null && interest.name.components!=null){
				output+= "NAME: ";
				
				for(var i=0;i<interest.Name.Components.length;i++){
					output+= "/"+ DataUtils.toString(interest.Name.Components[i]);
				}
				output+= "<br />";
				output+= "<br />";
			}*/
	
			document.getElementById('result').innerHTML = output;
			
		}

	</script>

</head>
<body >
	<form>
		
		Please Press Decode:<br />
		
		<!--  input id="faceInstance" type="text" name="FACEINSTANCE" value="/PARC/abc" /--> 
		
	</form>
	<button onclick="decode()">Decode</button>
	
	

		<p id="result">058203e20285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f0004d29632310004da9631370004e2c631302e312e312e310004eaa6393639350003d2d6323134373438333634370000</p>

</body>
</html>
