Revision: 61406361d98f
Author: unknown <yulian@Venera.(none)>
Date: Sat Jan 19 09:27:44 2013
Log: Resolved OOB Generator problems
Added components and tones OOB tests.
Resolved mgcp byte to integer bug
http://code.google.com/p/mediaserver/source/detail?r=61406361d98f
Added:
/component/src/test/java/org/mobicents/media/server/component/oob/OOBMixerTest.java
/component/src/test/java/org/mobicents/media/server/component/oob/OOBReceiver.java
/component/src/test/java/org/mobicents/media/server/component/oob/OOBSender.java
/component/src/test/java/org/mobicents/media/server/component/oob/OOBSplitterTest.java
Modified:
/client/jsr-309/tck/deps/mgcp-driver-3.0.0.FINAL-SNAPSHOT.jar
/client/jsr-309/tck/media/decreasingvolume-recorded.wav
/client/jsr-309/tck/server.log
/controls/mgcp/src/main/java/org/mobicents/media/server/mgcp/tx/GlobalTransactionManager.java
/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/GeneratorImpl.java
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfBufferingTest.java
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfTest.java
=======================================
--- /dev/null
+++
/component/src/test/java/org/mobicents/media/server/component/oob/OOBMixerTest.java
Sat Jan 19 09:27:44 2013
@@ -0,0 +1,162 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.mobicents.media.server.component.oob;
+
+import java.io.IOException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.mobicents.media.MediaSink;
+import org.mobicents.media.server.scheduler.Clock;
+import org.mobicents.media.server.scheduler.DefaultClock;
+import org.mobicents.media.server.scheduler.Scheduler;
+import org.mobicents.media.server.spi.format.AudioFormat;
+import org.mobicents.media.server.spi.format.FormatFactory;
+
+/**
+ *
+ * @author yulian oifa
+ */
+public class OOBMixerTest {
+
+ private Clock clock;
+ private Scheduler scheduler;
+
+ private OOBSender sender1;
+ private OOBSender sender2;
+ private OOBSender sender3;
+
+ private OOBReceiver receiver;
+ private OOBMixer mixer;
+
+ private OOBComponent sender1Component;
+ private OOBComponent sender2Component;
+ private OOBComponent sender3Component;
+ private OOBComponent receiverComponent;
+
+ public OOBMixerTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ clock = new DefaultClock();
+
+ scheduler = new Scheduler();
+ scheduler.setClock(clock);
+ scheduler.start();
+
+ sender1 = new OOBSender(scheduler);
+ sender2 = new OOBSender(scheduler);
+ sender3 = new OOBSender(scheduler);
+ receiver = new OOBReceiver("receiver",scheduler);
+
+ sender1Component=new OOBComponent(1);
+ sender1Component.addInput(sender1.getOOBInput());
+ sender1Component.updateMode(true,false);
+
+ sender2Component=new OOBComponent(2);
+ sender2Component.addInput(sender2.getOOBInput());
+ sender2Component.updateMode(true,false);
+
+ sender3Component=new OOBComponent(3);
+ sender3Component.addInput(sender3.getOOBInput());
+ sender3Component.updateMode(true,false);
+
+ receiverComponent=new OOBComponent(4);
+ receiverComponent.addOutput(receiver.getOOBOutput());
+ receiverComponent.updateMode(false,true);
+
+ mixer = new OOBMixer(scheduler);
+ mixer.addComponent(sender1Component);
+ mixer.addComponent(sender2Component);
+ mixer.addComponent(sender3Component);
+ mixer.addComponent(receiverComponent);
+ }
+
+ @After
+ public void tearDown() {
+ scheduler.stop();
+ }
+
+
+// @Test
+ public void testMixing() throws InterruptedException {
+ sender1.activate();
+ mixer.start();
+ receiver.activate();
+ Thread.sleep(1200);
+
+ sender2.activate();
+ Thread.sleep(1200);
+
+ sender3.activate();
+ Thread.sleep(1200);
+
+ mixer.stop();
+ sender1.deactivate();
+ sender2.deactivate();
+ sender3.deactivate();
+ receiver.deactivate();
+
+ System.out.println("mix execution count: " + mixer.mixCount);
+
+ int res = receiver.getPacketsCount();
+ System.out.println("Received packets count:" + res);
+ assertEquals(150, res, 5);
+ }
+
+ @Test
+ public void testMixingFailure() throws InterruptedException {
+ int N = 5;//100;
+ for (int i = 0; i < N; i++) {
+ System.out.println("Test # " + i);
+ testMixing();
+ }
+ }
+
+ @Test
+ public void testRecycle() throws InterruptedException {
+ testMixing();
+
+ mixer.release(sender1Component);
+ mixer.addComponent(sender1Component);
+
+ testMixing();
+ }
+}
=======================================
--- /dev/null
+++
/component/src/test/java/org/mobicents/media/server/component/oob/OOBReceiver.java
Sat Jan 19 09:27:44 2013
@@ -0,0 +1,83 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.mobicents.media.server.component.oob;
+
+import org.mobicents.media.ComponentType;
+import org.mobicents.media.server.scheduler.Scheduler;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import org.mobicents.media.server.impl.AbstractSink;
+import org.mobicents.media.server.scheduler.Scheduler;
+import org.mobicents.media.server.spi.format.AudioFormat;
+import org.mobicents.media.server.spi.format.FormatFactory;
+import org.mobicents.media.server.spi.format.Formats;
+import org.mobicents.media.server.spi.memory.Frame;
+
+/**
+ *
+ * @author yulian oifa
+ */
+public class OOBReceiver extends AbstractSink {
+ private final static AudioFormat dtmf =
FormatFactory.createAudioFormat("telephone-event", 8000);
+ private long period = 20000000L;
+ private int packetSize = 4;
+ private int count=0;
+
+ private OOBOutput output;
+
+ public OOBReceiver(String name,Scheduler scheduler) {
+ super(name);
+ output=new
OOBOutput(scheduler,ComponentType.SPECTRA_ANALYZER.getType());
+ output.join(this);
+ }
+
+ public OOBOutput getOOBOutput()
+ {
+ return this.output;
+ }
+
+ public void activate()
+ {
+ this.count = 0;
+ System.out.println("start, count=" + count);
+ output.start();
+ }
+
+ public void deactivate()
+ {
+ output.stop();
+ }
+
+ public void onMediaTransfer(Frame frame) throws IOException {
+ byte[] data = frame.getData();
+ if(frame.getLength()==packetSize)
+ count++;
+ }
+
+ public int getPacketsCount() {
+ return this.count;
+ }
+}
+
=======================================
--- /dev/null
+++
/component/src/test/java/org/mobicents/media/server/component/oob/OOBSender.java
Sat Jan 19 09:27:44 2013
@@ -0,0 +1,82 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.mobicents.media.server.component.oob;
+
+import org.mobicents.media.ComponentType;
+import org.mobicents.media.server.impl.AbstractSource;
+import org.mobicents.media.server.scheduler.Scheduler;
+import org.mobicents.media.server.spi.format.AudioFormat;
+import org.mobicents.media.server.spi.format.FormatFactory;
+import org.mobicents.media.server.spi.format.Formats;
+import org.mobicents.media.server.spi.memory.Frame;
+import org.mobicents.media.server.spi.memory.Memory;
+
+/**
+ *
+ * @author yulian oifa
+ */
+public class OOBSender extends AbstractSource {
+ private final static AudioFormat dtmf =
FormatFactory.createAudioFormat("telephone-event", 8000);
+ private long period = 20000000L;
+ private int packetSize = 4;
+
+ private OOBInput input;
+ private int currentIndex=0;
+
+ public OOBSender(Scheduler scheduler) {
+ super("oob.generator", scheduler,scheduler.INPUT_QUEUE);
+
+ this.input=new OOBInput(ComponentType.SINE.getType());
+ this.connect(this.input);
+ }
+
+ public OOBInput getOOBInput()
+ {
+ return this.input;
+ }
+
+ @Override
+ public void activate() {
+ currentIndex=0;
+ super.activate();
+ }
+
+ @Override
+ public Frame evolve(long timestamp) {
+ if(currentIndex>=50)
+ return null;
+
+ Frame frame = Memory.allocate(packetSize);
+ byte[] data = frame.getData();
+ for (int i = 0; i < packetSize; i++)
+ data[i++] = 0;
+
+ frame.setOffset(0);
+ frame.setLength(packetSize);
+ frame.setDuration(period);
+ frame.setFormat(dtmf);
+
+ currentIndex++;
+ return frame;
+ }
+}
=======================================
--- /dev/null
+++
/component/src/test/java/org/mobicents/media/server/component/oob/OOBSplitterTest.java
Sat Jan 19 09:27:44 2013
@@ -0,0 +1,143 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.mobicents.media.server.component.oob;
+
+import java.io.IOException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.mobicents.media.MediaSource;
+
+import org.mobicents.media.server.scheduler.Clock;
+import org.mobicents.media.server.scheduler.DefaultClock;
+import org.mobicents.media.server.scheduler.Scheduler;
+
+/**
+ *
+ * @author yulian oifa
+ */
+public class OOBSplitterTest {
+
+ private Clock clock;
+ private Scheduler scheduler;
+
+ private OOBSender sender;
+
+ private OOBReceiver receiver1;
+ private OOBReceiver receiver2;
+ private OOBReceiver receiver3;
+
+ private OOBComponent senderComponent;
+ private OOBComponent receiver1Component;
+ private OOBComponent receiver2Component;
+ private OOBComponent receiver3Component;
+
+ private OOBSplitter splitter;
+
+ public OOBSplitterTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ clock = new DefaultClock();
+
+ scheduler = new Scheduler();
+ scheduler.setClock(clock);
+ scheduler.start();
+
+ sender = new OOBSender(scheduler);
+
+ receiver1 = new OOBReceiver("receiver-1",scheduler);
+ receiver2 = new OOBReceiver("receiver-2",scheduler);
+ receiver3 = new OOBReceiver("receiver-3",scheduler);
+
+ senderComponent=new OOBComponent(1);
+ senderComponent.addInput(sender.getOOBInput());
+ senderComponent.updateMode(true,false);
+
+ receiver1Component=new OOBComponent(2);
+ receiver1Component.addOutput(receiver1.getOOBOutput());
+ receiver1Component.updateMode(false,true);
+
+ receiver2Component=new OOBComponent(3);
+ receiver2Component.addOutput(receiver2.getOOBOutput());
+ receiver2Component.updateMode(false,true);
+
+ receiver3Component=new OOBComponent(4);
+ receiver3Component.addOutput(receiver3.getOOBOutput());
+ receiver3Component.updateMode(false,true);
+
+ splitter = new OOBSplitter(scheduler);
+ splitter.addInsideComponent(senderComponent);
+ splitter.addOutsideComponent(receiver1Component);
+ splitter.addOutsideComponent(receiver2Component);
+ splitter.addOutsideComponent(receiver3Component);
+ }
+
+ @After
+ public void tearDown() throws InterruptedException {
+ scheduler.stop();
+ }
+
+ @Test
+ public void testTransfer() throws InterruptedException {
+ sender.activate();
+ splitter.start();
+ receiver1.activate();
+ receiver2.activate();
+ receiver3.activate();
+
+ Thread.sleep(5000);
+
+ sender.deactivate();
+ splitter.stop();
+ receiver1.deactivate();
+ receiver2.deactivate();
+ receiver3.deactivate();
+
+ int res = receiver1.getPacketsCount();
+ assertEquals(50, res, 5);
+
+ res = receiver2.getPacketsCount();
+ assertEquals(50, res, 5);
+
+ res = receiver3.getPacketsCount();
+ assertEquals(50, res, 5);
+ }
+}
=======================================
--- /client/jsr-309/tck/deps/mgcp-driver-3.0.0.FINAL-SNAPSHOT.jar Fri Jan
18 02:21:19 2013
+++ /client/jsr-309/tck/deps/mgcp-driver-3.0.0.FINAL-SNAPSHOT.jar Sat Jan
19 09:27:44 2013
Binary file, no diff available.
=======================================
--- /client/jsr-309/tck/media/decreasingvolume-recorded.wav Sat Jan 12
12:37:26 2013
+++ /client/jsr-309/tck/media/decreasingvolume-recorded.wav Sat Jan 19
09:27:44 2013
Binary file, no diff available.
=======================================
--- /client/jsr-309/tck/server.log Fri Jan 18 13:27:08 2013
+++ /client/jsr-309/tck/server.log Sat Jan 19 09:27:44 2013
@@ -1,6 +1,6 @@
-2013-01-18 22:57:15,696 DEBUG [TestBase] (main) Loading
file:/opt/mobsource/medianew/client/jsr-309/tck/exclude-list.properties
-2013-01-18 22:57:15,697 INFO [Runner] (main) Start
mandatory.functional.mediagroup.PlayerTest.test_2_1_1_1_Play
javadoc::Joinable::1 javadoc::MediaGroup::1 javadoc::MediaGroup::6
javadoc::Player::1 javadoc::PlayerEvent::15
-2013-01-18 22:57:15,697 DEBUG [TestBase] (main) Getting a MsControlFactory
instance
-2013-01-18 22:57:15,719 INFO [DriverImpl] (main) Initializing MGCP on
/127.0.0.1:2729
-2013-01-18 22:57:15,732 WARN [JainMgcpStackImpl] (main) Failed to locate
properties file, using default values
-2013-01-18 22:57:15,742 INFO [JainMgcpStackImpl] (main) Jain Mgcp stack
bound to IP /127.0.0.1 and UDP port 2729
+2013-01-19 18:54:45,490 DEBUG [TestBase] (main) Loading
file:/opt/mobsource/medianew/client/jsr-309/tck/exclude-list.properties
+2013-01-19 18:54:45,495 INFO [Runner] (main) Start
mandatory.functional.mediagroup.PlayerTest.test_2_1_1_1_Play
javadoc::Joinable::1 javadoc::MediaGroup::1 javadoc::MediaGroup::6
javadoc::Player::1 javadoc::PlayerEvent::15
+2013-01-19 18:54:45,495 DEBUG [TestBase] (main) Getting a MsControlFactory
instance
+2013-01-19 18:54:45,517 INFO [DriverImpl] (main) Initializing MGCP on
/127.0.0.1:2729
+2013-01-19 18:54:45,530 WARN [JainMgcpStackImpl] (main) Failed to locate
properties file, using default values
+2013-01-19 18:54:45,540 INFO [JainMgcpStackImpl] (main) Jain Mgcp stack
bound to IP /127.0.0.1 and UDP port 2729
=======================================
---
/controls/mgcp/src/main/java/org/mobicents/media/server/mgcp/tx/GlobalTransactionManager.java
Fri Jan 18 13:27:08 2013
+++
/controls/mgcp/src/main/java/org/mobicents/media/server/mgcp/tx/GlobalTransactionManager.java
Sat Jan 19 09:27:44 2013
@@ -127,8 +127,9 @@
return managers[port-1].find(id);
}
- checkAddress(address[level]);
- return subManager[address[level]].find(address, port, level+1, id);
+ int intIndex = ((int)address[level]) & 0xFF;
+ checkAddress(intIndex);
+ return subManager[intIndex].find(address, port, level+1, id);
}
public Transaction allocateNew(InetSocketAddress source,int id) {
@@ -146,8 +147,9 @@
return null;
}
- checkAddress(address[level]);
- return subManager[address[level]].allocateNew(address, port, level+1,
id);
+ int intIndex = ((int)address[level]) & 0xFF;
+ checkAddress(intIndex);
+ return subManager[intIndex].allocateNew(address, port, level+1, id);
}
public TransactionManager createTransactionManager() {
@@ -197,9 +199,7 @@
}
}
- private void checkAddress(byte index) {
- int intIndex = ((int)index) & 0xFF;
-
+ private void checkAddress(int intIndex) {
if(subManager==null)
{
try
=======================================
---
/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/GeneratorImpl.java
Fri Jan 4 14:06:44 2013
+++
/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/GeneratorImpl.java
Sat Jan 19 09:27:44 2013
@@ -119,23 +119,25 @@
}
public void setOOBDigit(String digit) {
- if(oobDigit.charAt(0)>='0' && oobDigit.charAt(0)<='9')
- oobDigitValue=(oobDigit.charAt(0)-'0');
- else if(oobDigit.charAt(0)=='*')
+ if(digit.charAt(0)>='0' && digit.charAt(0)<='9')
+ oobDigitValue=(digit.charAt(0)-'0');
+ else if(digit.charAt(0)=='*')
oobDigitValue=10;
- else if(oobDigit.charAt(0)=='#')
+ else if(digit.charAt(0)=='#')
oobDigitValue=11;
- else if(oobDigit.charAt(0)>='A' && oobDigit.charAt(0)<='D')
- oobDigitValue=12+oobDigit.charAt(0)-'A';
- else if(oobDigit.charAt(0)>='a' && oobDigit.charAt(0)<='d')
- oobDigitValue=12+oobDigit.charAt(0)-'a';
+ else if(digit.charAt(0)>='A' && digit.charAt(0)<='D')
+ oobDigitValue=12+digit.charAt(0)-'A';
+ else if(digit.charAt(0)>='a' && digit.charAt(0)<='d')
+ oobDigitValue=12+digit.charAt(0)-'a';
else
- return;
+ return;
this.oobDigit=digit;
+ this.digit=null;
}
public void setDigit(String digit) {
+ this.oobDigit=null;
this.digit = digit;
this.time=0;
for (int i = 0; i < 4; i++) {
@@ -215,6 +217,17 @@
stop();
oobGenerator.deactivate();
}
+
+ @Override
+ public void wakeup() {
+ if(this.oobDigit!=null)
+ {
+ oobGenerator.index=0;
+ oobGenerator.wakeup();
+ }
+ else if(this.digit!=null)
+ super.wakeup();
+ }
private class OOBGenerator extends AbstractSource {
int index=0;
@@ -247,7 +260,7 @@
data[2]=(byte)((eventDuration>>8) & 0xFF);
data[3]=(byte)(eventDuration & 0xFF);
- frame.setOffset(0);
+ frame.setOffset(0);
frame.setLength(4);
frame.setTimestamp(getMediaTime());
frame.setDuration(20000000L);
=======================================
---
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfBufferingTest.java
Tue Jan 1 16:15:51 2013
+++
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfBufferingTest.java
Sat Jan 19 09:27:44 2013
@@ -16,6 +16,10 @@
import org.mobicents.media.server.spi.memory.Frame;
import org.mobicents.media.server.component.audio.AudioComponent;
import org.mobicents.media.server.component.audio.AudioMixer;
+
+import org.mobicents.media.server.component.oob.OOBComponent;
+import org.mobicents.media.server.component.oob.OOBMixer;
+
import org.mobicents.media.server.scheduler.Clock;
import org.mobicents.media.server.scheduler.DefaultClock;
import org.mobicents.media.server.scheduler.Scheduler;
@@ -39,6 +43,10 @@
private AudioComponent generatorComponent;
private AudioMixer audioMixer;
+ private OOBComponent oobDetectorComponent;
+ private OOBComponent oobGeneratorComponent;
+ private OOBMixer oobMixer;
+
private String tone;
public DtmfBufferingTest() {
@@ -80,6 +88,20 @@
audioMixer.addComponent(detectorComponent);
audioMixer.addComponent(generatorComponent);
+
+ oobMixer=new OOBMixer(scheduler);
+
+ oobDetectorComponent=new OOBComponent(1);
+ oobDetectorComponent.addOutput(detector.getOOBOutput());
+ oobDetectorComponent.updateMode(false,true);
+
+ oobGeneratorComponent=new OOBComponent(2);
+ oobGeneratorComponent.addInput(generator.getOOBInput());
+ oobGeneratorComponent.updateMode(true,false);
+
+ oobMixer.addComponent(oobDetectorComponent);
+ oobMixer.addComponent(oobGeneratorComponent);
+
tone="";
}
@@ -112,6 +134,29 @@
detector.addListener(this);
detector.flushBuffer();
+ //wait a bit for delivery
+ Thread.sleep(300);
+
+ assertEquals("1", tone);
+
+ tone="";
+ detector.removeListener(this);
+ //queue "1" into detector's buffer
+ generator.setOOBDigit("1");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ //assign listener and flush digit
+ detector.addListener(this);
+ detector.flushBuffer();
+
//wait a bit for delivery
Thread.sleep(300);
@@ -142,6 +187,35 @@
detector.addListener(this);
detector.flushBuffer();
+ //wait a bit for delivery
+ Thread.sleep(200);
+
+ assertEquals("12", tone);
+
+ tone="";
+ detector.removeListener(this);
+ //queue "1" into detector's buffer
+ generator.setOOBDigit("1");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ //queue "2" into detector's buffer
+ generator.setOOBDigit("2");
+ generator.wakeup();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ //assign listener and flush digit
+ detector.addListener(this);
+ detector.flushBuffer();
+
//wait a bit for delivery
Thread.sleep(200);
@@ -182,6 +256,41 @@
//assign listener and flush digit
detector.flushBuffer();
+ //wait a bit for delivery
+ Thread.sleep(200);
+
+ assertEquals("12", tone);
+
+ tone="";
+ //queue "1" into detector's buffer
+ generator.setOOBDigit("1");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ //queue "2" into detector's buffer
+ generator.setOOBDigit("2");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ assertEquals("12", tone);
+
+ //assign listener and flush digit
+ detector.flushBuffer();
+
//wait a bit for delivery
Thread.sleep(200);
@@ -223,115 +332,42 @@
Thread.sleep(200);
assertEquals("", tone);
- }
-
- /*@Test
- public void testGenerateFile()
- {
- try
- {
- java.io.File currFile=new File("testOutput.txt");
- java.io.FileOutputStream fout = new FileOutputStream(currFile);
- BufferedWriter writer = new BufferedWriter(new
OutputStreamWriter(fout));
- String currString;
-
- generator.setToneDuration(100);
- generator.setVolume(-20);
-
- for(int i=0;i<=9;i++)
- {
- writer.write("buffer[" + i + "]=new byte[] {");
-
- generator.setDigit(String.valueOf((char)(i+'0')));
- for(int j=0;j<5;j++)
- {
- Frame currFrame=generator.evolve(0L);
- byte[] data=currFrame.getData();
- for(int k=0;k<data.length;k++)
- {
- currString="(byte) 0X" +
String.format("%02X", data[k]);
- if(k<data.length-1 || j<4)
- currString+= ",";
-
- writer.write(currString);
- }
- }
-
- writer.write("};");
- writer.newLine();
- }
-
- writer.write("buffer[10]=new byte[] {");
-
- generator.setDigit("*");
- for(int j=0;j<5;j++)
- {
- Frame currFrame=generator.evolve(0L);
- byte[] data=currFrame.getData();
- for(int k=0;k<data.length;k++)
- {
- currString="(byte) 0X" +
String.format("%02X", data[k]);
- if(k<data.length-1 || j<4)
- currString+= ",";
-
- writer.write(currString);
- }
- }
-
- writer.write("};");
- writer.newLine();
-
- writer.write("buffer[11]=new byte[] {");
-
- generator.setDigit("#");
- for(int j=0;j<5;j++)
- {
- Frame currFrame=generator.evolve(0L);
- byte[] data=currFrame.getData();
- for(int k=0;k<data.length;k++)
- {
- currString="(byte) 0X" +
String.format("%02X", data[k]);
- if(k<data.length-1 || j<4)
- currString+= ",";
-
- writer.write(currString);
- }
- }
-
- writer.write("};");
- writer.newLine();
-
- for(int i=0;i<4;i++)
- {
- writer.write("buffer[" + (i+12) + "]=new byte[] {");
-
- generator.setDigit(String.valueOf((char)(i+'A')));
- for(int j=0;j<5;j++)
- {
- Frame currFrame=generator.evolve(0L);
- byte[] data=currFrame.getData();
- for(int k=0;k<data.length;k++)
- {
- currString="(byte) 0X" +
String.format("%02X", data[k]);
- if(k<data.length-1 || j<4)
- currString+= ",";
-
- writer.write(currString);
- }
- }
-
- writer.write("};");
- writer.newLine();
- }
-
- writer.flush();
- fout.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }*/
+
+ detector.removeListener(this);
+ //queue "1" into detector's buffer
+ generator.setOOBDigit("1");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ //queue "2" into detector's buffer
+ generator.setOOBDigit("2");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(200);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ //assign listener and flush digit
+ detector.addListener(this);
+ detector.clearBuffer();
+ detector.flushBuffer();
+
+ //wait a bit for delivery
+ Thread.sleep(200);
+
+ assertEquals("", tone);
+ }
public void process(DtmfEvent event) {
tone += event.getTone();
=======================================
---
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfTest.java
Tue Jan 1 16:15:51 2013
+++
/resources/telephony/dtmf/src/test/java/org/mobicents/media/server/impl/resource/dtmf/DtmfTest.java
Sat Jan 19 09:27:44 2013
@@ -13,6 +13,10 @@
import org.mobicents.media.server.component.audio.AudioComponent;
import org.mobicents.media.server.component.audio.AudioMixer;
+
+import org.mobicents.media.server.component.oob.OOBComponent;
+import org.mobicents.media.server.component.oob.OOBMixer;
+
import org.mobicents.media.server.scheduler.Clock;
import org.mobicents.media.server.scheduler.DefaultClock;
import org.mobicents.media.server.scheduler.Scheduler;
@@ -36,6 +40,10 @@
private AudioComponent generatorComponent;
private AudioMixer audioMixer;
+ private OOBComponent oobDetectorComponent;
+ private OOBComponent oobGeneratorComponent;
+ private OOBMixer oobMixer;
+
private String tone;
public DtmfTest() {
@@ -79,6 +87,19 @@
audioMixer.addComponent(detectorComponent);
audioMixer.addComponent(generatorComponent);
+
+ oobMixer=new OOBMixer(scheduler);
+
+ oobDetectorComponent=new OOBComponent(1);
+ oobDetectorComponent.addOutput(detector.getOOBOutput());
+ oobDetectorComponent.updateMode(false,true);
+
+ oobGeneratorComponent=new OOBComponent(2);
+ oobGeneratorComponent.addInput(generator.getOOBInput());
+ oobGeneratorComponent.updateMode(true,false);
+
+ oobMixer.addComponent(oobDetectorComponent);
+ oobMixer.addComponent(oobGeneratorComponent);
}
@After
@@ -106,6 +127,20 @@
audioMixer.stop();
assertEquals("1", tone);
+
+ tone="";
+ generator.setOOBDigit("1");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ assertEquals("1", tone);
}
@Test
@@ -121,7 +156,21 @@
detector.deactivate();
audioMixer.stop();
- assertEquals("2", tone);
+ assertEquals("2", tone);
+
+ tone="";
+ generator.setOOBDigit("2");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ assertEquals("2", tone);
}
@Test
@@ -137,6 +186,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("3", tone);
+
+ tone="";
+ generator.setOOBDigit("3");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("3", tone);
}
@@ -153,6 +216,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("4", tone);
+
+ tone="";
+ generator.setOOBDigit("4");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("4", tone);
}
@@ -169,6 +246,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("5", tone);
+
+ tone="";
+ generator.setOOBDigit("5");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("5", tone);
}
@@ -185,7 +276,21 @@
detector.deactivate();
audioMixer.stop();
- assertEquals("6", tone);
+ assertEquals("6", tone);
+
+ tone="";
+ generator.setOOBDigit("6");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
+ assertEquals("6", tone);
}
@Test
@@ -201,6 +306,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("7", tone);
+
+ tone="";
+ generator.setOOBDigit("7");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("7", tone);
}
@@ -217,6 +336,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("8", tone);
+
+ tone="";
+ generator.setOOBDigit("8");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("8", tone);
}
@@ -233,6 +366,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("9", tone);
+
+ tone="";
+ generator.setOOBDigit("9");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("9", tone);
}
@@ -249,6 +396,20 @@
detector.deactivate();
audioMixer.stop();
+ assertEquals("0", tone);
+
+ tone="";
+ generator.setOOBDigit("0");
+ generator.activate();
+ detector.activate();
+ oobMixer.start();
+
+ Thread.sleep(1000);
+
+ generator.deactivate();
+ detector.deactivate();
+ oobMixer.stop();
+
assertEquals("0", tone);
}