/// <summary> /// /// </summary> /// <returns></returns> public static bool Shutdown() { try { if (stackContext != null) { isStopping = true; EventHandlersTable.Clear(); stackContext.dictionary.Clear(); stackContext.peers.Clear(); if (TransportListner != null) { TransportListner.Stop(); } stackContext = null; return(true); } else { return(false); } } catch (Exception exp) { Common.StackLog.Write2ErrorLog("Shutdown", "Error:" + exp.Message + " Stack:" + exp.StackTrace); return(false); } }
//Starts a Listner Thread private static void StartListenerThread(StackContext stackContext) { try { Thread listenThread = new Thread(StartListener); listenThread.Start(stackContext); } catch (Exception exp) { Common.StackLog.Write2ErrorLog("DiameterAAAStack::StartListenerThread", "Error:" + exp.Message + " Stack:" + exp.StackTrace); } }
/// <summary> /// Initializes the Peer State Machine /// </summary> /// <param name="stackContext"></param> /// <returns></returns> private static bool StartPSM(StackContext stackContext) { Common.StackLog.Write2TraceLog("DiameterAAAStack::StartPSM", "Entering StartPSM ..."); try { RaisePeerStateChangeEvent(PEER_STATE_EVENT.Start, stackContext); Common.StackLog.Write2TraceLog("DiameterAAAStack::StartPSM", "Exiting StartPSM ..."); return(true); } catch (Exception exp) { Common.StackLog.Write2ErrorLog("DiameterAAAStack::StartPSM", "Error:" + exp.Message + " Stack:" + exp.StackTrace); return(false); } }
/// <summary> /// Start Listner /// </summary> /// private static void StartListener(object data) { try { StackContext stackContext = data as StackContext; List <ListenAddress> listenAddress = new List <ListenAddress>(); listenAddress.Add(new ListenAddress() { IPAddress = stackContext.ListenerIP, Port = stackContext.ListenerPort }); transport.StartListners(listenAddress, ref TransportListner); } catch (Exception exp) { Common.StackLog.Write2ErrorLog("DiameterAAAStack::StartListener", "Error:" + exp.Message + " Stack:" + exp.StackTrace); } }
public static void Reconnect(StackContext pStackContext) { try { if (isReconnecting) { return; } Common.StackLog.Write2TraceLog("DiameterAAAStack::Reconnect", "Entering ..."); isReconnecting = true; //Update Peer Entry in PeerTable Common.StackLog.Write2TraceLog("\tDiameterAAAStack::Reconnect", "Shuttingdown Client ..."); //if(pStackContext.peers[0].PeerConnection.Client. try { pStackContext.peers[0].PeerConnection.Client.Shutdown(SocketShutdown.Both); } catch (Exception ex) { Common.StackLog.Write2ErrorLog("DiameterAAAStack::Reconnect", "Socket was already shutdown, error: " + ex.Message); } UpdateConnectionState(pStackContext.peers[0], PeerState.CLOSED); Common.StackLog.Write2TraceLog("\tDiameterAAAStack::Reconnect", "Connection closed ..."); while (!isStopping && pStackContext.peers[0].PeerState != PeerState.OPEN) { Common.StackLog.Write2TraceLog("\tDiameterAAAStack::Reconnect", "Calling StartPSM ..."); StartPSM(pStackContext); Common.StackLog.Write2TraceLog("\tDiameterAAAStack::Reconnect", "StartPSM Ended..."); //Thread.Sleep(5000); } isReconnecting = false; Common.StackLog.Write2TraceLog("DiameterAAAStack::Reconnect", "Exiting ..."); } catch (Exception ex) { Common.StackLog.Write2ErrorLog("DiameterAAAStack::Reconnect", "Error:" + ex.Message + " Stack:" + ex.StackTrace); } }
/// <summary> /// This method create Credit Control Request for DCCA Server /// </summary> /// <param name="userName"></param> /// <param name="destinationHost"></param> /// <param name="destinationRealm"></param> /// <param name="requestType"></param> /// <param name="UserName"></param> /// <param name="MSIDN"></param> /// <param name="callingPartyAddress"></param> /// <param name="calledPartyAddress"></param> /// <param name="realCalledNumber"></param> /// <returns></returns> public Message CreditControlRequest(StackContext stackContext, string OrigionHost, string OrigionRealm, string DestinationRealm, int AuthApplicationId, CC_Request_Type CCRequestType, int CCRequestNumber, string SessionId) { Message ccrReq = new Message(stackContext); ccrReq.CommandCode = 272; ccrReq.EndtoEndIdentifier = ccrReq.GetEndToEndIdentifier(); ccrReq.HopbyHopIdentifier = ccrReq.GetHopByHopIdentifier(); ccrReq.ApplicationID = 4; //Set Mandatory Attributes ccrReq.avps.Add(new Avp(DiameterAvpCode.Session_Id, SessionId)); ccrReq.SetSessionId(SessionId); //Origion and Destination attrib s ccrReq.avps.Add(new Avp(DiameterAvpCode.Origin_Host, OrigionHost)); ccrReq.avps.Add(new Avp(DiameterAvpCode.Origin_Realm, OrigionRealm)); ccrReq.avps.Add(new Avp(DiameterAvpCode.Destination_Realm, DestinationRealm)); ccrReq.avps.Add(new Avp(DiameterAvpCode.Auth_Application_Id, AuthApplicationId)); ccrReq.avps.Add(new Avp(DiameterAvpCode.CC_Request_Type, CCRequestType)); ccrReq.avps.Add(new Avp(DiameterAvpCode.CC_Request_Number, CCRequestNumber)); return(ccrReq); }
/// <summary> /// This method Creates CAPABILITY EXCHANGE REQUEST MESSAGE /// </summary> /// <returns></returns> public Message CapabilityExchangeRequest(StackContext stackContext) { Message cerReq = new Message(stackContext); cerReq.CommandCode = DiameterMessageCode.CAPABILITY_EXCHANGE; cerReq.EndtoEndIdentifier = cerReq.GetEndToEndIdentifier(); cerReq.HopbyHopIdentifier = cerReq.GetHopByHopIdentifier(); cerReq.ApplicationID = 0; //Set Mandatory Attributes cerReq.avps.Add(new Avp(DiameterAvpCode.Origin_Host, stackContext.OrigionHost) { isMandatory = true }); cerReq.avps.Add(new Avp(DiameterAvpCode.Origin_Realm, stackContext.OrigionRealm) { isMandatory = true }); cerReq.avps.Add(new Avp(DiameterAvpCode.Host_IP_Address, IPAddress.Parse(Utility.LocalIPAddress())) { isMandatory = true }); cerReq.avps.Add(new Avp(DiameterAvpCode.Vendor_Id, 42452) { isMandatory = true }); cerReq.avps.Add(new Avp(DiameterAvpCode.Product_Name, "EMI Networks (SMC-PVT) LTD.") { isMandatory = true }); cerReq.avps.Add(new Avp(DiameterAvpCode.Origin_State_Id, 1)); cerReq.avps.Add(new Avp(DiameterAvpCode.Supported_Vendor_Id, 10415)); cerReq.avps.Add(new Avp(DiameterAvpCode.Auth_Application_Id, 167772151)); //cerReq.avps.Add(new Avp(DiameterAvpCode.Inband_Security_Id, 1234)); //Not Recommended in CER/CEA Messages cerReq.avps.Add(new Avp(DiameterAvpCode.Acct_Application_Id, 0)); ////Create Vendor_Specific_Application_Id Grouped Avp Avp avpVendorSpecificAppId = new Avp(DiameterAvpCode.Vendor_Specific_Application_Id) { isGrouped = true }; Avp avpVendorId = new Avp(DiameterAvpCode.Vendor_Id, 11); Avp avpAuthApplicationId = new Avp(DiameterAvpCode.Auth_Application_Id, 167772151); avpVendorSpecificAppId.groupedAvps.Add(avpVendorId); //Add Avp to Grouped Avp avpVendorSpecificAppId.groupedAvps.Add(avpAuthApplicationId); //Add Avp to Grouped Avp cerReq.avps.Add(avpVendorSpecificAppId); //Now Add Avp to CER Command //Second Loop avpVendorSpecificAppId = new Avp(DiameterAvpCode.Vendor_Specific_Application_Id) { isGrouped = true }; avpVendorSpecificAppId.groupedAvps.Clear(); avpVendorSpecificAppId.groupedAvps.Add(avpVendorId); Avp avpAcctApplicationId = new Avp(DiameterAvpCode.Acct_Application_Id, 0); avpVendorSpecificAppId.groupedAvps.Add(avpAcctApplicationId); cerReq.avps.Add(avpVendorSpecificAppId); cerReq.avps.Add(new Avp(DiameterAvpCode.Firmware_Revision, 1)); return(cerReq); }
public Answer(StackContext stackContext) { this.stackContext = stackContext; }
/// <summary> /// Default Constructor /// </summary> public Transport(StackContext stackContext) { this.stackContext = stackContext; }
private void Reconnect(Object obj) { StackContext stackContext = (StackContext)obj; DiameterAAAStack.Reconnect(stackContext); }