/* * CalloutSendDTMF.java * * Copyright (c) 2004 - 2007 Brekeke Software, Inc. All rights reserved. * * BREKEKE JTAPI SDK Sample Program */ /***********************************************************************************/ /* This sample program will call a SIP user 1111. */ /* After the user 1111 answers, this program will send DTMF and disconnect. */ /** ********************************************************************************/ import java.util.*; import javax.telephony.*; import javax.telephony.callcontrol.*; import javax.telephony.media.*; import com.brekeke.jtapi.*; public class CalloutSendDTMF { static private String DialNo = "4003"; public static void main(String args[]) { Provider myprovider = null; JtapiPeer peer = null; try { peer = JtapiPeerFactory.getJtapiPeer("com.brekeke.jtapi.BrPeer"); // MUST HAVE }catch(Exception excp){ System.out.println("Can't get Provider: " + excp.toString()); System.exit(0); } /* 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 */ try{ myprovider.addProviderListener(new CalloutSendDTMF.MyProviderListener()); myprovider.start(); } catch (Exception excp) { System.out.println("Can't get Provider: " + excp.toString()); System.exit(0); } // // We need to get the appropriate objects associated with the // originating side of the telephone call. // Address origaddr = null; Terminal origterm = null; try { // Choose one address from the addresses this application has origaddr = myprovider.getAddress("4321"); if (origaddr == null){ throw new Exception("No such address"); } } catch (Exception excp) { System.out.println("Exception when getting address: "+ excp.toString()); System.exit(0); } try { // Just get some Terminal on this Address Terminal[] terminals = origaddr.getTerminals(); if (terminals == null) { System.out.println("No Terminals on Address."); System.exit(0); } origterm = terminals[0]; } catch (Exception excp) { System.out.println("Exception when getting terminal: "+ excp.toString()); excp.printStackTrace(); } // 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()); excp.printStackTrace(); } // 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()); } public void eventRegistSuccess(BrProviderEvent event) { System.out.println("Register successful:" + event.getSourceUrl()); } public void providerInService(ProviderEvent event) { System.out.println("Provider bacame In Service"); } public void providerEventTransmissionEnded(ProviderEvent event) { } /* Not supported */ public void providerOutOfService(ProviderEvent event) { } /* Not supported */ public void providerShutdown(ProviderEvent event) { } } /** * 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) { } // When the connection is connected start send DTMF 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 { sendDTMF(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); 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 sendDTMF(Call call) throws Exception { new Thread(new DTMFsender(call)).start(); } static class DTMFsender extends BasicMediaService implements Runnable { CallControlCall call = null; Provider prov; DTMFsender(Call call) { super((MediaProvider) call.getProvider()); this.prov = call.getProvider(); this.call = (CallControlCall) call; } public void run() { try { bindToCall(ConfigSpec.basicConfig, call); String dtmf_method = "inband"; //inband or info String dtmf_wait = "300"; // wait between digits in millisecond Hashtable dict = new Hashtable(); dict.put("send_dtmf_method", dtmf_method); dict.put("send_dtmf_wait", dtmf_wait); this.sendSignals("123456789#*abcd", null, dict); call.drop(); //Drop call } catch (Exception ex) { System.err.println(ex); ex.printStackTrace(); } if (isBound()) try { release(); } catch (Exception ex) { } } } }