/* * Copyright 2007 Sun Microsystems, Inc. * * This file is part of jVoiceBridge. * * jVoiceBridge is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation and distributed hereunder * to you. * * jVoiceBridge 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Sun designates this particular file as subject to the "Classpath" * exception as provided by Sun in the License file that accompanied this * code. */ package com.sun.voip.server; import com.sun.voip.CallParticipant; import com.sun.voip.Logger; import com.sun.voip.CallEventListener; public class TwoPartyCallHandler extends Thread { private CallEventListener callEventListener; private CallParticipant cp; public TwoPartyCallHandler(CallEventListener csl, CallParticipant cp) { this.callEventListener = csl; this.cp = cp; } /* * start a two party call */ public void run() { OutgoingCallHandler callHandler1 = new OutgoingCallHandler(callEventListener, cp); synchronized(this) { callHandler1.start(); // call first party /* * Wait for first party to answer. */ if (callHandler1.waitForCallToBeAnswered() == false) { return; } } CallParticipant cp2 = new CallParticipant(); cp2.setCallAnswerTimeout(cp.getCallAnswerTimeout()); cp2.setCallAnsweredTreatment(cp.getSecondPartyTreatment()); cp2.setCallEndTreatment(cp.getSecondPartyCallEndTreatment()); cp2.setCallId(cp.getSecondPartyCallId()); cp2.setConferenceId(cp.getConferenceId()); if (cp.getSecondPartyName() != null) { cp2.setName(cp.getSecondPartyName()); } else { cp2.setName(cp.getSecondPartyNumber()); } cp2.setDisplayName(cp.getName()); if (cp2.getCallId() == null) { cp2.setCallId(CallHandler.getNewCallId()); } cp2.setPhoneNumber(cp.getSecondPartyNumber()); cp2.setVoiceDetection(cp.getSecondPartyVoiceDetection()); OutgoingCallHandler callHandler2 = new OutgoingCallHandler(callEventListener, cp2); synchronized(this) { /* * Each call has to know about the other so that when * one hangs up, the other call is terminated. */ callHandler1.setOtherCall(callHandler2); callHandler2.setOtherCall(callHandler1); callHandler2.start(); // call second party if (callHandler2.waitForCallToBeAnswered() == true) { /* * Second party answered, stop treatment to first party. */ callHandler1.stopCallAnsweredTreatment(); callHandler1.stopCallEstablishedTreatment(); } } } }