From d4ed0c7f5fae12b8b23cf14cf7e1ab15960013f8 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 25 Feb 2015 17:05:34 +0100 Subject: [PATCH] add network simulator settings in linphone-daemon --- daemon/Makefile.am | 1 + daemon/commands/netsim.cc | 106 ++++++++++++++++++++++++++++++++++++++ daemon/commands/netsim.h | 12 +++++ daemon/daemon.cc | 2 + oRTP | 2 +- 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 daemon/commands/netsim.cc create mode 100644 daemon/commands/netsim.h diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 5f0a1ae0e..065bfda7b 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -78,6 +78,7 @@ linphone_daemon_SOURCES=daemon.cc \ commands/unregister.h \ commands/quit.h \ commands/contact.h \ + commands/netsim.cc commands/netsim.h\ commands/version.h linphone_daemon_pipetest_SOURCES=daemon-pipetest.c diff --git a/daemon/commands/netsim.cc b/daemon/commands/netsim.cc new file mode 100644 index 000000000..6d0255317 --- /dev/null +++ b/daemon/commands/netsim.cc @@ -0,0 +1,106 @@ +#include "netsim.h" + +using namespace std; + +class NetsimResponse : public Response { +public: + NetsimResponse(LinphoneCore *core); +}; + +NetsimResponse::NetsimResponse(LinphoneCore *lc) : Response() { + ostringstream ost; + const OrtpNetworkSimulatorParams *params=linphone_core_get_network_simulator_params(lc); + ost << "State: "; + if (params->enabled) { + ost << "enabled\n"; + } else { + ost << "disabled\n"; + } + ost<<"max_bandwidth: "<max_bandwidth<max_buffer_size<loss_rate<latency<consecutive_loss_probability<jitter_burst_density<jitter_strength<mode)<getCore(); + OrtpNetworkSimulatorParams params=*linphone_core_get_network_simulator_params(lc); + string subcommand; + istringstream ist(args); + ist >> subcommand; + if (ist.fail()) { + app->sendResponse(NetsimResponse(app->getCore())); + return; + } + if (subcommand.compare("enable")==0){ + params.enabled=TRUE; + }else if (subcommand.compare("disable")==0){ + params.enabled=FALSE; + }else if (subcommand.compare("parameters")==0){ + string parameters; + char value[128]={0}; + ist >> parameters; + if (fmtp_get_value(parameters.c_str(),"max_bandwidth",value, sizeof(value))){ + params.max_bandwidth=atoi(value); + } + if (fmtp_get_value(parameters.c_str(),"max_buffer_size",value, sizeof(value))){ + params.max_buffer_size=atoi(value); + } + if (fmtp_get_value(parameters.c_str(),"loss_rate",value, sizeof(value))){ + params.loss_rate=atoi(value); + } + if (fmtp_get_value(parameters.c_str(),"latency",value, sizeof(value))){ + params.latency=atoi(value); + } + if (fmtp_get_value(parameters.c_str(),"consecutive_loss_probability",value, sizeof(value))){ + params.consecutive_loss_probability=atof(value); + } + if (fmtp_get_value(parameters.c_str(),"jitter_burst_density",value, sizeof(value))){ + params.jitter_burst_density=atof(value); + } + if (fmtp_get_value(parameters.c_str(),"jitter_strength",value, sizeof(value))){ + params.jitter_strength=atof(value); + } + if (fmtp_get_value(parameters.c_str(),"mode",value, sizeof(value))){ + OrtpNetworkSimulatorMode mode=ortp_network_simulator_mode_from_string(value); + if (mode==OrtpNetworkSimulatorInvalid){ + app->sendResponse(Response("Invalid mode")); + return; + } + params.mode=mode; + } + } + linphone_core_set_network_simulator_params(lc,¶ms); + app->sendResponse(NetsimResponse(app->getCore())); + return; +} + + + diff --git a/daemon/commands/netsim.h b/daemon/commands/netsim.h new file mode 100644 index 000000000..55cfcbc76 --- /dev/null +++ b/daemon/commands/netsim.h @@ -0,0 +1,12 @@ +#ifndef COMMAND_NETSIM_H_ +#define COMMAND_NETSIM_H_ + +#include "../daemon.h" + +class NetsimCommand: public DaemonCommand { +public: + NetsimCommand(); + virtual void exec(Daemon *app, const char *args); +}; + +#endif //COMMAND_NETSIM_H_ diff --git a/daemon/daemon.cc b/daemon/daemon.cc index d0217cc52..8aa09a8b3 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -50,6 +50,7 @@ #include "commands/unregister.h" #include "commands/quit.h" #include "commands/configcommand.h" +#include "commands/netsim.h" #include "commands/version.h" #include "private.h" @@ -469,6 +470,7 @@ void Daemon::initCommands() { mCommands.push_back(new HelpCommand()); mCommands.push_back(new ConfigGetCommand()); mCommands.push_back(new ConfigSetCommand()); + mCommands.push_back(new NetsimCommand()); } void Daemon::uninitCommands() { diff --git a/oRTP b/oRTP index d515df047..496b5b1fd 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit d515df047678da3777b5e4691dc069c6837f77bf +Subproject commit 496b5b1fd0053bf94e5e0fcecf9cd43713820ca1