author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Tue, 29 Aug 2006 17:51:04 +0200 | |
changeset 14 | 6dd7d31c6fc3 |
parent 12 | 917ba023c576 |
child 16 | 99e833adbb46 |
permissions | -rw-r--r-- |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ |
14
6dd7d31c6fc3
replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
12
diff
changeset
|
2 |
#include "ns3/packet.h" |
6dd7d31c6fc3
replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
12
diff
changeset
|
3 |
#include "ns3/chunk.h" |
12
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
#include <iostream> |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
using namespace yans; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
/* A sample Chunk implementation |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
*/ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
class MyChunk : public Chunk { |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
public: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
MyChunk (); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
virtual ~MyChunk (); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
void set_data (uint16_t data); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
uint16_t get_data (void) const; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
private: |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
virtual void print (std::ostream *os) const; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
virtual void add_to (Buffer *buffer) const; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
virtual void peek_from (Buffer const *buffer); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
virtual void remove_from (Buffer *buffer); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
uint16_t m_data; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
}; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
MyChunk::MyChunk () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
{} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
MyChunk::~MyChunk () |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
{} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
MyChunk::print (std::ostream *os) const |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
*os << "MyChunk data=" << m_data << std::endl; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
MyChunk::add_to (Buffer *buffer) const |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
// reserve 2 bytes at head of buffer |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
buffer->add_at_start (2); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
Buffer::Iterator i = buffer->begin (); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
// serialize in head of buffer |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
i.write_hton_u16 (m_data); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
MyChunk::peek_from (Buffer const *buffer) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
Buffer::Iterator i = buffer->begin (); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
// deserialize from head of buffer |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
m_data = i.read_ntoh_u16 (); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
MyChunk::remove_from (Buffer *buffer) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
54 |
// remove deserialized data |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
buffer->remove_at_start (2); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
57 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
MyChunk::set_data (uint16_t data) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
61 |
m_data = data; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
62 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
63 |
uint16_t |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
64 |
MyChunk::get_data (void) const |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
65 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
66 |
return m_data; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
67 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
/* A sample Tag implementation |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
*/ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
struct MyTag { |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
uint16_t m_stream_id; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
73 |
}; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
static void |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
77 |
receive (Packet p) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
MyChunk my; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
p.peek (&my); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
p.remove (&my); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
std::cout << "received data=" << my.get_data () << std::endl; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
struct MyTag my_tag; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
p.peek_tag (&my_tag); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
} |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
|
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
int main (int argc, char *argv[]) |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
{ |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
Packet p; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
MyChunk my; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
my.set_data (2); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
std::cout << "send data=2" << std::endl; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
p.add (&my); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
struct MyTag my_tag; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
my_tag.m_stream_id = 5; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
p.add_tag (&my_tag); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
receive (p); |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
return 0; |
917ba023c576
utils and samples
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
} |