1 /* Copyright (C) 2005 Martin Koegler 2 * Copyright (C) 2010 TigerVNC Team 3 * 4 * This is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This software is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this software; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 17 * USA. 18 */ 19 20 #ifndef __RDR_TLSOUTSTREAM_H__ 21 #define __RDR_TLSOUTSTREAM_H__ 22 23 #ifdef HAVE_CONFIG_H 24 #include <config.h> 25 #endif 26 27 #ifdef HAVE_GNUTLS 28 #include <gnutls/gnutls.h> 29 #include <rdr/OutStream.h> 30 31 namespace rdr { 32 33 class TLSOutStream : public OutStream { 34 public: 35 TLSOutStream(OutStream* out, gnutls_session_t session); 36 virtual ~TLSOutStream(); 37 38 void flush(); 39 size_t length(); 40 virtual void cork(bool enable); 41 42 protected: 43 virtual void overrun(size_t needed); 44 45 private: 46 size_t writeTLS(const U8* data, size_t length); 47 static ssize_t push(gnutls_transport_ptr_t str, const void* data, size_t size); 48 49 gnutls_session_t session; 50 OutStream* out; 51 size_t bufSize; 52 U8* start; 53 size_t offset; 54 55 Exception* saved_exception; 56 }; 57 }; 58 59 #endif 60 #endif 61