[Asterisk-cvs]
asterisk-addons/asterisk-ooh323c/src chan_h323.c, 1.8,
1.9 chan_h323.h, 1.1, 1.2 ooh323cDriver.c, 1.4,
1.5 ooh323cDriver.h, 1.1, 1.2
vphirke
vphirke
Fri Sep 2 10:26:16 CDT 2005
- Previous message: [Asterisk-cvs] asterisk-addons/asterisk-ooh323c h323.conf.sample,
1.6, 1.7
- Next message: [Asterisk-cvs] asterisk-addons/asterisk-ooh323c/ooh323c/src
ooCalls.c, 1.6, 1.7 ooCalls.h, 1.4, 1.5 ooCapability.c, 1.7,
1.8 ooCapability.h, 1.5, 1.6 ooGkClient.c, 1.6,
1.7 ooStackCmds.c, 1.5, 1.6 ooStackCmds.h, 1.4, 1.5 ooh245.c,
1.8, 1.9 ooh245.h, 1.3, 1.4 ooh323.c, 1.7, 1.8 ooh323ep.c, 1.4,
1.5 ooh323ep.h, 1.5, 1.6 ooq931.c, 1.13, 1.14 ooq931.h, 1.5,
1.6 ootypes.h, 1.5, 1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /usr/cvsroot/asterisk-addons/asterisk-ooh323c/src
In directory mongoose.digium.com:/tmp/cvs-serv11947/src
Modified Files:
chan_h323.c chan_h323.h ooh323cDriver.c ooh323cDriver.h
Log Message:
Update - DTMF using H.245 and Q931 support
Index: chan_h323.c
===================================================================
RCS file: /usr/cvsroot/asterisk-addons/asterisk-ooh323c/src/chan_h323.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- chan_h323.c 9 Aug 2005 13:55:49 -0000 1.8
+++ chan_h323.c 2 Sep 2005 14:27:10 -0000 1.9
@@ -646,12 +646,20 @@
static int h323_digit(struct ast_channel *chan, char digit)
{
+ char dtmf[2];
struct h323_pvt *p = (struct h323_pvt *) chan->tech_pvt;
+
if(gH323Debug)
ast_verbose("--- h323_digit\n");
if (p && p->rtp && (p->dtmfmode & H323_DTMF_RFC2833)) {
ast_rtp_senddigit(p->rtp, digit);
+ }else if (p && ((p->dtmfmode & H323_DTMF_Q931) ||
+ (p->dtmfmode & H323_DTMF_H245ALPHANUMERIC) ||
+ (p->dtmfmode & H323_DTMF_H245SIGNAL))){
+ dtmf[0]= digit;
+ dtmf[1]='\0';
+ ooSendDTMFDigit(p->callToken, dtmf);
}
if(gH323Debug)
ast_verbose("+++ h323_digit\n");
@@ -1040,6 +1048,38 @@
return OO_OK;
}
+/**
+ * Callback for sending digits from H.323 up to asterisk
+ *
+ */
+int h323_onReceivedDigit(OOH323CallData *call, const char* digit)
+{
+ struct h323_pvt *p=NULL;
+ struct ast_frame f;
+ int res;
+
+ ast_log(LOG_DEBUG, "Received Digit: %c\n", digit);
+ p = find_call(call);
+ if(!p)
+ {
+ ast_log(LOG_ERROR, "Failed to find a matching call.\n");
+ return -1;
+ }
+ ast_mutex_lock(&p->lock);
+ memset(&f, 0, sizeof(f));
+ f.frametype = AST_FRAME_DTMF;
+ f.subclass = digit[0];
+ f.datalen = 0;
+ f.samples = 800;
+ f.offset = 0;
+ f.data = NULL;
+ f.mallocd = 0;
+ f.src = "SEND_DIGIT";
+ res = ast_queue_frame(p->owner, &f);
+ ast_mutex_unlock(&p->lock);
+ return res;
+}
+
int h323_onReceivedSetup(ooCallData *call, Q931Message *pmsg)
{
struct h323_pvt *p=NULL;
@@ -1557,8 +1597,14 @@
}else if (!strcasecmp(v->name, "amaflags")) {
user->amaflags = ast_cdr_amaflags2int(v->value);
} else if (!strcasecmp(v->name, "dtmfmode")) {
- if(!strcasecmp(v->value, "rfc2833"))
+ if(!strcasecmp(v->value, "rfc2833"))
user->dtmfmode = H323_DTMF_RFC2833;
+ else if(!strcasecmp(v->value, "q931keypad"))
+ user->dtmfmode = H323_DTMF_Q931;
+ else if(!strcasecmp(v->value, "h245alphanumeric"))
+ user->dtmfmode = H323_DTMF_H245ALPHANUMERIC;
+ else if(!strcasecmp(v->value, "h245signal"))
+ user->dtmfmode = H323_DTMF_H245SIGNAL;
}
v = v->next;
}
@@ -1647,8 +1693,14 @@
} else if (!strcasecmp(v->name, "amaflags")) {
peer->amaflags = ast_cdr_amaflags2int(v->value);
} else if (!strcasecmp(v->name, "dtmfmode")) {
- if(!strcasecmp(v->value, "rfc2833"))
+ if(!strcasecmp(v->value, "rfc2833"))
peer->dtmfmode = H323_DTMF_RFC2833;
+ else if(!strcasecmp(v->value, "q931keypad"))
+ peer->dtmfmode = H323_DTMF_Q931;
+ else if(!strcasecmp(v->value, "h245alphanumeric"))
+ peer->dtmfmode = H323_DTMF_H245ALPHANUMERIC;
+ else if(!strcasecmp(v->value, "h245signal"))
+ peer->dtmfmode = H323_DTMF_H245SIGNAL;
}
v = v->next;
}
@@ -1868,6 +1920,12 @@
gDTMFMode=H323_DTMF_INBAND;
else if (!strcasecmp(v->value, "rfc2833"))
gDTMFMode = H323_DTMF_RFC2833;
+ else if (!strcasecmp(v->value, "q931keypad"))
+ gDTMFMode = H323_DTMF_Q931;
+ else if (!strcasecmp(v->value, "h245alphanumeric"))
+ gDTMFMode = H323_DTMF_H245ALPHANUMERIC;
+ else if (!strcasecmp(v->value, "h245signal"))
+ gDTMFMode = H323_DTMF_H245SIGNAL;
else {
ast_log(LOG_WARNING, "Unknown dtmf mode '%s', using rfc2833\n",
v->value);
@@ -1970,8 +2028,14 @@
ast_cli(fd, "%-15.15s", "DTMF Mode: ");
if(peer->dtmfmode & H323_DTMF_RFC2833)
ast_cli(fd, "%s\n", "rfc2833");
+ else if(peer->dtmfmode & H323_DTMF_Q931)
+ ast_cli(fd, "%s\n", "q931keypad");
+ else if(peer->dtmfmode & H323_DTMF_H245ALPHANUMERIC)
+ ast_cli(fd, "%s\n", "h245alphanumeric");
+ else if(peer->dtmfmode & H323_DTMF_H245SIGNAL)
+ ast_cli(fd, "%s\n", "h245signal");
else
- ast_cli(fd, "%s\n", "unknown");
+ ast_cli(fd, "%s\n", "unknown");
ast_cli(fd, "%-15.15s%s\n", "AccountCode: ", peer->accountcode);
ast_cli(fd, "%-15.15s%s\n", "AMA flags: ", ast_cdr_flags2str(peer->amaflags));
ast_cli(fd, "%-15.15s%s\n", "Ip:Port: ", ip_port);
@@ -2052,8 +2116,14 @@
ast_cli(fd, "%-15.15s", "DTMF Mode: ");
if(user->dtmfmode & H323_DTMF_RFC2833)
ast_cli(fd, "%s\n", "rfc2833");
+ else if(user->dtmfmode & H323_DTMF_Q931)
+ ast_cli(fd, "%s\n", "q931keypad");
+ else if(user->dtmfmode & H323_DTMF_H245ALPHANUMERIC)
+ ast_cli(fd, "%s\n", "h245alphanumeric");
+ else if(user->dtmfmode & H323_DTMF_H245SIGNAL)
+ ast_cli(fd, "%s\n", "h245signal");
else
- ast_cli(fd, "%s\n", "unknown");
+ ast_cli(fd, "%s\n", "unknown");
ast_cli(fd, "%-15.15s%s\n", "AccountCode: ", user->accountcode);
ast_cli(fd, "%-15.15s%s\n", "AMA flags: ", ast_cdr_flags2str(user->amaflags));
ast_cli(fd, "%-15.15s%s\n", "Context: ", user->context);
@@ -2158,6 +2228,12 @@
ast_cli(fd, "%-15s", "DTMF Mode: ");
if(gDTMFMode & H323_DTMF_RFC2833)
ast_cli(fd, "%s\n", "rfc2833");
+ else if (gDTMFMode & H323_DTMF_Q931)
+ ast_cli(fd, "%s\n", "q931keypad");
+ else if(gDTMFMode & H323_DTMF_H245ALPHANUMERIC)
+ ast_cli(fd, "%s\n", "h245alphanumeric");
+ else if(gDTMFMode & H323_DTMF_H245SIGNAL)
+ ast_cli(fd, "%s\n", "h245signal");
else
ast_cli(fd, "%s\n", "unknown");
@@ -2252,7 +2328,8 @@
.onOutgoingCall = NULL,
.onCallEstablished = onCallEstablished,
.onCallCleared = onCallCleared,
- .openLogicalChannels=NULL
+ .openLogicalChannels=NULL,
+ .onReceivedDTMF = &h323_onReceivedDigit
};
userl.users = NULL;
Index: chan_h323.h
===================================================================
RCS file: /usr/cvsroot/asterisk-addons/asterisk-ooh323c/src/chan_h323.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- chan_h323.h 23 May 2005 20:55:43 -0000 1.1
+++ chan_h323.h 2 Sep 2005 14:27:10 -0000 1.2
@@ -102,4 +102,5 @@
/* h323 msg callbacks */
int h323_onReceivedSetup(ooCallData *call, Q931Message *pmsg);
+int h323_onReceivedDigit(OOH323CallData *call, const char* digit);
#endif
Index: ooh323cDriver.c
===================================================================
RCS file: /usr/cvsroot/asterisk-addons/asterisk-ooh323c/src/ooh323cDriver.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- ooh323cDriver.c 9 Aug 2005 13:55:49 -0000 1.4
+++ ooh323cDriver.c 2 Sep 2005 14:27:10 -0000 1.5
@@ -128,7 +128,11 @@
}
if(dtmf & H323_DTMF_RFC2833)
- ret |= ooH323EpEnableDTMFRFC2833(0);
+ ret |= ooH323EpEnableDTMFRFC2833(0);
+ else if(dtmf & H323_DTMF_H245ALPHANUMERIC)
+ ret |= ooH323EpEnableDTMFH245Alphanumeric();
+ else if(dtmf & H323_DTMF_H245SIGNAL)
+ ret |= ooH323EpEnableDTMFH245Signal();
return ret;
}
@@ -141,6 +145,12 @@
if(gH323Debug)
ast_verbose("\tAdding capabilities to call(%s, %s)\n", call->callType,
call->callToken);
+ if(dtmf & H323_DTMF_RFC2833)
+ ret |= ooCallEnableDTMFRFC2833(call,0);
+ else if(dtmf & H323_DTMF_H245ALPHANUMERIC)
+ ret |= ooCallEnableDTMFH245Alphanumeric(call);
+ else if(dtmf & H323_DTMF_H245SIGNAL)
+ ret |= ooCallEnableDTMFH245Signal(call);
for(x=0; 0 !=(format=ast_codec_pref_index(prefs, x)); x++)
Index: ooh323cDriver.h
===================================================================
RCS file: /usr/cvsroot/asterisk-addons/asterisk-ooh323c/src/ooh323cDriver.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- ooh323cDriver.h 23 May 2005 20:55:43 -0000 1.1
+++ ooh323cDriver.h 2 Sep 2005 14:27:10 -0000 1.2
@@ -22,8 +22,11 @@
#include "ooCalls.h"
#include "ooCapability.h"
#include "ooStackCmds.h"
-#define H323_DTMF_RFC2833 (1 << 0)
-#define H323_DTMF_INBAND (1 << 1)
+#define H323_DTMF_RFC2833 (1 << 0)
+#define H323_DTMF_Q931 (1 << 1)
+#define H323_DTMF_H245ALPHANUMERIC (1 << 2)
+#define H323_DTMF_H245SIGNAL (1 << 3)
+#define H323_DTMF_INBAND (1 << 4)
struct h323_pvt;
int ooh323c_start_stack_thread(void);
- Previous message: [Asterisk-cvs] asterisk-addons/asterisk-ooh323c h323.conf.sample,
1.6, 1.7
- Next message: [Asterisk-cvs] asterisk-addons/asterisk-ooh323c/ooh323c/src
ooCalls.c, 1.6, 1.7 ooCalls.h, 1.4, 1.5 ooCapability.c, 1.7,
1.8 ooCapability.h, 1.5, 1.6 ooGkClient.c, 1.6,
1.7 ooStackCmds.c, 1.5, 1.6 ooStackCmds.h, 1.4, 1.5 ooh245.c,
1.8, 1.9 ooh245.h, 1.3, 1.4 ooh323.c, 1.7, 1.8 ooh323ep.c, 1.4,
1.5 ooh323ep.h, 1.5, 1.6 ooq931.c, 1.13, 1.14 ooq931.h, 1.5,
1.6 ootypes.h, 1.5, 1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the svn-commits
mailing list