133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker/**
233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * Copyright (c) 2013, The Android Open Source Project
333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker *
433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * Licensed under the Apache License, Version 2.0 (the "License");
533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * you may not use this file except in compliance with the License.
633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * You may obtain a copy of the License at
733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker *
833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker *     http://www.apache.org/licenses/LICENSE-2.0
933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker *
1033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * Unless required by applicable law or agreed to in writing, software
1133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * distributed under the License is distributed on an "AS IS" BASIS,
1233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * See the License for the specific language governing permissions and
1433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker * limitations under the License.
1533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker */
1633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
1733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <sys/types.h>
1833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
1933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <utils/Singleton.h>
2033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <binder/BinderService.h>
2233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <binder/Parcel.h>
2333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include "ConnectivityManager.h"
2533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakernamespace android {
2733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad BrubakerConnectivityManager::ConnectivityManager() {
2933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    const sp<IServiceManager> sm(defaultServiceManager());
3033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    if (sm != NULL) {
3133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker        const String16 name("connectivity");
3233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker        mConnectivityService = sm->getService(name);
3333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    }
3433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker}
3533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
3633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakervoid ConnectivityManager::markSocketAsUserImpl(int fd, uid_t uid) {
3733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    Parcel data, reply;
3833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    data.writeInterfaceToken(DESCRIPTOR);
3933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    // parcelable objects are preceded by a 1 if not null in aidl generated code.
4033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    // Play nice with the generated Java
4133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    data.writeInt32(1);
4233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    data.writeFileDescriptor(fd);
4333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    data.writeInt32(uid);
4433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    mConnectivityService->transact(TRANSACTION_markSocketAsUser, data, &reply, 0);
4533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker}
4633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
4733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakerconst String16 ConnectivityManager::DESCRIPTOR("android.net.IConnectivityManager");
4833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
4933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad BrubakerANDROID_SINGLETON_STATIC_INSTANCE(ConnectivityManager)
5033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
5133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker};
52