/* vim:set ts=2 sw=2 et cindent: */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla IPC. * * The Initial Developer of the Original Code is IBM Corporation. * Portions created by IBM Corporation are Copyright (C) 2003 * IBM Corporation. All Rights Reserved. * * Contributor(s): * Darin Fisher * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef ipcConnection_h__ #define ipcConnection_h__ #include "nscore.h" class ipcMessage; #define IPC_METHOD_PRIVATE_(type) NS_HIDDEN_(type) #define IPC_METHOD_PRIVATE IPC_METHOD_PRIVATE_(nsresult) /* ------------------------------------------------------------------------- */ /* Platform specific IPC connection API. */ typedef void (* ipcCallbackFunc)(void *); /** * IPC_Connect * * This function causes a connection to the IPC daemon to be established. * If a connection already exists, then this function will be ignored. * * @param daemonPath * Specifies the path to the IPC daemon executable. * * NOTE: This function must be called on the main thread. */ IPC_METHOD_PRIVATE IPC_Connect(const char *daemonPath); /** * IPC_Disconnect * * This function causes a connection to the IPC daemon to be closed. Any * unsent messages (IPC_SendMsg puts messages on a queue) will be sent to the * IPC daemon before the connection is closed. * * NOTE: This function must be called on the main thread. */ IPC_METHOD_PRIVATE IPC_Disconnect(); /** * IPC_SendMsg * * This function sends a message to the IPC daemon. Typically, the message * is put on a queue, to be delivered asynchronously to the IPC daemon. The * ipcMessage object will be deleted when IPC_SendMsg is done with it. The * caller must not touch |msg| after passing it to IPC_SendMsg. * * IPC_SendMsg cannot be called before IPC_Connect or after IPC_Disconnect. * * NOTE: This function may be called on any thread. */ IPC_METHOD_PRIVATE IPC_SendMsg(ipcMessage *msg); /** * IPC_DoCallback * * This function executes a callback function on the same background thread * that calls IPC_OnConnectionEnd and IPC_OnMessageAvailable. * * If this function succeeds, then the caller is guaranteed that |func| will * be called. This guarantee is important because it allows the caller to * free any memory associated with |arg| once |func| has been called. * * NOTE: This function may be called on any thread. */ IPC_METHOD_PRIVATE IPC_DoCallback(ipcCallbackFunc func, void *arg); /* ------------------------------------------------------------------------- */ /* Cross-platform IPC connection methods. */ /** * IPC_SpawnDaemon * * This function launches the IPC daemon process. It is called by the platform * specific IPC_Connect implementation. It should not return until the daemon * process is ready to receive a client connection or an error occurs. * * @param daemonPath * Specifies the path to the IPC daemon executable. */ IPC_METHOD_PRIVATE IPC_SpawnDaemon(const char *daemonPath); /* ------------------------------------------------------------------------- */ /* IPC connection callbacks (not implemented by the connection code). * * NOTE: These functions execute on a background thread!! */ /** * IPC_OnConnectionEnd * * This function is called whenever the connection to the IPC daemon has been * terminated. If terminated due to an abnormal error, then the error will be * described by the |error| parameter. If |error| is NS_OK, then it means the * connection was closed in response to a call to IPC_Disconnect. */ IPC_METHOD_PRIVATE_(void) IPC_OnConnectionEnd(nsresult error); /** * IPC_OnMessageAvailable * * This function is called whenever an incoming message is read from the IPC * daemon. The ipcMessage object, |msg|, must be deleted by the implementation * of IPC_OnMessageAvailable when the object is no longer needed. */ IPC_METHOD_PRIVATE_(void) IPC_OnMessageAvailable(ipcMessage *msg); #endif // ipcConnection_h__