check to make sure the extension exists b4 actually accepting the call and lets hope this gives Open H.323 enough time to sync up (bug #1714)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3220 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Jeremy McNamara
2004-06-15 20:56:06 +00:00
parent ada1e768c4
commit 1f4eadaf6a
3 changed files with 42 additions and 4 deletions

View File

@@ -1007,7 +1007,7 @@ int setup_incoming_call(call_details_t cd)
{ {
struct oh323_pvt *p = NULL; struct oh323_pvt *p = NULL;
struct ast_channel *c = NULL; /* struct ast_channel *c = NULL; */
struct oh323_user *user = NULL; struct oh323_user *user = NULL;
struct oh323_alias *alias = NULL; struct oh323_alias *alias = NULL;
@@ -1118,13 +1118,41 @@ int setup_incoming_call(call_details_t cd)
} }
exit: exit:
#if 0
/* allocate a channel and tell asterisk about it */ /* allocate a channel and tell asterisk about it */
c = oh323_new(p, AST_STATE_RINGING, cd.call_token); c = oh323_new(p, AST_STATE_RINGING, cd.call_token);
if (!c) { if (!c) {
ast_log(LOG_ERROR, "Couldn't create channel. This is bad\n"); ast_log(LOG_ERROR, "Couldn't create channel. This is bad\n");
return 0; return 0;
} }
#endif
return 1;
}
/**
* Call-back function to start PBX when OpenH323 ready to serve incoming call
*
* Returns 1 on success
*/
static int answer_call(unsigned call_reference)
{
struct oh323_pvt *p = NULL;
struct ast_channel *c = NULL;
/* Find the call or allocate a private structure if call not found */
p = find_call(call_reference);
if (!p) {
ast_log(LOG_ERROR, "Something is wrong: answer_call\n");
return 0;
}
/* allocate a channel and tell asterisk about it */
c = oh323_new(p, AST_STATE_RINGING, p->cd.call_token);
if (!c) {
ast_log(LOG_ERROR, "Couldn't create channel. This is bad\n");
return 0;
}
return 1; return 1;
} }
@@ -1857,7 +1885,8 @@ int load_module()
cleanup_connection, cleanup_connection,
chan_ringing, chan_ringing,
connection_made, connection_made,
send_digit); send_digit,
answer_call);
/* start the h.323 listener */ /* start the h.323 listener */

View File

@@ -489,6 +489,9 @@ H323Connection::AnswerCallResponse MyH323Connection::OnAnswerCall(const PString
const H323SignalPDU & /*setupPDU*/, const H323SignalPDU & /*setupPDU*/,
H323SignalPDU & /*connectPDU*/) H323SignalPDU & /*connectPDU*/)
{ {
if (!on_answer_call(GetCallReference()))
return H323Connection::AnswerCallDenied;
/* The call will be answered later with "AnsweringCall()" function. /* The call will be answered later with "AnsweringCall()" function.
*/ */
return H323Connection::AnswerCallDeferred; return H323Connection::AnswerCallDeferred;
@@ -835,7 +838,8 @@ void h323_callback_register(setup_incoming_cb ifunc,
clear_con_cb clfunc, clear_con_cb clfunc,
chan_ringing_cb rfunc, chan_ringing_cb rfunc,
con_established_cb efunc, con_established_cb efunc,
send_digit_cb dfunc) send_digit_cb dfunc,
answer_call_cb acfunc)
{ {
on_incoming_call = ifunc; on_incoming_call = ifunc;
on_outgoing_call = sfunc; on_outgoing_call = sfunc;
@@ -845,6 +849,7 @@ void h323_callback_register(setup_incoming_cb ifunc,
on_chan_ringing = rfunc; on_chan_ringing = rfunc;
on_connection_established = efunc; on_connection_established = efunc;
on_send_digit = dfunc; on_send_digit = dfunc;
on_answer_call = acfunc;
} }
/** /**

View File

@@ -153,6 +153,9 @@ con_established_cb on_connection_established;
typedef void (*clear_con_cb)(call_details_t); typedef void (*clear_con_cb)(call_details_t);
clear_con_cb on_connection_cleared; clear_con_cb on_connection_cleared;
typedef int (*answer_call_cb)(unsigned);
answer_call_cb on_answer_call;
/* debug flag */ /* debug flag */
int h323debug; int h323debug;
@@ -178,7 +181,8 @@ extern "C" {
clear_con_cb, clear_con_cb,
chan_ringing_cb, chan_ringing_cb,
con_established_cb, con_established_cb,
send_digit_cb); send_digit_cb,
answer_call_cb);
int h323_set_capability(int, int); int h323_set_capability(int, int);