]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
adding code to handle TUCL/MEGACO Status(Alarm) Indication from MEGACO
authorkapil <kgupta@sangoma.com>
Thu, 31 May 2012 14:50:51 +0000 (20:20 +0530)
committerkapil <kgupta@sangoma.com>
Thu, 31 May 2012 14:50:51 +0000 (20:20 +0530)
Stack

src/mod/endpoints/mod_megaco/megaco_stack.c
src/mod/endpoints/mod_megaco/mod_megaco.c

index d650aaa48a299be41db53e4e2e8654d30e8379b5..516d857ec9c9953c188959592dc1a7aa86b945ab 100644 (file)
@@ -1199,5 +1199,479 @@ int sng_mgco_mg_shutdown()
         return (sng_cntrl_mg (&pst, &cntrl));
 }
 /******************************************************************************/
+void handle_mg_alarm(Pst *pst, MgMngmt *usta)
+{
+       U16 ret;
+       int len = 0x00;
+       char prBuf[10024];
+
+       memset(&prBuf[0], 0, sizeof(prBuf));
+
+       len = len + sprintf(prBuf+len,"MG Status Indication: received with Category = %d, Event = %d, Cause = %d \n",
+                       usta->t.usta.alarm.category, usta->t.usta.alarm.event, 
+                       usta->t.usta.alarm.cause);
+
+       len = len + sprintf(prBuf+len, "Category ( ");
+
+       switch (usta->t.usta.alarm.category)
+       {
+               case LCM_CATEGORY_PROTOCOL:
+                       {
+                               len = len + sprintf(prBuf+len, "protocol related ");
+                               break;
+                       }
+               case LCM_CATEGORY_INTERFACE:
+                       {
+                               len = len + sprintf(prBuf+len, "interface related ");
+                               break;
+                       }
+               case LCM_CATEGORY_INTERNAL:
+                       {
+                               len = len + sprintf(prBuf+len, "internal ");
+                               break;
+                       }
+               case LCM_CATEGORY_RESOURCE:
+                       {
+                               len = len + sprintf(prBuf+len, "system resources related ");
+                               break;
+                       }
+               case LCM_CATEGORY_PSF_FTHA:
+                       {
+                               len = len + sprintf(prBuf+len, "fault tolerance / high availability PSF related ");
+                               break;
+                       }
+               case LCM_CATEGORY_LYR_SPECIFIC:
+                       {
+                               len = len + sprintf(prBuf+len, "MGCP related ");
+                               break;
+                       }
+               default:
+                       {
+                               len = len + sprintf(prBuf+len, "unknown: %d", (int)(usta->t.usta.alarm.category));
+                               break;
+                       }
+       }
+       len = len + sprintf(prBuf+len, ") ");
+
+       len = len + sprintf(prBuf+len, " Event ( ");
+       switch (usta->t.usta.alarm.event)
+       {
+               case LMG_EVENT_TSAP_RECVRY_SUCCESS:
+                       {
+                               len = len + sprintf(prBuf+len, "TSAP recovery success");
+                               break;
+                       }
+               case LMG_EVENT_TSAP_RECVRY_FAILED:
+                       {
+                               len = len + sprintf(prBuf+len, "TSAP recovery failed");
+                               break;
+                       }
+               case LCM_EVENT_UI_INV_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "upper interface invalid event");
+                               break;
+                       }
+               case LCM_EVENT_LI_INV_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "lower interface invalid event");
+                               break;
+                       }
+               case LCM_EVENT_PI_INV_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "peer interface invalid event");
+                               break;
+                       }
+               case LCM_EVENT_INV_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "general invalid event");
+                               break;
+                       }
+               case LCM_EVENT_INV_STATE:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid internal state");
+                               break;
+                       }
+               case LCM_EVENT_INV_TMR_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid timer event");
+                               break;
+                       }
+               case LCM_EVENT_MI_INV_EVT:
+                       {
+                               len = len + sprintf(prBuf+len, "management interface invalid event");
+                               break;
+                       }
+               case LCM_EVENT_BND_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "bind failure");
+                               break;
+                       }
+               case LCM_EVENT_NAK:
+                       {
+                               len = len + sprintf(prBuf+len, "destination nack");
+                               break;
+                       }
+               case LCM_EVENT_TIMEOUT:
+                       {
+                               len = len + sprintf(prBuf+len, "timeout");
+                               break;
+                       }
+               case LCM_EVENT_BND_OK:
+                       {
+                               len = len + sprintf(prBuf+len, "bind ok");
+                               break;
+                       }
+               case LCM_EVENT_SMEM_ALLOC_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "static memory allocation failed");
+                               break;
+                       }
+               case LCM_EVENT_DMEM_ALLOC_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "dynamic mmemory allocation failed");
+                               break;
+                       }
+               case LCM_EVENT_LYR_SPECIFIC:
+                       {
+                               len = len + sprintf(prBuf+len, "MGCP specific");
+                               break;
+                       }
+               default:
+                       {
+                               len = len + sprintf(prBuf+len, "unknown event %d", (int)(usta->t.usta.alarm.event));
+                               break;
+                       }
+               case LMG_EVENT_HIT_BNDCFM:
+                       {
+                               len = len + sprintf(prBuf+len, "HIT bind confirm");
+                               break;
+                       }
+               case LMG_EVENT_HIT_CONCFM:
+                       {
+                               len = len + sprintf(prBuf+len, "HIT connect confirm");
+                               break;
+                       }
+               case LMG_EVENT_HIT_DISCIND:
+                       {
+                               len = len + sprintf(prBuf+len, "HIT disconnect indication");
+                               break;
+                       }
+               case LMG_EVENT_HIT_UDATIND:
+                       {
+                               len = len + sprintf(prBuf+len, "HIT unit data indication");
+                               break;
+                       }
+               case LMG_EVENT_MGT_BNDREQ:
+                       {
+                               len = len + sprintf(prBuf+len, "MGT bind request");
+                               break;
+                       }
+               case LMG_EVENT_PEER_CFG_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "Peer Configuration Failed");
+                               break;
+                       }
+               case LMG_EVENT_MGT_UBNDREQ:
+                       {
+                               len = len + sprintf(prBuf+len, "MGT unbind request");
+                               break;
+                       }
+               case LMG_EVENT_MGT_MGCPTXNREQ:
+                       {
+                               len = len + sprintf(prBuf+len, "MGT MGCP transaction request");
+                               break;
+                       }
+               case LMG_EVENT_MGT_MGCPTXNIND:
+                       {
+                               len = len + sprintf(prBuf+len, "MGT MGCP transaction indication");
+                               break;
+                       }
+
+               case LMG_EVENT_PEER_ENABLED:
+                       {
+                               len = len + sprintf(prBuf+len, "gateway enabled");
+                               break;
+                       }
+               case LMG_EVENT_PEER_DISCOVERED:
+                       {
+                               len = len + sprintf(prBuf+len, "gateway discovered , notified entity");
+                               break;
+                       }
+               case LMG_EVENT_PEER_REMOVED:
+                       {
+                               len = len + sprintf(prBuf+len, "gateway removed");
+                               break;
+                       }
+               case LMG_EVENT_RES_CONG_ON:
+                       {
+                               len = len + sprintf(prBuf+len, "resource congestion ON");
+                               break;
+                       }
+               case LMG_EVENT_RES_CONG_OFF:
+                       {
+                               len = len + sprintf(prBuf+len, "resource congestion OFF");
+                               break;
+                       }
+               case LMG_EVENT_TPTSRV:
+                       {
+                               len = len + sprintf(prBuf+len, "transport service");
+                               break;
+                       }
+               case LMG_EVENT_SSAP_ENABLED:
+                       {
+                               len = len + sprintf(prBuf+len, "SSAP enabled");
+                               break;
+                       }
+               case LMG_EVENT_NS_NOT_RESPONDING:
+                       {
+                               len = len + sprintf(prBuf+len, "name server not responding");
+                               break;
+                       }
+               case LMG_EVENT_TPT_FAILED:
+                       {
+                               len = len + sprintf(prBuf+len, "transport failure");
+                               break;
+                       }
+       }
+
+       len = len + sprintf(prBuf+len, " ) ");
 
