dect
/
asterisk
Archived
13
0
Fork 0

dom mar 2 20:52:10 CET 2003

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@629 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
matteo 2003-03-02 19:52:23 +00:00
parent ca5391ad77
commit 48085489fc
9 changed files with 5488 additions and 7 deletions

View File

@ -1,3 +1,4 @@
-- Add experimental "IAX2" protocol
-- Add "Enhanced" AGI with audio pass-through (voice recognition anyone?)
-- Choose best priority from codec from allow/disallow
-- Reject SIP calls to self

View File

@ -40,7 +40,7 @@ PROC=$(shell uname -m)
DEBUG=-g #-pg
INCLUDE=-Iinclude -I../include
CFLAGS=-pipe -Wall -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
CFLAGS=-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
#CFLAGS+=-O6
CFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
CFLAGS+=$(shell if uname -m | grep -q ppc; then echo "-fsigned-char"; fi)

View File

@ -14,7 +14,7 @@
CHANNEL_LIBS=chan_modem.so chan_iax.so chan_sip.so \
chan_modem_aopen.so chan_oss.so \
chan_modem_bestdata.so chan_modem_i4l.so \
chan_agent.so chan_mgcp.so
chan_agent.so chan_mgcp.so chan_iax2.so
#
# If you really want VoFR you can have it :-P

View File

