diff --git a/src/engine/audio/Audio_WavFile.h b/src/engine/audio/Audio_WavFile.h index bde2b77e..eb4f3c95 100644 --- a/src/engine/audio/Audio_WavFile.h +++ b/src/engine/audio/Audio_WavFile.h @@ -7,7 +7,8 @@ #ifndef __AUDIO_WAVFILE_H #define __AUDIO_WAVFILE_H -//#include "helper/HL_Types.h" +#include "helper/HL_Sync.h" +#include "helper/HL_Types.h" #include "Audio_Resampler.h" #include @@ -15,7 +16,6 @@ #include #include -#include "helper/HL_Types.h" namespace Audio { diff --git a/src/engine/endpoint/EP_Observer.h b/src/engine/endpoint/EP_Observer.h index 586bc69e..9698cf19 100644 --- a/src/engine/endpoint/EP_Observer.h +++ b/src/engine/endpoint/EP_Observer.h @@ -38,7 +38,7 @@ protected: std::string mPeer; }; -typedef SharedPtr PClientObserver; +typedef std::shared_ptr PClientObserver; class ServerObserver { @@ -68,6 +68,6 @@ protected: int mSessionId; }; -typedef SharedPtr PServerObserver; +typedef std::shared_ptr PServerObserver; #endif // EP_OBSERVER_H diff --git a/src/engine/endpoint/EP_Session.cpp b/src/engine/endpoint/EP_Session.cpp index d5a921ac..ad3ef54b 100644 --- a/src/engine/endpoint/EP_Session.cpp +++ b/src/engine/endpoint/EP_Session.cpp @@ -167,12 +167,12 @@ int ResipSession::sessionId() return mSessionId; } -void ResipSession::setUASProfile(SharedPtr profile) +void ResipSession::setUASProfile(std::shared_ptr profile) { mUASProfile = profile; } -SharedPtr ResipSession::selectUASUserProfile(const resip::SipMessage& msg) +resip::SharedPtr ResipSession::selectUASUserProfile(const resip::SipMessage& msg) { assert(mUserAgent != nullptr); @@ -184,7 +184,7 @@ SharedPtr ResipSession::selectUASUserProfile(const resip::Si else return mUserAgent->mProfile; } - return SharedPtr(); + return resip::SharedPtr(); } #pragma endregion diff --git a/src/engine/endpoint/EP_Session.h b/src/engine/endpoint/EP_Session.h index d1dbfcdb..e2f4d00a 100644 --- a/src/engine/endpoint/EP_Session.h +++ b/src/engine/endpoint/EP_Session.h @@ -321,7 +321,7 @@ public: static resip::AtomicCounter InstanceCounter; }; -typedef SharedPtr PSession; +typedef std::shared_ptr PSession; ///////////////////////////////////////////////////////////////////////////////// // @@ -383,7 +383,7 @@ public: void runTerminatedEvent(Type type, int code = 0, int reason = 0); - void setUASProfile(SharedPtr profile); + void setUASProfile(std::shared_ptr profile); protected: bool mTerminated; @@ -394,7 +394,7 @@ protected: std::string mRemoteAddress; void* mTag; bool mOnWatchingStartSent; - SharedPtr mUASProfile; + std::shared_ptr mUASProfile; }; diff --git a/src/engine/helper/HL_Calculator.h b/src/engine/helper/HL_Calculator.h index 5bdb146d..57889cb9 100644 --- a/src/engine/helper/HL_Calculator.h +++ b/src/engine/helper/HL_Calculator.h @@ -3,6 +3,7 @@ #include #include +#include #include "helper/HL_VariantMap.h" #include "helper/HL_String.h" diff --git a/src/engine/helper/HL_NetworkFrame.cpp b/src/engine/helper/HL_NetworkFrame.cpp index 3732d9b9..a8d5ac42 100644 --- a/src/engine/helper/HL_NetworkFrame.cpp +++ b/src/engine/helper/HL_NetworkFrame.cpp @@ -1,8 +1,12 @@ +#include + #include "HL_NetworkFrame.h" #include "HL_InternetAddress.h" -#define ETHERTYPE_MPLS_UC (0x8847) -#define ETHERTYPE_MPLS_MC (0x8848) +#define ETHERTYPE_MPLS_UC (0x8847) +#define ETHERTYPE_MPLS_MC (0x8848) +#define ETHERTYPE_IPV6 (0x86dd) +#define ETHERTYPE_IP (0x0800) #define MPLS_STACK_MASK (0x00000100) #define MPLS_STACK_SHIFT (8) @@ -27,22 +31,32 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForEthernet(NetworkFrame::Pa proto = ntohs(vlan->mData); } - // Skip MPLS headers - - if (proto == ETHERTYPE_MPLS_UC || proto == ETHERTYPE_MPLS_MC) - { - // Parse MPLS here until marker "bottom of mpls stack" - for(bool bottomOfStack = false; !bottomOfStack; - bottomOfStack = ((ntohl(*(uint32_t*)(packet.mData - 4)) & MPLS_STACK_MASK) >> MPLS_STACK_SHIFT) != 0) + // Skip MPLS headers + switch (proto) { - packet.mData += 4; - packet.mLength -=4; + case ETHERTYPE_MPLS_UC: + case ETHERTYPE_MPLS_MC: + // Parse MPLS here until marker "bottom of mpls stack" + for(bool bottomOfStack = false; !bottomOfStack; + bottomOfStack = ((ntohl(*(uint32_t*)(packet.mData - 4)) & MPLS_STACK_MASK) >> MPLS_STACK_SHIFT) != 0) + { + packet.mData += 4; + packet.mLength -=4; + } + break; + + case ETHERTYPE_IP: + // Next IPv4 packet + break; + + case ETHERTYPE_IPV6: + // Next IPv6 packet + break; } - } const Ip4Header* ip4 = reinterpret_cast(packet.mData); - if (ip4->mProtocol != IPPROTO_UDP) + if (ip4->mProtocol != IPPROTO_UDP && ip4->mProtocol != 0) return PacketData(); @@ -89,7 +103,7 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForIp4(NetworkFrame::PacketD { PacketData result(packet); const Ip4Header* ip4 = reinterpret_cast(packet.mData); - if (ip4->mProtocol != IPPROTO_UDP) + if (ip4->mProtocol != IPPROTO_UDP && ip4->mProtocol != 0) return PacketData(nullptr, 0); result.mData += ip4->headerLength(); @@ -113,17 +127,45 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForIp4(NetworkFrame::PacketD return result; } +struct Ip6Header +{ +#if __BYTE_ORDER == __LITTLE_ENDIAN + uint8_t traffic_class_hi:4, + version:4; + uint8_t flow_label_hi:4, + traffic_class_lo:4; + uint16_t flow_label_lo; + +#elif __BYTE_ORDER == __BIG_ENDIAN + uint8_t version:4, + traffic_class_hi:4; + uint8_t traffic_class_lo:4, + flow_label_hi:4; + uint16_t flow_label_lo; +#else +# error "Please fix endianness defines" +#endif + + uint16_t payload_len; + uint8_t next_header; + uint8_t hop_limit; + + struct in6_addr src_ip; + struct in6_addr dst_ip; +}; + NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForIp6(NetworkFrame::PacketData& packet, InternetAddress& source, InternetAddress& destination) { PacketData result(packet); - const Ip4Header* ip4 = reinterpret_cast(packet.mData); - if (ip4->mProtocol != IPPROTO_UDP) + const Ip6Header* ip6 = reinterpret_cast(packet.mData); + /*if (ip6->mProtocol != IPPROTO_UDP && ip4->mProtocol != 0) return PacketData(nullptr, 0); + */ + result.mData += sizeof(Ip6Header); + result.mLength -= sizeof(Ip6Header); + //std::cout << sizeof(Ip6Header) << std::endl; - result.mData += ip4->headerLength(); - result.mLength -= ip4->headerLength(); - - const UdpHeader* udp = reinterpret_cast(packet.mData); + const UdpHeader* udp = reinterpret_cast(result.mData); result.mData += sizeof(UdpHeader); result.mLength -= sizeof(UdpHeader); @@ -131,11 +173,14 @@ NetworkFrame::PacketData NetworkFrame::GetUdpPayloadForIp6(NetworkFrame::PacketD if (result.mLength != ntohs(udp->mDatagramLength)) return PacketData(nullptr, 0); */ - source.setIp(ip4->mSource); - source.setPort(ntohs(udp->mSourcePort)); - destination.setIp(ip4->mDestination); + source.setIp(ip6->src_ip); + source.setPort(ntohs(udp->mSourcePort)); + //std::cout << source.toStdString() << " - "; + + destination.setIp(ip6->dst_ip); destination.setPort(ntohs(udp->mDestinationPort)); + //std::cout << destination.toStdString() << std::endl; return result; } diff --git a/src/engine/helper/HL_NetworkFrame.h b/src/engine/helper/HL_NetworkFrame.h index 06ca0d77..f38589ed 100644 --- a/src/engine/helper/HL_NetworkFrame.h +++ b/src/engine/helper/HL_NetworkFrame.h @@ -80,6 +80,11 @@ public: { return mVhl >> 4; } + + const in_addr& source4() const { return mSource; } + const in_addr& dest4() const { return mDestination; } + const in6_addr& source6() const { return (const in6_addr&)mSource; } + const in6_addr& dest6() const { return (const in6_addr&)mDestination; } }; struct UdpHeader diff --git a/src/engine/helper/HL_Pointer.h b/src/engine/helper/HL_Pointer.h index a11061d9..5709fdb9 100644 --- a/src/engine/helper/HL_Pointer.h +++ b/src/engine/helper/HL_Pointer.h @@ -7,11 +7,8 @@ #define __SMART_POINTER_H #include -#define SharedPtr std::shared_ptr - -#include "HL_Sync.h" - #include +#include "HL_Sync.h" class UsageCounter { diff --git a/src/engine/helper/HL_Sync.cpp b/src/engine/helper/HL_Sync.cpp index 4bb1d608..624b96dc 100644 --- a/src/engine/helper/HL_Sync.cpp +++ b/src/engine/helper/HL_Sync.cpp @@ -6,6 +6,7 @@ #include "HL_Sync.h" #include #include +#include #ifdef TARGET_OSX # include @@ -85,6 +86,16 @@ uint32_t TimeHelper::getDelta(uint32_t later, uint32_t earlier) return 0; } +TimeHelper::ExecutionTime::ExecutionTime() +{ + mStart = TimeHelper::getTimestamp(); +} + +uint64_t TimeHelper::ExecutionTime::getSpentTime() const +{ + return TimeHelper::getTimestamp() - mStart; +} + // --------------- BufferQueue ----------------- BufferQueue::BufferQueue() { diff --git a/src/engine/helper/HL_Sync.h b/src/engine/helper/HL_Sync.h index 5b7fd637..50071ef7 100644 --- a/src/engine/helper/HL_Sync.h +++ b/src/engine/helper/HL_Sync.h @@ -76,8 +76,18 @@ public: // Finds time delta between 'later' and 'earlier' time points. // Handles cases when clock is wrapped. static uint32_t getDelta(uint32_t later, uint32_t earlier); + + class ExecutionTime + { + public: + ExecutionTime(); + uint64_t getSpentTime() const; + protected: + uint64_t mStart; + }; }; + class BufferQueue { public: diff --git a/src/libs/ice/ICELog.h b/src/libs/ice/ICELog.h index 92302f21..6932fbbf 100644 --- a/src/libs/ice/ICELog.h +++ b/src/libs/ice/ICELog.h @@ -150,6 +150,18 @@ extern Logger GLogger; #define ICELogDebug(args_) ICELog(LL_DEBUG, LOG_SUBSYSTEM, args_) #define ICELogMedia(args_) ICELog(LL_MEDIA, LOG_SUBSYSTEM, args_) +#define ICELogCritical2(args_) ICELog(LogLevel_Critical, LogSubsystem.c_str(), args_) +#define ICELogInfo2(args_) ICELog(LogLevel_Info, LogSubsystem.c_str(), args_) +#define ICELogDebug2(args_) ICELog(LogLevel_Debug, LogSubsystem.c_str(), args_) +#define ICELogMedia2(args_) ICELog(LogLevel_Media, LogSubsystem.c_str(), args_) + +#define DEFINE_LOGGING(subsystem) \ + static std::string LogSubsystem = subsystem; \ + static ice::LogLevel LogLevel_Critical = LL_CRITICAL; \ + static ice::LogLevel LogLevel_Info = LL_INFO; \ + static ice::LogLevel LogLevel_Debug = LL_DEBUG; \ + static ice::LogLevel LogLevel_Media = LL_MEDIA + /* #define ICELogCritical(args_)