This is Unofficial EPICS BASE Doxygen Site
asTrapWrite.h File Reference

API for monitoring external put operations to an IOC. More...

#include "libComAPI.h"
+ Include dependency graph for asTrapWrite.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  asTrapWriteMessage
 The message passed to registered listeners. More...
 

Typedefs

typedef struct asTrapWriteMessage asTrapWriteMessage
 The message passed to registered listeners. More...
 
typedef void * asTrapWriteId
 An identifier needed to unregister an listener. More...
 
typedef void(* asTrapWriteListener) (asTrapWriteMessage *pmessage, int after)
 Pointer to a listener function. More...
 

Functions

LIBCOM_API asTrapWriteId epicsStdCall asTrapWriteRegisterListener (asTrapWriteListener func)
 Register function to be called on asTrapWriteListener. More...
 
LIBCOM_API void epicsStdCall asTrapWriteUnregisterListener (asTrapWriteId id)
 Unregister asTrapWriteListener. More...
 

Detailed Description

API for monitoring external put operations to an IOC.

Author
Marty Kraimer

The access security subsystem provides an API asTrapWrite that makes put/write requests visible to any facility that registers a listener.

Definition in file asTrapWrite.h.

Typedef Documentation

typedef void* asTrapWriteId

An identifier needed to unregister an listener.

Definition at line 58 of file asTrapWrite.h.

typedef void(* asTrapWriteListener) (asTrapWriteMessage *pmessage, int after)

Pointer to a listener function.

Each registered listener function is called twice for every put; once before and once after the write is performed. The listener may set userPvt in the first call and retrieve it in the second call.

Each asTrapWriteMessage can change or may be deleted after the user's asTrapWriteListener returns

The listener function is called by a server thread so it must not block or do anything that causes a delay.

Definition at line 74 of file asTrapWrite.h.

The message passed to registered listeners.

Function Documentation

LIBCOM_API asTrapWriteId epicsStdCall asTrapWriteRegisterListener ( asTrapWriteListener  func)

Register function to be called on asTrapWriteListener.

Parameters
funcThe listener function to be called.
Returns
A listener identifier for unregistering this listener.

Definition at line 73 of file asTrapWrite.c.

75 {
76  listener *plistener;
77  if(pasTrapWritePvt==0) asTrapWriteInit();
78  plistener = callocMustSucceed(1,sizeof(listener),"asTrapWriteRegisterListener");
79  plistener->func = func;
80  epicsMutexMustLock(pasTrapWritePvt->lock);
81  ellAdd(&pasTrapWritePvt->listenerList,&plistener->node);
82  epicsMutexUnlock(pasTrapWritePvt->lock);
83  return((asTrapWriteId)plistener);
84 }
epicsMutexId lock
Definition: asTrapWrite.c:56
asTrapWriteListener func
Definition: asTrapWrite.c:40
void * asTrapWriteId
An identifier needed to unregister an listener.
Definition: asTrapWrite.h:58
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
ELLLIST listenerList
Definition: asTrapWrite.c:52
LIBCOM_API void * callocMustSucceed(size_t count, size_t size, const char *msg)
A calloc() that never returns NULL.
Definition: cantProceed.c:22
ELLNODE node
Definition: asTrapWrite.c:39
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
LIBCOM_API void epicsStdCall asTrapWriteUnregisterListener ( asTrapWriteId  id)

Unregister asTrapWriteListener.

Parameters
idListener identifier from asTrapWriteRegisterListener().

Definition at line 86 of file asTrapWrite.c.

87 {
88  listener *plistener = (listener *)id;
89  writeMessage *pwriteMessage;
90 
91  if(pasTrapWritePvt==0) return;
92  epicsMutexMustLock(pasTrapWritePvt->lock);
93  pwriteMessage = (writeMessage *)ellFirst(&pasTrapWritePvt->writeMessageList);
94  while(pwriteMessage) {
95  listenerPvt *plistenerPvt
96  = (listenerPvt *)ellFirst(&pwriteMessage->listenerPvtList);
97  while(plistenerPvt) {
98  listenerPvt *pnext
99  = (listenerPvt *)ellNext(&plistenerPvt->node);
100  if(plistenerPvt->plistener == plistener) {
101  ellDelete(&pwriteMessage->listenerPvtList,&plistenerPvt->node);
102  freeListFree(pasTrapWritePvt->freeListListenerPvt, plistenerPvt);
103  }
104  plistenerPvt = pnext;
105  }
106  pwriteMessage = (writeMessage *)ellNext(&pwriteMessage->node);
107  }
108  ellDelete(&pasTrapWritePvt->listenerList,&plistener->node);
109  free(plistener);
110  epicsMutexUnlock(pasTrapWritePvt->lock);
111 }
ELLNODE node
Definition: asTrapWrite.c:44
epicsMutexId lock
Definition: asTrapWrite.c:56
ELLNODE node
Definition: asTrapWrite.c:33
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
ELLLIST writeMessageList
Definition: asTrapWrite.c:53
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
LIBCOM_API void epicsStdCall freeListFree(void *pvt, void *pmem)
Definition: freeListLib.c:131
ELLLIST listenerList
Definition: asTrapWrite.c:52
struct listener * plistener
Definition: asTrapWrite.c:34
ELLNODE node
Definition: asTrapWrite.c:39
ELLLIST listenerPvtList
Definition: asTrapWrite.c:46
void * freeListListenerPvt
Definition: asTrapWrite.c:55
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
void ellDelete(ELLLIST *pList, ELLNODE *pNode)
Deletes a node from a list.
Definition: ellLib.c:75
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89