⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ss7_mtp2.h

📁 实现了SS7中MTP2层的基本功能
💻 H
字号:
// File Name: SS7_MTP2.h/////////////////////////////////////////////////#ifndef _EASYTELECOM_SS7_MTP2_H_XING_20080903_#define _EASYTELECOM_SS7_MTP2_H_XING_20080903_#include <sys/types.h>#include <unistd.h>#include <pthread.h>#include <sys/time.h> #include "TypeDef.h"#include "CircularBuffer.h"#include "CircularResendBuffer.h"#define MTP2_EVENT_QUEUE      10240#define MTP2_RECV_BUF_SIZE    50000#define MTP2_MSU2L3_BUF_SIZE     102400#define MTP2_SEND_BUF_SIZE    50000#define MTP2_LSSU_BUF_SIZE    50000#define HIGH_WATER_LEVEL    (0.8)#define MID_WATER_LEVEL     (0.6)class SS7_MTP2 {public:    SS7_MTP2(void);    SS7_MTP2(int _portNumber);    SS7_MTP2(int _portNumber,int _recvBufSize,int _msu2L3BufSize,             int _sendBufSize,int _reSendbufSize);    virtual ~SS7_MTP2(void);    CircularBuffer recvBuffer; // store SUs from L1    CircularBuffer MSU2L3Buffer; // store MSUs for L3 to retrieve    CircularBuffer eventQueue; // internal events buffer for FSM updating    void setPortNumber(int _portNumber) { portNumber = _portNumber; }    int getPortNumber(void) { return portNumber; }    LSCState getLSCState(void) { return lscState; }    IACState getIACState(void) { return iacState; }    TXCState getTXCState(void) { return txcState; }    RCState  getRCState(void)  { return rcState;  }    CCState  getCCState(void)  { return ccState;  }private:    int            fd;    int            portNumber;    CircularBuffer LSSUBuffer; // for sending LSSUs    CircularBuffer sendBuffer; // for sending LSSUs    CircularBuffer resendBuffer; // for sending LSSUs//    CircularResendBuffer sendBuffer; // store MSUs for sending to L1    LSCState       lscState;    IACState       iacState;    POCState       pocState;    TXCState       txcState;    RCState        rcState;    AERMState      aermState;    SUERMState     suermState;    CCState        ccState;    DAEDRState     daedrState;    DAEDTState     daedtState;    int            Ti; // AERM threshold    int            recvHighWaterLevel;    int            recvMidWaterLevel;    float          errorRate;    MTP2_TIMER  timers[7];    bool        octetCountingMode;    bool        alignmentComplete;    bool        emergency;    bool        linkFailure;    bool        localProcessorOutage;    bool        processorOutage;    bool        noProcessorOutage;    bool        level3IndicationReceived;    bool        LSSUAvailable;    bool        SIBreceived;    bool        RTBfull;    bool        MSUinhibited;    int         TXC_FSNF;    int         TXC_FSNL; // not used by RC    int         TXC_FSNT;    int         TXC_FSNX;    int         TXC_FIB;    int         TXC_BIB;    int         RC_FSNF;  //    int         RC_FSNT;  //    int         RC_FSNX;  //     int         RC_FIBX;    int         BSNR;    int         FSNR;    int         FIBR;    int         BIBR;    int         FIBT;
    int         BIBT;
    int         BSNT;
    int         UNB;    int         UNF;    int         Cm;    int         FSNC;    int         Cp;    int         RTR;    int         Ca;    int         Cs;    int         su;    bool        furtherproving;
    bool        FISUMSUaccepted;
    bool        abnormalBSNR;
    bool        abnormalFIBR;
    bool        congestionDiscard;
    bool        congestionAccept;
    SUWithLength * pSUWithLen;     SndSigUnit * pSndSigUnit;    // mutex needed ?    fd_set *    prdfdset;    fd_set *    pwrfdset;
    int         devfd;    int         maxfd;    struct timeval IACTimer;    struct timeval FISUTimer;    struct timeval LSCRestartTimer;public:    void setRdfSet(fd_set * _rdfdset) { prdfdset = _rdfdset; }    void setWrfSet(fd_set * _wrfdset) { pwrfdset = _wrfdset; }    void setDevfd(int _devfd) { devfd = _devfd; }    void setMaxfd(int _maxfd) { maxfd = _maxfd; }    DAEDRState getDAEDRState(void) { return daedrState; }private:    void init_data_member(void);    int sendSINorSIE(bool _emergency);    int TXC_SendFISU(void);    int TXC_SendLSSU(void);    void FISUMSURecvdBSNRBIBR(SUWithLength * _pSUWithLen);    // write message to L1    int writeMessage(unsigned char * _data, int  _count);    SUType getSUType(SUHeaderL2 * suHeader)     {        if( suHeader->LI == 0 )        {            return SUTypeFISU;        }        else if( suHeader->LI > 2 )        {            return SUTypeMSU;        }        else        {            return SUTypeLSSU;        }    }    int EraseRTBMSU(int maxFSN);    int writeSUDowntoL1(SndSigUnit * sndSU);public:    int sendLSSU(void);    int sendFISU(void);    int sendSIO(void);    int sendSIN(void);    int sendSIE(void);    int sendSIOS(void);    int sendSIPO(void);public:    int initMTP2(void);    int resetRecvBuffer(void);    int poweron();    int start();    int updateStates();    int LSC(int event_in, unsigned long param);    int TXC(int event_in, unsigned long param);    int RC(int event_in, unsigned long param);    int POC(int event_in, unsigned long param);    int IAC(int event_in, unsigned long param);    int CC(int event_in, unsigned long param);    int AERM(int event_in, unsigned long param);    int SUERM(int event_in, unsigned long param);    int DAEDR(int event_in, unsigned long param);    int DAEDT(int event_in, unsigned long param);    void checkTimers(void);    // primitive for MTP-3    int sendMessage(unsigned char * _data, int  _count);    // send messages from the sending buffer    int sendMessage(int _number);    // L3 request to read data from L2 recvBuffer    int readMesssage(unsigned char * _buffer, int  _len);};typedef int (SS7_MTP2::*FSMFunc)(int,unsigned long);#endif // _EASYTELECOM_SS7_MTP2_H_XING_20080903_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -