Back to index

lightning-sunbird  0.9+nobinonly
ipcModuleUtil.h
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is Mozilla IPC.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corporation.
00018  * Portions created by the Initial Developer are Copyright (C) 2002
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *   Darin Fisher <darin@netscape.com>
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef ipcModuleUtil_h__
00039 #define ipcModuleUtil_h__
00040 
00041 #include "prlog.h"
00042 #include "ipcModule.h"
00043 
00044 extern const ipcDaemonMethods *gIPCDaemonMethods;
00045 
00046 //-----------------------------------------------------------------------------
00047 // inline wrapper functions
00048 // 
00049 // these functions may only be called by a module that uses the
00050 // IPC_IMPL_GETMODULES macro.
00051 //-----------------------------------------------------------------------------
00052 
00053 inline PRStatus
00054 IPC_DispatchMsg(ipcClientHandle client, const nsID &target, const void *data, PRUint32 dataLen)
00055 {
00056     PR_ASSERT(gIPCDaemonMethods);
00057     return gIPCDaemonMethods->dispatchMsg(client, target, data, dataLen);
00058 }
00059 
00060 inline PRStatus
00061 IPC_SendMsg(ipcClientHandle client, const nsID &target, const void *data, PRUint32 dataLen)
00062 {
00063     PR_ASSERT(gIPCDaemonMethods);
00064     return gIPCDaemonMethods->sendMsg(client, target, data, dataLen);
00065 }
00066 
00067 inline ipcClientHandle
00068 IPC_GetClientByID(PRUint32 id)
00069 {
00070     PR_ASSERT(gIPCDaemonMethods);
00071     return gIPCDaemonMethods->getClientByID(id);
00072 }
00073 
00074 inline ipcClientHandle
00075 IPC_GetClientByName(const char *name)
00076 {
00077     PR_ASSERT(gIPCDaemonMethods);
00078     return gIPCDaemonMethods->getClientByName(name);
00079 }
00080 
00081 inline void
00082 IPC_EnumClients(ipcClientEnumFunc func, void *closure)
00083 {
00084     PR_ASSERT(gIPCDaemonMethods);
00085     gIPCDaemonMethods->enumClients(func, closure);
00086 }
00087 
00088 inline PRUint32
00089 IPC_GetClientID(ipcClientHandle client)
00090 {
00091     PR_ASSERT(gIPCDaemonMethods);
00092     return gIPCDaemonMethods->getClientID(client);
00093 }
00094 
00095 inline PRBool
00096 IPC_ClientHasName(ipcClientHandle client, const char *name)
00097 {
00098     PR_ASSERT(gIPCDaemonMethods);
00099     return gIPCDaemonMethods->clientHasName(client, name);
00100 }
00101 
00102 inline PRBool
00103 IPC_ClientHasTarget(ipcClientHandle client, const nsID &target)
00104 {
00105     PR_ASSERT(gIPCDaemonMethods);
00106     return gIPCDaemonMethods->clientHasTarget(client, target);
00107 }
00108 
00109 inline void
00110 IPC_EnumClientNames(ipcClientHandle client, ipcClientNameEnumFunc func, void *closure)
00111 {
00112     PR_ASSERT(gIPCDaemonMethods);
00113     gIPCDaemonMethods->enumClientNames(client, func, closure);
00114 }
00115 
00116 inline void
00117 IPC_EnumClientTargets(ipcClientHandle client, ipcClientTargetEnumFunc func, void *closure)
00118 {
00119     PR_ASSERT(gIPCDaemonMethods);
00120     gIPCDaemonMethods->enumClientTargets(client, func, closure);
00121 }
00122 
00123 //-----------------------------------------------------------------------------
00124 // inline composite functions
00125 //-----------------------------------------------------------------------------
00126 
00127 inline PRStatus
00128 IPC_SendMsg(PRUint32 clientID, const nsID &target, const void *data, PRUint32 dataLen)
00129 {
00130     ipcClient *client = IPC_GetClientByID(clientID);
00131     if (!client)
00132         return PR_FAILURE;
00133     return IPC_SendMsg(client, target, data, dataLen);
00134 }
00135 
00136 //-----------------------------------------------------------------------------
00137 // module factory macros
00138 //-----------------------------------------------------------------------------
00139 
00140 #define IPC_IMPL_GETMODULES(_modName, _modEntries)                  \
00141     const ipcDaemonMethods *gIPCDaemonMethods;                      \
00142     IPC_EXPORT int                                                  \
00143     IPC_GetModules(const ipcDaemonMethods *dmeths,                  \
00144                    const ipcModuleEntry **ents) {                   \
00145         /* XXX do version checking */                               \
00146         gIPCDaemonMethods = dmeths;                                 \
00147         *ents = _modEntries;                                        \
00148         return sizeof(_modEntries) / sizeof(ipcModuleEntry);        \
00149     }
00150 
00151 #endif // !ipcModuleUtil_h__