Annotation of libaitsess/inc/aitsess.h, revision 1.1

1.1     ! misho       1: #ifndef __AITSESS_H
        !             2: #define __AITSESS_H
        !             3: 
        !             4: 
        !             5: #include <semaphore.h>
        !             6: #include <sys/types.h>
        !             7: 
        !             8: #define SHARED_IPC     1
        !             9: #define SHARED_MAP     2
        !            10: 
        !            11: #define IS_VAL         0x0
        !            12: #define IS_ADD         0x40000000
        !            13: #define IS_DEF         0x80000000
        !            14: 
        !            15: #define ISNEW(x)       (((x) & IS_ADD) == IS_ADD)
        !            16: #define ISDEF(x)       (((x) & IS_DEF) == IS_DEF)
        !            17: 
        !            18: #define MAX_ATTRIBUTE  63
        !            19: #define MAX_SEMNAME    14
        !            20: 
        !            21: 
        !            22: typedef struct _tagSess {
        !            23:        key_t   key;
        !            24:        u_char  type;
        !            25:        off_t   eom;
        !            26:        void    *addr;
        !            27:        off_t   offset;
        !            28:        union {
        !            29:                int     shmid;
        !            30:                int     fd;
        !            31:        } mem;
        !            32:        union {
        !            33:                int     semid;
        !            34:                sem_t   *sid;
        !            35:        } id;
        !            36: } tagSess;
        !            37: 
        !            38: 
        !            39: // -------------------------------------------------------
        !            40: // sess_GetErrno() Get error code of last operation
        !            41: inline int sess_GetErrno();
        !            42: // sess_GetError() Get error text of last operation
        !            43: inline const char *sess_GetError();
        !            44: // -------------------------------------------------------
        !            45: 
        !            46: 
        !            47: /*
        !            48:  * initSession() Initializing session structure, if session file not exists creating with specified tech
        !            49:  * @cnID = Technology using in session. SHARED_IPC IPC tech; SHARED_MAP BSD MemoryMap tech
        !            50:  * @csFName = Session filename for build key and identified
        !            51:  * @Sess = Session item
        !            52:  * return: 0 OK new key created, -1 error: no memory or file not created, 1 OK key finded
        !            53: */
        !            54: inline int initSession(const int cnID, const char *csFName, tagSess ** __restrict Sess);
        !            55: /*
        !            56:  * freeSession() Free allocated memory for session item and delete session file if present name
        !            57:  * @csFName = Session filename for delete, if NULL nothing delete
        !            58:  * @Sess = Session item
        !            59: */
        !            60: inline void freeSession(const char *csFName, tagSess ** __restrict Sess);
        !            61: 
        !            62: /*
        !            63:  * map_createSession() MMAP Created session and allocated resources
        !            64:  * @csFName = Session name for identified
        !            65:  * @cnSeed = Seed for securing key
        !            66:  * @cnSize = Allocated shared memory size in bytes
        !            67:  * @Sess = Session item
        !            68:  * return: 0 Ok successful, -1 error: not allocated resources
        !            69: */
        !            70: int map_createSession(const char *csFName, const int cnSeed, const u_int cnSize, tagSess ** __restrict Sess);
        !            71: /*
        !            72:  * map_destroySession() MMAP free shared resources
        !            73:  * @csFName = Session name for delete
        !            74:  * @Sess = Session item
        !            75: */
        !            76: void map_destroySession(const char *csFName, tagSess ** __restrict Sess);
        !            77: 
        !            78: /*
        !            79:  * ipc_createSession() IPC Created session and allocated resources
        !            80:  * @csFName = Session name for identified
        !            81:  * @cnSeed = Seed for securing key
        !            82:  * @cnSize = Allocated shared memory size in bytes
        !            83:  * @Sess = Session item
        !            84:  * return: 0 Ok successful, -1 error: not allocated resources
        !            85: */
        !            86: int ipc_createSession(const char *csFName, const int cnSeed, const u_int cnSize, tagSess ** __restrict Sess);
        !            87: /*
        !            88:  * ipc_destroySession() IPC free shared resources
        !            89:  * @csFName = Session name for delete
        !            90:  * @Sess = Session item
        !            91: */
        !            92: void ipc_destroySession(const char *csFName, tagSess ** __restrict Sess);
        !            93: 
        !            94: /*
        !            95:  * map_attachSession() MMAP Attach to shared memory & return begin address
        !            96:  * @s = Session item
        !            97:  * @procMem = Custom start address (optionl) *default must be 0*
        !            98:  * return: NULL failed attach, !=NULL begin address of memory
        !            99: */
        !           100: inline void *map_attachSession(tagSess * __restrict s, void *procMem);
        !           101: /*
        !           102:  * map_detachSession() MMAP Detach from shared memory
        !           103:  * @s = Session item
        !           104: */
        !           105: inline void map_detachSession(tagSess * __restrict s);
        !           106: 
        !           107: /*
        !           108:  * ipc_attachSession() IPC Attach to shared memory & return begin address
        !           109:  * @s = Session item
        !           110:  * @procMem = Custom start address (optionl) *default must be 0*
        !           111:  * return: NULL failed attach, !=NULL begin address of memory
        !           112: */
        !           113: inline void *ipc_attachSession(tagSess * __restrict s, void *procMem);
        !           114: /*
        !           115:  * ipc_detachSession() IPC Detach from shared memory
        !           116:  * @s = Session item
        !           117: */
        !           118: inline void ipc_detachSession(tagSess * __restrict s);
        !           119: 
        !           120: /*
        !           121:  * map_notSemaphore() MMAP negative block if semaphore isn`t signaled
        !           122:  * @s = Session item
        !           123: */
        !           124: inline void map_notSemaphore(tagSess * __restrict s);
        !           125: /*
        !           126:  * map_isSemaphored() MMAP Check semaphore
        !           127:  * @s = Session item
        !           128:  * return: -1 error: can`t return semaphore, 0 = false, 1 = true
        !           129: */
        !           130: inline int map_isSemaphored(tagSess * __restrict s);
        !           131: /*
        !           132:  * map_addSemaphore() MMAP unblock semaphore, increment semaphore
        !           133:  * @s = Session item
        !           134:  * return: 0 Ok, -1 error: can`t increment 
        !           135: */
        !           136: inline int map_addSemaphore(tagSess * __restrict s);
        !           137: /*
        !           138:  * map_decSemaphore() MMAP block semaphore, decrement semaphore
        !           139:  * @s = Session item
        !           140:  * return: 0 Ok, -1 error: can`t decrement 
        !           141: */
        !           142: inline int map_decSemaphore(tagSess * __restrict s);
        !           143: 
        !           144: /*
        !           145:  * ipc_notSemaphore() IPC negative block if semaphore isn`t signaled
        !           146:  * @s = Session item
        !           147: */
        !           148: inline void ipc_notSemaphore(tagSess * __restrict s);
        !           149: /*
        !           150:  * ipc_isSemaphored() IPC Check semaphore
        !           151:  * @s = Session item
        !           152:  * return: -1 error: can`t return semaphore, 0 = false, 1 = true
        !           153: */
        !           154: inline int ipc_isSemaphored(tagSess * __restrict s);
        !           155: /*
        !           156:  * ipc_addSemaphore() IPC unblock semaphore, increment semaphore
        !           157:  * @s = Session item
        !           158:  * return: 0 Ok, -1 error: can`t increment 
        !           159: */
        !           160: inline int ipc_addSemaphore(tagSess * __restrict s);
        !           161: /*
        !           162:  * ipc_decSemaphore() IPC block semaphore, decrement semaphore
        !           163:  * @s = Session item
        !           164:  * return: 0 Ok, -1 error: can`t decrement 
        !           165: */
        !           166: inline int ipc_decSemaphore(tagSess * __restrict s);
        !           167: 
        !           168: // ---------------------------------------------------------
        !           169: //
        !           170: //  Lazy macros for lazy programmers :-) by Michael Pounov; Optimizing work with sessions!
        !           171: //
        !           172: 
        !           173: #define DESTROY_SESSION(fname, s)      do { \
        !           174:                                                switch ((s)->type) { \
        !           175:                                                        case SHARED_IPC: \
        !           176:                                                                         ipc_destroySession((fname), (s)); \
        !           177:                                                                         break; \
        !           178:                                                        case SHARED_MAP: \
        !           179:                                                                         map_destroySession((fname), (s)); \
        !           180:                                                                         break; \
        !           181:                                                } \
        !           182:                                        } while(0)
        !           183: 
        !           184: #define ATTACH_MEMORY(s, shared)       do { \
        !           185:                                                switch ((s)->type) { \
        !           186:                                                        case SHARED_IPC: \
        !           187:                                                                         (shared) = ipc_attachSession((s), 0); \
        !           188:                                                                         break; \
        !           189:                                                        case SHARED_MAP: \
        !           190:                                                                         (shared) = map_attachSession((s), 0); \
        !           191:                                                                         break; \
        !           192:                                                } \
        !           193:                                        } while(0)
        !           194: 
        !           195: #define DETACH_MEMORY(s)               do { \
        !           196:                                                switch ((s)->type) { \
        !           197:                                                        case SHARED_IPC: \
        !           198:                                                                         ipc_detachSession((s)); \
        !           199:                                                                         break; \
        !           200:                                                        case SHARED_MAP: \
        !           201:                                                                         map_detachSession((s)); \
        !           202:                                                                         break; \
        !           203:                                                } \
        !           204:                                        } while(0)
        !           205: 
        !           206: #define NOT_SEMAPHORE(s)       do { \
        !           207:                                        switch ((s)->type) { \
        !           208:                                                case SHARED_IPC: \
        !           209:                                                                 ipc_notSemaphore((s)); \
        !           210:                                                                 break; \
        !           211:                                                case SHARED_MAP: \
        !           212:                                                                 map_notSemaphore((s)); \
        !           213:                                                                 break; \
        !           214:                                        } \
        !           215:                                } while(0)
        !           216: 
        !           217: #define IS_SEMAPHORED(s, ret)  do { \
        !           218:                                        switch ((s)->type) { \
        !           219:                                                case SHARED_IPC: \
        !           220:                                                                 (ret) = ipc_isSemaphored((s)); \
        !           221:                                                                 break; \
        !           222:                                                case SHARED_MAP: \
        !           223:                                                                 (ret) = map_isSemaphored((s)); \
        !           224:                                                                 break; \
        !           225:                                                default: \
        !           226:                                                         (ret) = -1; \
        !           227:                                        } \
        !           228:                                } while(0)
        !           229: 
        !           230: #define ADD_SEMAPHORE(s, ret)  do { \
        !           231:                                        switch ((s)->type) { \
        !           232:                                                case SHARED_IPC: \
        !           233:                                                                 (ret) = ipc_addSemaphore((s)); \
        !           234:                                                                 break; \
        !           235:                                                case SHARED_MAP: \
        !           236:                                                                 (ret) = map_addSemaphore((s)); \
        !           237:                                                                 break; \
        !           238:                                                default: \
        !           239:                                                         (ret) = -1; \
        !           240:                                        } \
        !           241:                                } while(0)
        !           242: 
        !           243: #define DEC_SEMAPHORE(s, ret)  do { \
        !           244:                                        switch ((s)->type) { \
        !           245:                                                case SHARED_IPC: \
        !           246:                                                                 (ret) = ipc_decSemaphore((s)); \
        !           247:                                                                 break; \
        !           248:                                                case SHARED_MAP: \
        !           249:                                                                 (ret) = map_decSemaphore((s)); \
        !           250:                                                                 break; \
        !           251:                                                default: \
        !           252:                                                         (ret) = -1; \
        !           253:                                        } \
        !           254:                                } while(0)
        !           255: 
        !           256: // ---------------------------------------------------------
        !           257: 
        !           258: /*
        !           259:  * sess_GetValue() Get value from session shared memory from attribute
        !           260:  * @s = Session item
        !           261:  * @csAttr = Attribute for search
        !           262:  * @psVal = Return string buffer
        !           263:  * @pnLen = Length of return string buffer, 
        !           264:        // *{pnLen} input is max_size of buffer & output is really taken bytes
        !           265:  * return: 0 not found, -1 error: in parameter, >0 get position, if define item merged with IS_DEF
        !           266: */
        !           267: int sess_GetValue(tagSess * __restrict s, const char *csAttr, char *psVal, int *pnLen);
        !           268: /*
        !           269:  * sess_DelValue() Delete item from session shared memory
        !           270:  * @s = Session item
        !           271:  * @csAttr = Attribute for erasing
        !           272:  * return: 0 Ok, -1 error: in parameter
        !           273: */
        !           274: int sess_DelValue(tagSess * __restrict s, const char *csAttr);
        !           275: /*
        !           276:  * sess_SetValue() Set item into session shared memory or update if find it
        !           277:  * @s = Session item
        !           278:  * @csAttr = Attribute
        !           279:  * @psVal = Value
        !           280:  * return: 0 nothing, -1 error: in parameter, 
        !           281:        >0 set position, if add item merged with IS_ADD and if define item merged with IS_DEF
        !           282: */
        !           283: int sess_SetValue(tagSess * __restrict s, const char *csAttr, const char *psVal);
        !           284: 
        !           285: 
        !           286: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>