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);
     }

Reply via email to