version 1.2, 2011/04/30 21:35:21
|
version 1.2.2.3, 2011/08/21 14:18:52
|
Line 5
|
Line 5
|
* $Author$ |
* $Author$ |
* $Id$ |
* $Id$ |
* |
* |
*************************************************************************/ | ************************************************************************** |
| The ELWIX and AITNET software is distributed under the following |
| terms: |
| |
| All of the documentation and software included in the ELWIX and AITNET |
| Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
| |
| Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
| by Michael Pounov <misho@elwix.org>. All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| 1. Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| 2. Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| 3. All advertising materials mentioning features or use of this software |
| must display the following acknowledgement: |
| This product includes software developed by Michael Pounov <misho@elwix.org> |
| ELWIX - Embedded LightWeight unIX and its contributors. |
| 4. Neither the name of AITNET nor the names of its contributors |
| may be used to endorse or promote products derived from this software |
| without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND |
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| SUCH DAMAGE. |
| */ |
#ifndef __AITSESS_H |
#ifndef __AITSESS_H |
#define __AITSESS_H |
#define __AITSESS_H |
|
|
|
|
|
#include <assert.h> |
#include <semaphore.h> |
#include <semaphore.h> |
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
#define SHARED_UNKNOWN 0 |
#define SHARED_IPC 1 |
#define SHARED_IPC 1 |
#define SHARED_MAP 2 |
#define SHARED_MAP 2 |
|
|
Line 54 inline const char *sess_GetError();
|
Line 93 inline const char *sess_GetError();
|
|
|
/* |
/* |
* initSession() Initializing session structure, if session file not exists creating with specified tech |
* initSession() Initializing session structure, if session file not exists creating with specified tech |
* @cnID = Technology using in session. SHARED_IPC IPC tech; SHARED_MAP BSD MemoryMap tech | * @pnID = Technology using in session. |
| SHARED_IPC IPC tech; SHARED_MAP BSD MemoryMap tech or if =NULL SHARED_IPC |
* @csFName = Session filename for build key and identified |
* @csFName = Session filename for build key and identified |
* @Sess = Session item | * @Sess = Session item, if =NULL allocate memory for session after use must be free! |
* return: 0 OK new key created, -1 error: no memory or file not created, 1 OK key finded |
* return: 0 OK new key created, -1 error: no memory or file not created, 1 OK key finded |
*/ |
*/ |
inline int initSession(const int cnID, const char *csFName, tagSess ** __restrict Sess); | inline int initSession(int *pnID, const char *csFName, tagSess ** __restrict Sess); |
/* |
/* |
* freeSession() Free allocated memory for session item and delete session file if present name |
* freeSession() Free allocated memory for session item and delete session file if present name |
* @csFName = Session filename for delete, if NULL nothing delete |
* @csFName = Session filename for delete, if NULL nothing delete |
Line 187 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 227 inline int ipc_decSemaphore(tagSess * __restrict s);
|
// Lazy macros for lazy programmers :-) by Michael Pounov; Optimizing work with sessions! |
// Lazy macros for lazy programmers :-) by Michael Pounov; Optimizing work with sessions! |
// |
// |
|
|
#define DESTROY_SESSION(fname, s) do { \ | #define DESTROY_SESSION(fname, s) do { assert((s)); assert((*s)); \ |
switch (((*s))->type) { \ |
switch (((*s))->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
ipc_destroySession((fname), (s)); \ |
ipc_destroySession((fname), (s)); \ |
Line 198 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 238 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define ATTACH_MEMORY(s) do { \ | #define ATTACH_MEMORY(s) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
ipc_attachSession((s), 0); \ |
ipc_attachSession((s), 0); \ |
Line 209 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 249 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define DETACH_MEMORY(s) do { \ | #define DETACH_MEMORY(s) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
ipc_detachSession((s)); \ |
ipc_detachSession((s)); \ |
Line 220 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 260 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define NOT_SEMAPHORE(s) do { \ | #define NOT_SEMAPHORE(s) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
ipc_notSemaphore((s)); \ |
ipc_notSemaphore((s)); \ |
Line 231 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 271 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define IS_SEMAPHORED(s, ret) do { \ | #define IS_SEMAPHORED(s, ret) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
(ret) = ipc_isSemaphored((s)); \ |
(ret) = ipc_isSemaphored((s)); \ |
Line 244 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 284 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define ADD_SEMAPHORE(s, ret) do { \ | #define ADD_SEMAPHORE(s, ret) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
(ret) = ipc_addSemaphore((s)); \ |
(ret) = ipc_addSemaphore((s)); \ |
Line 257 inline int ipc_decSemaphore(tagSess * __restrict s);
|
Line 297 inline int ipc_decSemaphore(tagSess * __restrict s);
|
} \ |
} \ |
} while(0) |
} while(0) |
|
|
#define DEC_SEMAPHORE(s, ret) do { \ | #define DEC_SEMAPHORE(s, ret) do { assert((s)); \ |
switch ((s)->type) { \ |
switch ((s)->type) { \ |
case SHARED_IPC: \ |
case SHARED_IPC: \ |
(ret) = ipc_decSemaphore((s)); \ |
(ret) = ipc_decSemaphore((s)); \ |