1 package gov.nist.javax.sip; 2 3 import gov.nist.core.net.AddressResolver; 4 import gov.nist.javax.sip.clientauthutils.AccountManager; 5 import gov.nist.javax.sip.clientauthutils.AuthenticationHelper; 6 import gov.nist.javax.sip.clientauthutils.SecureAccountManager; 7 import gov.nist.javax.sip.header.extensions.JoinHeader; 8 import gov.nist.javax.sip.header.extensions.ReplacesHeader; 9 10 import java.io.IOException; 11 import java.net.InetAddress; 12 import java.net.SocketAddress; 13 import java.util.Collection; 14 15 import javax.sip.Dialog; 16 import javax.sip.SipStack; 17 import javax.sip.header.HeaderFactory; 18 19 /** 20 * SIP Stack extensions to be added to the next spec revision. Only these may be safely used in 21 * the interim between now and the next release. SipStackImpl implements this interface. 22 * 23 * The following new stack initialization flags are defined (not the gov.nist prefix will be 24 * dropped when the spec is updated): 25 * 26 * <ul> 27 *<li>gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING 28 *<li>gov.nist.javax.sip.IS_BACK_TO_BACK_USER_AGENT 29 *<li>gov.nist.javax.sip.DELIVER_TERMINATED_EVENT_FOR_NULL_DIALOG 30 *<li>gov.nist.javax.sip.MAX_FORK_TIME_SECONDS 31 * </ul> 32 * @author M. Ranganathan 33 * 34 */ 35 public interface SipStackExt extends SipStack { 36 37 /** 38 * Get the collection of dialogs currently in the Dialog table. This is useful for debugging 39 * purposes. 40 * 41 */ getDialogs()42 public Collection<Dialog> getDialogs(); 43 44 /** 45 * Get the ReferedTo dialog in the Replaces header. 46 * 47 * @return Dialog object matching the Replaces header, provided it is in an appropriate state 48 * to be replaced, <code>null</code> otherwise 49 * 50 * @since 2.0 51 */ getReplacesDialog(ReplacesHeader replacesHeader)52 public Dialog getReplacesDialog(ReplacesHeader replacesHeader); 53 54 /** 55 * Get the authentication helper. 56 * 57 * 58 * @param accountManager -- account manager (for fetching credentials). 59 * @param headerFactory -- header factory. 60 * 61 * @return - the authentication helper which can be used for generating the appropriate 62 * headers for handling authentication challenges for user agents. 63 * 64 * @since 2.0 65 */ getAuthenticationHelper(AccountManager accountManager, HeaderFactory headerFactory)66 public AuthenticationHelper getAuthenticationHelper(AccountManager accountManager, 67 HeaderFactory headerFactory); 68 69 /** 70 * Get the authentication helper. 71 * 72 * 73 * @param accountManager -- account manager (for fetching credentials). 74 * @param headerFactory -- header factory. 75 * 76 * @return - the authentication helper which can be used for generating the appropriate 77 * headers for handling authentication challenges for user agents. 78 * 79 * @since 2.0 80 */ getSecureAuthenticationHelper(SecureAccountManager accountManager, HeaderFactory headerFactory)81 public AuthenticationHelper getSecureAuthenticationHelper(SecureAccountManager accountManager, 82 HeaderFactory headerFactory); 83 84 /** 85 * Set the address resolution interface. The address resolver allows you to register custom 86 * lookup schemes ( for example DNS SRV lookup ) that are not directly supported by the JDK. 87 * 88 * @param addressResolver -- the address resolver to set. 89 * 90 * @since 2.0 91 */ setAddressResolver(AddressResolver addressResolver)92 public void setAddressResolver(AddressResolver addressResolver); 93 94 /** 95 * Get the dialog in the Join header. 96 * 97 * @return Dialog object matching the Join header, provided it is in an appropriate state to 98 * be replaced, <code>null</code> otherwise 99 * 100 * @since 2.0 101 */ getJoinDialog(JoinHeader joinHeader)102 public Dialog getJoinDialog(JoinHeader joinHeader); 103 104 /** 105 * Set the list of cipher suites supported by the stack. A stack can have only one set of 106 * suites. These are not validated against the supported cipher suites of the java runtime, so 107 * specifying a cipher here does not guarantee that it will work.<br> 108 * The stack has a default cipher suite of: 109 * <ul> 110 * <li> TLS_RSA_WITH_AES_128_CBC_SHA </li> 111 * <li> SSL_RSA_WITH_3DES_EDE_CBC_SHA </li> 112 * <li> TLS_DH_anon_WITH_AES_128_CBC_SHA </li> 113 * <li> SSL_DH_anon_WITH_3DES_EDE_CBC_SHA </li> 114 * </ul> 115 * 116 * <b>NOTE: This function must be called before adding a TLS listener</b> 117 * 118 * @since 2.0 119 * @param newCipherSuites -- The new set of ciphers to support. 120 * 121 */ setEnabledCipherSuites(String[] newCipherSuites)122 public void setEnabledCipherSuites(String[] newCipherSuites); 123 124 /** 125 * Creates and binds, if necessary, a TCP socket connected to the specified 126 * destination address and port and then returns its local address. 127 * 128 * @param dst the destination address that the socket would need to connect 129 * to. 130 * @param dstPort the port number that the connection would be established 131 * with. 132 * @param localAddress the address that we would like to bind on 133 * (null for the "any" address). 134 * @param localPort the port that we'd like our socket to bind to (0 for a 135 * random port). 136 * 137 * @return the SocketAddress that this handler would use when connecting to 138 * the specified destination address and port. 139 * 140 * @throws IOException 141 */ obtainLocalAddress(InetAddress dst, int dstPort, InetAddress localAddress, int localPort)142 public SocketAddress obtainLocalAddress(InetAddress dst, int dstPort, 143 InetAddress localAddress, int localPort) 144 throws IOException; 145 146 } 147