2 * Copyright (c) 2013 TRUSTONIC LIMITED
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the TRUSTONIC LIMITED nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include "JniHelpers.h"
33 #include "CmpResponses.h"
35 CmpResponses::CmpResponses(JNIEnv
* env
, jobject responses
): CmpBase(env
, responses
)
39 jmethodID mid
= env_
->GetMethodID(cls_
, "clear", "()V");
42 env_
->CallVoidMethod(msgs_
, mid
);
46 LOGE("CmpResponses::CmpResponses: Sorry, but the method clear()V cannot be found!");
51 CmpResponses::~CmpResponses()
57 int CmpResponses::update(CmpMessage
* responses
, int numberOfResponses
)
60 if(broken_
) return ROOTPA_ERROR_INTERNAL
;
62 jmethodID mid
=env_
->GetMethodID(cls_
, "add", "(Ljava/lang/Object;)Z");
65 LOGE("do not find add(Ljava/lang/Object)Z from List");
66 return ROOTPA_ERROR_INTERNAL
;
69 jobject responseObject
=NULL
;
71 for(int i
=0; i
<numberOfResponses
; i
++)
73 responseObject
=createCmpResponseObject(responses
[i
]);
74 if(responseObject
!= NULL
)
76 if((result
=(bool) env_
->CallBooleanMethod(msgs_
, mid
, responseObject
))==false)
78 ret
=ROOTPA_ERROR_INTERNAL
;
79 LOGE("adding cmp response object %d failed", i
);
81 env_
->DeleteLocalRef(responseObject
);
85 ret
=ROOTPA_ERROR_INTERNAL
;
86 LOGE("creating cmp response object failed");
94 jobject
CmpResponses::createCmpResponseObject(CmpMessage msg
)
96 jobject newObject
=NULL
;
99 objectCls_
=env_
->FindClass("com/gd/mobicore/pa/ifc/CmpResponse");
102 jmethodID constructor
=NULL
;
103 JniHelpers
helper(env_
);
104 jbyteArray rsp
= helper
.byteArrayToJByteArray(msg
.contentP
, msg
.length
);
107 constructor
= env_
->GetMethodID(objectCls_
, "<init>", "([B)V");
111 constructor
= env_
->GetMethodID(objectCls_
, "<init>", "()V");
112 LOGE("CmpResponses::createCmpResponseObject no response received, using empty response object");
115 if(constructor
!= NULL
)
120 newObject
= env_
->NewObject(objectCls_
, constructor
, rsp
);
124 newObject
= env_
->NewObject(objectCls_
, constructor
);
129 LOGE("CmpResponses::createCmpResponseObject creating new object failed %p %p", objectCls_
, constructor
);
135 LOGE("CmpResponses::createCmpResponseObject creating constructor failed");
140 env_
->DeleteLocalRef(rsp
);
146 LOGE("CmpResponses::createCmpResponseObject did not find java side class /com/gd/mobicore/pa/ifc/CmpResponse");
152 env_
->DeleteLocalRef(objectCls_
);