1 | #include <iostream> |
---|
2 | #include <list> |
---|
3 | #include "DispatcherFactory.h" |
---|
4 | #include "SampleData.h" |
---|
5 | |
---|
6 | int main() { |
---|
7 | |
---|
8 | // Components |
---|
9 | ComponentId componentA = 111111; |
---|
10 | ComponentId componentB = 222222; |
---|
11 | |
---|
12 | std::list<const ComponentId *> components; |
---|
13 | components.push_back(&componentA); |
---|
14 | components.push_back(&componentB); |
---|
15 | |
---|
16 | // Setup Dispatchers (Eth - IP - UDP/TCP automatically set) |
---|
17 | DispatcherFactory::Instance().Get("UDP")->AddExplicitUpperLayer("DNS"/*, Filter("port", 53) */); |
---|
18 | DispatcherFactory::Instance().Get("UDP")->AddExplicitUpperLayer("SIP"); |
---|
19 | DispatcherFactory::Instance().Get("TCP")->AddExplicitUpperLayer("SIP"); |
---|
20 | |
---|
21 | // Component A filters |
---|
22 | // ip.RegisterFilter(&componentA, "addr", "10.0.0.1"); |
---|
23 | // udp.RegisterFilter(&componentA, "port", 5060); |
---|
24 | // tcp.RegisterFilter(&componentA, "port", 5060); |
---|
25 | // udp.RegisterFilter(&componentA, "port", 5080); |
---|
26 | // tcp.RegisterFilter(&componentA, "port", 5080); |
---|
27 | |
---|
28 | // Component B filters |
---|
29 | // ip.RegisterFilter(&componentB, "addr", "10.0.0.2"); |
---|
30 | // udp.RegisterFilter(&componentB, "port", 5060); |
---|
31 | // tdp.RegisterFilter(&componentB, "port", 5060); |
---|
32 | |
---|
33 | |
---|
34 | // Get root dispatcher |
---|
35 | Dispatcher *eth = DispatcherFactory::Instance().Get("Ethernet"); |
---|
36 | |
---|
37 | //////////////////////////////////////////////////////////////// |
---|
38 | // Dispatch DNS Query |
---|
39 | { |
---|
40 | std::cout << std::endl << "Dispatch DNS Query" << std::endl; |
---|
41 | |
---|
42 | DispatchInfo * di = eth->Dispatch(new DispatchInfo(psDnsQuery, 72, components)); |
---|
43 | |
---|
44 | std::cout << "Selected components:" << std::endl; |
---|
45 | std::list<const ComponentId *>::const_iterator it; |
---|
46 | for(it = di->GetComponents().begin(); |
---|
47 | it != di->GetComponents().end(); |
---|
48 | ++it) { |
---|
49 | std::cout << "---> " << *(*it) << std::endl; |
---|
50 | } |
---|
51 | } |
---|
52 | |
---|
53 | //////////////////////////////////////////////////////////////// |
---|
54 | // Dispatch Fragments |
---|
55 | { |
---|
56 | std::cout << std::endl << "Dispatch IP fragments" << std::endl; |
---|
57 | |
---|
58 | eth->Dispatch(new DispatchInfo(psFragmemt_1_1, 1410, components)); |
---|
59 | eth->Dispatch(new DispatchInfo(psFragmemt_1_2, 1410, components)); |
---|
60 | DispatchInfo * di = eth->Dispatch(new DispatchInfo(psFragmemt_1_3, 290, components)); |
---|
61 | |
---|
62 | std::cout << "Selected components:" << std::endl; |
---|
63 | std::list<const ComponentId *>::const_iterator it; |
---|
64 | for(it = di->GetComponents().begin(); |
---|
65 | it != di->GetComponents().end(); |
---|
66 | ++it) { |
---|
67 | std::cout << "---> " << *(*it) << std::endl; |
---|
68 | } |
---|
69 | |
---|
70 | // Check that fragments have been correctly reassembled |
---|
71 | if(memcmp(psPayload_1, di->GetData(), di->GetDataSize())) { |
---|
72 | std::cout << "OK !" << std::endl; |
---|
73 | } |
---|
74 | else { |
---|
75 | std::cout << "ERROR" << std::endl; |
---|
76 | } |
---|
77 | } |
---|
78 | |
---|
79 | //////////////////////////////////////////////////////////////// |
---|
80 | |
---|
81 | return 0; |
---|
82 | } |
---|
83 | |
---|