OpenSS7
SS7 for the
Common Man

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified:

Home Overview Status News Documentation Resources About
   
 Overview
 Status
 News
 Documentation
 Resources
 About

   
Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/str/str.hh


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__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/str/str.hh

OpenSS7
SS7 for the
Common Man
Home Overview Status News Documentation Resources About

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified: