/*
 * Copyright (C) 2006 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.
 */

#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#define FILESYSTEM_SOCKET_PREFIX "/tmp/"
#define ANDROID_RESERVED_SOCKET_PREFIX "/dev/socket/"

/*
 * Set up a given sockaddr_un, to have it refer to the given
 * name in the given namespace. The namespace must be one
 * of <code>ANDROID_SOCKET_NAMESPACE_ABSTRACT</code>,
 * <code>ANDROID_SOCKET_NAMESPACE_RESERVED</code>, or
 * <code>ANDROID_SOCKET_NAMESPACE_FILESYSTEM</code>. Upon success,
 * the pointed at sockaddr_un is filled in and the pointed at
 * socklen_t is set to indicate the final length. This function
 * will fail if the namespace is invalid (not one of the indicated
 * constants) or if the name is too long.
 *
 * @return 0 on success or -1 on failure
 */
int osi_socket_make_sockaddr_un(const char *name, int namespaceId,
                                struct sockaddr_un *p_addr, socklen_t *alen);

#ifdef __cplusplus
}
#endif
