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 <stdint.h>
1833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <sys/types.h>
1933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker#include <utils/Singleton.h>
2133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakernamespace android {
2333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakerclass ConnectivityManager : public Singleton<ConnectivityManager> {
2533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    // Keep this in sync with IConnectivityManager.aidl
2633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    static const int TRANSACTION_markSocketAsUser = IBinder::FIRST_CALL_TRANSACTION;
2733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    static const String16 DESCRIPTOR;
2833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
2933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    friend class Singleton<ConnectivityManager>;
3033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    sp<IBinder> mConnectivityService;
3133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
3233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    ConnectivityManager();
3333510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
3433510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    void markSocketAsUserImpl(int fd, uid_t uid);
3533510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
3633510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubakerpublic:
3733510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    static void markSocketAsUser(int fd, uid_t uid) {
3833510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker        ConnectivityManager::getInstance().markSocketAsUserImpl(fd, uid);
3933510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker    }
4033510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker};
4133510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker
4233510c07f38fdb7f18a10acbc2d1dd0eaac04fe1Chad Brubaker};
43