/** * Checks if SSN matches between rule address pattern and provided destination address. SSN is assumed to always match in * case it has insignificant value or pattern AI SSNPresent flag is set to false. * * @param address - a provided address to match * @param pattern - a rule pattern address * @return true if SSN is present in both pattern and received addresses and they are the same or pattern has SSN flag unset * in AI (bit 7)(isSsnPresent = false for pattern) or pattern SSN value is insignificant */ private boolean isSsnMatch(SccpAddress address, SccpAddress pattern) { if (!isSsnSignificant(pattern.getSubsystemNumber()) || !pattern.getAddressIndicator().isSSNPresent()) { if (logger.isTraceEnabled()) { logger.trace(String.format("SSN is not present or insignificant [%s]. Assume SSN matches. Return True", pattern.getSubsystemNumber())); } return true; } if (pattern.getAddressIndicator().isSSNPresent() && address.getAddressIndicator().isSSNPresent()) { if (address.getSubsystemNumber() == pattern.getSubsystemNumber()) { return true; } } if (logger.isTraceEnabled()) { logger.trace(String.format( "SSN didn't match. Pattern: isSsnPresent=%s, SSN=%s Address: isSsnPresent=%s, SSN=%s Return False", pattern.getAddressIndicator().isSSNPresent(), pattern.getSubsystemNumber(), address.getAddressIndicator() .isSSNPresent(), address.getSubsystemNumber())); } return false; }
if (address.getAddressIndicator().getRoutingIndicator() == RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN) { if (logger.isDebugEnabled()) { logger.debug("RoutingIndicator == ROUTING_BASED_ON_DPC_AND_SSN. Return");
private void rewriteLocalAddressIfGTPresentAndRouteOnSsn(Dialog d) { SccpAddress localAddress = d.getLocalAddress(); if (localAddress.getGlobalTitle() != null && localAddress.getAddressIndicator().getRoutingIndicator() != RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE) { SccpAddress newLocalAddress = new SccpAddressImpl(RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, localAddress.getGlobalTitle(), localAddress.getSignalingPointCode(), localAddress.getSubsystemNumber()); d.setLocalAddress(newLocalAddress); LOGGER.debug("rewriteCalledPartyIfGTPresent from={} to={}", localAddress, newLocalAddress); } }
if (!translationAddress.getAddressIndicator().isPCPresent()) { if (translationAddress.getAddressIndicator().getRoutingIndicator() == RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN) { if (targetSsn != 1) { RemoteSubSystem remoteSubSystem = this.sccpStackImpl.getSccpResource().getRemoteSsn(
RoutingIndicator ri = calledPartyAddress.getAddressIndicator().getRoutingIndicator(); switch (ri) { case ROUTING_BASED_ON_DPC_AND_SSN:
GlobalTitle gt = calledPartyAddress.getGlobalTitle(); if (calledPartyAddress.getAddressIndicator().isPCPresent()) { if (calledPartyAddress.getAddressIndicator().getRoutingIndicator() == RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN) {
public void write(SccpAddress ai, OutputElement xml) throws XMLStreamException { xml.setAttribute(POINT_CODE, ai.getSignalingPointCode()); xml.setAttribute(SUBSYSTEM_NUMBER, ai.getSubsystemNumber()); xml.add(ai.getAddressIndicator(), AI, AddressIndicator.class); xml.add(ai.getGlobalTitle(), GLOBAL_TITLE); }
GlobalTitleIndicator gti = ruleAddress.getAddressIndicator().getGlobalTitleIndicator(); GlobalTitle primaryGt = ruleAddress.getGlobalTitle(); gt = createNewGT(gti, primaryGt, translatedDigits); gt = createNewGT(address.getAddressIndicator().getGlobalTitleIndicator(), address.getGlobalTitle(), translatedDigits); if (ruleAddress.getSubsystemNumber() > 0) ssn = ruleAddress.getSubsystemNumber(); SccpAddress sccpAddress = new SccpAddressImpl(ruleAddress.getAddressIndicator().getRoutingIndicator(), gt,ruleAddress.getSignalingPointCode(), ssn);
private boolean matchGt( SccpAddress address, SccpAddress patternAddress ) { GlobalTitleIndicator gti = address.getAddressIndicator().getGlobalTitleIndicator(); GlobalTitle patternGT = patternAddress.getGlobalTitle(); switch (gti) {
&& addr.getAddressIndicator().getRoutingIndicator() == RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN) { if (!addr.getAddressIndicator().isPCPresent()) { msgAddr.setCallingPartyAddress(new SccpAddressImpl(RoutingIndicator.ROUTING_BASED_ON_DPC_AND_SSN, null, msgAddr.getIncomingOpc(), addr .getSubsystemNumber()));
protected int getMaxUserDataLength(SccpAddress calledPartyAddress, SccpAddress callingPartyAddress, int msgNetworkId) { GlobalTitle gt = calledPartyAddress.getGlobalTitle(); int dpc = calledPartyAddress.getSignalingPointCode(); int ssn = calledPartyAddress.getSubsystemNumber(); if (calledPartyAddress.getAddressIndicator().isPCPresent()) { if (this.router.spcIsLocal(dpc)) { if (ssn > 0) { // local destination - unlimited length return this.getMaxDataMessage(); } else if (gt != null) { return getMaxUserDataLengthForGT(calledPartyAddress, callingPartyAddress, msgNetworkId); } else { return 0; } } else { return getMaxUserDataLengthForDpc(dpc, calledPartyAddress, callingPartyAddress); } } else { if (gt != null) { return getMaxUserDataLengthForGT(calledPartyAddress, callingPartyAddress, msgNetworkId); } else { return 0; } } }
private NetworkIdStateImpl getRoutingAddressStatusForRoutingAddress(SccpAddress routingAddress, int affectedPc) { if (routingAddress != null && routingAddress.getAddressIndicator().isPCPresent()) { boolean affectedByPc = true; if ((affectedPc >= 0 && routingAddress.getSignalingPointCode() != affectedPc)) affectedByPc = false; boolean spcIsLocal = spcIsLocal(routingAddress.getSignalingPointCode()); if (spcIsLocal) { return new NetworkIdStateImpl(affectedByPc); } RemoteSignalingPointCode remoteSpc = sccpStack.getSccpResource().getRemoteSpcByPC( routingAddress.getSignalingPointCode()); if (remoteSpc == null) { return new NetworkIdStateImpl(affectedByPc); } if (remoteSpc.isRemoteSpcProhibited()) { return new NetworkIdStateImpl(false, affectedByPc); } int congLevel = SccpCongestionControl.generateSccpUserCongLevel(remoteSpc.getCurrentRestrictionLevel()); if (congLevel > 0) { return new NetworkIdStateImpl(congLevel, affectedByPc); } return new NetworkIdStateImpl(affectedByPc); } // we return here value that this affectedPc does not affect this rule return new NetworkIdStateImpl(false); }
SccpAddress locAddr2 = sccpParameterFact.createSccpAddress(locAddr.getAddressIndicator().getRoutingIndicator(), locAddr.getGlobalTitle(), locAddr.getSignalingPointCode(), smscPropertiesManagement.getHlrSsn()); dialog.setLocalAddress(locAddr2);