1
0
mirror of https://github.com/danog/php-libtgvoip.git synced 2024-11-30 04:19:26 +01:00

Update libtgvoip

This commit is contained in:
Daniil Gentili 2020-03-01 16:30:57 +01:00
parent e748a8fb18
commit 64c912ddad
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
4 changed files with 85 additions and 109 deletions

View File

@ -10,9 +10,9 @@
include $(CLEAR_VARS) include $(CLEAR_VARS)
DEFINES = DEFINES =
INCLUDES = INCLUDES = -Ilibtgvoip
LDINCLUDES = LDINCLUDES =
CXXFLAGS = ${INCLUDES} ${DEFINES} -O3 -Wall -c -std=c++11 -fpic -g CXXFLAGS = ${INCLUDES} ${DEFINES} -O3 -Wall -c -std=c++17 -fpic -g
CFLAGS = ${INCLUDES} ${DEFINES} -O3 -fexceptions -fpic -g CFLAGS = ${INCLUDES} ${DEFINES} -O3 -fexceptions -fpic -g
LFLAGS = -shared ${LDINCLUDES} -ltgvoip -lphpcpp LFLAGS = -shared ${LDINCLUDES} -ltgvoip -lphpcpp

@ -1 +1 @@
Subproject commit 29fd5772894f1938e75717f1aa66282dac5751b9 Subproject commit 67adf97d158fcc5a29637457f4a507ed3325d634

183
main.cpp
View File

@ -18,8 +18,8 @@ If not, see <http://www.gnu.org/licenses/>.
#include <queue> #include <queue>
#include "libtgvoip/VoIPServerConfig.h" #include "libtgvoip/VoIPServerConfig.h"
#include "libtgvoip/threading.h" #include "libtgvoip/tools/threading.h"
#include "libtgvoip/logging.h" #include "libtgvoip/tools/logging.h"
using namespace tgvoip; using namespace tgvoip;
using namespace tgvoip::audio; using namespace tgvoip::audio;
@ -49,19 +49,20 @@ void VoIP::setCall(Php::Parameters &params)
Php::Value callId = call["id"]; Php::Value callId = call["id"];
Php::Value callAccessHash = call["access_hash"]; Php::Value callAccessHash = call["access_hash"];
Php::Value protocol = params[0]["protocol"]; Php::Value protocol = params[0]["protocol"];
self["internalStorage"]["callID"] = empty;
self["internalStorage"]["callID"]["_"] = "inputPhoneCall"; Php::Array callArray;
self["internalStorage"]["callID"]["id"] = callId; callArray["_"] = "inputPhoneCall";
self["internalStorage"]["callID"]["access_hash"] = callAccessHash; callArray["id"] = callId;
callArray["access_hash"] = callAccessHash;
self["internalStorage"]["callID"] = callArray;
self["internalStorage"]["protocol"] = protocol; self["internalStorage"]["protocol"] = protocol;
} }
void VoIP::initVoIPController() void VoIP::initVoIPController()
{ {
inst = new VoIPController();
outputFile = NULL; outputFile = NULL;
inst->implData = (void *)this; inst.implData = (void *)this;
VoIPController::Callbacks callbacks; VoIPController::Callbacks callbacks;
callbacks.connectionStateChanged = [](VoIPController *controller, int state) { callbacks.connectionStateChanged = [](VoIPController *controller, int state) {
((VoIP *)controller->implData)->state = state; ((VoIP *)controller->implData)->state = state;
@ -74,8 +75,8 @@ void VoIP::initVoIPController()
callbacks.groupCallKeySent = NULL; callbacks.groupCallKeySent = NULL;
callbacks.groupCallKeyReceived = NULL; callbacks.groupCallKeyReceived = NULL;
callbacks.upgradeToGroupCallRequested = NULL; callbacks.upgradeToGroupCallRequested = NULL;
inst->SetCallbacks(callbacks); inst.SetCallbacks(callbacks);
inst->SetAudioDataCallbacks([this](int16_t *buffer, size_t size) { this->sendAudioFrame(buffer, size); }, [this](int16_t *buffer, size_t size) { this->recvAudioFrame(buffer, size); }); inst.SetAudioDataCallbacks([this](int16_t *buffer, size_t size) { this->sendAudioFrame(buffer, size); }, [this](int16_t *buffer, size_t size) { this->recvAudioFrame(buffer, size); }, [](int16_t *, size_t) {});
} }
void VoIP::deinitVoIPController() void VoIP::deinitVoIPController()
@ -83,12 +84,7 @@ void VoIP::deinitVoIPController()
if (callState != CALL_STATE_ENDED) if (callState != CALL_STATE_ENDED)
{ {
callState = CALL_STATE_ENDED; callState = CALL_STATE_ENDED;
if (inst) inst.Stop();
{
inst->Stop();
delete inst;
inst = NULL;
}
while (holdFiles.size()) while (holdFiles.size())
{ {
@ -152,10 +148,6 @@ Php::Value VoIP::discard(Php::Parameters &params)
return false; return false;
} }
Php::Value self(this); Php::Value self(this);
/*if (!self["configuration"]["auth_key"])
{
return false;
}*/
if (self["madeline"] && self["madeline"].value().instanceOf("danog\\MadelineProto\\MTProto")) if (self["madeline"] && self["madeline"].value().instanceOf("danog\\MadelineProto\\MTProto"))
{ {
Php::Array reason; Php::Array reason;
@ -180,7 +172,11 @@ Php::Value VoIP::discard(Php::Parameters &params)
else else
debug = true; debug = true;
self["madeline"].value().call("discardCall", self["internalStorage"]["callID"].value(), reason, rating, debug); if (self["internalStorage"]["callID"].value()) {
Php::Value res = self["madeline"].value().call("discardCallFrom", self, self["internalStorage"]["callID"].value(), reason, rating, debug);
deinitVoIPController();
return res;
}
} }
deinitVoIPController(); deinitVoIPController();
return this; return this;
@ -192,25 +188,12 @@ Php::Value VoIP::accept()
return false; return false;
callState = CALL_STATE_ACCEPTED; callState = CALL_STATE_ACCEPTED;
Php::Value self(this); Php::Value self(this);
if (self["madeline"].value().call("acceptCall", self["internalStorage"]["callID"].value()) == false)
{ Php::Array method;
if (!self["configuration"]) method[0] = self["madeline"].value();
{ method[1] = "acceptCallFrom";
return false;
} return Php::call("call_user_func", method, self, self["internalStorage"].value()["callID"].value());
if (self["madeline"].value().instanceOf("danog\\MadelineProto\\MTProto"))
{
Php::Array reason;
Php::Array rating;
Php::Value debug;
reason["_"] = "phoneCallDiscardReasonDisconnect";
debug = false;
self["madeline"].value().call("discardCall", self["internalStorage"]["callID"].value(), reason, rating, debug);
}
deinitVoIPController();
return false;
}
return this;
} }
Php::Value VoIP::close() Php::Value VoIP::close()
@ -246,13 +229,13 @@ Php::Value VoIP::startTheMagic()
Php::Value debug; Php::Value debug;
reason["_"] = "phoneCallDiscardReasonDisconnect"; reason["_"] = "phoneCallDiscardReasonDisconnect";
debug = false; debug = false;
self["madeline"].value().call("discardCall", self["internalStorage"]["callID"].value(), reason, rating, debug); self["madeline"].value().call("discardCallFrom", self, self["internalStorage"].value()["callID"].value(), reason, rating, debug);
} }
deinitVoIPController(); deinitVoIPController();
return false; return false;
} }
inst->Start(); inst.Start();
inst->Connect(); inst.Connect();
Php::Value self(this); Php::Value self(this);
self["internalStorage"]["created"] = (int64_t)time(NULL); self["internalStorage"]["created"] = (int64_t)time(NULL);
callState = CALL_STATE_READY; callState = CALL_STATE_READY;
@ -263,9 +246,9 @@ Php::Value VoIP::whenCreated()
{ {
Php::Value self(this); Php::Value self(this);
if (self["internalStorage"]["created"]) if (self["internalStorage"].value()["created"])
{ {
return self["internalStorage"]["created"]; return self["internalStorage"].value()["created"];
} }
return false; return false;
} }
@ -273,7 +256,7 @@ Php::Value VoIP::isCreator()
{ {
Php::Value self(this); Php::Value self(this);
return self["internalStorage"]["creator"]; return self["internalStorage"].value()["creator"];
} }
Php::Value VoIP::getOtherID() Php::Value VoIP::getOtherID()
{ {
@ -287,12 +270,12 @@ Php::Value VoIP::setMadeline(Php::Parameters &params)
Php::Value VoIP::getProtocol() Php::Value VoIP::getProtocol()
{ {
Php::Value self(this); Php::Value self(this);
return self["internalStorage"]["protocol"]; return self["internalStorage"].value()["protocol"];
} }
Php::Value VoIP::getCallID() Php::Value VoIP::getCallID()
{ {
Php::Value self(this); Php::Value self(this);
return self["internalStorage"]["callID"]; return self["internalStorage"].value()["callID"].value();
} }
Php::Value VoIP::getCallState() Php::Value VoIP::getCallState()
@ -303,16 +286,21 @@ Php::Value VoIP::getCallState()
Php::Value VoIP::getVisualization() Php::Value VoIP::getVisualization()
{ {
Php::Value self(this); Php::Value self(this);
if (self["internalStorage"]["visualization"]) Php::Value internalStorage = self["internalStorage"].value();
Php::call("var_dump", internalStorage["visualization"]);
if (internalStorage["visualization"])
{ {
return self["internalStorage"]["visualization"]; return internalStorage["visualization"].value();
} }
return false; return false;
} }
void VoIP::setVisualization(Php::Parameters &params) void VoIP::setVisualization(Php::Parameters &params)
{ {
Php::Value self(this); Php::Value self(this);
self["internalStorage"]["visualization"] = params[0]; Php::Value internalStorage = self["internalStorage"].value();
internalStorage["visualization"] = params[0];
self["internalStorage"] = internalStorage;
Php::call("var_dump", internalStorage);
} }
void VoIP::parseConfig() void VoIP::parseConfig()
@ -321,41 +309,45 @@ void VoIP::parseConfig()
if (!self["configuration"]["auth_key"]) if (!self["configuration"]["auth_key"])
return; return;
Php::Value config = self["configuration"].value();
Php::Value internalStorage = self["internalStorage"].value();
VoIPController::Config cfg; VoIPController::Config cfg;
cfg.recvTimeout = (double)self["configuration"]["recv_timeout"]; cfg.recvTimeout = (double)config["recv_timeout"];
cfg.initTimeout = (double)self["configuration"]["init_timeout"]; cfg.initTimeout = (double)config["init_timeout"];
cfg.dataSaving = (int)self["configuration"]["data_saving"]; cfg.dataSaving = (int)config["data_saving"];
cfg.enableAEC = (bool)self["configuration"]["enable_AEC"]; cfg.enableAEC = (bool)config["enable_AEC"];
cfg.enableNS = (bool)self["configuration"]["enable_NS"]; cfg.enableNS = (bool)config["enable_NS"];
cfg.enableAGC = (bool)self["configuration"]["enable_AGC"]; cfg.enableAGC = (bool)config["enable_AGC"];
cfg.enableCallUpgrade = (bool)self["configuration"]["enable_call_upgrade"]; cfg.enableCallUpgrade = (bool)config["enable_call_upgrade"];
if (self["configuration"]["log_file_path"]) if (config["log_file_path"])
{ {
std::string logFilePath = self["configuration"]["log_file_path"]; std::string logFilePath = config["log_file_path"];
cfg.logFilePath = logFilePath; cfg.logFilePath = logFilePath;
} }
if (self["configuration"]["stats_dump_file_path"]) if (config["stats_dump_file_path"])
{ {
std::string statsDumpFilePath = self["configuration"]["stats_dump_file_path"]; std::string statsDumpFilePath = config["stats_dump_file_path"];
cfg.statsDumpFilePath = statsDumpFilePath; cfg.statsDumpFilePath = statsDumpFilePath;
} }
if (self["configuration"]["shared_config"]) if (config["shared_config"])
{ {
Php::Value shared_config = self["configuration"]["shared_config"]; Php::Value shared_config = config["shared_config"];
ServerConfig::GetSharedInstance()->Update(Php::call("json_encode", Php::call("array_merge", Php::call("\\danog\\MadelineProto\\VoIPServerConfig::getFinal"), shared_config))); ServerConfig::GetSharedInstance()->Update(Php::call("json_encode", Php::call("array_merge", Php::call("\\danog\\MadelineProto\\VoIPServerConfig::getFinal"), shared_config)));
} }
inst->SetConfig(cfg); inst.SetConfig(cfg);
char *key = (char *)malloc(256); /*char *key = (char *)malloc(256);
memcpy(key, self["configuration"]["auth_key"], 256); memcpy(key, config["auth_key"], 256);*/
inst->SetEncryptionKey(key, (bool)self["internalStorage"]["creator"]); std::string strKey = config["auth_key"];
free(key); std::vector<uint8_t> key(strKey.begin(), strKey.end());
inst.SetEncryptionKey(key, (bool)internalStorage["creator"]);
vector<Endpoint> eps; vector<Endpoint> eps;
Php::Value endpoints = self["configuration"]["endpoints"]; Php::Value endpoints = config["endpoints"];
for (int i = 0; i < endpoints.size(); i++) for (int i = 0; i < endpoints.size(); i++)
{ {
string ip = endpoints[i]["ip"]; string ip = endpoints[i]["ip"];
@ -379,11 +371,11 @@ void VoIP::parseConfig()
free(pTag); free(pTag);
} }
inst->SetRemoteEndpoints(eps, (bool)self["internalStorage"]["protocol"]["udp_p2p"], (int)self["internalStorage"]["protocol"]["max_layer"]); inst.SetRemoteEndpoints(eps, (bool)internalStorage["protocol"]["udp_p2p"], (int)internalStorage["protocol"]["max_layer"]);
inst->SetNetworkType(self["configuration"]["network_type"]); inst.SetNetworkType(config["network_type"]);
if (self["configuration"]["proxy"]) if (config["proxy"])
{ {
inst->SetProxy(self["configuration"]["proxy"]["protocol"], self["configuration"]["proxy"]["address"], (int32_t)self["configuration"]["proxy"]["port"], self["configuration"]["proxy"]["username"], self["configuration"]["proxy"]["password"]); inst.SetProxy(config["proxy"]["protocol"], config["proxy"]["address"], (int32_t)config["proxy"]["port"], config["proxy"]["username"], config["proxy"]["password"]);
} }
} }
@ -460,25 +452,14 @@ Php::Value VoIP::playOnHold(Php::Parameters &params)
Php::Value VoIP::setMicMute(Php::Parameters &params) Php::Value VoIP::setMicMute(Php::Parameters &params)
{ {
inst->SetMicMute((bool)params[0]); inst.SetMicMute((bool)params[0]);
return this;
}
Php::Value VoIP::debugCtl(Php::Parameters &params)
{
inst->DebugCtl((int)params[0], (int)params[1]);
return this;
}
Php::Value VoIP::setBitrate(Php::Parameters &params)
{
inst->DebugCtl(1, (int)params[0]);
return this; return this;
} }
Php::Value VoIP::getDebugLog() Php::Value VoIP::getDebugLog()
{ {
Php::Value data; Php::Value data;
string encoded = inst->GetDebugLog(); string encoded = inst.GetDebugLog();
if (!encoded.empty()) if (!encoded.empty())
{ {
data = Php::call("json_decode", encoded, true); data = Php::call("json_decode", encoded, true);
@ -493,27 +474,27 @@ Php::Value VoIP::getVersion()
Php::Value VoIP::getSignalBarsCount() Php::Value VoIP::getSignalBarsCount()
{ {
return inst->GetSignalBarsCount(); return inst.GetSignalBarsCount();
} }
Php::Value VoIP::getPreferredRelayID() Php::Value VoIP::getPreferredRelayID()
{ {
return inst->GetPreferredRelayID(); return inst.GetPreferredRelayID();
} }
Php::Value VoIP::getLastError() Php::Value VoIP::getLastError()
{ {
return inst->GetLastError(); return inst.GetLastError();
} }
Php::Value VoIP::getDebugString() Php::Value VoIP::getDebugString()
{ {
return inst->GetDebugString(); return inst.GetDebugString();
} }
Php::Value VoIP::getStats() Php::Value VoIP::getStats()
{ {
Php::Value stats; Php::Value stats;
VoIPController::TrafficStats _stats; VoIPController::TrafficStats _stats;
inst->GetStats(&_stats); inst.GetStats(&_stats);
stats["bytesSentWifi"] = (int64_t)_stats.bytesSentWifi; stats["bytesSentWifi"] = (int64_t)_stats.bytesSentWifi;
stats["bytesSentMobile"] = (int64_t)_stats.bytesSentMobile; stats["bytesSentMobile"] = (int64_t)_stats.bytesSentMobile;
stats["bytesRecvdWifi"] = (int64_t)_stats.bytesRecvdWifi; stats["bytesRecvdWifi"] = (int64_t)_stats.bytesRecvdWifi;
@ -523,7 +504,7 @@ Php::Value VoIP::getStats()
Php::Value VoIP::getPeerCapabilities() Php::Value VoIP::getPeerCapabilities()
{ {
return (int64_t)inst->GetPeerCapabilities(); return (int64_t)inst.GetPeerCapabilities();
} }
Php::Value VoIP::getConnectionMaxLayer() Php::Value VoIP::getConnectionMaxLayer()
{ {
@ -531,14 +512,14 @@ Php::Value VoIP::getConnectionMaxLayer()
} }
void VoIP::requestCallUpgrade() void VoIP::requestCallUpgrade()
{ {
return inst->RequestCallUpgrade(); return inst.RequestCallUpgrade();
} }
void VoIP::sendGroupCallKey(Php::Parameters &params) void VoIP::sendGroupCallKey(Php::Parameters &params)
{ {
unsigned char *key = (unsigned char *)malloc(256); unsigned char *key = (unsigned char *)malloc(256);
memcpy(key, params[0], 256); memcpy(key, params[0], 256);
inst->SendGroupCallKey(key); inst.SendGroupCallKey(key);
} }
Php::Value VoIP::getState() Php::Value VoIP::getState()
@ -570,7 +551,7 @@ extern "C"
{ {
// static(!) Php::Extension object that should stay in memory // static(!) Php::Extension object that should stay in memory
// for the entire duration of the process (that's why it's static) // for the entire duration of the process (that's why it's static)
static Php::Extension extension("php-libtgvoip", "1.1.2"); static Php::Extension extension("php-libtgvoip", "1.5.0");
Php::Class<VoIPServerConfigInternal> voipServerConfigInternal("VoIPServerConfigInternal"); Php::Class<VoIPServerConfigInternal> voipServerConfigInternal("VoIPServerConfigInternal");
voipServerConfigInternal.method<&VoIPServerConfigInternal::update>("updateInternal", Php::Protected | Php::Static, {Php::ByVal("config", Php::Type::Array)}); voipServerConfigInternal.method<&VoIPServerConfigInternal::update>("updateInternal", Php::Protected | Php::Static, {Php::ByVal("config", Php::Type::Array)});
@ -601,10 +582,6 @@ extern "C"
voip.method<&VoIP::setMicMute>("setMicMute", Php::Public | Php::Final, { voip.method<&VoIP::setMicMute>("setMicMute", Php::Public | Php::Final, {
Php::ByVal("type", Php::Type::Bool), Php::ByVal("type", Php::Type::Bool),
}); });
voip.method<&VoIP::debugCtl>("debugCtl", Php::Public | Php::Final, {
Php::ByVal("request", Php::Type::Numeric),
Php::ByVal("param", Php::Type::Numeric),
});
voip.method<&VoIP::parseConfig>("parseConfig", Php::Public | Php::Final); voip.method<&VoIP::parseConfig>("parseConfig", Php::Public | Php::Final);
voip.method<&VoIP::getDebugLog>("getDebugLog", Php::Public | Php::Final); voip.method<&VoIP::getDebugLog>("getDebugLog", Php::Public | Php::Final);
voip.method<&VoIP::getLastError>("getLastError", Php::Public | Php::Final); voip.method<&VoIP::getLastError>("getLastError", Php::Public | Php::Final);
@ -626,8 +603,6 @@ extern "C"
voip.method<&VoIP::setOutputFile>("setOutputFile", Php::Public | Php::Final, {Php::ByVal("file", Php::Type::String)}); voip.method<&VoIP::setOutputFile>("setOutputFile", Php::Public | Php::Final, {Php::ByVal("file", Php::Type::String)});
voip.method<&VoIP::unsetOutputFile>("unsetOutputFile", Php::Public | Php::Final); voip.method<&VoIP::unsetOutputFile>("unsetOutputFile", Php::Public | Php::Final);
voip.method<&VoIP::setBitrate>("setBitrate", Php::Public | Php::Final, {Php::ByVal("bitrate", Php::Type::Numeric)});
voip.property("configuration", 0, Php::Public); voip.property("configuration", 0, Php::Public);
voip.property("storage", 0, Php::Public); voip.property("storage", 0, Php::Public);
voip.property("internalStorage", 0, Php::Private); voip.property("internalStorage", 0, Php::Private);
@ -680,7 +655,7 @@ extern "C"
voip.constant("TGVOIP_PEER_CAP_GROUP_CALLS", TGVOIP_PEER_CAP_GROUP_CALLS); voip.constant("TGVOIP_PEER_CAP_GROUP_CALLS", TGVOIP_PEER_CAP_GROUP_CALLS);
voip.constant("PHP_LIBTGVOIP_VERSION", "1.4.0"); voip.constant("PHP_LIBTGVOIP_VERSION", "1.5.0");
Php::Namespace danog("danog"); Php::Namespace danog("danog");
Php::Namespace MadelineProto("MadelineProto"); Php::Namespace MadelineProto("MadelineProto");

5
main.h
View File

@ -43,7 +43,7 @@ If not, see <http://www.gnu.org/licenses/>.
#include <ext/standard/info.h>*/ #include <ext/standard/info.h>*/
#include <phpcpp.h> #include <phpcpp.h>
#include <stdio.h> #include <stdio.h>
#include "libtgvoip/threading.h" #include "libtgvoip/tools/threading.h"
#include <queue> #include <queue>
#define AUDIO_STATE_NONE -1 #define AUDIO_STATE_NONE -1
@ -153,7 +153,8 @@ private:
size_t readInput; size_t readInput;
size_t readOutput; size_t readOutput;
int callState = CALL_STATE_NONE; int callState = CALL_STATE_NONE;
VoIPController *inst = NULL;
VoIPController inst;
}; };
#endif #endif