add caller pin for entering mumble session
caller must enter pin before being unmuted/undeafened in mumble room
This commit is contained in:
		
							parent
							
								
									e0a3a67410
								
							
						
					
					
						commit
						dc77504338
					
				| @ -144,7 +144,16 @@ namespace sip { | ||||
| 
 | ||||
|             communicator.logger.notice(msgText); | ||||
|             communicator.onStateChange(msgText); | ||||
|             communicator.onMuteDeafChange(0); | ||||
| 
 | ||||
|             communicator.got_dtmf = ""; | ||||
| 
 | ||||
|             /* 
 | ||||
|              * if no pin is set, go ahead and turn off mute/deaf | ||||
|              * otherwise, wait for pin to be entered | ||||
|              */ | ||||
|             if ( communicator.pin.length() == 0 ) { | ||||
|                 communicator.onMuteDeafChange(0); | ||||
|             } | ||||
| 
 | ||||
|         } else if (ci.state == PJSIP_INV_STATE_DISCONNECTED) { | ||||
|             auto &acc = dynamic_cast<_Account &>(account); | ||||
| @ -183,7 +192,31 @@ namespace sip { | ||||
|     } | ||||
| 
 | ||||
|     void _Call::onDtmfDigit(pj::OnDtmfDigitParam &prm) { | ||||
|         communicator.logger.notice("DTMF digit '%s' (call %d).", prm.digit.c_str(), getId()); | ||||
|         communicator.logger.notice("DTMF digit '%s' (call %d).", | ||||
|                 prm.digit.c_str(), getId()); | ||||
|         pj::CallOpParam param; | ||||
|          | ||||
|         if ( communicator.pin.length() > 0 ) { | ||||
|             if ( prm.digit == "#" ) { | ||||
|                 communicator.logger.notice("DTMF got string command %s", | ||||
|                         communicator.got_dtmf.c_str()); | ||||
|                 if ( communicator.got_dtmf == communicator.pin ) { | ||||
|                     communicator.logger.notice("Caller entered correct PIN"); | ||||
|                     communicator.onMuteDeafChange(0); | ||||
|                 } else { | ||||
|                     communicator.logger.notice("Caller entered wrong PIN"); | ||||
|                     param.statusCode = PJSIP_SC_SERVICE_UNAVAILABLE; | ||||
|                     this->hangup(param); | ||||
|                 } | ||||
|                 communicator.got_dtmf = ""; | ||||
|             } else { | ||||
|                 communicator.logger.notice("DTMF append %s to %s", | ||||
|                         prm.digit.c_str(), communicator.got_dtmf.c_str()); | ||||
|                 communicator.got_dtmf = communicator.got_dtmf + prm.digit; | ||||
|             } | ||||
|         } else { | ||||
|             communicator.logger.notice("DTMF ignoring %s", prm.digit.c_str()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     void _Account::onRegState(pj::OnRegStateParam &prm) { | ||||
| @ -324,3 +357,4 @@ void sip::PjsuaCommunicator::registerAccount(string host, string user, string pa | ||||
|     account.reset(new _Account(*this)); | ||||
|     account->create(accountConfig); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -76,6 +76,9 @@ namespace sip { | ||||
|                 int16_t *samples, | ||||
|                 unsigned int length); | ||||
| 
 | ||||
|         std::string pin; | ||||
|         std::string got_dtmf; | ||||
| 
 | ||||
|         std::function<void(int16_t *, int)> onIncomingPcmSamples; | ||||
| 
 | ||||
|         std::function<void(std::string)> onStateChange; | ||||
|  | ||||
| @ -28,6 +28,11 @@ channelNameExpression = | ||||
| # in the same group | ||||
| autodeaf = 0 | ||||
| 
 | ||||
| # Caller PIN needed to authenticate the phone call itself. The caller presses | ||||
| # the PIN, followed by the hash '#' key. On success, the caller is | ||||
| # unmuted/undeafened. On failure, the SIP call is hung up. | ||||
| pin = 4321 | ||||
| 
 | ||||
| # Bitrate of Opus encoder in B/s | ||||
| # Adjust it if you need to meet the specific bandwidth requirements of Murmur server | ||||
| opusEncoderBitrate = 16000 | ||||
|  | ||||
							
								
								
									
										7
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								main.cpp
									
									
									
									
									
								
							| @ -96,6 +96,13 @@ int main(int argc, char *argv[]) { | ||||
|         mumbleConf.autodeaf = false; | ||||
|     } | ||||
| 
 | ||||
|     /* default to <no pin> */ | ||||
|     try { | ||||
|         pjsuaCommunicator.pin = conf.getString("mumble.pin"); | ||||
|     } catch (...) { | ||||
|         pjsuaCommunicator.pin = ""; | ||||
|     } | ||||
| 
 | ||||
|     mumbleCommunicator.connect(mumbleConf); | ||||
| 
 | ||||
|     pjsuaCommunicator.connect( | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Scott Hardin
						Scott Hardin