SecureTCPSocket.hh

Go to the documentation of this file.
00001 // ----------------------------------------------------------------------------
00002 // CERTI - HLA RunTime Infrastructure
00003 // Copyright (C) 2002-2005  ONERA
00004 //
00005 // This program is free software ; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public License
00007 // as published by the Free Software Foundation ; either version 2 of
00008 // the License, or (at your option) any later version.
00009 //
00010 // This program is distributed in the hope that it will be useful, but
00011 // WITHOUT ANY WARRANTY ; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this program ; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00018 // USA
00019 //
00020 // $Id: SecureTCPSocket.hh,v 3.9 2008/10/13 11:27:51 gotthardp Exp $
00021 // ----------------------------------------------------------------------------
00022 
00023 #ifndef CERTI_SECURE_TCP_SOCKET_HH
00024 #define CERTI_SECURE_TCP_SOCKET_HH
00025 
00026 #include "SocketTCP.hh"
00027 #include "GSSAPIHandler.hh"
00028 #include "certi.hh"
00029 
00030 #ifndef _WIN32           
00031   #include <unistd.h>  
00032   #include <pwd.h>
00033 #endif
00034 
00035 namespace certi {
00036 
00037 // ============================================================================
00040 class CERTI_EXPORT SecureTCPSocket : public SocketTCP
00041 {
00042 public:
00043     SecureTCPSocket();
00044     virtual ~SecureTCPSocket();
00045 
00046     virtual void send(const unsigned char *, size_t)
00047         throw (NetworkError, NetworkSignal);
00048     virtual void receive(void *Buffer, unsigned long Size)
00049         throw (NetworkError, NetworkSignal);
00050 
00051     // FIXME: Peut-etre devrait-on regarder si un message est pret en interne,
00052     // et balancer une exception dans ce cas la.
00053     virtual bool isDataReady() const { return SocketTCP::isDataReady(); }
00054 
00055     // Return Peer's principal name. Must not be freed ! Principal name is
00056     // without any network address part(starting with a '@').
00057     const char *getPeerName();
00058 
00059 private:
00060 #ifdef WITH_GSSAPI
00061     // Initial Token exchange to open the GSS API session. The client send the
00062     // initial token to a server principal whose name is fixed.
00063     void sendInitialToken();
00064     void receiveInitialToken();
00065 
00066     // Input/Output methods. Parameters of SendMessage are unscrambled
00067     // messages. GetMessage read an incoming message from the TCP
00068     // socket, decrypt and verify it, and then store it in
00069     // InternalBuffer. Call GetMessagePart to retrieve it.
00070     void sendMessage(void *Buffer, unsigned long Size);
00071     void getMessage();
00072 
00073     // Copy a part of an already received and decrypted message to buffer.
00074     // The copied part is(Size) bytes long. If(Size) bytes are not available,
00075     // an exception is raised.
00076     void getMessagePart(void *Buffer, unsigned long Size);
00077 
00078     bool SessionInitialized ;
00079     bool DecryptedMessageReady ;
00080 
00081     GSSAPIHandler *GSSHandler ;
00082 
00083     // GSSAPI buffer for incming messages. Memory is allocated by GSSHandler
00084     // but deleted locally after use. Base offset is zero.
00085     gss_buffer_desc IncomingBuffer ;
00086     unsigned long CurrentOffset ; // Current offset in buffer.
00087 
00088 #endif // WITH_GSSAPI
00089 
00090     char *PeerName ;
00091 };
00092 
00093 } // namespace certi
00094 
00095 #endif // CERTI_SECURE_TCP_SOCKET_HH
00096 
00097 // $Id: SecureTCPSocket.hh,v 3.9 2008/10/13 11:27:51 gotthardp Exp $
00098 

Generated on Thu Apr 30 15:53:50 2009 for CERTIDeveloperDocumentation by doxygen 1.5.5