/**
 * Copyright (c) 2013, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <sys/types.h>

#include <utils/Singleton.h>

#include <binder/BinderService.h>
#include <binder/Parcel.h>

#include "ConnectivityManager.h"

namespace android {

ConnectivityManager::ConnectivityManager() {
    const sp<IServiceManager> sm(defaultServiceManager());
    if (sm != NULL) {
        const String16 name("connectivity");
        mConnectivityService = sm->getService(name);
    }
}

void ConnectivityManager::markSocketAsUserImpl(int fd, uid_t uid) {
    Parcel data, reply;
    data.writeInterfaceToken(DESCRIPTOR);
    // parcelable objects are preceded by a 1 if not null in aidl generated code.
    // Play nice with the generated Java
    data.writeInt32(1);
    data.writeFileDescriptor(fd);
    data.writeInt32(uid);
    mConnectivityService->transact(TRANSACTION_markSocketAsUser, data, &reply, 0);
}

const String16 ConnectivityManager::DESCRIPTOR("android.net.IConnectivityManager");

ANDROID_SINGLETON_STATIC_INSTANCE(ConnectivityManager)

};
