DSM: sendDTMFSequence action

sayer/1.4-spce2.6
Stefan Sayer 16 years ago
parent 7a28e8b09a
commit 46d4b7d93f

@ -72,6 +72,7 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) {
DEF_CMD("enableDTMFDetection", SCEnableDTMFDetection);
DEF_CMD("disableDTMFDetection", SCDisableDTMFDetection);
DEF_CMD("sendDTMF", SCSendDTMFAction);
DEF_CMD("sendDTMFSequence", SCSendDTMFSequenceAction);
DEF_CMD("set", SCSetAction);
DEF_CMD("sets", SCSetSAction);
@ -1204,6 +1205,40 @@ EXEC_ACTION_START(SCSendDTMFAction) {
sess->sendDtmf(event_i, duration_i);
} EXEC_ACTION_END;
CONST_ACTION_2P(SCSendDTMFSequenceAction,',', true);
EXEC_ACTION_START(SCSendDTMFSequenceAction) {
string events = resolveVars(par1, sess, sc_sess, event_params);
string duration = resolveVars(par2, sess, sc_sess, event_params);
unsigned int duration_i;
if (duration.empty()) {
duration_i = 500; // default
} else {
if (str2i(duration, duration_i)) {
ERROR("event duration '%s' not a valid DTMF duration\n", duration.c_str());
throw DSMException("core", "cause", "invalid DTMF duration:"+ duration);
}
}
for (size_t i=0;i<events.length();i++) {
if ((events[i]<'0' || events[i]>'9')
&& (events[i] != '#') && (events[i] != '*')
&& (events[i] <'A' || events[i] >'F')) {
DBG("skipping non-DTMF event char '%c'\n", events[i]);
continue;
}
int event = events[i] - '0';
if (events[i] == '*')
event = 10;
else if (events[i] == '#')
event = 11;
else if (events[i] >= 'A' && events[i] <= 'F' )
event = 12 + (events[i] - 'A');
DBG("sending event %d duration %u\n", event, duration_i);
sess->sendDtmf(event, duration_i);
}
} EXEC_ACTION_END;
EXEC_ACTION_START(SCRegisterEventQueueAction) {
string q_name = resolveVars(arg, sess, sc_sess, event_params);
DBG("Registering event queue '%s'\n", q_name.c_str());

@ -63,6 +63,7 @@ DEF_ACTION_1P(SCUnmuteAction);
DEF_ACTION_1P(SCEnableDTMFDetection);
DEF_ACTION_1P(SCDisableDTMFDetection);
DEF_ACTION_2P(SCSendDTMFAction);
DEF_ACTION_2P(SCSendDTMFSequenceAction);
DEF_ACTION_1P(SCSetPromptsAction);
DEF_ACTION_2P(SCAddSeparatorAction);

@ -96,6 +96,10 @@ sendDTMF(key [, duration_ms])
send a DTMF event (RFC4733 event)
duration_ms defaults to 500ms
sendDTMFSequence(sequence [, duration_ms])
send a sequence of DTMF events (RFC4733 event), e.g. 123#45*1
duration_ms defaults to 500ms
B2B.connectCallee(remote_party, remote_uri)
connect second leg of B2B session (see AmB2BSession)

Loading…
Cancel
Save