status_t BpDrmServiceListener::notify(const DrmInfoEvent& event) {
    Parcel data, reply;

    data.writeInterfaceToken(IDrmServiceListener::getInterfaceDescriptor());
    data.writeInt32(event.getUniqueId());
    data.writeInt32(event.getType());
    data.writeString8(event.getMessage());

    remote()->transact(NOTIFY, data, &reply);
    return reply.readInt32();
}
void JNIOnInfoListener::onInfo(const DrmInfoEvent& event) {
    jint uniqueId = event.getUniqueId();
    jint type = event.getType();
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jstring message = env->NewStringUTF(event.getMessage().string());
    ALOGV("JNIOnInfoListener::onInfo => %d | %d | %s", uniqueId, type, event.getMessage().string());

    env->CallStaticVoidMethod(
            mClass,
            env->GetStaticMethodID(mClass, "notify", "(Ljava/lang/Object;IILjava/lang/String;)V"),
            mObject, uniqueId, type, message);
}
void WVMInfoListener::onInfo(const DrmInfoEvent &event)
{
    //ALOGD("WVMMediaSource::onInfo: type=%d, msg=%s!!!",
    //     event.getType(), event.getMessage().string());

    if (event.getType() == MessageType_HeartbeatServer)
        mServerUrl = event.getMessage();
    else if (event.getType() == MessageType_HeartbeatPeriod)
        mPeriod = atoi(event.getMessage());
    else if (event.getType() == MessageType_AssetId)
        mAssetId = atoi(event.getMessage());
    else if (event.getType() == MessageType_DeviceId)
        mDeviceId = event.getMessage();
    else if (event.getType() == MessageType_StreamId)
        mStreamId = event.getMessage();
    else if (event.getType() == MessageType_UserData) {
        mUserData = event.getMessage();
        mHaveInfo = true;
    }
}