<?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">
<meta charset="UTF-8">


<head>
	<title>NDN Put via WebSocket</title>

	<script type="text/javascript" src="../build/ndn-js.js"></script>

	<script type="text/javascript">
		var ndn = new NDN();

        var AsyncPutClosure = function AsyncPutClosure() {
        	// Inherit from Closure.
			Closure.call(this);
		};

		AsyncPutClosure.prototype.upcall = function(kind, upcallInfo) {
			if (kind == Closure.UPCALL_FINAL) {
				// Do nothing.
			} else if (kind == Closure.UPCALL_INTEREST) {
				console.log('AsyncPutClosure.upcall() called.');
                console.log("Host: " + ndn.host + ":" + ndn.port);
				var content = document.getElementById('content').value;
				var interest = upcallInfo.interest;
				var nameStr = interest.name.getName();

				var si = new SignedInfo();

				var co = new ContentObject(new Name(nameStr), si, content);
				co.sign();

				upcallInfo.contentObject = co;
				return Closure.RESULT_INTEREST_CONSUMED;
			}
			return Closure.RESULT_OK;
		};


		function run() {
			var contentName = document.getElementById('contentname').value;

			ndn.registerPrefix(new Name(contentName), new AsyncPutClosure());

			document.getElementById('result').innerHTML = 'Content name \'' + contentName
					+'\' published.';
		}

		</script>

</head>
<body >
	<form>
	<div>
		<p>Please Enter a Content Name:</p>

		<input id="contentname" type="text" name="CONTENTNAME" value="/wentao.shang/regtest001" />

                <p>Please Enter the Content:</p>

		<textarea id="content" cols="40" rows="5" name="CONTENT" >This works!</textarea>

		<br />
		</div>
	</form>
	<div>
		<button id="testBtn" onclick="run()">Publish Content</button>
	</div>

	<p id="result"></p>

</body>
</html>