+       len = len + sprintf(prBuf+len, " cause ( ");
+       switch (usta->t.usta.alarm.cause)
+       {
+               case LCM_CAUSE_UNKNOWN:
+                       {
+                               len = len + sprintf(prBuf+len, "unknown");
+                               break;
+                       }
+               case LCM_CAUSE_OUT_OF_RANGE:
+                       {
+                               len = len + sprintf(prBuf+len, "out of range");
+                               break;
+                       }
+               case LCM_CAUSE_INV_SAP:
+                       {
+                               len = len + sprintf(prBuf+len, "NULL/unknown sap");
+                               break;
+                       }
+               case LCM_CAUSE_INV_SPID:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid service provider");
+                               break;
+                       }
+               case LCM_CAUSE_INV_SUID:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid service user");
+                               break;
+                       }
+               case LCM_CAUSE_INV_NETWORK_MSG:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid network message");
+                               break;
+                       }
+               case LCM_CAUSE_DECODE_ERR:
+                       {
+                               len = len + sprintf(prBuf+len, "message decoding problem");
+                               break;
+                       }
+               case LCM_CAUSE_USER_INITIATED:
+                       {
+                               len = len + sprintf(prBuf+len, "user initiated");
+                               break;
+                       }
+               case LCM_CAUSE_MGMT_INITIATED:
+                       {
+                               len = len + sprintf(prBuf+len, "management initiated");
+                               break;
+                       }
+               case LCM_CAUSE_INV_STATE: /* cause and event! */
+                       {
+                               len = len + sprintf(prBuf+len, "invalid state");
+                               break;
+                       }
+               case LCM_CAUSE_TMR_EXPIRED: /* cause and event! */
+                       {
+                               len = len + sprintf(prBuf+len, "timer expired");
+                               break;
+                       }
+               case LCM_CAUSE_INV_MSG_LENGTH:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid message length");
+                               break;
+                       }
+               case LCM_CAUSE_PROT_NOT_ACTIVE:
+                       {
+                               len = len + sprintf(prBuf+len, "protocol layer not active");
+                               break;
+                       }
+               case LCM_CAUSE_INV_PAR_VAL:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid parameter value");
+                               break;
+                       }
+               case LCM_CAUSE_NEG_CFM:
+                       {
+                               len = len + sprintf(prBuf+len, "negative confirmation");
+                               break;
+                       }
+               case LCM_CAUSE_MEM_ALLOC_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "memory allocation failure");
+                               break;
+                       }
+               case LCM_CAUSE_HASH_FAIL:
+                       {
+                               len = len + sprintf(prBuf+len, "hashing failure");
+                               break;
+                       }
+               case LCM_CAUSE_LYR_SPECIFIC:
+                       {
+                               len = len + sprintf(prBuf+len, "MGCP specific");
+                               break;
+                       }
+               default:
+                       {
+                               len = len + sprintf(prBuf+len, "unknown %d", (int)(usta->t.usta.alarm.cause));
+                               break;
+                       }
+               case LMG_CAUSE_TPT_FAILURE: /* make up your mind - cause or event? */
+                       {
+                               len = len + sprintf(prBuf+len, "transport failure");
+                               break;
+                       }
+               case LMG_CAUSE_NS_NOT_RESPONDING:
+                       {
+                               len = len + sprintf(prBuf+len, "name server not responding");
+                               break;
+                       }
+       }
+       len = len + sprintf(prBuf+len, "  ) ");
+
+       len = len + sprintf(prBuf+len, "  Alarm parameters ( ");
+       ret = smmgGetAlarmInfoField(&usta->t.usta);
+       switch (ret)
+       {
+               case SMMG_UNKNOWNFIELD:
+                       {
+                               len = len + sprintf(prBuf+len, "invalid ");
+
+                               break;
+                       }
+               case SMMG_PEERINFO:
+                       {
+                               /* 
+                                * Invoke the new function for printing the MgPeerInfo &
+                                * delete all print code here 
+                                */
+                               smmgPrntPeerInfo(&(usta->t.usta.alarmInfo.u.peerInfo));
+                               break;
+                       }
+               case SMMG_SAPID:
+                       {
+                               len = len + sprintf(prBuf+len, "SAP ID %d\n", (int)(usta->t.usta.alarmInfo.u.sapId));
+                               break;
+                       }
+               case SMMG_MEM:
+                       {
+                               len = len + sprintf(prBuf+len, "memory region %d pool %d\n",
+                                               (int)(usta->t.usta.alarmInfo.u.mem.region),
+                                               (int)(usta->t.usta.alarmInfo.u.mem.pool));
+
+                               break;
+                       }
+               case SMMG_SRVSTA:
+                       {
+                               smmgPrntSrvSta(&usta->t.usta.alarmInfo.u.srvSta);
+                               break;
+                       }
+               case SMMG_PEERSTA:
+                       {
+                               smmgPrntPeerSta(&usta->t.usta.alarmInfo.u.peerSta);
+                               break;
+                       }
+               case SMMG_SSAPSTA:
+                       {
+                               smmgPrntSsapSta(&usta->t.usta.alarmInfo.u.ssapSta);
+                               break;
+                       }
+               case SMMG_PARID:
+                       {
+                               len = len + sprintf(prBuf+len,  "parameter type: ");
+                               switch (usta->t.usta.alarmInfo.u.parId.parType)
+                               {
+                                       case LMG_PAR_TPTADDR: len = len + sprintf(prBuf+len, "transport address"); break;
+                                       case LMG_PAR_MBUF:    len = len + sprintf(prBuf+len, "message buffer"); break;
+                                       case LMG_PAR_CHOICE:  len = len + sprintf(prBuf+len, "choice"); break;
+                                       case LMG_PAR_SPID:    len = len + sprintf(prBuf+len, "spId"); break;
+                                       default:              len = len + sprintf(prBuf+len, "unknown"); break;
+                               }
+
+                               len = len + sprintf(prBuf+len, ", value %d\n", 
+                                               (int)(usta->t.usta.alarmInfo.u.parId.u.sapId));
+
+                               break;
+                       }
+               case SMMG_NOT_APPL:
+                       {
+                               len = len + sprintf(prBuf+len, "not applicable\n");
+                               break;
+                       }
+
+                       /*TODO*/
+       }
+       len = len + sprintf(prBuf+len, "  ) ");
+       len = len + sprintf(prBuf+len, "  \n ");
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s \n", prBuf);
+}
+
+/*****************************************************************************************************************************/
+void handle_tucl_alarm(Pst *pst, HiMngmt *sta)
+{
+       /* To print the general information */
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Recieved a status indication from TUCL layer \n\n");
+       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, " Category = %d , event = %d , cause = %d\n", 
+                       sta->t.usta.alarm.category, 
+                       sta->t.usta.alarm.event, sta->t.usta.alarm.cause);
+
+       switch(sta->t.usta.alarm.event)
+       {
+               case LCM_EVENT_INV_EVT: 
+                       { 
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO," [HI_USTA]: LCM_EVENT_INV_EVT with type (%d)\n\n",
+                                               sta->t.usta.info.type);
+                               break;
+                       }
+               case LHI_EVENT_BNDREQ:
+                       { 
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO," [HI_USTA]: LHI_EVENT_BNDREQ with type (%d) spId (%d)\n\n",
+                                               sta->t.usta.info.type, sta->t.usta.info.spId);
+                               break;
+                       }
+               case LHI_EVENT_SERVOPENREQ:
+               case LHI_EVENT_DATREQ:
+               case LHI_EVENT_UDATREQ:
+               case LHI_EVENT_CONREQ:
+               case LHI_EVENT_DISCREQ:
+#if(defined(HI_TLS) && defined(HI_TCP_TLS)) 
+               case LHI_EVENT_TLS_ESTREQ:
+#endif
+                       {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO," [HI_USTA]: partype (%d) type(%d)\n\n",
+                                               sta->t.usta.info.inf.parType, sta->t.usta.info.type);
+                               break;
+                       }
+               case LCM_EVENT_DMEM_ALLOC_FAIL:
+               case LCM_EVENT_SMEM_ALLOC_FAIL:
+                       {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, " [HI_USTA]: MEM_ALLOC_FAIL with region(%d) pool (%d) type(%d)\n\n",
+                                               sta->t.usta.info.inf.mem.region, sta->t.usta.info.inf.mem.pool,
+                                               sta->t.usta.info.type);
+                               break;
+                       }
+               default:
+                       break;
+       }
+
+}   /* handle_sng_tucl_alarm */
+/******************************************************************************/
 
index 332392c59ae07dc349d93c75a28e15b8efa49de4..3d9dc26b8d7ab407021f0b80f99b917263ba0e8e 100644 (file)
@@ -209,16 +209,6 @@ void handle_mgco_audit_cfm(Pst *pst, SuId suId, MgMgtAudit* audit, Reason reason
 }
 
 /*****************************************************************************************************************************/
-void handle_mg_alarm(Pst *pst, MgMngmt *sta)
-{
-       /*TODO*/
-}
-
-/*****************************************************************************************************************************/
-void handle_tucl_alarm(Pst *pst, HiMngmt *sta)
-{
-       /*TODO*/
-}
 
 /*****************************************************************************************************************************/