/* * CalloutPlay.java * * Copyright (c) 2004 - 2007 Brekeke Software, Inc. All rights reserved. * * BREKEKE JTAPI SDK Sample Program * Revised: May 17, 2007 */ /***********************************************************************************/ /* This sample program will call a SIP user 1111. */ /* After the user 1111 answers, this program play a music and then drop the call. */ /** ********************************************************************************/ import javax.telephony.*; import javax.telephony.media.*; import javax.telephony.callcontrol.*; import com.brekeke.jtapi.*; public class CalloutPlay { static private String DialNo = "1111"; public static void main(String args[]) { Provider myprovider = null; try { JtapiPeer peer = JtapiPeerFactory.getJtapiPeer("com.brekeke.jtapi.BrPeer"); // MUST HAVE /* Set your work directory of JTAPI in the second argument */ myprovider = peer.getProvider("BrProvider; pdir=C:/JTAPI1.0/work"); /* Add this if you need to know Register is successful or not */ myprovider.addProviderListener(new CalloutPlay.MyProviderListener()); /* * Start provider and register this Provider's number (1234) to Brekeke * SIP Server. See the provider's number in work/provider.properties file. */ myprovider.start(); } catch (Exception excp) { System.out.println("Can't get Provider: " + excp.toString()); System.exit(0); } // Get caller (1234)'s Address & Terminal Address origaddr = null; Terminal origterm = null; try { // Choose one address from the addresses this provider has origaddr = myprovider.getAddress("1234"); } catch (Exception excp) { System.out.println("Exception when getting address: " + excp.toString()); System.exit(0); } try { // Get Terminals which has this Address Terminal[] terminals = origaddr.getTerminals(); if (terminals == null) { System.out.println("No Terminals on Address."); System.exit(0); } //Choose one origterm = terminals[0]; } catch (Exception excp) { System.out.println("Exception when getting terminal: " + excp.toString()); } // Create the telephone call object and add an listener. Call mycall = null; try { mycall = myprovider.createCall(); mycall.addCallListener(new MyCallListener()); } catch (Exception excp) { System.out.println("Exception when creating a call: " + excp.toString()); } // Place the telephone call to number DialNo try { Connection c[] = mycall.connect(origterm, origaddr, DialNo); } catch (Exception excp) { System.out.println("Exception when connecting: " + excp.toString()); excp.printStackTrace(); } } /* Listener for checking Register request result */ static class MyProviderListener implements com.brekeke.jtapi.BrProviderListener { public void eventRegistFail(BrProviderEvent event) { System.out.println("Register failed:" + event.getSourceUrl()+" ("+event.getStatus()+")"); } public void eventRegistSuccess(BrProviderEvent event) { System.out.println("Register successful:" + event.getSourceUrl()+" ("+event.getStatus()+")"); } public void providerInService(ProviderEvent event) { System.out.println("Provider is now in service"); } public void providerEventTransmissionEnded(ProviderEvent event) { } /* Not supported */ public void providerOutOfService(ProviderEvent event) { } /* Not supported */ public void providerShutdown(ProviderEvent event) { System.out.println("Provider shutdown"); } } /** * Listener for Call ** */ static class MyCallListener implements javax.telephony.TerminalConnectionListener { public void callActive(CallEvent event) { } public void callEventTransmissionEnded(CallEvent event) { } public void callInvalid(CallEvent event) { } public void connectionAlerting(ConnectionEvent event) { } // Start playing muric when the connection is connected public void connectionConnected(ConnectionEvent event) { Connection con = event.getConnection(); Address addr = con.getAddress(); String addr_name = addr.getName(); System.out.println("Connection Connected:" + addr_name); if (addr_name.compareTo(DialNo) == 0) { CallControlCall call = (CallControlCall) con.getCall(); try { playCall(call); } catch (Exception e) { System.out.println("Exception when playcall: " + e); } } } public void connectionCreated(ConnectionEvent event) { } public void connectionDisconnected(ConnectionEvent event) { Connection con = event.getConnection(); Address addr = con.getAddress(); String addr_name = addr.getName(); System.out.println("Connection is disconnected:" + addr_name); con.getCall().getProvider().shutdown(); System.exit(0); } public void connectionFailed(ConnectionEvent event) { Connection con = event.getConnection(); Address addr = con.getAddress(); String addr_name = addr.getName(); int cause = event.getCause(); System.out.println("Connection Failed:" + addr_name + " Cause:"+cause); /// New!!! System.exit(0); } public void connectionInProgress(ConnectionEvent event) { } public void connectionUnknown(ConnectionEvent event) { } public void multiCallMetaMergeEnded(MetaEvent event) { } /* Not supported */ public void multiCallMetaMergeStarted(MetaEvent event) { } /* Not supported */ public void multiCallMetaTransferEnded(MetaEvent event) { } /* Not supported */ public void multiCallMetaTransferStarted(MetaEvent event) { } /* Not supported */ public void singleCallMetaProgressEnded(MetaEvent event) { } /* Not supported */ public void singleCallMetaProgressStarted(MetaEvent event) { } /* Not supported */ public void singleCallMetaSnapshotEnded(MetaEvent event) { } /* Not supported */ public void singleCallMetaSnapshotStarted(MetaEvent event) { } /* Not supported */ public void terminalConnectionActive(TerminalConnectionEvent event) { } public void terminalConnectionCreated(TerminalConnectionEvent event) { } public void terminalConnectionDropped(TerminalConnectionEvent event) { } public void terminalConnectionPassive(TerminalConnectionEvent event) { } public void terminalConnectionRinging(TerminalConnectionEvent event) { } public void terminalConnectionUnknown(TerminalConnectionEvent event) { } } // playCall static void playCall(Call call) throws Exception { new Thread(new CallPlayer(call)).start(); } static class CallPlayer extends BasicMediaService implements Runnable { static RTC[] promptRTC = { RTC.SigDet_StopPlay }; CallControlCall call = null; CallPlayer(Call call) { super((MediaProvider) call.getProvider()); this.call = (CallControlCall) call; } public void run() { try { bindToCall(ConfigSpec.basicConfig, call); play("/sound/hold.ul", 4, promptRTC, null); //play sound file // in ulaw format call.drop(); //Drop call } catch (Exception ex) { System.err.println(ex); } if (isBound()) try { release(); } catch (Exception ex) { } } } }