import exynos 7570 bsp
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos7580.git] / mobicore / rootpa / Code / Android / app / jni / CommonPAWrapper / CmpResponses.cpp
1 /*
2 * Copyright (c) 2013 TRUSTONIC LIMITED
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
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.
14 *
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.
18 *
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.
30 */
31 #include <stdlib.h>
32 #include "JniHelpers.h"
33 #include "CmpResponses.h"
34
35 CmpResponses::CmpResponses(JNIEnv* env, jobject responses): CmpBase(env, responses)
36 {
37 if(!broken_)
38 {
39 jmethodID mid = env_->GetMethodID(cls_, "clear", "()V");
40 if(mid != NULL)
41 {
42 env_->CallVoidMethod(msgs_, mid);
43 }
44 else
45 {
46 LOGE("CmpResponses::CmpResponses: Sorry, but the method clear()V cannot be found!");
47 }
48 }
49 }
50
51 CmpResponses::~CmpResponses()
52 {
53
54 }
55
56
57 int CmpResponses::update(CmpMessage* responses, int numberOfResponses)
58 {
59 int ret=ROOTPA_OK;
60 if(broken_) return ROOTPA_ERROR_INTERNAL;
61
62 jmethodID mid=env_->GetMethodID(cls_, "add", "(Ljava/lang/Object;)Z");
63 if(NULL==mid)
64 {
65 LOGE("do not find add(Ljava/lang/Object)Z from List");
66 return ROOTPA_ERROR_INTERNAL;
67 }
68
69 jobject responseObject=NULL;
70 bool result;
71 for(int i=0; i<numberOfResponses; i++)
72 {
73 responseObject=createCmpResponseObject(responses[i]);
74 if(responseObject != NULL)
75 {
76 if((result=(bool) env_->CallBooleanMethod(msgs_, mid, responseObject))==false)
77 {
78 ret=ROOTPA_ERROR_INTERNAL;
79 LOGE("adding cmp response object %d failed", i);
80 }
81 env_->DeleteLocalRef(responseObject);
82 }
83 else
84 {
85 ret=ROOTPA_ERROR_INTERNAL;
86 LOGE("creating cmp response object failed");
87 }
88 }
89 return ret;
90 }
91
92
93
94 jobject CmpResponses::createCmpResponseObject(CmpMessage msg)
95 {
96 jobject newObject=NULL;
97 if(!broken_)
98 {
99 objectCls_=env_->FindClass("com/gd/mobicore/pa/ifc/CmpResponse");
100 if(objectCls_!=NULL)
101 {
102 jmethodID constructor=NULL;
103 JniHelpers helper(env_);
104 jbyteArray rsp = helper.byteArrayToJByteArray(msg.contentP, msg.length);
105 if(rsp != NULL)
106 {
107 constructor = env_->GetMethodID(objectCls_, "<init>", "([B)V");
108 }
109 else
110 {
111 constructor = env_->GetMethodID(objectCls_, "<init>", "()V");
112 LOGE("CmpResponses::createCmpResponseObject no response received, using empty response object");
113 }
114
115 if(constructor != NULL)
116 {
117
118 if(rsp != NULL)
119 {
120 newObject = env_->NewObject(objectCls_, constructor, rsp);
121 }
122 else
123 {
124 newObject = env_->NewObject(objectCls_, constructor);
125 }
126
127 if(NULL==newObject)
128 {
129 LOGE("CmpResponses::createCmpResponseObject creating new object failed %p %p", objectCls_, constructor);
130 }
131
132 }
133 else
134 {
135 LOGE("CmpResponses::createCmpResponseObject creating constructor failed");
136 }
137
138 if(rsp != NULL)
139 {
140 env_->DeleteLocalRef(rsp);
141 }
142
143 }
144 else
145 {
146 LOGE("CmpResponses::createCmpResponseObject did not find java side class /com/gd/mobicore/pa/ifc/CmpResponse");
147 }
148 }
149
150 if(objectCls_!=NULL)
151 {
152 env_->DeleteLocalRef(objectCls_);
153 objectCls_=NULL;
154 }
155
156 return newObject;
157 }
158
159