/* * Copyright (C) 2007 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. */ /** * IPC messaging library. */ #ifndef __MQ_H #define __MQ_H #ifdef __cplusplus extern "C" { #endif /** A message. */ typedef struct MqMessage MqMessage; /** A destination to which messages can be sent. */ typedef struct MqDestination MqDestination; /* Array of bytes. */ typedef struct MqBytes MqBytes; /** * Hears messages. * * @param destination to which the message was sent * @param message the message to hear */ typedef void MqMessageListener(MqDestination* destination, MqMessage* message); /** * Hears a destination close. * * @param destination that closed */ typedef void MqCloseListener(MqDestination* destination); /** Message functions. */ /** * Creates a new Message. * * @param header as defined by user * @param body as defined by user * @param replyTo destination to which replies should be sent, NULL if none */ MqMessage* mqCreateMessage(MqBytes header, MqBytes body, MqDestination* replyTo); /** Sends a message to a destination. */ void mqSendMessage(MqMessage* message, MqDestination* destination); /** Destination functions. */ /** * Creates a new destination. Acquires a reference implicitly. * * @param messageListener function to call when a message is recieved * @param closeListener function to call when the destination closes * @param userData user-specific data to associate with the destination. * Retrieve using mqGetDestinationUserData(). */ MqDestination* mqCreateDestination(MqMessageListener* messageListener, MqCloseListener* closeListener, void* userData); /** * Gets user data which was associated with the given destination at * construction time. * * It is only valid to call this function in the same process that the * given destination was created in. * This function returns a null pointer if you call it on a destination * created in a remote process. */ void* mqGetUserData(MqDestination* destination); /** * Returns 1 if the destination was created in this process, or 0 if * the destination was created in a different process, in which case you have * a remote stub. */ int mqIsDestinationLocal(MqDestination* destination); /** * Increments the destination's reference count. */ void mqKeepDestination(MqDesintation* destination); /** * Decrements the destination's reference count. */ void mqFreeDestination(MqDestination* desintation); /** Registry API. */ /** * Gets the destination bound to a name. */ MqDestination* mqGetDestination(char* name); /** * Binds a destination to a name. */ void mqPutDestination(char* name, MqDestination* desintation); #ifdef __cplusplus } #endif #endif /* __MQ_H */