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>