botsense  3.2.0
RoadNarrows Client-Server Proxied Services Framework
bsNullServer.c File Reference

BotSense bsProxy server plug-in DLL /dev/null device module. More...

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "rnr/rnrconfig.h"
#include "rnr/log.h"
#include "rnr/new.h"
#include "rnr/netmsgs.h"
#include "botsense/BotSense.h"
#include "botsense/libBotSense.h"
#include "botsense/bsProxyModIF.h"
#include "botsense/bsNull.h"
#include "botsense/bsNullMsgs.h"

Go to the source code of this file.

Classes

struct  BsModCtlBlk_T
 Module resource control block structure type. More...
 

Macros

#define BSMOD_MAX_HANDLES   BSPROXY_VCONN_MOD_NUMOF
 Maximum number of module supported simultaneous virtual connections.
 

Functions

static BsModCtlBlk_TbsModCtlBlkNew (int fd, bool_t bTrace)
 Allocate a new resource control block. More...
 
static void bsModCtlBlkDelete (BsModCtlBlk_T *pCtlBlk)
 Delete an allocated resource control block. More...
 
static int bsModNullReqWrite (BsVConnHnd_T hndVConn, BsTid_T uTid, BsMsgId_T uMsgIdReq, byte_t bufReq[], size_t uReqLen)
 Service a /dev/null write request. More...
 
int bsModInit (const char *sModUri, const BsModProxyCb_T *pCallbacks)
 Initialize /dev/null module. More...
 
void bsModExit ()
 Exit /dev/null module. More...
 
int bsModOpen (BsVConnHnd_T hndVConn, bool_t bTrace, const char *sDevUri, byte_t argbuf[], size_t uArgSize)
 Open an /dev/null device and associate with the given handle. More...
 
int bsModClose (BsVConnHnd_T hndVConn)
 Close the /dev/null device and disassociate virtual connection handle. More...
 
int bsModRequest (BsVConnHnd_T hndVConn, BsTid_T uTid, BsMsgId_T uMsgIdReq, byte_t bufReq[], size_t uReqLen)
 Service an /dev/null request. More...
 
int bsModTrace (BsVConnHnd_T hndVConn, bool_t bTrace)
 Enable/disable message tracing on handle. More...
 
const BsModInfo_TbsModInfo ()
 Query for the static module information. More...
 

Variables

static BsModInfo_T BsModInfo
 Module static information. More...
 
static const char * BsModUri
 module canonical name
 
static const BsModProxyCb_TBsModCallbacks
 module to bsProxy callbacks
 
static BsModRsrcTbl_TBsModRsrcTbl
 module resource table
 

Detailed Description

BotSense bsProxy server plug-in DLL /dev/null device module.

LastChangedDate
2010-09-13 10:25:05 -0600 (Mon, 13 Sep 2010)
Rev
581
Author
Robin Knight (robin.nosp@m..kni.nosp@m.ght@r.nosp@m.oadn.nosp@m.arrow.nosp@m.s.co.nosp@m.m)

Definition in file bsNullServer.c.

Function Documentation

int bsModClose ( BsVConnHnd_T  hndVConn)

Close the /dev/null device and disassociate virtual connection handle.

The actual device and resources are only cleared if this is the last virtual connection reference to this device.

Parameters
hndVConnVirtual connection handle.
Returns
On success, BS_OK is returned.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 397 of file bsNullServer.c.

References BS_ECODE_INTERNAL, BS_ECODE_NO_VCONN, BS_OK, BSMOD_LOG_ERROR, BSMOD_RSRC_IS_INUSE, BSMOD_TRY_VCONN_HND_RANGE, bsModCtlBlkDelete(), BsModProxyCb_T::m_cbModRsrcRemove, and BsModCtlBlk_T::m_fd.

