<div dir="ltr">Dear Alex,<div><br></div><div>Thank you very much about your guide.<br></div><div><br></div><div style>Regards,</div><div style>Prasertsak U.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Mon, Jul 29, 2013 at 5:40 AM, Alex Afanasyev <span dir="ltr"><<a href="mailto:alexander.afanasyev@ucla.edu" target="_blank">alexander.afanasyev@ucla.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word">Hi!<div><br></div><div>With Data packet you can really put anything inside as part of the content.  There are many ways to do that, but in NS-3 the preferred method is to use a custom header.  It can be something like this:</div>

<div><br></div><div><pre style="overflow-x:auto;overflow-y:hidden;padding:5px;background-color:rgb(238,255,204);color:rgb(51,51,51);line-height:15.199999809265137px;border-top-width:1px;border-bottom-width:1px;border-style:solid none;border-top-color:rgb(170,204,153);border-bottom-color:rgb(170,204,153)">

<span style="color:rgb(0,112,32);font-weight:bold">class</span> <span style="color:rgb(14,132,181);font-weight:bold">NonceHeader</span> <span style="color:rgb(102,102,102)">:</span> <span style="color:rgb(0,112,32);font-weight:bold">public</span> <span>Header</span>
<span>{</span>
<span style="color:rgb(0,32,112);font-weight:bold">public:</span>
  <span style="color:rgb(0,112,32);font-weight:bold">static</span> <span>TypeId</span> <span>GetTypeId</span> <span>(</span><span style="color:rgb(144,32,0)">void</span><span>)</span>
  <span>{</span>
    <span style="color:rgb(0,112,32);font-weight:bold">static</span> <span>TypeId</span> <span>tid</span> <span style="color:rgb(102,102,102)">=</span> <span>TypeId</span> <span>(</span><span style="color:rgb(64,112,160)">"ns3::NonceHeader"</span><span>)</span>
      <span>.</span><span>SetParent</span><span style="color:rgb(102,102,102)"><</span><span>Header</span><span style="color:rgb(102,102,102)">></span> <span>()</span>
      <span>;</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span>tid</span><span>;</span>
  <span>}</span>

  <span>NonceHeader</span> <span>()</span>
    <span style="color:rgb(102,102,102)">:</span> <span>m_nonce</span> <span>(</span><span style="color:rgb(32,128,80)">0</span><span>)</span>
  <span>{</span>
  <span>}</span>

  <span>NonceHeader</span> <span>(</span><span style="color:rgb(144,32,0)">uint32_t</span> <span>nonce</span><span>)</span>
    <span style="color:rgb(102,102,102)">:</span> <span>m_nonce</span> <span>(</span><span>nonce</span>
  <span>{</span>
  <span>}</span>

  <span style="color:rgb(144,32,0)">uint32_t</span>
  <span>GetNonce</span> <span>()</span> <span style="color:rgb(0,112,32);font-weight:bold">const</span>
  <span>{</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span>m_length</span><span>;</span>
  <span>}</span>

  <span style="color:rgb(0,112,32);font-weight:bold">virtual</span> <span>TypeId</span>
  <span>GetInstanceTypeId</span> <span>(</span><span style="color:rgb(144,32,0)">void</span><span>)</span> <span style="color:rgb(0,112,32);font-weight:bold">const</span>
  <span>{</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span>NonceHeader</span><span style="color:rgb(102,102,102)">::</span><span>GetTypeId</span> <span>();</span>
  <span>}</span>

  <span style="color:rgb(0,112,32);font-weight:bold">virtual</span> <span style="color:rgb(144,32,0)">void</span>
  <span>Print</span> <span>(</span><span>std</span><span style="color:rgb(102,102,102)">::</span><span>ostream</span> <span style="color:rgb(102,102,102)">&</span><span>os</span><span>)</span> <span style="color:rgb(0,112,32);font-weight:bold">const</span>
  <span>{</span>
    <span>os</span> <span style="color:rgb(102,102,102)"><<</span> <span>m_nonce</span><span>;</span>
  <span>}</span>

  <span style="color:rgb(0,112,32);font-weight:bold">virtual</span> <span style="color:rgb(144,32,0)">uint32_t</span>
  <span>GetSerializedSize</span> <span>(</span><span style="color:rgb(144,32,0)">void</span><span>)</span> <span style="color:rgb(0,112,32);font-weight:bold">const</span>
  <span>{</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span style="color:rgb(32,128,80)">4</span><span>;</span>
  <span>}</span>

  <span style="color:rgb(0,112,32);font-weight:bold">virtual</span> <span style="color:rgb(144,32,0)">void</span>
  <span>Serialize</span> <span>(</span><span>Buffer</span><span style="color:rgb(102,102,102)">::</span><span>Iterator</span> <span>start</span><span>)</span> <span style="color:rgb(0,112,32);font-weight:bold">const</span>
  <span>{</span>
    <span>start</span><span>.</span><span>WriteU32</span> <span>(</span><span>m_nonce</span><span>);</span>
  <span>}</span>

  <span style="color:rgb(0,112,32);font-weight:bold">virtual</span> <span style="color:rgb(144,32,0)">uint32_t</span>
  <span>Deserialize</span> <span>(</span><span>Buffer</span><span style="color:rgb(102,102,102)">::</span><span>Iterator</span> <span>start</span><span>)</span>
  <span>{</span>
    <span>m_nonce</span> <span style="color:rgb(102,102,102)">=</span> <span>start</span><span>.</span><span>ReadU32</span> <span>();</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span style="color:rgb(32,128,80)">4</span><span>;</span>
  <span>}</span>

<span style="color:rgb(0,32,112);font-weight:bold">private:</span>
  <span style="color:rgb(144,32,0)">uint32_t</span> <span>m_nonce</span><span>;</span>
<span>};</span>

<span>...</span>

<span style="color:rgb(64,128,144);font-style:italic">// in producer</span>
<span style="color:rgb(144,32,0)">void</span>
<span>OnInterest</span> <span>(</span><span>Ptr</span><span style="color:rgb(102,102,102)"><</span><span style="color:rgb(0,112,32);font-weight:bold">const</span> <span>Interest</span><span style="color:rgb(102,102,102)">></span> <span>interest</span><span>)</span>
<span>{</span>
  <span>Ptr</span><span style="color:rgb(102,102,102)"><</span><span>Packet</span><span style="color:rgb(102,102,102)">></span> <span>content</span> <span style="color:rgb(102,102,102)">=</span> <span>Create</span><span style="color:rgb(102,102,102)"><</span><span>Packet</span><span style="color:rgb(102,102,102)">></span> <span>(</span><span>m_virtualPayloadSize</span><span>);</span>
  <span style="color:rgb(64,128,144);font-style:italic">// or just Ptr<Packet> content = Create<Packet> ();  if you don't need data packet to carry virtual payload</span>
  <span>NonceHeader</span> <span style="color:rgb(6,40,126)">hdr</span> <span>(</span><span>intereset</span><span style="color:rgb(102,102,102)">-></span><span>GetNonce</span> <span>());</span>
  <span>content</span><span style="color:rgb(102,102,102)">-></span><span>AddHeader</span> <span>(</span><span>hdr</span><span>);</span>

  <span>Ptr</span><span style="color:rgb(102,102,102)"><</span><span>ContentObject</span><span style="color:rgb(102,102,102)">></span> <span>data</span> <span style="color:rgb(102,102,102)">=</span> <span>Create</span><span style="color:rgb(102,102,102)"><</span><span>ContentObject</span><span style="color:rgb(102,102,102)">></span> <span>(</span><span>content</span><span>);</span>

  <span style="color:rgb(64,128,144);font-style:italic">// the rest is standard from apps/ndn-producer.cc</span>
<span>}</span>

<span style="color:rgb(64,128,144);font-style:italic">// in consumer</span>
<span style="color:rgb(144,32,0)">void</span>
<span>OnContentObject</span> <span>(</span><span>Ptr</span><span style="color:rgb(102,102,102)"><</span><span style="color:rgb(0,112,32);font-weight:bold">const</span> <span>ContentObject</span><span style="color:rgb(102,102,102)">></span> <span>data</span><span>)</span>
<span>{</span>
  <span>NonceHeader</span> <span>hdr</span><span>;</span>
  <span>data</span><span style="color:rgb(102,102,102)">-></span><span>GetPayload</span> <span>()</span><span style="color:rgb(102,102,102)">-></span><span>PeekHeader</span> <span>(</span><span>hdr</span><span>);</span>

  <span style="color:rgb(144,32,0)">uint32_t</span> <span>echoedNonce</span> <span style="color:rgb(102,102,102)">=</span> <span>hdr</span><span style="color:rgb(102,102,102)">-></span><span>GetNonce</span> <span>();</span>
  <span style="color:rgb(64,128,144);font-style:italic">// use it somehow</span>
<span>}</span></pre><div>---</div></div><div>Alex</div><div><br></div><div>PS</div><div>My example uses API from version 0.5 of ndnSIM, which is a little bit different from the "old" one.</div><div><br><div><div>

<div class="h5"><div>On Jul 28, 2013, at 7:01 AM, Prasertsak U. <<a href="mailto:gniliamg@gmail.com" target="_blank">gniliamg@gmail.com</a>> wrote:</div><br></div></div><blockquote type="cite"><div><div class="h5">
<div dir="ltr">
<div>For now, I solve my problem already, which workaround by signature field of ContentObject.</div><div><br></div><div>//  @Provider App.</div><div>void OnInterest(...)</div><div>{</div><div>     ndn::ContentObjectHeader data;</div>



<div>     ...</div><div>     data.SetSignature(interest->GetNonce());</div><div>     ...</div><div>}</div><div><br></div><div>// @Consumer App.</div><div>void OnContentObject (...)</div><div>{</div><div>     ...</div>


<div>
     uint32_t reply_nonce = contentObject->GetSignature();</div><div>     ...</div><div>}</div><div><br></div><div>Regards,</div><div>Prasertsak U.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">



On Sun, Jul 28, 2013 at 6:52 PM, Prasertsak U. <span dir="ltr"><<a href="mailto:gniliamg@gmail.com" target="_blank">gniliamg@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div dir="ltr">Dear All,<div><br></div><div>I'm trying to use nonce value from the reply step to map something in the buffer. </div><div>Unfortunately, I'm not found the way to get nonce value from the reply object in the method "<span style="font-family:Menlo;font-size:11px"><i><u>OnContentObject</u>".</i> </span>Anybody knows the way or some hints for mapping between request packet and the reply packet.  (I mean any headers or fields like a nonce of Interest packet)</div>




<div><br></div><div><b>Overview Diagram for mapping:</b></div><div>(1) Create Interest Packet -----> (2) Keep sender nonce value -----> (3) waiting for reply </div><div>(4) Receive Reply content -----> (*5)<u> Get nonce value from reply objects</u> ------> </div>




<div>(6) mapping with the buffer in step-2 ----> etc.</div><div> <br></div><div><br></div><div>Thank you.</div><div><br></div><div>Regards,</div><div>Prasertsak U.<br></div><div>
<br></div><div>Computing Department, Silpakorn University, Thailand.</div><div><br></div></div>
</blockquote></div><br></div></div></div>
_______________________________________________<br>ndnSIM mailing list<br><a href="mailto:ndnSIM@lists.cs.ucla.edu" target="_blank">ndnSIM@lists.cs.ucla.edu</a><br><a href="http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim" target="_blank">http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim</a><br>

</blockquote></div><br></div></div></blockquote></div><br></div>