Commit d6437ed0 authored by Gabriel Margiani's avatar Gabriel Margiani
Browse files

muteringing and literally toggle muteall

Add muteringing command to toggle ringing globally.
"fix" muteall to toggle mute on each active call.
parent 546a0a33
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -160,7 +160,6 @@ void p3::call::mute_toggle() {
			mute = false;
		} else {
			if (aud_med != nullptr) {
				std::cout << "mutetx" << std::endl;
				aud_med->adjustRxLevel(0);
			}
			mute = true;
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ std::map<std::string, std::string> p3::client::command_shorthands {
	{"pause", "hold"},
	{"m", "mute"},
	{"ma", "muteall"},
	{"mr", "muteringing"},
	{"a", "answer"},
	{"b", "busy"},
	{"ba", "busyall"},
+9 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ std::map<std::string, std::string> p3::server::default_config {
	{"phone:busy_on_busy", "true"},
	{"phone:busyall_exceptions", "none"},
	{"phone:default_busyall", "false"},
	{"phone:default_mute", "false"}
	{"phone:default_mute_ringing", "false"}

};

@@ -190,6 +190,8 @@ void p3::clientHandler::parse_command(const std::string& c) {
			handle_mute();
		} else if ("muteall" == c) {
			handle_mute_all();
		} else if ("muteringing" == c) {
			handle_mute_ringing();
		} else if ("busy" == c) {
			handle_busy();
		} else if ("busyall" == c) {
@@ -264,10 +266,15 @@ void p3::clientHandler::handle_mute() {
}

void p3::clientHandler::handle_mute_all() {
	phone.global_mute_toggle();
	phone.mute_all_toggle();
	connection.send(p3::protocol::OK, "(un)mute all OK");
}

void p3::clientHandler::handle_mute_ringing() {
	phone.mute_ringing_toggle();
	connection.send(p3::protocol::OK, "(un)mute ringing OK");
}

void p3::clientHandler::handle_busy() {
	phone.busy(get_call_id("Call to reject (id)"));
	connection.send(p3::protocol::OK, "busy OK");
+1 −0
Original line number Diff line number Diff line
@@ -122,6 +122,7 @@ namespace p3 {
		void handle_hold();
		void handle_mute();
		void handle_mute_all();
		void handle_mute_ringing();
		void handle_busy();
		void handle_busy_all();
		void handle_reload();
+42 −33
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ p3::sipphone::sipphone(p3::config& c, p3::eventHook& e, p3::phonebook& b) :
	ring_index(0) 
{
	always_busy = conf.get_bool("phone:default_busyall");
	mute = conf.get_bool("phone:default_mute");
	mute_ringing = conf.get_bool("phone:default_mute_ringing");

	// Initiate pj
	endpoint = new pj::Endpoint;
@@ -165,33 +165,41 @@ void p3::sipphone::load_busyall_exceptions() {
}

void p3::sipphone::start_ringing() {
	if (ringtone == nullptr) return;
	if (ring_index == 0 && !mute_ringing) {
		play_ringtone();
	}
	ring_index++;
}

void p3::sipphone::stop_ringing() {
	if (ring_index == 1 && !mute_ringing) {
		stop_ringtone();
	}
	ring_index--;
}

	if (ring_index == 0) {
void p3::sipphone::play_ringtone() {
	if (ringtone == nullptr) return;
	try {
			pj::AudioMedia& play_med = endpoint->audDevManager().getPlaybackDevMedia();
		pj::AudioMedia& play_med = endpoint->audDevManager()
			.getPlaybackDevMedia();
		ringtone->startTransmit(play_med);
		ringtone->adjustTxLevel(2);
	} catch (pj::Error& err) {
		throw p3::perror("sipphone:startRinging:", err.info());
	}
}
	ring_index++;
}

void p3::sipphone::stop_ringing() {
void p3::sipphone::stop_ringtone() {
	if (ringtone == nullptr) return;

	if (ring_index == 1) {
	try {
			pj::AudioMedia& play_med = endpoint->audDevManager().getPlaybackDevMedia();
		pj::AudioMedia& play_med = endpoint->audDevManager()
			.getPlaybackDevMedia();
		ringtone->stopTransmit(play_med);
	} catch (pj::Error& err) {
		throw p3::perror("sipphone:stopRinging:", err.info());
	}
}
	ring_index--;
}

void p3::sipphone::renew_registration() {
	try {
@@ -318,8 +326,6 @@ void p3::sipphone::hold_toggle(int id) {

void p3::sipphone::mute_toggle(int id) {
	std::lock_guard<std::recursive_mutex> g(calls_mutex);
	pj::CallOpParam o;
	o.statusCode = PJSIP_SC_OK;
	try {
		get_call_by_id(id)->mute_toggle();
	} catch (pj::Error &e) {
@@ -327,20 +333,23 @@ void p3::sipphone::mute_toggle(int id) {
	}
}

void p3::sipphone::global_mute_toggle() {
	pj::AudDevManager& mgr = pj::Endpoint::instance().audDevManager();
	try {
		if (mute) {
			mgr.getCaptureDevMedia().adjustTxLevel(2);
			mute = false;
void p3::sipphone::mute_all_toggle() {
	std::lock_guard<std::recursive_mutex> g(calls_mutex);
	for (auto c : calls) {
		mute_toggle(c.first);
	}
}

void p3::sipphone::mute_ringing_toggle() {
	mute_ringing = !mute_ringing;
	if (ring_index > 0) {
		if (mute_ringing) {
			stop_ringtone();
		} else {
			mgr.getCaptureDevMedia().adjustTxLevel(0);
			mute = true;
			start_ringing();
		}
		eventhook.run_hook("muteall_toggle", std::to_string(mute));
	} catch (pj::Error& e) {
		throw p3::perror("sipphone:gmutetoggle", e.info());
	}
	eventhook.run_hook("muteringing_toggle", std::to_string(mute_ringing));
}

void p3::sipphone::conference() {
@@ -468,7 +477,7 @@ std::map<std::string, std::string> p3::sipphone::get_status_dump() {
	l["callRingingCount"] = std::to_string(get_call_count(p3::callState::INCOMING));

	// Global toggles
	l["allMute"] = std::to_string(mute);
	l["muteRinging"] = std::to_string(mute_ringing);
	l["allBusy"] = std::to_string(always_busy);

	return l;
Loading