398 {
399  BsModCtlBlk_T *pCtlBlk;
400 
401  // check if handle is in valid range
402  BSMOD_TRY_VCONN_HND_RANGE(hndVConn);
403 
404  // check is resouce is in-use (i.e. opened)
405  if( !BSMOD_RSRC_IS_INUSE(BsModRsrcTbl, hndVConn) )
406  {
408  "Resources for virtual connection not found.");
409  return -BS_ECODE_NO_VCONN;
410  }
411 
412  // remove from module's resource table
414  hndVConn);
415 
416  if( pCtlBlk == NULL )
417  {
418  BSMOD_LOG_ERROR(hndVConn, BS_ECODE_INTERNAL, "No module resource found.");
419  return -BS_ECODE_INTERNAL;
420  }
421 
422  if( pCtlBlk->m_fd >= 0 )
423  {
424  close(pCtlBlk->m_fd);
425  LOGDIAG2("VConn=%d: close(fd=%d).", hndVConn, pCtlBlk->m_fd);
426  }
427 
428  bsModCtlBlkDelete(pCtlBlk);
429 
430  return BS_OK;
431 }
#define BSMOD_LOG_ERROR(hndVConn, ecode, efmt,...)
Log Interface Module Error.
Definition: bsProxyModIF.h:405
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
#define BSMOD_RSRC_IS_INUSE(pRsrcTbl, hndVConn)
Test if the resource table resource handle slot is in-use.
Definition: bsProxyModIF.h:169
Module resource control block structure type.
Definition: bsI2CServer.c:103
#define BS_OK
not an error, success
Definition: BotSense.h:66
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_TRY_VCONN_HND_RANGE(hndVConn)
Check if handle is within the range of module handles.
Definition: bsProxyModIF.h:499
void *(* m_cbModRsrcRemove)(BsModRsrcTbl_T *pRsrcTbl, BsVConnHnd_T hndVConn)
Remove a resource from the resource table.
Definition: bsProxyModIF.h:320
static void bsModCtlBlkDelete(BsModCtlBlk_T *pCtlBlk)
Delete an allocated resource control block.
Definition: bsNullServer.c:142
#define BS_ECODE_INTERNAL
internal error (bug)
Definition: BotSense.h:93
#define BS_ECODE_NO_VCONN
virtual connection not found
Definition: BotSense.h:80
int m_fd
/dev/null open file descriptor
Definition: bsNullServer.c:109
static void bsModCtlBlkDelete ( BsModCtlBlk_T pCtlBlk)
static

Delete an allocated resource control block.

Parameters
pCtlBlkPointer to allocated control block.

Definition at line 142 of file bsNullServer.c.

Referenced by bsModClose(), and bsModExit().

143 {
144  if( pCtlBlk != NULL )
145  {
146  delete(pCtlBlk);
147  }
148 }
static BsModCtlBlk_T* bsModCtlBlkNew ( int  fd,
bool_t  bTrace 
)
static

Allocate a new resource control block.

Parameters
fdFile descriptor.
bTraceDo [not] trace messages.
Returns
Pointer to new allocated control block.

Definition at line 125 of file bsNullServer.c.

References BsModCtlBlk_T::m_bTrace, and BsModCtlBlk_T::m_fd.

Referenced by bsModOpen().

126 {
127  BsModCtlBlk_T *pCtlBlk;
128 
129  pCtlBlk = NEW(BsModCtlBlk_T);
130 
131  pCtlBlk->m_fd = fd;
132  pCtlBlk->m_bTrace = bTrace;
133 
134  return pCtlBlk;
135 }
Module resource control block structure type.
Definition: bsI2CServer.c:103
bool_t m_bTrace
do [not] trace messages
Definition: bsI2CServer.c:108
int m_fd
/dev/null open file descriptor
Definition: bsNullServer.c:109
void bsModExit ( )

Exit /dev/null module.

Called once prior to module being unloaded.

All open /dev/null devices will be closed.

Definition at line 288 of file bsNullServer.c.

References BSMOD_MAX_HANDLES, bsModCtlBlkDelete(), BsModUri, BsModProxyCb_T::m_cbModRsrcTblDelete, BsModCtlBlk_T::m_fd, and BsModRsrcTbl_T::m_vecRsrc.

