11b86fe063badb5f28c467ade39be0f4008688947Andreas Huber/* 21b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Copyright (C) 2014 The Android Open Source Project 31b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * 41b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * you may not use this file except in compliance with the License. 61b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * You may obtain a copy of the License at 71b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * 81b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * 101b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Unless required by applicable law or agreed to in writing, software 111b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * See the License for the specific language governing permissions and 141b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * limitations under the License. 151b86fe063badb5f28c467ade39be0f4008688947Andreas Huber */ 161b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 171b86fe063badb5f28c467ade39be0f4008688947Andreas Huber//#define LOG_NDEBUG 0 181b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#define LOG_TAG "HTTPHelper" 191b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <utils/Log.h> 201b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 211b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include "HTTPHelper.h" 221b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 231b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include "android_runtime/AndroidRuntime.h" 241b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include "android_util_Binder.h" 251b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/IMediaHTTPService.h> 261b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/stagefright/foundation/ADebug.h> 271b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <nativehelper/ScopedLocalRef.h> 281b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include "jni.h" 291b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 301b86fe063badb5f28c467ade39be0f4008688947Andreas Hubernamespace android { 311b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 321b86fe063badb5f28c467ade39be0f4008688947Andreas Hubersp<IMediaHTTPService> CreateHTTPServiceInCurrentJavaContext() { 331b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (AndroidRuntime::getJavaVM() == NULL) { 341b86fe063badb5f28c467ade39be0f4008688947Andreas Huber ALOGE("CreateHTTPServiceInCurrentJavaContext called outside " 351b86fe063badb5f28c467ade39be0f4008688947Andreas Huber "JAVA environment."); 361b86fe063badb5f28c467ade39be0f4008688947Andreas Huber return NULL; 371b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 381b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 391b86fe063badb5f28c467ade39be0f4008688947Andreas Huber JNIEnv *env = AndroidRuntime::getJNIEnv(); 401b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 411b86fe063badb5f28c467ade39be0f4008688947Andreas Huber ScopedLocalRef<jclass> clazz( 421b86fe063badb5f28c467ade39be0f4008688947Andreas Huber env, env->FindClass("android/media/MediaHTTPService")); 431b86fe063badb5f28c467ade39be0f4008688947Andreas Huber CHECK(clazz.get() != NULL); 441b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 451b86fe063badb5f28c467ade39be0f4008688947Andreas Huber jmethodID constructID = env->GetMethodID(clazz.get(), "<init>", "()V"); 461b86fe063badb5f28c467ade39be0f4008688947Andreas Huber CHECK(constructID != NULL); 471b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 481b86fe063badb5f28c467ade39be0f4008688947Andreas Huber ScopedLocalRef<jobject> httpServiceObj( 491b86fe063badb5f28c467ade39be0f4008688947Andreas Huber env, env->NewObject(clazz.get(), constructID)); 501b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 511b86fe063badb5f28c467ade39be0f4008688947Andreas Huber sp<IMediaHTTPService> httpService; 521b86fe063badb5f28c467ade39be0f4008688947Andreas Huber if (httpServiceObj.get() != NULL) { 531b86fe063badb5f28c467ade39be0f4008688947Andreas Huber jmethodID asBinderID = 541b86fe063badb5f28c467ade39be0f4008688947Andreas Huber env->GetMethodID(clazz.get(), "asBinder", "()Landroid/os/IBinder;"); 551b86fe063badb5f28c467ade39be0f4008688947Andreas Huber CHECK(asBinderID != NULL); 561b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 571b86fe063badb5f28c467ade39be0f4008688947Andreas Huber ScopedLocalRef<jobject> httpServiceBinderObj( 581b86fe063badb5f28c467ade39be0f4008688947Andreas Huber env, env->CallObjectMethod(httpServiceObj.get(), asBinderID)); 591b86fe063badb5f28c467ade39be0f4008688947Andreas Huber CHECK(httpServiceBinderObj.get() != NULL); 601b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 611b86fe063badb5f28c467ade39be0f4008688947Andreas Huber sp<IBinder> binder = 621b86fe063badb5f28c467ade39be0f4008688947Andreas Huber ibinderForJavaObject(env, httpServiceBinderObj.get()); 631b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 641b86fe063badb5f28c467ade39be0f4008688947Andreas Huber httpService = interface_cast<IMediaHTTPService>(binder); 651b86fe063badb5f28c467ade39be0f4008688947Andreas Huber } 661b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 671b86fe063badb5f28c467ade39be0f4008688947Andreas Huber return httpService; 681b86fe063badb5f28c467ade39be0f4008688947Andreas Huber} 691b86fe063badb5f28c467ade39be0f4008688947Andreas Huber 701b86fe063badb5f28c467ade39be0f4008688947Andreas Huber} // namespace android 71