Flattenable.h revision a580e68cc3bea688167eb5e55122bec8e83ab939
1a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian/* 2a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Copyright (C) 2010 The Android Open Source Project 3a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * 4a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * you may not use this file except in compliance with the License. 6a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * You may obtain a copy of the License at 7a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * 8a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * 10a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * See the License for the specific language governing permissions and 14a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * limitations under the License. 15a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian */ 16a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 17a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#ifndef ANDROID_UTILS_FLATTENABLE_H 18a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#define ANDROID_UTILS_FLATTENABLE_H 19a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 20a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 21a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <stdint.h> 22a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <sys/types.h> 23a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <utils/Errors.h> 24a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 25a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopiannamespace android { 26a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 27a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianclass Flattenable 28a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian{ 29a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianpublic: 30a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // size in bytes of the flattened object 31a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian virtual size_t getFlattenedSize() const = 0; 32a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 33a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // number of file descriptors to flatten 34a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian virtual size_t getFdCount() const = 0; 35a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 36a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // flattens the object into buffer. 37a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // size should be at least of getFlattenedSize() 38a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // file descriptors are written in the fds[] array but ownership is 39a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // not transfered (ie: they must be dupped by the caller of 40a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // flatten() if needed). 41a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian virtual status_t flatten(void* buffer, size_t size, 42a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian int fds[], size_t count) const = 0; 43a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 44a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // unflattens the object from buffer. 45a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // size should be equal to the value of getFlattenedSize() when the 46a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // object was flattened. 47a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // unflattened file descriptors are found in the fds[] array and 48a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // don't need to be dupped(). ie: the caller of unflatten doesn't 49a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // keep ownership. If a fd is not retained by unflatten() it must be 50a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian // explicitly closed. 51a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian virtual status_t unflatten(void const* buffer, size_t size, 52a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian int fds[], size_t count) = 0; 53a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 54a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianprotected: 55a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian virtual ~Flattenable() = 0; 56a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 57a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian}; 58a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 59a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian}; // namespace android 60a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 61a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian 62a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#endif /* ANDROID_UTILS_FLATTENABLE_H */ 63