289 {
290  int index;
291  BsModCtlBlk_T *pCtlBlk;
292 
293  // free all module virtual connnection resources.
294  for(index=0; index<BSMOD_MAX_HANDLES; ++index)
295  {
296  if( (pCtlBlk = (BsModCtlBlk_T *)BsModRsrcTbl->m_vecRsrc[index]) != NULL )
297  {
298  if( pCtlBlk->m_fd >= 0 )
299  {
300  close(pCtlBlk->m_fd);
301  }
302  bsModCtlBlkDelete(pCtlBlk);
303  }
304  }
305 
306  // free resource table
308 
309  delete((char *)BsModUri);
310 }
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
void(* m_cbModRsrcTblDelete)(BsModRsrcTbl_T *pRsrcTbl)
Delete an allocated resource table.
Definition: bsProxyModIF.h:294
Module resource control block structure type.
Definition: bsI2CServer.c:103
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_MAX_HANDLES
Maximum number of module supported simultaneous virtual connections.
Definition: bsNullServer.c:100
static const char * BsModUri
module canonical name
Definition: bsNullServer.c:113
static void bsModCtlBlkDelete(BsModCtlBlk_T *pCtlBlk)
Delete an allocated resource control block.
Definition: bsNullServer.c:142
void ** m_vecRsrc
vecRsrc[index] -> rsrc
Definition: bsProxyModIF.h:139
int m_fd
/dev/null open file descriptor
Definition: bsNullServer.c:109
const BsModInfo_T* bsModInfo ( )

Query for the static module information.

Returns
Pointer to module static information.

Definition at line 526 of file bsNullServer.c.

References BsModInfo.

527 {
528  return &BsModInfo;
529 }
static BsModInfo_T BsModInfo
Module static information.
Definition: bsNullServer.c:75
int bsModInit ( const char *  sModUri,
const BsModProxyCb_T pCallbacks 
)

Initialize /dev/null module.

Called once after module is loaded.

Parameters
sModUriExpanded, canonical module path name.
pCallbacksPointer to a set of module -> bsProxy core callback functions.
Returns
On success, BS_OK is returned.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 268 of file bsNullServer.c.

References BS_OK, BSMOD_MAX_HANDLES, BsModUri, and BsModProxyCb_T::m_cbModRsrcTblNew.

269 {
270  BsModUri = new_strdup(sModUri);
271 
272  // save bsProxy server callbacks
273  BsModCallbacks = pCallbacks;
274 
275  // create module resource table
277 
278  return BS_OK;
279 }
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
#define BS_OK
not an error, success
Definition: BotSense.h:66
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_MAX_HANDLES
Maximum number of module supported simultaneous virtual connections.
Definition: bsNullServer.c:100
static const char * BsModUri
module canonical name
Definition: bsNullServer.c:113
BsModRsrcTbl_T *(* m_cbModRsrcTblNew)(int nMaxResources)
Allocatae a new module resource table of fixed size.
Definition: bsProxyModIF.h:284
static int bsModNullReqWrite ( BsVConnHnd_T  hndVConn,
BsTid_T  uTid,
BsMsgId_T  uMsgIdReq,
byte_t  bufReq[],
size_t  uReqLen 
)
static

Service a /dev/null write request.

Note
A module-specific request service must send a response.
Parameters
hndVConnVirtual connection handle.
uTidRequest-Response transaction id.
uMsgIdReqRequest message id.
bufReqPacked request message buffer.
uReqLenSize of request in buffer (number of bytes).
Returns
On success, BS_OK is returned.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 163 of file bsNullServer.c.

References BS_ECODE_BAD_MSG, BS_ECODE_BAD_VCONN_HND, BS_ECODE_NO_VCONN, BS_ECODE_SYS, BS_OK, BSMOD_IS_VCONN_HANDLE, BSMOD_RSRC, BSMOD_SEND_ERROR_RSP, BSMOD_SEND_NMERROR_RSP, BSMOD_SEND_SYSERROR_RSP, BsNullMsgIdRspWrite, BsNullPackRspWrite(), BsNullUnpackReqWrite(), BSPROXY_BUF_BODY, BSPROXY_MSG_MAX_LEN, BsModCtlBlk_T::m_bTrace, BsNullRspWrite_T::m_byteswritten, BsModProxyCb_T::m_cbSendRsp, BsNullReqWrite_T::m_count, BsModCtlBlk_T::m_fd, BsNullReqWrite_T::m_writebuf, and BsNullReqWrite_T::u.

Referenced by bsModRequest().

168 {
169  static BsNullMsgId_T uMsgIdRsp = BsNullMsgIdRspWrite;
170 
171  BsModCtlBlk_T *pCtlBlk; // resource control block
172  BsNullReqWrite_T msgReq; // request message
173  BsNullRspWrite_T msgRsp; // response message
174  byte_t bufRsp[BSPROXY_MSG_MAX_LEN]; // req/rsp buffer
175  int n; // number of bytes/return code
176 
177  //
178  // Parameter checks
179  //
180  if( !BSMOD_IS_VCONN_HANDLE(hndVConn) )
181  {
183  "Module vconn handle out-of-range.");
184  return -BS_ECODE_BAD_VCONN_HND; \
185  }
186 
187  // retrieve the resource control block
188  pCtlBlk = (BsModCtlBlk_T *)BSMOD_RSRC(BsModRsrcTbl, hndVConn);
189 
190  if( pCtlBlk == NULL )
191  {
193  "No resources for virtual connection found.");
194  return -BS_ECODE_NO_VCONN;
195  }
196 
197  //
198  // Unpack client request.
199  //
200  n = BsNullUnpackReqWrite(bufReq, uReqLen, &msgReq, pCtlBlk->m_bTrace);
201 
202  // check unpacking return code
203  if( n < 0 )
204  {
205  BSMOD_SEND_NMERROR_RSP(BsModCallbacks, hndVConn, uTid, n,
206  "MsgId=%u", uMsgIdReq);
207  return -BS_ECODE_BAD_MSG;
208  }
209 
210  //
211  // Execute client request.
212  //
213  n = write(pCtlBlk->m_fd, msgReq.m_writebuf.u.m_buf,
214  (size_t)msgReq.m_writebuf.m_count);
215 
216  // check operation return code
217  if( n < 0 )
218  {
219  BSMOD_SEND_SYSERROR_RSP(BsModCallbacks, hndVConn, uTid,
220  "write(fd=%d, ...).", pCtlBlk->m_fd);
221  return -BS_ECODE_SYS;
222  }
223 
224  LOGDIAG3("VConn=%d: %d=write(fd=%d, buf=%p, count=%zu).",
225  hndVConn, n, pCtlBlk->m_fd, msgReq.m_writebuf.u.m_buf,
226  (size_t)msgReq.m_writebuf.m_count);
227 
228  //
229  // Pack server response.
230  //
231  msgRsp.m_byteswritten = (byte_t)n;
232 
233  // pack
234  n = BsNullPackRspWrite(&msgRsp, BSPROXY_BUF_BODY(bufRsp), pCtlBlk->m_bTrace);
235 
236  // check packing return code
237  if( n < 0 )
238  {
239  BSMOD_SEND_NMERROR_RSP(BsModCallbacks, hndVConn, uTid, n,
240  "MsgId=%u", uMsgIdRsp);
241  return -BS_ECODE_BAD_MSG;
242  }
243 
244  //
245  // Send response.
246  //
247  BsModCallbacks->m_cbSendRsp(hndVConn, uTid, uMsgIdRsp, bufRsp, (size_t)n);
248 
249  return BS_OK;
250 }
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
union BsNullReqWrite_T::@8::@9 u
aligned vector items
Module resource control block structure type.
Definition: bsI2CServer.c:103
bool_t m_bTrace
do [not] trace messages
Definition: bsI2CServer.c:108
INLINE_IN_H int BsNullUnpackReqWrite(byte_t buf[], size_t uMsgLen, BsNullReqWrite_T *pStruct, bool_t bTrace)
Unpack a BsNullReqWrite ITV message in big-endian byte order from the input buffer.
Definition: bsNullMsgs.h:159
#define BSMOD_IS_VCONN_HANDLE(hndVConn)
Test if the handle is in the valid module virtual connection range.
Definition: bsProxyModIF.h:149
#define BS_OK
not an error, success
Definition: BotSense.h:66
#define BS_ECODE_BAD_VCONN_HND
bad virtual connection handle
Definition: BotSense.h:79
#define BS_ECODE_SYS
system (errno) error
Definition: BotSense.h:92
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BS_ECODE_BAD_MSG
bad message
Definition: BotSense.h:76
void(* m_cbSendRsp)(BsVConnHnd_T hndVConn, BsTid_T uTid, BsMsgId_T uMsgId, byte_t bufRsp[], size_t uRspLen)
Send module-specific repsonse callback function.
Definition: bsProxyModIF.h:246
INLINE_IN_H int BsNullPackRspWrite(BsNullRspWrite_T *pStruct, byte_t buf[], size_t bufSize, bool_t bTrace)
Pack a BsNullRspWrite ITV message in big-endian byte order into the output buffer.
Definition: bsNullMsgs.h:181
#define BSMOD_RSRC(pRsrcTbl, hndVConn)
Get the resource given the handle.
Definition: bsProxyModIF.h:196
#define BSMOD_SEND_NMERROR_RSP(pCb, hndVConn, uTid, nmecode, efmt,...)
Log NetMsgs (Un)Packing Error and Send Error Response.
Definition: bsProxyModIF.h:464
struct BsNullReqWrite_T::@8 m_writebuf
vector
byte_t m_byteswritten
byteswritten
Definition: bsNullMsgs.h:83
#define BSPROXY_BUF_BODY(buf)
Convenience macro to produce a buffer (offset, size) 2-tuple.
Definition: BotSense.h:272
BsNullMsgId_T
Definition: bsNullMsgs.h:35
#define BS_ECODE_NO_VCONN
virtual connection not found
Definition: BotSense.h:80
#define BSMOD_SEND_SYSERROR_RSP(pCb, hndVConn, uTid, efmt,...)
Log System Error and Send Error Response.
Definition: bsProxyModIF.h:481
#define BSPROXY_MSG_MAX_LEN
total message maximum length
Definition: BotSense.h:259
#define BSMOD_SEND_ERROR_RSP(pCb, hndVConn, uTid, ecode, efmt,...)
Log <b><i>BotSense</i></b> Error and Send Error Response.
Definition: bsProxyModIF.h:447
size_t m_count
vector item count
Definition: bsNullMsgs.h:63
int m_fd
/dev/null open file descriptor
Definition: bsNullServer.c:109
int bsModOpen ( BsVConnHnd_T  hndVConn,
bool_t  bTrace,
const char *  sDevUri,
byte_t  argbuf[],
size_t  uArgSize 
)

Open an /dev/null device and associate with the given handle.

Subsequent calls to the module use the given handle to associate the specific module-device instance.

The argument buffer contains packed message arguements specific to the device and module. For this /dev/null module, there are now additional arguments.

Note
It is the responsibile of the client to ensure consistency if more than one virtual connection is established.
Parameters
hndVConnVirtual connection handle.
bTraceDo [not] enable message tracing on this handle.
sDevUriDevice URI.
argbufPacked specific open configuration arguments submessage.
uArgSizeSize of packed argumets in buffer (number of bytes).
Returns
On success, returns a unique resource descriptor ≥ 0 which is typically an opened file descriptor or socket descriptor, but can be module defined.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 337 of file bsNullServer.c.

References BS_ECODE_BUSY, BS_ECODE_NO_RSRC, BS_ECODE_SYS, BSMOD_LOG_ERROR, BSMOD_LOG_SYSERROR, BSMOD_MAX_HANDLES, BSMOD_RSRC_INUSE_COUNT, BSMOD_RSRC_IS_INUSE, BSMOD_TRY_VCONN_HND_RANGE, bsModCtlBlkNew(), and BsModProxyCb_T::m_cbModRsrcAdd.

342 {
343  BsModCtlBlk_T *pCtlBlk;
344  int fd;
345 
346  // Check if handle is in valid range.
347  BSMOD_TRY_VCONN_HND_RANGE(hndVConn);
348 
349  // Check if resources are available.
351  {
353  "InUseCount=%u: No more resources available.",
355  return -BS_ECODE_NO_RSRC;
356  }
357 
358  // Check if the handle in this module's resource table is not already in-use.
359  else if( BSMOD_RSRC_IS_INUSE(BsModRsrcTbl, hndVConn) )
360  {
361  BSMOD_LOG_ERROR(hndVConn, BS_ECODE_BUSY,
362  "Module virtual connection handle already in use");
363  return -BS_ECODE_BUSY;
364  }
365 
366  // open device
367  fd = open(sDevUri, O_WRONLY);
368 
369  if( fd < 0 )
370  {
371  BSMOD_LOG_SYSERROR(hndVConn, "open(%s,...).", sDevUri);
372  return -BS_ECODE_SYS;
373  }
374 
375  // allocate a new control block and initialize
376  pCtlBlk = bsModCtlBlkNew(fd, bTrace);
377 
378  // add to module resource table
379  BsModCallbacks->m_cbModRsrcAdd(BsModRsrcTbl, hndVConn, pCtlBlk);
380 
381  LOGDIAG2("VConn=%d: %d=open(dev=%s, ...).", hndVConn, fd, sDevUri);
382 
383  return fd;
384 }
#define BSMOD_LOG_ERROR(hndVConn, ecode, efmt,...)
Log Interface Module Error.
Definition: bsProxyModIF.h:405
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
#define BSMOD_RSRC_IS_INUSE(pRsrcTbl, hndVConn)
Test if the resource table resource handle slot is in-use.
Definition: bsProxyModIF.h:169
static BsModCtlBlk_T * bsModCtlBlkNew(int fd, bool_t bTrace)
Allocate a new resource control block.
Definition: bsNullServer.c:125
#define BSMOD_LOG_SYSERROR(hndVConn, efmt,...)
Log Interface Module System Error.
Definition: bsProxyModIF.h:431
Module resource control block structure type.
Definition: bsI2CServer.c:103
int(* m_cbModRsrcAdd)(BsModRsrcTbl_T *pRsrcTbl, BsVConnHnd_T hndVConn, void *pRsrc)
Add a new resource to the resource table.
Definition: bsProxyModIF.h:305
#define BS_ECODE_SYS
system (errno) error
Definition: BotSense.h:92
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_TRY_VCONN_HND_RANGE(hndVConn)
Check if handle is within the range of module handles.
Definition: bsProxyModIF.h:499
#define BSMOD_RSRC_INUSE_COUNT(pRsrcTbl)
Get the resouce table current in-use count.
Definition: bsProxyModIF.h:208
#define BSMOD_MAX_HANDLES
Maximum number of module supported simultaneous virtual connections.
Definition: bsNullServer.c:100
#define BS_ECODE_NO_RSRC
no resource available
Definition: BotSense.h:85
#define BS_ECODE_BUSY
resource busy
Definition: BotSense.h:86
int bsModRequest ( BsVConnHnd_T  hndVConn,
BsTid_T  uTid,
BsMsgId_T  uMsgIdReq,
byte_t  bufReq[],
size_t  uReqLen 
)

Service an /dev/null request.

Note
A module-specific request service must send a response.
Parameters
hndVConnVirtual connection handle.
uTidRequest-Response transaction id.
uMsgIdReqRequest message id.
bufReqPacked request message buffer.
uReqLenSize of request in buffer (number of bytes).
Returns
On success, BS_OK is returned.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 446 of file bsNullServer.c.

References BS_ECODE_BAD_VCONN_HND, BS_ECODE_NO_VCONN, BS_ECODE_UNKNOWN_REQ, BSMOD_IS_VCONN_HANDLE, BSMOD_RSRC, BSMOD_SEND_ERROR_RSP, bsModNullReqWrite(), and BsNullMsgIdReqWrite.

451 {
452  BsModCtlBlk_T *pCtlBlk;
453 
454  // check if handle is in valid range
455  if( !BSMOD_IS_VCONN_HANDLE(hndVConn) )
456  {
458  "Module vconn handle out-of-range.");
459  return -BS_ECODE_BAD_VCONN_HND; \
460  }
461 
462  // retrieve resource control block
463  pCtlBlk = (BsModCtlBlk_T *)BSMOD_RSRC(BsModRsrcTbl, hndVConn);
464 
465  // check resource
466  if( pCtlBlk == NULL )
467  {
469  "No resources for virtual connection found.");
470  return -BS_ECODE_NO_VCONN;
471  }
472 
473  switch( uMsgIdReq )
474  {
475  case BsNullMsgIdReqWrite:
476  return bsModNullReqWrite(hndVConn, uTid, uMsgIdReq, bufReq, uReqLen);
477  default:
479  "MsgId=%u.", uMsgIdReq);
480  return -BS_ECODE_UNKNOWN_REQ;
481  }
482 }
static const BsModProxyCb_T * BsModCallbacks
module to bsProxy callbacks
Definition: bsNullServer.c:114
#define BS_ECODE_UNKNOWN_REQ
unknown request
Definition: BotSense.h:81
Module resource control block structure type.
Definition: bsI2CServer.c:103
#define BSMOD_IS_VCONN_HANDLE(hndVConn)
Test if the handle is in the valid module virtual connection range.
Definition: bsProxyModIF.h:149
#define BS_ECODE_BAD_VCONN_HND
bad virtual connection handle
Definition: BotSense.h:79
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_RSRC(pRsrcTbl, hndVConn)
Get the resource given the handle.
Definition: bsProxyModIF.h:196
#define BS_ECODE_NO_VCONN
virtual connection not found
Definition: BotSense.h:80
#define BSMOD_SEND_ERROR_RSP(pCb, hndVConn, uTid, ecode, efmt,...)
Log <b><i>BotSense</i></b> Error and Send Error Response.
Definition: bsProxyModIF.h:447
static int bsModNullReqWrite(BsVConnHnd_T hndVConn, BsTid_T uTid, BsMsgId_T uMsgIdReq, byte_t bufReq[], size_t uReqLen)
Service a /dev/null write request.
Definition: bsNullServer.c:163
int bsModTrace ( BsVConnHnd_T  hndVConn,
bool_t  bTrace 
)

