add Ip6toipv4Handler
This commit is contained in:
4
dev-utils/.clang_complete
Normal file
4
dev-utils/.clang_complete
Normal file
@@ -0,0 +1,4 @@
|
||||
src
|
||||
lib/libtins/include
|
||||
test/src
|
||||
test/lib/FakeIt
|
||||
@@ -99,7 +99,7 @@ indent_paren_open_brace = false # false/true
|
||||
indent_cs_delegate_brace = false # false/true
|
||||
|
||||
# Whether the 'namespace' body is indented
|
||||
indent_namespace = false # false/true
|
||||
indent_namespace = true # false/true
|
||||
|
||||
# Only indent one namespace and no sub-namespaces.
|
||||
# Requires indent_namespace=true.
|
||||
@@ -116,7 +116,7 @@ indent_namespace_limit = 0 # number
|
||||
indent_extern = false # false/true
|
||||
|
||||
# Whether the 'class' body is indented
|
||||
indent_class = false # false/true
|
||||
indent_class = true # false/true
|
||||
|
||||
# Whether to indent the stuff after a leading base class colon
|
||||
indent_class_colon = false # false/true
|
||||
@@ -1194,16 +1194,16 @@ nl_using_brace = ignore # ignore/add/remove/force
|
||||
nl_brace_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between 'do' and '{'
|
||||
nl_do_brace = ignore # ignore/add/remove/force
|
||||
nl_do_brace = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between '}' and 'while' of 'do' statement
|
||||
nl_brace_while = ignore # ignore/add/remove/force
|
||||
nl_brace_while = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between 'switch' and '{'
|
||||
nl_switch_brace = ignore # ignore/add/remove/force
|
||||
nl_switch_brace = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between 'synchronized' and '{'
|
||||
nl_synchronized_brace = ignore # ignore/add/remove/force
|
||||
nl_synchronized_brace = add # ignore/add/remove/force
|
||||
|
||||
# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.
|
||||
# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch and nl_catch_brace.
|
||||
@@ -1225,7 +1225,7 @@ nl_after_case = true # false/true
|
||||
nl_case_colon_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Newline between namespace and {
|
||||
nl_namespace_brace = ignore # ignore/add/remove/force
|
||||
nl_namespace_brace = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between 'template<>' and whatever follows.
|
||||
nl_template_class = add # ignore/add/remove/force
|
||||
@@ -1336,7 +1336,7 @@ nl_func_call_end_multi_line = false # false/true
|
||||
nl_oc_msg_args = false # false/true
|
||||
|
||||
# Add or remove newline between function signature and '{'
|
||||
nl_fdef_brace = ignore # ignore/add/remove/force
|
||||
nl_fdef_brace = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove newline between C++11 lambda signature and '{'
|
||||
nl_cpp_ldef_brace = ignore # ignore/add/remove/force
|
||||
@@ -1388,40 +1388,40 @@ nl_squeeze_ifdef = false # false/true
|
||||
nl_squeeze_ifdef_top_level = false # false/true
|
||||
|
||||
# Add or remove blank line before 'if'
|
||||
nl_before_if = ignore # ignore/add/remove/force
|
||||
nl_before_if = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'if' statement
|
||||
nl_after_if = ignore # ignore/add/remove/force
|
||||
nl_after_if = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line before 'for'
|
||||
nl_before_for = ignore # ignore/add/remove/force
|
||||
nl_before_for = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'for' statement
|
||||
nl_after_for = ignore # ignore/add/remove/force
|
||||
nl_after_for = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line before 'while'
|
||||
nl_before_while = ignore # ignore/add/remove/force
|
||||
nl_before_while = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'while' statement
|
||||
nl_after_while = ignore # ignore/add/remove/force
|
||||
nl_after_while = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line before 'switch'
|
||||
nl_before_switch = ignore # ignore/add/remove/force
|
||||
nl_before_switch = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'switch' statement
|
||||
nl_after_switch = ignore # ignore/add/remove/force
|
||||
nl_after_switch = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line before 'synchronized'
|
||||
nl_before_synchronized = ignore # ignore/add/remove/force
|
||||
nl_before_synchronized = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'synchronized' statement
|
||||
nl_after_synchronized = ignore # ignore/add/remove/force
|
||||
nl_after_synchronized = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line before 'do'
|
||||
nl_before_do = ignore # ignore/add/remove/force
|
||||
nl_before_do = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove blank line after 'do/while' statement
|
||||
nl_after_do = ignore # ignore/add/remove/force
|
||||
nl_after_do = add # ignore/add/remove/force
|
||||
|
||||
# Whether to double-space commented-entries in struct/union/enum
|
||||
nl_ds_struct_enum_cmt = false # false/true
|
||||
@@ -1538,22 +1538,22 @@ nl_max = 0 # number
|
||||
nl_after_func_proto = 0 # number
|
||||
|
||||
# The number of newlines after a function prototype, if not followed by another function prototype
|
||||
nl_after_func_proto_group = 0 # number
|
||||
nl_after_func_proto_group = 1 # number
|
||||
|
||||
# The number of newlines after a function class prototype, if followed by another function class prototype
|
||||
nl_after_func_class_proto = 0 # number
|
||||
|
||||
# The number of newlines after a function class prototype, if not followed by another function class prototype
|
||||
nl_after_func_class_proto_group = 0 # number
|
||||
nl_after_func_class_proto_group = 1 # number
|
||||
|
||||
# The number of newlines before a multi-line function def body
|
||||
nl_before_func_body_def = 0 # number
|
||||
nl_before_func_body_def = 1 # number
|
||||
|
||||
# The number of newlines before a multi-line function prototype body
|
||||
nl_before_func_body_proto = 0 # number
|
||||
|
||||
# The number of newlines after '}' of a multi-line function body
|
||||
nl_after_func_body = 0 # number
|
||||
nl_after_func_body = 1 # number
|
||||
|
||||
# The number of newlines after '}' of a multi-line function body in a class declaration
|
||||
nl_after_func_body_class = 0 # number
|
||||
@@ -1563,15 +1563,15 @@ nl_after_func_body_one_liner = 0 # number
|
||||
|
||||
# The minimum number of newlines before a multi-line comment.
|
||||
# Doesn't apply if after a brace open or another multi-line comment.
|
||||
nl_before_block_comment = 0 # number
|
||||
nl_before_block_comment = 1 # number
|
||||
|
||||
# The minimum number of newlines before a single-line C comment.
|
||||
# Doesn't apply if after a brace open or other single-line C comments.
|
||||
nl_before_c_comment = 0 # number
|
||||
nl_before_c_comment = 1 # number
|
||||
|
||||
# The minimum number of newlines before a CPP comment.
|
||||
# Doesn't apply if after a brace open or other CPP comments.
|
||||
nl_before_cpp_comment = 0 # number
|
||||
nl_before_cpp_comment = 1 # number
|
||||
|
||||
# Whether to force a newline after a multi-line comment.
|
||||
nl_after_multiline_comment = false # false/true
|
||||
@@ -1580,18 +1580,18 @@ nl_after_multiline_comment = false # false/true
|
||||
nl_after_label_colon = false # false/true
|
||||
|
||||
# The number of newlines after '}' or ';' of a struct/enum/union definition
|
||||
nl_after_struct = 0 # number
|
||||
nl_after_struct = 1 # number
|
||||
|
||||
# The number of newlines before a class definition
|
||||
nl_before_class = 0 # number
|
||||
nl_before_class = 1 # number
|
||||
|
||||
# The number of newlines after '}' or ';' of a class definition
|
||||
nl_after_class = 0 # number
|
||||
nl_after_class = 1 # number
|
||||
|
||||
# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
|
||||
# Will not change the newline count if after a brace open.
|
||||
# 0 = No change.
|
||||
nl_before_access_spec = 0 # number
|
||||
nl_before_access_spec = 1 # number
|
||||
|
||||
# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:' or 'slots:' label.
|
||||
# 0 = No change.
|
||||
@@ -1618,10 +1618,10 @@ nl_between_get_set = 0 # number
|
||||
nl_property_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Whether to remove blank lines after '{'
|
||||
eat_blanks_after_open_brace = false # false/true
|
||||
eat_blanks_after_open_brace = true # false/true
|
||||
|
||||
# Whether to remove blank lines before '}'
|
||||
eat_blanks_before_close_brace = false # false/true
|
||||
eat_blanks_before_close_brace = true # false/true
|
||||
|
||||
# How aggressively to remove extra newlines not in preproc.
|
||||
# 0: No change
|
||||
@@ -1647,16 +1647,16 @@ nl_between_annotation = ignore # ignore/add/remove/force
|
||||
#
|
||||
|
||||
# Add or remove braces on single-line 'do' statement
|
||||
mod_full_brace_do = ignore # ignore/add/remove/force
|
||||
mod_full_brace_do = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'for' statement
|
||||
mod_full_brace_for = ignore # ignore/add/remove/force
|
||||
mod_full_brace_for = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line function definitions. (Pawn)
|
||||
mod_full_brace_function = ignore # ignore/add/remove/force
|
||||
mod_full_brace_function = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
|
||||
mod_full_brace_if = ignore # ignore/add/remove/force
|
||||
mod_full_brace_if = add # ignore/add/remove/force
|
||||
|
||||
# Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.
|
||||
# If any must be braced, they are all braced. If all can be unbraced, then the braces are removed.
|
||||
@@ -1671,10 +1671,10 @@ mod_full_brace_if_chain_only = false # false/true
|
||||
mod_full_brace_nl = 0 # number
|
||||
|
||||
# Add or remove braces on single-line 'while' statement
|
||||
mod_full_brace_while = ignore # ignore/add/remove/force
|
||||
mod_full_brace_while = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'using ()' statement
|
||||
mod_full_brace_using = ignore # ignore/add/remove/force
|
||||
mod_full_brace_using = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove unnecessary paren on 'return' statement
|
||||
mod_paren_on_return = ignore # ignore/add/remove/force
|
||||
@@ -1686,7 +1686,7 @@ mod_pawn_semicolon = false # false/true
|
||||
mod_full_paren_if_bool = false # false/true
|
||||
|
||||
# Whether to remove superfluous semicolons
|
||||
mod_remove_extra_semicolon = false # false/true
|
||||
mod_remove_extra_semicolon = true # false/true
|
||||
|
||||
# If a function body exceeds the specified number of newlines and doesn't have a comment after
|
||||
# the close brace, a comment will be added.
|
||||
@@ -1730,7 +1730,7 @@ mod_move_case_break = false # false/true
|
||||
mod_case_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
|
||||
mod_remove_empty_return = false # false/true
|
||||
mod_remove_empty_return = true # false/true
|
||||
|
||||
# If TRUE, it will organize the properties (Obj-C)
|
||||
mod_sort_oc_properties = false # false/true
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
#include "AbstractNetworkInterfaceCard.h"
|
||||
#include "AbstractPacketHandler.h"
|
||||
|
||||
AbstractNetworkInterfaceCard::AbstractNetworkInterfaceCard()
|
||||
{
|
||||
//ctor
|
||||
//ctor
|
||||
}
|
||||
|
||||
AbstractNetworkInterfaceCard::~AbstractNetworkInterfaceCard()
|
||||
{
|
||||
//dtor
|
||||
//dtor
|
||||
}
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
#ifndef ABSTRACTNETWORKINTERFACECARD_H
|
||||
#define ABSTRACTNETWORKINTERFACECARD_H
|
||||
|
||||
#include "AbstractPacketHandler_t.h"
|
||||
#include "AbstractRouter_t.h"
|
||||
#include "INetworkInterfaceCard.h"
|
||||
#include "IPacketHandler_t.h"
|
||||
#include "IRouter_t.h"
|
||||
|
||||
class AbstractNetworkInterfaceCard
|
||||
class AbstractNetworkInterfaceCard : public INetworkInterfaceCard
|
||||
{
|
||||
public:
|
||||
void sendPacket(/*const Tins::Pdu & pdu*/);
|
||||
void startListen();
|
||||
void stopListen();
|
||||
protected:
|
||||
AbstractNetworkInterfaceCard();
|
||||
virtual ~AbstractNetworkInterfaceCard();
|
||||
private:
|
||||
SPtrAbstractPacketHandlerList handlerList;
|
||||
SPtrAbstractRouter router;
|
||||
public:
|
||||
protected:
|
||||
AbstractNetworkInterfaceCard();
|
||||
virtual ~AbstractNetworkInterfaceCard();
|
||||
private:
|
||||
SPtrIPacketHandlerList handlerList;
|
||||
SPtrIRouter router;
|
||||
};
|
||||
|
||||
#endif // ABSTRACTNETWORKINTERFACECARD_H
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
#ifndef ABSTRACTPACKETHANDLER_H
|
||||
#define ABSTRACTPACKETHANDLER_H
|
||||
|
||||
#include "IPacketHandler.h"
|
||||
|
||||
class AbstractPacketHandler
|
||||
class AbstractPacketHandler : public IPacketHandler
|
||||
{
|
||||
public:
|
||||
|
||||
protected:
|
||||
AbstractPacketHandler();
|
||||
virtual ~AbstractPacketHandler();
|
||||
|
||||
private:
|
||||
public:
|
||||
protected:
|
||||
AbstractPacketHandler();
|
||||
virtual ~AbstractPacketHandler();
|
||||
private:
|
||||
};
|
||||
|
||||
#endif // ABSTRACTPACKETHANDLER_H
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef ABSTRACTPACKETHANDLER_T_H_INCLUDED
|
||||
#define ABSTRACTPACKETHANDLER_T_H_INCLUDED
|
||||
|
||||
#include <list>
|
||||
#include <memory>
|
||||
|
||||
class AbstractPacketHandler;
|
||||
typedef std::shared_ptr<AbstractPacketHandler> SPtrAbstractPacketHandler;
|
||||
typedef std::list<SPtrAbstractPacketHandler> SPtrAbstractPacketHandlerList;
|
||||
|
||||
#endif // ABSTRACTPACKETHANDLER_T_H_INCLUDED
|
||||
@@ -2,10 +2,9 @@
|
||||
|
||||
AbstractRouter::AbstractRouter()
|
||||
{
|
||||
//ctor
|
||||
//ctor
|
||||
}
|
||||
|
||||
AbstractRouter::~AbstractRouter()
|
||||
{
|
||||
//dtor
|
||||
//dtor
|
||||
}
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
#ifndef ABSTRACTROUTER_H
|
||||
#define ABSTRACTROUTER_H
|
||||
|
||||
#include "INetworkInterfaceCard.h"
|
||||
|
||||
class AbstractRouter
|
||||
class AbstractRouter: public INetworkInterfaceCard
|
||||
{
|
||||
public:
|
||||
|
||||
protected:
|
||||
AbstractRouter();
|
||||
virtual ~AbstractRouter();
|
||||
|
||||
private:
|
||||
public:
|
||||
protected:
|
||||
AbstractRouter();
|
||||
virtual ~AbstractRouter();
|
||||
private:
|
||||
};
|
||||
|
||||
#endif // ABSTRACTROUTER_H
|
||||
|
||||
12
src/INetworkInterfaceCard.h
Normal file
12
src/INetworkInterfaceCard.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef INETWORKINTERFACECARD_H
|
||||
#define INETWORKINTERFACECARD_H
|
||||
|
||||
#include "IPacketHandler.h"
|
||||
|
||||
interface INetworkInterfaceCard : IPacketHandler
|
||||
{
|
||||
virtual void sendPacket(IN const Tins::PDU & pdu) = 0;
|
||||
virtual void startListen() = 0;
|
||||
virtual void stopListen() = 0;
|
||||
};
|
||||
#endif
|
||||
15
src/IPacketHandler.h
Normal file
15
src/IPacketHandler.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef IPACKETHANDLER_H
|
||||
#define IPACKETHANDLER_H
|
||||
|
||||
#include "Main_t.h"
|
||||
|
||||
namespace Tins
|
||||
{
|
||||
class PDU;
|
||||
}
|
||||
|
||||
interface IPacketHandler
|
||||
{
|
||||
virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler = nullptr) = 0;
|
||||
};
|
||||
#endif
|
||||
12
src/IPacketHandler_t.h
Normal file
12
src/IPacketHandler_t.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef IPACKETHANDLER_T_H
|
||||
#define IPACKETHANDLER_T_H
|
||||
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include "Main_t.h"
|
||||
|
||||
interface IPacketHandler;
|
||||
typedef std::shared_ptr<IPacketHandler> SPtrIPacketHandler;
|
||||
typedef std::list<SPtrIPacketHandler> SPtrIPacketHandlerList;
|
||||
|
||||
#endif // ABSTRACTPACKETHANDLER_T_H_INCLUDED
|
||||
10
src/IRouter.h
Normal file
10
src/IRouter.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef IROUTER_H
|
||||
#define IROUTER_H
|
||||
|
||||
#include "IPacketHandler.h"
|
||||
|
||||
interface IRouter: IPacketHandler
|
||||
{
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef ABSTRACTROUTER_T_H_INCLUDED
|
||||
#define ABSTRACTROUTER_T_H_INCLUDED
|
||||
|
||||
#include <memory>
|
||||
#include "Main_t.h"
|
||||
|
||||
class AbstractRouter;
|
||||
typedef std::shared_ptr<AbstractRouter> SPtrAbstractRouter;
|
||||
interface IRouter;
|
||||
typedef std::shared_ptr<IRouter> SPtrIRouter;
|
||||
|
||||
#endif // ABSTRACTROUTER_T_H_INCLUDED
|
||||
63
src/Ip6ToIp4PacketHandler.cpp
Normal file
63
src/Ip6ToIp4PacketHandler.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include "Ip6ToIp4PacketHandler.h"
|
||||
#include "tins/ethernetII.h"
|
||||
#include <tins/ip.h>
|
||||
#include <tins/ipv6.h>
|
||||
#include "IpAddressTranslator.h"
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<typename T, typename ... Args>
|
||||
std::unique_ptr<T> make_unique(Args && ... args)
|
||||
{
|
||||
return std::unique_ptr<T>(new T(std::forward<Args>(args) ...));
|
||||
}
|
||||
}
|
||||
|
||||
Ip6ToIp4PacketHandler::Ip6ToIp4PacketHandler()
|
||||
{}
|
||||
Ip6ToIp4PacketHandler::~Ip6ToIp4PacketHandler()
|
||||
{}
|
||||
bool Ip6ToIp4PacketHandler::handle(const Tins::PDU &pdu, IN IPacketHandler * callBackHandler)
|
||||
{
|
||||
if (callBackHandler == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const Tins::IPv6 * ipv6Pdu = pdu.find_pdu<Tins::IPv6>();
|
||||
if(ipv6Pdu == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const Tins::EthernetII * ethPdu = pdu.find_pdu<Tins::EthernetII>();
|
||||
if(ethPdu == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const Tins::PDU * ipPayloadPdu = ipv6Pdu->inner_pdu();
|
||||
if(ipPayloadPdu == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// convert ipv6 addresses to ipv4 addresses
|
||||
const uint32_t srcIp4AddressBytes = IpAddressTranslator::toIpv4AddressBytes(ipv6Pdu->src_addr());
|
||||
const uint32_t dstIp4AddressBytes = IpAddressTranslator::toIpv4AddressBytes(ipv6Pdu->dst_addr());
|
||||
std::unique_ptr<const Tins::IPv4Address> srcIp4Address = std::make_unique<const Tins::IPv4Address>(srcIp4AddressBytes);
|
||||
std::unique_ptr<const Tins::IPv4Address> dstIp4Address = std::make_unique<const Tins::IPv4Address>(dstIp4AddressBytes);
|
||||
|
||||
// create ip4 pdu
|
||||
std::unique_ptr<const Tins::IP> ipv4Pdu = std::make_unique<const Tins::IP>(*srcIp4Address, *dstIp4Address);
|
||||
|
||||
// create forwarding frame
|
||||
std::unique_ptr<Tins::EthernetII> ptrForwardEthPdu = std::make_unique<Tins::EthernetII>();
|
||||
Tins::EthernetII & forwardEthPdu = *ptrForwardEthPdu;
|
||||
forwardEthPdu /= *ethPdu;
|
||||
forwardEthPdu /= *ipv4Pdu;
|
||||
forwardEthPdu /= *ipPayloadPdu;
|
||||
|
||||
// forward frame
|
||||
return callBackHandler->handle(forwardEthPdu, this);
|
||||
}
|
||||
14
src/Ip6ToIp4PacketHandler.h
Normal file
14
src/Ip6ToIp4PacketHandler.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#ifndef IP4TO6PACKETHANDLER_H
|
||||
#define IP4TO6PACKETHANDLER_H
|
||||
|
||||
#include "AbstractPacketHandler.h"
|
||||
|
||||
class Ip6ToIp4PacketHandler : public AbstractPacketHandler
|
||||
{
|
||||
public:
|
||||
Ip6ToIp4PacketHandler();
|
||||
virtual ~Ip6ToIp4PacketHandler();
|
||||
|
||||
virtual bool handle(IN const Tins::PDU & pdu, IN IPacketHandler * callBackHandler = nullptr) override;
|
||||
};
|
||||
#endif
|
||||
30
src/IpAddressTranslator.cpp
Normal file
30
src/IpAddressTranslator.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
#include "IpAddressTranslator.h"
|
||||
#include <tins/ip_address.h>
|
||||
#include <tins/ipv6_address.h>
|
||||
|
||||
const size_t IpAddressTranslator::lastAddressByteIndex = Tins::IPv4Address::address_size - 1;
|
||||
|
||||
uint32_t IpAddressTranslator::toIpv4AddressBytes(IN const Tins::IPv6Address & ipv6Address)
|
||||
{
|
||||
uint32_t ipBytesNetworkOrder = 0;
|
||||
uint8_t * ptrIpByte = reinterpret_cast<uint8_t *>( &ipBytesNetworkOrder );
|
||||
Tins::IPv6Address::const_iterator it = ipv6Address.end();
|
||||
for (int i = lastAddressByteIndex; i > -1; i--)
|
||||
{
|
||||
it--;
|
||||
ptrIpByte[i] = *it;
|
||||
}
|
||||
|
||||
return ipBytesNetworkOrder;
|
||||
}
|
||||
void IpAddressTranslator::toIpv6Address(IN const Tins::IPv4Address & ipv4Address, INOUT Tins::IPv6Address & resultIpv6Address)
|
||||
{
|
||||
Tins::IPv6Address::iterator it = resultIpv6Address.end();
|
||||
uint32_t ipBytesNetworkOrder = ipv4Address;
|
||||
uint8_t * ptrIpByte = reinterpret_cast<uint8_t *>( &ipBytesNetworkOrder );
|
||||
for (int i = lastAddressByteIndex; i > -1; i--)
|
||||
{
|
||||
it--;
|
||||
*it = ptrIpByte[i];
|
||||
}
|
||||
}
|
||||
22
src/IpAddressTranslator.h
Normal file
22
src/IpAddressTranslator.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef IPADDRESSTRANSLATOR_H
|
||||
#define IPADDRESSTRANSLATOR_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <stdint.h>
|
||||
#include "Main_t.h"
|
||||
|
||||
namespace Tins
|
||||
{
|
||||
class IPv4Address;
|
||||
class IPv6Address;
|
||||
}
|
||||
|
||||
class IpAddressTranslator
|
||||
{
|
||||
public:
|
||||
static void toIpv6Address(IN const Tins::IPv4Address & ipv4Address, INOUT Tins::IPv6Address & resultIpv6Address);
|
||||
static uint32_t toIpv4AddressBytes(IN const Tins::IPv6Address & ipv6Address);
|
||||
private:
|
||||
static const size_t lastAddressByteIndex;
|
||||
};
|
||||
#endif
|
||||
12
src/Main.cpp
12
src/Main.cpp
@@ -1,8 +1,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("Hello, World\n");
|
||||
int main(void)
|
||||
{
|
||||
printf("Hello, Worliaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
21
src/Main_t.h
Normal file
21
src/Main_t.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef MAIN_T_H
|
||||
#define MAIN_T_H
|
||||
|
||||
#ifndef IN
|
||||
#define IN
|
||||
#endif
|
||||
|
||||
#ifndef OUT
|
||||
#define OUT
|
||||
#endif
|
||||
|
||||
#ifndef INOUT
|
||||
#define INOUT
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef interface
|
||||
#define interface struct
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user