--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/gcfprotocols/secureconnection/inc/nativesecureconnection.h Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+ *
+*/
+
+#ifndef NATIVESECURECONNECTION_H
+#define NATIVESECURECONNECTION_H
+
+#include <logger.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <openssl/x509v3.h>
+#include <openssl/bio.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+#include <openssl/dsa.h> // for DSA functions
+#include <openssl/crypto.h>
+#include <openssl/evp.h>
+#include <time.h>
+
+#include "nativesocketconnection.h"
+#include "javaosheaders.h"
+
+namespace java
+{
+
+/**
+ * This is the base class for Native Peer of secure sockets.
+ * It derives from NativeSocketConnection native class, to reuse the socket
+ * methods like getsocketoption, setsocketoption etc.
+ * SecureConnectionImpl in java will make calls to this class to create a carry
+ * out the all secure socket operations.
+ * StreamConnectionBase in java will also call the readBytes() and writeBytes()
+ * methods of this class to get/send data from the native secure socket buffer.
+ * NativeStreamBase will have stored a handle to the Object and uses it to call
+ * these methods.
+ */
+
+class NativeSecureConnection: public NativeSocketConnection
+{
+public:
+
+ NativeSecureConnection(const char* aName, int aMode, const char* aHost,
+ int aPort);
+
+ //Methods inherited from NativeStreamBase
+
+ /**
+ * ReadBytes is called by StreamConnectionBase when the buffer at input
+ * stream buffer runs out of data.
+ * @param[in] aJavaBuffer: Byte array to which the data read is copied into
+ * @return the number of bytes read. If error, then the
+ * value of Ssl_get_error should be negated and returned. (return -error)
+ */
+ OS_IMPORT int readBytes(JNIEnv& aJni, jbyteArray aJavaBuffer);
+
+ /**
+ * writeBytes is called by StreamConnectionBase when the output stream
+ * buffer in java overflows
+ * It is also called if flush() is called at the Java side.
+ * @param[in] aJavaBuffer: A byte array of length aLength
+ * @return the number of bytes written. If error, then the
+ * value of Ssl_get_error should be negated and returned. (return -error)
+ */
+ OS_IMPORT int writeBytes(JNIEnv& aJni, jbyteArray aJavaBuffer, int aOffset,
+ int aLength);
+
+ /**
+ * StopReading is called by StreamConnectionBase once InputStream is closed
+ * from the Application.
+ */
+ OS_IMPORT void stopReading();
+
+ /**
+ * StopWriting is called by StreamConnectionBase OutputStream is closed
+ * from the Application.
+ */
+ OS_IMPORT void stopWriting();
+
+ //Internal methods
+
+
+ /**
+ * InitialiseSslConnection is internal function
+ * initializes Ssl library
+ * creates Ssl context object and Ssl obejct
+ */
+ void initialiseSslConnection();
+
+ /**
+ * SecureHandshake is internal function - performs securehandshake
+ * returns the open C API SSL_connect() return value
+ * If error, then the value os Ssl_get_error should be negated and returned
+ * (return -error)
+ */
+ int secureHandshake();
+
+ /**
+ * doHandshake is internal function to open a socket and secure it
+ * returns the open C API SSL_connect() return value
+ * If error, then the value os Ssl_get_error should be negated and returned
+ * (return -error)
+ */
+ int doHandshake(int aSocket, int aType, int aApn, int *err1, int * err2);
+
+ // security info methods
+ void getCertificateInformation(X509 *);
+
+ OS_IMPORT char ** getSecurityInfo();
+
+ /**
+ * securesocketWrite is internal function called by writeBytes() method.
+ * @param[in] aWriteBuf: A character array of length len holding the data
+ * to be written.
+ * @return the number of bytes written. If error, then the
+ * value of Ssl_get_error should be negated and returned. (return -errror)
+ */
+ int secureSocketWrite(char *aWriteBuf, int aLen);
+
+ /**
+ * socketRead is internal function called by readBytes() method.
+ * @param[in] aReadBuf: A character array of length len.
+ * @return the number of bytes read. If error, then the
+ * value of Ssl_get_error should be negated and returned. (return -error)
+ */
+ int secureSocketRead(char *aReadBuf, int aLen);
+
+ /**
+ * SecureSocketClose is called by SocketConnectionImpl to close the socket
+ * connection.
+ * @return 0 on successful completion. If error, then the
+ * value of errno should be negated and returned. (return -errno)
+ */
+ int secureSocketClose();
+
+ X509* getCertificate();
+
+ ~NativeSecureConnection();
+
+private:
+ char* mName;
+ char* mHost;
+ char **mResult;
+ int mMode;
+ int mPort;
+ BIO * mBio;
+ SSL * mSslObj;
+ SSL_CTX * mCtxObj;
+ char* mSecureSocketBuffer;
+ bool mIsSecureConnected;
+ int mBytesRead;
+
+};
+
+}
+#endif // NATIVESECURECONNECTION_H