Fix of conference release bug.
Calls can now be forwarded during alerting phase via "*3#".
modified: README
modified: apppbx.cpp
modified: configure
modified: configure.ac
new file: default/openbsc.cfg
modified: dss1.cpp
modified: gsm.cpp
modified: joinpbx.cpp
branch.
- Minor fixes and source cleanups.
- Added patch by Kai Peter to complete screening indicators. Thanx!
+- Join conference during alerting phase, so calls can be forwarded.
+- Fixed conference release bug.
+
+New release Version 1.6
+
}
/* keypad when connected */
- if (e_state == EPOINT_STATE_CONNECT) {
+ if (e_state == EPOINT_STATE_CONNECT || e_state == EPOINT_STATE_IN_ALERTING) {
if (e_ext.keypad || e_enablekeypad) {
PDEBUG(DEBUG_EPOINT, "EPOINT(%d) keypad information received during connect: %s.\n", ea_endpoint->ep_serial, param->information.id);
/* processing keypad function */
#endif
/* check for *X# sequence */
- if (e_state == EPOINT_STATE_CONNECT) {
+ if (e_state == EPOINT_STATE_CONNECT || e_state == EPOINT_STATE_IN_ALERTING) {
if (e_dtmf_time+3 < now) {
/* the last digit was too far in the past to be a sequence */
if (param->dtmf == '*')
set_tone(portlist, "ringpbx");
else
set_tone(portlist, "ringing");
+
+ if (e_ext.number[0])
+ e_dtmf = 1; /* allow dtmf */
}
/* join MESSAGE_CONNECT */
class Port *our_port, *other_port;
class Pdss1 *our_pdss1, *other_pdss1;
- /* are we a candidate to join a join */
+ /* are we a candidate to join a join? */
our_join = find_join_id(ea_endpoint->ep_join_id);
if (!our_join) {
PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: our join doesn't exist anymore.\n", ea_endpoint->ep_serial);
other_eapp = other_eapp->next;
}
if (!other_eapp) {
- PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: no other endpoint on same isdn interface with port on hold.\n", ea_endpoint->ep_serial);
+ PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: no other endpoint on same isdn terminal.\n", ea_endpoint->ep_serial);
return;
}
- PDEBUG(DEBUG_EPOINT, "EPOINT(%d) port on hold found.\n", ea_endpoint->ep_serial);
+ PDEBUG(DEBUG_EPOINT, "EPOINT(%d) port with same terminal found.\n", ea_endpoint->ep_serial);
/* if we have the same join */
if (other_eapp->ea_endpoint->ep_join_id == ea_endpoint->ep_join_id) {
- PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: we an the other have the same join.\n", ea_endpoint->ep_serial);
+ PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: we and the other have the same join.\n", ea_endpoint->ep_serial);
return;
}
other_join = find_join_id(other_eapp->ea_endpoint->ep_join_id);
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for lcr 1.5.
+# Generated by GNU Autoconf 2.63 for lcr 1.6.
#
# Report bugs to <andreas@eversberg.eu>.
#
# Identity of this package.
PACKAGE_NAME='lcr'
PACKAGE_TARNAME='lcr'
-PACKAGE_VERSION='1.5'
-PACKAGE_STRING='lcr 1.5'
+PACKAGE_VERSION='1.6'
+PACKAGE_STRING='lcr 1.6'
PACKAGE_BUGREPORT='andreas@eversberg.eu'
ac_unique_file="main.c"
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures lcr 1.5 to adapt to many kinds of systems.
+\`configure' configures lcr 1.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of lcr 1.5:";;
+ short | recursive ) echo "Configuration of lcr 1.6:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-lcr configure 1.5
+lcr configure 1.6
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by lcr $as_me 1.5, which was
+It was created by lcr $as_me 1.6, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE=lcr
- VERSION=1.5
+ VERSION=1.6
cat >>confdefs.h <<_ACEOF
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by lcr $as_me 1.5, which was
+This file was extended by lcr $as_me 1.6, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-lcr config.status 1.5
+lcr config.status 1.6
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
dnl This keeps being the first instruction.
dnl Change the 2nd argument if the version increases
dnl 1st + 2nd argument is used for distribution package name
-AC_INIT(lcr, 1.5, andreas@eversberg.eu)
+AC_INIT(lcr, 1.6, andreas@eversberg.eu)
AC_PREREQ(2.59)
AC_CONFIG_SRCDIR([main.c])
AM_CONFIG_HEADER(config.h)
# fix warnings from autoconf + automake
AC_GNU_SOURCE
# AC_USE_SYSTEM_EXTENSIONS
-AM_INIT_AUTOMAKE(lcr,1.5)
+AM_INIT_AUTOMAKE(lcr,1.6)
--- /dev/null
+!
+! OpenBSC configuration saved from vty
+! !
+password foo
+!
+line vty
+ no login
+!
+network
+! select county code and network code. 1 equals test network
+ network country code 1
+ mobile network code 1
+! name the network
+ short name OpenBSC
+ long name OpenBSC
+! define first bts (counted from 0)
+ bts 0
+ type bs11
+ band GSM900
+ location_area_code 1
+ training_sequence_code 7
+ base_station_id_code 63
+ oml e1 line 0 timeslot 1 sub-slot full
+ oml e1 tei 25
+! define tranceiver for this bts (counted from 0)
+ trx 0
+! frequency number from 1 to 124 (GSM900)
+ arfcn 121
+ max_power_red 0
+! all line numbers (0 in this case) must match your mISDN port
+ rsl e1 line 0 timeslot 1 sub-slot full
+ rsl e1 tei 1
+ timeslot 0
+ phys_chan_config CCCH+SDCCH4
+ e1 line 0 timeslot 1 sub-slot full
+ timeslot 1
+ phys_chan_config SDCCH8
+ e1 line 0 timeslot 2 sub-slot 1
+ timeslot 2
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 2 sub-slot 2
+ timeslot 3
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 2 sub-slot 3
+ timeslot 4
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 0
+ timeslot 5
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 1
+ timeslot 6
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 2
+ timeslot 7
+ phys_chan_config TCH/F
+ e1 line 0 timeslot 3 sub-slot 3
+! uncomment this for second TRX, if enabled on BS11
+! trx 1
+! arfcn 123
+! max_power_red 0
+! rsl e1 line 0 timeslot 1 sub-slot full
+! rsl e1 tei 2
+! timeslot 0
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 4 sub-slot 0
+! timeslot 1
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 4 sub-slot 1
+! timeslot 2
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 4 sub-slot 2
+! timeslot 3
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 4 sub-slot 3
+! timeslot 4
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 5 sub-slot 0
+! timeslot 5
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 5 sub-slot 1
+! timeslot 6
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 5 sub-slot 2
+! timeslot 7
+! phys_chan_config TCH/F
+! e1 line 0 timeslot 5 sub-slot 3
+! enable this for second BS11 on mISDN port 1
+! bts 1
+! type bs11
+! band GSM900
+! location_area_code 2
+! training_sequence_code 7
+! base_station_id_code 63
+! oml e1 line 1 timeslot 6 sub-slot full
+! oml e1 tei 25
+! trx 0
+! arfcn 122
+! max_power_red 0
+! rsl e1 line 1 timeslot 6 sub-slot full
+! rsl e1 tei 1
+! timeslot 0
+! phys_chan_config CCCH+SDCCH4
+! e1 line 1 timeslot 7 sub-slot 0
+! timeslot 1
+! phys_chan_config SDCCH8
+! e1 line 1 timeslot 7 sub-slot 1
+! timeslot 2
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 7 sub-slot 2
+! timeslot 3
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 7 sub-slot 3
+! timeslot 4
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 8 sub-slot 0
+! timeslot 5
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 8 sub-slot 1
+! timeslot 6
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 8 sub-slot 2
+! timeslot 7
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 8 sub-slot 3
+! trx 1
+! arfcn 124
+! max_power_red 0
+! rsl e1 line 1 timeslot 6 sub-slot full
+! rsl e1 tei 2
+! timeslot 0
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 9 sub-slot 0
+! timeslot 1
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 9 sub-slot 1
+! timeslot 2
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 9 sub-slot 2
+! timeslot 3
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 9 sub-slot 3
+! timeslot 4
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 10 sub-slot 0
+! timeslot 5
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 10 sub-slot 1
+! timeslot 6
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 10 sub-slot 2
+! timeslot 7
+! phys_chan_config TCH/F
+! e1 line 1 timeslot 10 sub-slot 3
+
+
int notify;
int plan = 0, type = -1, present = 0;
- printf("if = %d\n", param->notifyinfo.notify);
+// printf("if = %d\n", param->notifyinfo.notify);
if (param->notifyinfo.notify>INFO_NOTIFY_NONE)
notify = param->notifyinfo.notify & 0x7f;
else
struct gsm_mncc *mncc;
int notify;
- printf("if = %d\n", param->notifyinfo.notify);
+// printf("if = %d\n", param->notifyinfo.notify);
if (param->notifyinfo.notify>INFO_NOTIFY_NONE) {
notify = param->notifyinfo.notify & 0x7f;
if (p_state!=PORT_STATE_CONNECT /*&& p_state!=PORT_STATE_IN_PROCEEDING*/ && p_state!=PORT_STATE_IN_ALERTING) {
if (!join)
return(0);
- if (join->j_type != JOIN_TYPE_REMOTE)
+ if (join->j_type == JOIN_TYPE_REMOTE)
return(2);
if (join->j_type != JOIN_TYPE_PBX)
return;
}
+ /* count relations */
+ num=joinpbx_countrelations(j_serial);
+
/* process party line */
if (message_type == MESSAGE_SETUP) if (param->setup.partyline && !j_partyline) {
j_partyline = param->setup.partyline;
release(j_relation, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL);
return; // must return, because join IS destroyed
}
- /* remove all relations that are in called */
+ /* in a conf, we don't kill the other members */
+ if (num > 2) {
+ release(relation, 0, 0);
+ return;
+ }
+ /* remove all relations that are of called type */
release_again2:
reltemp = j_relation;
while(reltemp) {
return; // must return, because join may be destroyed
}
- /* count relations */
- num=joinpbx_countrelations(j_serial);
-
/* check number of relations */
if (num > 2) {
PDEBUG(DEBUG_JOIN, "join has more than two relations so there is no need to send a message.\n");