2017-05-11 05:21:04 +02:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2017-05-19 11:35:20 +02:00
|
|
|
|
#include <wrl.h>
|
|
|
|
|
#include <wrl/implements.h>
|
|
|
|
|
#include <windows.storage.streams.h>
|
|
|
|
|
#include <robuffer.h>
|
|
|
|
|
#include <vector>
|
2017-05-11 05:21:04 +02:00
|
|
|
|
#include "../../VoIPController.h"
|
|
|
|
|
#include "../../VoIPServerConfig.h"
|
|
|
|
|
|
|
|
|
|
namespace libtgvoip{
|
|
|
|
|
public ref class Endpoint sealed{
|
|
|
|
|
public:
|
|
|
|
|
property int64 id;
|
|
|
|
|
property uint16 port;
|
|
|
|
|
property Platform::String^ ipv4;
|
|
|
|
|
property Platform::String^ ipv6;
|
|
|
|
|
property Platform::Array<uint8>^ peerTag;
|
|
|
|
|
};
|
|
|
|
|
|
2017-05-11 13:20:47 +02:00
|
|
|
|
public enum class CallState : int{
|
|
|
|
|
WaitInit=1,
|
|
|
|
|
WaitInitAck,
|
|
|
|
|
Established,
|
|
|
|
|
Failed
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public enum class Error : int{
|
|
|
|
|
Unknown=0,
|
|
|
|
|
Incompatible,
|
|
|
|
|
Timeout,
|
|
|
|
|
AudioIO
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public enum class NetworkType : int{
|
|
|
|
|
Unknown=0,
|
|
|
|
|
GPRS,
|
|
|
|
|
EDGE,
|
|
|
|
|
UMTS,
|
|
|
|
|
HSPA,
|
|
|
|
|
LTE,
|
|
|
|
|
WiFi,
|
|
|
|
|
Ethernet,
|
|
|
|
|
OtherHighSpeed,
|
|
|
|
|
OtherLowSpeed,
|
|
|
|
|
Dialup,
|
|
|
|
|
OtherMobile
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public enum class DataSavingMode{
|
|
|
|
|
Never=0,
|
|
|
|
|
MobileOnly,
|
|
|
|
|
Always
|
|
|
|
|
};
|
|
|
|
|
|
2017-05-11 05:21:04 +02:00
|
|
|
|
public interface class IStateCallback{
|
2017-05-11 13:20:47 +02:00
|
|
|
|
void OnCallStateChanged(CallState newState);
|
2017-05-11 05:21:04 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public ref class VoIPControllerWrapper sealed{
|
|
|
|
|
public:
|
|
|
|
|
VoIPControllerWrapper();
|
2017-05-13 18:30:40 +02:00
|
|
|
|
virtual ~VoIPControllerWrapper();
|
2017-05-11 05:21:04 +02:00
|
|
|
|
void Start();
|
|
|
|
|
void Connect();
|
|
|
|
|
void SetPublicEndpoints(Windows::Foundation::Collections::IIterable<Endpoint^>^ endpoints, bool allowP2P);
|
2017-05-11 13:20:47 +02:00
|
|
|
|
void SetNetworkType(NetworkType type);
|
2017-05-11 05:21:04 +02:00
|
|
|
|
void SetStateCallback(IStateCallback^ callback);
|
|
|
|
|
void SetMicMute(bool mute);
|
|
|
|
|
void SetEncryptionKey(const Platform::Array<uint8>^ key, bool isOutgoing);
|
2017-05-11 13:20:47 +02:00
|
|
|
|
void SetConfig(double initTimeout, double recvTimeout, DataSavingMode dataSavingMode, bool enableAEC, bool enableNS, bool enableAGC, Platform::String^ logFilePath, Platform::String^ statsDumpFilePath);
|
2017-05-11 05:21:04 +02:00
|
|
|
|
Platform::String^ GetDebugString();
|
|
|
|
|
Platform::String^ GetDebugLog();
|
2017-05-11 13:20:47 +02:00
|
|
|
|
Error GetLastError();
|
2017-05-11 05:21:04 +02:00
|
|
|
|
static Platform::String^ GetVersion();
|
2017-05-11 13:20:47 +02:00
|
|
|
|
static void UpdateServerConfig(Platform::String^ json);
|
2017-05-11 05:21:04 +02:00
|
|
|
|
//static Platform::String^ TestAesIge();
|
|
|
|
|
private:
|
|
|
|
|
static void OnStateChanged(tgvoip::VoIPController* c, int state);
|
|
|
|
|
void OnStateChangedInternal(int state);
|
|
|
|
|
tgvoip::VoIPController* controller;
|
|
|
|
|
IStateCallback^ stateCallback;
|
|
|
|
|
};
|
|
|
|
|
|
2017-05-11 13:20:47 +02:00
|
|
|
|
|
2017-05-11 05:21:04 +02:00
|
|
|
|
ref class MicrosoftCryptoImpl{
|
|
|
|
|
public:
|
|
|
|
|
static void AesIgeEncrypt(uint8_t* in, uint8_t* out, size_t len, uint8_t* key, uint8_t* iv);
|
|
|
|
|
static void AesIgeDecrypt(uint8_t* in, uint8_t* out, size_t len, uint8_t* key, uint8_t* iv);
|
|
|
|
|
static void SHA1(uint8_t* msg, size_t len, uint8_t* out);
|
|
|
|
|
static void SHA256(uint8_t* msg, size_t len, uint8_t* out);
|
|
|
|
|
static void RandBytes(uint8_t* buffer, size_t len);
|
|
|
|
|
static void Init();
|
|
|
|
|
private:
|
|
|
|
|
static inline void XorInt128(uint8_t* a, uint8_t* b, uint8_t* out);
|
2017-05-19 11:35:20 +02:00
|
|
|
|
static void IBufferToPtr(Windows::Storage::Streams::IBuffer^ buffer, size_t len, uint8_t* out);
|
|
|
|
|
static Windows::Storage::Streams::IBuffer^ IBufferFromPtr(uint8_t* msg, size_t len);
|
2017-05-11 05:21:04 +02:00
|
|
|
|
/*static Windows::Security::Cryptography::Core::CryptographicHash^ sha1Hash;
|
|
|
|
|
static Windows::Security::Cryptography::Core::CryptographicHash^ sha256Hash;*/
|
|
|
|
|
static Windows::Security::Cryptography::Core::HashAlgorithmProvider^ sha1Provider;
|
|
|
|
|
static Windows::Security::Cryptography::Core::HashAlgorithmProvider^ sha256Provider;
|
|
|
|
|
static Windows::Security::Cryptography::Core::SymmetricKeyAlgorithmProvider^ aesKeyProvider;
|
|
|
|
|
};
|
2017-05-13 18:07:03 +02:00
|
|
|
|
|
2017-05-19 11:35:20 +02:00
|
|
|
|
class NativeBuffer :
|
|
|
|
|
public Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::WinRtClassicComMix>,
|
|
|
|
|
ABI::Windows::Storage::Streams::IBuffer,
|
|
|
|
|
Windows::Storage::Streams::IBufferByteAccess>
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
NativeBuffer(byte *buffer, UINT totalSize)
|
|
|
|
|
{
|
|
|
|
|
m_length=totalSize;
|
|
|
|
|
m_buffer=buffer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual ~NativeBuffer()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP RuntimeClassInitialize(byte *buffer, UINT totalSize)
|
|
|
|
|
{
|
|
|
|
|
m_length=totalSize;
|
|
|
|
|
m_buffer=buffer;
|
|
|
|
|
return S_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP Buffer(byte **value)
|
|
|
|
|
{
|
|
|
|
|
*value=m_buffer;
|
|
|
|
|
return S_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP get_Capacity(UINT32 *value)
|
|
|
|
|
{
|
|
|
|
|
*value=m_length;
|
|
|
|
|
return S_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP get_Length(UINT32 *value)
|
|
|
|
|
{
|
|
|
|
|
*value=m_length;
|
|
|
|
|
return S_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP put_Length(UINT32 value)
|
|
|
|
|
{
|
|
|
|
|
m_length=value;
|
|
|
|
|
return S_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
UINT32 m_length;
|
|
|
|
|
byte *m_buffer;
|
|
|
|
|
};
|
2017-05-11 05:21:04 +02:00
|
|
|
|
}
|