162 free(tab);
163 return NULL;
164 }
165 (*env)->SetObjectArrayElement(env, result, cnt, js);
166 if ((*env)->ExceptionCheck(env)) {
167 free(tab);
168 return NULL;
169 }
170 (*env)->DeleteLocalRef(env, js);
171 }
172 }
173 free(tab);
174 return result;
175 }
176
177 JNIEXPORT jobjectArray JNICALL Java_sun_security_smartcardio_PCSC_SCardListReaders
178 (JNIEnv *env, jclass thisClass, jlong jContext)
179 {
180 SCARDCONTEXT context = (SCARDCONTEXT)jContext;
181 LONG rv;
182 LPTSTR mszReaders = NULL;
183 DWORD size = 0;
184 jobjectArray result;
185
186 dprintf1("-context: %x\n", context);
187 rv = CALL_SCardListReaders(context, NULL, NULL, &size);
188 if (handleRV(env, rv)) {
189 return NULL;
190 }
191 dprintf1("-size: %d\n", size);
192
193 if (size) {
194 mszReaders = malloc(size);
195 if (mszReaders == NULL) {
196 throwOutOfMemoryError(env, NULL);
197 return NULL;
198 }
199
200 rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
201 if (handleRV(env, rv)) {
202 free(mszReaders);
203 return NULL;
204 }
205 dprintf1("-String: %s\n", mszReaders);
206 }
207
208 result = pcsc_multi2jstring(env, mszReaders);
209 free(mszReaders);
210 return result;
211 }
212
213 JNIEXPORT jlong JNICALL Java_sun_security_smartcardio_PCSC_SCardConnect
214 (JNIEnv *env, jclass thisClass, jlong jContext, jstring jReaderName,
215 jint jShareMode, jint jPreferredProtocols)
216 {
217 SCARDCONTEXT context = (SCARDCONTEXT)jContext;
218 LONG rv;
219 LPCTSTR readerName;
220 SCARDHANDLE card = 0;
221 DWORD proto = 0;
222
223 readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
224 if (readerName == NULL) {
225 return 0;
226 }
227 rv = CALL_SCardConnect(context, readerName, jShareMode, jPreferredProtocols, &card, &proto);
228 (*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
229 dprintf1("-cardhandle: %x\n", card);
230 dprintf1("-protocol: %d\n", proto);
231 if (handleRV(env, rv)) {
232 return 0;
233 }
234
235 return (jlong)card;
236 }
237
238 JNIEXPORT jbyteArray JNICALL Java_sun_security_smartcardio_PCSC_SCardTransmit
239 (JNIEnv *env, jclass thisClass, jlong jCard, jint protocol,
|
162 free(tab);
163 return NULL;
164 }
165 (*env)->SetObjectArrayElement(env, result, cnt, js);
166 if ((*env)->ExceptionCheck(env)) {
167 free(tab);
168 return NULL;
169 }
170 (*env)->DeleteLocalRef(env, js);
171 }
172 }
173 free(tab);
174 return result;
175 }
176
177 JNIEXPORT jobjectArray JNICALL Java_sun_security_smartcardio_PCSC_SCardListReaders
178 (JNIEnv *env, jclass thisClass, jlong jContext)
179 {
180 SCARDCONTEXT context = (SCARDCONTEXT)jContext;
181 LONG rv;
182 LPSTR mszReaders = NULL;
183 DWORD size = 0;
184 jobjectArray result;
185
186 dprintf1("-context: %x\n", context);
187 rv = CALL_SCardListReaders(context, NULL, NULL, &size);
188 if (handleRV(env, rv)) {
189 return NULL;
190 }
191 dprintf1("-size: %d\n", size);
192
193 if (size) {
194 mszReaders = malloc(size);
195 if (mszReaders == NULL) {
196 throwOutOfMemoryError(env, NULL);
197 return NULL;
198 }
199
200 rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
201 if (handleRV(env, rv)) {
202 free(mszReaders);
203 return NULL;
204 }
205 dprintf1("-String: %s\n", mszReaders);
206 }
207
208 result = pcsc_multi2jstring(env, mszReaders);
209 free(mszReaders);
210 return result;
211 }
212
213 JNIEXPORT jlong JNICALL Java_sun_security_smartcardio_PCSC_SCardConnect
214 (JNIEnv *env, jclass thisClass, jlong jContext, jstring jReaderName,
215 jint jShareMode, jint jPreferredProtocols)
216 {
217 SCARDCONTEXT context = (SCARDCONTEXT)jContext;
218 LONG rv;
219 LPCSTR readerName;
220 SCARDHANDLE card = 0;
221 DWORD proto = 0;
222
223 readerName = (*env)->GetStringUTFChars(env, jReaderName, NULL);
224 if (readerName == NULL) {
225 return 0;
226 }
227 rv = CALL_SCardConnect(context, readerName, jShareMode, jPreferredProtocols, &card, &proto);
228 (*env)->ReleaseStringUTFChars(env, jReaderName, readerName);
229 dprintf1("-cardhandle: %x\n", card);
230 dprintf1("-protocol: %d\n", proto);
231 if (handleRV(env, rv)) {
232 return 0;
233 }
234
235 return (jlong)card;
236 }
237
238 JNIEXPORT jbyteArray JNICALL Java_sun_security_smartcardio_PCSC_SCardTransmit
239 (JNIEnv *env, jclass thisClass, jlong jCard, jint protocol,
|