1 /* 2 * Copyright (c) 2007, Cameron Rich 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * * Redistributions of source code must retain the above copyright notice, 10 * this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * * Neither the name of the axTLS project nor the names of its contributors 15 * may be used to endorse or promote products derived from this software 16 * without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 /* 32 * A wrapper around the unmanaged interface to give a semi-decent Java API 33 */ 34 35 package axTLSj; 36 37 import java.net.*; 38 39 /** 40 * @class SSLClient 41 * @ingroup java_api 42 * @brief The client context. 43 * 44 * All client connections are started within a client context. 45 */ 46 public class SSLClient extends SSLCTX 47 { 48 /** 49 * @brief Start a new client context. 50 * 51 * @see SSLCTX for details. 52 */ SSLClient(int options, int num_sessions)53 public SSLClient(int options, int num_sessions) 54 { 55 super(options, num_sessions); 56 } 57 58 /** 59 * @brief Establish a new SSL connection to an SSL server. 60 * 61 * It is up to the application to establish the initial socket connection. 62 * 63 * This is a blocking call - it will finish when the handshake is 64 * complete (or has failed). 65 * 66 * Call dispose() when the connection is to be removed. 67 * @param s [in] A reference to a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api">Socket</A> object. 68 * @param session_id [in] A 32 byte session id for session resumption. This 69 * can be null if no session resumption is not required. 70 * @return An SSL object reference. Use SSL.handshakeStatus() to check 71 * if a handshake succeeded. 72 */ connect(Socket s, byte[] session_id)73 public SSL connect(Socket s, byte[] session_id) 74 { 75 int client_fd = axtlsj.getFd(s); 76 byte sess_id_size = (byte)(session_id != null ? 77 session_id.length : 0); 78 return new SSL(axtlsj.ssl_client_new(m_ctx, client_fd, session_id, 79 sess_id_size)); 80 } 81 } 82