diff -r f5050f1da672 -r 04becd199f91 javaextensions/wma/sms_cbs/src/smsconnectionimpljni.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/wma/sms_cbs/src/smsconnectionimpljni.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,331 @@ +/* +* 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: + * +*/ + +#include +#include "logger.h" +#include "javajniutils.h" +#include "exceptionbase.h" +#include "pushexception.h" +#include "pusherrorcodes.h" +#include "javacommonutils.h" +#include "smsconnection.h" +#include "com_nokia_mj_impl_sms_SMSConnectionImpl.h" + +using namespace java::wma; +using namespace java::util; +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _createConnection + * Signature: (Ljava/lang/String;Z)J + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1createConnection +(JNIEnv* aJni, jobject ,jstring aUri,jboolean aServerConnection) +{ + JELOG2(EWMA); + std::wstring Uri = java::util::JniUtils::jstringToWstring(aJni,aUri); + + SmsConnection* smsConn = 0; + try + { + smsConn = new SmsConnection(Uri, aServerConnection); + smsConn->initialize(); + return reinterpret_cast(smsConn); + } + catch (java::push::PushException& ex) + { + ELOG(EWMA,"WMA ERROR!!! CreateConnection() PushException was caught"); + if (java::push::PUSH_CONNECTION_ALREADY_EXISTS == ex.mErrCode) + { + ELOG(EWMA,"WMA : PushConnection already Exists"); + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Server Connection already exists"); + } + if (java::push::COMMON_SRV_CONN_PLUGIN_ERROR == ex.mErrCode) + { + ELOG(EWMA,"WMA : Common pushConnection error"); + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Opening Server Connection failed: " + + JavaCommonUtils::intToString(ex.mErrCode)); + } + } + catch (std::bad_alloc &ex) + { + ELOG(EWMA,"WMA : Caught bad alloc exception"); + JniUtils::throwNewException(aJni, "java/lang/OutOfMemoryError" , + "Out of memory"); + } + catch (ExceptionBase ex) + { + ELOG(EWMA,"WMA : Caught an ExceptionBase exception"); + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Opening connection failed"); + } + catch (int error) + { + ELOG1(EWMA,"+ WMA : Caught an Exception --Value is:%d",error); + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Opening connection failed: " + JavaCommonUtils::intToString(error)); + } + if (0 != smsConn) + { + delete smsConn; + } + return 0; +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _openConnection + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1openConnection +(JNIEnv *aJni, jobject aPeer,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->open(*aJni,aPeer); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _smsTextDataSegments + * Signature: (JILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1smsTextDataSegments +(JNIEnv* aJni, jobject , jint aHandle, jint aType,jstring aHostAddress, + jstring aHostPort, jstring aData) +{ + JELOG2(EWMA); + jint numberOfSegments = 0; + int hostPort = 0; + const char* hostaddress = aJni->GetStringUTFChars(aHostAddress,0); + if (aHostPort) + { + const char* port = aJni->GetStringUTFChars(aHostPort,0); + hostPort = atoi(port); + aJni->ReleaseStringUTFChars(aHostPort,port); + } + char* messageData = 0; + jint len = 0; + if (aData != NULL) + { + const jchar* data = aJni->GetStringChars(aData,0); + len = aJni->GetStringLength(aData); + messageData = new char[len*2 + 1]; + memset(messageData,0,len*2 + 1); + memcpy((void*)messageData,(void*)data,len*2); + aJni->ReleaseStringChars(aData,data); + } + SmsConnection* msgConn = reinterpret_cast(aHandle); + try + { + numberOfSegments = msgConn->numberOfDataSegments(aType,len,hostPort, + hostaddress,messageData); + } + catch (ExceptionBase ex) + { + JniUtils::throwNewException(aJni, "java/lang/RuntimeException" , + "Calculating number of segments failed"); + } + if (numberOfSegments < 0) + { + JniUtils::throwNewException(aJni, "java/lang/RuntimeException" , + "Calculating number of message segments failed: " + + JavaCommonUtils::intToString(numberOfSegments)); + } + aJni->ReleaseStringUTFChars(aHostAddress,hostaddress); + delete[] messageData; + return numberOfSegments; +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _smsBinaryDataSegments + * Signature: (JILjava/lang/String;Ljava/lang/String;[B)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1smsBinaryDataSegments +(JNIEnv* aJni, jobject , jint aHandle, jint aType,jstring aHostAddress, + jstring aHostPort, jbyteArray aData) +{ + JELOG2(EWMA); + jint numberOfSegments = 0; + int hostPort = 0; + char* nativeString = 0; + int length = 0; + const char* hostaddress = aJni->GetStringUTFChars(aHostAddress,0); + if (aHostPort) + { + const char* port = aJni->GetStringUTFChars(aHostPort,0); + hostPort = atoi(port); + aJni->ReleaseStringUTFChars(aHostPort,port); + } + if (aData != NULL) + { + length = aJni->GetArrayLength(aData); + nativeString = new char[length + 1]; + memset(nativeString, 0, length + 1); + aJni->GetByteArrayRegion(aData,0,length,(jbyte *)nativeString); + aJni->DeleteLocalRef(aData); + } + SmsConnection* msgConn = reinterpret_cast(aHandle); + try + { + numberOfSegments = msgConn->numberOfDataSegments(aType,length,hostPort, + hostaddress,(const char*)nativeString); + } + catch (ExceptionBase ex) + { + JniUtils::throwNewException(aJni, "java/lang/RuntimeException" , + "Calculating number of segments failed"); + } + if (numberOfSegments < 0) + { + JniUtils::throwNewException(aJni, "java/lang/RuntimeException" , + "Calculating number of message segments failed: " + + JavaCommonUtils::intToString(numberOfSegments)); + + } + aJni->ReleaseStringUTFChars(aHostAddress,hostaddress); + delete[] nativeString; + return numberOfSegments; + +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _sendMessage + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1sendMessage +(JNIEnv* , jobject , jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->send(); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _getMessageType + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1getMessageType +(JNIEnv *, jobject,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->getMessageType(); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _getHostAddress + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1getHostAddress +(JNIEnv *aJni, jobject,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->getRemoteHostAddress(*aJni); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _getTimestamp + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1getTimestamp +(JNIEnv *, jobject,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->getTimestamp(); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _getReceivedMessageData + * Signature: (JI)Ljava/lang/Object; + */ +JNIEXPORT jobject JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1getReceivedMessageData +(JNIEnv *aJni, jobject,jint aHandle,jint aMessageType) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + return msgConn->getData(*aJni,aMessageType); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _closeConnection + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1closeConnection +(JNIEnv *, jobject,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + msgConn->close(); +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _dispose + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1dispose +(JNIEnv *, jobject,jint aHandle) +{ + JELOG2(EWMA); + SmsConnection* msgConn = reinterpret_cast(aHandle); + delete msgConn; +} + +/* + * Class: com_nokia_mj_impl_sms_SMSConnectionImpl + * Method: _checkError + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_com_nokia_mj_impl_sms_SMSConnectionImpl__1checkError +(JNIEnv *aJni, jobject , jint aError , jboolean aIsSendOperation) +{ + JELOG2(EWMA); +#ifdef __SYMBIAN32__ + if (aError == KErrTimedOut) + { + JniUtils::throwNewException(aJni, "java/io/InterruptedIOException" , + "Timeout occurred while sending message" + + JavaCommonUtils::intToString(aError)); + } + else + { + if (aIsSendOperation) + { + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Sending message failed: " + + JavaCommonUtils::intToString(aError)); + } + else + { + JniUtils::throwNewException(aJni, "java/io/IOException" , + "Receiving message failed: " + + JavaCommonUtils::intToString(aError)); + } + } +#endif // __SYMBIAN32__ +}