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

📄 ss7_mtp2.cpp

📁 实现了SS7中MTP2层的基本功能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
int SS7_MTP2::initMTP2(void){    printf("SS7_MTP2::initMTP2() !\n" );    lscState = LSCStatePowerOff;    return 0;}int SS7_MTP2::LSC(int event_in,unsigned long param){//    printf("SS7_MTP2::LSC(), event=%d,param=%d!\n",//           event_in, (unsigned int)param );    MTP2_FSM_Event event_out;    LSCEvent event = (LSCEvent)event_in;    switch( lscState )    {    case LSCStatePowerOff: // where to init, in constructor        printf("SS7_MTP2::LSC(), State = LSCStatePowerOff!\n" );        switch( event )        {        case LSCEventPowerOn: // to Power On            printf("SS7_MTP2::LSC(), Event = LSCEventPowerOn!\n" );            poweron( );            outFileIndex = 0; // for UT              break;        default:            break;        }        break;    case LSCStateOutOfService:        printf("SS7_MTP2::LSC(), State = LSCStateOutOfService!\n" );        switch( event )        {        case LSCEventStart: // L3            printf("SS7_MTP2::LSC(), Event = LSCEventStart!\n" );            eventQueue.reset( );            LSSUBuffer.reset( );            AppendEvent( MTP2_FSM_RC, RCEventStart );            AppendEvent( MTP2_FSM_TXC, TXCEventStart );            if( emergency )            {                AppendEvent( MTP2_FSM_IAC, IACEventEmergency );            }            AppendEvent( MTP2_FSM_IAC, IACEventStart );            lscState = LSCStateInitialAlignment;            iacState = IACStateIdle;            break;        case LSCEventRetrieveBSNT: // L3             AppendEvent( MTP2_FSM_RC, RCEventRetrieveBSNT );            break;        case LSCEventRetrievalRequestAndFSNC: // L3            AppendEvent( MTP2_FSM_TXC, TXCEventRetrievalRequestAndFSNC );            break;        case LSCEventEmergency: // L3            emergency = true;            break;        case LSCEventEmergencyCease: // L3            emergency = false;            break;        case LSCEventLocalProcOutage: // MGMT            localProcessorOutage = true;            break;        case LSCEventLocalProcRecovered: // L3            localProcessorOutage = false;            break;        default:            break;        }        break;    case LSCStateInitialAlignment:        printf("SS7_MTP2::LSC(), State = LSCStateInitialAlignment!\n" );        switch( event )        {        case LSCEventAlignmentComplete: // IAC            printf("SS7_MTP2::LSC(), Event = LSCEventAlignmentComplete!\n" );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStart );            // Start T1            timers[0].started = true;            time( & timers[0].start_time );            if( localProcessorOutage )            {                AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage );                AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO );                AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU );                lscState = LSCStateAlignedNotReady;            }            else            {                AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU );                AppendEvent( MTP2_FSM_RC, RCEventAcceptMSUFISU );                lscState = LSCStateAlignedReady;            }            break;        case LSCEventAlignmentNotPossible: // IAC            printf("SS7_MTP2::LSC(), Event = LSCEventAlignmentNotPossible!\n" );            // L3( out of service ); // HOW ???            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            localProcessorOutage = false;            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventStop: // L3            printf("SS7_MTP2::LSC(), Event = LSCEventStop!\n" );            AppendEvent( MTP2_FSM_IAC, IACEventStop );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            localProcessorOutage = false;            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventLinkFailure: // RC            printf("SS7_MTP2::LSC(), Event = LSCEventLinkFailure!\n" );            // L3( out of service );            AppendEvent( MTP2_FSM_IAC, IACEventStop );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            localProcessorOutage = false;            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventLocalProcOutage: // MGMT            printf("SS7_MTP2::LSC(), Event = LSCEventLocalProcOutage!\n" );            localProcessorOutage = true;            break;        case LSCEventL3Failure: // MGMT            localProcessorOutage = true;            break;        case LSCEventLocalProcRecovered: // MGMT            localProcessorOutage = false;            break;        case LSCEventEmergency:            emergency = true;            AppendEvent( MTP2_FSM_IAC, IACEventEmergency );            break;        default:            break;        }        break;    case LSCStateAlignedNotReady:        printf("SS7_MTP2::LSC(), State = LSCStateAlignedNotReady!\n" );        switch( event )        {        case LSCEventLinkFailure: // SUERM, RC        case LSCEventGotSIO:   // RC        case LSCEventGotSIOS: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/LSCEventGotSIO/LSCEventGotSIOS!\n" );            timers[0].started = false; // Stop T1;            // L3( out of service );            // L3( stop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            AppendEvent( MTP2_FSM_POC, POCEventStop );            emergency = false;            localProcessorOutage = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventStop: // L3            printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" );            timers[0].started = false; // Stop T1;            // L3( stop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            AppendEvent( MTP2_FSM_POC, POCEventStop );            emergency = false;            localProcessorOutage = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventT1Expired:            printf("SS7_MTP2::LSC(), Event=LSCEventT1Expired!\n" );            // L3( out of service );            // L3( stop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            AppendEvent( MTP2_FSM_POC, POCEventStop );            emergency = false;            localProcessorOutage = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventFISUMSUReceived: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventFISUMSUReceived!\n" );            // L3( In service );            timers[0].started = false; // Stop T1;            lscState = LSCStateProcessorOutage;            break;        case LSCEventGotSIPO: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" );            // L3( remote processor outage );            AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage );            timers[0].started = false; // Stop T1;            lscState = LSCStateProcessorOutage;            break;        case LSCEventLocalProcRecovered: // MGMT             printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcRecovered!\n" );            AppendEvent( MTP2_FSM_POC, POCEventLocalProcRecovered );            localProcessorOutage = false;            AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU );            AppendEvent( MTP2_FSM_RC, RCEventAcceptMSUFISU );            lscState = LSCStateAlignedReady;            break;        default:            break;        }        break;    case LSCStateAlignedReady:        printf("SS7_MTP2::LSC(), State = LSCStateAlignedReady!\n" );        switch( event )        {        case LSCEventLinkFailure: // SUERM, RC        case LSCEventGotSIO:   // RC        case LSCEventGotSIOS: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/GotSIO/GotSIOS!\n" );            timers[0].started = false; // Stop T1;            // L3( out of service );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventStop: // L3            printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" );            timers[0].started = false; // Stop T1;            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventT1Expired:            printf("SS7_MTP2::LSC(), Event=LSCEventT1Expired!\n" );            // L3( out of service );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventFISUMSUReceived: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventFISUMSUReceived!\n" );            // L3( In service );            timers[0].started = false; // Stop T1;            AppendEvent( MTP2_FSM_TXC, TXCEventSendMSU );            lscState = LSCStateInService;            break;        case LSCEventGotSIPO: // RC            printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" );            timers[0].started = false; // Stop T1;            // L3( remote processor outage );            AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage );            lscState = LSCStateProcessorOutage;            break;        case LSCEventLocalProcOutage: // MGMT         case LSCEventL3Failure: // MGMT            printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcOutage/L3Failure!\n" );            AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO );            AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU );            lscState = LSCStateAlignedNotReady;            break;        default:            break;        }        break;    case LSCStateInService:        printf("SS7_MTP2::LSC(), State = LSCStateInService!\n" );        switch( event )        {        case LSCEventLinkFailure: // RC, TXC, SUERM        case LSCEventGotSIO:   // RC        case LSCEventGotSIN:   // RC        case LSCEventGotSIE:   // RC        case LSCEventGotSIOS:  // RC            printf("SS7_MTP2::LSC(), Event=LSCEventLinkFailure/GotSIO/SIE/SIN/SIOS!\n" );            // L3( Out of service );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventStop: // L3             printf("SS7_MTP2::LSC(), Event=LSCEventStop!\n" );            AppendEvent( MTP2_FSM_SUERM, SUERMEventStop );            AppendEvent( MTP2_FSM_RC, RCEventStop );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIOS );            emergency = false;            lscState = LSCStateOutOfService;            gettimeofday( & LSCRestartTimer, NULL ); // the command to OOS LSC            break;        case LSCEventGotSIPO: // RC             printf("SS7_MTP2::LSC(), Event=LSCEventGotSIPO!\n" );            AppendEvent( MTP2_FSM_TXC, TXCEventSendFISU );            // L3( remote Processor Outage );            AppendEvent( MTP2_FSM_POC, POCEventRemoteProcOutage );            processorOutage = true;                        lscState = LSCStateProcessorOutage;            break;        case LSCEventL3Failure:         case LSCEventLocalProcOutage: // MGMT            printf("SS7_MTP2::LSC(), Event=LSCEventLocalProcOutage/L3Failure!\n" );            AppendEvent( MTP2_FSM_POC, POCEventLocalProcOutage );            AppendEvent( MTP2_FSM_TXC, TXCEventSendSIPO );            AppendEvent( MTP2_FSM_RC, RCEventRejectMSUFISU );            processorOutage = true;            lscState = LSCStateProcessorOutage;            break;        default:            break;        }        break;    case LSCStateProcessorOutage:        printf("SS7_MTP2::LSC(), State = LSCStateProcessorOutage!\n" );        switch( event )

⌨️ 快捷键说明

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