javacommons/gcfprotocols/secureconnection/inc/nativesecureconnection.h
changeset 21 2a9601315dfc
child 87 1627c337e51e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/gcfprotocols/secureconnection/inc/nativesecureconnection.h	Mon May 03 12:27:20 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