Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ITS - Intelligent Transport Systems
ITS
Commits
29ec759f
Commit
29ec759f
authored
Jun 07, 2017
by
garciay
Browse files
GeoNetworking codecs ongoing
Add GeoNetworkingLayer
parent
37b2bc92
Changes
8
Hide whitespace changes
Inline
Side-by-side
ccsrc/Framework/Layer.hh
View file @
29ec759f
...
...
@@ -12,17 +12,17 @@ class Layer {
std
::
vector
<
Layer
*>
lowerLayers
;
public:
Layer
(){}
virtual
~
Layer
();
void
deleteLayer
();
virtual
~
Layer
()
{}
;
void
deleteLayer
()
{}
;
public:
void
addUpperLayer
(
Layer
*
);
void
removeUpperLayer
(
Layer
*
);
void
addUpperLayer
(
Layer
*
)
{}
;
void
removeUpperLayer
(
Layer
*
)
{}
;
virtual
void
sendData
(
const
OCTETSTRING
&
data
,
const
Params
&
params
);
virtual
void
receiveData
(
const
OCTETSTRING
&
data
,
const
Params
&
info
);
virtual
void
sendData
(
const
OCTETSTRING
&
data
,
const
Params
&
params
)
{}
;
virtual
void
receiveData
(
const
OCTETSTRING
&
data
,
const
Params
&
info
)
{}
;
protected:
void
toAllLayers
(
std
::
vector
<
Layer
*>&
layers
,
const
OCTETSTRING
&
data
,
const
Params
&
info
);
void
toAllLayers
(
std
::
vector
<
Layer
*>&
layers
,
const
OCTETSTRING
&
data
,
const
Params
&
info
)
{}
;
inline
void
toAllUpperLayers
(
const
OCTETSTRING
&
data
,
const
Params
&
info
)
{
toAllLayers
(
upperLayers
,
data
,
info
);
}
inline
void
toAllLowerLayers
(
const
OCTETSTRING
&
data
,
const
Params
&
info
)
{
toAllLayers
(
upperLayers
,
data
,
info
);
}
inline
void
receiveToAllLayers
(
const
OCTETSTRING
&
data
,
const
Params
&
info
)
{
toAllLayers
(
upperLayers
,
data
,
info
);
}
...
...
ccsrc/Framework/params.hh
0 → 100644
View file @
29ec759f
#pragma once
#include
<map>
typedef
std
::
map
<
std
::
string
,
std
::
string
>
params
;
ccsrc/Framework/src/LayerFactory.cc
View file @
29ec759f
...
...
@@ -2,6 +2,8 @@
#include
<stdexcept>
#include
<regex>
#include
"loggers.hh"
LayerStackBuilder
*
LayerStackBuilder
::
_instance
=
NULL
;
// static functions
...
...
@@ -26,8 +28,9 @@ void LayerStackBuilder::registerLayerFactory(const std::string & type, LayerFact
Layer
*
LayerStackBuilder
::
createLayerStack
(
const
char
*
s
)
{
Layer
*
up
=
NULL
;
loggers
::
loggers
::
log
(
">>> LayerStackBuilder::createLayerStack: %s"
,
s
)
;
Layer
*
up
=
NULL
;
//parse str
std
::
regex
rgx
(
"(
\\
w+)(
\\
((.*?)
\\
))?(
\\
/|$)"
);
std
::
smatch
m
;
...
...
@@ -35,11 +38,13 @@ Layer* LayerStackBuilder::createLayerStack(const char* s)
try
{
while
(
std
::
regex_search
(
str
,
m
,
rgx
))
{
std
::
string
mname
=
m
[
1
];
loggers
::
loggers
::
log
(
"LayerStackBuilder::createLayerStack: mname=%s"
,
mname
);
LayerFactoryMap
::
iterator
it
=
_fs
.
find
(
mname
);
if
(
it
==
_fs
.
end
()){
throw
(
std
::
logic_error
(
mname
+
": Unknown layer type"
));
}
// TODO: parse parameters
loggers
::
loggers
::
log
(
"LayerStackBuilder::createLayerStack: Create layer %s"
,
it
->
first
);
Layer
*
l
=
it
->
second
->
createLayer
(
mname
,
m
[
3
]);
if
(
NULL
==
l
){
throw
(
std
::
logic_error
(
mname
+
": Layer creation error"
));
...
...
@@ -57,8 +62,3 @@ Layer* LayerStackBuilder::createLayerStack(const char* s)
}
return
up
;
}
void
Layer
::
deleteLayer
()
{
}
ccsrc/Ports/LibIts_ports/GN_ports/GeoNetworkingPort.cc
View file @
29ec759f
...
...
@@ -8,11 +8,12 @@
// add your member functions here.
#include
"GeoNetworkingPort.hh"
#include
"loggers.hh"
namespace
LibItsGeoNetworking__TestSystem
{
GeoNetworkingPort
::
GeoNetworkingPort
(
const
char
*
par_port_name
)
:
GeoNetworkingPort_BASE
(
par_port_name
)
:
GeoNetworkingPort_BASE
(
par_port_name
)
,
_params
(),
_layer
(
NULL
)
{
}
...
...
@@ -22,10 +23,10 @@ GeoNetworkingPort::~GeoNetworkingPort()
}
void
GeoNetworkingPort
::
set_parameter
(
const
char
*
/*parameter_name*/
,
const
char
*
/*parameter_value*/
)
void
GeoNetworkingPort
::
set_parameter
(
const
char
*
parameter_name
,
const
char
*
parameter_value
)
{
loggers
::
loggers
::
log
(
"GeoNetworkingPort::set_parameter: %s=%s"
,
parameter_name
,
parameter_value
);
_params
.
insert
(
std
::
pair
<
std
::
string
,
std
::
string
>
(
std
::
string
(
parameter_name
),
std
::
string
(
parameter_value
)));
}
/*void GeoNetworkingPort::Handle_Fd_Event(int fd, boolean is_readable,
...
...
@@ -48,8 +49,12 @@ void GeoNetworkingPort::Handle_Fd_Event_Readable(int /*fd*/)
/*void GeoNetworkingPort::Handle_Timeout(double time_since_last_call) {}*/
void
GeoNetworkingPort
::
user_map
(
const
char
*
/*
system_port
*/
)
void
GeoNetworkingPort
::
user_map
(
const
char
*
system_port
)
{
loggers
::
loggers
::
log
(
"GeoNetworkingPort::user_map: %s"
,
system_port
);
//if (strcmp(parameter_name, "geoNetworkingPort") == 0);
// _layer = LayerStackBuilder::GetInstance()->createLayerStack("ETH(src_addr=00:00:00:00:00:00,FF:FF:FF:FF:Fsrc_addr=00:00:00:00:00:00,FF:FF:FF:FF:F)");
//}
}
...
...
ccsrc/Ports/LibIts_ports/GN_ports/GeoNetworkingPort.hh
View file @
29ec759f
...
...
@@ -13,10 +13,13 @@
#include
"LibItsGeoNetworking_TestSystem.hh"
#include
"GeoNetworkingLayer.hh"
#include
"params.hh"
namespace
LibItsGeoNetworking__TestSystem
{
class
GeoNetworkingPort
:
public
GeoNetworkingPort_BASE
{
params
_params
;
Layer
*
_layer
;
public:
GeoNetworkingPort
(
const
char
*
par_port_name
=
NULL
);
~
GeoNetworkingPort
();
...
...
ccsrc/Protocols/GeoNetworking/GeoNetworkingCodec.cc
View file @
29ec759f
#include
<string>
#include
<typeinfo>
#
//include
<TTCN3.hh>
//include <TTCN3.hh>
#include
"GeoNetworkingCodec.hh"
#include
"loggers.hh"
...
...
@@ -46,8 +46,6 @@ int GeoNetworkingCodec::decode_ (Base_Type& type, const TTCN_Typedescriptor_t& f
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_: processing Record_Type %s"
,
r
.
get_descriptor
()
->
name
);
for
(
int
i
=
0
;
i
<
r
.
get_count
();
i
++
)
{
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_: processing %s/%s/%s"
,
r
.
fld_name
(
i
),
r
.
fld_descr
(
i
)
->
name
,
r
.
get_at
(
i
)
->
get_descriptor
()
->
name
);
// Base_Type *b = ((Base_Type *)(r.get_at(i)));
// ((Base_Type *)(r.get_at(i)))->decode_((const TTCN_Typedescriptor_t&)*r.fld_descr(i), decoding_buffer, TTCN_EncDec::CT_RAW);
if
(
decode_
(
*
((
Base_Type
*
)(
r
.
get_at
(
i
))),
*
(
r
.
fld_descr
(
i
)),
decoding_buffer
)
==
-
1
)
{
return
-
1
;
}
...
...
@@ -60,7 +58,7 @@ int GeoNetworkingCodec::decode_ (Base_Type& type, const TTCN_Typedescriptor_t& f
}
type
.
set_value
(
extendedHeader
.
clone
());
}
else
{
type
.
set_to_omit
();
type
.
set_to_omit
();
}
}
else
if
(
std
::
string
(
type
.
get_descriptor
()
->
name
).
compare
(
"@LibItsGeoNetworking_TypesAndValues.Payload"
)
==
0
)
{
if
(
_dc
.
plLength
!=
0
)
{
...
...
@@ -82,18 +80,28 @@ int GeoNetworkingCodec::decode_ (Base_Type& type, const TTCN_Typedescriptor_t& f
}
else
{
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_ (else): processing type %s/%s"
,
type
.
get_descriptor
()
->
name
,
field_descriptor
.
name
);
if
(
std
::
string
(
field_descriptor
.
name
).
compare
(
"@LibItsGeoNetworking_TypesAndValues.CommonHeader.nextHeader"
)
==
0
)
{
// Decode NextHeader data strcuture
type
.
decode
(
field_descriptor
,
decoding_buffer
,
TTCN_EncDec
::
CT_RAW
);
// Store NextHeader field value and continue decoding
_dc
.
next_header
=
(
unsigned
int
)
dynamic_cast
<
const
Enum_Type
&>
(
type
).
as_int
();
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_: Storing next_header %d for %s"
,
_dc
.
next_header
,
field_descriptor
.
name
);
//
loggers::loggers::log("GeoNetworkingCodec::decode_: Storing next_header %d for %s", _dc.next_header, field_descriptor.name);
}
else
if
(
std
::
string
(
field_descriptor
.
name
).
compare
(
"@LibItsGeoNetworking_TypesAndValues.CommonHeader.plLength"
)
==
0
)
{
//
Store playload length and continue decoding
//
Decode plLength data strcuture
type
.
decode
(
field_descriptor
,
decoding_buffer
,
TTCN_EncDec
::
CT_RAW
);
_dc
.
plLength
=
dynamic_cast
<
const
OCTETSTRING
&>
(
type
).
lengthof
();
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_: Storing position payload length: %d"
,
_dc
.
plLength
);
}
else
if
(
std
::
string
(
field_descriptor
.
name
).
compare
(
"@LibItsGeoNetworking_TypesAndValues.Payload.rawPayload"
)
==
0
)
{
// Store playload length and continue decoding
_dc
.
plLength
=
dynamic_cast
<
const
OCTETSTRING
&>
(
type
).
lengthof
();
loggers
::
loggers
::
log
(
"GeoNetworkingCodec::decode_: Storing payload length %d for %s"
,
_dc
.
plLength
,
field_descriptor
.
name
);
_dc
.
plLength
=
(
unsigned
int
)
static_cast
<
int
>
(
dynamic_cast
<
const
INTEGER
&>
(
type
));
// loggers::loggers::log("GeoNetworkingCodec::decode_: Storing position payload length: %d", _dc.plLength);
}
else
if
(
std
::
string
(
field_descriptor
.
name
).
compare
(
"@LibItsGeoNetworking_TypesAndValues.Payload.rawPayload"
)
==
0
)
{
// Decode RawPayload data strcuture
type
.
decode
(
field_descriptor
,
decoding_buffer
,
TTCN_EncDec
::
CT_RAW
);
// Store it
const
OCTETSTRING
&
s
=
dynamic_cast
<
const
OCTETSTRING
&>
(
type
);
const
unsigned
char
*
p
=
static_cast
<
const
unsigned
char
*>
(
s
);
if
(
s
.
lengthof
()
<=
_dc
.
plLength
)
{
_dc
.
payload
.
assign
(
p
,
p
+
s
.
lengthof
());
}
else
{
_dc
.
payload
.
assign
(
p
,
p
+
_dc
.
plLength
);
}
}
else
{
type
.
decode
(
field_descriptor
,
decoding_buffer
,
TTCN_EncDec
::
CT_RAW
);
}
...
...
ccsrc/Protocols/GeoNetworking/GeoNetworkingCodec.hh
View file @
29ec759f
#ifndef GNCODEC_H
#define GNCODEC_H
#include
<vector>
#include
"Codec.hh"
class
Base_Type
;
...
...
@@ -16,17 +19,18 @@ namespace LibItsGeoNetworking__TypesAndValues {
struct
Encoding_Context
{
unsigned
char
next_header
;
// FIXME Useless?
unsigned
int
plLength_position
;
unsigned
int
plLength
;
unsigned
int
plLength_position
;
unsigned
int
plLength
;
Encoding_Context
()
{
next_header
=
0xff
;
plLength_position
=
-
1
;
plLength
=
-
1
;
}
};
struct
Decoding_Context
{
unsigned
char
next_header
;
// FIXME Useless?
unsigned
int
plLength
;
unsigned
char
next_header
;
// FIXME Useless?
unsigned
int
plLength
;
std
::
vector
<
unsigned
char
>
payload
;
Decoding_Context
()
{
next_header
=
0xff
;
plLength
=
-
1
;
}
Decoding_Context
()
:
payload
()
{
next_header
=
0xff
;
plLength
=
-
1
;
}
};
class
GeoNetworkingCodec
:
public
Codec
<
LibItsGeoNetworking__TypesAndValues
::
GeoNetworkingPdu
,
LibItsGeoNetworking__TypesAndValues
::
GeoNetworkingPdu
>
{
...
...
ccsrc/loggers/loggers.hh
View file @
29ec759f
#pragma once
using
namespace
std
;
//class OCTETSTRING;
//class TTCN_Buffer;
//class TTCN_Logger;
//extern void TTCN_error(const char *err_msg, ...);
#include
<TTCN3.hh>
namespace
loggers
{
...
...
@@ -15,11 +20,11 @@ namespace loggers {
void
loggers
::
log_to_hexa
(
const
char
*
prompt
,
const
TTCN_Buffer
&
buffer
)
{
TTCN_Logger
::
begin_event
(
TTCN_
DEBUG
);
TTCN_Logger
::
begin_event
(
TTCN_
Logger
::
DEBUG_UNQUALIFIED
);
TTCN_Logger
::
log_event_str
(
prompt
);
buffer
.
log
();
TTCN_Logger
::
end_event
();
// TTCN_Logger::begin_event(TTCN_
DEBUG
);
// TTCN_Logger::begin_event(TTCN_
Logger::DEBUG_UNQUALIFIED
);
// int len = buffer->get_read_len();
// const unsigned char* ptr = buffer->get_read_data();
// for(int i = buffer->get_pos(); i < len; i++)
...
...
@@ -31,7 +36,7 @@ namespace loggers {
void
loggers
::
log_to_hexa
(
const
char
*
prompt
,
const
OCTETSTRING
&
msg
)
{
TTCN_Logger
::
begin_event
(
TTCN_
DEBUG
);
TTCN_Logger
::
begin_event
(
TTCN_
Logger
::
DEBUG_UNQUALIFIED
);
TTCN_Logger
::
log_event_str
(
prompt
);
TTCN_Logger
::
log_event
(
"Size: %d,
\n
Msg: "
,
msg
.
lengthof
());
...
...
@@ -43,7 +48,7 @@ namespace loggers {
void
loggers
::
log_msg
(
const
char
*
prompt
,
const
Base_Type
&
type
)
{
TTCN_Logger
::
begin_event
(
TTCN_
DEBUG
);
TTCN_Logger
::
begin_event
(
TTCN_
Logger
::
DEBUG_UNQUALIFIED
);
TTCN_Logger
::
log_event_str
(
prompt
);
type
.
log
();
TTCN_Logger
::
end_event
();
...
...
@@ -51,7 +56,7 @@ namespace loggers {
void
loggers
::
log
(
const
char
*
fmt
,
...)
{
TTCN_Logger
::
begin_event
(
TTCN_
DEBUG
);
TTCN_Logger
::
begin_event
(
TTCN_
Logger
::
DEBUG_UNQUALIFIED
);
va_list
args
;
va_start
(
args
,
fmt
);
TTCN_Logger
::
log_event_va_list
(
fmt
,
args
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment