OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/drivers/str/str.hh#ifndef __STR_HH__ #define __STR_HH__ #ident "@(#) $Id: str.hh,v 0.8.2.2 2003/02/24 13:00:47 brian Exp $" #pragma interface #define INT int class qp { private: static qp *list; /* class list */ qp *next; /* next object in class list */ qp **prev; /* prev object in class list */ protected: inline int recov(queue_t * q, mblk_t * mp, int err) { switch (err) { case -EBUSY: case -EAGAIN: case -ENOMEM: case -ENOBUFS: putq(q, mp); return (0); } freemsg(mp); return (err); }; inline int resrv(queue_t * q, mblk_t * mp, int err) { if (mp->b_datap->db_type < QPCTL) switch (err) { case -EBUSY: case -EAGAIN: case -ENOMEM: case -ENOBUFS: putbq(q, mp); return (0); } freemsg(mp); return (err); }; int rd(mblk_t * mp); /* read queue processing */ int wr(mblk_t * mp); /* write queue processing */ public: qp(queue_t * q); /* constructor */ ~qp(void); /* destructor */ inline int rput(mblk_t * mp) { /* read queue (msg from below) */ int err; if (mp->b_datap->db_type < QPCTL || rq->q_count) { putq(rq, mp); return (0); } if ((err = rd(mp))) return (recov(rq, mp, err)); return (0); }; inline int rsrv(void) { /* read queue service */ mblk_t *mp; while ((mp = getq(rq))) { int err; if ((err = rd(mp))) return (recov(rq, mp, err)); } return (0); }; inline int wput(mblk_t * mp) { /* write queue (msg from below) */ int err; if (mp->b_datap->db_type < QPCTL || wq->q_count) { putq(wq, mp); return (0); } if ((err = wr(mp))) return (recov(wq, mp, err)); return (0); }; inline int wsrv(void) { /* write queue service */ mblk_t *mp; while ((mp = getq(wq))) { int err; if ((err = wr(mp))) return (recov(wq, mp, err)); } return (0); }; queue_t *rq; /* associated read queue */ queue_t *wq; /* associated write queue */ virtual int m_r_ctl(mblk_t * mp); virtual int m_r_data(mblk_t * mp); virtual int m_r_proto(mblk_t * mp); virtual int m_r_flush(mblk_t * mp); virtual int m_r_error(mblk_t * mp); virtual int m_r_hangup(mblk_t * mp); virtual int m_w_ctl(mblk_t * mp); virtual int m_w_data(mblk_t * mp); virtual int m_w_proto(mblk_t * mp); virtual int m_w_flush(mblk_t * mp); virtual int m_w_error(mblk_t * mp); virtual int m_w_hangup(mblk_t * mp); }; extern "C" { INT q_rput(queue_t * q, mblk_t * mp); INT q_rsrv(queue_t * q); INT q_wput(queue_t * q, mblk_t * mp); INT q_wsrv(queue_t * q); } #endif /* __STR_HH__ */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |