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