Enable/disable message tracing on handle.

Parameters
hndVConnVirtual connection handle.
bTraceDo [not] enable message tracing on this handle.
Returns
On success, BS_OK is returned.
On error, the appropriate < 0 negated BotSense Error Code is returned.

Definition at line 492 of file bsNullServer.c.

References BS_ECODE_BAD_VCONN_HND, BS_ECODE_NO_VCONN, BS_OK, BSMOD_IS_VCONN_HANDLE, BSMOD_LOG_ERROR, BSMOD_RSRC, and BsModCtlBlk_T::m_bTrace.

493 {
494  BsModCtlBlk_T *pCtlBlk;
495 
496  // check if handle is in valid range
497  if( !BSMOD_IS_VCONN_HANDLE(hndVConn) )
498  {
500  "Module vconn handle out-of-range.");
501  return -BS_ECODE_BAD_VCONN_HND;
502  }
503 
504  // retrieve resource control block
505  pCtlBlk = (BsModCtlBlk_T *)BSMOD_RSRC(BsModRsrcTbl, hndVConn);
506 
507  // check resource
508  if( pCtlBlk == NULL )
509  {
511  "No resources for virtual connection found.");
512  return -BS_ECODE_NO_VCONN;
513  }
514 
515  pCtlBlk->m_bTrace = bTrace;
516 
517  return BS_OK;
518 }
#define BSMOD_LOG_ERROR(hndVConn, ecode, efmt,...)
Log Interface Module Error.
Definition: bsProxyModIF.h:405
Module resource control block structure type.
Definition: bsI2CServer.c:103
bool_t m_bTrace
do [not] trace messages
Definition: bsI2CServer.c:108
#define BSMOD_IS_VCONN_HANDLE(hndVConn)
Test if the handle is in the valid module virtual connection range.
Definition: bsProxyModIF.h:149
#define BS_OK
not an error, success
Definition: BotSense.h:66
#define BS_ECODE_BAD_VCONN_HND
bad virtual connection handle
Definition: BotSense.h:79
static BsModRsrcTbl_T * BsModRsrcTbl
module resource table
Definition: bsNullServer.c:115
#define BSMOD_RSRC(pRsrcTbl, hndVConn)
Get the resource given the handle.
Definition: bsProxyModIF.h:196
#define BS_ECODE_NO_VCONN
virtual connection not found
Definition: BotSense.h:80

Variable Documentation

BsModInfo_T BsModInfo
static
Initial value:
=
{
.mod_name = BS_NULL_SERVER_MOD,
.brief = "The /dev/null proxied device.",
.version = "1.0.0",
.date = "2010.07.21",
.maintainer = "RaodNarrows LLC",
.license = "(C) 2010 RoadNarrows LLC. All rights reserved."
}
#define BS_NULL_SERVER_MOD
server plugin dll module
Definition: bsNull.h:57

Module static information.

Definition at line 75 of file bsNullServer.c.

Referenced by bsModInfo().