@ -871,7 +871,7 @@ static int do_deliver(void *data)
return res;
}
static int handle_error()
static int handle_error(void)
{
/* XXX Ideally we should figure out why an error occured and then abort those
rather than continuing to try. Unfortunately, the published interface does
@ -4279,7 +4279,7 @@ static void *network_thread(void *ignore)
return NULL;
}
static int start_network_thread()
static int start_network_thread(void)
{
return pthread_create(&netthreadid, NULL, network_thread, NULL);
}
@ -4556,7 +4556,7 @@ void prune_peers(void){
}
int set_config(char *config_file, struct sockaddr_in* sin){
static int set_config(char *config_file, struct sockaddr_in* sin){
struct ast_config *cfg;
int capability=iax_capability;
struct ast_variable *v;

5351
channels/chan_iax2.c Executable file

File diff suppressed because it is too large Load Diff

View File

@ -819,7 +819,7 @@ static int console_sendtext(int fd, int argc, char *argv[])
if (strlen(text2send))
ast_cli(fd, "Warning: message already waiting to be sent, overwriting\n");
strcpy(text2send, "");
while(tmparg <= argc) {
while(tmparg < argc) {
strncat(text2send, argv[tmparg++], sizeof(text2send) - strlen(text2send));
strncat(text2send, " ", sizeof(text2send) - strlen(text2send));
}

126
channels/iax2.h Executable file
View File

@ -0,0 +1,126 @@
/*
* Asterisk -- A telephony toolkit for Linux.
*
* Implementation of Inter-Asterisk eXchange
*
* Copyright (C) 2003, Digium
*
* Mark Spencer <markster@linux-support.net>
*
* This program is free software, distributed under the terms of
* the GNU General Public License
*/
#ifndef _ASTERISK_IAX2_H
#define _ASTERISK_IAX2_H
/* Max version of IAX protocol we support */
#define AST_IAX2_PROTO_VERSION 2
#define AST_IAX2_MAX_CALLS 32768
#define AST_FLAG_FULL 0x8000
#define AST_FLAG_RETRANS 0x8000
#define AST_FLAG_SC_LOG 0x80
#define AST_MAX_SHIFT 0x1F
#define AST_IAX2_WINDOW 256
/* Subclass for AST_FRAME_IAX */
#define AST_IAX2_COMMAND_NEW 1
#define AST_IAX2_COMMAND_PING 2
#define AST_IAX2_COMMAND_PONG 3
#define AST_IAX2_COMMAND_ACK 4
#define AST_IAX2_COMMAND_HANGUP 5
#define AST_IAX2_COMMAND_REJECT 6
#define AST_IAX2_COMMAND_ACCEPT 7
#define AST_IAX2_COMMAND_AUTHREQ 8
#define AST_IAX2_COMMAND_AUTHREP 9
#define AST_IAX2_COMMAND_INVAL 10
#define AST_IAX2_COMMAND_LAGRQ 11
#define AST_IAX2_COMMAND_LAGRP 12
#define AST_IAX2_COMMAND_REGREQ 13 /* Registration request */
#define AST_IAX2_COMMAND_REGAUTH 14 /* Registration authentication required */
#define AST_IAX2_COMMAND_REGACK 15 /* Registration accepted */
#define AST_IAX2_COMMAND_REGREJ 16 /* Registration rejected */
#define AST_IAX2_COMMAND_REGREL 17 /* Force release of registration */
#define AST_IAX2_COMMAND_VNAK 18 /* If we receive voice before valid first voice frame, send this */
#define AST_IAX2_COMMAND_DPREQ 19 /* Request status of a dialplan entry */
#define AST_IAX2_COMMAND_DPREP 20 /* Request status of a dialplan entry */
#define AST_IAX2_COMMAND_DIAL 21 /* Request a dial on channel brought up TBD */
#define AST_IAX2_COMMAND_TXREQ 22 /* Transfer Request */
#define AST_IAX2_COMMAND_TXCNT 23 /* Transfer Connect */
#define AST_IAX2_COMMAND_TXACC 24 /* Transfer Accepted */
#define AST_IAX2_COMMAND_TXREADY 25 /* Transfer ready */
#define AST_IAX2_COMMAND_TXREL 26 /* Transfer release */
#define AST_IAX2_COMMAND_TXREJ 27 /* Transfer reject */
#define AST_IAX2_COMMAND_QUELCH 28 /* Stop audio/video transmission */
#define AST_IAX2_COMMAND_UNQUELCH 29 /* Resume audio/video transmission */
#define AST_IAX2_COMMAND_POKE 30 /* Like ping, but does not require an open connection */
#define AST_IAX2_COMMAND_PAGE 31 /* Paging description */
#define AST_IAX2_COMMAND_MWI 32 /* Stand-alone message waiting indicator */
#define AST_IAX2_COMMAND_UNSUPPORT 33 /* Unsupported message received */
#define AST_DEFAULT_REG_EXPIRE 60 /* By default require re-registration once per minute */
#define AST_DEFAULT_IAX_PORTNO 4569
/* IAX Information elements */
#define IAX_IE_CALLED_NUMBER 1 /* Number/extension being called - string */
#define IAX_IE_CALLING_NUMBER 2 /* Calling number - string */
#define IAX_IE_CALLING_ANI 3 /* Calling number ANI for billing - string */
#define IAX_IE_CALLING_NAME 4 /* Name of caller - string */
#define IAX_IE_CALLED_CONTEXT 5 /* Context for number - string */
#define IAX_IE_USERNAME 6 /* Username (peer or user) for authentication - string */
#define IAX_IE_PASSWORD 7 /* Password for authentication - string */
#define IAX_IE_CAPABILITY 8 /* Actual codec capability - unsigned int */
#define IAX_IE_FORMAT 9 /* Desired codec format - unsigned int */
#define IAX_IE_LANGUAGE 10 /* Desired language - string */
#define IAX_IE_VERSION 11 /* Protocol version - short */
#define IAX_IE_ADSICPE 12 /* CPE ADSI capability - int */
#define IAX_IE_DNID 13 /* Originally dialed DNID - string */
#define IAX_IE_AUTHMETHODS 14 /* Authentication method(s) - short */
#define IAX_IE_CHALLENGE 15 /* Challenge data for MD5/RSA - string */
#define IAX_IE_MD5_RESULT 16 /* MD5 challenge result - string */
#define IAX_IE_RSA_RESULT 17 /* RSA challenge result - string */
#define IAX_IE_APPARENT_ADDR 18 /* Apparent address of peer - struct sockaddr_in */
#define IAX_IE_REFRESH 19 /* When to refresh registration - short */
#define IAX_IE_DPSTATUS 20 /* Dialplan status - short */
#define IAX_IE_CALLNO 21 /* Call number of peer - short */
#define IAX_IE_CAUSE 22 /* Cause - string */
#define IAX_AUTH_PLAINTEXT (1 << 0)
#define IAX_AUTH_MD5 (1 << 1)
#define IAX_AUTH_RSA (1 << 2)
#define IAX_DPSTATUS_EXISTS (1 << 0)
#define IAX_DPSTATUS_CANEXIST (1 << 1)
#define IAX_DPSTATUS_NONEXISTANT (1 << 2)
#define IAX_DPSTATUS_IGNOREPAT (1 << 14)
#define IAX_DPSTATUS_MATCHMORE (1 << 15)
/* Full frames are always delivered reliably */
struct ast_iax2_full_hdr {
unsigned short scallno; /* Source call number -- high bit must be 1 */
unsigned short dcallno; /* Destination call number -- high bit is 1 if retransmission */
unsigned int ts; /* 32-bit timestamp in milliseconds (from 1st transmission) */
unsigned short oseqno; /* Packet number (outgoing) */
unsigned short iseqno; /* Packet number (next incoming expected) */
char type; /* Frame type */
unsigned char csub; /* Compressed subclass */
unsigned char iedata[0];
};
/* Mini header is used only for voice frames -- delivered unreliably */
struct ast_iax2_mini_hdr {
short callno; /* Source call number -- high bit must be 0 */
unsigned short ts; /* 16-bit Timestamp (high 16 bits from last ast_iax2_full_hdr) */
/* Frametype implicitly VOICE_FRAME */
/* subclass implicit from last ast_iax2_full_hdr */
unsigned char iedata[0];
};
#endif

View File

@ -196,6 +196,8 @@ static struct ast_frame *lintogsm_frameout(struct ast_translator_pvt *tmp)
static void gsm_destroy_stuff(struct ast_translator_pvt *pvt)
{
if (pvt->gsm)
gsm_destroy(pvt->gsm);
free(pvt);
localusecnt--;
}

3
pbx.c
View File

@ -1135,7 +1135,8 @@ int ast_pbx_run(struct ast_channel *c)
c->name, c->context, c->exten, c->priority);
if ((res = ast_spawn_extension(c, c->context, c->exten, c->priority, c->callerid))) {
/* Something bad happened, or a hangup has been requested. */
if (((res >= '0') && (res <= '9')) || ((res >= 'A') && (res <= 'F'))) {
if (((res >= '0') && (res <= '9')) || ((res >= 'A') && (res <= 'F')) ||
(res == '*') || (res == '#')) {
ast_log(LOG_DEBUG, "Oooh, got something to jump out with ('%c')!\n", res);
exten[pos++] = digit = res;
break;