From 615dbb7f1f232e7ad6777f69cfc2e38842c0eec2 Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Fri, 18 May 2018 15:26:51 +0300 Subject: [PATCH 01/11] SLh and SLg resource adaptors implementation, with all tests passing. Issues #15 and #16. --- .../src/test/resources/dictionary.xml | 15145 ++++++++-------- .../docs/jdocbook-restcomm/pom.xml | 129 + resources/diameter-slg/docs/pom.xml | 22 + .../docs/sources-restcomm/pom.xml | 78 + resources/diameter-slg/docs/sources/pom.xml | 26 + .../src/main/resources/en-US/Author_Group.xml | 21 + .../src/main/resources/en-US/Book_Info.xml | 46 + .../resources/en-US/Chapter-Clustering.xml | 30 + .../resources/en-US/Chapter-Introduction.xml | 36 + .../main/resources/en-US/Chapter-Setup.xml | 125 + .../main/resources/en-US/Revision_History.xml | 32 + .../src/main/resources/en-US/User_Guide.ent | 21 + .../src/main/resources/en-US/User_Guide.xml | 32 + .../main/resources/en-US/common/Preface.xml | 15 + .../en-US/common/Section-Conventions.xml | 257 + .../en-US/common/Section-Feedback.xml | 29 + .../ra-type/Chapter-Resource_Adaptor_Type.xml | 41 + .../en-US/ra-type/Section-Activities.xml | 149 + ...ion-Activity_Context_Interface_Factory.xml | 30 + .../en-US/ra-type/Section-Events.xml | 123 + .../Section-Resource_Adaptor_Interface.xml | 118 + .../en-US/ra-type/Section-Restrictions.xml | 14 + .../ra-type/Section-Sbb_Code_Examples.xml | 13 + .../en-US/ra/Chapter-Resource_Adaptor.xml | 31 + .../en-US/ra/Section-Configuration.xml | 52 + ...tion-Default_Resource_Adaptor_Entities.xml | 42 + .../ra/Section-Logging_Traces_and_Alarms.xml | 26 + resources/diameter-slg/du/pom.xml | 87 + .../main/resources/META-INF/deploy-config.xml | 8 + resources/diameter-slg/events/pom.xml | 35 + .../slg/events/LocationReportAnswer.java | 279 + .../slg/events/LocationReportRequest.java | 818 + .../slg/events/ProvideLocationAnswer.java | 535 + .../slg/events/ProvideLocationRequest.java | 537 + .../avp/AccuracyFulfilmentIndicator.java | 84 + .../slg/events/avp/AdditionalAreaAvp.java | 45 + .../diameter/slg/events/avp/AreaAvp.java | 80 + .../slg/events/avp/AreaDefinitionAvp.java | 78 + .../slg/events/avp/AreaEventInfoAvp.java | 158 + .../slg/events/avp/DeferredMTLRDataAvp.java | 110 + .../avp/DelayedLocationReportingDataAvp.java | 85 + .../diameter/slg/events/avp/ELPAVPCodes.java | 1143 ++ .../slg/events/avp/ESMLCCellInfoAvp.java | 72 + .../events/avp/GERANPositioningInfoAvp.java | 72 + .../slg/events/avp/LCSClientType.java | 99 + .../slg/events/avp/LCSEPSClientNameAvp.java | 77 + .../slg/events/avp/LCSFormatIndicator.java | 110 + .../slg/events/avp/LCSPrivacyCheck.java | 108 + .../avp/LCSPrivacyCheckNonSessionAvp.java | 60 + .../events/avp/LCSPrivacyCheckSessionAvp.java | 60 + .../diameter/slg/events/avp/LCSQoSAvp.java | 122 + .../diameter/slg/events/avp/LCSQoSClass.java | 85 + .../slg/events/avp/LCSRequestorNameAvp.java | 77 + .../slg/events/avp/LocationEvent.java | 125 + .../slg/events/avp/MotionEventInfoAvp.java | 159 + .../slg/events/avp/OccurrenceInfo.java | 84 + .../slg/events/avp/PLMNIDListAvp.java | 80 + .../slg/events/avp/PeriodicLDRInfoAvp.java | 70 + .../avp/PeriodicLocationSupportIndicator.java | 85 + .../events/avp/PrioritizedListIndicator.java | 85 + .../slg/events/avp/PseudonymIndicator.java | 85 + .../slg/events/avp/ReportingPLMNListAvp.java | 76 + .../diameter/slg/events/avp/ResponseTime.java | 87 + .../slg/events/avp/SLgLocationType.java | 113 + .../slg/events/avp/ServingNodeAvp.java | 192 + .../slg/events/avp/SupportedFeaturesAvp.java | 121 + .../events/avp/UTRANPositioningInfoAvp.java | 88 + .../slg/events/avp/VelocityRequested.java | 87 + .../slg/events/avp/VerticalRequested.java | 86 + .../slg/events/LocationReportAnswerImpl.java | 239 + .../slg/events/LocationReportRequestImpl.java | 897 + .../slg/events/ProvideLocationAnswerImpl.java | 502 + .../events/ProvideLocationRequestImpl.java | 602 + .../slg/events/avp/AdditionalAreaAvpImpl.java | 69 + .../diameter/slg/events/avp/AreaAvpImpl.java | 75 + .../slg/events/avp/AreaDefinitionAvpImpl.java | 76 + .../slg/events/avp/AreaEventInfoAvpImpl.java | 136 + .../events/avp/DeferredMTLRDataAvpImpl.java | 87 + .../DelayedLocationReportingDataAvpImpl.java | 76 + .../slg/events/avp/ESMLCCellInfoAvpImpl.java | 74 + .../avp/GERANPositioningInfoAvpImpl.java | 75 + .../events/avp/LCSEPSClientNameAvpImpl.java | 75 + .../avp/LCSPrivacyCheckNonSessionAvpImpl.java | 63 + .../avp/LCSPrivacyCheckSessionAvpImpl.java | 63 + .../slg/events/avp/LCSQoSAvpImpl.java | 114 + .../events/avp/LCSRequestorNameAvpImpl.java | 76 + .../events/avp/MotionEventInfoAvpImpl.java | 135 + .../slg/events/avp/PLMNIDListAvpImpl.java | 75 + .../events/avp/PeriodicLDRInfoAvpImpl.java | 75 + .../events/avp/ReportingPLMNListAvpImpl.java | 76 + .../slg/events/avp/ServingNodeAvpImpl.java | 161 + .../events/avp/SupportedFeaturesAvpImpl.java | 120 + .../avp/UTRANPositioningInfoAvpImpl.java | 86 + .../src/main/resources/META-INF/event-jar.xml | 41 + resources/diameter-slg/pom.xml | 72 + resources/diameter-slg/ra/pom.xml | 40 + .../DiameterSLgResourceAdaptor.java | 956 + .../EventIDCache.java | 117 + .../SLgAVPFactoryImpl.java | 190 + .../SLgClientSessionActivityImpl.java | 189 + .../SLgMessageFactoryImpl.java | 173 + .../SLgServerSessionActivityImpl.java | 182 + .../SLgSessionActivityImpl.java | 148 + .../handlers/SLgSessionFactory.java | 150 + .../META-INF/resource-adaptor-jar.xml | 39 + resources/diameter-slg/ratype/pom.xml | 28 + .../diameter/slg/DiameterSLgResultCode.java | 94 + .../resource/diameter/slg/SLgAVPFactory.java | 95 + .../SLgActivityContextInterfaceFactory.java | 49 + .../slg/SLgClientSessionActivity.java | 43 + .../diameter/slg/SLgMessageFactory.java | 55 + .../resource/diameter/slg/SLgProvider.java | 113 + .../slg/SLgServerSessionActivity.java | 42 + .../diameter/slg/SLgSessionActivity.java | 48 + .../META-INF/resource-adaptor-type-jar.xml | 81 + resources/diameter-slg/release/README.TXT | 63 + .../diameter-slg/release/build-jboss5.xml | 43 + .../diameter-slg/release/build-wildfly.xml | 19 + resources/diameter-slg/release/pom.xml | 55 + resources/diameter-slg/testsuite/pom.xml | 55 + .../slg/tests/factories/SLgAvpAssistant.java | 193 + .../slg/tests/factories/SLgFactoriesTest.java | 750 + .../docs/jdocbook-restcomm/pom.xml | 129 + resources/diameter-slh/docs/pom.xml | 21 + .../docs/sources-restcomm/pom.xml | 78 + resources/diameter-slh/docs/sources/pom.xml | 27 + .../src/main/resources/en-US/Author_Group.xml | 19 + .../src/main/resources/en-US/Book_Info.xml | 50 + .../resources/en-US/Chapter-Clustering.xml | 30 + .../resources/en-US/Chapter-Introduction.xml | 35 + .../main/resources/en-US/Chapter-Setup.xml | 128 + .../main/resources/en-US/Revision_History.xml | 31 + .../src/main/resources/en-US/User_Guide.ent | 21 + .../src/main/resources/en-US/User_Guide.xml | 32 + .../main/resources/en-US/common/Preface.xml | 14 + .../en-US/common/Section-Conventions.xml | 257 + .../en-US/common/Section-Feedback.xml | 31 + .../ra-type/Chapter-Resource_Adaptor_Type.xml | 28 + .../en-US/ra-type/Section-Activities.xml | 102 + ...ion-Activity_Context_Interface_Factory.xml | 33 + .../en-US/ra-type/Section-Events.xml | 74 + .../Section-Resource_Adaptor_Interface.xml | 150 + .../en-US/ra-type/Section-Restrictions.xml | 14 + .../ra-type/Section-Sbb_Code_Examples.xml | 10 + .../en-US/ra/Chapter-Resource_Adaptor.xml | 31 + .../en-US/ra/Section-Configuration.xml | 51 + ...tion-Default_Resource_Adaptor_Entities.xml | 42 + .../ra/Section-Logging_Traces_and_Alarms.xml | 26 + resources/diameter-slh/du/pom.xml | 89 + .../main/resources/META-INF/deploy-config.xml | 8 + resources/diameter-slh/events/pom.xml | 37 + .../slh/events/LCSRoutingInfoAnswer.java | 285 + .../slh/events/LCSRoutingInfoRequest.java | 164 + .../events/avp/AdditionalServingNodeAvp.java | 189 + .../events/avp/LCSRoutingInfoAVPCodes.java | 232 + .../slh/events/avp/ServingNodeAvp.java | 190 + .../slh/events/avp/SupportedFeaturesAvp.java | 119 + .../slh/events/LCSRoutingInfoAnswerImpl.java | 278 + .../slh/events/LCSRoutingInfoRequestImpl.java | 159 + .../avp/AdditionalServingNodeAvpImpl.java | 160 + .../slh/events/avp/ServingNodeAvpImpl.java | 162 + .../events/avp/SupportedFeaturesAvpImpl.java | 118 + .../src/main/resources/META-INF/event-jar.xml | 27 + resources/diameter-slh/pom.xml | 72 + resources/diameter-slh/ra/pom.xml | 52 + .../slh/DiameterSLhResourceAdaptor.java | 946 + .../resource/diameter/slh/EventIDCache.java | 114 + .../diameter/slh/SLhAVPFactoryImpl.java | 145 + .../slh/SLhClientSessionActivityImpl.java | 170 + .../diameter/slh/SLhMessageFactoryImpl.java | 147 + .../slh/SLhServerSessionActivityImpl.java | 143 + .../diameter/slh/SLhSessionActivityImpl.java | 149 + .../slh/handlers/SLhSessionFactory.java | 135 + .../META-INF/resource-adaptor-jar.xml | 45 + resources/diameter-slh/ratype/pom.xml | 29 + .../resource/diameter/slh/SLhAVPFactory.java | 44 + .../SLhActivityContextInterfaceFactory.java | 55 + .../slh/SLhClientSessionActivity.java | 53 + .../diameter/slh/SLhMessageFactory.java | 64 + .../resource/diameter/slh/SLhProvider.java | 117 + .../slh/SLhServerSessionActivity.java | 56 + .../diameter/slh/SLhSessionActivity.java | 58 + .../META-INF/resource-adaptor-type-jar.xml | 69 + resources/diameter-slh/release/README.TXT | 63 + .../diameter-slh/release/build-jboss5.xml | 43 + .../diameter-slh/release/build-wildfly.xml | 19 + resources/diameter-slh/release/pom.xml | 60 + resources/diameter-slh/testsuite/pom.xml | 55 + .../slh/tests/factories/SLhAvpAssistant.java | 74 + .../slh/tests/factories/SLhFactoriesTest.java | 357 + 190 files changed, 30917 insertions(+), 7578 deletions(-) create mode 100644 resources/diameter-slg/docs/jdocbook-restcomm/pom.xml create mode 100644 resources/diameter-slg/docs/pom.xml create mode 100644 resources/diameter-slg/docs/sources-restcomm/pom.xml create mode 100644 resources/diameter-slg/docs/sources/pom.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Author_Group.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Book_Info.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Setup.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/Revision_History.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.ent create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Preface.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml create mode 100644 resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml create mode 100644 resources/diameter-slg/du/pom.xml create mode 100644 resources/diameter-slg/du/src/main/resources/META-INF/deploy-config.xml create mode 100644 resources/diameter-slg/events/pom.xml create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportRequest.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AccuracyFulfilmentIndicator.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AdditionalAreaAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaDefinitionAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaEventInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ELPAVPCodes.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSClientType.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSFormatIndicator.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheck.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSClass.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LocationEvent.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/MotionEventInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/OccurrenceInfo.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PLMNIDListAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLocationSupportIndicator.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PrioritizedListIndicator.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PseudonymIndicator.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ResponseTime.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SLgLocationType.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ServingNodeAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvp.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VelocityRequested.java create mode 100644 resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VerticalRequested.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportAnswerImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportRequestImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationAnswerImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AdditionalAreaAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaDefinitionAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaEventInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSQoSAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/MotionEventInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PLMNIDListAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ServingNodeAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvpImpl.java create mode 100644 resources/diameter-slg/events/src/main/resources/META-INF/event-jar.xml create mode 100644 resources/diameter-slg/pom.xml create mode 100644 resources/diameter-slg/ra/pom.xml create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/EventIDCache.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgAVPFactoryImpl.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgMessageFactoryImpl.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgServerSessionActivityImpl.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java create mode 100644 resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java create mode 100644 resources/diameter-slg/ra/src/main/resources/META-INF/resource-adaptor-jar.xml create mode 100644 resources/diameter-slg/ratype/pom.xml create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/DiameterSLgResultCode.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgAVPFactory.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgActivityContextInterfaceFactory.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgMessageFactory.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgServerSessionActivity.java create mode 100644 resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgSessionActivity.java create mode 100644 resources/diameter-slg/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml create mode 100644 resources/diameter-slg/release/README.TXT create mode 100644 resources/diameter-slg/release/build-jboss5.xml create mode 100644 resources/diameter-slg/release/build-wildfly.xml create mode 100644 resources/diameter-slg/release/pom.xml create mode 100644 resources/diameter-slg/testsuite/pom.xml create mode 100644 resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgAvpAssistant.java create mode 100644 resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java create mode 100644 resources/diameter-slh/docs/jdocbook-restcomm/pom.xml create mode 100644 resources/diameter-slh/docs/pom.xml create mode 100644 resources/diameter-slh/docs/sources-restcomm/pom.xml create mode 100644 resources/diameter-slh/docs/sources/pom.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Author_Group.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Book_Info.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Setup.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/Revision_History.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.ent create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Preface.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml create mode 100644 resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml create mode 100644 resources/diameter-slh/du/pom.xml create mode 100644 resources/diameter-slh/du/src/main/resources/META-INF/deploy-config.xml create mode 100644 resources/diameter-slh/events/pom.xml create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoRequest.java create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvp.java create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/LCSRoutingInfoAVPCodes.java create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/ServingNodeAvp.java create mode 100644 resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvp.java create mode 100644 resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java create mode 100644 resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java create mode 100644 resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvpImpl.java create mode 100644 resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/ServingNodeAvpImpl.java create mode 100644 resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvpImpl.java create mode 100644 resources/diameter-slh/events/src/main/resources/META-INF/event-jar.xml create mode 100644 resources/diameter-slh/pom.xml create mode 100644 resources/diameter-slh/ra/pom.xml create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/EventIDCache.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhAVPFactoryImpl.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhMessageFactoryImpl.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java create mode 100644 resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java create mode 100644 resources/diameter-slh/ra/src/main/resources/META-INF/resource-adaptor-jar.xml create mode 100644 resources/diameter-slh/ratype/pom.xml create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhAVPFactory.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhActivityContextInterfaceFactory.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhClientSessionActivity.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhMessageFactory.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhProvider.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhServerSessionActivity.java create mode 100644 resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhSessionActivity.java create mode 100644 resources/diameter-slh/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml create mode 100644 resources/diameter-slh/release/README.TXT create mode 100644 resources/diameter-slh/release/build-jboss5.xml create mode 100644 resources/diameter-slh/release/build-wildfly.xml create mode 100644 resources/diameter-slh/release/pom.xml create mode 100644 resources/diameter-slh/testsuite/pom.xml create mode 100644 resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhAvpAssistant.java create mode 100644 resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhFactoriesTest.java diff --git a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml index 5ddab67d2..399e281c0 100644 --- a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml +++ b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml @@ -1,7578 +1,7567 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml new file mode 100644 index 000000000..c96a8f90d --- /dev/null +++ b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml @@ -0,0 +1,129 @@ + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg-docs + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-docs-jdocbook-restcomm + + 4.0.0 + + jdocbook + + + + release + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + generate-resources + + unpack + + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-docs-sources-restcomm + ${pom.version} + jar + true + ${project.build.directory}/docbook/resources + + + + + + + + org.jboss.maven.plugins + maven-jdocbook-plugin + 2.3.5 + true + + + org.mobicents.jdocbook + telestax-xslt-ns + 1.5.0.FINAL + + + org.mobicents.jdocbook + telestax-community-style + jdocbook-style + 1.5.0.FINAL + + + + User_Guide.xml + ${project.build.directory}/docbook/resources + + ${project.build.directory}/docbook/resources/en-US + + images/* + + + + + pdf + classpath:/xslt/org/jboss/pdf.xsl + Restcomm_SLEE_RA_DIAMETER_SLg_User_Guide.pdf + + + html + classpath:/xslt/org/jboss/xhtml.xsl + index.html + + + html_single + classpath:/xslt/org/jboss/xhtml-single.xsl + index.html + + + + true + + + 1.72.0 + + + + + + + diff --git a/resources/diameter-slg/docs/pom.xml b/resources/diameter-slg/docs/pom.xml new file mode 100644 index 000000000..eff2d5c73 --- /dev/null +++ b/resources/diameter-slg/docs/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-docs + + pom + + + sources + sources-restcomm + jdocbook-restcomm + + + \ No newline at end of file diff --git a/resources/diameter-slg/docs/sources-restcomm/pom.xml b/resources/diameter-slg/docs/sources-restcomm/pom.xml new file mode 100644 index 000000000..3132ed12a --- /dev/null +++ b/resources/diameter-slg/docs/sources-restcomm/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg-docs + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-docs-sources-restcomm + + + Restcomm + JBoss Application Server + https://github.com/RestComm/jain-slee.diameter/issues + https://github.com/RestComm/jain-slee.diameter + brainslog (at) gmail.com + fernando.mendioroz (at) telestax.com + + + + + + ${basedir}/src/main/resources + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + generate-resources + + unpack + + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-docs-sources + ${pom.version} + jar + true + ${basedir}/src/main/resources + + + + + + + + maven-antrun-plugin + + + clean-resources + clean + + run + + + + + + + + + + + + + + + diff --git a/resources/diameter-slg/docs/sources/pom.xml b/resources/diameter-slg/docs/sources/pom.xml new file mode 100644 index 000000000..fb8fe4d36 --- /dev/null +++ b/resources/diameter-slg/docs/sources/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg-docs + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-docs-sources + + + + + + + + + ${basedir}/src/main/resources + true + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Author_Group.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Author_Group.xml new file mode 100644 index 000000000..f9dd6d46a --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Author_Group.xml @@ -0,0 +1,21 @@ + + + %BOOK_ENTITIES; + ]> + + + + + Alexandre + Mendonça + &AUTHOR.EMAIL.ALEXANDRE; + + + Fernando + Mendioroz + &AUTHOR.EMAIL.FERNANDO; + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Book_Info.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Book_Info.xml new file mode 100644 index 000000000..953c1d5d4 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Book_Info.xml @@ -0,0 +1,46 @@ + + + %BOOK_ENTITIES; + ]> + + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor User Guide + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; RA + &THIS.VERSION; + 3.0 + 1 + + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor (RA) is the JAIN SLEE 1.1 RA + for the + LTE + EPC + SLg Interface, the reference point for Location Services in + LTE + + EPC + and follows a mechanism where the online client (GMLC) + requests location information to the (E-SMLC) through the (MME). + It is described in TS + 29.172 + by 3GPP. + + This RA implements the Resource Adaptor Type defined by Restcomm development teams. + + + + &YEAR; + Telestax Inc. + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml new file mode 100644 index 000000000..95c493394 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml @@ -0,0 +1,30 @@ + + + + %BOOK_ENTITIES; + ]> + + + Clustering +
+ Failover + + The Diameter stack used by the &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor supports application + session failover, with specific session state being replicated, thus only available for Application + sessions. + Failover of application activities is transparent to SLEE applications. This means that SLEE + applications must be in charge of properly adapting its state machine to recover generic session on node + failure. + +
+
+ Load Balancing + Currently, the only available balancing mechanism is provided by Diameter stack. It depends on RFC 6733 + algorithm to select one peer from realm serving the desired application. + +
+
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml new file mode 100644 index 000000000..797741443 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml @@ -0,0 +1,36 @@ + + + + %BOOK_ENTITIES; + ]> + + + + Introduction to &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + + This resource adaptor provides a Diameter API for JAIN SLEE applications, according to SLg interface based + on Diameter protocol. + + + + + + + + + + + SLg interface is defined in 3GPP TS 29.172 + is used with additional AVPs defined. + + Events represent messages received by the Diameter stack. Different events types are specified for each + Diameter request or answer. Events are fired either on client or server activities. + + The Activities are defined by RA Type to ease use of RA. Activities + represent Diameter session between two peers. SLEE applications use activities to create, + send and receive messages. + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Setup.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Setup.xml new file mode 100644 index 000000000..6d4a76dae --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Chapter-Setup.xml @@ -0,0 +1,125 @@ + + + %BOOK_ENTITIES; + ]> + + + + Setup + +
+ Pre-Install Requirements and Prerequisites + Ensure that the following requirements have been met before continuing with the install. +
+ Hardware Requirements + The Resource Adaptor hardware's main concern is RAM memory and Java Heap size, the more the + better. For instance, while the underlying &THIS.PLATFORM; JAIN SLEE may run with 1GB of RAM, 8GB is + needed to achieve performance higher than 800 new requests per second. + + Of course, memory is only needed to store the Resource Adaptor state, the faster the CPU more + requests per second are supported, yet no particular CPU is a real requirement to use the RA. + +
+
+ Software Prerequisites + The RA requires &THIS.PLATFORM; JAIN SLEE properly set and Mobicents Diameter Multiplexer + (MUX), which includes the stack, and &THIS.PLATFORM; Diameter Base RA to be + properly installed too. + +
+
+ +
+ &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor Source Code + + +
+ Release Source Code Building + + + Downloading the source code + + Git is used to manage Mobicents JAIN SLEE source code. Instructions for downloading, + installing and using Git can be found at + + + + Use Git to checkout a specific release source, the Git repository URL + is &THIS.SOURCE_CODE_URL; , then switch to the specific release version, lets + consider &THIS.VERSION;. + + + [usr]$ git clone &THIS.SOURCE_CODE_URL; mobicents-jain-slee-diameter + [usr]$ cd mobicents-jain-slee-diameter + [usr]$ git checkout tags/&THIS.VERSION; + + + + Building the source code + + Maven 2.0.9 (or higher) is used to build the release. Instructions for using Maven2, + including install, can be found at + + + + Use Maven to build the deployable unit binary. + + [usr]$ cd resources/&THIS.RA.DIRNAME; + [usr]$ mvn install + + Once the process finishes you should have the deployable-unit jar file + in the target directory, if &THIS.PLATFORM; JAIN SLEE is installed and + environment variable JBOSS_HOME is pointing to its underlying &JEE.PLATFORM; directory, then + the deployable unit jar will also be deployed in the container. + + + +
+ +
+ Development Master Source Building + Similar process as for, the only change is the Git + reference should be the master. The + git checkout tags/&THIS.VERSION; + command should not be performed. If already performed, the following should be used in order to + switch back to the master: + + + [usr]$ git checkout master + +
+ +
+ +
+ Installing &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + To install the Resource Adaptor simply execute provided ant script build.xml default + target: + + + [usr]$ ant + + The script will copy the RA deployable unit jar to the default &THIS.PLATFORM; JAIN + SLEE server profile deploy directory, to deploy to another server profile use the argument + -Dnode=. + +
+ +
+ Uninstalling &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + To uninstall the Resource Adaptor simply execute provided ant script + build.xml + undeploy + target: + + + [usr]$ ant undeploy + + The script will delete the RA deployable unit jar from the default &THIS.PLATFORM; + JAIN SLEE server profile deploy directory, to undeploy from another server profile use the + argument -Dnode=. + +
+ +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/Revision_History.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Revision_History.xml new file mode 100644 index 000000000..9f1e35c17 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/Revision_History.xml @@ -0,0 +1,32 @@ + + + %BOOK_ENTITIES; + ]> + + + Revision History + + + + 1.0 + Thu Feb 15 2018 + + Alexandre + Mendonça + + + Fernando + Mendioroz + + + + Creation of the &THIS.PLATFORM; JAIN SLEE &THIS.RA; RA User Guide. + + + + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.ent b/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.ent new file mode 100644 index 000000000..efb94f676 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.ent @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.xml new file mode 100644 index 000000000..498c39e73 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/User_Guide.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Preface.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Preface.xml new file mode 100644 index 000000000..b4311e2ec --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Preface.xml @@ -0,0 +1,15 @@ + + + + + Preface + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml new file mode 100644 index 000000000..e042691ae --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml @@ -0,0 +1,257 @@ + + + +
+ Document Conventions + + This manual uses several conventions to highlight certain words and phrases and draw attention to specific + pieces of information. + + + In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts + set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, + alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later includes the + Liberation Fonts set by default. + +
+ Typographic Conventions + + Four typographic conventions are used to call attention to specific words and phrases. These conventions, + and the circumstances they apply to, are as follows. + + + Mono-spaced Bold + + + Used to highlight system input, including shell commands, file names and paths. Also used to highlight key + caps and key-combinations. For example: + +
+ + To see the contents of the file my_next_bestselling_novel in your current working + directory, enter the cat my_next_bestselling_novel command at the shell prompt and + press Enter to execute the command. + +
+ + The above includes a file name, a shell command and a key cap, all presented in Mono-spaced Bold and all + distinguishable thanks to context. + + + Key-combinations can be distinguished from key caps by the hyphen connecting each part of a key-combination. + For example: + +
+ + Press Enter to execute the command. + + + Press + + Ctrl + Alt + F1 + + to switch to the first virtual terminal. Press + + Ctrl + Alt + F7 + + to return to your X-Windows session. + +
+ + The first sentence highlights the particular key cap to press. The second highlights two sets of three key + caps, each set pressed simultaneously. + + + If source code is discussed, class names, methods, functions, variable names and returned values mentioned + within a paragraph will be presented as above, in Mono-spaced Bold. For example: + +
+ + File-related classes include filesystem for file systems, file + for files, and dir for directories. Each class has its own associated + set of permissions. + +
+ + Proportional Bold + + + This denotes words or phrases encountered on a system, including application names; dialogue box text; + labelled buttons; check-box and radio button labels; menu titles and sub-menu titles. For example: + +
+ + Choose System > Preferences > Mouse from the main menu bar to + launch Mouse Preferences. In the Buttons tab, click the + Left-handed mouse + check box and click Close to switch the primary mouse button from the + left to the right (making the mouse suitable for use in the left hand). + + + To insert a special character into a gedit file, choose Applications + > Accessories > Character Map + from the main menu bar. Next, choose + Search > Find… + from the Character Map menu bar, type the name of the character in the + Search + field and click Next. The character you sought will be highlighted in the + Character Table. Double-click this highlighted character to place it in the Text to + copy + field and then click the Copy button. Now switch back to your document + and choose Edit > Paste from the gedit menu bar. + +
+ + The above text includes application names; system-wide menu names and items; application-specific menu + names; and buttons and text found within a GUI interface, all presented in Proportional Bold and all + distinguishable by context. + + + Note the > shorthand used to indicate traversal through a menu and its sub-menus. This + is to avoid the difficult-to-follow 'Select Mouse from the + Preferences + sub-menu in the System menu of the main menu bar' approach. + + + + Mono-spaced Bold Italic + + or + + Proportional Bold Italic + + + + Whether Mono-spaced Bold or Proportional Bold, the addition of Italics indicates replaceable or variable + text. Italics denotes text you do not input literally or displayed text that changes depending on + circumstance. For example: + +
+ + To connect to a remote machine using ssh, type + ssh username@ + domain.name + + at a shell prompt. If the remote machine is example.com and your username on that + machine is john, type ssh john@example.com. + + + The + mount -o remount + file-system + + command remounts the named file system. For example, to remount the /home file + system, the command is mount -o remount /home. + + + To see the version of a currently installed package, use the + rpm -q + package + + command. It will return a result as follows: + + package-version-release + + . + +
+ + Note the words in bold italics above — username, domain.name, file-system, package, version and + release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed + by the system. + + + Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and + important term. For example: + +
+ + When the Apache HTTP Server accepts requests, it dispatches child processes or threads to handle them. + This group of child processes or threads is known as a server-pool. Under Apache + HTTP Server 2.0, the responsibility for creating and maintaining these server-pools has been abstracted + to a group of modules called Multi-Processing Modules ( + MPMs). Unlike other modules, only one module from the MPM group can be loaded by the Apache + HTTP Server. + +
+
+ +
+ Pull-quote Conventions + + Two, commonly multi-line, data types are set off visually from the surrounding text. + + + Output sent to a terminal is set in Mono-spaced Roman and presented thus: + + + + books Desktop documentation drafts mss photos stuff svn + books_tests Desktop1 downloads images notes scripts svgs + + + Source-code listings are also set in Mono-spaced Roman but are presented + and highlighted as follows: + + + + package org.jboss.book.jca.ex1; + + import javax.naming.InitialContext; + + public class ExClient + { + public static void main(String args[]) + throws Exception + { + InitialContext iniCtx = new InitialContext(); + Object ref = iniCtx.lookup("EchoBean"); + EchoHome home = (EchoHome) ref; + Echo echo = home.create(); + + System.out.println("Created Echo"); + + System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); + } + + } + +
+ +
+ Notes and Warnings + + Finally, we use three visual styles to draw attention to information that might otherwise be overlooked. + + + Note + + A note is a tip or shortcut or alternative approach to the task at hand. Ignoring a note should have no + negative consequences, but you might miss out on a trick that makes your life easier. + + + + Important + + Important boxes detail things that are easily missed: configuration changes that only apply to the + current session, or services that need restarting before an update will apply. Ignoring Important boxes + won't cause data loss but may cause irritation and frustration. + + + + Warning + + A Warning should not be ignored. Ignoring warnings will most likely cause data loss. + + +
+ +
+ + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml new file mode 100644 index 000000000..ebcbc0d1b --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml @@ -0,0 +1,29 @@ + + + %BOOK_ENTITIES; + ]> + +
+ + Provide feedback to the authors! + + + feedback + + + If you find a typographical error in this manual, or if you have thought of a way to make this manual + better, we would love to hear from you! Please submit a report in the the Issue Tracker, against the product + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor, or contact the authors. + + When submitting a bug report, be sure to mention the manual's identifier: &BOOK_ID; + If you have a suggestion for improving the documentation, try to be as specific as possible when + describing it. If you have found an error, please include the section number and some of the surrounding + text so we can find it easily. + + +
+ + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml new file mode 100644 index 000000000..45a2bdc0f --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml @@ -0,0 +1,41 @@ + + + +%BOOK_ENTITIES; +]> + + + + + Resource Adaptor Type + + &THIS.RA; Resource Adaptor Type is defined by Mobicents team as part of effort to standardize RA Types. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml new file mode 100644 index 000000000..bf6eea625 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml @@ -0,0 +1,149 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Activities + + &THIS.RA; Type &THIS.VERSION; defines the following Activities: + + + + net.java.slee.resource.diameter.slg.SLgClientSession + + This type of activity represents the client side of SLg session. Provide-Location-Request + (PLR) and Location-Report-Answer (LRA) messages can be created and sent in this Activity, + receiving the respective Answer (or timeout) later on this Activity. + + This activity type can be created with call to the proper + createSLgClientSessionActivity + method of net.java.slee.resource.diameter.slg.SLgProvider. It + ends once underlying SLg session ends. + + State machine for client SLg sessions can be found at 3GPP TS + 29.172. + + + + + net.java.slee.resource.diameter.slg.SLgServerSession + + This type of activity represents the server side of SLg session. Provide-Location-Request + (PLR) and Location-Report-Answer (LRA) messages are received in this Activity and respective + Requests/Answers are sent from it. + + This activity type is implicitly created by the Resource Adaptor upon reception of either + Provide-Location-Request (PLR) and Location-Report-Answer message. It ends once underlying + session ends. + + State machine for client SLg sessions can be found at 3GPP TS + 29.172. + + + + + + + All activities define methods required to properly function and expose necessary information to + JAIN SLEE + services. + SLg Server Activity is defined as follows: + + + + public ProvideLocationAnswer createProvideLocationAnswer(); + + public void sendProvideLocationAnswer(ProvideLocationAnswer pla) throws IOException; + + public LocationReportRequest createLocationReportRequest(); + + public void sendLocationReportRequest(LocationReportRequest lrr) throws IOException; + + + + + public ProvideLocationAnswer createProvideLocationAnswer(); + + This method creates a SLg-specific Provide-Location-Answer message pre-populated with the AVPs + appropriate for this session. + + + + + public void sendProvideLocationAnswer(ProvideLocationAnswer pla) throws IOException; + + This method sends a Provide-Location-Answer message to the peer. + + + + public LocationReportRequest createLocationReportRequest(); + + This method creates a SLg-specific Location-Report-Request message pre-populated with the AVPs + appropriate for this session. + + + + + public void sendLocationReportRequest(LocationReportRequest lrr) throws IOException; + + This method sends a Location-Report-Request message to the peer. + + + + + SLg Client Activity is defined as follows: + + + public ProvideLocationRequest createProvideLocationRequest(); + + public void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOException; + + public LocationReportAnswer createLocationReportAnswer(); + + public void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException; + + + + + public ProvideLocationRequest createProvideLocationRequest(); + + This method creates a SLg-specific Provide-Location-Request message pre-populated with the AVPs + appropriate for this session. + + + + + public void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOException; + + This method sends a Provide-Location-Request message. + + + + public LocationReportAnswer createLocationReportAnswer(); + + This method creates a SLg-specific Location-Report-Answer message pre-populated with the AVPs + appropriate for this session. + + + + + public void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException; + + This method sends a Location-Report-Answer message. + + + + + + It is safe to type cast all the mentioned Diameter Activities to it's super interface + net.java.slee.resource.diameter.base.DiameterActivity + defined in Diameter Base Activities section. + + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml new file mode 100644 index 000000000..7ef7be399 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml @@ -0,0 +1,30 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Activity Context Interface Factory + + The &THIS.PLATFORM; &THIS.RA; Activity Context Interface Factory is defined as follows: + + + package net.java.slee.resource.diameter.slg; + + import javax.slee.ActivityContextInterface; + + public interface SLgActivityContextInterfaceFactory { + + ActivityContextInterface getActivityContextInterface(SLgClientSessionActivity + slgClientActivityContextInterface); + + ActivityContextInterface getActivityContextInterface(SLgServerSessionActivity + slgServerActivityContextInterface); + + } + + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml new file mode 100644 index 000000000..a897869f5 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml @@ -0,0 +1,123 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Events + + &THIS.RA; Resource Adaptor Type declares the SLg Application specific events, i.e., + Provide-Location-Request/Answer and Location-Report-Request/Answer. + + The following tables shows which events are fired on each activity. + + + Events received on SLg Server Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slg.events.ProvideLocationRequest + java.net + 0.8 + net.java.slee.resource. diameter.slg.events.ProvideLocationRequest + + + +
+ + Events received on SLg Client Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slg.events.ProvideLocationAnswer + java.net + 0.8 + net.java.slee.resource. diameter.slg.events.ProvideLocationAnswer + + + +
+ + Events received on SLg Server Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slg.events.LocationReportRequest + java.net + 0.8 + net.java.slee.resource. diameter.slg.events.LocationReportRequest + + + +
+ + Events received on SLg Client Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slg.events.LocationReportAnswer + java.net + 0.8 + net.java.slee.resource. diameter.slg.events.LocationReportAnswer + + + +
+ + + Spaces where introduced in Name and Event Class column values, + to correctly render the table. Please remove them when using copy/paste. + + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml new file mode 100644 index 000000000..cf32839fc --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml @@ -0,0 +1,118 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Resource Adaptor Interface + + The &THIS.PLATFORM; &THIS.RA; Resource Adaptor SBB Interface provides SBBs with access to the Diameter + objects required for creating and sending messages. It is defined as follows: + + + + package net.java.slee.resource.diameter.slg; + + import net.java.slee.resource.diameter.Validator; + import net.java.slee.resource.diameter.base.CreateActivityException; + import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + + public interface SLgProvider { + + SLgServerSessionActivity createSLgServerSessionActivity() throws CreateActivityException; + + SLgServerSessionActivity createSLgServerSessionActivity(DiameterIdentity destinationHost, DiameterIdentity + destinationRealm) throws CreateActivityException; + + SLgClientSessionActivity createSLgClientSessionActivity() throws CreateActivityException; + + SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity + destinationRealm) throws CreateActivityException; + + SLgMessageFactory getSLgMessageFactory(); + + SLgAVPFactory getSLgAVPFactory(); + + int getPeerCount(); + + DiameterIdentity[] getConnectedPeers(); + + Validator getValidator(); + + } + + + + + + SLgServerSessionActivity createSLgServerSessionActivity() throws CreateActivityException; + + This method Create a new server session to send and receive Diameter messages. + All messages sent on an activity created by this method must contain valid routing AVPs (one + or both of Destination-Realm and Destination-Host as defined by RFC6733). + + + + + SLgServerSessionActivity createSLgServerSessionActivity(DiameterIdentity destinationHost, + DiameterIdentity destinationRealm) throws CreateActivityException; + + + This method Create a new server session to send and receive Diameter messages. + Messages sent on an activity created by this method will automatically have the + Destination-Host and Destination-Realm AVPs set to the provided values. + + + + + SLgClientSessionActivity createSLgClientSessionActivity() throws CreateActivityException; + + This method a new client session to send and receive Diameter messages. All messages sent + on an activity created by this method must contain valid routing AVPs (one or both of + Destination-Realm and Destination-Host as defined by RFC6733). + + + + + SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, + DiameterIdentity destinationRealm) throws CreateActivityException; + + + This method creates new client session to send and receive Diameter messages. Messages + sent on an activity created by this method will automatically have the Destination-Host and + Destination-Realm AVPs set to the provided values. + + + + + SLgMessageFactory getSLgMessageFactory(); + + This method returns a message factory to be used to create SLg messages. + + + + SLgAVPFactory getSLgAVPFactory(); + + This method returns an AVP factory to be used to create concrete implementations of SLg AVPs. + + + + + DiameterIdentity[] getConnectedPeers(); + + This method returns the identities of peers this Diameter resource adaptor is connected to. + + + + + int getPeerCount(); + + This method returns the number of peers this Diameter resource adaptor is connected to. + + + + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml new file mode 100644 index 000000000..e1928a7ac --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml @@ -0,0 +1,14 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Restrictions + + Current Resource Adaptor Type has no defined restrictions. + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml new file mode 100644 index 000000000..ddc65525d --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml @@ -0,0 +1,13 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Sbb Code Examples + + TODO +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml new file mode 100644 index 000000000..dec7fdcd8 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml @@ -0,0 +1,31 @@ + + + + %BOOK_ENTITIES; + ]> + + + + + Resource Adaptor Implementation + + This RA uses the &THIS.PLATFORM; Diameter Stack, an improvement over jDiameter Stack. The stack is the result of the work done + by &THIS.PLATFORM; Diameter and jDiameter development teams, and source code is provided in all releases. + + + + + + + + + + diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml new file mode 100644 index 000000000..2476cd720 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml @@ -0,0 +1,52 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Configuration + + The Resource Adaptor supports configuration only at Resource Adaptor Entity creation time, the following + table enumerates the configuration properties: + + + + Resource Adaptor's Configuration Properties + + + + + + + + Property Name + Description + Property Type + Default Value + + + + + authApplicationIds + List of supported Authorization Application Ids in form of {vendor}:{application-id}, + separated by comma ',' + + java.lang.String + 10415:4 + + + +
+ + + JAIN SLEE 1.1 Specification requires values set for properties without a default value, which means + the configuration for those properties are mandatory, otherwise the Resource Adaptor Entity creation + will fail! + + + +
+ diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml new file mode 100644 index 000000000..9c05aa6ea --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml @@ -0,0 +1,42 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Default Resource Adaptor Entities + + There is a single Resource Adaptor Entity created when deploying the Resource Adaptor, named + DiameterSLg. The DiameterSLg entity uses the default Resource Adaptor + configuration, specified in. + + + The DiameterSLg entity is also bound to Resource Adaptor Link Name + DiameterSLg, to use it in an Sbb add the following XML to its descriptor: + + + + + Diameter SLg + java.net + 0.8.1 + + + + slee/resources/JDiameterSLgResourceAdaptor/java.net/0.8.1/acif + + + + + slee/resources/diameter-slg-ra-interface + + DiameterSLg + + + ]]> + +
diff --git a/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml new file mode 100644 index 000000000..c4243da34 --- /dev/null +++ b/resources/diameter-slg/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml @@ -0,0 +1,26 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Traces and Alarms + +
+ Tracers + Each Resource Adaptor Entity uses a single JAIN SLEE 1.1 Tracer, named + DiameterSLgResourceAdaptor. The related Log4j Logger category, which can be used to change the + Tracer level from Log4j configuration, is + javax.slee.RAEntityNotification[entity=DiameterSLg]. + +
+ +
+ Alarms + No alarms are set by this Resource Adaptor. +
+ +
diff --git a/resources/diameter-slg/du/pom.xml b/resources/diameter-slg/du/pom.xml new file mode 100644 index 000000000..21c9d7986 --- /dev/null +++ b/resources/diameter-slg/du/pom.xml @@ -0,0 +1,87 @@ + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 2.8.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-ra-DU + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg-common-library + ${project.version} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-events + ${pom.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-ratype + ${pom.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-ra + ${pom.version} + + + + + diameter-${pom.artifactId}-${pom.version} + + + org.mobicents.tools + maven-du-plugin + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + diff --git a/resources/diameter-slg/du/src/main/resources/META-INF/deploy-config.xml b/resources/diameter-slg/du/src/main/resources/META-INF/deploy-config.xml new file mode 100644 index 000000000..68696c40c --- /dev/null +++ b/resources/diameter-slg/du/src/main/resources/META-INF/deploy-config.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slg/events/pom.xml b/resources/diameter-slg/events/pom.xml new file mode 100644 index 000000000..1d04987e0 --- /dev/null +++ b/resources/diameter-slg/events/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-events + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-base-common-events + ${project.version} + + + + diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java new file mode 100644 index 000000000..396674d44 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java @@ -0,0 +1,279 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; +import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.FailedAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +/** + * Interface for LocationReportAnswer type of message. It has following structure: + * + * < Location-Report-Answer > ::= < Diameter Header: 8388621, PXY, 16777255> + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * [ Result-Code ] + * [ Experimental-Result ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * [ GMLC-Address ] + * [ LRA-Flags ] + * [ Reporting-PLMN-List ] + * [ LCS-Reference-Number ] + * *[ Supported-Features ] + * *[ AVP ] + * *[ Failed-AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * + * + * @author Fernando Mendioroz + */ +public interface LocationReportAnswer extends DiameterMessage { + + static final int COMMAND_CODE = 8388621; + + /** + * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. + * + * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise + */ + boolean hasVendorSpecificApplicationId(); + + /** + * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message + */ + VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); + + /** + * Sets the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @param vendorSpecificApplicationId the new value for the Vendor-Specific-Application-Id AVP + */ + void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vendorSpecificApplicationId); + + /** + * Returns true if the Result-Code AVP is present in the message. + */ + boolean hasResultCode(); + + /** + * Returns the value of the Result-Code AVP, of type Unsigned32. + * Use {@link #hasResultCode()} to check the existence of this AVP. + * + * @return the value of the Result-Code AVP + * @throws IllegalStateException if the Result-Code AVP has not been set on this message + */ + long getResultCode(); + + /** + * Sets the value of the Result-Code AVP, of type Unsigned32. + * + * @throws IllegalStateException if setResultCode has already been called + */ + void setResultCode(long resultCode); + + /** + * Returns true if the Experimental-Result AVP is present in the message. + * + * @return true if the Experimental-Result AVP is present in the message, false otherwise. + */ + public boolean hasExperimentalResult(); + + /** + * Returns the value of the Experimental-Result AVP, of type Grouped. + * + * @return the value of the Experimental-Result AVP, of type Grouped. + */ + public ExperimentalResultAvp getExperimentalResult(); + + /** + * Sets the value of the Experimental-Result AVP, of type Grouped. + * + * @param experimentalResult + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult); + + /** + * Returns true if the Experimental-Result AVP is present in the message. + * + * @return true if the Experimental-Result AVP is present in the message, false otherwise + */ + public boolean hasAuthSessionState(); + + /** + * Returns the value of the Auth-Session-State AVP, of type Enumerated. + * + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + public AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + public void setAuthSessionState(AuthSessionStateType authSessionState); + + /** + * Returns true if the GMLC-Address AVP is present in the message. + * + * @return + */ + boolean hasGMLCAddress(); + + /** + * Returns the value of the GMLC-Address, of type Address. + * + * @return + */ + Address getGMLCAddress(); + + /** + * Sets the value of the GMLC-Address AVP, of type Address. + * + * @param gmlcAddress + * @throws IllegalStateException + */ + void setGMLCAddress(Address gmlcAddress) throws IllegalStateException; + + /** + * Returns true if the LRA-Flags AVP is present in the message. + * + * @return + */ + boolean hasLRAFlags(); + + /** + * Returns the value of the LRA-Flags, of type Unsigned32. + * + * @return + */ + long getLRAFlags(); + + /** + * Sets the value of the LRA-Flags AVP, of type Unsigned32. + * + * @param lraFlags + * @throws IllegalStateException + */ + void setLRAFlags(long lraFlags) throws IllegalStateException; + + /** + * Returns true if the putAvp Reporting-PLMN-List is present in the message. + * + * @return + */ + boolean hasReportingPLMNList(); + + /** + * Returns the value of the putAvp Reporting-PLMN-List, of type Grouped. + * + * @return + */ + ReportingPLMNListAvp getReportingPLMNList(); + + /** + * Sets the value of the putAvp Reporting-PLMN-List, of type Grouped. + * + * @param reportingPLMNList + * @throws IllegalStateException + */ + void setReportingPLMNList(ReportingPLMNListAvp reportingPLMNList) throws IllegalStateException; + + /** + * Returns true if the LCS-Reference-Number AVP is present in the message. + * + * @return + */ + boolean hasLCSReferenceNumber(); + + /** + * Returns the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @return + */ + byte[] getLCSReferenceNumber(); + + /** + * Sets the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @param lcsReferenceNumber + * @throws IllegalStateException + */ + void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException; + + /** + * Returns the value of the Supported-Features AVP, of type Grouped. + * + * @return + */ + public SupportedFeaturesAvp[] getSupportedFeatureses(); + + /** + * Set a single instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatures + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures); + + /** + * Set multiple instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatureses + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses); + + /** + * Returns the set of Failed-AVP AVPs. + * + * @return + */ + FailedAvp[] getFailedAvps(); + + /** + * Sets a single Failed-AVP AVP in the message, of type Grouped. + * + * @param failedAvp + * @throws IllegalStateException + */ + void setFailedAvp(FailedAvp failedAvp) throws IllegalStateException; + + + /** + * Sets the set of Failed-AVP AVPs, with all the values in the given array. + * + * @param failedAvps + * @throws IllegalStateException + */ + void setFailedAvps(FailedAvp[] failedAvps) throws IllegalStateException; + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportRequest.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportRequest.java new file mode 100644 index 000000000..4bd45a847 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportRequest.java @@ -0,0 +1,818 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; +import net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PseudonymIndicator; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSClass; +import net.java.slee.resource.diameter.slg.events.avp.LocationEvent; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +/** + * Interface for LocationReportRequest type of message. It has following structure: + * + * < Location-Report-Request> ::= < Diameter Header: 8388621, REQ, PXY, 16777255 > + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * { Destination-Host } + * { Destination-Realm } + * { Location-Event } + * [ LCS-EPS-Client-Name ] + * [ User-Name ] + * [ MSISDN ] + * [ IMEI ] + * [ Location-Estimate ] + * [ Accuracy-Fulfilment-Indicator ] + * [ Age-Of-Location-Estimate ] + * [ Velocity-Estimate ] + * [ EUTRAN-Positioning-Data ] + * [ ECGI ] + * [ GERAN-Positioning-Info ] + * [ Cell-Global-Identity ] + * [ UTRAN-Positioning-Info ] + * [ Service-Area-Identity ] + * [ LCS-Service-Type-ID ] + * [ Pseudonym-Indicator ] + * [ LCS-QoS-Class ] + * [ Serving-Node ] + * [ LRR-Flags ] + * [ LCS-Reference-Number ] + * [ Deferred-MT-LR-Data ] + * [ GMLC-Address ] + * [ Reporting-Amount ] + * [ Periodic-LDR-Information ] + * [ ESMLC-Cell-Info ] + * [ 1xRTT-RCID ] + * [ Delayed-Location-Reporting-Data ] + * [ Civic-Address ] + * [ Barometric-Pressure ] + * *[ Supported-Features ] + * *[ AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * + * @author Fernando Mendioroz + * */ +public interface LocationReportRequest extends DiameterMessage { + + static final int COMMAND_CODE = 8388621; + + /** + * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. + * + * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise + */ + public boolean hasVendorSpecificApplicationId(); + + /** + * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message + */ + public VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); + + /** + * Sets the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @param vendorSpecificApplicationId the new value for the Vendor-Specific-Application-Id AVP + */ + public void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vendorSpecificApplicationId); + + /** + * Returns true if the Auth-Session-State AVP is present in the message. + * + * @return true if the Auth-Session-State AVP is present in the message, false otherwise + */ + public boolean hasAuthSessionState(); + + /** + * Returns the value of the Auth-Session-State AVP, of type Enumerated. + * + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + public AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + public void setAuthSessionState(AuthSessionStateType authSessionState); + + /** + * Returns true if the Location-Event AVP is present in the message. + * + * @return + */ + boolean hasLocationEvent(); + + /** + * Returns the value of the Location-Event AVP, of type Enumerated. + * + * @return + */ + LocationEvent getLocationEvent(); + + /** + * Sets the value of the Location-Event AVP, of type Enumerated. + * + * @param locationEvent + * @throws IllegalStateException + */ + void setLocationEvent(LocationEvent locationEvent) throws IllegalStateException; + + /** + * Returns true if the LCS-EPS-Client-Name AVP is present in the message. + * + * @return + */ + boolean hasLCSEPSClientName(); + + /** + * Returns the value of the LCS-EPS-Client-Name AVP, of type Grouped. + * + * @return + */ + LCSEPSClientNameAvp getLCSEPSClientName(); + + /** + * Sets the value of the LCS-EPS-Client-Name AVP, of type Grouped. + * + * @param lcsEpsClientName + * @throws IllegalStateException + */ + void setLCSEPSClientName(LCSEPSClientNameAvp lcsEpsClientName) throws IllegalStateException; + + /** + * Returns true if the User-Name AVP is present in the message. + * + * @return + */ + boolean hasUserName(); + + /** + * Returns the value of the User-Name AVP, of type UTF8String. + * + * @return + */ + String getUserName(); + + /** + * Sets the value of the User-Name AVP, of type UTF8String. + * + * @param userName + * @throws IllegalStateException + */ + void setUserName(String userName) throws IllegalStateException; + + /** + * Returns true if the MSISDN AVP is present in the message. + * + * @return + */ + boolean hasMSISDN(); + + /** + * Returns the value of the MSISDN AVP, of type OctetString. + * + * @return + */ + byte[] getMSISDN(); + + /** + * Sets the value of the MSISDN AVP, of type OctetString. + * + * @param msisdn + * @throws IllegalStateException + */ + void setMSISDN(byte[] msisdn) throws IllegalStateException; + + /** + * Returns true if the IMEI AVP is present in the message. + * + * @return + */ + boolean hasIMEI(); + + /** + * Returns the value of the IMEI AVP, of type UTF8String. + * + * @return + */ + String getIMEI(); + + /** + * Sets the value of the IMEI AVP, of type UTF8String. + * + * @param imei + * @throws IllegalStateException + */ + void setIMEI(String imei) throws IllegalStateException; + + /** + * Returns true if the Location-Estimate AVP is present in the message. + * + * @return + */ + boolean hasLocationEstimate(); + + /** + * Returns the value of the Location-Estimate AVP, of type OctetString. + * + * @return + */ + byte[] getLocationEstimate(); + + /** + * Sets the value of the Location-Estimate AVP, of type OctetString. + * + * @param locationEstimate + * @throws IllegalStateException + */ + void setLocationEstimate(byte[] locationEstimate) throws IllegalStateException; + + /** + * Returns true if the Accuracy-Fulfilment-Indicator AVP is present in the message. + * + * @return + */ + boolean hasAccuracyFulfilmentIndicator(); + + /** + * Returns the value of the Accuracy-Fulfilment-Indicator AVP, of type Enumerated. + * + * @return + */ + AccuracyFulfilmentIndicator getAccuracyFulfilmentIndicator(); + + /** + * Sets the value of the Accuracy-Fulfilment-Indicator AVP, of type Enumerated. + * + * @param accuracyFulfilmentIndicator + * @throws IllegalStateException + */ + void setAccuracyFulfilmentIndicator(AccuracyFulfilmentIndicator accuracyFulfilmentIndicator) throws IllegalStateException; + + /** + * Returns true if the Age-Of-Location-Estimate AVP is present in the message. + * + * @return + */ + boolean hasAgeOfLocationEstimate(); + + /** + * Returns the value of the Age-Of-Location-Estimate AVP, of type Unsigned32. + * + * @return + */ + long getAgeOfLocationEstimate(); + + /** + * Sets the value of the Age-Of-Location-Estimate AVP, of type Unsigned32. + * + * @param accuracyFulfilmentIndicator + * @throws IllegalStateException + */ + void setAgeOfLocationEstimate(long accuracyFulfilmentIndicator) throws IllegalStateException; + + /** + * Returns true if the Velocity-Estimate AVP is present in the message. + * + * @return + */ + boolean hasVelocityEstimate(); + + /** + * Returns the value of the Velocity-Estimate AVP, of type OctetString. + * + * @return + */ + byte[] getVelocityEstimate(); + + /** + * Sets the value of the Velocity-Estimate AVP, of type OctetString. + * + * @param velocityEstimate + * @throws IllegalStateException + */ + void setVelocityEstimate(byte[] velocityEstimate) throws IllegalStateException; + + /** + * Returns true if the EUTRAN-Positioning-Data AVP is present in the message. + * + * @return + */ + boolean hasEUTRANPositioningData(); + + /** + * Returns the value of the EUTRAN-Positioning-Data AVP, of type OctetString. + * + * @return + */ + byte[] getEUTRANPositioningData(); + + /** + * Sets the value of the EUTRAN-Positioning-Data AVP, of type OctetString. + * + * @param eUTRANPositioningData + * @throws IllegalStateException + */ + void setEUTRANPositioningData(byte[] eUTRANPositioningData) throws IllegalStateException; + + /** + * Returns true if the ECGI AVP is present in the message. + * + * @return + */ + boolean hasECGI(); + + /** + * Returns the value of the ECGI AVP, of type OctetString. + * + * @return + */ + byte[] getECGI(); + + /** + * Sets the value of the ECGI AVP, of type OctetString. + * + * @param ecgi + * @throws IllegalStateException + */ + void setECGI(byte[] ecgi) throws IllegalStateException; + + /** + * Returns true if the GERAN-Positioning-Info AVP is present in the message. + * + * @return + */ + boolean hasGERANPositioningInfo(); + + /** + * Returns the value of the GERAN-Positioning-Info AVP, of type Grouped. + * + * @return + */ + GERANPositioningInfoAvp getGERANPositioningInfo(); + + /** + * Sets the value of the GERAN-Positioning-Info AVP, of type Grouped. + * + * @param geranPositioningInfo + * @throws IllegalStateException + */ + void setGERANPositioningInfo(GERANPositioningInfoAvp geranPositioningInfo) throws IllegalStateException; + + /** + * Returns true if the Cell-Global-Identity AVP is present in the message. + * + * @return + */ + boolean hasCellGlobalIdentity(); + + /** + * Returns the value of the Cell-Global-Identity AVP, of type OctetString. + * + * @return + */ + byte[] getCellGlobalIdentity(); + + /** + * Sets the value of the Cell-Global-Identity AVP, of type OctetString. + * + * @param cellGlobalIdentity + * @throws IllegalStateException + */ + void setCellGlobalIdentity(byte[] cellGlobalIdentity) throws IllegalStateException; + + /** + * Returns true if the UTRAN-Positioning-Info AVP is present in the message. + * + * @return + */ + boolean hasUTRANPositioningInfo(); + + /** + * Returns the value of the UTRAN-Positioning-Info AVP, of type Grouped. + * + * @return + */ + UTRANPositioningInfoAvp getUTRANPositioningInfo(); + + /** + * Sets the value of the UTRAN-Positioning-Info AVP, of type Grouped. + * + * @param utranPositioningInfo + * @throws IllegalStateException + */ + void setUTRANPositioningInfo(UTRANPositioningInfoAvp utranPositioningInfo) throws IllegalStateException; + + /** + * Returns true if the Service-Area-Identity AVP is present in the message. + * + * @return + */ + boolean hasServiceAreaIdentity(); + + /** + * Returns the value of the Service-Area-Identity AVP, of type OctetString. + * + * @return + */ + byte[] getServiceAreaIdentity(); + + /** + * Sets the value of the Service-Area-Identity AVP, of type OctetString. + * + * @param serviceAreaIdentity + * @throws IllegalStateException + */ + void setServiceAreaIdentity(byte[] serviceAreaIdentity) throws IllegalStateException; + + /** + * Returns true if the LCS-Service-Type-ID AVP is present in the message. + * + * @return + */ + boolean hasLCSServiceTypeID(); + + /** + * Returns the value of the LCS-Service-Type-ID AVP, of type Unsigned32 . + * + * @return + */ + long getLCSServiceTypeID(); + + /** + * Sets the value of the LCS-Service-Type-ID AVP, of type Unsigned32 . + * + * @param lcsServiceTypeID + * @throws IllegalStateException + */ + void setLCSServiceTypeID(long lcsServiceTypeID) throws IllegalStateException; + + /** + * Returns true if the Pseudonym-Indicator AVP is present in the message. + * + * @return + */ + boolean hasPseudonymIndicator(); + + /** + * Returns the value of the Pseudonym-Indicator AVP, of type Enumerated. + * + * @return + */ + PseudonymIndicator getPseudonymIndicator(); + + /** + * Sets the value of the Pseudonym-Indicator AVP, of type Enumerated. + * + * @param pseudonymIndicator + * @throws IllegalStateException + */ + void setPseudonymIndicator(PseudonymIndicator pseudonymIndicator) throws IllegalStateException; + + /** + * Returns true if the LCS-QoS-Class AVP is present in the message. + * + * @return + */ + boolean hasLCSQoSClass(); + + /** + * Returns the value of the LCS-QoS-Class AVP, of type Enumerated. + * + * @return + */ + LCSQoSClass getLCSQoSClass(); + + /** + * Sets the value of the LCS-QoS-Class AVP, of type Enumerated. + * + * @param lcsQoSClass + * @throws IllegalStateException + */ + void setLCSQoSClass(LCSQoSClass lcsQoSClass) throws IllegalStateException; + + /** + * Returns true if the Serving-Node AVP is present in the message. + * + * @return + */ + boolean hasServingNode(); + + /** + * Returns the value of the Serving-Node AVP, of type OctetString. + * + * @return + */ + ServingNodeAvp getServingNode(); + + /** + * Sets the value of the Serving-Node AVP, of type OctetString. + * + * @param servingNode + * @throws IllegalStateException + */ + void setServingNode(ServingNodeAvp servingNode) throws IllegalStateException; + + /** + * Returns true if the LRR-Flags AVP is present in the message. + * + * @return + */ + boolean hasLRRFlags(); + + /** + * Returns the value of the LRR-Flags AVP, of type Unsigned32. + * + * @return + */ + long getLRRFlags(); + + /** + * Sets the value of the LRR-Flags AVP, of type Unsigned32. + * + * @param lrrFlags + * @throws IllegalStateException + */ + void setLRRFlags(long lrrFlags) throws IllegalStateException; + + /** + * Returns true if the LCS-Reference-Number AVP is present in the message. + * + * @return + */ + boolean hasLCSReferenceNumber(); + + /** + * Returns the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @return + */ + byte[] getLCSReferenceNumber(); + + /** + * Sets the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @param lcsReferenceNumber + * @throws IllegalStateException + */ + void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException; + + /** + * Returns true if the Deferred-MT-LR-Data AVP is present in the message. + * + * @return + */ + boolean hasDeferredMTLRData(); + + /** + * Returns the value of the Deferred-MT-LR-Data AVP, of type . + * + * @return + */ + DeferredMTLRDataAvp getDeferredMTLRData(); + + /** + * Sets the value of the Deferred-MT-LR-Data AVP, of type . + * + * @param deferredMTLRData + * @throws IllegalStateException + */ + void setDeferredMTLRData(DeferredMTLRDataAvp deferredMTLRData) throws IllegalStateException; + + /** + * Returns true if the GMLC-Address AVP is present in the message. + * + * @return + */ + boolean hasGMLCAddress(); + + /** + * Returns the value of the GMLC-Address, of type Address. + * + * @return + */ + Address getGMLCAddress(); + + /** + * Sets the value of the GMLC-Address AVP, of type Address. + * + * @param gmlcAddress + * @throws IllegalStateException + */ + void setGMLCAddress(Address gmlcAddress) throws IllegalStateException; + + /** + * Returns true if the Reporting-Amount AVP is present in the message. + * + * @return + */ + boolean hasReportingAmount(); + + /** + * Returns the value of the Reporting-Amount AVP, of type Unsigned32 . + * + * @return + */ + long getReportingAmount(); + + /** + * Sets the value of the Reporting-Amount AVP, of type Unsigned32 . + * + * @param reportingAmount + * @throws IllegalStateException + */ + void setReportingAmount(long reportingAmount) throws IllegalStateException; + + /** + * Returns true if the Periodic-LDR-Information AVP is present in the message. + * + * @return + */ + boolean hasPeriodicLDRInformation(); + + /** + * Returns the value of the Periodic-LDR-Information AVP, of type Grouped. + * + * @return + */ + PeriodicLDRInfoAvp getPeriodicLDRInformation(); + + /** + * Sets the value of the Periodic-LDR-Information AVP, of type Grouped. + * + * @param putParam + * @throws IllegalStateException + */ + void setPeriodicLDRInformation(PeriodicLDRInfoAvp putParam) throws IllegalStateException; + + /** + * Returns true if the ESMLC-Cell-Info AVP is present in the message. + * + * @return + */ + boolean hasESMLCCellInfo(); + + /** + * Returns the value of the ESMLC-Cell-Info, of type Grouped. + * + * @return + */ + ESMLCCellInfoAvp getESMLCCellInfo(); + + /** + * Sets the value of the ESMLC-Cell-Info AVP, of type Grouped. + * + * @param eSMLCCellInfo + * @throws IllegalStateException + */ + void setESMLCCellInfo(ESMLCCellInfoAvp eSMLCCellInfo) throws IllegalStateException; + + /** + * Returns true if the 1xRTT-RCID AVP is present in the message. + * + * @return + */ + boolean has1xRTTRCID(); + + /** + * Returns the value of the 1xRTT-RCID AVP, of type OctetString. + * + * @return + */ + byte[] get1xRTTRCID(); + + /** + * Sets the value of the 1xRTT-RCID AVP, of type OctetString. + * + * @param onexRTTRCID + * @throws IllegalStateException + */ + void set1xRTTRCID(byte[] onexRTTRCID) throws IllegalStateException; + + /** + * Returns true if the Delayed-Location-Reporting-Data AVP is present in the message. + * + * @return + */ + boolean hasDelayedLocationReportingData(); + + /** + * Returns the value of the Delayed-Location-Reporting-Data AVP, of type Grouped. + * + * @return + */ + DelayedLocationReportingDataAvp getDelayedLocationReportingData(); + + /** + * Sets the value of the Delayed-Location-Reporting-Data AVP, of type Grouped. + * + * @param delayedLocationReportingData + * @throws IllegalStateException + */ + void setDelayedLocationReportingData(DelayedLocationReportingDataAvp delayedLocationReportingData) throws IllegalStateException; + + /** + * Returns true if the Civic-Address AVP is present in the message. + * + * @return + */ + boolean hasCivicAddress(); + + /** + * Returns the value of the Civic-Address AVP, of type OctetString. + * + * @return + */ + byte[] getCivicAddress(); + + /** + * Sets the value of the Civic-Address AVP, of type OctetString. + * + * @param civicAddress + * @throws IllegalStateException + */ + void setCivicAddress(byte[] civicAddress) throws IllegalStateException; + + /** + * Returns true if the Barometric-Pressure AVP is present in the message. + * + * @return + */ + boolean hasBarometricPressure(); + + /** + * Returns the value of the Barometric-Pressure, of type Unsigned32. + * + * @return + */ + long getBarometricPressure(); + + /** + * Sets the value of the Barometric-Pressure AVP, of type Unsigned32. + * + * @param barometricPressure + * @throws IllegalStateException + */ + void setBarometricPressure(long barometricPressure) throws IllegalStateException; + + /** + * Returns the value of the Supported-Features AVP, of type Grouped. + * + * @return + */ + public SupportedFeaturesAvp[] getSupportedFeatureses(); + + /** + * Set a single instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatures + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures); + + /** + * Set multiple instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatureses + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java new file mode 100644 index 000000000..246431489 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java @@ -0,0 +1,535 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; +import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.FailedAvp; + +import net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +/** + * Interface for ProvideLocationAnswer type of message. It has following structure: + * + * < Provide-Location-Answer > ::= < Diameter Header: 8388620, PXY, 16777255 > + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * [ Result-Code ] + * [ Experimental-Result ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * [ Location-Estimate ] + * [ Accuracy-Fulfilment-Indicator ] + * [ Age-Of-Location-Estimate] + * [ Velocity-Estimate ] + * [ EUTRAN-Positioning-Data] + * [ ECGI ] + * [ GERAN-Positioning-Info ] + * [ Cell-Global-Identity ] + * [ UTRAN-Positioning-Info ] + * [ Service-Area-Identity ] + * [ Serving-Node ] + * [ PLA-Flags ] + * [ ESMLC-Cell-Info ] + * [ Civic-Address ] + * [ Barometric-Pressure ] + * *[ Supported-Features ] + * *[ AVP ] + * *[ Failed-AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * + * @author Fernando Mendioroz + */ +public interface ProvideLocationAnswer extends DiameterMessage { + + static final int COMMAND_CODE = 8388620; + + /** + * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. + * + * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise + */ + boolean hasVendorSpecificApplicationId(); + + /** + * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message + */ + VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); + + /** + * Sets the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @param vendorSpecificApplicationId the new value for the Vendor-Specific-Application-Id AVP + */ + void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vendorSpecificApplicationId); + + /** + * Returns true if the Result-Code AVP is present in the message. + * + * @return + */ + boolean hasResultCode(); + + /** + * Returns the value of the Result-Code AVP, of type Unsigned32. + * Use {@link #hasResultCode()} to check the existence of this AVP. + * + * @return the value of the Result-Code AVP + */ + long getResultCode(); + + /** + * Sets the value of the Result-Code AVP, of type Unsigned32. + * + * @param resultCode + */ + void setResultCode(long resultCode); + + /** + * Returns true if the Experimental-Result AVP is present in the message. + * + * @return true if the Experimental-Result AVP is present in the message, false otherwise + */ + public boolean hasExperimentalResult(); + + /** + * Returns the value of the Experimental-Result AVP, of type Grouped. + * + * @return the value of the Experimental-Result AVP, of type Grouped. + */ + public ExperimentalResultAvp getExperimentalResult(); + + /** + * Sets the value of the Experimental-Result AVP, of type Grouped. + * + * @param experimentalResult + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult); + + /** + * Returns true if the Experimental-Result AVP is present in the message. + * + * @return true if the Experimental-Result AVP is present in the message, false otherwise + */ + public boolean hasAuthSessionState(); + + /** + * Returns the value of the Auth-Session-State AVP, of type Enumerated. + * + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + public AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + public void setAuthSessionState(AuthSessionStateType authSessionState); + + /** + * Returns true if the Location-Estimate AVP is present in the message. + * + * @return + */ + boolean hasLocationEstimate(); + + /** + * Returns the value of the Location-Estimate AVP, of type OctetString. + * + * @return + */ + byte[] getLocationEstimate(); + + /** + * Sets the value of the Location-Estimate AVP, of type OctetString. + * + * @param locationEstimate + * @throws IllegalStateException + */ + void setLocationEstimate(byte[] locationEstimate) throws IllegalStateException; + + /** + * Returns true if the Accuracy-Fulfilment-Indicator AVP is present in the message. + * + * @return + */ + boolean hasAccuracyFulfilmentIndicator(); + + /** + * Returns the value of the Accuracy-Fulfilment-Indicator AVP, of type Enumerated. + * + * @return + */ + AccuracyFulfilmentIndicator getAccuracyFulfilmentIndicator(); + + /** + * Sets the value of the Accuracy-Fulfilment-Indicator AVP, of type Enumerated. + * + * @param accuracyFulfilmentIndicator + * @throws IllegalStateException + */ + void setAccuracyFulfilmentIndicator(AccuracyFulfilmentIndicator accuracyFulfilmentIndicator) throws IllegalStateException; + + /** + * Returns true if the Age-Of-Location-Estimate AVP is present in the message. + * + * @return + */ + boolean hasAgeOfLocationEstimate(); + + /** + * Returns the value of the Age-Of-Location-Estimate AVP, of type Unsigned32. + * + * @return + */ + long getAgeOfLocationEstimate(); + + /** + * Sets the value of the Age-Of-Location-Estimate AVP, of type Unsigned32. + * + * @param ageOfLocationEstimate + * @throws IllegalStateException + */ + void setAgeOfLocationEstimate(long ageOfLocationEstimate) throws IllegalStateException; + + /** + * Returns true if the Velocity-Estimate AVP is present in the message. + * + * @return + */ + boolean hasVelocityEstimate(); + + /** + * Returns the value of the Velocity-Estimate AVP, of type OctetString. + * + * @return + */ + byte[] getVelocityEstimate(); + + /** + * Sets the value of the Velocity-Estimate AVP, of type OctetString. + * + * @param velocityEstimate + * @throws IllegalStateException + */ + void setVelocityEstimate(byte[] velocityEstimate) throws IllegalStateException; + + /** + * Returns true if the EUTRAN-Positioning-Data AVP is present in the message. + * + * @return + */ + boolean hasEUTRANPositioningData(); + + /** + * Returns the value of the Velocity-Estimate AVP, of type OctetString. + * + * @return + */ + byte[] getEUTRANPositioningData(); + + /** + * Sets the value of the Velocity-Estimate AVP, of type OctetString. + * + * @param eUTRANPositioningData + * @throws IllegalStateException + */ + void setEUTRANPositioningData(byte[] eUTRANPositioningData) throws IllegalStateException; + + /** + * Returns true if the ECGI AVP is present in the message. + * + * @return + */ + boolean hasECGI(); + + /** + * Returns the value of the ECGI AVP, of type OctetString. + * + * @return + */ + byte[] getECGI(); + + /** + * Sets the value of the ECGI AVP, of type OctetString. + * + * @param ecgi + * @throws IllegalStateException + */ + void setECGI(byte[] ecgi) throws IllegalStateException; + + /** + * Returns true if the GERAN-Positioning-Info AVP is present in the message. + * + * @return + */ + boolean hasGERANPositioningInfo(); + + /** + * Returns the value of the GERAN-Positioning-Info AVP, of type Grouped. + * + * @return + */ + GERANPositioningInfoAvp getGERANPositioningInfo(); + + /** + * Sets the value of the GERAN-Positioning-Info AVP, of type Grouped. + * + * @param geranPositioningInfo + * @throws IllegalStateException + */ + void setGERANPositioningInfo(GERANPositioningInfoAvp geranPositioningInfo) throws IllegalStateException; + + /** + * Returns true if the Cell-Global-Identity AVP is present in the message. + * + * @return + */ + boolean hasCellGlobalIdentity(); + + /** + * Returns the value of the Cell-Global-Identity AVP, of type OctetString. + * + * @return + */ + byte[] getCellGlobalIdentity(); + + /** + * Sets the value of the Cell-Global-Identity AVP, of type OctetString. + * + * @param cellGlobalIdentity + * @throws IllegalStateException + */ + void setCellGlobalIdentity(byte[] cellGlobalIdentity) throws IllegalStateException; + + /** + * Returns true if the UTRAN-Positioning-Info AVP is present in the message. + * + * @return + */ + boolean hasUTRANPositioningInfo(); + + /** + * Returns the value of the UTRAN-Positioning-Info AVP, of type Grouped. + * + * @return + */ + UTRANPositioningInfoAvp getUTRANPositioningInfo(); + + /** + * Sets the value of the UTRAN-Positioning-Info AVP, of type Grouped. + * + * @param utranPositioningInfo + * @throws IllegalStateException + */ + void setUTRANPositioningInfo(UTRANPositioningInfoAvp utranPositioningInfo) throws IllegalStateException; + + /** + * Returns true if the Service-Area-Identity AVP is present in the message. + * + * @return + */ + boolean hasServiceAreaIdentity(); + + /** + * Returns the value of the Service-Area-Identity AVP, of type OctetString. + * + * @return + */ + byte[] getServiceAreaIdentity(); + + /** + * Sets the value of the Service-Area-Identity AVP, of type OctetString. + * + * @param serviceAreaIdentity + * @throws IllegalStateException + */ + void setServiceAreaIdentity(byte[] serviceAreaIdentity) throws IllegalStateException; + + /** + * Returns true if the Serving-Node AVP is present in the message. + * + * @return + */ + boolean hasServingNode(); + + /** + * Returns the value of the Serving-Node AVP, of type OctetString. + * + * @return + */ + ServingNodeAvp getServingNode(); + + /** + * Sets the value of the Serving-Node AVP, of type OctetString. + * + * @param servingNode + * @throws IllegalStateException + */ + void setServingNode(ServingNodeAvp servingNode) throws IllegalStateException; + + /** + * Returns true if the PLA-Flags AVP is present in the message. + * + * @return + */ + boolean hasPLAFlags(); + + /** + * Returns the value of the PLA-Flags, of type Unsigned32. + * + * @return + */ + long getPLAFlags(); + + /** + * Sets the value of the PLA-Flags AVP, of type Unsigned32. + * + * @param plaFlags + * @throws IllegalStateException + */ + void setPLAFlags(long plaFlags) throws IllegalStateException; + + /** + * Returns true if the ESMLC-Cell-Info AVP is present in the message. + * + * @return + */ + boolean hasESMLCCellInfo(); + + /** + * Returns the value of the ESMLC-Cell-Info, of type Grouped. + * + * @return + */ + ESMLCCellInfoAvp getESMLCCellInfo(); + + /** + * Sets the value of the ESMLC-Cell-Info AVP, of type Grouped. + * + * @param eSMLCCellInfo + * @throws IllegalStateException + */ + void setESMLCCellInfo(ESMLCCellInfoAvp eSMLCCellInfo) throws IllegalStateException; + + /** + * Returns true if the Civic-Address AVP is present in the message. + * + * @return + */ + boolean hasCivicAddress(); + + /** + * Returns the value of the Civic-Address AVP, of type OctetString. + * + * @return + */ + byte[] getCivicAddress(); + + /** + * Sets the value of the Civic-Address AVP, of type OctetString. + * + * @param civicAddress + * @throws IllegalStateException + */ + void setCivicAddress(byte[] civicAddress) throws IllegalStateException; + + /** + * Returns true if the Barometric-Pressure AVP is present in the message. + * + * @return + */ + boolean hasBarometricPressure(); + + /** + * Returns the value of the Barometric-Pressure, of type Unsigned32. + * + * @return + */ + long getBarometricPressure(); + + /** + * Sets the value of the Barometric-Pressure AVP, of type Unsigned32. + * + * @param barometricPressure + * @throws IllegalStateException + */ + void setBarometricPressure(long barometricPressure) throws IllegalStateException; + + /** + * Returns the value of the Supported-Features AVP, of type Grouped. + * + * @return + */ + public SupportedFeaturesAvp[] getSupportedFeatureses(); + + /** + * Set a single instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatures + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures); + + /** + * Set multiple instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatureses + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses); + + /** + * Returns the set of Failed-AVP AVPs. + * + * @return + */ + FailedAvp[] getFailedAvps(); + + /** + * Sets a single Failed-AVP AVP in the message, of type Grouped. + * + * @param failedAvp + * @throws IllegalStateException + */ + void setFailedAvp(FailedAvp failedAvp) throws IllegalStateException; + + /** + * Sets the set of Failed-AVP AVPs, with all the values in the given array. + * + * @param failedAvps + * @throws IllegalStateException + */ + void setFailedAvps(FailedAvp[] failedAvps) throws IllegalStateException; + +} \ No newline at end of file diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java new file mode 100644 index 000000000..76af4c98c --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java @@ -0,0 +1,537 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; +import net.java.slee.resource.diameter.slg.events.avp.SLgLocationType; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSClientType; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.VelocityRequested; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +/** + * Interface for ProvideLocationRequest type of message. It has following structure: + * + * < Provide-Location-Request> ::= < Diameter Header: 8388620, REQ, PXY, 16777255 > + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * { Destination-Host } + * { Destination-Realm } + * { SLg-Location-Type } + * [ User-Name ] + * [ MSISDN] + * [ IMEI ] + * { LCS-EPS-Client-Name } + * { LCS-Client-Type } + * [ LCS-Requestor-Name ] + * [ LCS-Priority ] + * [ LCS-QoS ] + * [ Velocity-Requested ] + * [ LCS-Supported-GAD-Shapes ] + * [ LCS-Service-Type-ID ] + * [ LCS-Codeword ] + * [ LCS-Privacy-Check-Non-Session ] + * [ LCS-Privacy-Check-Session ] + * [ Service-Selection ] + * [ Deferred-Location-Type ] + * [ PLR-Flags ] + * *[ Supported-Features ] + * *[ AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * + * @author Fernando Mendioroz + * */ +public interface ProvideLocationRequest extends DiameterMessage { + + static final int COMMAND_CODE = 8388620; + + /** + * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. + * + * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise + */ + boolean hasVendorSpecificApplicationId(); + + /** + * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message + */ + VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); + + /** + * Sets the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @param vendorSpecificApplicationId the new value for the Vendor-Specific-Application-Id AVP + */ + void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vendorSpecificApplicationId); + + /** + * Returns true if the Auth-Session-State AVP is present in the message. + * + * @return true if the Auth-Session-State AVP is present in the message, false otherwise + */ + boolean hasAuthSessionState(); + + /** + * Returns the value of the Auth-Session-State AVP, of type Enumerated. + * + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + void setAuthSessionState(AuthSessionStateType authSessionState); + + /** + * Returns true if the SLg-Location-Type AVP is present in the message. + * + * @return + */ + boolean hasSLgLocationType(); + + /** + * Returns the value of the SLg-Location-Type AVP, of type Enumerated. + * + * @return + */ + SLgLocationType getSLgLocationType(); + + /** + * Sets the value of the SLg-Location-Type AVP, of type Enumerated. + * + * @param slgLocationType + * @throws IllegalStateException + */ + void setSLgLocationType(SLgLocationType slgLocationType) throws IllegalStateException; + + /** + * Returns true if the User-Name AVP is present in the message. + * + * @return + */ + boolean hasUserName(); + + /** + * Returns the value of the User-Name AVP, of type UTF8String. + * + * @return + */ + String getUserName(); + + /** + * Sets the value of the User-Name AVP, of type UTF8String. + * + * @param userName + * @throws IllegalStateException + */ + void setUserName(String userName) throws IllegalStateException; + + /** + * Returns true if the MSISDN AVP is present in the message. + * + * @return + */ + boolean hasMSISDN(); + + /** + * Returns the value of the MSISDN AVP, of type OctetString. + * + * @return + */ + byte[] getMSISDN(); + + /** + * Sets the value of the MSISDN AVP, of type OctetString. + * + * @param msisdn + * @throws IllegalStateException + */ + void setMSISDN(byte[] msisdn) throws IllegalStateException; + + /** + * Returns true if the IMEI AVP is present in the message. + * + * @return + */ + boolean hasIMEI(); + + /** + * Returns the value of the IMEI AVP, of type UTF8String. + * + * @return + */ + String getIMEI(); + + /** + * Sets the value of the IMEI AVP, of type UTF8String. + * + * @param imei + * @throws IllegalStateException + */ + void setIMEI(String imei) throws IllegalStateException; + + /** + * Returns true if the LCS-EPS-Client-Name AVP is present in the message. + * + * @return + */ + boolean hasLCSEPSClientName(); + + /** + * Returns the value of the LCS-EPS-Client-Name AVP, of type Grouped. + * + * @return + */ + LCSEPSClientNameAvp getLCSEPSClientName(); + + /** + * Sets the value of the LCS-EPS-Client-Name AVP, of type Grouped. + * + * @param lcsEpsClientName + * @throws IllegalStateException + */ + void setLCSEPSClientName(LCSEPSClientNameAvp lcsEpsClientName) throws IllegalStateException; + + /** + * Returns true if the LCS-Client-Type AVP is present in the message. + * + * @return + */ + boolean hasLCSClientType(); + + /** + * Returns the value of the LCS-Client-Type AVP, of type Enumerated. + * + * @return + */ + LCSClientType getLCSClientType(); + + /** + * Sets the value of the LCS-Client-Type AVP, of type Enumerated. + * + * @param lcsClientType + * @throws IllegalStateException + */ + void setLCSClientType(LCSClientType lcsClientType) throws IllegalStateException; + + /** + * Returns true if the LCS-Requestor-Name AVP is present in the message. + * + * @return + */ + boolean hasLCSRequestorName(); + + /** + * Returns the value of the LCS-Requestor-Name AVP, of type Grouped. + * + * @return + */ + LCSRequestorNameAvp getLCSRequestorName(); + + /** + * Sets the value of the LCS-Requestor-Id-String AVP, of type Grouped. + * + * @param lcsRequestorName + * @throws IllegalStateException + */ + void setLCSRequestorName(LCSRequestorNameAvp lcsRequestorName) throws IllegalStateException; + + /** + * Returns true if the LCS-Priority AVP is present in the message. + * + * @return + */ + boolean hasLCSPriority(); + + /** + * Returns the value of the LCS-Priority AVP, of type Unsigned32. + * + * @return + */ + long getLCSPriority(); + + /** + * Sets the value of the LCS-Priority AVP, of type Unsigned32. + * + * @param lcsRequestorName + * @throws IllegalStateException + */ + void setLCSPriority(long lcsRequestorName) throws IllegalStateException; + + /** + * Returns true if the LCS-QoS AVP is present in the message. + * + * @return + */ + boolean hasLCSQoS(); + + /** + * Returns the value of the LCS-QoS AVP, of type Grouped. + * + * @return + */ + LCSQoSAvp getLCSQoS(); + + /** + * Sets the value of the LCS-QoS AVP, of type Grouped. + * + * @param lcsQoS + * @throws IllegalStateException + */ + void setLCSQoS(LCSQoSAvp lcsQoS) throws IllegalStateException; + + /** + * Returns true if the Velocity-Requested AVP is present in the message. + * + * @return + */ + boolean hasVelocityRequested(); + + /** + * Returns the value of the Velocity-Requested AVP, of type Enumerated. + * + * @return + */ + VelocityRequested getVelocityRequested(); + + /** + * Sets the value of the Velocity-Requested AVP, of type Enumerated. + * + * @param lcsVelocityRequested + * @throws IllegalStateException + */ + void setVelocityRequested(VelocityRequested lcsVelocityRequested) throws IllegalStateException; + + /** + * Returns true if the LCS-Supported-GAD-Shapes AVP is present in the message. + * + * @return + */ + boolean hasLCSSupportedGADShapes(); + + /** + * Returns the value of the LCS-Supported-GAD-Shapes AVP, of type Unsigned32 . + * + * @return + */ + long getLCSSupportedGADShapes(); + + /** + * Sets the value of the LCS-Supported-GAD-Shapes AVP, of type Unsigned32 . + * + * @param lcsSupportedGADShapes + * @throws IllegalStateException + */ + void setLCSSupportedGADShapes(long lcsSupportedGADShapes) throws IllegalStateException; + + /** + * Returns true if the LCS-Service-Type-ID AVP is present in the message. + * + * @return + */ + boolean hasLCSServiceTypeID(); + + /** + * Returns the value of the LCS-Service-Type-ID AVP, of type Unsigned32 . + * + * @return + */ + long getLCSServiceTypeID(); + + /** + * Sets the value of the LCS-Service-Type-ID AVP, of type Unsigned32 . + * + * @param lcsServiceTypeID + * @throws IllegalStateException + */ + void setLCSServiceTypeID(long lcsServiceTypeID) throws IllegalStateException; + + /** + * Returns true if the LCS-Codeword AVP is present in the message. + * + * @return + */ + boolean hasLCSCodeword(); + + /** + * Returns the value of the LCS-Codeword AVP, of type UTF8String . + * + * @return + */ + String getLCSCodeword(); + + /** + * Sets the value of the LCS-Codeword AVP, of type UTF8String . + * + * @param lcsCodeword + * @throws IllegalStateException + */ + void setLCSCodeword(String lcsCodeword) throws IllegalStateException; + + /** + * Returns true if the LCS-Privacy-Check-Non-Session AVP is present in the message. + * + * @return + */ + boolean hasLCSPrivacyCheckNonSession(); + + /** + * Returns the value of the LCS-Privacy-Check-Non-Session AVP, of type Grouped . + * + * @return + */ + LCSPrivacyCheckNonSessionAvp getLCSPrivacyCheckNonSession(); + + /** + * Sets the value of the LCS-Privacy-Check-Non-Session AVP, of type Grouped . + * + * @param lcsPrivacyCheckNonSession + * @throws IllegalStateException + */ + void setLCSPrivacyCheckNonSession(LCSPrivacyCheckNonSessionAvp lcsPrivacyCheckNonSession) throws IllegalStateException; + + /** + * Returns true if the LCS-Privacy-Check-Session AVP is present in the message. + * + * @return + */ + boolean hasLCSPrivacyCheckSession(); + + /** + * Returns the value of the LCS-Privacy-Check-Session AVP, of type Grouped . + * + * @return + */ + LCSPrivacyCheckSessionAvp getLCSPrivacyCheckSession(); + + /** + * Sets the value of the LCS-Privacy-Check-Session AVP, of type Grouped . + * + * @param lcsPrivacyCheckSession + * @throws IllegalStateException + */ + void setLCSPrivacyCheckSession(LCSPrivacyCheckSessionAvp lcsPrivacyCheckSession) throws IllegalStateException; + + /** + * Returns true if the Service-Selection AVP is present in the message. + * + * @return + */ + boolean hasServiceSelection(); + + /** + * Returns the value of the Service-Selection AVP, of type UTF8String. + * + * @return + */ + String getServiceSelection(); + + /** + * Sets the value of the Service-Selection AVP, of type UTF8String. + * + * @param serviceSelection + * @throws IllegalStateException + */ + void setServiceSelection(String serviceSelection) throws IllegalStateException; + + /** + * Returns true if the Deferred-Location-Type AVP is present in the message. + * + * @return + */ + boolean hasDeferredLocationType(); + + /** + * Returns the value of the Deferred-Location-Type AVP, of type Unsigned32. + * + * @return + */ + long getDeferredLocationType(); + + /** + * Sets the value of the Deferred-Location-Type AVP, of type Unsigned32. + * + * @param deferredLocationType + * @throws IllegalStateException + */ + void setDeferredLocationType(long deferredLocationType) throws IllegalStateException; + + /** + * Returns true if the PLR-Flags AVP is present in the message. + * + * @return + */ + boolean hasPLRFlags(); + + /** + * Returns the value of the PLR-Flags AVP, of type Unsigned32. + * + * @return + */ + long getPLRFlags(); + + /** + * Sets the value of the PLR-Flags AVP, of type Unsigned32. + * + * @param plrFlags + * @throws IllegalStateException + */ + void setPLRFlags(long plrFlags) throws IllegalStateException; + + /** + * Returns the value of the Supported-Features AVP, of type Grouped. + * + * @return + */ + public SupportedFeaturesAvp[] getSupportedFeatureses(); + + /** + * Set a single instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatures + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures); + + /** + * Set multiple instance value of the Supported-Features AVP, of type Grouped. + * + * @param supportedFeatureses + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AccuracyFulfilmentIndicator.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AccuracyFulfilmentIndicator.java new file mode 100644 index 000000000..587e8d8b8 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AccuracyFulfilmentIndicator.java @@ -0,0 +1,84 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Accuracy-Fulfilment-Indicator enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + *

+ *

+ * 7.4.15	Accuracy-Fulfilment-Indicator
+ * 	The Accuracy-Fulfilment-Indicator AVP is of type Enumerated. The following values are defined:
+ * 		REQUESTED_ACCURACY_FULFILLED (0)
+ * 		REQUESTED_ACCURACY_NOT_FULFILLED (1)
+ * 
+ * + * @author Fernando Mendioroz + */ +public class AccuracyFulfilmentIndicator implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _REQUESTED_ACCURACY_FULFILLED = 0; + public static final int _REQUESTED_ACCURACY_NOT_FULFILLED = 1; + + public static final AccuracyFulfilmentIndicator REQUESTED_ACCURACY_FULFILLED = new AccuracyFulfilmentIndicator(_REQUESTED_ACCURACY_FULFILLED); + public static final AccuracyFulfilmentIndicator REQUESTED_ACCURACY_NOT_FULFILLED = new AccuracyFulfilmentIndicator(_REQUESTED_ACCURACY_NOT_FULFILLED); + + private int value = -1; + + private AccuracyFulfilmentIndicator(int value) { + this.value = value; + } + + public static AccuracyFulfilmentIndicator fromInt(int type) { + switch (type) { + case _REQUESTED_ACCURACY_FULFILLED: + return REQUESTED_ACCURACY_FULFILLED; + case _REQUESTED_ACCURACY_NOT_FULFILLED: + return REQUESTED_ACCURACY_NOT_FULFILLED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _REQUESTED_ACCURACY_FULFILLED: + return "REQUESTED_ACCURACY_FULFILLED"; + case _REQUESTED_ACCURACY_NOT_FULFILLED: + return "REQUESTED_ACCURACY_NOT_FULFILLED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AdditionalAreaAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AdditionalAreaAvp.java new file mode 100644 index 000000000..99a5d716f --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AdditionalAreaAvp.java @@ -0,0 +1,45 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Area AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.70	Area
+ * Additional-Area AVP is of type Grouped.
+ * 	AVP format:
+ * 						Additional-Area ::= 
+ *                                { Area-Type }
+ *                                { Area-Identification }
+ * 										            *[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ + +public interface AdditionalAreaAvp extends AreaAvp { + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaAvp.java new file mode 100644 index 000000000..38d5988d9 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaAvp.java @@ -0,0 +1,80 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Area AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.40	Area
+ * The Area AVP is of type Grouped.
+ * 	AVP format:
+ * 						Area ::= 
+ *                     { Area-Type }
+ *                     { Area-Identification }
+ * 										*[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface AreaAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.41 Area-Type + The Area-Type AVP is of type Unsigned32. The following values are defined: + "Country Code" 0 + "PLMN ID" 1 + "Location Area ID" 2 + "Routing Area ID" 3 + "Cell Global ID" 4 + "UTRAN Cell ID" 5 + "Tracking Area ID" 6 + "E-UTRAN Cell Global ID" 7 + */ + boolean hasAreaType(); + + long getAreaType(); + + void setAreaType(long areaType); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.42 Area-Identification + The Area-Identification AVP is of type OctetString and shall contain the identification of the area applicable for the change + of area event based deferred location reporting. For Area-Type 0 to 5, octets are coded as described in 3GPP TS 29.002 [24]. + For Area-Type 6, octets are coded as defined for the Tracking Area Identity area identification in 3GPP TS 24.080 [24]. + For Area-Type 7, octets are coded as defined for the ECGI area identification in 3GPP TS 24.080 [24]. + For a deferred EPC-MT-LR for the area event, only Area-Type 6 and 7 are applicable. + */ + boolean hasAreaIdentification(); + + byte[] getAreaIdentification(); + + void setAreaIdentification(byte[] areaIdentification); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaDefinitionAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaDefinitionAvp.java new file mode 100644 index 000000000..6aded9236 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaDefinitionAvp.java @@ -0,0 +1,78 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Area-Definition AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.39	Area
+ * The Area-Definition AVP is of type Grouped.
+ * AVP format:
+ * 						Area-Definition ::= 
+ * 						                    1*10{ Area }
+ * 					                      *240[ Additional-Area ]
+ * 						                    [ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface AreaDefinitionAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.40 Area + The Area AVP is of type Grouped. + AVP format: + Area ::= + { Area-Type } + { Area-Identification } + *[ AVP ] + */ + boolean hasArea(); + + AreaAvp getArea(); + + void setArea(AreaAvp area); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.70 Additional-Area + The Additional-Area AVP is of type Grouped. + AVP format: + Additional-Area ::= + { Area-Type } + { Area-Identification } + *[ AVP ] + */ + boolean hasAdditionalArea(); + + AdditionalAreaAvp getAdditionalArea(); + + void setAdditionalArea(AdditionalAreaAvp additionalArea); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaEventInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaEventInfoAvp.java new file mode 100644 index 000000000..a2f736cb3 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/AreaEventInfoAvp.java @@ -0,0 +1,158 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Area-Event-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.38	Area-Event-Info
+ * 	The Area-Event-Info AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 		Area-Event-Info ::= 
+ *                      { Area-Definition }
+ * 											[ Occurrence-Info ]
+ * 											[ Interval-Time ]
+ * 										  [ Maximum-Interval ]
+ * 										  [ Sampling-Interval ]
+ * 										  [ Reporting-Duration ]
+ * 										  [ Reporting-Location-Requirements ]
+ * 										 *[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface AreaEventInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.39 Area-Definition + The Area-Definition AVP is of type Grouped. + AVP format: + Area-Definition ::= + 1*10{ Area } + 240[ Additional-Area ] + *[ AVP ] + */ + boolean hasAreaDefinition(); + + AreaDefinitionAvp getAreaDefinition(); + + void setAreaDefinition(AreaDefinitionAvp areaDefinition); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.43 Occurrence-Info + The Occurrence-Info AVP is of type Enumerated. The following values are defined: + ONE_TIME_EVENT (0) + MULTIPLE_TIME_EVENT (1) + */ + boolean hasOccurrenceInfo(); + + OccurrenceInfo getOccurrenceInfo(); + + void setOccurrenceInfo(OccurrenceInfo occurrenceInfo); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.44 Interval-Time + The Interval-Time AVP is of type Unsigned32 and it contains minimum time interval between area reports, in seconds. + */ + boolean hasIntervalTime(); + + long getIntervalTime(); + + void setIntervalTime(long intervalTime); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.65 Maximum-Interval + The Maximum-Interval AVP is of type Unsigned32 and it contains the maximum time interval between consecutive event reports, in seconds. + The minimum value shall be 1 second and the maximum value 86400 seconds. + The Maximum-Interval AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasMaximumInterval(); + + long getMaximumInterval(); + + void setMaximumInterval(long maximumInterval); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.67 Sampling-Interval + The Sampling-Interval AVP is of type Unsigned32 and it contains the maximum time interval between consecutive evaluations by a UE of an area event + or motion event, in seconds. + The minimum value shall be 1 second and the maximum value 3600 seconds. + The Sampling-Interval AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasSamplingInterval(); + + long getSamplingInterval(); + + void setSamplingInterval(long samplingInterval); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.68 Reporting-Duration + The Reporting-Duration AVP is of type Unsigned32 and it contains the maximum duration of event reporting, in seconds. + Its minimum value shall be 1 and maximum value shall be 8640000. + The Reporting-Duration AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasReportDuration(); + + long getReportDuration(); + + void setReportDuration(long reportDuration); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.69 Reporting-Location-Requirements + The Reporting-Location-Requirements AVP is of type Unsigned32 and it shall contain a bit string indicating requirements + on location provision for a deferred EPC-MT-LR. When a bit is set to one, the corresponding requirement is present. + When a bit is set to zero or when the AVP is omitted, the corresponding requirement is not present. + For support of backward compatibility, a receiver shall ignore any bits that are set to one but are not supported + The meaning of the bits shall be as defined in table 7.4.69/1: + + Table 7.4.69/1: Reporting-Location-Requirements + Bit Requirement Description + 0 Location-Estimate A location estimate is required for each area event, motion event report or expiration of the + maximum time interval between event reports. + 1-31 None Spare + */ + boolean hasReportingLocationRequirements(); + + long getReportingLocationRequirements(); + + void setReportingLocationRequirements(long reportingLocationRequirements); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvp.java new file mode 100644 index 000000000..895dca1e0 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvp.java @@ -0,0 +1,110 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Deferred-MT-LR-Data AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V13.0.0) specification. + *

+ *

+ * 7.4.54	Deferred-MT-LR-Data
+ * The Deferred-MT-LR-Data AVP is of type Grouped.
+ * AVP format:
+ * 						Deferred-MT-LR-Data ::= 
+ *                                   { Deferred-Location-Type }
+ * 																	 [ Termination-Cause ]
+ * 																	 [ Serving-Node ]
+ * 																	*[ AVP ]
+ *
+ * Serving-Node may be included only when the Termination-Cause is present indicating MT_LR_RESTART.
+ * The Serving-Node refers to the node where the UE has moved to and shall be included, if available.
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface DeferredMTLRDataAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.36 Deferred-Location-Type + The Deferred-Location-Type AVP is of type Unsigned32 and it shall contain a bit mask. Each bit indicates a type of event, + until when the location estimation is deferred. For details, please refer to 3GPP TS 23.271 [3] clause 4.4.2. + The meaning of the bits shall be as defined in table 7.4.36/1: + + Table 7.4.36/1: Deferred-Location-Type + Bit Event Type Description + 0 UE-Available Any event in which the SGSN has established a contact with the UE. + 1 Entering-Into-Area An event where the UE enters a pre-defined geographical area. + 2 Leaving-From-Area An event where the UE leaves a pre-defined geographical area. + 3 Being-Inside-Area An event where the UE is currently within the pre-defined geographical area. + For this event, the value of Occurrence-Info AVP is always treated as set to “ONE_TIME_EVENT”. + 4 Periodic-LDR An event where a defined periodic timer expires in the UE and activates a location report or a location request. + */ + boolean hasDeferredLocationType(); + + long getDeferredLocationType(); + + void setDeferredLocationType(long deferredLocationType); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.55 Termination-Cause + The Termination-Cause AVP is of type Unsigned32. The following values are defined: + "Normal" 0 + "Error Undefined" 1 + "Internal Timeout" 2 + "Congestion" 3 + "MT_LR_Restart" 4 + "Privacy Violation" 5 + "Shape of Location Estimate Not Supported" 6 + "Subscriber Termination" 7 + "UE Termination" 8 + "Network Termination" 9 + "MT_LR_Restart" cause code shall be used to trigger the GMLC to restart the location procedure, + either because the sending node knows that the terminal has moved under coverage of another SGSN or MME, + or because the subscriber has been deregistered due to a Cancel Location received from HSS. + Any unrecognized value of Termination-Cause shall be treated the same as value 1 ("Error Undefined"). + */ + boolean hasTerminationCause(); + + long getTerminationCause(); + + void setTerminationCause(long terminationCause); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.28 Serving-Node + The Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the targeted user. + + */ + boolean hasServingNode(); + + ServingNodeAvp getServingNode(); + + void setServingNode(ServingNodeAvp servingNode); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvp.java new file mode 100644 index 000000000..de9bfab58 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvp.java @@ -0,0 +1,85 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Delayed-Location-Reporting-Data AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.60	Delayed-Location-Reporting-Data
+ * The Delayed-Location-Reporting-Data AVP is of type Grouped.
+ * AVP format:
+ * 						Delayed-Location-Reporting-Data ::= 
+ * 																						[ Termination-Cause ]
+ * 																						[ Serving-Node ]
+ * 																						*[ AVP ]
+ * Serving-Node may be included only when the Termination-Cause is present indicating MT_LR_RESTART.
+ * The Serving-Node refers to the node where the UE has moved to and shall be included, if available.
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface DelayedLocationReportingDataAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.55 Termination-Cause + The Termination-Cause AVP is of type Unsigned32. The following values are defined: + "Normal" 0 + "Error Undefined" 1 + "Internal Timeout" 2 + "Congestion" 3 + "MT_LR_Restart" 4 + "Privacy Violation" 5 + "Shape of Location Estimate Not Supported" 6 + "Subscriber Termination" 7 + "UE Termination" 8 + "Network Termination" 9 + "MT_LR_Restart" cause code shall be used to trigger the GMLC to restart the location procedure, + either because the sending node knows that the terminal has moved under coverage of another SGSN or MME, + or because the subscriber has been deregistered due to a Cancel Location received from HSS. + Any unrecognized value of Termination-Cause shall be treated the same as value 1 ("Error Undefined"). + */ + boolean hasTerminationCause(); + + long getTerminationCause(); + + void setTerminationCause(long terminationCause); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.28 Serving-Node + The Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the targeted user. + + */ + boolean hasServingNode(); + + ServingNodeAvp getServingNode(); + + void setServingNode(ServingNodeAvp servingNode); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ELPAVPCodes.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ELPAVPCodes.java new file mode 100644 index 000000000..c13fc10e6 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ELPAVPCodes.java @@ -0,0 +1,1143 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +/** + * @author Fernando Mendioroz + */ +public class ELPAVPCodes { + + public ELPAVPCodes() { + } + + public static final long SLg_VENDOR_ID = 10415L; + public static final long SLg_AUTH_APP_ID = 16777255L; + + /** + *
+   * Name......: SLg-Location-Type
+   * Code......: 2500
+   * Section...: 7.4.2
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int SLg_LOCATION_TYPE = 2500; + + /** + *
+   * Name......: LCS-EPS-Client-Name
+   * Code......: 2501
+   * Section...: 7.4.3
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_EPS_CLIENT_NAME = 2501; + + /** + *
+   * Name......: LCS-Requestor-Name
+   * Code......: 2502
+   * Section...: 7.4.4
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_REQUESTOR_NAME = 2502; + + /** + *
+   * Name......: LCS-Priority
+   * Code......: 2503
+   * Section...: 7.4.5
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_PRIORITY = 2503; + + /** + *
+   * Name......: LCS-QoS
+   * Code......: 2504
+   * Section...: 7.4.6
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_QoS = 2504; + + /** + *
+   * Name......: Horizontal-Accuracy
+   * Code......: 2505
+   * Section...: 7.4.7
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int HORIZONTAL_ACCURACY = 2505; + + /** + *
+   * Name......: Vertical-Accuracy
+   * Code......: 2506
+   * Section...: 7.4.8
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int VERTICAL_ACCURACY = 2506; + + /** + *
+   * Name......: Vertical-Requested
+   * Code......: 2507
+   * Section...: 7.4.9
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int VERTICAL_REQUESTED = 2507; + + /** + *
+   * Name......: Velocity-Requested
+   * Code......: 2508
+   * Section...: 7.4.10
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int VELOCITY_REQUESTED = 2508; + + /** + *
+   * Name......: Response-Time
+   * Code......: 2509
+   * Section...: 7.4.11
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int RESPONSE_TIME = 2509; + + /** + *
+   * Name......: Supported-GAD-Shapes
+   * Code......: 2510
+   * Section...: 7.4.12
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int SUPPORTED_GAD_SHAPES = 2510; + + /** + *
+   * Name......: LCS-Codeword
+   * Code......: 2511
+   * Section...: 7.4.13
+   * Type......: UTF8String
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_CODEWORD = 2511; + + /** + *
+   * Name......: LCS-Privacy-Check
+   * Code......: 2512
+   * Section...: 7.4.14
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_PRIVACY_CHECK = 2512; + + /** + *
+   * Name......: Accuracy-Fulfilment-Indicator
+   * Code......: 2513
+   * Section...: 7.4.15
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int ACCURACY_FULFILMENT_INDICATOR = 2512; + + /** + *
+   * Name......: Age-Of-Location-Estimate
+   * Code......: 2514
+   * Section...: 7.4.16
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int AGE_OF_LOCATION_ESTIMATE = 2514; + + /** + *
+   * Name......: Velocity-Estimate
+   * Code......: 2515
+   * Section...: 7.4.17
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int VELOCITY_ESTIMATE = 2515; + + /** + *
+   * Name......: EUTRAN-Positioning-Data
+   * Code......: 2516
+   * Section...: 7.4.18
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int EUTRAN_POSITIONING_DATA = 2516; + + /** + *
+   * Name......: ECGI
+   * Code......: 2517
+   * Section...: 7.4.19
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int ECGI = 2517; + + /** + *
+   * Name......: Location-Event
+   * Code......: 2518
+   * Section...: 7.4.20
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LOCATION_EVENT = 2518; + + /** + *
+   * Name......: Pseudonym-Indicator
+   * Code......: 2519
+   * Section...: 7.4.21
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int PSEUDONYM_INDICATOR = 2519; + + /** + *
+   * Name......: LCS-Service-Type-ID
+   * Code......: 2520
+   * Section...: 7.4.22
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_SERVICE_TYPE_ID = 2520; + + /** + *
+   * Name......: LCS-Privacy-Check-Non-Session
+   * Code......: 2521
+   * Section...: 7.4.23
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_PRIVACY_CHECK_NON_SESSION = 2521; + + /** + *
+   * Name......: LCS-Privacy-Check-Session
+   * Code......: 2522
+   * Section...: 7.4.24
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_PRIVACY_CHECK_SESSION = 2522; + + /** + *
+   * Name......: LCS-QoS-Class
+   * Code......: 2523
+   * Section...: 7.4.27
+   * Type......: Enumerated
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_QoS_CLASS = 2523; + + /** + *
+   * Name......: GERAN-Positioning-Info
+   * Code......: 2524
+   * Section...: 7.4.29
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int GERAN_POSITIONING_INFO = 2524; + + /** + *
+   * Name......: GERAN-Positioning-Data
+   * Code......: 2525
+   * Section...: 7.4.30
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int GERAN_POSITIONING_DATA = 2525; + + /** + *
+   * Name......: GERAN-GANSS-Positioning-Data
+   * Code......: 2526
+   * Section...: 7.4.31
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int GERAN_GANSS_POSITIONING_DATA = 2526; + + /** + *
+   * Name......: UTRAN-Positioning-Info
+   * Code......: 2527
+   * Section...: 7.4.32
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int UTRAN_POSITIONING_INFO = 2527; + + /** + *
+   * Name......: UTRAN-Positioning-Data
+   * Code......: 2528
+   * Section...: 7.4.33
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int UTRAN_POSITIONING_DATA = 2528; + + /** + *
+   * Name......: UTRAN-GANSS-Positioning-Data
+   * Code......: 2529
+   * Section...: 7.4.34
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int UTRAN_GANSS_POSITIONING_DATA = 2529; + + /** + *
+   * Name......: LRR-Flags
+   * Code......: 2530
+   * Section...: 7.4.35
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int LRR_FLAGS = 2530; + + /** + *
+   * Name......: LCS-Reference-Number
+   * Code......: 2531
+   * Section...: 7.4.37
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_REFERENCE_NUMBER = 2531; + + /** + *
+   * Name......: Deferred-Location-Type
+   * Code......: 2532
+   * Section...: 7.4.36
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int DEFERRED_LOCATION_TYPE = 2532; + + /** + *
+   * Name......: Area-Event-Info
+   * Code......: 2533
+   * Section...: 7.4.38
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int AREA_EVENT_INFO = 2533; + + /** + *
+   * Name......: Area-Definition
+   * Code......: 2534
+   * Section...: 7.4.39
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int AREA_DEFINITION = 2534; + + /** + *
+   * Name......: Area
+   * Code......: 2535
+   * Section...: 7.4.40
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int AREA = 2535; + + /** + *
+   * Name......: Area-Type
+   * Code......: 2536
+   * Section...: 7.4.41
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int AREA_TYPE = 2536; + + /** + *
+   * Name......: Area-Identification
+   * Code......: 2537
+   * Section...: 7.4.42
+   * Type......: OctetString (inconsistently defined initially spec, using section 7.4.42)
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int AREA_IDENTIFICATION = 2537; + + /** + *
+   * Name......: Occurrence-Info
+   * Code......: 2538
+   * Section...: 7.4.43
+   * Type......: Enumerated
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int OCCURRENCE_INFO = 2538; + + /** + *
+   * Name......: Interval-Time
+   * Code......: 2539
+   * Section...: 7.4.44
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int INTERVAL_TIME = 2539; + + /** + *
+   * Name......: Periodic-LDR-Information
+   * Code......: 2540
+   * Section...: 7.4.45
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PERIODIC_LDR_INFORMATION = 2540; + + /** + *
+   * Name......: Reporting-Amount
+   * Code......: 2541
+   * Section...: 7.4.46
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int REPORTING_AMOUNT = 2541; + + /** + *
+   * Name......: Reporting-Interval
+   * Code......: 2542
+   * Section...: 7.4.47
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int REPORTING_INTERVAL = 2542; + + /** + *
+   * Name......: Reporting-PLMN-List
+   * Code......: 2543
+   * Section...: 7.4.48
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int REPORTING_PLMN_LIST = 2543; + + /** + *
+   * Name......: PLMN-ID-List
+   * Code......: 2544
+   * Section...: 7.4.49
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PLMN_ID_LIST = 2544; + + /** + *
+   * Name......: PLR-Flags
+   * Code......: 2545
+   * Section...: 7.4.52
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PLR_FLAGS = 2545; + + /** + *
+   * Name......: PLA-Flags
+   * Code......: 2546
+   * Section...: 7.4.53
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PLA_FLAGS = 2546; + + /** + *
+   * Name......: Deferred-MT-LR-Data
+   * Code......: 2547
+   * Section...: 7.4.54
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int DEFERRED_MT_LR_DATA = 2547; + + /** + *
+   * Name......: Termination-Cause
+   * Code......: 2548
+   * Section...: 7.4.55
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int TERMINATION_CAUSE = 2548; + + /** + *
+   * Name......: LRA-Flags
+   * Code......: 2549
+   * Section...: 7.4.56
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int LRA_FLAGS = 2549; + + /** + *
+   * Name......: Periodic-Location-Support-Indicator
+   * Code......: 2550
+   * Section...: 7.4.50
+   * Type......: Enumerated
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PERIODIC_LOCATION_SUPPORT_INDICATOR = 2550; + + /** + *
+   * Name......: Prioritized-List-Indicator
+   * Code......: 2551
+   * Section...: 7.4.51
+   * Type......: Enumerated
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int PRIORITIZED_LIST_INDICATOR = 2551; + + /** + *
+   * Name......: ESMLC-Cell-Info
+   * Code......: 2552
+   * Section...: 7.4.57
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int ESMLC_CELL_INFO = 2552; + + /** + *
+   * Name......: Cell-Portion-ID
+   * Code......: 2553
+   * Section...: 7.4.58
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int CELL_PORTION_ID = 2553; + + /** + *
+   * Name......: 1xRTT-RCID
+   * Code......: 2554
+   * Section...: 7.4.59
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int ONExRTT_RCID = 2554; + + /** + * 3GPP TS 29.172 v13.1.0 + *
+   * Name......: Delayed-Location-Reporting-Data
+   * Code......: 2555
+   * Section...: 7.4.60
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int DELAYED_LOCATION_REPORTING_DATA = 2555; + + /** + *
+   * Name......: Civic-Address
+   * Code......: 2556
+   * Section...: 7.4.61
+   * Type......: UTF8String
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int CIVIC_ADDRESS = 2556; + + /** + *
+   * Name......: Barometric-Pressure
+   * Code......: 2557
+   * Section...: 7.4.62
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int BAROMETRIC_PRESSURE = 2557; + + /** + *
+   * Name......: UTRAN-Additional-Positioning-Data
+   * Code......: 2558
+   * Section...: 7.4.63
+   * Type......: OctetString
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int UTRAN_ADDITIONAL_POSITIONING_DATA = 2558; + + /** + *
+   * Name......: Motion-Event-Info
+   * Code......: 2559
+   * Section...: 7.4.64
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int MOTION_EVENT_INFO = 2559; + + /** + *
+   * Name......: Linear-Distance
+   * Code......: 2560
+   * Section...: 7.4.65
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int LINEAR_DISTANCE = 2560; + + /** + *
+   * Name......: Maximum-Interval
+   * Code......: 2561
+   * Section...: 7.4.66
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int MAXIMUM_INTERVAL = 2561; + + /** + *
+   * Name......: Sampling-Interval
+   * Code......: 2562
+   * Section...: 7.4.67
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int SAMPLING_INTERVAL = 2562; + + /** + *
+   * Name......: Reporting-Duration
+   * Code......: 2563
+   * Section...: 7.4.68
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int REPORTING_DURATION = 2563; + + /** + *
+   * Name......: Reporting-Location-Requirements
+   * Code......: 2564
+   * Section...: 7.4.69
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int REPORTING_LOCATION_REQUIREMENTS = 2564; + + /** + *
+   * Name......: Additional-Area
+   * Code......: 2565
+   * Section...: 7.4.70
+   * Type......: Grouped
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int ADDITIONAL_AREA = 2565; + + + // SLh re-used Diameter AVPs + // IETF RFC 3588 + public static final int USER_NAME = 1; // IMSI + // 3GPP TS 29.329 + public static final int MSISDN = 701; + // 3GPP TS 29.272 + public static final int IMEI = 1402; + public static final int CELL_GLOBAL_IDENTITY = 1604; + public static final int SERVICE_AREA_IDENTITY = 1607; + public static final int VISITED_PLMN_ID = 1407; + public static final int SERVICE_SELECTION = 493; + public static final int SGSN_NUMBER = 1489; + // 3GPP TS 29.229 + public static final int SUPPORTED_FEATURES = 628; + public static final int FEATURE_LIST_ID = 629; + public static final int FEATURE_LIST = 630; + public static final int TGPP_AAA_SERVER_NAME = 318; + // 3GPP TS 32.299 + public static final int LCS_FORMAT_INDICATOR = 1237; + public static final int LCS_NAME_STRING = 1238; + public static final int LCS_CLIENT_TYPE = 1241; + public static final int LCS_REQUESTOR_ID_STRING = 1240; + public static final int LOCATION_ESTIMATE = 1242; + // 3GPP TS 29.173 + public static final int GMLC_ADDRESS = 2405; + public static final int SERVING_NODE = 2401; + /** + *
+   * Name......: MME-Name
+   * Code......: 2403
+   * Section...: 6.4.4
+   * Type......: DiameterIdentity
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int MME_NAME = 2402; + + /** + *
+   * Name......: MSC-Number
+   * Code......: 2403
+   * Section...: 6.4.5
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int MSC_NUMBER = 2403; + + /** + *
+   * Name......: LCS-Capabilities-Sets
+   * Code......: 2404
+   * Section...: 6.4.6
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_CAPABILITIES_SETS = 2404; + + /** + *
+   * Name......: MME-Realm
+   * Code......: 2408
+   * Section...: 6.4.12
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int MME_REALM = 2408; + + /** + *
+   * Name......: SGSN-Name
+   * Code......: 2409
+   * Section...: 6.4.13
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int SGSN_NAME = 2409; + + /** + *
+   * Name......: SGSN-Realm
+   * Code......: 2410
+   * Section...: 6.4.14
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int SGSN_REALM = 2410; + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvp.java new file mode 100644 index 000000000..ffab9e474 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvp.java @@ -0,0 +1,72 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the ESMLC-Cell-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.57		ESMLC-Cell-Info
+ * 	The ESMLC-Cell-Info AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 		ESMLC-Cell-Info ::= 
+ * 												 [ ECGI ]
+ * 												 [ Cell-Portion-ID ]
+ * 												*[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface ESMLCCellInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.19 ECGI + The ECGI AVP is of type OctetString. It indicates the E-UTRAN Cell Global Identifier. + is coded according to clause 8.21.5, in 3GPP TS 29.274 [8]. + */ + boolean hasECGI(); + + byte[] getECGI(); + + void setECGI(byte[] ecgi); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.58 Cell-Portion-ID + The Cell-Portion-ID AVP is of type Unsigned32. + It indicates the current Cell Portion location of the target UE as provided by the E-SMLC. + It shall contain the value of the "Cell Portion ID" Information Element as defined in 3GPP TS 29.171 [7]. + */ + boolean hasCellPortionID(); + + long getCellPortionID(); + + void setCellPortionID(long cellPortionID); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvp.java new file mode 100644 index 000000000..25e1ebb1f --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvp.java @@ -0,0 +1,72 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the GERAN-Positioning-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.29	GERAN-Positioning-Info
+ * 	The GERAN-Positioning-Info AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 	GERAN-Positioning-Info ::= 
+ * 													  [ GERAN-Positioning-Data ]
+ * 													  [ GERAN-GANSS-Positioning-Data ]
+ * 													 *[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface GERANPositioningInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.30 GERAN-Positioning-Data + The GERAN-Positioning-Data AVP is of type OctetString. + It shall contain the encoded content of the "Positioning Data" Information Element as defined in 3GPP TS 49.031 [20]. + */ + boolean hasGERANPositioningData(); + + byte[] getGERANPositioningData(); + + void setGERANPositioningData(byte[] geranPositioningData); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.31 GERAN-GANSS-Positioning-Data + The GERAN-GANSS-Positioning-Data AVP is of type OctetString. + It shall contain the encoded content of the "GANSS Positioning Data" Information Element as defined in 3GPP TS 49.031 [20]. + + */ + boolean hasGERANGANSSPositioningData(); + + byte[] getGERANGANSSPositioningData(); + + void setGERANGANSSPositioningData(byte[] geranGANSSPositioningData); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSClientType.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSClientType.java new file mode 100644 index 000000000..598ca940f --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSClientType.java @@ -0,0 +1,99 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the LCS-Format-Indicator enumerated type. + * From the Diameter Charging Application (3GPP TS 32.299 V14.1.0) specification, + * referenced in Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification, + *

+ *

+ * 7.2.86	LCS-Client-Type AVP
+ *  The LCS-Client-Type AVP (AVP code 1241) is of type Enumerated and contains the type of services requested by the LCS Client. It can be one of the following values:
+ *  0	EMERGENCY_SERVICES
+ *  1	VALUE_ADDED_SERVICES
+ *  2	PLMN_OPERATOR_SERVICES
+ *  3	LAWFUL_INTERCEPT_SERVICES
+ *
+ * 
+ * + * @author Fernando Mendioroz + */ +public class LCSClientType implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _EMERGENCY_SERVICES = 0; + public static final int _VALUE_ADDED_SERVICES = 1; + public static final int _PLMN_OPERATOR_SERVICES = 2; + public static final int _LAWFUL_INTERCEPT_SERVICES = 3; + + public static final LCSClientType EMERGENCY_SERVICES = new LCSClientType(_EMERGENCY_SERVICES); + public static final LCSClientType VALUE_ADDED_SERVICES = new LCSClientType(_VALUE_ADDED_SERVICES); + public static final LCSClientType PLMN_OPERATOR_SERVICES = new LCSClientType(_PLMN_OPERATOR_SERVICES); + public static final LCSClientType LAWFUL_INTERCEPT_SERVICES = new LCSClientType(_LAWFUL_INTERCEPT_SERVICES); + + private int value = -1; + + private LCSClientType(int value) { + this.value = value; + } + + public static LCSClientType fromInt(int type) { + switch (type) { + case _EMERGENCY_SERVICES: + return EMERGENCY_SERVICES; + case _VALUE_ADDED_SERVICES: + return VALUE_ADDED_SERVICES; + case _PLMN_OPERATOR_SERVICES: + return PLMN_OPERATOR_SERVICES; + case _LAWFUL_INTERCEPT_SERVICES: + return LAWFUL_INTERCEPT_SERVICES; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _EMERGENCY_SERVICES: + return "EMERGENCY_SERVICES"; + case _VALUE_ADDED_SERVICES: + return "VALUE_ADDED_SERVICES"; + case _PLMN_OPERATOR_SERVICES: + return "PLMN_OPERATOR_SERVICES"; + case _LAWFUL_INTERCEPT_SERVICES: + return "LAWFUL_INTERCEPT_SERVICES"; + default: + return ""; + } + } +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvp.java new file mode 100644 index 000000000..ae3095b91 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvp.java @@ -0,0 +1,77 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the LCS-EPS-Client-Name AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.3	LCS-EPS-Client-Name
+ *  The LCS-EPS-Client-Name AVP is of type Grouped.
+ *  AVP format:
+ *            LCS-EPS-Client-Name ::= 
+ *                                    [ LCS-Name-String ]
+ *                                    [ LCS-Format-Indicator ]
+ *
+ *  The details of the LCS-Name-String AVP and the LCS-Format-Indicator AVP are described in 3GPP TS 32.299 [10].
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LCSEPSClientNameAvp extends GroupedAvp { + + /* + From 3GPP TS 32.299 (v14.1.0) + + 7.2.90 LCS-Name-String AVP + The LCS-Name-String AVP (AVP code 1238) is of type UTF8String and contains the LCS Client name. + + */ + boolean hasLCSNameString(); + + String getLCSNameString(); + + void setLCSNameString(String lcsNameString); + + /* + From 3GPP TS 32.299 (v14.1.0) + 7.2.88 LCS-Format-Indicator AVP + + The LCS-Format-Indicator AVP (AVP code 1237) is of type Enumerated and contains the format of the LCS Client name. + It can be one of the following values: + + 0 LOGICAL_NAME + 1 EMAIL_ADDRESS + 2 MSISDN + 3 URL + 4 SIP_URL + */ + boolean hasLCSFormatIndicator(); + + LCSFormatIndicator getLCSFormatIndicator(); + + void setLCSFormatIndicator(LCSFormatIndicator lcsFormatIndicator); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSFormatIndicator.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSFormatIndicator.java new file mode 100644 index 000000000..432b8d2c6 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSFormatIndicator.java @@ -0,0 +1,110 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the LCS-Format-Indicator enumerated type. + * From the Diameter Charging Application (3GPP TS 32.299 V14.1.0) specification, + * referenced in Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification, + * as element of LCS-EPS-Client-Name grouped AVP (section 7.4.3). + *

+ *

+ * 7.2.88	LCS-Format-Indicator AVP
+ *
+ * The LCS-Format-Indicator AVP (AVP code 1237) is of type Enumerated and contains the format of the LCS Client name.
+ * It can be one of the following values:
+ *
+ *  0	LOGICAL_NAME
+ *  1	EMAIL_ADDRESS
+ *  2	MSISDN
+ *  3	URL
+ *  4	SIP_URL
+ *
+ * 
+ * + * @author Fernando Mendioroz + */ +public class LCSFormatIndicator implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _LOGICAL_NAME = 0; + public static final int _EMAIL_ADDRESS = 1; + public static final int _MSISDN = 2; + public static final int _URL = 3; + public static final int _SIP_URL = 4; + + public static final LCSFormatIndicator LOGICAL_NAME = new LCSFormatIndicator(_LOGICAL_NAME); + public static final LCSFormatIndicator EMAIL_ADDRESS = new LCSFormatIndicator(_EMAIL_ADDRESS); + public static final LCSFormatIndicator MSISDN = new LCSFormatIndicator(_MSISDN); + public static final LCSFormatIndicator URL = new LCSFormatIndicator(_URL); + public static final LCSFormatIndicator SIP_URL = new LCSFormatIndicator(_SIP_URL); + + private int value = -1; + + private LCSFormatIndicator(int value) { + this.value = value; + } + + public static LCSFormatIndicator fromInt(int type) { + switch (type) { + case _LOGICAL_NAME: + return LOGICAL_NAME; + case _EMAIL_ADDRESS: + return EMAIL_ADDRESS; + case _MSISDN: + return MSISDN; + case _URL: + return URL; + case _SIP_URL: + return SIP_URL; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _LOGICAL_NAME: + return "LOGICAL_NAME"; + case _EMAIL_ADDRESS: + return "EMAIL_ADDRESS"; + case _MSISDN: + return "MSISDN"; + case _URL: + return "URL"; + case _SIP_URL: + return "SIP_URL"; + default: + return ""; + } + } +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheck.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheck.java new file mode 100644 index 000000000..4ab12c58b --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheck.java @@ -0,0 +1,108 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the LCS-Format-Indicator enumerated type. + * From the Diameter Charging Application (3GPP TS 32.299 V14.1.0) specification, + * referenced in Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification, + * as element of 7.4.14 LCS-Privacy-Check-Session and 7.4.14 LCS-Privacy-Check-Non-Session grouped AVPs (section 7.4.3) + *

+ *

+ * 7.4.14	LCS-Privacy-Check
+ *
+ * The LCS-Privacy-Check AVP is of type Enumerated. The following values are defined:
+ *  ALLOWED_WITHOUT_NOTIFICATION (0)
+ *  ALLOWED_WITH_NOTIFICATION (1)
+ *  ALLOWED_IF_NO_RESPONSE (2)
+ *  RESTRICTED_IF_NO_RESPONSE (3)
+ *  NOT_ALLOWED (4)
+ * Default value if AVP is not present is: ALLOWED_WITHOUT_NOTIFICATION (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public class LCSPrivacyCheck implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _ALLOWED_WITHOUT_NOTIFICATION = 0; + public static final int _ALLOWED_WITH_NOTIFICATION = 1; + public static final int _ALLOWED_IF_NO_RESPONSE = 2; + public static final int _RESTRICTED_IF_NO_RESPONSE = 3; + public static final int _NOT_ALLOWED = 4; + + public static final LCSPrivacyCheck ALLOWED_WITHOUT_NOTIFICATION = new LCSPrivacyCheck(_ALLOWED_WITHOUT_NOTIFICATION); + public static final LCSPrivacyCheck ALLOWED_WITH_NOTIFICATION = new LCSPrivacyCheck(_ALLOWED_WITH_NOTIFICATION); + public static final LCSPrivacyCheck ALLOWED_IF_NO_RESPONSE = new LCSPrivacyCheck(_ALLOWED_IF_NO_RESPONSE); + public static final LCSPrivacyCheck RESTRICTED_IF_NO_RESPONSE = new LCSPrivacyCheck(_RESTRICTED_IF_NO_RESPONSE); + public static final LCSPrivacyCheck NOT_ALLOWED = new LCSPrivacyCheck(_NOT_ALLOWED); + + private int value = -1; + + private LCSPrivacyCheck(int value) { + this.value = value; + } + + public static LCSPrivacyCheck fromInt(int type) { + switch (type) { + case _ALLOWED_WITHOUT_NOTIFICATION: + return ALLOWED_WITHOUT_NOTIFICATION; + case _ALLOWED_WITH_NOTIFICATION: + return ALLOWED_WITH_NOTIFICATION; + case _ALLOWED_IF_NO_RESPONSE: + return ALLOWED_IF_NO_RESPONSE; + case _RESTRICTED_IF_NO_RESPONSE: + return RESTRICTED_IF_NO_RESPONSE; + case _NOT_ALLOWED: + return NOT_ALLOWED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _ALLOWED_WITHOUT_NOTIFICATION: + return "ALLOWED_WITHOUT_NOTIFICATION"; + case _ALLOWED_WITH_NOTIFICATION: + return "ALLOWED_WITH_NOTIFICATION"; + case _ALLOWED_IF_NO_RESPONSE: + return "ALLOWED_IF_NO_RESPONSE"; + case _RESTRICTED_IF_NO_RESPONSE: + return "RESTRICTED_IF_NO_RESPONSE"; + case _NOT_ALLOWED: + return "NOT_ALLOWED"; + default: + return ""; + } + } +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvp.java new file mode 100644 index 000000000..e5c76219b --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvp.java @@ -0,0 +1,60 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the LCS-Privacy-Check-Non-Session AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.23		LCS-Privacy-Check-Non-Session
+ * 	The LCS-Privacy-Check-Non-Session AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 							LLCS-Privacy-Check-Non-Session ::= 
+ *                                                 { LCS-Privacy-Check }
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LCSPrivacyCheckNonSessionAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V13.0.0 + + The LCS-Privacy-Check AVP is of type Enumerated. The following values are defined: + ALLOWED_WITHOUT_NOTIFICATION (0) + ALLOWED_WITH_NOTIFICATION (1) + ALLOWED_IF_NO_RESPONSE (2) + RESTRICTED_IF_NO_RESPONSE (3) + NOT_ALLOWED (4) + Default value if AVP is not present is: ALLOWED_WITHOUT_NOTIFICATION (0). + */ + boolean hasLCSPrivacyCheck(); + + LCSPrivacyCheck getLCSPrivacyCheck(); + + void setLCSPrivacyCheck(LCSPrivacyCheck lcsPrivacyCheck); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvp.java new file mode 100644 index 000000000..1a5eacd3e --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvp.java @@ -0,0 +1,60 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the LCS-Privacy-Check-Session AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.23		LCS-Privacy-Check-Session
+ * 	The LCS-Privacy-Check-Session AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 							LCS-Privacy-Check-Session ::= 
+ *                                            { LCS-Privacy-Check }
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LCSPrivacyCheckSessionAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + The LCS-Privacy-Check AVP is of type Enumerated. The following values are defined: + ALLOWED_WITHOUT_NOTIFICATION (0) + ALLOWED_WITH_NOTIFICATION (1) + ALLOWED_IF_NO_RESPONSE (2) + RESTRICTED_IF_NO_RESPONSE (3) + NOT_ALLOWED (4) + Default value if AVP is not present is: ALLOWED_WITHOUT_NOTIFICATION (0). + */ + boolean hasLCSPrivacyCheck(); + + LCSPrivacyCheck getLCSPrivacyCheck(); + + void setLCSPrivacyCheck(LCSPrivacyCheck lcsPrivacyCheck); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSAvp.java new file mode 100644 index 000000000..fdbd95af6 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSAvp.java @@ -0,0 +1,122 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the LCS-QoS AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.6		LCS-QoS
+ * 	The LCS-QoS AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 	LCS-QoS ::= 
+ * 											[ LCS-QoS-Class ]
+ * 											[ Horizontal-Accuracy ]
+ * 											[ Vertical-Accuracy ]
+ * 											[ Vertical-Requested ]
+ * 											[ Response-Time]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LCSQoSAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.27 LCS-QoS-Class + The LCS-QoS-Class AVP is of the type Enumerated. The following values are defined. + ASSURED (0) + BEST EFFORT (1) + */ + boolean hasLCSQoSClass(); + + LCSQoSClass getLCSQoSClass(); + + void setLCSQoSClass(LCSQoSClass lcsQoSClass); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.7 Horizontal-Accuracy + The Horizontal-Accuracy AVP is of type Unsigned32. + Bits 6-0 corresponds to Uncertainty Code defined in 3GPP TS 23.032 [3]. + The horizontal location error should be less than the error indicated by the uncertainty code with 67% confidence. + Bits 7 to 31 shall be ignored. + + */ + boolean hasHorizontalAccuracy(); + + long getHorizontalAccuracy(); + + void setHorizontalAccuracy(long horizontalAccuracy); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.8 Vertical-Accuracy + The Vertical-Accuracy AVP is of type Unsigned32. + Bits 6-0 corresponds to Uncertainty Code defined in 3GPP TS 23.032 [3]. + The vertical location error should be less than the error indicated by the uncertainty code with 67% confidence. + Bits 7 to 31 shall be ignored. + */ + boolean hasVerticalAccuracy(); + + long getVerticalAccuracy(); + + void setVerticalAccuracy(long verticalAccuracy); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.9 Vertical-Requested + The Vertical-Requested AVP is of type Enumerated. The following values are defined: + VERTICAL_COORDINATE_IS_NOT REQUESTED (0) + VERTICAL_COORDINATE_IS_REQUESTED (1) + Default value if AVP is not present is: VERTICAL_COORDINATE_IS_NOT_REQUESTED (0). + */ + boolean hasVerticalRequested(); + + VerticalRequested getVerticalRequested(); + + void setVerticalRequested(VerticalRequested verticalRequested); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.11 Response-Time + The Response-Time AVP is of type Enumerated. The following values are defined: + LOW_DELAY (0) + DELAY_TOLERANT (1) + */ + boolean hasResponseTime(); + + ResponseTime getResponseTime(); + + void setResponseTime(ResponseTime responseTime); + +} + diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSClass.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSClass.java new file mode 100644 index 000000000..8cf28c19b --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSQoSClass.java @@ -0,0 +1,85 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the LCS-QoS-Class enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + * as element of LCS-QoS grouped AVP + *

+ *

+ * 7.4.27	LCS-QoS-Class
+ * 	The LCS-QoS-Class AVP is of the type Enumerated. The following values are defined.
+ * 		ASSURED (0)
+ * 		BEST_EFFORT (1)
+ * 
+ * + * @author Fernando Mendioroz + */ +public class LCSQoSClass implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _ASSURED = 0; + public static final int _BEST_EFFORT = 1; + + public static final LCSQoSClass ASSURED = new LCSQoSClass(_ASSURED); + public static final LCSQoSClass BEST_EFFORT = new LCSQoSClass(_BEST_EFFORT); + + private int value = -1; + + private LCSQoSClass(int value) { + this.value = value; + } + + public static LCSQoSClass fromInt(int type) { + switch (type) { + case _ASSURED: + return ASSURED; + case _BEST_EFFORT: + return BEST_EFFORT; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _ASSURED: + return "ASSURED"; + case _BEST_EFFORT: + return "BEST_EFFORT"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvp.java new file mode 100644 index 000000000..aea19cc6a --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvp.java @@ -0,0 +1,77 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the LCS-Requestor-Name AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.4	LCS-Requestor-Name
+ * 	The LCS-Requestor-Name AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 	LCS-Requestor-Name ::= 
+ * 											[ LCS-Requestor-Id-String ]
+ * 											[ LCS-Format-Indicator ]
+ *
+ * 	The details of the LCS-Requestor-Id-String AVP and the LCS-Format-Indicator AVP are described in 3GPP TS 32.299 [10].
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LCSRequestorNameAvp extends GroupedAvp { + + /* + From 3GPP TS 32.299 (v14.1.0) + + 7.2.92 LCS-Requestor-ID-String AVP + The LCS-Requestor-ID-String AVP (AVP code 1240) is of type UTF8String and contains the identification of the Requestor and can be e.g. MSISDN or logical name. + + */ + boolean hasLCSRequestorIDString(); + + String getLCSRequestorIDString(); + + void setLCSRequestorIDString(String lcsRequestorIDString); + + /* + 7.2.88 LCS-Format-Indicator AVP + + The LCS-Format-Indicator AVP (AVP code 1237) is of type Enumerated and contains the format of the LCS Client name. It can be one of the following values: + + 0 LOGICAL_NAME + 1 EMAIL_ADDRESS + 2 MSISDN + 3 URL + 4 SIP_URL + */ + boolean hasLCSFormatIndicator(); + + LCSFormatIndicator getLCSFormatIndicator(); + + void setLCSFormatIndicator(LCSFormatIndicator lcsFormatIndicator); + +} + diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LocationEvent.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LocationEvent.java new file mode 100644 index 000000000..fe3f716ee --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/LocationEvent.java @@ -0,0 +1,125 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Location-Event enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification: + *

+ *

+ * 7.4.20	Location-Event
+ * The Location-Event AVP is of type Enumerated. The following values are defined:
+ *    EMERGENCY_CALL_ORIGINATION (0)
+ *    EMERGENCY_CALL_RELEASE (1)
+ *    MO_LR (2)
+ *    EMERGENCY_CALL_HANDOVER (3)
+ *    DEFERRED_MT_LR_RESPONSE (4)
+ *    DEFERRED_MO_LR_TTTP_INITIATION (5)
+ *    DELAYED_LOCATION_REPORTING (6)
+ *
+ * NOTE:	Values (4) and (5) are only applicable over Lgd interface. The MME cannot use these values over SLg interface.
+ * DEFERRED_MT_LR_RESPONSE is applicable to the delivery of a location estimate for an LDR initiated earlier by either the network
+ * (via an MT-LR activate deferred location) or the UE (via a periodic MO-LR TTTP initiation).
+ * DELAYED_LOCATION_REPORTING is applicable to the delivery of a location estimate for an EPC-MT-LR or PS-MT-LR initiated earlier
+ * by the network for a UE which was transiently not reachable.
+ *
+ * 
+ * + * @author Fernando Mendioroz + */ +public class LocationEvent implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _EMERGENCY_CALL_ORIGINATION = 0; + public static final int _EMERGENCY_CALL_RELEASE = 1; + public static final int _MO_LR = 2; + public static final int _EMERGENCY_CALL_HANDOVER = 3; + public static final int _DEFERRED_MT_LR_RESPONSE = 4; + public static final int _DEFERRED_MO_LR_TTTP_INITIATION = 5; + public static final int _DELAYED_LOCATION_REPORTING = 6; + + public static final LocationEvent EMERGENCY_CALL_ORIGINATION = new LocationEvent(_EMERGENCY_CALL_ORIGINATION); + public static final LocationEvent EMERGENCY_CALL_RELEASE = new LocationEvent(_EMERGENCY_CALL_RELEASE); + public static final LocationEvent MO_LR = new LocationEvent(_MO_LR); + public static final LocationEvent EMERGENCY_CALL_HANDOVER = new LocationEvent(_EMERGENCY_CALL_HANDOVER); + public static final LocationEvent DEFERRED_MT_LR_RESPONSE = new LocationEvent(_DEFERRED_MT_LR_RESPONSE); + public static final LocationEvent DEFERRED_MO_LR_TTTP_INITIATION = new LocationEvent(_DEFERRED_MO_LR_TTTP_INITIATION); + public static final LocationEvent DELAYED_LOCATION_REPORTING = new LocationEvent(_DELAYED_LOCATION_REPORTING); + + private int value = -1; + + private LocationEvent(int value) { + this.value = value; + } + + public static LocationEvent fromInt(int type) { + switch (type) { + case _EMERGENCY_CALL_ORIGINATION: + return EMERGENCY_CALL_ORIGINATION; + case _EMERGENCY_CALL_RELEASE: + return EMERGENCY_CALL_RELEASE; + case _MO_LR: + return MO_LR; + case _EMERGENCY_CALL_HANDOVER: + return EMERGENCY_CALL_HANDOVER; + case _DEFERRED_MT_LR_RESPONSE: + return DEFERRED_MT_LR_RESPONSE; + case _DEFERRED_MO_LR_TTTP_INITIATION: + return DEFERRED_MO_LR_TTTP_INITIATION; + case _DELAYED_LOCATION_REPORTING: + return DELAYED_LOCATION_REPORTING; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _EMERGENCY_CALL_ORIGINATION: + return "EMERGENCY_CALL_ORIGINATION"; + case _EMERGENCY_CALL_RELEASE: + return "EMERGENCY_CALL_RELEASE"; + case _MO_LR: + return "MO_LR"; + case _EMERGENCY_CALL_HANDOVER: + return "EMERGENCY_CALL_HANDOVER"; + case _DEFERRED_MT_LR_RESPONSE: + return "DEFERRED_MT_LR_RESPONSE"; + case _DEFERRED_MO_LR_TTTP_INITIATION: + return "DEFERRED_MO_LR_TTTP_INITIATION"; + case _DELAYED_LOCATION_REPORTING: + return "DELAYED_LOCATION_REPORTING"; + default: + return ""; + } + } +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/MotionEventInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/MotionEventInfoAvp.java new file mode 100644 index 000000000..2944b8ee0 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/MotionEventInfoAvp.java @@ -0,0 +1,159 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Motion-Event-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.4	Motion-Event-Info
+ * 	The Motion-Event-Info AVP is of type Grouped.
+ * 	 AVP format:
+ * 	 Motion-Event-Info ::= 
+ *                          { Linear-Distance }
+ * 	                        [ Occurrence-Info ]
+ * 	                        [ Interval-Time ]
+ * 	                        [ Maximum-Interval ]
+ * 	                        [ Sampling-Interval ]
+ * 	                        [ Reporting-Duration ]
+ * 	                        [ Reporting-Location-Requirements ]
+ * 	                       *[ AVP ]
+ *
+ * 	 If not included, the default value of Occurrence-Info shall be considered as "ONE_TIME_EVENT" (0).
+ * 	 Interval-Time and Maximum-Interval AVPs are only applicable when the Occurrence-Info is set to "MULTIPLE_TIME_EVENT" (1).
+ * 	 If not included, the default value of Interval-Time shall be considered as one and the default values of Maximum-Interval,
+ * 	 Sampling-Interval and Reporting-Duration shall each be considered as the maximum value.
+ * 	 The Motion-Event-Info AVP is only applicable to a deferred EPC-MT-LR.
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface MotionEventInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 (v14.1.0) + + 7.4.65 Linear-Distance + The Linear-Distance AVP is of type Unsigned32 and it contains the minimum linear (straight line) distance for motion event reports, in meters. + The minimum value shall be 1 and maximum value shall be 10,000. The Linear-Distance AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasLinearDistance(); + + long getLinearDistance(); + + void setLinearDistance(long linearDistance); + + /* + From 3GPP TS 29.172 (v14.1.0) + + 7.4.43 Occurrence-Info + The Occurrence-Info AVP is of type Enumerated. The following values are defined: + ONE_TIME_EVENT (0) + MULTIPLE_TIME_EVENT (1) + */ + boolean hasOccurrenceInfo(); + + OccurrenceInfo getOccurrenceInfo(); + + void setOccurrenceInfo(OccurrenceInfo occurrenceInfo); + + /* + From 3GPP TS 29.172 (v14.1.0) + + 7.4.44 Interval-Time + The Interval-Time AVP is of type Unsigned32 and it contains the minimum time interval between area reports or motion reports, in seconds. + The minimum value shall be 1 second and the maximum value 32767 seconds. + */ + boolean hasIntervalTime(); + + long getIntervalTime(); + + void setIntervalTime(long motionEventIntervalTime); + + /* + From 3GPP TS 29.172 (v14.1.0) + + 7.4.66 Maximum-Interval + The Maximum-Interval AVP is of type Unsigned32 and it contains the maximum time interval between consecutive event reports, in seconds. + The minimum value shall be 1 second and the maximum value 86400 seconds. + The Maximum-Interval AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasMaximumInterval(); + + long getMaximumInterval(); + + void setMaximumInterval(long motionEventMaximumInterval); + + /* + From 3GPP TS 29.172 (v14.1.0) + + 7.4.67 Sampling-Interval + The Sampling-Interval AVP is of type Unsigned32 and it contains the maximum time interval between consecutive evaluations by a UE of an area event or motion event, in seconds. + The minimum value shall be 1 second and the maximum value 3600 seconds. + The Sampling-Interval AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasSamplingInterval(); + + long getSamplingInterval(); + + void setSamplingInterval(long motionEventSamplingInterval); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.68 Reporting-Duration + The Reporting-Duration AVP is of type Unsigned32 and it contains the maximum duration of event reporting, in seconds. + Its minimum value shall be 1 and maximum value shall be 8640000. + The Reporting-Duration AVP is only applicable to a deferred EPC-MT-LR. + */ + boolean hasReportDuration(); + + long getReportDuration(); + + void setReportDuration(long motionEventReportDuration); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.69 Reporting-Location-Requirements + The Reporting-Location-Requirements AVP is of type Unsigned32 and it shall contain a bit string indicating requirements + on location provision for a deferred EPC-MT-LR. When a bit is set to one, the corresponding requirement is present. + When a bit is set to zero or when the AVP is omitted, the corresponding requirement is not present. + For support of backward compatibility, a receiver shall ignore any bits that are set to one but are not supported + The meaning of the bits shall be as defined in table 7.4.69/1: + + Table 7.4.69/1: Reporting-Location-Requirements + Bit Requirement Description + 0 Location-Estimate A location estimate is required for each area event, motion event report or expiration of the + maximum time interval between event reports. + 1-31 None Spare + */ + boolean hasReportingLocationRequirements(); + + long getReportingLocationRequirements(); + + void setReportingLocationRequirements(long motionEventReportingLocationRequirements); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/OccurrenceInfo.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/OccurrenceInfo.java new file mode 100644 index 000000000..1e4386b8e --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/OccurrenceInfo.java @@ -0,0 +1,84 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Occurrence-Info enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + *

+ *

+ * 7.4.43	Occurrence-Info
+ * 	The Occurrence-Info AVP is of type Enumerated. The following values are defined:
+ * 		ONE_TIME_EVENT (0)
+ * 		MULTIPLE_TIME_EVENT (1)
+ * 
+ * + * @author Fernando Mendioroz + */ +public class OccurrenceInfo implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _ONE_TIME_EVENT = 0; + public static final int _MULTIPLE_TIME_EVENT = 1; + + public static final OccurrenceInfo ONE_TIME_EVENT = new OccurrenceInfo(_ONE_TIME_EVENT); + public static final OccurrenceInfo MULTIPLE_TIME_EVENT = new OccurrenceInfo(_MULTIPLE_TIME_EVENT); + + private int value = -1; + + private OccurrenceInfo(int value) { + this.value = value; + } + + public static OccurrenceInfo fromInt(int type) { + switch (type) { + case _ONE_TIME_EVENT: + return ONE_TIME_EVENT; + case _MULTIPLE_TIME_EVENT: + return MULTIPLE_TIME_EVENT; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _ONE_TIME_EVENT: + return "ONE_TIME_EVENT"; + case _MULTIPLE_TIME_EVENT: + return "MULTIPLE_TIME_EVENT"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PLMNIDListAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PLMNIDListAvp.java new file mode 100644 index 000000000..c8b16b1c1 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PLMNIDListAvp.java @@ -0,0 +1,80 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Reporting-PLMN-List AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.49	PLMN-ID-List
+ * The PLMN-ID-List AVP is of type Grouped.
+ * AVP format:
+ * 						PLMN-ID-List ::= 
+ *                             { Visited-PLMN-Id }
+ * 														 [ Periodic-Location-Support-Indicator ]
+ * 														*[ AVP ]
+ * If not included, the default value of Periodic-Location-Support-Indicator shall be considered as "NOT_SUPPORTED" (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface PLMNIDListAvp extends GroupedAvp { + + /* + From 3GPP TS 29.272 V12.9.0 + + The Visited-PLMN-Id AVP is of type OctetString. This AVP shall contain the concatenation of MCC and MNC. See 3GPP TS 23.003 [3]. + The content of this AVP shall be encoded as an octet string according to table 7.3.9-1. + See 3GPP TS 24.008 [31], clause 10.5.1.13, PLMN list, for the coding of MCC and MNC. + If MNC is 2 digits long, bits 5 to 8 of octet 2 are coded as "1111". + + Table 7.3.9/1: Encoding format for Visited-PLMN-Id AVP + 8 7 6 5 4 3 2 1 + MCC digit 2 MCC digit 1 octet1 + MNC digit 3 MCC digit 3 octet 2 + MNC digit 2 MNC digit 1 octet 3 + */ + boolean hasVisitedPLMNId(); + + byte[] getVisitedPLMNId(); + + void setVisitedPLMNId(byte[] visitedPLMNId); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.50 Periodic-Location-Support-Indicator + The Periodic-Location-Support-Indicator AVP is of type Enumerated and it indicates if the given PLMN-ID + (indicated by Visited-PLMN-Id) supports periodic location or not. The following values are defined: + NOT_SUPPORTED (0) + SUPPORTED (1) + */ + boolean hasPeriodicLocationSupportIndicator(); + + PeriodicLocationSupportIndicator getPeriodicLocationSupportIndicator(); + + void setPeriodicLocationSupportIndicator(PeriodicLocationSupportIndicator periodicLocationSupportIndicator); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvp.java new file mode 100644 index 000000000..c88ed9242 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvp.java @@ -0,0 +1,70 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the ESMLC-Cell-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.45	Periodic-LDR-Info
+ * The Periodic-LDR-Info AVP is of type Grouped.
+ * AVP format:
+ * 						Periodic-LDR-Info ::= 
+ *                                 { Reporting-Amount }
+ *                                 { Reporting-Interval }
+ * 																*[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface PeriodicLDRInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.46 Reporting-Amount + The Reporting-Amount AVP is of type Unsigned32 and it contains reporting frequency. + Its minimum value shall be 1 and maximum value shall be 8639999. + */ + boolean hasReportingAmount(); + + long getReportingAmount(); + + void setReportingAmount(long reportingAmount); + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.47 Reporting-Interval + The Interval-Time AVP is of type Unsigned32 and it contains reporting interval in seconds. + Its minimum value shall be 1 and maximum value shall be 8639999. + */ + boolean hasReportingInterval(); + + long getReportingInterval(); + + void setReportingInterval(long reportingInterval); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLocationSupportIndicator.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLocationSupportIndicator.java new file mode 100644 index 000000000..82c27f89e --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PeriodicLocationSupportIndicator.java @@ -0,0 +1,85 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Periodic-Location-Support-Indicator enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + *

+ *

+ * 7.4.50	Periodic-Location-Support-Indicator
+ *  The Periodic-Location-Support-Indicator AVP is of type Enumerated and it indicates if the given PLMN-ID (indicated by Visited-PLMN-Id)
+ *  supports periodic location or not. The following values are defined:
+ * 	  NOT_SUPPORTED (0)
+ * 	  SUPPORTED (1)
+ * 
+ * + * @author Fernando Mendioroz + */ +public class PeriodicLocationSupportIndicator implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _NOT_SUPPORTED = 0; + public static final int _SUPPORTED = 1; + + public static final PeriodicLocationSupportIndicator NOT_SUPPORTED = new PeriodicLocationSupportIndicator(_NOT_SUPPORTED); + public static final PeriodicLocationSupportIndicator SUPPORTED = new PeriodicLocationSupportIndicator(_SUPPORTED); + + private int value = -1; + + private PeriodicLocationSupportIndicator(int value) { + this.value = value; + } + + public static PeriodicLocationSupportIndicator fromInt(int type) { + switch (type) { + case _NOT_SUPPORTED: + return NOT_SUPPORTED; + case _SUPPORTED: + return SUPPORTED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _NOT_SUPPORTED: + return "NOT_SUPPORTED"; + case _SUPPORTED: + return "SUPPORTED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PrioritizedListIndicator.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PrioritizedListIndicator.java new file mode 100644 index 000000000..50dc20936 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PrioritizedListIndicator.java @@ -0,0 +1,85 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Prioritized-List-Indicator enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + *

+ *

+ * 7.4.51	Prioritized-List-Indicator
+ * The Prioritized-List-Indicator AVP is of type Enumerated and it indicates if the PLMN-ID-List is provided in prioritized order or not.
+ * The following values are defined:
+ * 		NOT_PRIORITIZED  (0)
+ * 		PRIORITIZED (1)
+ * 
+ * + * @author Fernando Mendioroz + */ +public class PrioritizedListIndicator implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _NOT_PRIORITIZED = 0; + public static final int _PRIORITIZED = 1; + + public static final PrioritizedListIndicator NOT_PRIORITIZED = new PrioritizedListIndicator(_NOT_PRIORITIZED); + public static final PrioritizedListIndicator PRIORITIZED = new PrioritizedListIndicator(_PRIORITIZED); + + private int value = -1; + + private PrioritizedListIndicator(int value) { + this.value = value; + } + + public static PrioritizedListIndicator fromInt(int type) { + switch (type) { + case _NOT_PRIORITIZED: + return NOT_PRIORITIZED; + case _PRIORITIZED: + return PRIORITIZED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _NOT_PRIORITIZED: + return "NOT_PRIORITIZED"; + case _PRIORITIZED: + return "PRIORITIZED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PseudonymIndicator.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PseudonymIndicator.java new file mode 100644 index 000000000..eb01e1902 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/PseudonymIndicator.java @@ -0,0 +1,85 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Pseudonym-Indicator enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + *

+ *

+ * 7.4.21	Pseudonym-Indicator
+ * 	The Pseudonym-Indicator AVP is of type Enumerated. The following values are defined:
+ * 		PSEUDONYM_NOT_REQUESTED (0)
+ * 		PSEUDONYM_REQUESTED (1)
+ * 	Default value if AVP is not present is: PSEUDONYM_NOT_REQUESTED (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public class PseudonymIndicator implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _PSEUDONYM_NOT_REQUESTED = 0; + public static final int _PSEUDONYM_REQUESTED = 1; + + public static final PseudonymIndicator PSEUDONYM_NOT_REQUESTED = new PseudonymIndicator(_PSEUDONYM_NOT_REQUESTED); + public static final PseudonymIndicator PSEUDONYM_REQUESTED = new PseudonymIndicator(_PSEUDONYM_REQUESTED); + + private int value = -1; + + private PseudonymIndicator(int value) { + this.value = value; + } + + public static PseudonymIndicator fromInt(int type) { + switch (type) { + case _PSEUDONYM_NOT_REQUESTED: + return PSEUDONYM_NOT_REQUESTED; + case _PSEUDONYM_REQUESTED: + return PSEUDONYM_REQUESTED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _PSEUDONYM_NOT_REQUESTED: + return "PSEUDONYM_NOT_REQUESTED"; + case _PSEUDONYM_REQUESTED: + return "PSEUDONYM_REQUESTED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvp.java new file mode 100644 index 000000000..e60498ae7 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvp.java @@ -0,0 +1,76 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Reporting-PLMN-List AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.48	Reporting-PLMN-List
+ * The Reporting-PLMN-List AVP is of type Grouped.
+ * AVP format:
+ * 		Reporting-PLMN-List ::= 
+ * 													  1*20{ PLMN-ID-List }
+ * 													  [ Prioritized-List-Indicator ]
+ * 													 *[ AVP ]
+ * If not included, the default value of Prioritized-List-Indicator shall be considered as "NOT_PRIORITIZED" (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface ReportingPLMNListAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V14.1.0 + + 7.4.49 PLMN-ID-List + The PLMN-ID-List AVP is of type Grouped. + AVP format: + PLMN-ID-List ::= + { Visited-PLMN-Id } + [ Periodic-Location-Support-Indicator ] + *[ AVP ] + If not included, the default value of Periodic-Location-Support-Indicator shall be considered as "NOT_SUPPORTED" (0). + */ + boolean hasPLMNIDList(); + + PLMNIDListAvp getPLMNIDList(); + + void setPLMNIDList(PLMNIDListAvp plmnidList); + + /* + 7.4.51 Prioritized-List-Indicator + The Prioritized-List-Indicator AVP is of type Enumerated and it indicates if the PLMN-ID-List is provided in prioritized order or not. + The following values are defined: + NOT_PRIORITIZED (0) + PRIORITIZED (1) + */ + boolean hasPrioritizedListIndicator(); + + PrioritizedListIndicator getPrioritizedListIndicator(); + + void setPrioritizedListIndicator(PrioritizedListIndicator prioritizedListIndicator); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ResponseTime.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ResponseTime.java new file mode 100644 index 000000000..cddb5590a --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ResponseTime.java @@ -0,0 +1,87 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Response-Time enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + * as element of LCS-QoS grouped AVP + *

+ *

+ * 7.4.11	Response-Time
+ * 	The Response-Time AVP is of type Enumerated. The following values are defined:
+ * 		LOW_DELAY (0)
+ * 		DELAY_TOLERANT (1)
+ * 	Default value if AVP is not present is: LOW_DELAY (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public class ResponseTime implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _LOW_DELAY = 0; + public static final int _DELAY_TOLERANT = 1; + + public static final ResponseTime LOW_DELAY = new ResponseTime(_LOW_DELAY); + public static final ResponseTime DELAY_TOLERANT = new ResponseTime(_DELAY_TOLERANT); + + private int value = -1; + + private ResponseTime(int value) { + this.value = value; + } + + public static ResponseTime fromInt(int type) { + switch (type) { + case _LOW_DELAY: + return LOW_DELAY; + case _DELAY_TOLERANT: + return DELAY_TOLERANT; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _LOW_DELAY: + return "LOW_DELAY"; + case _DELAY_TOLERANT: + return "DELAY_TOLERANT"; + default: + return ""; + } + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SLgLocationType.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SLgLocationType.java new file mode 100644 index 000000000..16fd4a991 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SLgLocationType.java @@ -0,0 +1,113 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the SLg-Location-Type enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification: + *

+ *

+ * 7.4.2	SLg-Location-Type
+ * The SLg-Location-Type AVP is of type Enumerated. The following values are defined:
+ *    CURRENT_LOCATION (0)
+ *    CURRENT_OR_LAST_KNOWN_LOCATION (1)
+ *    INITIAL_LOCATION (2)
+ *    ACTIVATE_DEFERRED_LOCATION (3)
+ *    CANCEL_DEFERRED_LOCATION (4)
+ *    NOTIFICATION_VERIFICATION_ONLY (5)
+ * NOTE:	Values (3) and (4) are only applicable over Lgd interface. If received over SLg interface, these values are treated as reserved.
+ * 
+ * + * @author Fernando Mendioroz + */ +public class SLgLocationType implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _CURRENT_LOCATION = 0; + public static final int _CURRENT_OR_LAST_KNOWN_LOCATION = 1; + public static final int _INITIAL_LOCATION = 2; + public static final int _ACTIVATE_DEFERRED_LOCATION = 3; + public static final int _CANCEL_DEFERRED_LOCATION = 4; + public static final int _NOTIFICATION_VERIFICATION_ONLY = 5; + + public static final SLgLocationType CURRENT_LOCATION = new SLgLocationType(_CURRENT_LOCATION); + public static final SLgLocationType CURRENT_OR_LAST_KNOWN_LOCATION = new SLgLocationType(_CURRENT_OR_LAST_KNOWN_LOCATION); + public static final SLgLocationType INITIAL_LOCATION = new SLgLocationType(_INITIAL_LOCATION); + public static final SLgLocationType ACTIVATE_DEFERRED_LOCATION = new SLgLocationType(_ACTIVATE_DEFERRED_LOCATION); + public static final SLgLocationType CANCEL_DEFERRED_LOCATION = new SLgLocationType(_CANCEL_DEFERRED_LOCATION); + public static final SLgLocationType NOTIFICATION_VERIFICATION_ONLY = new SLgLocationType(_NOTIFICATION_VERIFICATION_ONLY); + + private int value = -1; + + private SLgLocationType(int value) { + this.value = value; + } + + public static SLgLocationType fromInt(int type) { + switch (type) { + case _CURRENT_LOCATION: + return CURRENT_LOCATION; + case _CURRENT_OR_LAST_KNOWN_LOCATION: + return CURRENT_OR_LAST_KNOWN_LOCATION; + case _INITIAL_LOCATION: + return INITIAL_LOCATION; + case _ACTIVATE_DEFERRED_LOCATION: + return ACTIVATE_DEFERRED_LOCATION; + case _CANCEL_DEFERRED_LOCATION: + return CANCEL_DEFERRED_LOCATION; + case _NOTIFICATION_VERIFICATION_ONLY: + return NOTIFICATION_VERIFICATION_ONLY; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _CURRENT_LOCATION: + return "CURRENT_LOCATION"; + case _CURRENT_OR_LAST_KNOWN_LOCATION: + return "CURRENT_OR_LAST_KNOWN_LOCATION"; + case _INITIAL_LOCATION: + return "INITIAL_LOCATION"; + case _ACTIVATE_DEFERRED_LOCATION: + return "ACTIVATE_DEFERRED_LOCATION"; + case _CANCEL_DEFERRED_LOCATION: + return "CANCEL_DEFERRED_LOCATION"; + case _NOTIFICATION_VERIFICATION_ONLY: + return "NOTIFICATION_VERIFICATION_ONLY"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ServingNodeAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ServingNodeAvp.java new file mode 100644 index 000000000..718f4312d --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/ServingNodeAvp.java @@ -0,0 +1,192 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Defines an interface representing the Serving-Node grouped AVP type. + * referred in section 7.4.28 of ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification, + * from the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.173 V14.0.0) specification, + *

+ *

+ * 6.4.3 Serving-Node
+ *
+ * The Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the
+ * targeted user.
+ *
+ * AVP format
+ *
+ * 				Serving-Node ::=	
+ * 													[ SGSN-Number ]
+ * 													[ SGSN-Name ]
+ * 													[ SGSN-Realm ]
+ * 													[ MME-Name ]
+ * 													[ MME-Realm ]
+ * 													[ MSC-Number ]
+ * 													[ 3GPP-AAA-Server-Name ]
+ * 													[ LCS-Capabilities-Sets ]
+ * 													[ GMLC-Address ]
+ * 												 *[AVP]
+ *
+ * The GMLC-Address AVP included in the Serving-Node grouped AVP shall contain, if present,
+ * the IPv4 or IPv6 address of the GMLC associated with the serving node
+ * (i.e., either the home GMLC or the visited GMLC, depending on the location of the serving node).
+ * 
+ * + * @author Fernando Mendioroz + */ + +public interface ServingNodeAvp extends GroupedAvp { + + /* + From 3GPP TS 29.272 (v12.9.0) + + 7.3.102 SGSN-Number + + The SGSN-Number AVP is of type OctetString and it shall contain the ISDN number of the SGSN. For further details on the definition of this AVP, + see 3GPP TS 23.003[3]. This AVP contains an SGSN-Number in international number format as described in ITU-T Rec E.164 [41] and shall be encoded + as a TBCD-string. See 3GPP TS 29.002 [24] for encoding of TBCD-strings. + This AVP shall not include leading indicators for the nature of address and the numbering plan; + it shall contain only the TBCD-encoded digits of the address. + */ + boolean hasSGSNNumber(); + + byte[] getSGSNNumber(); + + void setSGSNNumber(byte[] sgsnNumber); + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.13 SGSN-Name + + The SGSN-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 3588 [5]. + */ + boolean hasSGSNName(); + + DiameterIdentity getSGSNName(); + + void setSGSNName(DiameterIdentity sgsnName); + + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.14 SGSN-Realm + + The SGSN-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 3588 [5]. + */ + boolean hasSGSNRealm(); + + DiameterIdentity getSGSNRealm(); + + void setSGSNRealm(DiameterIdentity sgsnRealm); + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.4 MME-Name + + The MME-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 3588 [5]. + */ + boolean hasMMEName(); + + DiameterIdentity getMMEName(); + + void setMMEName(DiameterIdentity mmeName); + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.12 MME-Realm + + The MME-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 3588 [5]. + */ + boolean hasMMERealm(); + + DiameterIdentity getMMERealm(); + + void setMMERealm(DiameterIdentity mmeRealm); + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.5 MSC-Number + + The MSC-Number AVP is of type OctetString and it shall contain the ISDN number of the serving MSC or MSC server + in international number format as described in ITU-T Rec E.164 [15] and shall be encoded as a TBCD-string. + See 3GPP TS 29.002 [3] for encoding of TBCD-strings. + */ + boolean hasMSCNumber(); + + byte[] getMSCNumber(); + + void setMSCNumber(byte[] mscNumber); + + /* + From 3GPP TS 29.173 (v14.1.0) + + 6.4.6 LCS-Capabilities-Sets + + The LCS-Capabilities-Sets AVP is of type Unsigned32 and it shall contain a bit mask. The meaning of the bits shall be as defined + in 3GPP 29.002 [3]. + */ + boolean hasLcsCapabilitiesSets(); + + long getLcsCapabilitiesSets(); + + void setLcsCapabilitiesSets(long lcsCapabilitiesSets); + + /* + From 3GPP TS 29.273 (v14.0.0) + + 8.2.3.24 3GPP-AAA-Server-Name + + The 3GPP-AAA-Server-Name AVP is of type DiameterIdentity, and defines the Diameter address of the 3GPP AAA Server node. + */ + boolean has3GPPAAAServerName(); + + DiameterIdentity get3GPPAAAServerName(); + + void set3GPPAAAServerName(DiameterIdentity tgppAAAServerName); + + /* + From 3GPP TS 29.173 (v13.0.0) + + 6.4.7 GMLC-Address + + The GMLC-Address AVP is of type Address and shall contain the IPv4 or IPv6 address of H-GMLC or the V-GMLC associated with the serving node. + */ + boolean hasGMLCAddress(); + + Address getGMLCAddress(); + + void setGMLCAddress(Address gmlcAddress); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvp.java new file mode 100644 index 000000000..70da89713 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvp.java @@ -0,0 +1,121 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Supported-Features grouped AVP type. + *

+ * From the Diameter Cx and Dx Reference Point Protocol Details (3GPP TS 29.229 V13.0.0) specification, + * reused by SLg (3GPP TS 29.172) + *

+ *

+ * 6.3.29        Supported-Features AVP
+ *
+ * The Supported-Features AVP is of type Grouped. If this AVP is present it may inform the
+ * destination host about the features that the origin host supports for the application.
+ * The Feature-List AVP contains a list of supported features of the origin host.
+ * The Vendor-ID AVP and the Feature-List AVP shall together identify which feature list is
+ * carried in the Supported-Features AVP for the Application-ID present in the command header.
+ *
+ * Where a Supported-Features AVP is used to identify features that have been defined by
+ * 3GPP, the Vendor-ID AVP shall contain the vendor ID of 3GPP. Vendors may define
+ * proprietary features, but it is strongly recommended that the possibility is used only as
+ * the last resort. Where the Supported-Features AVP is used to identify features that have
+ * been defined by a vendor other than 3GPP, it shall contain the vendor ID of the specific
+ * vendor in question.
+ *
+ * If there are multiple feature lists defined by the same vendor and the same application,
+ * the Feature-List-ID AVP shall differentiate those lists from one another.
+ * The destination host shall use the value of the Feature-List-ID AVP to identify the feature list.
+ *
+ * AVP format
+ * Supported-Features ::=  < AVP Header: 628 10415 >
+ *                         { Vendor-Id }
+ *                         { Feature-List-ID }
+ *                         { Feature-List }
+ *                         *[AVP]
+ * 
+ * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + * @author Bartosz Baranowski + */ +public interface SupportedFeaturesAvp extends GroupedAvp { + + /** + * Returns true if the Vendor-Id AVP is present in the message. + */ + boolean hasVendorId(); + + /** + * Returns the value of the Vendor-Id AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getVendorId(); + + /** + * Sets the value of the Vendor-Id AVP, of type Unsigned32. + * + * @throws IllegalStateException if setVendorId has already been called + */ + void setVendorId(long vendorId); + + /** + * Returns true if the Feature-List-ID AVP is present in the message. + */ + boolean hasFeatureListId(); + + /** + * Returns the value of the Feature-List-ID AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getFeatureListId(); + + /** + * Sets the value of the Feature-List-ID AVP, of type Unsigned32. + * + * @throws IllegalStateException if setFeatureListId has already been called + */ + void setFeatureListId(long featureListId); + + /** + * Returns true if the Feature-List AVP is present in the message. + */ + boolean hasFeatureList(); + + /** + * Returns the value of the Feature-List AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getFeatureList(); + + /** + * Sets the value of the Feature-List AVP, of type Unsigned32. + * + * @throws IllegalStateException if setFeatureList has already been called + */ + void setFeatureList(long featureList); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvp.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvp.java new file mode 100644 index 000000000..7a5d9cdbc --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvp.java @@ -0,0 +1,88 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the UTRAN-Positioning-Info AVP type. + * From the Diameter-based ELP SLg interface for Control Plane LCS (3GPP TS 29.172 V14.1.0) specification. + *

+ *

+ * 7.4.29	UTRAN-Positioning-Info
+ * 	The UTRAN-Positioning-Info AVP is of type Grouped.
+ *
+ * 	AVP format:
+ * 		UTRAN-Positioning-Info ::= 
+ * 														  [ UTRAN-Positioning-Data ]
+ * 														  [ UTRAN-GANSS-Positioning-Data ]
+ * 														  [ UTRAN-Additional-Positioning-Data ]
+ * 														 *[ AVP ]
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface UTRANPositioningInfoAvp extends GroupedAvp { + + /* + From 3GPP TS 29.172 V13.0.0 + + 7.4.33 UTRAN-Positioning-Data + The UTRAN-Positioning-Data AVP is of type OctetString. + It shall contain the encoded content of the "positioningDataDiscriminator" and the "positioningDataSet" + included in the "positionData" Information Element as defined in 3GPP TS 25.413 [21]. + */ + boolean hasUTRANPositioningData(); + + byte[] getUTRANPositioningData(); + + void setUTRANPositioningData(byte[] utranPositioningData); + + /* + From 3GPP TS 29.172 V13.0.0 + + 7.4.34 UTRAN-GANSS-Positioning-Data + The UTRAN-GANSS-Positioning-Data AVP is of type OctetString. + It shall contain the encoded content of the "GANSS-PositioningDataSet" only, + included in the "positionData" Information Element as defined in 3GPP TS 25.413 [21]. + + */ + boolean hasUTRANGANSSPositioningData(); + + byte[] getUTRANGANSSPositioningData(); + + void setUTRANGANSSPositioningData(byte[] geranGANSSPositioningData); + + /* + From 3GPP TS 29.172 V13.0.0 + + 7.4.63 UTRAN-Additional-Positioning-Data + The UTRAN-Additional-Positioning-Data AVP is of type OctetString. + It contains the "UTRAN Additional Positioning Data" Information Element as defined in 3GPP 25.413 [21]. + */ + boolean hasUTRANAdditionalPositioningData(); + + byte[] getUTRANAdditionalPositioningData(); + + void setUTRANAdditionalPositioningData(byte[] utranAdditionalPositioningData); + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VelocityRequested.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VelocityRequested.java new file mode 100644 index 000000000..0d332ad28 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VelocityRequested.java @@ -0,0 +1,87 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Velocity-Requested enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + * as element of LCS-QoS grouped AVP + *

+ *

+ * 7.4.10	Velocity-Requested
+ * 	The Velocity-Requested AVP is of type Enumerated.
+ * 	The following values are defined:
+ * 		VELOCITY_IS_NOT_REQUESTED (0)
+ * 		VELOCITY_IS_REQUESTED (1)
+ * 	Default value if AVP is not present is: VELOCITY_IS_NOT_REQUESTED (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public class VelocityRequested implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _VELOCITY_IS_NOT_REQUESTED = 0; + public static final int _VELOCITY_IS_REQUESTED = 1; + + public static final VelocityRequested VELOCITY_IS_NOT_REQUESTED = new VelocityRequested(_VELOCITY_IS_NOT_REQUESTED); + public static final VelocityRequested VELOCITY_IS_REQUESTED = new VelocityRequested(_VELOCITY_IS_REQUESTED); + + private int value = -1; + + private VelocityRequested(int value) { + this.value = value; + } + + public static VelocityRequested fromInt(int type) { + switch (type) { + case _VELOCITY_IS_NOT_REQUESTED: + return VELOCITY_IS_NOT_REQUESTED; + case _VELOCITY_IS_REQUESTED: + return VELOCITY_IS_REQUESTED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _VELOCITY_IS_NOT_REQUESTED: + return "VELOCITY_IS_NOT_REQUESTED"; + case _VELOCITY_IS_REQUESTED: + return "VELOCITY_IS_REQUESTED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VerticalRequested.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VerticalRequested.java new file mode 100644 index 000000000..d350fe7c7 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/avp/VerticalRequested.java @@ -0,0 +1,86 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg.events.avp; + +import java.io.Serializable; + +import net.java.slee.resource.diameter.base.events.avp.Enumerated; + +/** + * Java class representing the Vertical-Requested enumerated type. + * From the Diameter-based ELP SLg Reference Point Protocol Details (3GPP TS 29.172 V14.1.0) specification + * as element of LCS-QoS grouped AVP + *

+ *

+ * 7.4.9	Vertical-Requested
+ * 	The Vertical-Requested AVP is of type Enumerated. The following values are defined:
+ * 		VERTICAL_COORDINATE_IS_NOT_REQUESTED (0)
+ * 		VERTICAL_COORDINATE_IS_REQUESTED (1)
+ * 	Default value if AVP is not present is: VERTICAL_COORDINATE_IS_NOT_REQUESTED (0).
+ * 
+ * + * @author Fernando Mendioroz + */ +public class VerticalRequested implements Enumerated, Serializable { + + private static final long serialVersionUID = 1L; + + public static final int _VERTICAL_COORDINATE_IS_NOT_REQUESTED = 0; + public static final int _VERTICAL_COORDINATE_IS_REQUESTED = 1; + + public static final VerticalRequested VERTICAL_COORDINATE_IS_NOT_REQUESTED = new VerticalRequested(_VERTICAL_COORDINATE_IS_NOT_REQUESTED); + public static final VerticalRequested VERTICAL_COORDINATE_IS_REQUESTED = new VerticalRequested(_VERTICAL_COORDINATE_IS_REQUESTED); + + private int value = -1; + + private VerticalRequested(int value) { + this.value = value; + } + + public static VerticalRequested fromInt(int type) { + switch (type) { + case _VERTICAL_COORDINATE_IS_NOT_REQUESTED: + return VERTICAL_COORDINATE_IS_NOT_REQUESTED; + case _VERTICAL_COORDINATE_IS_REQUESTED: + return VERTICAL_COORDINATE_IS_REQUESTED; + default: + throw new IllegalArgumentException("Invalid value: " + type); + } + } + + public int getValue() { + return value; + } + + @Override + public String toString() { + switch (value) { + case _VERTICAL_COORDINATE_IS_NOT_REQUESTED: + return "VERTICAL_COORDINATE_IS_NOT_REQUESTED"; + case _VERTICAL_COORDINATE_IS_REQUESTED: + return "VERTICAL_COORDINATE_IS_REQUESTED"; + default: + return ""; + } + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportAnswerImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportAnswerImpl.java new file mode 100644 index 000000000..f83511a58 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportAnswerImpl.java @@ -0,0 +1,239 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; + +import org.jdiameter.api.Message; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.events.avp.ExperimentalResultAvpImpl; + +import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.mobicents.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +/** + * Implementation for {@link LocationReportAnswer} + * + * @author Fernando Mendioroz + */ +public class LocationReportAnswerImpl extends DiameterMessageImpl implements LocationReportAnswer { + + /** + * @param message + */ + public LocationReportAnswerImpl(Message message) { + super(message); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasExperimentalResult() + */ + public boolean hasExperimentalResult() { + return hasAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getExperimentalResult() + */ + public ExperimentalResultAvp getExperimentalResult() { + return (ExperimentalResultAvp) getAvpAsCustom(DiameterAvpCodes.EXPERIMENTAL_RESULT, ExperimentalResultAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setExperimentalResult(net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp) + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult) { + addAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT, experimentalResult.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasGMLCAddress() + */ + @Override + public boolean hasGMLCAddress() { + return hasAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getGMLCAddress() + */ + @Override + public Address getGMLCAddress() { + return getAvpAsAddress(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setGMLCAddress(net.java.slee.resource.diameter.base.events.avp.Address) + */ + @Override + public void setGMLCAddress(Address gmlcAddress) { + addAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, gmlcAddress); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasLRAFlags() + */ + @Override + public boolean hasLRAFlags() { + return hasAvp(ELPAVPCodes.LRA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getLRAFlags() + */ + @Override + public long getLRAFlags() { + return getAvpAsUnsigned32(ELPAVPCodes.LRA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setLRAFlags(java.lang.Long) + */ + @Override + public void setLRAFlags(long plaFlags) { + addAvp(ELPAVPCodes.LRA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID, plaFlags); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasReportingPLMNList() + */ + @Override + public boolean hasReportingPLMNList() { + return hasAvp(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getReportingPLMNList() + */ + @Override + public ReportingPLMNListAvp getReportingPLMNList() { + return (ReportingPLMNListAvp) getAvpAsCustom(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, ReportingPLMNListAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setReportingPLMNList(net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp) + */ + @Override + public void setReportingPLMNList(ReportingPLMNListAvp reportingPLMNList) throws IllegalStateException { + addAvp(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, reportingPLMNList.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#hasLCSReferenceNumber() + */ + @Override + public boolean hasLCSReferenceNumber() { + return hasAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getLCSReferenceNumber() + */ + @Override + public byte[] getLCSReferenceNumber() { + return getAvpAsOctetString(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setLCSReferenceNumber(byte[]) + */ + @Override + public void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID, lcsReferenceNumber); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#getSupportedFeatureses() + */ + public SupportedFeaturesAvp[] getSupportedFeatureses() { + return (SupportedFeaturesAvp[]) getAvpsAsCustom(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, SupportedFeaturesAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setSupportedFeatures(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp) + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures) { + addAvp(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, supportedFeatures.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportAnswer#setSupportedFeatureses(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp[]) + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses) { + for (SupportedFeaturesAvp supportedFeatures : supportedFeatureses) { + setSupportedFeatures(supportedFeatures); + } + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getLongName() + */ + @Override + public String getLongName() { + return "Location-Report-Answer"; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getShortName() + */ + @Override + public String getShortName() { + return "LRA"; + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportRequestImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportRequestImpl.java new file mode 100644 index 000000000..2ef89ecf5 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/LocationReportRequestImpl.java @@ -0,0 +1,897 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; +import net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PseudonymIndicator; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSClass; +import net.java.slee.resource.diameter.slg.events.avp.LocationEvent; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.jdiameter.api.Message; + +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import org.mobicents.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +/** + * * Implementation for {@link LocationReportRequest} + * + * @author Fernando Mendioroz + */ +public class LocationReportRequestImpl extends DiameterMessageImpl implements LocationReportRequest { + + /** + * @param message + */ + public LocationReportRequestImpl(Message message) { + super(message); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLocationEvent() + */ + @Override + public boolean hasLocationEvent() { + return hasAvp(ELPAVPCodes.LOCATION_EVENT, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLocationEvent() + */ + @Override + public LocationEvent getLocationEvent() { + return (LocationEvent) getAvpAsEnumerated(ELPAVPCodes.LOCATION_EVENT, ELPAVPCodes.SLg_VENDOR_ID, LocationEvent.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLocationEvent(net.java.slee.resource.diameter.slg.events.avp.LocationEvent) + */ + @Override + public void setLocationEvent(LocationEvent locationEvent) throws IllegalStateException { + addAvp(ELPAVPCodes.LOCATION_EVENT, ELPAVPCodes.SLg_VENDOR_ID, locationEvent.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLCSEPSClientName() + */ + @Override + public boolean hasLCSEPSClientName() { + return hasAvp(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLCSEPSClientName() + */ + @Override + public LCSEPSClientNameAvp getLCSEPSClientName() { + return (LCSEPSClientNameAvp) getAvpAsCustom(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, LCSEPSClientNameAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLCSEPSClientName(net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp) + */ + @Override + public void setLCSEPSClientName(LCSEPSClientNameAvp lcsEPSClientName) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, lcsEPSClientName.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasUserName() + */ + @Override + public boolean hasUserName() { + return hasAvp(ELPAVPCodes.USER_NAME, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getUserName() + */ + @Override + public String getUserName() { + return getAvpAsUTF8String(ELPAVPCodes.USER_NAME, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setUserName(java.lang.String) + */ + @Override + public void setUserName(String imsi) throws IllegalStateException { + addAvp(ELPAVPCodes.USER_NAME, 0, imsi); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasMSISDN() + */ + @Override + public boolean hasMSISDN() { + return hasAvp(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getMSISDN() + */ + @Override + public byte[] getMSISDN() { + return getAvpAsOctetString(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setMSISDN(byte[]) + */ + @Override + public void setMSISDN(byte[] msisdn) throws IllegalStateException { + addAvp(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID, msisdn); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasIMEI() + */ + @Override + public boolean hasIMEI() { + return hasAvp(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getIMEI() + */ + @Override + public String getIMEI() { + return getAvpAsUTF8String(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setUserName(java.lang.String) + */ + @Override + public void setIMEI(String imei) throws IllegalStateException { + addAvp(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID, imei); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLocationEstimate() + */ + @Override + public boolean hasLocationEstimate() { + return hasAvp(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLocationEstimate() + */ + @Override + public byte[] getLocationEstimate() { + return getAvpAsOctetString(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLocationEstimate(byte[]) + */ + @Override + public void setLocationEstimate(byte[] locationEstimate) { + addAvp(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, locationEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasAccuracyFulfilmentIndicator() + */ + @Override + public boolean hasAccuracyFulfilmentIndicator() { + return hasAvp(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getAccuracyFulfilmentIndicator() + */ + @Override + public AccuracyFulfilmentIndicator getAccuracyFulfilmentIndicator() { + return (AccuracyFulfilmentIndicator) getAvpAsEnumerated(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, AccuracyFulfilmentIndicator.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setAccuracyFulfilmentIndicator(net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator) + */ + @Override + public void setAccuracyFulfilmentIndicator(AccuracyFulfilmentIndicator accuracyFulfilmentIndicator) { + addAvp(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, accuracyFulfilmentIndicator.getValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasAgeOfLocationEstimate() + */ + @Override + public boolean hasAgeOfLocationEstimate() { + return hasAvp(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getAgeOfLocationEstimate() + */ + @Override + public long getAgeOfLocationEstimate() { + return getAvpAsUnsigned32(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setAgeOfLocationEstimate(java.lang.Long) + */ + @Override + public void setAgeOfLocationEstimate(long ageOfLocationEstimate) { + addAvp(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, ageOfLocationEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasVelocityEstimate() + */ + @Override + public boolean hasVelocityEstimate() { + return hasAvp(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getVelocityEstimate() + */ + @Override + public byte[] getVelocityEstimate() { + return getAvpAsOctetString(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setVelocityEstimate(byte[]) + */ + @Override + public void setVelocityEstimate(byte[] velocityEstimate) { + addAvp(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, velocityEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasEUTRANPositioningData() + */ + @Override + public boolean hasEUTRANPositioningData() { + return hasAvp(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getEUTRANPositioningData() + */ + @Override + public byte[] getEUTRANPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setEUTRANPositioningData(byte[]) + */ + @Override + public void setEUTRANPositioningData(byte[] eutranPositioningData) { + addAvp(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, eutranPositioningData); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasECGI() + */ + @Override + public boolean hasECGI() { + return hasAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getECGI() + */ + @Override + public byte[] getECGI() { + return getAvpAsOctetString(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setECGI(byte[]) + */ + @Override + public void setECGI(byte[] ecgi) { + addAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID, ecgi); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasGERANPositioningInfo() + */ + @Override + public boolean hasGERANPositioningInfo() { + return hasAvp(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getGERANPositioningInfo() + */ + @Override + public GERANPositioningInfoAvp getGERANPositioningInfo() { + return (GERANPositioningInfoAvp) getAvpAsCustom(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, GERANPositioningInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setGERANPositioningInfo(net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp) + */ + @Override + public void setGERANPositioningInfo(GERANPositioningInfoAvp geranPositioningInfo) { + addAvp(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, geranPositioningInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasCellGlobalIdentity() + */ + @Override + public boolean hasCellGlobalIdentity() { + return hasAvp(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getCellGlobalIdentity() + */ + @Override + public byte[] getCellGlobalIdentity() { + return getAvpAsOctetString(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setCellGlobalIdentity(byte[]) + */ + @Override + public void setCellGlobalIdentity(byte[] cellGlobalIdentity) { + addAvp(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID, cellGlobalIdentity); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasUTRANPositioningInfo() + */ + @Override + public boolean hasUTRANPositioningInfo() { + return hasAvp(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getUTRANPositioningInfo() + */ + @Override + public UTRANPositioningInfoAvp getUTRANPositioningInfo() { + return (UTRANPositioningInfoAvp) getAvpAsCustom(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, UTRANPositioningInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setUTRANPositioningInfo(net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp) + */ + @Override + public void setUTRANPositioningInfo(UTRANPositioningInfoAvp utranPositioningInfo) { + addAvp(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, utranPositioningInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasServiceAreaIdentity() + */ + @Override + public boolean hasServiceAreaIdentity() { + return hasAvp(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getServiceAreaIdentity() + */ + @Override + public byte[] getServiceAreaIdentity() { + return getAvpAsOctetString(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setServiceAreaIdentity(byte[]) + */ + @Override + public void setServiceAreaIdentity(byte[] serviceAreaIdentity) { + addAvp(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID, serviceAreaIdentity); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLCSServiceTypeID() + */ + @Override + public boolean hasLCSServiceTypeID() { + return hasAvp(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLCSServiceTypeID() + */ + @Override + public long getLCSServiceTypeID() { + return getAvpAsUnsigned32(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLCSServiceTypeID(java.lang.Long) + */ + @Override + public void setLCSServiceTypeID(long lcsSupportedGADShapes) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID, lcsSupportedGADShapes); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasPseudonymIndicator() + */ + @Override + public boolean hasPseudonymIndicator() { + return hasAvp(ELPAVPCodes.PSEUDONYM_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getPseudonymIndicator() + */ + @Override + public PseudonymIndicator getPseudonymIndicator() { + return (PseudonymIndicator) getAvpAsEnumerated(ELPAVPCodes.PSEUDONYM_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, PseudonymIndicator.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setPseudonymIndicator(net.java.slee.resource.diameter.slg.events.avp.PseudonymIndicator) + */ + @Override + public void setPseudonymIndicator(PseudonymIndicator pseudonymIndicator) throws IllegalStateException { + addAvp(ELPAVPCodes.PSEUDONYM_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, pseudonymIndicator.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLCSQoSClass() + */ + @Override + public boolean hasLCSQoSClass() { + return hasAvp(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLCSQoSClass() + */ + @Override + public LCSQoSClass getLCSQoSClass() { + return (LCSQoSClass) getAvpAsEnumerated(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID, LCSQoSClass.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLCSQoSClass(net.java.slee.resource.diameter.slg.events.avp.LCSQoSClass) + */ + @Override + public void setLCSQoSClass(LCSQoSClass lcsQoSClass) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID, lcsQoSClass.getValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasServingNode() + */ + @Override + public boolean hasServingNode() { + return hasAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getServingNode() + */ + @Override + public ServingNodeAvp getServingNode() { + return (ServingNodeAvp) getAvpAsCustom(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, ServingNodeAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setServingNode(net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp) + */ + @Override + public void setServingNode(ServingNodeAvp servingNode) { + addAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, servingNode.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLRRFlags() + */ + @Override + public boolean hasLRRFlags() { + return hasAvp(ELPAVPCodes.LRR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLRRFlags() + */ + @Override + public long getLRRFlags() { + return getAvpAsUnsigned32(ELPAVPCodes.LRR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLRRFlags(java.lang.Long) + */ + @Override + public void setLRRFlags(long lrrFlags) throws IllegalStateException { + addAvp(ELPAVPCodes.LRR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID, lrrFlags); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasLCSReferenceNumber() + */ + @Override + public boolean hasLCSReferenceNumber() { + return hasAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getLCSReferenceNumber() + */ + @Override + public byte[] getLCSReferenceNumber() { + return getAvpAsOctetString(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setLCSReferenceNumber(byte[]) + */ + @Override + public void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID, lcsReferenceNumber); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasDeferredMTLRData() + */ + @Override + public boolean hasDeferredMTLRData() { + return hasAvp(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getDeferredMTLRData() + */ + @Override + public DeferredMTLRDataAvp getDeferredMTLRData() { + return (DeferredMTLRDataAvp) getAvpAsCustom(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, DeferredMTLRDataAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setDeferredMTLRData(net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp) + */ + @Override + public void setDeferredMTLRData(DeferredMTLRDataAvp deferredMTLRDataAvp) throws IllegalStateException { + addAvp(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, deferredMTLRDataAvp.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasGMLCAddress() + */ + @Override + public boolean hasGMLCAddress() { + return hasAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getGMLCAddress() + */ + @Override + public Address getGMLCAddress() { + return getAvpAsAddress(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setGMLCAddress(net.java.slee.resource.diameter.base.events.avp.Address) + */ + @Override + public void setGMLCAddress(Address gmlcAddress) { + addAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, gmlcAddress); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasReportingAmount() + */ + @Override + public boolean hasReportingAmount() { + return hasAvp(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getReportingAmount() + */ + @Override + public long getReportingAmount() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setReportingAmount(java.lang.Long) + */ + @Override + public void setReportingAmount(long reportingAmount) throws IllegalStateException { + addAvp(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID, reportingAmount); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasPeriodicLDRInformation() + */ + @Override + public boolean hasPeriodicLDRInformation() { + return hasAvp(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getPeriodicLDRInformation() + */ + @Override + public PeriodicLDRInfoAvp getPeriodicLDRInformation() { + return (PeriodicLDRInfoAvp) getAvpAsCustom(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, PeriodicLDRInfoAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setPeriodicLDRInformation(net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp) + */ + @Override + public void setPeriodicLDRInformation(PeriodicLDRInfoAvp periodicLDRInfoAvp) throws IllegalStateException { + addAvp(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, periodicLDRInfoAvp.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasESMLCCellInfo() + */ + @Override + public boolean hasESMLCCellInfo() { + return hasAvp(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getESMLCCellInfo() + */ + @Override + public ESMLCCellInfoAvp getESMLCCellInfo() { + return (ESMLCCellInfoAvp) getAvpAsCustom(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, ESMLCCellInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setESMLCCellInfo(net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp) + */ + @Override + public void setESMLCCellInfo(ESMLCCellInfoAvp esmlcCellInfo) { + addAvp(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, esmlcCellInfo.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#has1xRTTRCID() + */ + @Override + public boolean has1xRTTRCID() { + return hasAvp(ELPAVPCodes.ONExRTT_RCID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#get1xRTTRCID() + */ + @Override + public byte[] get1xRTTRCID() { + return getAvpAsOctetString(ELPAVPCodes.ONExRTT_RCID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#set1xRTTRCID(byte[]) + */ + @Override + public void set1xRTTRCID(byte[] onexRTTRCID) throws IllegalStateException { + addAvp(ELPAVPCodes.ONExRTT_RCID, ELPAVPCodes.SLg_VENDOR_ID, onexRTTRCID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasDelayedLocationReportingData() + */ + @Override + public boolean hasDelayedLocationReportingData() { + return hasAvp(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getDelayedLocationReportingData() + */ + @Override + public DelayedLocationReportingDataAvp getDelayedLocationReportingData() { + return (DelayedLocationReportingDataAvp) getAvpAsCustom(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, DelayedLocationReportingDataAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setDelayedLocationReportingData(net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp) + */ + @Override + public void setDelayedLocationReportingData(DelayedLocationReportingDataAvp delayedLocationReportingData) throws IllegalStateException { + addAvp(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, delayedLocationReportingData.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasCivicAddress() + */ + @Override + public boolean hasCivicAddress() { + return hasAvp(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getCivicAddress() + */ + @Override + public byte[] getCivicAddress() { + return getAvpAsOctetString(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setCivicAddress(byte[]) + */ + @Override + public void setCivicAddress(byte[] civicAddress) { + addAvp(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, civicAddress); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#hasBarometricPressure() + */ + @Override + public boolean hasBarometricPressure() { + return hasAvp(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getBarometricPressure() + */ + @Override + public long getBarometricPressure() { + return getAvpAsUnsigned32(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setBarometricPressure(java.lang.Long) + */ + @Override + public void setBarometricPressure(long barometricPressure) { + addAvp(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID, barometricPressure); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#getSupportedFeatureses() + */ + public SupportedFeaturesAvp[] getSupportedFeatureses() { + return (SupportedFeaturesAvp[]) getAvpsAsCustom(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, SupportedFeaturesAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setSupportedFeatures(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp) + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures) { + addAvp(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, supportedFeatures.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.LocationReportRequest#setSupportedFeatureses(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp[]) + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses) { + for (SupportedFeaturesAvp supportedFeatures : supportedFeatureses) { + setSupportedFeatures(supportedFeatures); + } + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getLongName() + */ + @Override + public String getLongName() { + return "Location-Report-Request"; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getShortName() + */ + @Override + public String getShortName() { + return "LRR"; + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationAnswerImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationAnswerImpl.java new file mode 100644 index 000000000..9a6706965 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationAnswerImpl.java @@ -0,0 +1,502 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.jdiameter.api.Message; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.events.avp.ExperimentalResultAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer; + +/** + * Implementation for {@link ProvideLocationAnswer} + * + * @author Fernando Mendioroz + */ +public class ProvideLocationAnswerImpl extends DiameterMessageImpl implements ProvideLocationAnswer { + + /** + * @param message + */ + public ProvideLocationAnswerImpl(Message message) { + super(message); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasExperimentalResult() + */ + public boolean hasExperimentalResult() { + return hasAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getExperimentalResult() + */ + public ExperimentalResultAvp getExperimentalResult() { + return (ExperimentalResultAvp) getAvpAsCustom(DiameterAvpCodes.EXPERIMENTAL_RESULT, ExperimentalResultAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setExperimentalResult(net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp) + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult) { + addAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT, experimentalResult.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasLocationEstimate() + */ + @Override + public boolean hasLocationEstimate() { + return hasAvp(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getLocationEstimate() + */ + @Override + public byte[] getLocationEstimate() { + return getAvpAsOctetString(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setLocationEstimate(byte[]) + */ + @Override + public void setLocationEstimate(byte[] locationEstimate) { + addAvp(ELPAVPCodes.LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, locationEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasAccuracyFulfilmentIndicator() + */ + @Override + public boolean hasAccuracyFulfilmentIndicator() { + return hasAvp(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getAccuracyFulfilmentIndicator() + */ + @Override + public AccuracyFulfilmentIndicator getAccuracyFulfilmentIndicator() { + return (AccuracyFulfilmentIndicator) getAvpAsEnumerated(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, AccuracyFulfilmentIndicator.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setAccuracyFulfilmentIndicator(net.java.slee.resource.diameter.slg.events.avp.AccuracyFulfilmentIndicator) + */ + @Override + public void setAccuracyFulfilmentIndicator(AccuracyFulfilmentIndicator accuracyFulfilmentIndicator) { + addAvp(ELPAVPCodes.ACCURACY_FULFILMENT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, accuracyFulfilmentIndicator.getValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasAgeOfLocationEstimate() + */ + @Override + public boolean hasAgeOfLocationEstimate() { + return hasAvp(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getAgeOfLocationEstimate() + */ + @Override + public long getAgeOfLocationEstimate() { + return getAvpAsUnsigned32(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setAgeOfLocationEstimate(java.lang.Long) + */ + @Override + public void setAgeOfLocationEstimate(long ageOfLocationEstimate) { + addAvp(ELPAVPCodes.AGE_OF_LOCATION_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, ageOfLocationEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasVelocityEstimate() + */ + @Override + public boolean hasVelocityEstimate() { + return hasAvp(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getVelocityEstimate() + */ + @Override + public byte[] getVelocityEstimate() { + return getAvpAsOctetString(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setVelocityEstimate(byte[]) + */ + @Override + public void setVelocityEstimate(byte[] velocityEstimate) { + addAvp(ELPAVPCodes.VELOCITY_ESTIMATE, ELPAVPCodes.SLg_VENDOR_ID, velocityEstimate); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasEUTRANPositioningData() + */ + @Override + public boolean hasEUTRANPositioningData() { + return hasAvp(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getEUTRANPositioningData() + */ + @Override + public byte[] getEUTRANPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setEUTRANPositioningData(byte[]) + */ + @Override + public void setEUTRANPositioningData(byte[] eutranPositioningData) { + addAvp(ELPAVPCodes.EUTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, eutranPositioningData); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasECGI() + */ + @Override + public boolean hasECGI() { + return hasAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getECGI() + */ + @Override + public byte[] getECGI() { + return getAvpAsOctetString(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setECGI(byte[]) + */ + @Override + public void setECGI(byte[] ecgi) { + addAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID, ecgi); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasGERANPositioningInfo() + */ + @Override + public boolean hasGERANPositioningInfo() { + return hasAvp(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getGERANPositioningInfo() + */ + @Override + public GERANPositioningInfoAvp getGERANPositioningInfo() { + return (GERANPositioningInfoAvp) getAvpAsCustom(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, GERANPositioningInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setGERANPositioningInfo(net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp) + */ + @Override + public void setGERANPositioningInfo(GERANPositioningInfoAvp geranPositioningInfo) { + addAvp(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, geranPositioningInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasCellGlobalIdentity() + */ + @Override + public boolean hasCellGlobalIdentity() { + return hasAvp(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getCellGlobalIdentity() + */ + @Override + public byte[] getCellGlobalIdentity() { + return getAvpAsOctetString(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setCellGlobalIdentity(byte[]) + */ + @Override + public void setCellGlobalIdentity(byte[] cellGlobalIdentity) { + addAvp(ELPAVPCodes.CELL_GLOBAL_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID, cellGlobalIdentity); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasUTRANPositioningInfo() + */ + @Override + public boolean hasUTRANPositioningInfo() { + return hasAvp(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getUTRANPositioningInfo() + */ + @Override + public UTRANPositioningInfoAvp getUTRANPositioningInfo() { + return (UTRANPositioningInfoAvp) getAvpAsCustom(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, UTRANPositioningInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setUTRANPositioningInfo(net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp) + */ + @Override + public void setUTRANPositioningInfo(UTRANPositioningInfoAvp utranPositioningInfo) { + addAvp(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, utranPositioningInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasServiceAreaIdentity() + */ + @Override + public boolean hasServiceAreaIdentity() { + return hasAvp(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getServiceAreaIdentity() + */ + @Override + public byte[] getServiceAreaIdentity() { + return getAvpAsOctetString(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setServiceAreaIdentity(byte[]) + */ + @Override + public void setServiceAreaIdentity(byte[] serviceAreaIdentity) { + addAvp(ELPAVPCodes.SERVICE_AREA_IDENTITY, ELPAVPCodes.SLg_VENDOR_ID, serviceAreaIdentity); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasServingNode() + */ + @Override + public boolean hasServingNode() { + return hasAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getServingNode() + */ + @Override + public ServingNodeAvp getServingNode() { + return (ServingNodeAvp) getAvpAsCustom(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, ServingNodeAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setServingNode(net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp) + */ + @Override + public void setServingNode(ServingNodeAvp servingNode) { + addAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, servingNode.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasPLAFlags() + */ + @Override + public boolean hasPLAFlags() { + return hasAvp(ELPAVPCodes.PLA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getPLAFlags() + */ + @Override + public long getPLAFlags() { + return getAvpAsUnsigned32(ELPAVPCodes.PLA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setPLAFlags(java.lang.Long) + */ + @Override + public void setPLAFlags(long plaFlags) { + addAvp(ELPAVPCodes.PLA_FLAGS, ELPAVPCodes.SLg_VENDOR_ID, plaFlags); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasESMLCCellInfo() + */ + @Override + public boolean hasESMLCCellInfo() { + return hasAvp(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getESMLCCellInfo() + */ + @Override + public ESMLCCellInfoAvp getESMLCCellInfo() { + return (ESMLCCellInfoAvp) getAvpAsCustom(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, ESMLCCellInfoAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setESMLCCellInfo(net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp) + */ + @Override + public void setESMLCCellInfo(ESMLCCellInfoAvp esmlcCellInfo) { + addAvp(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, esmlcCellInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasCivicAddress() + */ + @Override + public boolean hasCivicAddress() { + return hasAvp(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getCivicAddress() + */ + @Override + public byte[] getCivicAddress() { + return getAvpAsOctetString(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setCivicAddress(byte[]) + */ + @Override + public void setCivicAddress(byte[] civicAddress) { + addAvp(ELPAVPCodes.CIVIC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, civicAddress); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#hasBarometricPressure() + */ + @Override + public boolean hasBarometricPressure() { + return hasAvp(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getBarometricPressure() + */ + @Override + public long getBarometricPressure() { + return getAvpAsUnsigned32(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setBarometricPressure(java.lang.Long) + */ + @Override + public void setBarometricPressure(long barometricPressure) { + addAvp(ELPAVPCodes.BAROMETRIC_PRESSURE, ELPAVPCodes.SLg_VENDOR_ID, barometricPressure); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#getSupportedFeatureses() + */ + public SupportedFeaturesAvp[] getSupportedFeatureses() { + return (SupportedFeaturesAvp[]) getAvpsAsCustom(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, SupportedFeaturesAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setSupportedFeatures(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp) + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures) { + addAvp(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, supportedFeatures.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer#setSupportedFeatureses(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp[]) + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses) { + for (SupportedFeaturesAvp supportedFeatures : supportedFeatureses) { + setSupportedFeatures(supportedFeatures); + } + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getLongName() + */ + @Override + public String getLongName() { + return "Provide-Location-Answer"; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl#getShortName() + */ + @Override + public String getShortName() { + return "PLA"; + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java new file mode 100644 index 000000000..7dc45a36a --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java @@ -0,0 +1,602 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events; + +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.SLgLocationType; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSClientType; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.VelocityRequested; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.jdiameter.api.Message; + +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSQoSAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +/** + * Implementation for {@link ProvideLocationRequest} + * + * @author Fernando Mendioroz + */ +public class ProvideLocationRequestImpl extends DiameterMessageImpl implements ProvideLocationRequest { + + /** + * @param message + */ + public ProvideLocationRequestImpl(Message message) { + super(message); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasSLgLocationType() + */ + @Override + public boolean hasSLgLocationType() { + return hasAvp(ELPAVPCodes.SLg_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getSLgLocationType() + */ + @Override + public SLgLocationType getSLgLocationType() { + return (SLgLocationType) getAvpAsEnumerated(ELPAVPCodes.SLg_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID, SLgLocationType.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setSLgLocationType(net.java.slee.resource.diameter.slg.events.avp.SLgLocationType) + */ + @Override + public void setSLgLocationType(SLgLocationType slgLocationType) throws IllegalStateException { + addAvp(ELPAVPCodes.SLg_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID, slgLocationType.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasUserName() + */ + @Override + public boolean hasUserName() { + return hasAvp(ELPAVPCodes.USER_NAME, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getUserName() + */ + @Override + public String getUserName() { + return getAvpAsUTF8String(ELPAVPCodes.USER_NAME, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setUserName(java.lang.String) + */ + @Override + public void setUserName(String imsi) throws IllegalStateException { + addAvp(ELPAVPCodes.USER_NAME, 0, imsi); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasMSISDN() + */ + @Override + public boolean hasMSISDN() { + return hasAvp(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getMSISDN() + */ + @Override + public byte[] getMSISDN() { + return getAvpAsOctetString(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setMSISDN(byte[]) + */ + @Override + public void setMSISDN(byte[] msisdn) throws IllegalStateException { + addAvp(ELPAVPCodes.MSISDN, ELPAVPCodes.SLg_VENDOR_ID, msisdn); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasIMEI() + */ + @Override + public boolean hasIMEI() { + return hasAvp(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getUserName() + */ + @Override + public String getIMEI() { + return getAvpAsUTF8String(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setUserName(java.lang.String) + */ + @Override + public void setIMEI(String imei) throws IllegalStateException { + addAvp(ELPAVPCodes.IMEI, ELPAVPCodes.SLg_VENDOR_ID, imei); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSEPSClientName() + */ + @Override + public boolean hasLCSEPSClientName() { + return hasAvp(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSEPSClientName() + */ + @Override + public LCSEPSClientNameAvp getLCSEPSClientName() { + return (LCSEPSClientNameAvp) getAvpAsCustom(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, LCSEPSClientNameAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSEPSClientName(net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp) + */ + @Override + public void setLCSEPSClientName(LCSEPSClientNameAvp lcsEPSClientName) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, lcsEPSClientName.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSClientType() + */ + @Override + public boolean hasLCSClientType() { + return hasAvp(ELPAVPCodes.LCS_CLIENT_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSClientType() + */ + @Override + public LCSClientType getLCSClientType() { + return (LCSClientType) getAvpAsEnumerated(ELPAVPCodes.LCS_CLIENT_TYPE, ELPAVPCodes.SLg_VENDOR_ID, LCSClientType.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSClientType(net.java.slee.resource.diameter.slg.events.avp.LCSClientType) + */ + @Override + public void setLCSClientType(LCSClientType lcsClientType) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_CLIENT_TYPE, ELPAVPCodes.SLg_VENDOR_ID, lcsClientType.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSRequestorName() + */ + @Override + public boolean hasLCSRequestorName() { + return hasAvp(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSRequestorName() + */ + @Override + public LCSRequestorNameAvp getLCSRequestorName() { + return (LCSRequestorNameAvp) getAvpAsCustom(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, LCSRequestorNameAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSRequestorName(net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp) + */ + @Override + public void setLCSRequestorName(LCSRequestorNameAvp lcsRequestorName) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, lcsRequestorName.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#LCSPriority() + */ + @Override + public boolean hasLCSPriority() { + return hasAvp(ELPAVPCodes.LCS_PRIORITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSPriority() + */ + @Override + public long getLCSPriority() { + return getAvpAsUnsigned32(ELPAVPCodes.LCS_PRIORITY, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSPriority(java.lang.Long) + */ + @Override + public void setLCSPriority(long lcsPriority) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_PRIORITY, ELPAVPCodes.SLg_VENDOR_ID, lcsPriority); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSQoS() + */ + @Override + public boolean hasLCSQoS() { + return hasAvp(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSQoS() + */ + @Override + public LCSQoSAvp getLCSQoS() { + return (LCSQoSAvp) getAvpAsCustom(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, LCSQoSAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSQoS(net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp) + */ + @Override + public void setLCSQoS(LCSQoSAvp lcsQoS) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, lcsQoS.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasVelocityRequested() + */ + @Override + public boolean hasVelocityRequested() { + return hasAvp(ELPAVPCodes.VELOCITY_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getVelocityRequested() + */ + @Override + public VelocityRequested getVelocityRequested() { + return (VelocityRequested) getAvpAsEnumerated(ELPAVPCodes.VELOCITY_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID, VelocityRequested.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setVelocityRequested(net.java.slee.resource.diameter.slg.events.avp.VelocityRequested) + */ + @Override + public void setVelocityRequested(VelocityRequested velocityRequested) throws IllegalStateException { + addAvp(ELPAVPCodes.VELOCITY_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID, velocityRequested.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSSupportedGADShapes() + */ + @Override + public boolean hasLCSSupportedGADShapes() { + return hasAvp(ELPAVPCodes.SUPPORTED_GAD_SHAPES, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSSupportedGADShapes() + */ + @Override + public long getLCSSupportedGADShapes() { + return getAvpAsUnsigned32(ELPAVPCodes.SUPPORTED_GAD_SHAPES, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSSupportedGADShapes(java.lang.Long) + */ + @Override + public void setLCSSupportedGADShapes(long lcsSupportedGADShapes) throws IllegalStateException { + addAvp(ELPAVPCodes.SUPPORTED_GAD_SHAPES, ELPAVPCodes.SLg_VENDOR_ID, lcsSupportedGADShapes); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSServiceTypeID() + */ + @Override + public boolean hasLCSServiceTypeID() { + return hasAvp(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSServiceTypeID() + */ + @Override + public long getLCSServiceTypeID() { + return getAvpAsUnsigned32(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSServiceTypeID(java.lang.Long) + */ + @Override + public void setLCSServiceTypeID(long lcsSupportedGADShapes) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_SERVICE_TYPE_ID, ELPAVPCodes.SLg_VENDOR_ID, lcsSupportedGADShapes); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSCodeword() + */ + @Override + public boolean hasLCSCodeword() { + return hasAvp(ELPAVPCodes.LCS_CODEWORD, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSCodeword() + */ + @Override + public String getLCSCodeword() { + return getAvpAsUTF8String(ELPAVPCodes.LCS_CODEWORD, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSCodeword(java.lang.String) + */ + @Override + public void setLCSCodeword(String lcsCodeword) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_CODEWORD, ELPAVPCodes.SLg_VENDOR_ID, lcsCodeword); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSPrivacyCheckNonSession() + */ + @Override + public boolean hasLCSPrivacyCheckNonSession() { + return hasAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSPrivacyCheckNonSession() + */ + @Override + public LCSPrivacyCheckNonSessionAvp getLCSPrivacyCheckNonSession() { + return (LCSPrivacyCheckNonSessionAvp) getAvpAsCustom(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, LCSPrivacyCheckNonSessionAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSPrivacyCheckNonSession(net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp) + */ + @Override + public void setLCSPrivacyCheckNonSession(LCSPrivacyCheckNonSessionAvp lcsPrivacyCheckNonSession) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, lcsPrivacyCheckNonSession.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSPrivacyCheckSession() + */ + @Override + public boolean hasLCSPrivacyCheckSession() { + return hasAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSPrivacyCheckSessionAvp() + */ + @Override + public LCSPrivacyCheckSessionAvp getLCSPrivacyCheckSession() { + return (LCSPrivacyCheckSessionAvp) getAvpAsCustom(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, LCSPrivacyCheckSessionAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSPrivacyCheckSession(net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp) + */ + @Override + public void setLCSPrivacyCheckSession(LCSPrivacyCheckSessionAvp lcsPrivacyCheckSession) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, lcsPrivacyCheckSession.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasServiceSelection() + */ + @Override + public boolean hasServiceSelection() { + return hasAvp(ELPAVPCodes.SERVICE_SELECTION, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getServiceSelection() + */ + @Override + public String getServiceSelection() { + return getAvpAsUTF8String(ELPAVPCodes.SERVICE_SELECTION, 0); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setServiceSelection(java.lang.String) + */ + @Override + public void setServiceSelection(String serviceSelection) throws IllegalStateException { + addAvp(ELPAVPCodes.SERVICE_SELECTION, 0, serviceSelection); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasDeferredLocationType() + */ + @Override + public boolean hasDeferredLocationType() { + return hasAvp(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getDeferredLocationType() + */ + @Override + public long getDeferredLocationType() { + return getAvpAsUnsigned32(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setDeferredLocationType(java.lang.Long) + */ + @Override + public void setDeferredLocationType(long lcsDeferredLocationType) throws IllegalStateException { + addAvp(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID, lcsDeferredLocationType); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasPLRFlags() + */ + @Override + public boolean hasPLRFlags() { + return hasAvp(ELPAVPCodes.PLR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getPLRFlags() + */ + @Override + public long getPLRFlags() { + return getAvpAsUnsigned32(ELPAVPCodes.PLR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setPLRFlags(java.lang.Long) + */ + @Override + public void setPLRFlags(long plrFlags) throws IllegalStateException { + addAvp(ELPAVPCodes.PLR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID, plrFlags); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getSupportedFeatureses() + */ + public SupportedFeaturesAvp[] getSupportedFeatureses() { + return (SupportedFeaturesAvp[]) getAvpsAsCustom(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, SupportedFeaturesAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setSupportedFeatures(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp) + */ + public void setSupportedFeatures(SupportedFeaturesAvp supportedFeatures) { + addAvp(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, supportedFeatures.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setSupportedFeatureses(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp[]) + */ + public void setSupportedFeatureses(SupportedFeaturesAvp[] supportedFeatureses) { + for (SupportedFeaturesAvp supportedFeatures : supportedFeatureses) { + setSupportedFeatures(supportedFeatures); + } + } + + @Override + public String getLongName() { + return "Provide-Location-Request"; + } + + @Override + public String getShortName() { + return "PLR"; + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AdditionalAreaAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AdditionalAreaAvpImpl.java new file mode 100644 index 000000000..5d4a1178a --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AdditionalAreaAvpImpl.java @@ -0,0 +1,69 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +public class AdditionalAreaAvpImpl extends GroupedAvpImpl implements AdditionalAreaAvp { + + public AdditionalAreaAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public AdditionalAreaAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasAreaType() { + return hasAvp(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getAreaType() { + return getAvpAsUnsigned32(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setAreaType(long additionalAreaType) { + addAvp(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID, additionalAreaType); + } + + public boolean hasAreaIdentification() { + return hasAvp(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getAreaIdentification() { + return getAvpAsOctetString(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setAreaIdentification(byte[] additionalAreaIdentification) { + addAvp(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID, additionalAreaIdentification); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaAvpImpl.java new file mode 100644 index 000000000..849919c17 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaAvpImpl.java @@ -0,0 +1,75 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; + +/** + * Implementation for {@link AreaAvp} + * + * @author Fernando Mendioroz + */ +public class AreaAvpImpl extends GroupedAvpImpl implements AreaAvp { + + public AreaAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public AreaAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasAreaType() { + return hasAvp(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getAreaType() { + return getAvpAsUnsigned32(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setAreaType(long areaType) { + addAvp(ELPAVPCodes.AREA_TYPE, ELPAVPCodes.SLg_VENDOR_ID, areaType); + } + + public boolean hasAreaIdentification() { + return hasAvp(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getAreaIdentification() { + return getAvpAsOctetString(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setAreaIdentification(byte[] areaIdentification) { + addAvp(ELPAVPCodes.AREA_IDENTIFICATION, ELPAVPCodes.SLg_VENDOR_ID, areaIdentification); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaDefinitionAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaDefinitionAvpImpl.java new file mode 100644 index 000000000..8cdcb0ca6 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaDefinitionAvpImpl.java @@ -0,0 +1,76 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; + +/** + * Implementation for {@link AreaDefinitionAvp} + * + * @author Fernando Mendioroz + */ +public class AreaDefinitionAvpImpl extends GroupedAvpImpl implements AreaDefinitionAvp { + + public AreaDefinitionAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public AreaDefinitionAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasArea() { + return hasAvp(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public AreaAvp getArea() { + return (AreaAvp) getAvpAsCustom(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, AreaAvpImpl.class); + } + + public void setArea(AreaAvp area) { + addAvp(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, area.byteArrayValue()); + } + + public boolean hasAdditionalArea() { + return hasAvp(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public AdditionalAreaAvp getAdditionalArea() { + return (AdditionalAreaAvp) getAvpAsCustom(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, AdditionalAreaAvpImpl.class); + } + + public void setAdditionalArea(AdditionalAreaAvp additionalAreaAvp) { + addAvp(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, additionalAreaAvp.byteArrayValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaEventInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaEventInfoAvpImpl.java new file mode 100644 index 000000000..b338acd47 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/AreaEventInfoAvpImpl.java @@ -0,0 +1,136 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.OccurrenceInfo; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; + +/** + * Implementation for {@link AreaEventInfoAvp} + * + * @author Fernando Mendioroz + */ +public class AreaEventInfoAvpImpl extends GroupedAvpImpl implements AreaEventInfoAvp { + + public AreaEventInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public AreaEventInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasAreaDefinition() { + return hasAvp(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public AreaDefinitionAvp getAreaDefinition() { + return (AreaDefinitionAvp) getAvpAsCustom(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, AreaDefinitionAvpImpl.class); + } + + public void setAreaDefinition(AreaDefinitionAvp areaDefinition){ + addAvp(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, areaDefinition.byteArrayValue()); + } + + public boolean hasOccurrenceInfo() { + return hasAvp(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + public OccurrenceInfo getOccurrenceInfo() { + return (OccurrenceInfo) getAvpAsEnumerated(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID, OccurrenceInfo.class); + } + + public void setOccurrenceInfo(OccurrenceInfo occurrenceInfo) { + addAvp(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID, occurrenceInfo.getValue()); + } + + public boolean hasIntervalTime() { + return hasAvp(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getIntervalTime() { + return getAvpAsUnsigned32(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setIntervalTime(long intervalTime) { + addAvp(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID, intervalTime); + } + + public boolean hasMaximumInterval() { + return hasAvp(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getMaximumInterval() { + return getAvpAsUnsigned32(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setMaximumInterval(long maximumInterval) { + addAvp(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID, maximumInterval); + } + + public boolean hasSamplingInterval() { + return hasAvp(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getSamplingInterval() { + return getAvpAsUnsigned32(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setSamplingInterval(long samplingInterval) { + addAvp(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID, samplingInterval); + } + + public boolean hasReportDuration() { + return hasAvp(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportDuration() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportDuration(long reportDuration) { + addAvp(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID, reportDuration); + } + + public boolean hasReportingLocationRequirements() { + return hasAvp(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportingLocationRequirements() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportingLocationRequirements(long reportingLocationRequirements) { + addAvp(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID, reportingLocationRequirements); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvpImpl.java new file mode 100644 index 000000000..cb298f06e --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DeferredMTLRDataAvpImpl.java @@ -0,0 +1,87 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; + +/** + * Implementation for {@link DeferredMTLRDataAvp} + * + * @author Fernando Mendioroz + */ +public class DeferredMTLRDataAvpImpl extends GroupedAvpImpl implements DeferredMTLRDataAvp { + + public DeferredMTLRDataAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public DeferredMTLRDataAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasDeferredLocationType() { + return hasAvp(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getDeferredLocationType() { + return getAvpAsUnsigned32(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setDeferredLocationType(long deferredLocationType) { + addAvp(ELPAVPCodes.DEFERRED_LOCATION_TYPE, ELPAVPCodes.SLg_VENDOR_ID, deferredLocationType); + } + + public boolean hasTerminationCause() { + return hasAvp(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getTerminationCause() { + return getAvpAsUnsigned32(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setTerminationCause(long terminationCause) { + addAvp(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID, terminationCause); + } + + public boolean hasServingNode() { + return hasAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public ServingNodeAvp getServingNode() { + return (ServingNodeAvp) getAvpAsCustom(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, ServingNodeAvpImpl.class); + } + + public void setServingNode(ServingNodeAvp servingNode) { + addAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, servingNode.byteArrayValue()); + } +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvpImpl.java new file mode 100644 index 000000000..a2d71ea5f --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/DelayedLocationReportingDataAvpImpl.java @@ -0,0 +1,76 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; + +/** + * Implementation for {@link DelayedLocationReportingDataAvp} + * + * @author Fernando Mendioroz + */ +public class DelayedLocationReportingDataAvpImpl extends GroupedAvpImpl implements DelayedLocationReportingDataAvp { + + public DelayedLocationReportingDataAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public DelayedLocationReportingDataAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasTerminationCause() { + return hasAvp(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getTerminationCause() { + return getAvpAsInteger32(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setTerminationCause(long terminationCause) { + addAvp(ELPAVPCodes.TERMINATION_CAUSE, ELPAVPCodes.SLg_VENDOR_ID, terminationCause); + } + + public boolean hasServingNode() { + return hasAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public ServingNodeAvp getServingNode() { + return (ServingNodeAvp) getAvpAsCustom(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, ServingNodeAvpImpl.class); + } + + public void setServingNode(ServingNodeAvp servingNode) { + addAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, servingNode.byteArrayValue()); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvpImpl.java new file mode 100644 index 000000000..fe5a08ff5 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ESMLCCellInfoAvpImpl.java @@ -0,0 +1,74 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; + +/** + * Implementation for {@link ESMLCCellInfoAvp} + * + * @author Fernando Mendioroz + */ +public class ESMLCCellInfoAvpImpl extends GroupedAvpImpl implements ESMLCCellInfoAvp { + + public ESMLCCellInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public ESMLCCellInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasECGI() { + return hasAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getECGI() { + return getAvpAsOctetString(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setECGI(byte[] ecgi) { + addAvp(ELPAVPCodes.ECGI, ELPAVPCodes.SLg_VENDOR_ID, ecgi); + } + + public boolean hasCellPortionID() { + return hasAvp(ELPAVPCodes.CELL_PORTION_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getCellPortionID() { + return getAvpAsUnsigned32(ELPAVPCodes.CELL_PORTION_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setCellPortionID(long cellPortionId) { + addAvp(ELPAVPCodes.CELL_PORTION_ID, ELPAVPCodes.SLg_VENDOR_ID, cellPortionId); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvpImpl.java new file mode 100644 index 000000000..41653d910 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/GERANPositioningInfoAvpImpl.java @@ -0,0 +1,75 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; + +/** + * Implementation for {@link GERANPositioningInfoAvp} + * + * @author Fernando Mendioroz + */ +public class GERANPositioningInfoAvpImpl extends GroupedAvpImpl implements GERANPositioningInfoAvp { + + public GERANPositioningInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public GERANPositioningInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasGERANPositioningData() { + return hasAvp(ELPAVPCodes.GERAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getGERANPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.GERAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setGERANPositioningData(byte[] geranPositioningData) { + addAvp(ELPAVPCodes.GERAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, geranPositioningData); + } + + public boolean hasGERANGANSSPositioningData() { + return hasAvp(ELPAVPCodes.GERAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getGERANGANSSPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.GERAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setGERANGANSSPositioningData(byte[] geranGANSSPositioningData) { + addAvp(ELPAVPCodes.GERAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, geranGANSSPositioningData); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvpImpl.java new file mode 100644 index 000000000..906db4ebf --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSEPSClientNameAvpImpl.java @@ -0,0 +1,75 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSFormatIndicator; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; + +/** + * Implementation for {@link LCSEPSClientNameAvp} + * + * @author Fernando Mendioroz + */ +public class LCSEPSClientNameAvpImpl extends GroupedAvpImpl implements LCSEPSClientNameAvp { + + public LCSEPSClientNameAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public LCSEPSClientNameAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLCSNameString() { + return hasAvp(ELPAVPCodes.LCS_NAME_STRING, ELPAVPCodes.SLg_VENDOR_ID); + } + + public String getLCSNameString() { + return getAvpAsUTF8String(ELPAVPCodes.LCS_NAME_STRING, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setLCSNameString(String lcsNameString) { + addAvp(ELPAVPCodes.LCS_NAME_STRING, ELPAVPCodes.SLg_VENDOR_ID, lcsNameString); + } + + public boolean hasLCSFormatIndicator() { + return hasAvp(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + public LCSFormatIndicator getLCSFormatIndicator() { + return (LCSFormatIndicator) getAvpAsEnumerated(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, LCSFormatIndicator.class); + } + + public void setLCSFormatIndicator(LCSFormatIndicator lcsFormatIndicator) { + addAvp(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, lcsFormatIndicator.getValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvpImpl.java new file mode 100644 index 000000000..8ce7e53a1 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckNonSessionAvpImpl.java @@ -0,0 +1,63 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheck; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; + +/** + * Implementation for {@link LCSPrivacyCheckNonSessionAvp} + * + * @author Fernando Mendioroz + */ +public class LCSPrivacyCheckNonSessionAvpImpl extends GroupedAvpImpl implements LCSPrivacyCheckNonSessionAvp { + + public LCSPrivacyCheckNonSessionAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public LCSPrivacyCheckNonSessionAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLCSPrivacyCheck() { + return hasAvp(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID); + } + + public LCSPrivacyCheck getLCSPrivacyCheck() { + return (LCSPrivacyCheck) getAvpAsEnumerated(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID, LCSPrivacyCheck.class); + } + + public void setLCSPrivacyCheck(LCSPrivacyCheck lcsPrivacyCheck) { + addAvp(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID, lcsPrivacyCheck.getValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvpImpl.java new file mode 100644 index 000000000..298d2729c --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSPrivacyCheckSessionAvpImpl.java @@ -0,0 +1,63 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheck; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; + +/** + * Implementation for {@link LCSPrivacyCheckSessionAvp} + * + * @author Fernando Mendioroz + */ +public class LCSPrivacyCheckSessionAvpImpl extends GroupedAvpImpl implements LCSPrivacyCheckSessionAvp { + + public LCSPrivacyCheckSessionAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public LCSPrivacyCheckSessionAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLCSPrivacyCheck() { + return hasAvp(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID); + } + + public LCSPrivacyCheck getLCSPrivacyCheck() { + return (LCSPrivacyCheck) getAvpAsEnumerated(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID, LCSPrivacyCheck.class); + } + + public void setLCSPrivacyCheck(LCSPrivacyCheck lcsPrivacyCheck) { + addAvp(ELPAVPCodes.LCS_PRIVACY_CHECK, ELPAVPCodes.SLg_VENDOR_ID, lcsPrivacyCheck.getValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSQoSAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSQoSAvpImpl.java new file mode 100644 index 000000000..2e1735df1 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSQoSAvpImpl.java @@ -0,0 +1,114 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSClass; +import net.java.slee.resource.diameter.slg.events.avp.VerticalRequested; +import net.java.slee.resource.diameter.slg.events.avp.ResponseTime; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +/** + * Implementation for {@link LCSQoSAvp} + * + * @author Fernando Mendioroz + */ +public class LCSQoSAvpImpl extends GroupedAvpImpl implements LCSQoSAvp { + + public LCSQoSAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public LCSQoSAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLCSQoSClass() { + return hasAvp(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public LCSQoSClass getLCSQoSClass() { + return (LCSQoSClass) getAvpAsEnumerated(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID, LCSQoSClass.class); + } + + public void setLCSQoSClass(LCSQoSClass lcsQoSClass) { + addAvp(ELPAVPCodes.LCS_QoS_CLASS, ELPAVPCodes.SLg_VENDOR_ID, lcsQoSClass.getValue()); + } + + public boolean hasHorizontalAccuracy() { + return hasAvp(ELPAVPCodes.HORIZONTAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getHorizontalAccuracy() { + return getAvpAsUnsigned32(ELPAVPCodes.HORIZONTAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setHorizontalAccuracy(long horizontalAccuracy) { + addAvp(ELPAVPCodes.HORIZONTAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID, horizontalAccuracy); + } + + public boolean hasVerticalAccuracy() { + return hasAvp(ELPAVPCodes.VERTICAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getVerticalAccuracy() { + return getAvpAsUnsigned32(ELPAVPCodes.VERTICAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setVerticalAccuracy(long verticalAccuracy) { + addAvp(ELPAVPCodes.VERTICAL_ACCURACY, ELPAVPCodes.SLg_VENDOR_ID, verticalAccuracy); + } + + public boolean hasVerticalRequested() { + return hasAvp(ELPAVPCodes.VERTICAL_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID); + } + + public VerticalRequested getVerticalRequested() { + return (VerticalRequested) getAvpAsEnumerated(ELPAVPCodes.VERTICAL_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID, VerticalRequested.class); + } + + public void setVerticalRequested(VerticalRequested verticalRequested) { + addAvp(ELPAVPCodes.VERTICAL_REQUESTED, ELPAVPCodes.SLg_VENDOR_ID, verticalRequested.getValue()); + } + + public boolean hasResponseTime() { + return hasAvp(ELPAVPCodes.RESPONSE_TIME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public ResponseTime getResponseTime() { + return (ResponseTime) getAvpAsEnumerated(ELPAVPCodes.RESPONSE_TIME, ELPAVPCodes.SLg_VENDOR_ID, ResponseTime.class); + } + + public void setResponseTime(ResponseTime responseTime) { + addAvp(ELPAVPCodes.RESPONSE_TIME, ELPAVPCodes.SLg_VENDOR_ID, responseTime.getValue()); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvpImpl.java new file mode 100644 index 000000000..3bb2549a3 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/LCSRequestorNameAvpImpl.java @@ -0,0 +1,76 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSFormatIndicator; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; + +/** + * Implementation for {@link LCSRequestorNameAvp} + * + * @author Fernando Mendioroz + */ +public class LCSRequestorNameAvpImpl extends GroupedAvpImpl implements LCSRequestorNameAvp { + + public LCSRequestorNameAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public LCSRequestorNameAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLCSRequestorIDString() { + return hasAvp(ELPAVPCodes.LCS_REQUESTOR_ID_STRING, ELPAVPCodes.SLg_VENDOR_ID); + } + + public String getLCSRequestorIDString() { + return getAvpAsUTF8String(ELPAVPCodes.LCS_REQUESTOR_ID_STRING, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setLCSRequestorIDString(String lcsRequestorIDString) { + addAvp(ELPAVPCodes.LCS_REQUESTOR_ID_STRING, ELPAVPCodes.SLg_VENDOR_ID, lcsRequestorIDString); + } + + public boolean hasLCSFormatIndicator() { + return hasAvp(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + public LCSFormatIndicator getLCSFormatIndicator() { + return (LCSFormatIndicator) getAvpAsEnumerated(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, LCSFormatIndicator.class); + } + + public void setLCSFormatIndicator(LCSFormatIndicator lcsFormatIndicator) { + addAvp(ELPAVPCodes.LCS_FORMAT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, lcsFormatIndicator.getValue()); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/MotionEventInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/MotionEventInfoAvpImpl.java new file mode 100644 index 000000000..13ee07709 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/MotionEventInfoAvpImpl.java @@ -0,0 +1,135 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.OccurrenceInfo; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +/** + * Implementation for {@link MotionEventInfoAvp} + * + * @author Fernando Mendioroz + */ +public class MotionEventInfoAvpImpl extends GroupedAvpImpl implements MotionEventInfoAvp { + + public MotionEventInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public MotionEventInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasLinearDistance() { + return hasAvp(ELPAVPCodes.LINEAR_DISTANCE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getLinearDistance() { + return getAvpAsUnsigned32(ELPAVPCodes.LINEAR_DISTANCE, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setLinearDistance(long linearDistance) { + addAvp(ELPAVPCodes.LINEAR_DISTANCE, ELPAVPCodes.SLg_VENDOR_ID, linearDistance); + } + + public boolean hasOccurrenceInfo() { + return hasAvp(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + public OccurrenceInfo getOccurrenceInfo() { + return (OccurrenceInfo) getAvpAsEnumerated(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID, OccurrenceInfo.class); + } + + public void setOccurrenceInfo(OccurrenceInfo occurrenceInfo) { + addAvp(ELPAVPCodes.OCCURRENCE_INFO, ELPAVPCodes.SLg_VENDOR_ID, occurrenceInfo.getValue()); + } + + public boolean hasIntervalTime() { + return hasAvp(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getIntervalTime() { + return getAvpAsUnsigned32(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setIntervalTime(long intervalTime) { + addAvp(ELPAVPCodes.INTERVAL_TIME, ELPAVPCodes.SLg_VENDOR_ID, intervalTime); + } + + public boolean hasMaximumInterval() { + return hasAvp(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getMaximumInterval() { + return getAvpAsUnsigned32(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setMaximumInterval(long maximumInterval) { + addAvp(ELPAVPCodes.MAXIMUM_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID, maximumInterval); + } + + public boolean hasSamplingInterval() { + return hasAvp(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getSamplingInterval() { + return getAvpAsUnsigned32(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setSamplingInterval(long samplingInterval) { + addAvp(ELPAVPCodes.SAMPLING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID, samplingInterval); + } + + public boolean hasReportDuration() { + return hasAvp(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportDuration() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportDuration(long reportDuration) { + addAvp(ELPAVPCodes.REPORTING_DURATION, ELPAVPCodes.SLg_VENDOR_ID, reportDuration); + } + + public boolean hasReportingLocationRequirements() { + return hasAvp(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportingLocationRequirements() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportingLocationRequirements(long reportingLocationRequirements) { + addAvp(ELPAVPCodes.REPORTING_LOCATION_REQUIREMENTS, ELPAVPCodes.SLg_VENDOR_ID, reportingLocationRequirements); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PLMNIDListAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PLMNIDListAvpImpl.java new file mode 100644 index 000000000..d7edae42f --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PLMNIDListAvpImpl.java @@ -0,0 +1,75 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLocationSupportIndicator; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; + +/** + * Implementation for {@link PLMNIDListAvp} + * + * @author Fernando Mendioroz + */ +public class PLMNIDListAvpImpl extends GroupedAvpImpl implements PLMNIDListAvp { + + public PLMNIDListAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public PLMNIDListAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasVisitedPLMNId() { + return hasAvp(ELPAVPCodes.VISITED_PLMN_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getVisitedPLMNId() { + return getAvpAsOctetString(ELPAVPCodes.VISITED_PLMN_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setVisitedPLMNId(byte[] visitedPLMNId) { + addAvp(ELPAVPCodes.VISITED_PLMN_ID, ELPAVPCodes.SLg_VENDOR_ID, visitedPLMNId); + } + + public boolean hasPeriodicLocationSupportIndicator() { + return hasAvp(ELPAVPCodes.PERIODIC_LOCATION_SUPPORT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + public PeriodicLocationSupportIndicator getPeriodicLocationSupportIndicator() { + return (PeriodicLocationSupportIndicator) getAvpAsEnumerated(ELPAVPCodes.PERIODIC_LOCATION_SUPPORT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, PeriodicLocationSupportIndicator.class); + } + + public void setPeriodicLocationSupportIndicator(PeriodicLocationSupportIndicator periodicLocationSupportIndicator) { + addAvp(ELPAVPCodes.PERIODIC_LOCATION_SUPPORT_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, periodicLocationSupportIndicator.getValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvpImpl.java new file mode 100644 index 000000000..34e42f9ff --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/PeriodicLDRInfoAvpImpl.java @@ -0,0 +1,75 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; + +/** + * Implementation for {@link PeriodicLDRInfoAvp} + * + * @author Fernando Mendioroz + */ +public class PeriodicLDRInfoAvpImpl extends GroupedAvpImpl implements PeriodicLDRInfoAvp { + + public PeriodicLDRInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public PeriodicLDRInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasReportingAmount() { + return hasAvp(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportingAmount() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportingAmount(long reportingAmount) { + addAvp(ELPAVPCodes.REPORTING_AMOUNT, ELPAVPCodes.SLg_VENDOR_ID, reportingAmount); + } + + public boolean hasReportingInterval() { + return hasAvp(ELPAVPCodes.REPORTING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getReportingInterval() { + return getAvpAsUnsigned32(ELPAVPCodes.REPORTING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setReportingInterval(long reportingInterval) { + addAvp(ELPAVPCodes.REPORTING_INTERVAL, ELPAVPCodes.SLg_VENDOR_ID, reportingInterval); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvpImpl.java new file mode 100644 index 000000000..b1a3b54e0 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ReportingPLMNListAvpImpl.java @@ -0,0 +1,76 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; +import net.java.slee.resource.diameter.slg.events.avp.PrioritizedListIndicator; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; + +/** + * Implementation for {@link ReportingPLMNListAvp} + * + * @author Fernando Mendioroz + */ +public class ReportingPLMNListAvpImpl extends GroupedAvpImpl implements ReportingPLMNListAvp { + + public ReportingPLMNListAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public ReportingPLMNListAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasPLMNIDList() { + return hasAvp(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID); + } + + public PLMNIDListAvp getPLMNIDList() { + return (PLMNIDListAvp) getAvpAsCustom(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, PLMNIDListAvpImpl.class); + } + + public void setPLMNIDList(PLMNIDListAvp plmnidList) { + addAvp(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, plmnidList.byteArrayValue()); + } + + public boolean hasPrioritizedListIndicator() { + return hasAvp(ELPAVPCodes.PRIORITIZED_LIST_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID); + } + + public PrioritizedListIndicator getPrioritizedListIndicator() { + return (PrioritizedListIndicator) getAvpAsEnumerated(ELPAVPCodes.PRIORITIZED_LIST_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, PrioritizedListIndicator.class); + } + + public void setPrioritizedListIndicator(PrioritizedListIndicator prioritizedListIndicator) { + addAvp(ELPAVPCodes.PRIORITIZED_LIST_INDICATOR, ELPAVPCodes.SLg_VENDOR_ID, prioritizedListIndicator.getValue()); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ServingNodeAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ServingNodeAvpImpl.java new file mode 100644 index 000000000..2e96ca1e1 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/ServingNodeAvpImpl.java @@ -0,0 +1,161 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Implementation for {@link ServingNodeAvp} + * + * @author Fernando Mendioroz + */ +public class ServingNodeAvpImpl extends GroupedAvpImpl implements ServingNodeAvp { + + public ServingNodeAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public ServingNodeAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasSGSNNumber() { + return hasAvp(ELPAVPCodes.SGSN_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getSGSNNumber() { + return getAvpAsOctetString(ELPAVPCodes.SGSN_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setSGSNNumber(byte[] sgsnNumber) { + addAvp(ELPAVPCodes.SGSN_NUMBER, ELPAVPCodes.SLg_VENDOR_ID, sgsnNumber); + } + + public boolean hasSGSNName() { + return hasAvp(ELPAVPCodes.SGSN_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public DiameterIdentity getSGSNName() { + return getAvpAsDiameterIdentity(ELPAVPCodes.SGSN_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setSGSNName(DiameterIdentity sgsnName) { + addAvp(ELPAVPCodes.SGSN_NAME, ELPAVPCodes.SLg_VENDOR_ID, sgsnName); + } + + public boolean hasSGSNRealm() { + return hasAvp(ELPAVPCodes.SGSN_REALM, ELPAVPCodes.SLg_VENDOR_ID); + } + + public DiameterIdentity getSGSNRealm() { + return getAvpAsDiameterIdentity(ELPAVPCodes.SGSN_REALM, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setSGSNRealm(DiameterIdentity sgsnRealm) { + addAvp(ELPAVPCodes.SGSN_REALM, ELPAVPCodes.SLg_VENDOR_ID, sgsnRealm); + } + + public boolean hasMMEName() { + return hasAvp(ELPAVPCodes.MME_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public DiameterIdentity getMMEName() { + return getAvpAsDiameterIdentity(ELPAVPCodes.MME_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setMMEName(DiameterIdentity mmeName) { + addAvp(ELPAVPCodes.MME_NAME, ELPAVPCodes.SLg_VENDOR_ID, mmeName); + } + + public boolean hasMMERealm() { + return hasAvp(ELPAVPCodes.MME_REALM, ELPAVPCodes.SLg_VENDOR_ID); + } + + public DiameterIdentity getMMERealm() { + return getAvpAsDiameterIdentity(ELPAVPCodes.MME_REALM, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setMMERealm(DiameterIdentity mmeRealm) { + addAvp(ELPAVPCodes.MME_REALM, ELPAVPCodes.SLg_VENDOR_ID, mmeRealm); + } + + public boolean hasMSCNumber() { + return hasAvp(ELPAVPCodes.MSC_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getMSCNumber() { + return getAvpAsOctetString(ELPAVPCodes.MSC_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setMSCNumber(byte[] mscNumber) { + addAvp(ELPAVPCodes.MSC_NUMBER, ELPAVPCodes.SLg_VENDOR_ID, mscNumber); + } + + public boolean has3GPPAAAServerName() { + return hasAvp(ELPAVPCodes.TGPP_AAA_SERVER_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public DiameterIdentity get3GPPAAAServerName() { + return getAvpAsDiameterIdentity(ELPAVPCodes.TGPP_AAA_SERVER_NAME, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void set3GPPAAAServerName(DiameterIdentity tgppAAAServerName) { + addAvp(ELPAVPCodes.TGPP_AAA_SERVER_NAME, ELPAVPCodes.SLg_VENDOR_ID, tgppAAAServerName); + } + + public boolean hasLcsCapabilitiesSets() { + return hasAvp(ELPAVPCodes.LCS_CAPABILITIES_SETS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public long getLcsCapabilitiesSets() { + return getAvpAsUnsigned32(ELPAVPCodes.LCS_CAPABILITIES_SETS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setLcsCapabilitiesSets(long lcsCapabilitiesSets) { + addAvp(ELPAVPCodes.LCS_CAPABILITIES_SETS, ELPAVPCodes.SLg_VENDOR_ID, lcsCapabilitiesSets); + } + + public boolean hasGMLCAddress() { + return hasAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public Address getGMLCAddress() { + return getAvpAsAddress(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setGMLCAddress(Address gmlcAddress) { + addAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, gmlcAddress); + } + +} + diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvpImpl.java new file mode 100644 index 000000000..860f06c25 --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/SupportedFeaturesAvpImpl.java @@ -0,0 +1,120 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.jdiameter.api.Avp; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +/** + * + * Implementation of AVP: {@link SupportedFeaturesAvp} interface. + * + * @author Bartosz Baranowski + * @author Alexandre Mendonca + * @author Fernando Mendioroz + */ +public class SupportedFeaturesAvpImpl extends GroupedAvpImpl implements SupportedFeaturesAvp { + + public SupportedFeaturesAvpImpl() { + super(); + } + + /** + * + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public SupportedFeaturesAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#getFeatureList() + */ + public long getFeatureList() { + return getAvpAsUnsigned32(ELPAVPCodes.FEATURE_LIST, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#hasFeatureList() + */ + public boolean hasFeatureList() { + return hasAvp(ELPAVPCodes.FEATURE_LIST, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#setFeatureList(long) + */ + public void setFeatureList(long featureList) { + addAvp(ELPAVPCodes.FEATURE_LIST, ELPAVPCodes.SLg_VENDOR_ID, featureList); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#getFeatureListId() + */ + public long getFeatureListId() { + return getAvpAsUnsigned32(ELPAVPCodes.FEATURE_LIST_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#hasFeatureListId() + */ + public boolean hasFeatureListId() { + return hasAvp(ELPAVPCodes.FEATURE_LIST_ID, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#setFeatureListId(long) + */ + public void setFeatureListId(long featureListId) { + addAvp(ELPAVPCodes.FEATURE_LIST_ID, ELPAVPCodes.SLg_VENDOR_ID, featureListId); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#hasVendorId() + */ + public boolean hasVendorId() { + return hasAvp(Avp.VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp#setVendorId(long) + */ + public void setVendorId(long vendorId) { + addAvp(Avp.VENDOR_ID, vendorId); + } + +} diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvpImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvpImpl.java new file mode 100644 index 000000000..6f003502c --- /dev/null +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/avp/UTRANPositioningInfoAvpImpl.java @@ -0,0 +1,86 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.events.avp; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; + +/** + * Implementation for {@link UTRANPositioningInfoAvp} + * + * @author Fernando Mendioroz + */ +public class UTRANPositioningInfoAvpImpl extends GroupedAvpImpl implements UTRANPositioningInfoAvp { + + public UTRANPositioningInfoAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public UTRANPositioningInfoAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasUTRANPositioningData() { + return hasAvp(ELPAVPCodes.UTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getUTRANPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.UTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setUTRANPositioningData(byte[] utranPositioningData) { + addAvp(ELPAVPCodes.UTRAN_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, utranPositioningData); + } + + public boolean hasUTRANGANSSPositioningData() { + return hasAvp(ELPAVPCodes.UTRAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getUTRANGANSSPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.UTRAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setUTRANGANSSPositioningData(byte[] utranGANSSPositioningData) { + addAvp(ELPAVPCodes.UTRAN_GANSS_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, utranGANSSPositioningData); + } + + public boolean hasUTRANAdditionalPositioningData() { + return hasAvp(ELPAVPCodes.UTRAN_ADDITIONAL_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public byte[] getUTRANAdditionalPositioningData() { + return getAvpAsOctetString(ELPAVPCodes.UTRAN_ADDITIONAL_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID); + } + + public void setUTRANAdditionalPositioningData(byte[] utranAdditionalPositioningData) { + addAvp(ELPAVPCodes.UTRAN_ADDITIONAL_POSITIONING_DATA, ELPAVPCodes.SLg_VENDOR_ID, utranAdditionalPositioningData); + } + +} diff --git a/resources/diameter-slg/events/src/main/resources/META-INF/event-jar.xml b/resources/diameter-slg/events/src/main/resources/META-INF/event-jar.xml new file mode 100644 index 000000000..2066e8efe --- /dev/null +++ b/resources/diameter-slg/events/src/main/resources/META-INF/event-jar.xml @@ -0,0 +1,41 @@ + + + + + + + + diameter.base.common + java.net + 1.0 + + + net.java.slee.resource.diameter.slg.events.ProvideLocationRequest + java.net + 0.8 + net.java.slee.resource.diameter.slg.events.ProvideLocationRequest + + + + net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer + java.net + 0.8 + net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer + + + + net.java.slee.resource.diameter.slg.events.LocationReportRequest + java.net + 0.8 + net.java.slee.resource.diameter.slg.events.LocationReportRequest + + + + net.java.slee.resource.diameter.slg.events.LocationReportAnswer + java.net + 0.8 + net.java.slee.resource.diameter.slg.events.LocationReportAnswer + + + \ No newline at end of file diff --git a/resources/diameter-slg/pom.xml b/resources/diameter-slg/pom.xml new file mode 100644 index 000000000..89537df8b --- /dev/null +++ b/resources/diameter-slg/pom.xml @@ -0,0 +1,72 @@ + + + + 4.0.0 + + pom + + + org.mobicents.servers.jainslee.diameter + restcomm-slee-diameter + 7.0.0-SNAPSHOT + ../.. + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + + + ratype + events + ra + testsuite + du + + + + + restcomm + Diameter SLg + diameter-slg + DIAMETER_SLg + + + + + release + + docs + release + + + + maven-release + + docs + release + + + + + + + + maven-eclipse-plugin + org.mobicents.tools + false + + + + + xml-apis:xml-apis + jtidy:jtidy + + true + slee-ra-diameter-slg + + + + + + \ No newline at end of file diff --git a/resources/diameter-slg/ra/pom.xml b/resources/diameter-slg/ra/pom.xml new file mode 100644 index 000000000..daf5cf65e --- /dev/null +++ b/resources/diameter-slg/ra/pom.xml @@ -0,0 +1,40 @@ + + 4.0.0 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-ra + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-ratype + ${project.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-base-common-ra + ${project.version} + + + + \ No newline at end of file diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java new file mode 100644 index 000000000..e14a0a06e --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java @@ -0,0 +1,956 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import static org.jdiameter.client.impl.helpers.Parameters.MessageTimeOut; + +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import java.util.List; + +import javax.management.ObjectName; +import javax.naming.OperationNotSupportedException; +import javax.slee.Address; +import javax.slee.facilities.EventLookupFacility; +import javax.slee.facilities.Tracer; +import javax.slee.resource.ActivityFlags; +import javax.slee.resource.ActivityHandle; +import javax.slee.resource.ConfigProperties; +import javax.slee.resource.EventFlags; +import javax.slee.resource.FailureReason; +import javax.slee.resource.FireableEventType; +import javax.slee.resource.InvalidConfigurationException; +import javax.slee.resource.Marshaler; +import javax.slee.resource.ReceivableService; +import javax.slee.resource.ResourceAdaptor; +import javax.slee.resource.ResourceAdaptorContext; +import javax.slee.resource.SleeEndpoint; + +import net.java.slee.resource.diameter.Validator; +import net.java.slee.resource.diameter.base.CreateActivityException; +import net.java.slee.resource.diameter.base.DiameterActivity; +import net.java.slee.resource.diameter.base.DiameterAvpFactory; +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.SLgClientSessionActivity; +import net.java.slee.resource.diameter.slg.SLgMessageFactory; +import net.java.slee.resource.diameter.slg.SLgProvider; +import net.java.slee.resource.diameter.slg.SLgServerSessionActivity; +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; + +import org.jboss.mx.util.MBeanServerLocator; +import org.jdiameter.api.Answer; +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.AvpDataException; +import org.jdiameter.api.EventListener; +import org.jdiameter.api.IllegalDiameterStateException; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Message; +import org.jdiameter.api.Peer; +import org.jdiameter.api.PeerTable; +import org.jdiameter.api.Request; +import org.jdiameter.api.Session; +import org.jdiameter.api.SessionFactory; +import org.jdiameter.api.Stack; +import org.jdiameter.api.app.AppSession; +import org.jdiameter.api.app.StateChangeListener; +import org.jdiameter.api.slg.ClientSLgSession; +import org.jdiameter.api.slg.ServerSLgSession; +import org.jdiameter.client.api.ISessionFactory; + +import org.mobicents.diameter.stack.DiameterListener; +import org.mobicents.diameter.stack.DiameterStackMultiplexerMBean; +import org.mobicents.slee.resource.diameter.DiameterActivityManagement; +import org.mobicents.slee.resource.diameter.LocalDiameterActivityManagement; +import org.mobicents.slee.resource.diameter.ValidatorImpl; +import org.mobicents.slee.resource.diameter.base.DiameterActivityHandle; +import org.mobicents.slee.resource.diameter.base.DiameterActivityImpl; +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; +import org.mobicents.slee.resource.diameter.base.DiameterBaseMarshaler; +import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.base.EventIDFilter; +import org.mobicents.slee.resource.diameter.base.events.ErrorAnswerImpl; +import org.mobicents.slee.resource.diameter.base.events.ExtensionDiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.handlers.AuthorizationSessionFactory; +import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface; + +import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationRequestImpl; +import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationAnswerImpl; +import org.mobicents.slee.resource.diameter.slg.events.LocationReportRequestImpl; +import org.mobicents.slee.resource.diameter.slg.events.LocationReportAnswerImpl; +import org.mobicents.slee.resource.diameter.slg.handlers.SLgSessionFactory; + +/** + * Diameter SLg Resource Adaptor + * + * @author Fernando Mendioroz (fernando.mendioroz@gmail.com) + */ +public class DiameterSLgResourceAdaptor implements ResourceAdaptor, DiameterListener, DiameterRAInterface/*, FaultTolerantResourceAdaptor*/ { + + private static final long serialVersionUID = 1L; + + // Config Properties Names --------------------------------------------- + private static final String AUTH_APPLICATION_IDS = "authApplicationIds"; + + // Config Properties Values -------------------------------------------- + private List authApplicationIds; + + /** + * caches the eventIDs, avoiding lookup in container + */ + public final EventIDCache eventIdCache = new EventIDCache(); + + /** + * tells the RA if an event with a specified ID should be filtered or not + */ + private final EventIDFilter eventIDFilter = new EventIDFilter(); + + /** + * The ResourceAdaptorContext interface is implemented by the SLEE. It provides the Resource + * Adaptor with the required capabilities in the SLEE to execute its work. The ResourceAdaptorCon- + * text object holds references to a number of objects that are of interest to many Resource Adaptors. A + * resource adaptor object is provided with a ResourceAdaptorContext object when the setResour- + * ceAdaptorContext method of the ResourceAdaptor interface is invoked on the resource adaptor + * object. + */ + private ResourceAdaptorContext raContext; + + // /** + // * FT/HA version of RA context. + // */ + // private FaultTolerantResourceAdaptorContext ftRAContext; + + /** + * The SLEE endpoint defines the contract between the SLEE and the resource + * adaptor that enables the resource adaptor to deliver events + * asynchronously to SLEE endpoints residing in the SLEE. This contract + * serves as a generic contract that allows a wide range of resources to be + * plugged into a SLEE environment via the resource adaptor architecture. + * For further information see JSLEE v1.1 Specification Page 307 The + * sleeEndpoint will be initialized in entityCreated() method. + */ + private transient SleeEndpoint sleeEndpoint = null; + + /** + * A tracer is represented in the SLEE by the Tracer interface. Notification sources access the Tracer Facil- + * ity through a Tracer object that implements the Tracer interface. A Tracer object can be obtained by + * SBBs via the SbbContext interface, by resource adaptor entities via the ResourceAdaptorContext + * interface, and by profiles via the ProfileContext interface. + */ + private Tracer tracer; + + private DiameterBaseMarshaler marshaler/*= new DiameterBaseMarshaler()*/; + + // Diameter Specific Properties ---------------------------------------- + private Stack stack; + private long messageTimeout = 5000; + private long activityRemoveDelay = 30000; + + private ObjectName diameterMultiplexerObjectName = null; + private DiameterStackMultiplexerMBean diameterMux = null; + + // Base Factories + private DiameterAvpFactory baseAvpFactory = null; + private SessionFactory sessionFactory = null; + + // SLg Specific Factories + private SLgAVPFactory slgAvpFactory; + private SLgMessageFactory slgMessageFactory; + private SLgSessionFactory slgSessionFactory = null; + + /** + * The EventLookupFacility is used to look up the event id of incoming events + */ + private transient EventLookupFacility eventLookup = null; + + /** + * The list of activities stored in this resource adaptor. If this resource + * adaptor were a distributed and highly available solution, this storage + * were one of the candidates for distribution. + */ + private transient DiameterActivityManagement activities = null; + + /** + * A link to the DiameterProvider which then will be exposed to Sbbs + */ + private transient SLgProviderImpl raProvider = null; + + protected transient AuthorizationSessionFactory authSessionFactory = null; + protected transient SessionFactory proxySessionFactory = null; + + /** + * For all events we are interested in knowing when the event failed to be processed + */ + private static final int EVENT_FLAGS = getEventFlags(); + + private static int getEventFlags() { + int eventFlags = EventFlags.REQUEST_EVENT_UNREFERENCED_CALLBACK; + eventFlags = EventFlags.setRequestProcessingFailedCallback(eventFlags); + eventFlags = EventFlags.setRequestProcessingSuccessfulCallback(eventFlags); + return eventFlags; + } + + private static final int DEFAULT_ACTIVITY_FLAGS = ActivityFlags.setRequestSleeActivityGCCallback(ActivityFlags.REQUEST_ENDED_CALLBACK); + + public DiameterSLgResourceAdaptor() { + // TODO: Initialize any default values. + } + + // Lifecycle methods --------------------------------------------------- + public void setResourceAdaptorContext(ResourceAdaptorContext context) { + this.raContext = context; + this.tracer = context.getTracer("DiameterSLgResourceAdaptor"); + this.sleeEndpoint = context.getSleeEndpoint(); + this.eventLookup = context.getEventLookupFacility(); + this.raProvider = new SLgProviderImpl(this); + } + + public void unsetResourceAdaptorContext() { + this.raContext = null; + this.tracer = null; + this.sleeEndpoint = null; + this.eventLookup = null; + } + + public void raActive() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: raActive."); + } + + try { + if (tracer.isInfoEnabled()) { + tracer.info("Activating Diameter SLg RA Entity"); + } + + this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); + + Object object; + + if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { + // trying to get via MBeanServer + object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); + if (tracer.isInfoEnabled()) { + tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + } + } else { + // trying to get via locateJBoss + object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); + if (tracer.isInfoEnabled()) { + tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + } + } + + if (object != null && object instanceof DiameterStackMultiplexerMBean) { + this.diameterMux = (DiameterStackMultiplexerMBean) object; + } + + // Initialize the protocol stack + initStack(); + + // Initialize activities mgmt + initActivitiesMgmt(); + + // Initialize factories + this.baseAvpFactory = new DiameterAvpFactoryImpl(); + + this.slgAvpFactory = new SLgAVPFactoryImpl(baseAvpFactory); + this.slgMessageFactory = new SLgMessageFactoryImpl(stack); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + ((SLgMessageFactoryImpl) this.slgMessageFactory).setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + // Setup session factories + this.sessionFactory = this.stack.getSessionFactory(); + this.slgSessionFactory = new SLgSessionFactory(this, messageTimeout, sessionFactory); + + ((ISessionFactory) sessionFactory).registerAppFacory(ServerSLgSession.class, slgSessionFactory); + ((ISessionFactory) sessionFactory).registerAppFacory(ClientSLgSession.class, slgSessionFactory); + } catch (Exception e) { + tracer.severe("Error Activating Diameter SLg RA Entity", e); + } + } + + public void raStopping() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: raStopping."); + } + + try { + diameterMux.unregisterListener(this); + } catch (Exception e) { + tracer.severe("Failed to unregister SLg RA from Diameter Mux.", e); + } + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: raStopping completed."); + } + } + + public void raInactive() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: raInactive."); + } + + activities = null; + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: raInactive completed."); + } + } + + public void raConfigure(ConfigProperties properties) { + parseApplicationIds((String) properties.getProperty(AUTH_APPLICATION_IDS).getValue()); + } + + private void parseApplicationIds(String appIdsStr) { + if (appIdsStr != null) { + appIdsStr = appIdsStr.replaceAll(" ", ""); + + String[] appIdsStrings = appIdsStr.split(","); + + List appIds = new ArrayList(); + + for (String appId : appIdsStrings) { + String[] vendorAndAppId = appId.split(":"); + appIds.add(ApplicationId.createByAuthAppId(Long.valueOf(vendorAndAppId[0]), Long.valueOf(vendorAndAppId[1]))); + } + + authApplicationIds = appIds; + } + } + + public void raUnconfigure() { + // Clean up! + this.activities = null; + this.raContext = null; + this.eventLookup = null; + this.raProvider = null; + this.sleeEndpoint = null; + this.stack = null; + } + + // Configuration management methods ------------------------------------ + public void raVerifyConfiguration(ConfigProperties properties) throws InvalidConfigurationException { + // NOP + } + + public void raConfigurationUpdate(ConfigProperties properties) { + // this ra does not support config update while entity is active + } + + // Interface access methods -------------------------------------------- + + public Object getResourceAdaptorInterface(String className) { + // this ra implements a single ra type + return raProvider; + } + + /* + * (non-Javadoc) + * @see javax.slee.resource.ResourceAdaptor#getMarshaler() + */ + public Marshaler getMarshaler() { + return this.marshaler; + } + + // Event filtering methods --------------------------------------------- + public void serviceActive(ReceivableService serviceInfo) { + eventIDFilter.serviceActive(serviceInfo); + } + + public void serviceStopping(ReceivableService serviceInfo) { + eventIDFilter.serviceStopping(serviceInfo); + } + + public void serviceInactive(ReceivableService serviceInfo) { + eventIDFilter.serviceInactive(serviceInfo); + } + + // Mandatory callback methods ------------------------------------------ + public void queryLiveness(ActivityHandle handle) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: queryLiveness :: handle[" + handle + "]."); + } + if (!(handle instanceof DiameterActivityHandle)) { + return; + } + + DiameterActivityImpl activity = (DiameterActivityImpl) activities.get((DiameterActivityHandle) handle); + + if (activity != null && !activity.isValid()) { + try { + sleeEndpoint.endActivity(handle); + } catch (Exception e) { + tracer.severe("Failure ending non-live activity.", e); + } + } + } + + public Object getActivity(ActivityHandle activityHandle) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: getActivity :: handle[" + activityHandle + "]."); + } + if (!(activityHandle instanceof DiameterActivityHandle)) { + return null; + } + return this.activities.get((DiameterActivityHandle) activityHandle); + } + + public ActivityHandle getActivityHandle(Object activity) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: getActivityHandle :: activity[" + activity + "]."); + } + + if (!(activity instanceof DiameterActivity)) { + return null; + } + + DiameterActivityImpl inActivity = (DiameterActivityImpl) activity; + + return inActivity.getActivityHandle(); + } + + public void administrativeRemove(ActivityHandle activityHandle) { + // TODO what to do here? + } + + // Optional callback methods ------------------------------------------- + public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + } + } + + public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + } + } + + public void eventUnreferenced(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: eventUnreferenced :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], service[" + service + "], flags[" + flags + "]."); + } + } + + public void activityEnded(ActivityHandle activityHandle) { + tracer.info("Diameter SLg RA :: activityEnded :: handle[" + activityHandle + "."); + if (this.activities != null) { + synchronized (this.activities) { + this.activities.remove((DiameterActivityHandle) activityHandle); + } + } + } + + public void startActivityRemoveTimer(DiameterActivityHandle activityHandle) { + try { + this.activities.startActivityRemoveTimer(activityHandle); + } catch (Exception e) { + tracer.warning("Failed to start activity remove timer.", e); + } + } + + public void stopActivityRemoveTimer(DiameterActivityHandle diameterActivityHandle) { + try { + this.activities.stopActivityRemoveTimer(diameterActivityHandle); + } catch (Exception e) { + tracer.warning("Failed to stop activity remove timer.", e); + } + } + + public void activityUnreferenced(ActivityHandle activityHandle) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: activityUnreferenced :: handle[" + activityHandle + "]."); + } + if (!(activityHandle instanceof DiameterActivityHandle)) { + return; + } + this.activityEnded(activityHandle); + } + + // Event and Activities management ------------------------------------- + public boolean fireEvent(Object event, ActivityHandle handle, FireableEventType eventID, Address address, boolean useFiltering, boolean transacted) { + if (useFiltering && eventIDFilter.filterEvent(eventID)) { + if (tracer.isFineEnabled()) { + tracer.fine("Event " + eventID + " filtered"); + } + } else if (eventID == null) { + tracer.severe("Event ID for " + eventID + " is unknown, unable to fire."); + } else { + if (tracer.isFineEnabled()) { + tracer.fine("Firing event " + event + " on handle " + handle); + } + try { + /* TODO: Support transacted fire of events when in cluster + if (transacted){ + this.raContext.getSleeEndpoint().fireEventTransacted(handle, eventID, event, address, null, EVENT_FLAGS); + } + else */ + { + this.raContext.getSleeEndpoint().fireEvent(handle, eventID, event, address, null, EVENT_FLAGS); + } + return true; + } catch (Exception e) { + tracer.severe("Error firing event.", e); + } + } + + return false; + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.handlers.BaseSessionCreationListener#fireEvent(java.lang.String, org.jdiameter.api.Message) + */ + public void fireEvent(String sessionId, Message message) { + DiameterMessage event = createEvent(message); + + FireableEventType eventId = eventIdCache.getEventId(eventLookup, message); + + this.fireEvent(event, getActivityHandle(sessionId), eventId, null, true, message.isRequest()); + } + + public void endActivity(DiameterActivityHandle handle) { + sleeEndpoint.endActivity(handle); + } + + public void update(DiameterActivityHandle handle, DiameterActivity activity) { + activities.update(handle, activity); + } + + /** + * Create Event object from a JDiameter message (request or answer) + * + * @return a DiameterMessage object wrapping the request/answer + * @throws OperationNotSupportedException + */ + private DiameterMessage createEvent(Message message) { + if (message == null) { + throw new NullPointerException("Message argument cannot be null while creating event."); + } + + int commandCode = message.getCommandCode(); + + if (message.isError()) { + return new ErrorAnswerImpl(message); + } + + boolean isRequest = message.isRequest(); + + switch (commandCode) { + case ProvideLocationRequest.COMMAND_CODE: + return isRequest ? new ProvideLocationRequestImpl(message) : new ProvideLocationAnswerImpl(message); + case LocationReportRequest.COMMAND_CODE: + return isRequest ? new LocationReportRequestImpl(message) : new LocationReportAnswerImpl(message); + default: + return new ExtensionDiameterMessageImpl(message); + } + } + + // Session Management -------------------------------------------------- + + /** + * Method for performing tasks when activity is created, such as informing SLEE about it and storing into internal map. + * + * @param ac the activity that has been created + */ + private void addActivity(DiameterActivity ac, boolean suspended) { + try { + // Inform SLEE that Activity Started + DiameterActivityImpl activity = (DiameterActivityImpl) ac; + + if (suspended) { + sleeEndpoint.startActivitySuspended(activity.getActivityHandle(), activity, DEFAULT_ACTIVITY_FLAGS); + } else { + sleeEndpoint.startActivity(activity.getActivityHandle(), activity, DEFAULT_ACTIVITY_FLAGS); + } + + // Set the listener + activity.setSessionListener(this); + + // Put it into our activities map + activities.put(activity.getActivityHandle(), activity); + + if (tracer.isInfoEnabled()) { + tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + } + } catch (Exception e) { + tracer.severe("Error creating activity", e); + + throw new RuntimeException("Error creating activity", e); + } + } + + // Private Methods ----------------------------------------------------- + + /** + * Initializes the RA Diameter Stack. + * + * @throws Exception + */ + private synchronized void initStack() throws Exception { + // Register in the Mux as an app listener. + this.diameterMux.registerListener(this, authApplicationIds.toArray(new ApplicationId[authApplicationIds.size()])); + + // Get the stack (should not mess with) + this.stack = this.diameterMux.getStack(); + this.messageTimeout = stack.getMetaData().getConfiguration().getLongValue(MessageTimeOut.ordinal(), (Long) MessageTimeOut.defValue()); + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: Successfully initialized stack."); + } + } + + private void initActivitiesMgmt() { + this.activities = new LocalDiameterActivityManagement(this.raContext, activityRemoveDelay); + } + + /** + * Create the Diameter Activity Handle for an given session id + * + * @param sessionId the session identifier to create the activity handle from + * @return a DiameterActivityHandle for the provided sessionId + */ + protected DiameterActivityHandle getActivityHandle(String sessionId) { + return new DiameterActivityHandle(sessionId); + } + + // NetworkReqListener Implementation ----------------------------------- + + /* + * (non-Javadoc) + * @see org.jdiameter.api.NetworkReqListener#processRequest(org.jdiameter.api.Request) + */ + public Answer processRequest(Request request) { + try { + if (request == null) { + tracer.severe("Request is null"); + } + if (raProvider == null) { + tracer.severe("raProvider is null"); + } + raProvider.createActivity(request); + } catch (Throwable e) { + tracer.severe(e.getMessage(), e); + } + + // returning null so we can answer later + return null; + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.EventListener#receivedSuccessMessage(org.jdiameter.api.Request, org.jdiameter.api.Answer) + */ + public void receivedSuccessMessage(Request request, Answer answer) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: receivedSuccessMessage :: " + "Request[" + request + "], Answer[" + answer + "]."); + } + + try { + if (tracer.isInfoEnabled()) { + tracer.info("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); + } + } catch (AvpDataException ignore) { + // ignore, this was just for informational purposes... + } + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.EventListener#timeoutExpired(org.jdiameter.api.Request) + */ + public void timeoutExpired(Request request) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLg RA :: timeoutExpired :: Request[" + request + "]."); + } + + try { + // Message delivery timed out - we have to remove activity + ((DiameterActivity) getActivity(getActivityHandle(request.getSessionId()))).endActivity(); + } catch (Exception e) { + tracer.severe("Failure processing timeout message.", e); + } + } + + // SLg Session Creation Listener -------------------------------------- + + public void ServerSLgSessionCreated(ServerSLgSession serverSLgSession) { + SLgMessageFactoryImpl sessionMsgFactory = new SLgMessageFactoryImpl(serverSLgSession.getSessions().get(0), stack, new DiameterIdentity[]{}); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + sessionMsgFactory.setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + SLgServerSessionActivityImpl serverActivity = new SLgServerSessionActivityImpl(sessionMsgFactory, slgAvpFactory, serverSLgSession, this, null, null, stack); + serverSLgSession.addStateChangeNotification(serverActivity); + addActivity(serverActivity, false); + serverActivity.setSessionListener(this); + } + + public void ClientSLgessionCreated(ClientSLgSession clientSLgSession) { + SLgMessageFactoryImpl sessionMsgFactory = new SLgMessageFactoryImpl(clientSLgSession.getSessions().get(0), stack, new DiameterIdentity[]{}); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + sessionMsgFactory.setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + SLgClientSessionActivityImpl clientActivity = new SLgClientSessionActivityImpl(sessionMsgFactory, slgAvpFactory, clientSLgSession, this, null, null, stack); + clientSLgSession.addStateChangeNotification(clientActivity); + addActivity(clientActivity, false); + clientActivity.setSessionListener(this); + } + + public void sessionCreated(Session session) { + DiameterMessageFactoryImpl sessionMsgFactory = new DiameterMessageFactoryImpl(session, stack, null, null); + DiameterActivityImpl activity = new DiameterActivityImpl(sessionMsgFactory, baseAvpFactory, session, this, null, null); + + // TODO: Do we need to manage session? + //session.addStateChangeNotification(activity); + activity.setSessionListener(this); + addActivity(activity, false /*true*/); + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.slg.handlers.SLgSessionCreationListener#getSupportedApplications() + */ + public ApplicationId[] getSupportedApplications() { + return (ApplicationId[]) authApplicationIds.toArray(); + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.slg.handlers.SLgSessionCreationListener#stateChanged(org.jdiameter.api.app.AppSession, java.lang.Enum, java.lang.Enum) + */ + public void stateChanged(AppSession source, Enum oldState, Enum newState) { + DiameterActivityHandle dah = getActivityHandle(source.getSessionId()); + Object activity = getActivity(dah); + if (activity != null) { + if (source instanceof ServerSLgSession) { + try { + //damn, no common, do something unexpected + StateChangeListener scl = (StateChangeListener) activity; + scl.stateChanged(source, oldState, newState); + } catch (Exception e) { + tracer.warning("Failed to deliver state, for: " + dah + " on stateChanged( " + source + ", " + oldState + ", " + newState + " )", e); + } + } + } else { + tracer.warning("No activity for: " + dah + " on stateChanged( " + source + ", " + oldState + ", " + newState + " )"); + } + } + + // Provider Implementation -------------------------------------------- + + private class SLgProviderImpl implements SLgProvider { + + protected DiameterSLgResourceAdaptor ra; + protected Validator validator = new ValidatorImpl(); + + /** + * Constructor. + * + * @param slgResourceAdaptor The resource adaptor for this Provider. + */ + + public SLgProviderImpl(DiameterSLgResourceAdaptor slgResourceAdaptor) { + this.ra = slgResourceAdaptor; + } + + private DiameterActivity createActivity(Message message) throws CreateActivityException { + DiameterActivity activity = activities.get(getActivityHandle(message.getSessionId())); + if (activity == null) { + if (message.isRequest()) { + switch (message.getCommandCode()) { + case ProvideLocationRequest.COMMAND_CODE: + return createSLgServerSessionActivity((Request) message); + case LocationReportRequest.COMMAND_CODE: + return createSLgClientSessionActivity((Request) message); + } + } else { + throw new IllegalStateException("Got answer, there should already be activity."); + } + } + + return activity; + } + + private DiameterActivity createSLgServerSessionActivity(Request request) throws CreateActivityException { + ServerSLgSession session = null; + + try { + String sessionId = request == null ? null : request.getSessionId(); + tracer.fine("Session ID is " + sessionId); + ApplicationId appId = request.getApplicationIdAvps().isEmpty() ? null : request.getApplicationIdAvps().iterator().next(); + tracer.fine("App ID is " + appId); + session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(sessionId, appId, ServerSLgSession.class, request); + + if (session == null) { + throw new CreateActivityException("Got NULL Session while creating SLg Server Activity"); + } + } catch (InternalException e) { + throw new CreateActivityException("Internal exception while creating SLg Server Activity", e); + } catch (IllegalDiameterStateException e) { + throw new CreateActivityException("Illegal Diameter State exception while creating SLg Server Activity", e); + } + + SLgServerSessionActivityImpl activity = new SLgServerSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, session, (EventListener) session, (DiameterIdentity) null, (DiameterIdentity) null, stack); + addActivity(activity, false); + + if (request != null) { + switch (request.getCommandCode()) { + case ProvideLocationRequest.COMMAND_CODE: + activity.fetchSessionData(new ProvideLocationRequestImpl(request)); + break; + case LocationReportRequest.COMMAND_CODE: + activity.fetchSessionData(new LocationReportRequestImpl(request)); + break; + } + + ((org.jdiameter.server.impl.app.slg.SLgServerSessionImpl) session).processRequest(request); + } + + return activity; + } + + private DiameterActivity createSLgClientSessionActivity(Request request) throws CreateActivityException { + ClientSLgSession session; + + try { + String sessionId = request == null ? null : request.getSessionId(); + tracer.fine("Session ID is " + sessionId); + ApplicationId appId = request.getApplicationIdAvps().isEmpty() ? null : request.getApplicationIdAvps().iterator().next(); + tracer.fine("App ID is " + appId); + session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(sessionId, appId, ClientSLgSession.class, request); + + if (session == null) { + throw new CreateActivityException("Got NULL Session while creating SLg Client Activity"); + } + } catch (InternalException e) { + throw new CreateActivityException("Internal exception while creating SLg Client Activity", e); + } catch (IllegalDiameterStateException e) { + throw new CreateActivityException("Illegal Diameter State exception while creating SLg Client Activity", e); + } + + SLgClientSessionActivityImpl activity = new SLgClientSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, session, (EventListener) session, (DiameterIdentity) null, (DiameterIdentity) null, stack); + addActivity(activity, false); + + if (request != null) { + switch (request.getCommandCode()) { + case ProvideLocationRequest.COMMAND_CODE: + activity.fetchSessionData(new ProvideLocationRequestImpl(request)); + break; + case LocationReportRequest.COMMAND_CODE: + activity.fetchSessionData(new LocationReportRequestImpl(request)); + break; + } + + ((org.jdiameter.client.impl.app.slg.SLgClientSessionImpl) session).processRequest(request); + } + + return activity; + } + + public SLgServerSessionActivity createSLgServerSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException { + try { + ServerSLgSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, ApplicationId.createByAuthAppId(10415L, 16777255L), ServerSLgSession.class); + SLgServerSessionActivityImpl activity = new SLgServerSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, session, (EventListener) session, destinationHost, destinationRealm, stack); + addActivity(activity, false); + return activity; + } catch (Exception e) { + throw new CreateActivityException("Internal exception while creating SLg Server Activity", e); + } + } + + public SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException { + try { + ClientSLgSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, ApplicationId.createByAuthAppId(10415L, 16777255L), ClientSLgSession.class); + SLgClientSessionActivityImpl activity = new SLgClientSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, session, (EventListener) session, destinationHost, destinationRealm, stack); + addActivity(activity, false); + return activity; + } catch (Exception e) { + throw new CreateActivityException("Internal exception while creating SLg Client Activity", e); + } + } + + public SLgMessageFactory getSLgMessageFactory() { + return ra.slgMessageFactory; + } + + public SLgAVPFactory getSLgAVPFactory() { + return ra.slgAvpFactory; + } + + public DiameterIdentity[] getConnectedPeers() { + return ra.getConnectedPeers(); + } + + public int getPeerCount() { + return ra.getConnectedPeers().length; + } + + public SLgServerSessionActivity createSLgServerSessionActivity() throws CreateActivityException { + return createSLgServerSessionActivity(null, null); + } + + public SLgClientSessionActivity createSLgClientSessionActivity() throws CreateActivityException { + return createSLgClientSessionActivity(null, null); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.SLgProvider#getValidator() + */ + public Validator getValidator() { + return this.validator; + } + } + + public DiameterIdentity[] getConnectedPeers() { + if (this.stack != null) { + try { + // Get the list of peers from the stack + List peers = stack.unwrap(PeerTable.class).getPeerTable(); + + DiameterIdentity[] result = new DiameterIdentity[peers.size()]; + + int i = 0; + + // Get each peer from the list and make a DiameterIdentity + for (Peer peer : peers) { + DiameterIdentity identity = new DiameterIdentity(peer.getUri().toString()); + + result[i++] = identity; + } + + return result; + } catch (Exception e) { + tracer.severe("Failure getting peer list.", e); + } + } + + return new DiameterIdentity[0]; + } +} + diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/EventIDCache.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/EventIDCache.java new file mode 100644 index 000000000..714741068 --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/EventIDCache.java @@ -0,0 +1,117 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.slee.EventTypeID; +import javax.slee.facilities.EventLookupFacility; +import javax.slee.resource.FireableEventType; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; + +import org.jdiameter.api.Message; + +/** + * Caches event IDs for the Diameter SLh RAs. + * + * @author Alexandre Mendonca + * @author Bartosz Baranowski + * @author Fernando Mendioroz + */ +public class EventIDCache { + + private static final String BASE_PACKAGE_PREFIX = "net.java.slee.resource.diameter.base.events."; + private static final String SLg_PACKAGE_PREFIX = "net.java.slee.resource.diameter.slg.events."; + public static Map eventNames = new ConcurrentHashMap(); + + static { + Map eventsTemp = new HashMap(); + + eventsTemp.put(ProvideLocationRequest.COMMAND_CODE, SLg_PACKAGE_PREFIX + "ProvideLocation"); + eventsTemp.put(LocationReportRequest.COMMAND_CODE, SLg_PACKAGE_PREFIX + "LocationReport"); + + eventNames = Collections.unmodifiableMap(eventsTemp); + } + + public static final String ERROR_ANSWER = BASE_PACKAGE_PREFIX + "ErrorAnswer"; + public static final String EXTENSION_DIAMETER_MESSAGE = BASE_PACKAGE_PREFIX + "ExtensionDiameterMessage"; + private static final String VENDOR = "java.net"; + private static final String VERSION = "0.8"; + private ConcurrentHashMap eventIds = new ConcurrentHashMap(); + + public EventIDCache() { + } + + /** + * @param eventLookupFacility + * @param message + * @return + */ + public FireableEventType getEventId(EventLookupFacility eventLookupFacility, Message message) { + + FireableEventType eventID = null; + + // Error is always the same. + if (message.isError()) { + eventID = getEventId(eventLookupFacility, ERROR_ANSWER); + } else { + final int commandCode = message.getCommandCode(); + final boolean isRequest = message.isRequest(); + + String eventName = eventNames.get(commandCode); + + if (eventName != null) { + eventID = getEventId(eventLookupFacility, eventName + (isRequest ? "Request" : "Answer")); + } else { + eventID = getEventId(eventLookupFacility, EXTENSION_DIAMETER_MESSAGE); + } + } + + return eventID; + } + + /** + * @param eventLookupFacility + * @param eventName + * @return + */ + private FireableEventType getEventId(EventLookupFacility eventLookupFacility, String eventName) { + + FireableEventType eventType = eventIds.get(eventName); + if (eventType == null) { + try { + eventType = eventLookupFacility.getFireableEventType(new EventTypeID(eventName, VENDOR, VERSION)); + } catch (Throwable e) { + e.printStackTrace(); + } + if (eventType != null) { + eventIds.put(eventName, eventType); + } + } + return eventType; + } +} diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgAVPFactoryImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgAVPFactoryImpl.java new file mode 100644 index 000000000..4415aa40f --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgAVPFactoryImpl.java @@ -0,0 +1,190 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.base.DiameterAvpFactory; +import net.java.slee.resource.diameter.base.events.avp.AvpUtilities; +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSQoSAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AdditionalAreaAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaEventInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaDefinitionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PLMNIDListAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.MotionEventInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +/** + * Diameter SLg Reference Point AVP Factory. Implementation for {@link SLgAVPFactory} + * + * @author Fernando Mendioroz + */ +public class SLgAVPFactoryImpl extends DiameterAvpFactoryImpl implements SLgAVPFactory { + + // TODO: Add helper create methods for the composite AVPs + protected DiameterAvpFactory baseAvpFactory; + + public SLgAVPFactoryImpl(final DiameterAvpFactory baseAvpFactory) { + this.baseAvpFactory = baseAvpFactory; + } + + public DiameterAvpFactory getBaseFactory() { + return this.baseAvpFactory; + } + + @Override + public AdditionalAreaAvp createAdditionalArea() { + return (AdditionalAreaAvp) AvpUtilities.createAvp(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, AdditionalAreaAvpImpl.class); + } + + @Override + public LCSEPSClientNameAvp createLCSEPSClientName() { + return (LCSEPSClientNameAvp) AvpUtilities.createAvp(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, null, LCSEPSClientNameAvpImpl.class); + } + + @Override + public LCSRequestorNameAvp createLCSRequestorName() { + return (LCSRequestorNameAvp) AvpUtilities.createAvp(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, null, LCSRequestorNameAvpImpl.class); + } + + @Override + public LCSQoSAvp createLCSQoS() { + return (LCSQoSAvp) AvpUtilities.createAvp(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, null, LCSQoSAvpImpl.class); + } + + @Override + public LCSPrivacyCheckNonSessionAvp createLCSPrivacyCheckNonSession() { + return (LCSPrivacyCheckNonSessionAvp) AvpUtilities.createAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, null, LCSPrivacyCheckNonSessionAvpImpl.class); + } + + @Override + public LCSPrivacyCheckSessionAvp createLCSPrivacyCheckSession() { + return (LCSPrivacyCheckSessionAvp) AvpUtilities.createAvp(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, null, LCSPrivacyCheckSessionAvpImpl.class); + } + + @Override + public GERANPositioningInfoAvp createGERANPositioningInfo() { + return (GERANPositioningInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, null, GERANPositioningInfoAvpImpl.class); + } + + @Override + public UTRANPositioningInfoAvp createUTRANPositioningInfo() { + return (UTRANPositioningInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, null, UTRANPositioningInfoAvpImpl.class); + } + + @Override + public AreaEventInfoAvp createAreaEventInfo() { + return (AreaEventInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, null, AreaEventInfoAvpImpl.class); + } + + @Override + public AreaDefinitionAvp createAreaDefinition() { + return (AreaDefinitionAvp) AvpUtilities.createAvp(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, null, AreaDefinitionAvpImpl.class); + } + + @Override + public AreaAvp createArea() { + return (AreaAvp) AvpUtilities.createAvp(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, null, AreaAvpImpl.class); + } + + @Override + public PeriodicLDRInfoAvp createPeriodicLDRInformation() { + return (PeriodicLDRInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, null, PeriodicLDRInfoAvpImpl.class); + } + + @Override + public ReportingPLMNListAvp createReportingPLMNList() { + return (ReportingPLMNListAvp) AvpUtilities.createAvp(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, null, ReportingPLMNListAvpImpl.class); + } + + @Override + public PLMNIDListAvp createPLMNIDList() { + return (PLMNIDListAvp) AvpUtilities.createAvp(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, null, PLMNIDListAvpImpl.class); + } + + @Override + public DeferredMTLRDataAvp createDeferredMTLRData() { + return (DeferredMTLRDataAvp) AvpUtilities.createAvp(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, null, DeferredMTLRDataAvpImpl.class); + } + + @Override + public ESMLCCellInfoAvp createESMLCCellInfo() { + return (ESMLCCellInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, null, ESMLCCellInfoAvpImpl.class); + } + + @Override + public DelayedLocationReportingDataAvp createDelayedLocationReportingData() { + return (DelayedLocationReportingDataAvp) AvpUtilities.createAvp(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, null, DelayedLocationReportingDataAvpImpl.class); + } + + @Override + public ServingNodeAvp createServingNode() { + return (ServingNodeAvp) AvpUtilities.createAvp(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, null, ServingNodeAvpImpl.class); + } + + @Override + public MotionEventInfoAvp createMotionEventInfo() { + return (MotionEventInfoAvp) AvpUtilities.createAvp(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, null, MotionEventInfoAvpImpl.class); + } + + @Override + public SupportedFeaturesAvp createSupportedFeatures() { + return (SupportedFeaturesAvp) AvpUtilities.createAvp(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, null, SupportedFeaturesAvpImpl.class); + } + +} + diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java new file mode 100644 index 000000000..09ef00b59 --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java @@ -0,0 +1,189 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import java.io.IOException; + +import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvp; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.SLgMessageFactory; +import net.java.slee.resource.diameter.slg.SLgClientSessionActivity; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; + +import org.jdiameter.api.Answer; +import org.jdiameter.api.EventListener; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Request; +import org.jdiameter.api.Stack; +import org.jdiameter.api.app.AppSession; + + +import org.jdiameter.api.slg.ClientSLgSession; +import org.jdiameter.common.api.app.slg.SLgSessionState; +import org.jdiameter.common.impl.app.slg.LocationReportAnswerImpl; +import org.jdiameter.common.impl.app.slg.ProvideLocationRequestImpl; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; + +/** + * Implementation of {@link SLgClientSessionActivity}. + * + * @author Fernando Mendioroz + */ +public class SLgClientSessionActivityImpl extends SLgSessionActivityImpl implements SLgClientSessionActivity { + + private static final long serialVersionUID = 7518916596996009148L; + protected transient ClientSLgSession clientSLgSession; + + public SLgClientSessionActivityImpl(SLgMessageFactory slgMessageFactory, SLgAVPFactory slgAvpFactory, ClientSLgSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { + super(slgMessageFactory, slgAvpFactory, session.getSessions().get(0), raEventListener, destinationHost, destinationRealm); + // FIXME: remove stack? + + setSession(session); + super.setCurrentWorkingSession(session.getSessions().get(0)); + } + + public void setSession(ClientSLgSession session) { + this.clientSLgSession = session; + this.clientSLgSession.addStateChangeNotification(this); + } + + public void stateChanged(Enum oldState, Enum newState) { + if (!terminated) { + if (newState == SLgSessionState.TERMINATED || newState == SLgSessionState.TIMEDOUT) { + terminated = true; + endActivity(); + } + } + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Object, java.lang.Enum, java.lang.Enum) + */ + public void stateChanged(AppSession appSession, Enum oldState, Enum newState) { + this.stateChanged(oldState, newState); + + } + + @Override + public void endActivity() { + if (this.clientSLgSession != null) { + this.clientSLgSession.release(); + } + + try { + // endpoint.endActivity(this.getActivityHandle()); + super.baseListener.endActivity(this.getActivityHandle()); + } catch (Exception e) { + logger.error("Failed to end activity [" + this + "].", e); + } + } + + public ProvideLocationRequest createProvideLocationRequest() { + // Make sure we have the correct type of Request + if (!(lastRequest instanceof ProvideLocationRequest)) { + logger.warn("Invalid type of answer for this activity."); + return null; + } + + try { + // Create the request + ProvideLocationRequest lrr = (ProvideLocationRequest) this.slgMessageFactory.createSLgMessage(lastRequest.getHeader(), new DiameterAvp[]{}, ProvideLocationRequest.COMMAND_CODE, slgMessageFactory.getApplicationId()); + + // Fill session related AVPs, if present + fillSessionAVPs(lrr); + + return lrr; + } catch (InternalException e) { + logger.error("Failed to create Location-Report-Answer.", e); + } + + return null; + } + + public ProvideLocationRequest createProvideLocationRequest(String sessionId) throws IllegalArgumentException { + ProvideLocationRequest ecr = createProvideLocationRequest(); + ecr.setSessionId(sessionId); + return ecr; + } + + + public void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOException { + DiameterMessageImpl msg = (DiameterMessageImpl) plr; + ProvideLocationRequestImpl provideLocationRequest = new ProvideLocationRequestImpl((Request) msg.getGenericData()); + try { + clientSLgSession.sendProvideLocationRequest(provideLocationRequest); + } catch (org.jdiameter.api.validation.AvpNotAllowedException anae) { + throw new AvpNotAllowedException(anae.getMessage(), anae.getAvpCode(), anae.getVendorId()); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Failed to send message.", e); + } + throw new IOException(e.getMessage()); + } + } + + + public LocationReportAnswer createLocationReportAnswer() { + //Make sure we have the correct type of Request + if (!(lastRequest instanceof LocationReportRequest)) { + logger.warn("Invalid type of answer for this activity."); + return null; + } + + try { + //Create the answer + LocationReportAnswer lra = (LocationReportAnswer) this.slgMessageFactory.createSLgMessage(lastRequest.getHeader(), new DiameterAvp[]{}, LocationReportAnswer.COMMAND_CODE, slgMessageFactory.getApplicationId()); + + // Fill session related AVPs, if present + fillSessionAVPs(lra); + + return lra; + } catch (InternalException e) { + logger.error("Failed to create Provide-Location-Answer.", e); + } + + return null; + } + + public void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException { + DiameterMessageImpl msg = (DiameterMessageImpl) lra; + LocationReportAnswerImpl request = new LocationReportAnswerImpl((Answer) msg.getGenericData()); + try { + clientSLgSession.sendLocationReportAnswer(request); + } catch (org.jdiameter.api.validation.AvpNotAllowedException anae) { + throw new AvpNotAllowedException(anae.getMessage(), anae.getAvpCode(), anae.getVendorId()); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Failed to send message.", e); + } + throw new IOException(e.getMessage()); + } + } + +} + diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgMessageFactoryImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgMessageFactoryImpl.java new file mode 100644 index 000000000..00fa8eba1 --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgMessageFactoryImpl.java @@ -0,0 +1,173 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.base.events.DiameterHeader; +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvp; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.base.events.ExtensionDiameterMessageImpl; + +import net.java.slee.resource.diameter.slg.SLgMessageFactory; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; + +import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationRequestImpl; +import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationAnswerImpl; +import org.mobicents.slee.resource.diameter.slg.events.LocationReportRequestImpl; +import org.mobicents.slee.resource.diameter.slg.events.LocationReportAnswerImpl; + +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.Session; +import org.jdiameter.api.Stack; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Message; + +import org.apache.log4j.Logger; + +/** + * Implementation of {@link net.java.slee.resource.diameter.slg.SLgMessageFactory}. + * + * @author Fernando Mendioroz + */ +public class SLgMessageFactoryImpl extends DiameterMessageFactoryImpl implements SLgMessageFactory { + + private static Logger logger = Logger.getLogger(SLgMessageFactoryImpl.class); + + private DiameterAvp[] EMPTY_AVP_ARRAY = new DiameterAvp[]{}; + + // SLg: Vendor-Specific-Application-Id is set as optional and may be discarded in future releases; No Auth-Application-Id either; + private ApplicationId SLgAppId = ApplicationId.createByAuthAppId(_SLg_VENDOR, _SLg_AUTH_APP_ID); + + /** + * @param session + * @param stack + * @param avps + */ + public SLgMessageFactoryImpl(Session session, Stack stack, DiameterIdentity... avps) { + super(session, stack, avps); + } + + /** + * @param stack + */ + public SLgMessageFactoryImpl(Stack stack) { + super(stack); + } + + public void setApplicationId(long vendorId, long applicationId) { + this.SLgAppId = ApplicationId.createByAuthAppId(vendorId, applicationId); + } + + public ApplicationId getApplicationId() { + return this.SLgAppId; + } + + /** + * Creates a SLg Message with specified command-code and avps filled. If a header is present an answer will be created, if not + * it will generate a request. + * + * @param diameterHeader + * @param avps + * @param _commandCode + * @param appId + * @return + * @throws InternalException + */ + DiameterMessage createSLgMessage(DiameterHeader diameterHeader, DiameterAvp[] avps, int _commandCode, ApplicationId appId) throws InternalException { + + boolean creatingRequest = diameterHeader == null; + Message msg; + + if (!creatingRequest) { + Message raw = createMessage(diameterHeader, avps, 0, appId); + raw.setProxiable(diameterHeader.isProxiable()); + raw.setRequest(false); + raw.setReTransmitted(false); // just in case. answers never have T flag set + // FIXME ? raw.getAvps().removeAvp(Avp.AUTH_APPLICATION_ID); + msg = raw; + } else { + Message raw = createMessage(diameterHeader, avps, _commandCode, appId); + raw.setProxiable(true); + raw.setRequest(true); + msg = raw; + } + + int commandCode = creatingRequest ? _commandCode : diameterHeader.getCommandCode(); + DiameterMessage diameterMessage; + + switch (commandCode) { + case ProvideLocationRequest.COMMAND_CODE: + diameterMessage = creatingRequest ? new ProvideLocationRequestImpl(msg) : new ProvideLocationAnswerImpl(msg); + break; + case LocationReportRequest.COMMAND_CODE: + diameterMessage = creatingRequest ? new LocationReportRequestImpl(msg) : new LocationReportAnswerImpl(msg); + break; + default: + diameterMessage = new ExtensionDiameterMessageImpl(msg); + } + + // Finally, add Origin-Host and Origin-Realm, if not present. + // FIXME: Alex: needed? addOriginHostAndRealm(diamMessage); + + if (!diameterMessage.hasSessionId() && session != null) { + diameterMessage.setSessionId(session.getSessionId()); + } + + return diameterMessage; + } + + public ProvideLocationRequest createProvideLocationRequest() { + try { + return (ProvideLocationRequest) createSLgMessage(null, EMPTY_AVP_ARRAY, ProvideLocationRequest.COMMAND_CODE, SLgAppId); + } catch (InternalException e) { + logger.error("Failed to create Provide-Location-Request", e); + } + + return null; + } + + public ProvideLocationRequest createProvideLocationRequest(String sessionId) throws IllegalArgumentException { + ProvideLocationRequest plr = createProvideLocationRequest(); + plr.setSessionId(sessionId); + return plr; + } + + public LocationReportRequest createLocationReportRequest() { + try { + return (LocationReportRequest) createSLgMessage(null, EMPTY_AVP_ARRAY, LocationReportRequest.COMMAND_CODE, SLgAppId); + } catch (InternalException e) { + logger.error("Failed to create Location-Report-Request", e); + } + + return null; + } + + public LocationReportRequest createLocationReportRequest(String sessionId) throws IllegalArgumentException { + LocationReportRequest lrr = createLocationReportRequest(); + lrr.setSessionId(sessionId); + return lrr; + } + +} diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgServerSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgServerSessionActivityImpl.java new file mode 100644 index 000000000..4a4d48cae --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgServerSessionActivityImpl.java @@ -0,0 +1,182 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import java.io.IOException; + +import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvp; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.SLgMessageFactory; +import net.java.slee.resource.diameter.slg.SLgServerSessionActivity; +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; + +import org.jdiameter.api.Answer; +import org.jdiameter.api.EventListener; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Request; +import org.jdiameter.api.Stack; +import org.jdiameter.api.app.AppSession; + +import org.jdiameter.api.slg.ServerSLgSession; +import org.jdiameter.common.api.app.slg.SLgSessionState; +import org.jdiameter.common.impl.app.slg.LocationReportRequestImpl; +import org.jdiameter.common.impl.app.slg.ProvideLocationAnswerImpl; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; + +/** + * Implementation of {@link SLgServerSessionActivity}. + * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + */ +public class SLgServerSessionActivityImpl extends SLgSessionActivityImpl implements SLgServerSessionActivity { + + private static final long serialVersionUID = 7518916596996009148L; + + protected transient ServerSLgSession serverSLgSession; + + public SLgServerSessionActivityImpl(SLgMessageFactory slgMessageFactory, SLgAVPFactory slgAvpFactory, ServerSLgSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { + super(slgMessageFactory, slgAvpFactory, session.getSessions().get(0), raEventListener, destinationHost, destinationRealm); + // FIXME: remove stack? + + setSession(session); + super.setCurrentWorkingSession(session.getSessions().get(0)); + } + + public void setSession(ServerSLgSession session) { + this.serverSLgSession = session; + this.serverSLgSession.addStateChangeNotification(this); + } + + public void stateChanged(Enum oldState, Enum newState) { + if (!terminated) { + if (newState == SLgSessionState.TERMINATED || newState == SLgSessionState.TIMEDOUT) { + terminated = true; + endActivity(); + } + } + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Object, java.lang.Enum, java.lang.Enum) + */ + public void stateChanged(AppSession appSession, Enum oldState, Enum newState) { + this.stateChanged(oldState, newState); + + } + + @Override + public void endActivity() { + if (this.serverSLgSession != null) { + this.serverSLgSession.release(); + } + + try { + // endpoint.endActivity(this.getActivityHandle()); + super.baseListener.endActivity(this.getActivityHandle()); + } catch (Exception e) { + logger.error("Failed to end activity [" + this + "].", e); + } + } + + public ProvideLocationAnswer createProvideLocationAnswer() { + // Make sure we have the correct type of Request + if (!(lastRequest instanceof ProvideLocationRequest)) { + logger.warn("Invalid type of answer for this activity."); + return null; + } + + try { + // Create the answer + ProvideLocationAnswer pla = (ProvideLocationAnswer) this.slgMessageFactory.createSLgMessage(lastRequest.getHeader(), new DiameterAvp[]{}, ProvideLocationAnswer.COMMAND_CODE, slgMessageFactory.getApplicationId()); + + // Fill session related AVPs, if present + fillSessionAVPs(pla); + + return pla; + } catch (InternalException e) { + logger.error("Failed to create Provide-Location-Answer.", e); + } + + return null; + } + + public void sendProvideLocationAnswer(ProvideLocationAnswer pla) throws IOException { + DiameterMessageImpl msg = (DiameterMessageImpl) pla; + ProvideLocationAnswerImpl provideLocationAnswer = new ProvideLocationAnswerImpl((Answer) msg.getGenericData()); + try { + serverSLgSession.sendProvideLocationAnswer(provideLocationAnswer); + } catch (org.jdiameter.api.validation.AvpNotAllowedException anae) { + throw new AvpNotAllowedException(anae.getMessage(), anae.getAvpCode(), anae.getVendorId()); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Failed to send message.", e); + } + throw new IOException(e.getMessage()); + } + } + + public LocationReportRequest createLocationReportRequest() { + // Make sure we have the correct type of Request + if (!(lastRequest instanceof LocationReportRequest)) { + logger.warn("Invalid type of answer for this activity."); + return null; + } + + try { + // Create the request + LocationReportRequest lrr = (LocationReportRequest) this.slgMessageFactory.createSLgMessage(lastRequest.getHeader(), new DiameterAvp[]{}, LocationReportRequest.COMMAND_CODE, slgMessageFactory.getApplicationId()); + + // Fill session related AVPs, if present + fillSessionAVPs(lrr); + + return lrr; + } catch (InternalException e) { + logger.error("Failed to create Location-Report-Answer.", e); + } + + return null; + } + + public void sendLocationReportRequest(LocationReportRequest lrr) throws IOException { + DiameterMessageImpl msg = (DiameterMessageImpl) lrr; + LocationReportRequestImpl locationReportRequest = new LocationReportRequestImpl((Answer) msg.getGenericData()); + try { + serverSLgSession.sendLocationReportRequest(locationReportRequest); + } catch (org.jdiameter.api.validation.AvpNotAllowedException anae) { + throw new AvpNotAllowedException(anae.getMessage(), anae.getAvpCode(), anae.getVendorId()); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Failed to send message.", e); + } + throw new IOException(e.getMessage()); + } + } + +} + diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java new file mode 100644 index 000000000..7c7bba61f --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java @@ -0,0 +1,148 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg; + +import java.util.ArrayList; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.SLgMessageFactory; +import net.java.slee.resource.diameter.slg.SLgSessionActivity;; + +import org.jdiameter.api.Answer; +import org.jdiameter.api.EventListener; +import org.jdiameter.api.Request; +import org.jdiameter.api.Session; +import org.jdiameter.api.app.AppSession; +import org.jdiameter.api.app.StateChangeListener; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvp; +import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException; +import org.mobicents.slee.resource.diameter.base.DiameterActivityImpl; + +/** + * @author Fernando Mendioroz + * @author Bartosz Baranowski + * @author Alexandre Mendonca + */ +public abstract class SLgSessionActivityImpl extends DiameterActivityImpl implements SLgSessionActivity, StateChangeListener { + + private static final long serialVersionUID = 4374137032596394588L; + + protected boolean terminated = false; + + protected transient SLgMessageFactoryImpl slgMessageFactory = null; + protected transient SLgAVPFactory slgAvpFactory = null; + + protected transient DiameterMessage lastRequest = null; + protected transient ArrayList sessionAvps = new ArrayList(); + + public SLgSessionActivityImpl(SLgMessageFactory messageFactory, SLgAVPFactory avpFactory, Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm) { + super(null, null, session, raEventListener, destinationHost, destinationRealm); + + this.slgMessageFactory = (SLgMessageFactoryImpl) messageFactory; + this.slgAvpFactory = avpFactory; + } + + public SLgAVPFactory getSLgAvpFactory() { + return this.slgAvpFactory; + } + + public SLgMessageFactory getSLgMessageFactory() { + return (SLgMessageFactory) this.slgMessageFactory; + } + + public void setSLgMessageFactory(SLgMessageFactoryImpl slgMessageFactory) { + this.slgMessageFactory = slgMessageFactory; + } + + public void setSLgAvpFactory(SLgAVPFactory slgAvpFactory) { + this.slgAvpFactory = slgAvpFactory; + } + + public String getSessionId() { + return session.getSessionId(); + } + + public void fetchSessionData(DiameterMessage slgRequest) { + this.lastRequest = slgRequest; + } + + /** + * Fills message with session AVPs if present and/or needed. + * + * @param message + */ + protected void fillSessionAVPs(DiameterMessage message) { + // If there's Destination-Host/Realm, add the AVPs + if (message.getHeader().isRequest()) { + if (destinationHost != null) { + message.setDestinationHost(destinationHost); + } + + if (destinationRealm != null) { + message.setDestinationRealm(destinationRealm); + } + } + + // Fill extension avps if present + if (sessionAvps.size() > 0) { + try { + message.setExtensionAvps(sessionAvps.toArray(new DiameterAvp[sessionAvps.size()])); + } catch (AvpNotAllowedException e) { + logger.error("Failed to add Session AVPs to request.", e); + } + } + + // Guarantee session-id is present + if (!message.hasSessionId() && sessionId != null) { + message.setSessionId(sessionId); + } + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (terminated ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + SLgSessionActivityImpl other = (SLgSessionActivityImpl) obj; + if (terminated != other.terminated) { + return false; + } + return true; + } + +} diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java new file mode 100644 index 000000000..367b6b9a1 --- /dev/null +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java @@ -0,0 +1,150 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.handlers; + +import org.apache.log4j.Logger; +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.IllegalDiameterStateException; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Message; +import org.jdiameter.api.OverloadException; +import org.jdiameter.api.RouteException; +import org.jdiameter.api.SessionFactory; +import org.jdiameter.api.app.AppAnswerEvent; +import org.jdiameter.api.app.AppRequestEvent; +import org.jdiameter.api.app.AppSession; + +import org.jdiameter.api.slg.ClientSLgSession; +import org.jdiameter.api.slg.ServerSLgSession; +import org.jdiameter.api.slg.events.ProvideLocationRequest; +import org.jdiameter.api.slg.events.ProvideLocationAnswer; +import org.jdiameter.api.slg.events.LocationReportRequest; +import org.jdiameter.api.slg.events.LocationReportAnswer; +import org.jdiameter.common.impl.app.slg.SLgSessionFactoryImpl; +import org.jdiameter.client.impl.app.slg.SLgClientSessionImpl; +import org.jdiameter.server.impl.app.slg.SLgServerSessionImpl; + +import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface; + +/** + * @author Fernando Mendioroz (fernando.mendioroz@gmail.com) + */ +public class SLgSessionFactory extends SLgSessionFactoryImpl { + + public DiameterRAInterface slgResourceAdaptor; + private static final Logger logger = Logger.getLogger(SLgSessionFactory.class); + + public SLgSessionFactory(DiameterRAInterface slgResourceAdaptor, long messageTimeout, SessionFactory sessionFactory) { + super(sessionFactory); + this.slgResourceAdaptor = slgResourceAdaptor; + } + + /* (non-Javadoc) + * @see org.jdiameter.common.api.app.IAppSessionFactory#getNewSession(java.lang.String, java.lang.Class, org.jdiameter.api.ApplicationId, java.lang.Object[]) + */ + + @Override + public AppSession getNewSession(String sessionId, Class appSessionClass, ApplicationId applicationId, Object[] args) { + AppSession appSession = null; + + if (appSessionClass == ServerSLgSession.class) { + SLgServerSessionImpl serverSession = null; + serverSession = (SLgServerSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args); + appSession = serverSession; + } else if (appSessionClass == ClientSLgSession.class) { + SLgClientSessionImpl clientSession = null; + clientSession = (SLgClientSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args); + appSession = clientSession; + } else { + throw new IllegalArgumentException("Wrong session class: [" + appSessionClass + "]. Supported[" + ServerSLgSession.class + "," + ClientSLgSession.class + "]"); + } + + return appSession; + } + + /* + * (non-Javadoc) + * @see + * org.jdiameter.common.impl.app.slg.SLgSessionFactoryImpl#stateChanged(org.jdiameter.api.app.AppSession, java.lang.Enum, java.lang.Enum) + */ + @Override + public void stateChanged(AppSession source, Enum oldState, Enum newState) { + // slgResourceAdaptor.state(source, oldState, newState); + logger.info("Diameter SLg Session Factory :: stateChanged :: source[" + source + "] :: oldState[" + oldState + "], newState[" + newState + "]"); + } + + /* (non-Javadoc) + * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Enum, java.lang.Enum) + */ + @Override + public void stateChanged(Enum oldState, Enum newState) { + logger.info("Diameter SLg Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); + } + + /* (non-Javadoc) + * @see org.jdiameter.common.api.app.slg.ISLgMessageFactory#getApplicationId() + */ + @Override + public long getApplicationId() { + // FIXME: Not needed? + return 16777255; + } + + private void doFireEvent(AppSession appSession, Message message) { + this.slgResourceAdaptor.fireEvent(appSession.getSessions().get(0).getSessionId(), message); + } + + @Override + public void doProvideLocationRequestEvent(ServerSLgSession serverSLgSession, ProvideLocationRequest provideLocationRequest) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { + logger.info("Diameter SLg Session Factory :: doProvideLocationRequest :: appSession[" + serverSLgSession + "], Request[" + provideLocationRequest + "]"); + doFireEvent(serverSLgSession, provideLocationRequest.getMessage()); + } + + @Override + public void doProvideLocationAnswerEvent(ClientSLgSession clientSLgSession, ProvideLocationRequest provideLocationRequest, ProvideLocationAnswer provideLocationAnswer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { + logger.info("Diameter SLg Session Factory :: doProvideLocationAnswer :: appSession[" + clientSLgSession + "], Request[" + provideLocationRequest + "], Answer[" + provideLocationAnswer + "]"); + doFireEvent(clientSLgSession, provideLocationAnswer.getMessage()); + } + + @Override + public void doLocationReportRequestEvent(ClientSLgSession clientSLgSession, LocationReportRequest locationReportRequest) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { + logger.info("Diameter SLg Session Factory :: doLocationReportRequest :: appSession[" + clientSLgSession + "], Request[" + locationReportRequest + "]"); + doFireEvent(clientSLgSession, locationReportRequest.getMessage()); + } + + @Override + public void doLocationReportAnswerEvent(ServerSLgSession serverSLgSession, LocationReportRequest locationReportRequest, LocationReportAnswer locationReportAnswer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { + logger.info("Diameter SLg Session Factory :: doLocationReportAnswer :: appSession[" + serverSLgSession + "], Request[" + locationReportRequest + "], Answer[" + locationReportAnswer + "]"); + doFireEvent(serverSLgSession, locationReportAnswer.getMessage()); + } + + /* (non-Javadoc) + * @see org.jdiameter.api.slg.ServerSLgSessionListener#doOtherEvent(org.jdiameter.api.app.AppSession, org.jdiameter.api.app.AppRequestEvent, org.jdiameter.api.app.AppAnswerEvent) + */ + @Override + public void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { + logger.info("Diameter SLg Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]"); + + doFireEvent(appSession, answer != null ? answer.getMessage() : request.getMessage()); + } + +} \ No newline at end of file diff --git a/resources/diameter-slg/ra/src/main/resources/META-INF/resource-adaptor-jar.xml b/resources/diameter-slg/ra/src/main/resources/META-INF/resource-adaptor-jar.xml new file mode 100644 index 000000000..a5d38cf9e --- /dev/null +++ b/resources/diameter-slg/ra/src/main/resources/META-INF/resource-adaptor-jar.xml @@ -0,0 +1,39 @@ + + + + + + + + + Diameter SLg Resource Adaptor + + DiameterSLgResourceAdaptor + net.java + 0.8.1 + + + Diameter SLg + java.net + 0.8.1 + + + + + org.mobicents.slee.resource.diameter.slg.DiameterSLgResourceAdaptor + + + + + + List of supported Authorization Application Ids in form of {vendor}:{application-id}, separated + by comma (',') + + authApplicationIds + java.lang.String + 10415:16777255, 0:16777255 + + + + \ No newline at end of file diff --git a/resources/diameter-slg/ratype/pom.xml b/resources/diameter-slg/ratype/pom.xml new file mode 100644 index 000000000..e5e880cd7 --- /dev/null +++ b/resources/diameter-slg/ratype/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-ratype + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slg-events + ${project.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-base-common-ratype + ${project.version} + + + + diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/DiameterSLgResultCode.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/DiameterSLgResultCode.java new file mode 100644 index 000000000..b9cda44f2 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/DiameterSLgResultCode.java @@ -0,0 +1,94 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +/** + * Diameter SLg Result Codes + * + * @author Fernando Mendioroz + */ +public class DiameterSLgResultCode { + + // ** Permanent Failures category ** // + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.3.1 DIAMETER_ERROR_USER_UNKNOWN (5001) + * This result code shall be sent by the MME/SGSN to indicate that the user is unknown. + * This error code is defined in 3GPP TS 29.229 [17] + */ + public static final int DIAMETER_ERROR_USER_UNKNOWN = 5001; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.3.2 DIAMETER_ERROR_UNAUTHORIZED_REQUESTING_NETWORK (5490) + * This result code shall be sent by the MME/SGSN to indicate that the requesting GMLC's network is not authorized to request UE location information. + * This error code is defined in 3GPP TS 29.173 [18] + */ + public static final int DIAMETER_ERROR_UNAUTHORIZED_REQUESTING_NETWORK = 5490; + + + // ** Transient Failures category ** // + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.1 DIAMETER_ERROR_UNREACHABLE_USER (4221) + * This result code shall be sent by the MME/SGSN to indicate that the user could not be reached in order to perform positioning procedure. + */ + public static final int DIAMETER_ERROR_UNREACHABLE_USER = 4221; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.2 DIAMETER_ERROR_SUSPENDED_USER (4222) + * This result code shall be sent by the MME/SGSN to indicate that the user is suspended in the MME. + */ + public static final int DIAMETER_ERROR_SUSPENDED_USER = 4222; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.3 DIAMETER_ERROR_DETACHED_USER (4223) + * This result code shall be sent by the MME/SGSN to indicate that the user is detached in the MME. + */ + public static final int DIAMETER_ERROR_DETACHED_USER = 4223; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.4 DIAMETER_ERROR_POSITIONING_DENIED (4224) + * This result code shall be sent by the MME/SGSN to indicate that the positioning procedure was denied. + */ + public static final int DIAMETER_ERROR_POSITIONING_DENIED = 4224; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.5 DIAMETER_ERROR_POSITIONING_FAILED (4225) + * This result code shall be sent by the MME/SGSN to indicate that the positioning procedure failed. + */ + public static final int DIAMETER_ERROR_POSITIONING_FAILED = 4225; + + /** + * 3GPP TS 29.172 v14.1.0 + * 7.5.4.6 DIAMETER_ERROR_UNKNOWN_UNREACHABLE_LCS_CLIENT (4226) + * This result code shall be sent by the GMLC to indicate that the LCS Client was not known or could not be reached. + */ + public static final int DIAMETER_ERROR_UNKNOWN_UNREACHABLE_LCS_CLIENT = 4226; + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgAVPFactory.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgAVPFactory.java new file mode 100644 index 000000000..ed180bcd4 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgAVPFactory.java @@ -0,0 +1,95 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.base.DiameterAvpFactory; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; + +/** + * Factory to support the creation of Grouped AVP instances for SLg. + * + * @author Fernando Mendioroz + */ +public interface SLgAVPFactory extends DiameterAvpFactory { + + // SLg Grouped AVPs in alphabetical order + + AdditionalAreaAvp createAdditionalArea(); + + AreaAvp createArea(); + + AreaDefinitionAvp createAreaDefinition(); + + AreaEventInfoAvp createAreaEventInfo(); + + DeferredMTLRDataAvp createDeferredMTLRData(); + + DelayedLocationReportingDataAvp createDelayedLocationReportingData(); + + ESMLCCellInfoAvp createESMLCCellInfo(); + + GERANPositioningInfoAvp createGERANPositioningInfo(); + + LCSEPSClientNameAvp createLCSEPSClientName(); + + LCSRequestorNameAvp createLCSRequestorName(); + + LCSQoSAvp createLCSQoS(); + + LCSPrivacyCheckNonSessionAvp createLCSPrivacyCheckNonSession(); + + LCSPrivacyCheckSessionAvp createLCSPrivacyCheckSession(); + + MotionEventInfoAvp createMotionEventInfo(); + + PeriodicLDRInfoAvp createPeriodicLDRInformation(); + + PLMNIDListAvp createPLMNIDList(); + + ReportingPLMNListAvp createReportingPLMNList(); + + ServingNodeAvp createServingNode(); + + SupportedFeaturesAvp createSupportedFeatures(); + + UTRANPositioningInfoAvp createUTRANPositioningInfo(); + +} \ No newline at end of file diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgActivityContextInterfaceFactory.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgActivityContextInterfaceFactory.java new file mode 100644 index 000000000..ed0ff42e4 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgActivityContextInterfaceFactory.java @@ -0,0 +1,49 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import javax.slee.ActivityContextInterface; + +/** + * @author Alexandre Mendonca + * @author Bartosz Baranowski + * @author Fernando Mendioroz + */ +public interface SLgActivityContextInterfaceFactory { + + /** + * Method for obtaining an ACI wrapping the given SLg Client Session. + * + * @param slgClientActivityContextInterface the SLg Client Session + * @return an ActivityContextInterface + */ + ActivityContextInterface getActivityContextInterface(SLgClientSessionActivity slgClientActivityContextInterface); + + /** + * Method for obtaining an ACI wrapping the given SLg Server Session. + * + * @param slgServerActivityContextInterface the SLg Server Session + * @return an ActivityContextInterface + */ + ActivityContextInterface getActivityContextInterface(SLgServerSessionActivity slgServerActivityContextInterface); + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java new file mode 100644 index 000000000..74d2123a6 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java @@ -0,0 +1,43 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import java.io.IOException; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; + +/** + * @author Fernando Mendioroz + */ +public interface SLgClientSessionActivity extends SLgSessionActivity { + + ProvideLocationRequest createProvideLocationRequest(); + + void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOException; + + LocationReportAnswer createLocationReportAnswer(); + + void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException; + + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgMessageFactory.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgMessageFactory.java new file mode 100644 index 000000000..0dee08f12 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgMessageFactory.java @@ -0,0 +1,55 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; + +/** + * Factory to support the creation of Diameter SLg messages. + * + * @author Fernando Mendioroz + */ +public interface SLgMessageFactory { + + /** + * The SLg interface protocol is defined as an IETF vendor specific Diameter application, where + * the vendor is 3GPP. The vendor identifier assigned by IANA to 3GPP + * (http://www.iana.org/assignments/enterprise-numbers) is 10415. + */ + public static final long _SLg_VENDOR = 10415L; + + /** + * The Diameter application identifier assigned to the SLg interface application is 16777255 + * (allocated by IANA). + */ + public static final long _SLg_AUTH_APP_ID = 16777255L; + + ProvideLocationRequest createProvideLocationRequest(); + + ProvideLocationRequest createProvideLocationRequest(String sessionId) throws IllegalArgumentException; + + LocationReportRequest createLocationReportRequest(); + + LocationReportRequest createLocationReportRequest(String sessionId) throws IllegalArgumentException; + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java new file mode 100644 index 000000000..870046561 --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java @@ -0,0 +1,113 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.Validator; +import net.java.slee.resource.diameter.base.CreateActivityException; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Provider to create SLg sessions and obtain Messages/AVP Factories. + * + * @author Alexandre Mendonca + * @author Bartosz Baranowski + * @author Fernando Mendioroz + */ +public interface SLgProvider { + + /** + * Create a new server session to send and receive Diameter messages. + * All messages sent on an activity created by this method must contain valid + * routing AVPs (one or both of Destination-Realm and Destination-Host as + * defined by RFC6733). + * + * @return a instance of a SLgServerSession to send SLg messages + */ + SLgServerSessionActivity createSLgServerSessionActivity() throws CreateActivityException; + + /** + * Create a new server session to send and receive Diameter messages. + * Messages sent on an activity created by this method will automatically + * have the Destination-Host and Destination-Realm AVPs set to the provided + * values. + * + * @param destinationHost a destination host to automatically put in all messages, may be null if not needed + * @param destinationRealm a destination realm to automatically put in all messages + * @return a instance of a SLgServerSession to send SLg messages + * @throws CreateActivityException + */ + SLgServerSessionActivity createSLgServerSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException; + + /** + * Create a new client session to send and receive Diameter messages. + * All messages sent on an activity created by this method must contain valid + * routing AVPs (one or both of Destination-Realm and Destination-Host as + * defined by RFC6733). + * + * @return a instance of a SLgClientSession to send SLg messages + */ + SLgClientSessionActivity createSLgClientSessionActivity() throws CreateActivityException; + + /** + * Create a new client session to send and receive Diameter messages. + * Messages sent on an activity created by this method will automatically + * have the Destination-Host and Destination-Realm AVPs set to the provided + * values. + * + * @param destinationHost a destination host to automatically put in all messages, may be null if not needed + * @param destinationRealm a destination realm to automatically put in all messages + * @return a instance of a SLgClientSession to send SLg messages + * @throws CreateActivityException + */ + SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException; + + /** + * Return a message factory to be used to create SLg messages. + * + * @return a SLgMessageFactory implementation + */ + SLgMessageFactory getSLgMessageFactory(); + + /** + * Return a AVP factory to be used to create SLg AVPs + * + * @return a SLgAVPFactory implementation + */ + SLgAVPFactory getSLgAVPFactory(); + + /** + * Return the number of peers this Diameter resource adaptor is connected to. + * + * @return connected peer count + */ + int getPeerCount(); + + /** + * Returns array containing identities of connected peers. + * + * @return + */ + DiameterIdentity[] getConnectedPeers(); + + Validator getValidator(); + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgServerSessionActivity.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgServerSessionActivity.java new file mode 100644 index 000000000..538b0165f --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgServerSessionActivity.java @@ -0,0 +1,42 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import java.io.IOException; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; + +/** + * @author Fernando Mendioroz + */ +public interface SLgServerSessionActivity extends SLgSessionActivity { + + ProvideLocationAnswer createProvideLocationAnswer(); + + void sendProvideLocationAnswer(ProvideLocationAnswer pla) throws IOException; + + LocationReportRequest createLocationReportRequest(); + + void sendLocationReportRequest(LocationReportRequest lrr) throws IOException; + +} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgSessionActivity.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgSessionActivity.java new file mode 100644 index 000000000..550644e4d --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgSessionActivity.java @@ -0,0 +1,48 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slg; + +import net.java.slee.resource.diameter.base.DiameterActivity; + +/** + * @author Fernando Mendioroz + */ +public interface SLgSessionActivity extends DiameterActivity { + + /** + * Returns the session ID of the SLg session, which uniquely identifies the session. + * + * @return + */ + String getSessionId(); + + /** + * @return + */ + SLgAVPFactory getSLgAvpFactory(); + + /** + * @return + */ + SLgMessageFactory getSLgMessageFactory(); + +} diff --git a/resources/diameter-slg/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml b/resources/diameter-slg/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml new file mode 100644 index 000000000..f3ca03f2f --- /dev/null +++ b/resources/diameter-slg/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml @@ -0,0 +1,81 @@ + + + + + + + + + Diameter SLg Resource Adaptor Type + + Diameter SLg + java.net + 0.8.1 + + + + net.java.slee.resource.diameter.slg.SLgClientSessionActivity + + + + net.java.slee.resource.diameter.slg.SLgServerSessionActivity + + + + org.jainslee.resources.diameter.base.DiameterActivity + + + + + net.java.slee.resource.diameter.slg.SLgActivityContextInterfaceFactory + + + + + net.java.slee.resource.diameter.slg.SLgProvider + + + + + + net.java.slee.resource.diameter.slg.events.ProvideLocationRequest + java.net + 0.8 + + + + net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer + java.net + 0.8 + + + + net.java.slee.resource.diameter.slg.events.LocationReportRequest + java.net + 0.8 + + + + net.java.slee.resource.diameter.slg.events.LocationReportAnswer + java.net + 0.8 + + + + + net.java.slee.resource.diameter.base.events.ErrorAnswer + java.net + 0.8 + + + + + net.java.slee.resource.diameter.base.events.ExtensionDiameterMessage + java.net + 0.8 + + + + + diff --git a/resources/diameter-slg/release/README.TXT b/resources/diameter-slg/release/README.TXT new file mode 100644 index 000000000..7f79afaa7 --- /dev/null +++ b/resources/diameter-slg/release/README.TXT @@ -0,0 +1,63 @@ +================================================= + Restcomm Diameter : SLg Resource Adaptor +================================================= + v1.0.0.GA + + Welcome to the Restcomm Diameter SLg Resource Adaptor v1.0.0.GA release! + +-------------- + Introduction +-------------- + + This is the SLg RA release of Restcomm Diameter solution. + + This RA provides the SLg interface application implementation of Diameter + for JAIN SLEE and depends on the Restcomm Diameter Mux to be deployed before using it. + + +------------------ + Release Contents +------------------ + + diameter-slg-ra-DU-1.0.0.GA.jar (the JAIN SLEE Deployable Unit to be installed in Restcomm) + + slg-ratype-1.0.0.GA-sources.jar (source files for this Resource Adaptor Type) + + slg-ratype-1.0.0.GA-javadoc.jar (javadoc documentation for this Resource Adaptor Type) + + slg-ra-1.0.0.GA-sources.jar (source files for this Resource Adaptor) + + slg-ra-1.0.0.GA-javadoc.jar (javadoc documentation for this Resource Adaptor) + + du-management.xml (the auxiliar build file for managing deployment/undeployment) + + build.xml (the ant build file for deploying/undeploying the RA) + +---------------- + How to Use it? +---------------- + + In order to deploy/undeploy and correctly activate/deactivate the Resource Adaptor, you can: + + 1) Simply copy the DU jar to the deploy folder of the JBoss running Restcomm or delete it from the deploy folder to + uninstall it; + + 2) Use the provided build.xml file and call the desired targets: + - deploy/deploy-jmx for hard deploying or deploying via JMX interoace; + - undeploy/undeploy-jmx for hard undeploying or undeploying via JMX interoace; + +------------------ + More Information +------------------ + + For more detailed information, please visit the following sites: + + * Restcomm Diameter SLg (RA & Examples) Page (http://groups.google.com/ group/restcomm-public/web/restcomm-diameter-slg) + + * Restcomm Diameter Page (http://groups.google.com/group/restcomm-public/web/restcomm-diameter) + + * jDiameter Homepage (http://jdiameter.dev.java.net) + + * Restcomm Google Group, for posting questions (http://groups.google.com/group/restcomm-public) + + * Restcomm Homepage (http://www.restcomm.com) diff --git a/resources/diameter-slg/release/build-jboss5.xml b/resources/diameter-slg/release/build-jboss5.xml new file mode 100644 index 000000000..9dcf6ca8d --- /dev/null +++ b/resources/diameter-slg/release/build-jboss5.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slg/release/build-wildfly.xml b/resources/diameter-slg/release/build-wildfly.xml new file mode 100644 index 000000000..15c458925 --- /dev/null +++ b/resources/diameter-slg/release/build-wildfly.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/resources/diameter-slg/release/pom.xml b/resources/diameter-slg/release/pom.xml new file mode 100644 index 000000000..4eea7c727 --- /dev/null +++ b/resources/diameter-slg/release/pom.xml @@ -0,0 +1,55 @@ + + 4.0.0 + pom + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-ra-release + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + release + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slg/testsuite/pom.xml b/resources/diameter-slg/testsuite/pom.xml new file mode 100644 index 000000000..8f4bd8ca0 --- /dev/null +++ b/resources/diameter-slg/testsuite/pom.xml @@ -0,0 +1,55 @@ + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slg + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slg-testsuite + + Restcomm :: Diameter Resources :: ${project.artifactId} + + + + ${project.groupId} + restcomm-slee-ra-diameter-slg-ra + ${project.version} + + + ${project.groupId} + restcomm-slee-ra-diameter-base-testsuite + ${project.version} + test-jar + test + + + + + diameter-${project.artifactId}-${project.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.3 + + + none:none + pertest + + **/*$* + + + + + + + + src/test/resources + + + + + diff --git a/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgAvpAssistant.java b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgAvpAssistant.java new file mode 100644 index 000000000..519647a2a --- /dev/null +++ b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgAvpAssistant.java @@ -0,0 +1,193 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.tests.factories; + +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; + +import org.mobicents.slee.resource.diameter.slg.events.avp.AdditionalAreaAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaDefinitionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaEventInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.MotionEventInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSQoSAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PLMNIDListAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvpImpl; + +/** + * Aux Class for assisting in testing AVP setters/getters + * + * @author Fernando Mendioroz + * @author Alexandre Mendonça + * @author Bartosz Baranowski + */ +public class SLgAvpAssistant extends org.mobicents.slee.resource.diameter.base.tests.factories.AvpAssistant { + + public static SLgAvpAssistant INSTANCE; + + static { + try { + INSTANCE = new SLgAvpAssistant(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected SLgAvpAssistant() throws Exception { + super(); + + // SLg AVP Factory + typeValues.put(AdditionalAreaAvp.class, new AdditionalAreaAvpImpl(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(AdditionalAreaAvp[].class, new AdditionalAreaAvpImpl[]{ + new AdditionalAreaAvpImpl(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new AdditionalAreaAvpImpl(ELPAVPCodes.ADDITIONAL_AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(AreaAvp.class, new AreaAvpImpl(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(AreaAvp[].class, new AreaAvpImpl[]{ + new AreaAvpImpl(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new AreaAvpImpl(ELPAVPCodes.AREA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(AreaDefinitionAvp.class, new AreaDefinitionAvpImpl(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(AreaDefinitionAvp[].class, new AreaDefinitionAvpImpl[]{ + new AreaDefinitionAvpImpl(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new AreaDefinitionAvpImpl(ELPAVPCodes.AREA_DEFINITION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(AreaEventInfoAvp.class, new AreaEventInfoAvpImpl(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(AreaEventInfoAvp[].class, new AreaEventInfoAvpImpl[]{ + new AreaEventInfoAvpImpl(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new AreaEventInfoAvpImpl(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(DeferredMTLRDataAvp.class, new DeferredMTLRDataAvpImpl(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(DeferredMTLRDataAvp[].class, new DeferredMTLRDataAvpImpl[]{ + new DeferredMTLRDataAvpImpl(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new DeferredMTLRDataAvpImpl(ELPAVPCodes.DEFERRED_MT_LR_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(DelayedLocationReportingDataAvp.class, new DelayedLocationReportingDataAvpImpl(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(DelayedLocationReportingDataAvp[].class, new DelayedLocationReportingDataAvpImpl[]{ + new DelayedLocationReportingDataAvpImpl(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new DelayedLocationReportingDataAvpImpl(ELPAVPCodes.DELAYED_LOCATION_REPORTING_DATA, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(ESMLCCellInfoAvp.class, new ESMLCCellInfoAvpImpl(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(ESMLCCellInfoAvp[].class, new ESMLCCellInfoAvpImpl[]{ + new ESMLCCellInfoAvpImpl(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new ESMLCCellInfoAvpImpl(ELPAVPCodes.ESMLC_CELL_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(GERANPositioningInfoAvp.class, new GERANPositioningInfoAvpImpl(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(GERANPositioningInfoAvp[].class, new GERANPositioningInfoAvpImpl[]{ + new GERANPositioningInfoAvpImpl(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new GERANPositioningInfoAvpImpl(ELPAVPCodes.GERAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(LCSEPSClientNameAvp.class, new LCSEPSClientNameAvpImpl(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(LCSEPSClientNameAvp[].class, new LCSEPSClientNameAvpImpl[]{ + new LCSEPSClientNameAvpImpl(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new LCSEPSClientNameAvpImpl(ELPAVPCodes.LCS_EPS_CLIENT_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(LCSPrivacyCheckNonSessionAvp.class, new LCSPrivacyCheckNonSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(LCSPrivacyCheckNonSessionAvp[].class, new LCSPrivacyCheckNonSessionAvpImpl[]{ + new LCSPrivacyCheckNonSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new LCSPrivacyCheckNonSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_NON_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(LCSPrivacyCheckSessionAvp.class, new LCSPrivacyCheckSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(LCSPrivacyCheckSessionAvp[].class, new LCSPrivacyCheckSessionAvpImpl[]{ + new LCSPrivacyCheckSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new LCSPrivacyCheckSessionAvpImpl(ELPAVPCodes.LCS_PRIVACY_CHECK_SESSION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(LCSQoSAvp.class, new LCSQoSAvpImpl(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(LCSQoSAvp[].class, new LCSQoSAvpImpl[]{ + new LCSQoSAvpImpl(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new LCSQoSAvpImpl(ELPAVPCodes.LCS_QoS, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(LCSRequestorNameAvp.class, new LCSRequestorNameAvpImpl(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(LCSRequestorNameAvp[].class, new LCSRequestorNameAvpImpl[]{ + new LCSRequestorNameAvpImpl(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new LCSRequestorNameAvpImpl(ELPAVPCodes.LCS_REQUESTOR_NAME, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(MotionEventInfoAvp.class, new MotionEventInfoAvpImpl(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(MotionEventInfoAvp[].class, new MotionEventInfoAvpImpl[]{ + new MotionEventInfoAvpImpl(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new MotionEventInfoAvpImpl(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(PeriodicLDRInfoAvp.class, new PeriodicLDRInfoAvpImpl(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(PeriodicLDRInfoAvp[].class, new PeriodicLDRInfoAvpImpl[]{ + new PeriodicLDRInfoAvpImpl(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new PeriodicLDRInfoAvpImpl(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(PLMNIDListAvp.class, new PLMNIDListAvpImpl(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(PLMNIDListAvp[].class, new PLMNIDListAvpImpl[]{ + new PLMNIDListAvpImpl(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new PLMNIDListAvpImpl(ELPAVPCodes.PLMN_ID_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(ReportingPLMNListAvp.class, new ReportingPLMNListAvpImpl(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(ReportingPLMNListAvp[].class, new ReportingPLMNListAvpImpl[]{ + new ReportingPLMNListAvpImpl(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new ReportingPLMNListAvpImpl(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(ServingNodeAvp.class, new ServingNodeAvpImpl(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(ServingNodeAvp[].class, new ServingNodeAvpImpl[]{ + new ServingNodeAvpImpl(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new ServingNodeAvpImpl(ELPAVPCodes.SERVING_NODE, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(UTRANPositioningInfoAvp.class, new UTRANPositioningInfoAvpImpl(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(UTRANPositioningInfoAvp[].class, new UTRANPositioningInfoAvpImpl[]{ + new UTRANPositioningInfoAvpImpl(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes), + new UTRANPositioningInfoAvpImpl(ELPAVPCodes.UTRAN_POSITIONING_INFO, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp.class, new org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl( + ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp[].class, new org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl[]{ + new org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, + dummyAvpBytes), + new org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl(ELPAVPCodes.SUPPORTED_FEATURES, ELPAVPCodes.SLg_VENDOR_ID, 0, 1, + dummyAvpBytes)}); + + } + +} \ No newline at end of file diff --git a/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java new file mode 100644 index 000000000..fd6a06000 --- /dev/null +++ b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java @@ -0,0 +1,750 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slg.tests.factories; + +import static org.junit.Assert.*; + +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.AddressType; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; +import net.java.slee.resource.diameter.slg.SLgAVPFactory; +import net.java.slee.resource.diameter.slg.SLgMessageFactory; + +import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer; +import net.java.slee.resource.diameter.slg.events.LocationReportRequest; +import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; +import net.java.slee.resource.diameter.slg.events.avp.*; + +import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.Stack; +import org.jdiameter.api.slg.ClientSLgSession; +import org.jdiameter.api.slg.ServerSLgSession; +import org.jdiameter.common.impl.app.slg.SLgSessionFactoryImpl; +import org.junit.Test; +import org.mobicents.diameter.dictionary.AvpDictionary; +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.tests.factories.BaseFactoriesTest; +import org.mobicents.slee.resource.diameter.base.tests.factories.BaseFactoriesTest.MyConfiguration; +import org.mobicents.slee.resource.diameter.slg.SLgAVPFactoryImpl; +import org.mobicents.slee.resource.diameter.slg.SLgClientSessionActivityImpl; +import org.mobicents.slee.resource.diameter.slg.SLgMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.slg.SLgServerSessionActivityImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; + +/** + * Test class for JAIN SLEE Diameter SLg RA Message and AVP Factories + * + * @author Fernando Mendioroz + * @author Alexandre Mendonça + * @author Bartosz Baranowski + */ +public class SLgFactoriesTest { + + private static SLgMessageFactory slgMessageFactory; + private static SLgAVPFactory slgAvpFactory; + private static SLgServerSessionActivityImpl sLgServerSessionActivity; + private static SLgClientSessionActivityImpl sLgClientSessionActivity; + + private static Stack stack; + + static { + stack = new org.jdiameter.client.impl.StackImpl(); + try { + stack.init(new MyConfiguration()); + } + catch (Exception e) { + throw new RuntimeException("Failed to initialize the stack."); + } + + slgAvpFactory = new SLgAVPFactoryImpl(new DiameterAvpFactoryImpl()); + + try { + slgMessageFactory = new SLgMessageFactoryImpl(stack); + + SLgSessionFactoryImpl sf = new SLgSessionFactoryImpl(stack.getSessionFactory()); + ApplicationId slgAppId = ApplicationId.createByAuthAppId(ELPAVPCodes.SLg_VENDOR_ID, ELPAVPCodes.SLg_AUTH_APP_ID); + org.jdiameter.server.impl.app.slg.SLgServerSessionImpl stackServerSession = (org.jdiameter.server.impl.app.slg.SLgServerSessionImpl) sf.getNewSession("123", + ServerSLgSession.class, slgAppId, new Object[0]); + org.jdiameter.client.impl.app.slg.SLgClientSessionImpl stackClientSession = (org.jdiameter.client.impl.app.slg.SLgClientSessionImpl) sf.getNewSession("321", + ClientSLgSession.class, slgAppId, new Object[0]); + sLgServerSessionActivity = new SLgServerSessionActivityImpl(slgMessageFactory, slgAvpFactory, stackServerSession, stackServerSession, null, null, stack); + sLgClientSessionActivity = new SLgClientSessionActivityImpl(slgMessageFactory, slgAvpFactory, stackClientSession, stackClientSession, null, null, stack); + } + catch (Exception e) { + e.printStackTrace(); + } + + try { + AvpDictionary.INSTANCE.parseDictionary(SLgFactoriesTest.class.getClassLoader().getResourceAsStream("dictionary.xml")); + } + catch (Exception e) { + throw new RuntimeException("Failed to parse dictionary file."); + } + } + + // *********************************************// + // *** Provide-Location-Request (PLR) Tests ***// + // ********************************************// + + @Test + public void isRequestPLR() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + assertTrue("Request Flag in LCS Provide-Location-Request is not set.", plr.getHeader().isRequest()); + } + + @Test + public void isProxiablePLR() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + assertTrue("The 'P' bit is not set by default in LCS Provide-Location-Request it should.", plr.getHeader().isProxiable()); + } + + @Test + public void testGroupedChildAVPsPLR() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + LCSEPSClientNameAvp lcsEpsClientNameAvp = slgAvpFactory.createLCSEPSClientName(); + LCSRequestorNameAvp lcsRequestorNameAvp = slgAvpFactory.createLCSRequestorName(); + LCSQoSAvp lcsQoSAvp = slgAvpFactory.createLCSQoS(); + LCSPrivacyCheckNonSessionAvp lcsPrivacyCheckNonSessionAvp =slgAvpFactory.createLCSPrivacyCheckNonSession(); + LCSPrivacyCheckSessionAvp lcsPrivacyCheckSessionAvp = slgAvpFactory.createLCSPrivacyCheckSession(); + + // ** LCS-EPS-Client-Name ** // + // LCS-Name-String + String lcsNameString = "Restcomm Geolocation API"; + lcsEpsClientNameAvp.setLCSNameString(lcsNameString); + // LCS-Format-Indicator + LCSFormatIndicator lcsFormatIndicator = null; + int lcsFormatInd = LCSFormatIndicator._MSISDN; + lcsFormatIndicator = lcsFormatIndicator.fromInt(lcsFormatInd); + lcsEpsClientNameAvp.setLCSFormatIndicator(lcsFormatIndicator); + // Add LCS-EPS-Client-Name Grouped AVP to Provide-Location-Request + plr.setLCSEPSClientName(lcsEpsClientNameAvp); + + // ** LCS-Requestor-Name ** // + // LCS-Requestor-Id-String + String lcsRequestorIdString = "restcomm_geolocation_23"; + lcsRequestorNameAvp.setLCSRequestorIDString(lcsRequestorIdString); + // LCS-Format-Indicator + int reqLcsFormatInd = LCSFormatIndicator._LOGICAL_NAME; + lcsFormatIndicator = lcsFormatIndicator.fromInt(reqLcsFormatInd); + lcsRequestorNameAvp.setLCSFormatIndicator(lcsFormatIndicator); + // Add LCS-Requestor-Name Grouped AVP to Provide-Location-Request + plr.setLCSRequestorName(lcsRequestorNameAvp); + + // ** LCS-QoS ** // + // LCS-QoS-Class + LCSQoSClass lcsQoSClass = null; + int lcsQoSClassValue = LCSQoSClass._BEST_EFFORT; + lcsQoSClass = lcsQoSClass.fromInt(lcsQoSClassValue); + lcsQoSAvp.setLCSQoSClass(lcsQoSClass); + // Horizontal-Accuracy + long horizontalAccuracy = 120L; + lcsQoSAvp.setHorizontalAccuracy(horizontalAccuracy); + // Vertical-Accuracy + long verticalAccuracy = 3237L; + lcsQoSAvp.setVerticalAccuracy(verticalAccuracy); + // Vertical-Requested + VerticalRequested verticalRequested = null; + int verticalRequestedValue = VerticalRequested._VERTICAL_COORDINATE_IS_REQUESTED; + verticalRequested = verticalRequested.fromInt(verticalRequestedValue); + lcsQoSAvp.setVerticalRequested(verticalRequested); + // Response-Time + ResponseTime responseTime = null; + int responseTimeValue = ResponseTime._DELAY_TOLERANT; + responseTime = responseTime.fromInt(responseTimeValue); + lcsQoSAvp.setResponseTime(responseTime); + // Add LCS-QoS Grouped AVP to Provide-Location-Request + plr.setLCSQoS(lcsQoSAvp); + + // LCS-Privacy-Check-Non-Session ** // + // LCS-Privacy-Check + LCSPrivacyCheck lcsPrivacyCheck = null; + int lcsPrivacyCheckNonSValue = LCSPrivacyCheck._ALLOWED_WITH_NOTIFICATION; + lcsPrivacyCheck = lcsPrivacyCheck.fromInt(lcsPrivacyCheckNonSValue); + lcsPrivacyCheckNonSessionAvp.setLCSPrivacyCheck(lcsPrivacyCheck); + // Add LCS-Privacy-Check-Non-Session Grouped AVP to Provide-Location-Request + plr.setLCSPrivacyCheckNonSession(lcsPrivacyCheckNonSessionAvp); + + // ** LCS-Privacy-Check-Session ** // + // LCS-Privacy-Check + int lcsPrivacyCheckValue = LCSPrivacyCheck._RESTRICTED_IF_NO_RESPONSE; + lcsPrivacyCheck = lcsPrivacyCheck.fromInt(lcsPrivacyCheckValue); + lcsPrivacyCheckSessionAvp.setLCSPrivacyCheck(lcsPrivacyCheck); + // Add LCS-Privacy-Check-Session Grouped AVP to Provide-Location-Request + plr.setLCSPrivacyCheckSession(lcsPrivacyCheckSessionAvp); + + } + + @Test + public void testGettersAndSettersPLR() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + + int nFailures = SLgAvpAssistant.INSTANCE.testMethods(plr, ProvideLocationRequest.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void testMessageFactoryApplicationIdChangePLR() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLgMessageFactoryImpl) slgMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLg is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + ProvideLocationRequest originalPLR = slgMessageFactory.createProvideLocationRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalPLR); + + // now we switch.. + originalPLR = null; + isVendor = !isVendor; + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + ProvideLocationRequest changedAIR = slgMessageFactory.createProvideLocationRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedAIR); + + // revert back to default + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + // *********************************************// + // *** Provide-Location-Answer (PLA) Tests ***// + // *******************************************// + + @Test + public void isAnswerPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + + assertFalse("Request Flag in Provide-Location-Answer is set.", pla.getHeader().isRequest()); + } + + @Test + public void testGettersAndSettersPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + + int nFailures = SLgAvpAssistant.INSTANCE.testMethods(pla, ProvideLocationAnswer.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void testGroupedChildAVPsPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + GERANPositioningInfoAvp geranPositioningInfoAvp = slgAvpFactory.createGERANPositioningInfo(); + UTRANPositioningInfoAvp utranPositioningInfoAvp = slgAvpFactory.createUTRANPositioningInfo(); + ESMLCCellInfoAvp esmlcCellInfoAvp = slgAvpFactory.createESMLCCellInfo(); + ServingNodeAvp servingNodeAvp = slgAvpFactory.createServingNode(); + + // ** GERAN-Positioning-Info *** // + // GERAN-Positioning-Data + String geranPosData = "42545339343342534333"; + byte[] geranPositioningData = geranPosData.getBytes(); + geranPositioningInfoAvp.setGERANPositioningData(geranPositioningData); + // GERAN-GANSS-Positioning-Data + String geranGanssPosData = "4254533733524E4331473433"; + byte[] geranGanssPositioningData = geranGanssPosData.getBytes(); + geranPositioningInfoAvp.setGERANGANSSPositioningData(geranGanssPositioningData); + // Add GERAN-Positioning-Info AVP to Provide-Location-Answer + pla.setGERANPositioningInfo(geranPositioningInfoAvp); + + // ** UTRAN-Positioning-Info *** // + // UTRAN-Positioning-Data + String utranPosData = "42545339343342534333"; + byte[] utranPositioningData = utranPosData.getBytes(); + utranPositioningInfoAvp.setUTRANPositioningData(utranPositioningData); + // UTRAN-GANSS-Positioning-Data + String utranGanssPosData = "4254533733524E4331473433"; + byte[] utranGanssPositioningData = utranGanssPosData.getBytes(); + utranPositioningInfoAvp.setUTRANGANSSPositioningData(utranGanssPositioningData); + // UTRAN-Additional-Positioning-Data + String utranAddPosData = "42545339343342534333"; + byte[] utranAdditionalPositioningData = utranAddPosData.getBytes(); + utranPositioningInfoAvp.setUTRANAdditionalPositioningData(utranAdditionalPositioningData); + // Add UTRAN-Positioning-Info AVP to Provide-Location-Answer + pla.setUTRANPositioningInfo(utranPositioningInfoAvp); + + // *** ESMLC-Cell-Info *** // + // ECGI + String ecgiStr = "654E4239343337"; + byte[] ecgi = ecgiStr.getBytes(); + esmlcCellInfoAvp.setECGI(ecgi); + // Cell-Portion-ID + long cellPortionId = 34923L; + esmlcCellInfoAvp.setCellPortionID(cellPortionId); + // Add ESMLC-Cell-Info Grouped AVP to Provide-Location-Answer + pla.setESMLCCellInfo(esmlcCellInfoAvp); + + // *** Serving-Node *** // + // SGSN-Number + String sgsnNumberStr = "59899004501"; + byte[] sgsnNumber = sgsnNumberStr.getBytes(); + servingNodeAvp.setSGSNNumber(sgsnNumber); + // SGSN-Name + DiameterIdentity sgsnName = new DiameterIdentity("SGSN01"); + servingNodeAvp.setSGSNName(sgsnName); + // SGSN-Realm + DiameterIdentity sgsnRealm = new DiameterIdentity("sgsn.restcomm.com"); + servingNodeAvp.setSGSNRealm(sgsnRealm); + // MME-Realm + DiameterIdentity mmeRealm = new DiameterIdentity("mme.restcomm.com"); + servingNodeAvp.setMMERealm(mmeRealm); + // MME-Name + DiameterIdentity mmeName = new DiameterIdentity("MME710"); + servingNodeAvp.setMMEName(mmeName); + // MSC-Number + String mscNumberStr = "59899001207"; + byte[] mscNumber = mscNumberStr.getBytes(); + servingNodeAvp.setMSCNumber(mscNumber); + // LCS-Capabilities-Set + long lcsCapabilitiesSets = 99900123L; + servingNodeAvp.setLcsCapabilitiesSets(lcsCapabilitiesSets); + // 3GPP-AAA-Server-Name + DiameterIdentity tgppAAAServerName = new DiameterIdentity("aaa.restcomm.com"); + servingNodeAvp.set3GPPAAAServerName(tgppAAAServerName); + // GMLC-Address + AddressType gmlcAddressType = AddressType.ADDRESS_IP; + String gmlcAddressStr = "10.0.0.10"; + byte[] addGmlcAddressBytes = gmlcAddressStr.getBytes(); + Address gmlcAddress = new Address(gmlcAddressType, addGmlcAddressBytes); + servingNodeAvp.setGMLCAddress(gmlcAddress); + // Add Serving-Node Grouped AVP to Provide-Location-Answer + pla.setServingNode(servingNodeAvp); + + } + + @Test + public void hasDestinationHostPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", pla.getDestinationHost()); + } + + @Test + public void hasDestinationRealmPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", pla.getDestinationRealm()); + } + + @Test + public void isProxiableCopiedPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + assertEquals("The 'P' bit is not copied from request in LCS Provide-Location-Answer, it should. [RFC6733/6.2]", plr.getHeader().isProxiable(), pla.getHeader().isProxiable()); + + // Reverse 'P' bit ... + ((DiameterMessageImpl) plr).getGenericData().setProxiable(!plr.getHeader().isProxiable()); + assertTrue("The 'P' bit was not modified in LCS Provide-Location-Request, it should.", plr.getHeader().isProxiable() != pla.getHeader().isProxiable()); + sLgServerSessionActivity.fetchSessionData(plr); + + pla = sLgServerSessionActivity.createProvideLocationAnswer(); + assertEquals("The 'P' bit is not copied from request in LCS Provide-Location-Answer, it should. [RFC6733/6.2]", plr.getHeader().isProxiable(), pla.getHeader().isProxiable()); + } + + @Test + public void hasTFlagSetPLA() throws Exception { + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + ((DiameterMessageImpl) plr).getGenericData().setReTransmitted(true); + + assertTrue("The 'T' flag should be set in LCS Provide-Location-Request", plr.getHeader().isPotentiallyRetransmitted()); + + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer pla = sLgServerSessionActivity.createProvideLocationAnswer(); + assertFalse("The 'T' flag should not be set in LCS Provide-Location-Answer", pla.getHeader().isPotentiallyRetransmitted()); + } + + @Test + public void testServerSessionApplicationIdChangePLA() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLgMessageFactoryImpl) slgMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLg is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + ProvideLocationRequest plr = slgMessageFactory.createProvideLocationRequest(); + sLgServerSessionActivity.fetchSessionData(plr); + ProvideLocationAnswer originalPLA = sLgServerSessionActivity.createProvideLocationAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalPLA); + + // now we switch.. + originalPLA = null; + isVendor = !isVendor; + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + ProvideLocationAnswer changedPLA = sLgServerSessionActivity.createProvideLocationAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedPLA); + + // revert back to default + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + // *********************************************// + // *** Location-Report-Request (LRR) Tests *** // + // *******************************************// + + @Test + public void isRequestLRR() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + assertTrue("Request Flag in LCS Location-Report-Request is not set.", lrr.getHeader().isRequest()); + } + + @Test + public void isProxiableLRR() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + assertTrue("The 'P' bit is not set by default in LCS Location-Report-Request it should.", lrr.getHeader().isProxiable()); + } + + @Test + public void testGroupedChildAVPsLRR() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + DeferredMTLRDataAvp deferredMTLRDataAvp = slgAvpFactory.createDeferredMTLRData(); + DelayedLocationReportingDataAvp delayedLocationReportingDataAvp = slgAvpFactory.createDelayedLocationReportingData(); + LCSEPSClientNameAvp lcsEpsClientNameAvp = slgAvpFactory.createLCSEPSClientName(); + GERANPositioningInfoAvp geranPositioningInfoAvp = slgAvpFactory.createGERANPositioningInfo(); + UTRANPositioningInfoAvp utranPositioningInfoAvp = slgAvpFactory.createUTRANPositioningInfo(); + ServingNodeAvp servingNodeAvp = slgAvpFactory.createServingNode(); + PeriodicLDRInfoAvp periodicLDRInfoAvp = slgAvpFactory.createPeriodicLDRInformation(); + ESMLCCellInfoAvp esmlcCellInfoAvp = slgAvpFactory.createESMLCCellInfo(); + + // ** LCS-EPS-Client-Name ** // + // LCS-Name-String + String lcsNameString = "Restcomm Geolocation API"; + lcsEpsClientNameAvp.setLCSNameString(lcsNameString); + // LCS-Format-Indicator + LCSFormatIndicator lcsFormatIndicator = null; + int lcsFormatInd = LCSFormatIndicator._MSISDN; + lcsFormatIndicator = lcsFormatIndicator.fromInt(lcsFormatInd); + lcsEpsClientNameAvp.setLCSFormatIndicator(lcsFormatIndicator); + // Add LCS-EPS-Client-Name Grouped AVP to Location-Report-Request + lrr.setLCSEPSClientName(lcsEpsClientNameAvp); + + // ** GERAN-Positioning-Info *** // + // GERAN-Positioning-Data + String geranPosData = "42545339343342534333"; + byte[] geranPositioningData = geranPosData.getBytes(); + geranPositioningInfoAvp.setGERANPositioningData(geranPositioningData); + // GERAN-GANSS-Positioning-Data + String geranGanssPosData = "4254533733524E4331473433"; + byte[] geranGanssPositioningData = geranGanssPosData.getBytes(); + geranPositioningInfoAvp.setGERANGANSSPositioningData(geranGanssPositioningData); + // Add GERAN-Positioning-Info AVP to Location-Report-Request + lrr.setGERANPositioningInfo(geranPositioningInfoAvp); + + // ** UTRAN-Positioning-Info *** // + // UTRAN-Positioning-Data + String utranPosData = "42545339343342534333"; + byte[] utranPositioningData = utranPosData.getBytes(); + utranPositioningInfoAvp.setUTRANPositioningData(utranPositioningData); + // UTRAN-GANSS-Positioning-Data + String utranGanssPosData = "4254533733524E4331473433"; + byte[] utranGanssPositioningData = utranGanssPosData.getBytes(); + utranPositioningInfoAvp.setUTRANGANSSPositioningData(utranGanssPositioningData); + // UTRAN-Additional-Positioning-Data + String utranAddPosData = "42545339343342534333"; + byte[] utranAdditionalPositioningData = utranAddPosData.getBytes(); + utranPositioningInfoAvp.setUTRANAdditionalPositioningData(utranAdditionalPositioningData); + // Add UTRAN-Positioning-Info AVP to Location-Report-Request + lrr.setUTRANPositioningInfo(utranPositioningInfoAvp); + + // ** Periodic-LDR-Info ** // + // Reporting-Amount + long reportingAmount = 1L; + periodicLDRInfoAvp.setReportingAmount(reportingAmount); + // Reporting-Interval + long reportingInterval = 8639999L; + periodicLDRInfoAvp.setReportingInterval(reportingInterval); + // Add Periodic-LDR-Info Grouped AVP to Location-Report-Request + lrr.setPeriodicLDRInformation(periodicLDRInfoAvp); + + // *** ESMLC-Cell-Info *** // + // ECGI + String ecgiStr = "654E4239343337"; + byte[] ecgi = ecgiStr.getBytes(); + esmlcCellInfoAvp.setECGI(ecgi); + // Cell-Portion-ID + long cellPortionId = 34923L; + esmlcCellInfoAvp.setCellPortionID(cellPortionId); + // Add ESMLC-Cell-Info Grouped AVP to Location-Report-Request + lrr.setESMLCCellInfo(esmlcCellInfoAvp); + + // *** Serving-Node *** // + // SGSN-Number + String sgsnNumberStr = "59899004501"; + byte[] sgsnNumber = sgsnNumberStr.getBytes(); + servingNodeAvp.setSGSNNumber(sgsnNumber); + // SGSN-Name + DiameterIdentity sgsnName = new DiameterIdentity("SGSN01"); + servingNodeAvp.setSGSNName(sgsnName); + // SGSN-Realm + DiameterIdentity sgsnRealm = new DiameterIdentity("sgsn.restcomm.com"); + servingNodeAvp.setSGSNRealm(sgsnRealm); + // MME-Realm + DiameterIdentity mmeRealm = new DiameterIdentity("mme.restcomm.com"); + servingNodeAvp.setMMERealm(mmeRealm); + // MME-Name + DiameterIdentity mmeName = new DiameterIdentity("MME710"); + servingNodeAvp.setMMEName(mmeName); + // MSC-Number + String mscNumberStr = "59899001207"; + byte[] mscNumber = mscNumberStr.getBytes(); + servingNodeAvp.setMSCNumber(mscNumber); + // LCS-Capabilities-Set + long lcsCapabilitiesSets = 99900123L; + servingNodeAvp.setLcsCapabilitiesSets(lcsCapabilitiesSets); + // 3GPP-AAA-Server-Name + DiameterIdentity tgppAAAServerName = new DiameterIdentity("aaa.restcomm.com"); + servingNodeAvp.set3GPPAAAServerName(tgppAAAServerName); + // GMLC-Address + AddressType gmlcAddressType = AddressType.ADDRESS_IP; + String gmlcAddressStr = "10.0.0.10"; + byte[] addGmlcAddressBytes = gmlcAddressStr.getBytes(); + Address gmlcAddress = new Address(gmlcAddressType, addGmlcAddressBytes); + servingNodeAvp.setGMLCAddress(gmlcAddress); + // Add Serving-Node Grouped AVP to Location-Report-Request + lrr.setServingNode(servingNodeAvp); + + // ** Deferred-MT-LR-Data ** // + // Deferred-Location-Type + long deferredLocationType = 5L; + deferredMTLRDataAvp.setDeferredLocationType(deferredLocationType); + // Termination-Cause + long terminationCause = 9L; + deferredMTLRDataAvp.setTerminationCause(terminationCause); + // Serving-Node + deferredMTLRDataAvp.setServingNode(servingNodeAvp); + // Add Deferred-MT-LR-Data Grouped AVP to Location-Report-Request + lrr.setDeferredMTLRData(deferredMTLRDataAvp); + + // ** Delayed-Location-Reporting-Data ** // + // Termination-Cause + long terminationCauseDLRD = 9L; + delayedLocationReportingDataAvp.setTerminationCause(terminationCauseDLRD); + // Serving-Node + delayedLocationReportingDataAvp.setServingNode(servingNodeAvp); + // Add Delayed-Location-Reporting-Data Grouped AVP to Location-Report-Request + lrr.setDelayedLocationReportingData(delayedLocationReportingDataAvp); + + } + + @Test + public void testGettersAndSettersLRR() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + + int nFailures = SLgAvpAssistant.INSTANCE.testMethods(lrr, LocationReportRequest.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void testMessageFactoryApplicationIdChangeLRR() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLgMessageFactoryImpl) slgMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLg is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + LocationReportRequest originalLRR = slgMessageFactory.createLocationReportRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalLRR); + + // now we switch.. + originalLRR = null; + isVendor = !isVendor; + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + LocationReportRequest changedLRR = slgMessageFactory.createLocationReportRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedLRR); + + // revert back to default + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + // *********************************************// + // *** Location-Report-Answer (LRA) Tests *** // + // *******************************************// + + @Test + public void isAnswerLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + + assertFalse("Request Flag in LCS Location-Report-Answer is set.", lra.getHeader().isRequest()); + } + + @Test + public void testGroupedChildAVPsLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + ReportingPLMNListAvp reportingPLMNListAvp = slgAvpFactory.createReportingPLMNList(); + PLMNIDListAvp plmnIdListAvp = slgAvpFactory.createPLMNIDList(); + + // *** Reporting-PLMN-List *** // + // PLMN-ID-List + String visitedPLMNIdListString = "222"; + byte[] visitedPLMNIdList = visitedPLMNIdListString.getBytes(); + plmnIdListAvp.setVisitedPLMNId(visitedPLMNIdList); + // Periodic-Location-Support-Indicator + PeriodicLocationSupportIndicator periodicLocationSupportIndicator = PeriodicLocationSupportIndicator.SUPPORTED; + plmnIdListAvp.setPeriodicLocationSupportIndicator(periodicLocationSupportIndicator); + reportingPLMNListAvp.setPLMNIDList(plmnIdListAvp); + // Prioritized-List-Indicator + PrioritizedListIndicator prioritizedListIndicator = PrioritizedListIndicator.PRIORITIZED; + reportingPLMNListAvp.setPrioritizedListIndicator(prioritizedListIndicator); + // Add Reporting-PLMN-List Grouped AVP to Location-Report-Answer + lra.setReportingPLMNList(reportingPLMNListAvp); + + } + + @Test + public void testGettersAndSettersLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + + int nFailures = SLgAvpAssistant.INSTANCE.testMethods(lra, LocationReportAnswer.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void hasDestinationHostLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", lra.getDestinationHost()); + } + + @Test + public void hasDestinationRealmLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", lra.getDestinationRealm()); + } + + @Test + public void isProxiableCopiedLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + assertEquals("The 'P' bit is not copied from request in LCS Location-Report-Answer, it should. [RFC6733/6.2]", lrr.getHeader().isProxiable(), lra.getHeader().isProxiable()); + + // Reverse 'P' bit ... + ((DiameterMessageImpl) lrr).getGenericData().setProxiable(!lrr.getHeader().isProxiable()); + assertTrue("The 'P' bit was not modified in LCS Location-Report-Request, it should.", lrr.getHeader().isProxiable() != lra.getHeader().isProxiable()); + sLgClientSessionActivity.fetchSessionData(lrr); + + lra = sLgClientSessionActivity.createLocationReportAnswer(); + assertEquals("The 'P' bit is not copied from request in Location-Report-Answer, it should. [RFC6733/6.2]", lrr.getHeader().isProxiable(), lra.getHeader().isProxiable()); + } + + @Test + public void hasTFlagSetLRA() throws Exception { + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + ((DiameterMessageImpl) lrr).getGenericData().setReTransmitted(true); + + assertTrue("The 'T' flag should be set in LCS Location-Report-Request", lrr.getHeader().isPotentiallyRetransmitted()); + + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer lra = sLgClientSessionActivity.createLocationReportAnswer(); + assertFalse("The 'T' flag should not be set in LCS Location-Report-Answer", lra.getHeader().isPotentiallyRetransmitted()); + } + + @Test + public void testClientSessionApplicationIdChangeLRA() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLgMessageFactoryImpl) slgMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLg is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + LocationReportRequest lrr = slgMessageFactory.createLocationReportRequest(); + sLgClientSessionActivity.fetchSessionData(lrr); + LocationReportAnswer originalLRA = sLgClientSessionActivity.createLocationReportAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalLRA); + + // now we switch.. + originalLRA = null; + isVendor = !isVendor; + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + LocationReportAnswer changedLRA = sLgClientSessionActivity.createLocationReportAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedLRA); + + // revert back to default + ((SLgMessageFactoryImpl) slgMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + @Test + public void testGettersAndSettersSupportedFeatures() throws Exception { + SupportedFeaturesAvp avp = slgAvpFactory.createSupportedFeatures(); + + int nFailures = SLgAvpAssistant.INSTANCE.testMethods(avp, SupportedFeaturesAvpImpl.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + +} diff --git a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml new file mode 100644 index 000000000..6d4dea119 --- /dev/null +++ b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml @@ -0,0 +1,129 @@ + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh-docs + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-docs-jdocbook-restcomm + + 4.0.0 + + jdocbook + + + + release + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + generate-resources + + unpack + + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-docs-sources-restcomm + ${pom.version} + jar + true + ${project.build.directory}/docbook/resources + + + + + + + + org.jboss.maven.plugins + maven-jdocbook-plugin + 2.3.5 + true + + + org.mobicents.jdocbook + telestax-xslt-ns + 1.5.0.FINAL + + + org.mobicents.jdocbook + telestax-community-style + jdocbook-style + 1.5.0.FINAL + + + + User_Guide.xml + ${project.build.directory}/docbook/resources + + ${project.build.directory}/docbook/resources/en-US + + images/* + + + + + pdf + classpath:/xslt/org/jboss/pdf.xsl + Restcomm_SLEE_RA_DIAMETER_SLh_User_Guide.pdf + + + html + classpath:/xslt/org/jboss/xhtml.xsl + index.html + + + html_single + classpath:/xslt/org/jboss/xhtml-single.xsl + index.html + + + + true + + + 1.72.0 + + + + + + + diff --git a/resources/diameter-slh/docs/pom.xml b/resources/diameter-slh/docs/pom.xml new file mode 100644 index 000000000..dca50c234 --- /dev/null +++ b/resources/diameter-slh/docs/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 2.8.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-docs + + pom + + + sources + sources-restcomm + jdocbook-restcomm + + + \ No newline at end of file diff --git a/resources/diameter-slh/docs/sources-restcomm/pom.xml b/resources/diameter-slh/docs/sources-restcomm/pom.xml new file mode 100644 index 000000000..a6a76c072 --- /dev/null +++ b/resources/diameter-slh/docs/sources-restcomm/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh-docs + 2.8.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-docs-sources-restcomm + + + Restcomm + JBoss Application Server + https://github.com/RestComm/jain-slee.diameter/issues + https://github.com/RestComm/jain-slee.diameter + brainslog (at) gmail.com + fernando.mendioroz (at) gmail.com + + + + + + ${basedir}/src/main/resources + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + generate-resources + + unpack + + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-docs-sources + ${pom.version} + jar + true + ${basedir}/src/main/resources + + + + + + + + maven-antrun-plugin + + + clean-resources + clean + + run + + + + + + + + + + + + + + + diff --git a/resources/diameter-slh/docs/sources/pom.xml b/resources/diameter-slh/docs/sources/pom.xml new file mode 100644 index 000000000..a55b75d95 --- /dev/null +++ b/resources/diameter-slh/docs/sources/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh-docs + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-docs-sources + + + + + + + + + ${basedir}/src/main/resources + true + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Author_Group.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Author_Group.xml new file mode 100644 index 000000000..cf4bf4631 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Author_Group.xml @@ -0,0 +1,19 @@ + + + %BOOK_ENTITIES; + ]> + + + + Alexandre + Mendonça + &AUTHOR.EMAIL.ALEXANDRE; + + + Fernando + Mendioroz + &AUTHOR.EMAIL.FERNANDO; + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Book_Info.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Book_Info.xml new file mode 100644 index 000000000..760fd66bc --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Book_Info.xml @@ -0,0 +1,50 @@ + + + %BOOK_ENTITIES; + ]> + + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor User Guide + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; RA + &THIS.VERSION; + 3.0 + 1 + + + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor (RA) is the JAIN SLEE 1.1 RA + for the + LTE + EPC + SLh Interface, the reference point for Location Services in + LTE + + EPC + and follows a mechanism where the online client (GMLC) + requests routing information to the Home Subscriber Server (HSS). It is described in TS 29.173 + by 3GPP. + + This RA implements the Resource Adaptor Type defined by Mobicents development teams. + + + + &YEAR; + Telestax Inc. + + + + + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml new file mode 100644 index 000000000..0079e2e5c --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Clustering.xml @@ -0,0 +1,30 @@ + + + + %BOOK_ENTITIES; + ]> + + + Clustering +
+ Failover + + The Diameter stack used by the &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor supports application + session failover, with specific session state being replicated, thus only available for Application + sessions. + Failover of application activities is transparent to SLEE applications. This means that SLEE + applications must be in charge of properly adapting its state machine to recover generic session on node + failure. + +
+
+ Load Balancing + Currently, the only available balancing mechanism is provided by Diameter stack. It depends on RFC 6733 + algorithm to select one peer from realm serving the desired application. + +
+
diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml new file mode 100644 index 000000000..4fc310ae1 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Introduction.xml @@ -0,0 +1,35 @@ + + + + %BOOK_ENTITIES; + ]> + + + + Introduction to &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + + This resource adaptor provides a Diameter API for JAIN SLEE applications, according to SLh interface + between GMLC and HSS based on Diameter protocol. + + + + + + + + + + + SLh interface is defined in 3GPP TS 29.173. + + Events represent messages received by the Diameter stack. Different event types are specified for each + Diameter request or answer. Events are fired either on client or server activities. + + The Activities are defined by RA. Type to ease use of RA. Activities + represent Diameter session between two peers. SLEE applications use activities to create, + send and receive messages. + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Setup.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Setup.xml new file mode 100644 index 000000000..aa73e8d87 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Chapter-Setup.xml @@ -0,0 +1,128 @@ + + + %BOOK_ENTITIES; + ]> + + + + Setup + +
+ Pre-Install Requirements and Prerequisites + Ensure that the following requirements have been met before continuing with the install. +
+ Hardware Requirements + The Resource Adaptor hardware's main concern is RAM memory and Java Heap size, the more the + better. For instance, while the underlying &THIS.PLATFORM; JAIN SLEE may run with 1GB of RAM, 8GB is + needed to achieve performance higher than 800 new requests per second. + + Of course, memory is only needed to store the Resource Adaptor state, the faster the CPU more + requests per second are supported, yet no particular CPU is a real requirement to use the RA. + +
+
+ Software Prerequisites + The RA requires &THIS.PLATFORM; JAIN SLEE properly set and Mobicents Diameter Multiplexer + (MUX), which includes the stack, and &THIS.PLATFORM; Diameter Base RA to be + properly installed too. + +
+
+ +
+ &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor Source Code + + +
+ Release Source Code Building + + + Downloading the source code + + Git is used to manage Mobicents JAIN SLEE source code. Instructions for downloading, + installing and using Git can be found at + + + + Use Git to checkout a specific release source, the Git repository URL + is &THIS.SOURCE_CODE_URL; , then switch to the specific release version, lets + consider &THIS.VERSION;. + + + [usr]$ git clone &THIS.SOURCE_CODE_URL; mobicents-jain-slee-diameter + [usr]$ cd mobicents-jain-slee-diameter + [usr]$ git checkout tags/&THIS.VERSION; + + + + Building the source code + + Maven 2.0.9 (or higher) is used to build the release. Instructions for using Maven2, + including install, can be found at + + + + Use Maven to build the deployable unit binary. + + [usr]$ cd resources/&THIS.RA.DIRNAME; + [usr]$ mvn install + + Once the process finishes you should have the deployable-unit jar file + in the target directory, if &THIS.PLATFORM; JAIN SLEE is installed and + environment variable JBOSS_HOME is pointing to its underlying &JEE.PLATFORM; directory, then + the deployable unit jar will also be deployed in the container. + + + +
+ +
+ Development Master Source Building + Similar process as for, the only change is the Git + reference should be the master. The + git checkout tags/&THIS.VERSION; + command should not be performed. If already performed, the following should be used in order to + switch back to the master: + + + [usr]$ git checkout master + +
+ +
+ +
+ Installing &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + To install the Resource Adaptor simply execute provided ant script build.xml default + target: + + + [usr]$ ant + + The script will copy the RA deployable unit jar to the default &THIS.PLATFORM; JAIN + SLEE server profile deploy directory, to deploy to another server profile use the argument + -Dnode=. + +
+ +
+ Uninstalling &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor + To uninstall the Resource Adaptor simply execute provided ant script + build.xml + undeploy + target: + + + [usr]$ ant undeploy + + The script will delete the RA deployable unit jar from the default &THIS.PLATFORM; + JAIN SLEE server profile deploy directory, to undeploy from another server profile use the + argument -Dnode=. + +
+ +
+ + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/Revision_History.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Revision_History.xml new file mode 100644 index 000000000..8115f7e8f --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/Revision_History.xml @@ -0,0 +1,31 @@ + + + %BOOK_ENTITIES; + ]> + + + Revision History + + + + 1.0 + Thu Feb 15 2018 + + Alexandre + Mendonça + + + Fernando + Mendioroz + + + + Creation of the &THIS.PLATFORM; JAIN SLEE &THIS.RA; RA User Guide. + + + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.ent b/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.ent new file mode 100644 index 000000000..efb94f676 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.ent @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.xml new file mode 100644 index 000000000..6bc0d1bc5 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/User_Guide.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Preface.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Preface.xml new file mode 100644 index 000000000..93ce44c39 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Preface.xml @@ -0,0 +1,14 @@ + + + + Preface + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml new file mode 100644 index 000000000..e042691ae --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Conventions.xml @@ -0,0 +1,257 @@ + + + +
+ Document Conventions + + This manual uses several conventions to highlight certain words and phrases and draw attention to specific + pieces of information. + + + In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts + set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, + alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later includes the + Liberation Fonts set by default. + +
+ Typographic Conventions + + Four typographic conventions are used to call attention to specific words and phrases. These conventions, + and the circumstances they apply to, are as follows. + + + Mono-spaced Bold + + + Used to highlight system input, including shell commands, file names and paths. Also used to highlight key + caps and key-combinations. For example: + +
+ + To see the contents of the file my_next_bestselling_novel in your current working + directory, enter the cat my_next_bestselling_novel command at the shell prompt and + press Enter to execute the command. + +
+ + The above includes a file name, a shell command and a key cap, all presented in Mono-spaced Bold and all + distinguishable thanks to context. + + + Key-combinations can be distinguished from key caps by the hyphen connecting each part of a key-combination. + For example: + +
+ + Press Enter to execute the command. + + + Press + + Ctrl + Alt + F1 + + to switch to the first virtual terminal. Press + + Ctrl + Alt + F7 + + to return to your X-Windows session. + +
+ + The first sentence highlights the particular key cap to press. The second highlights two sets of three key + caps, each set pressed simultaneously. + + + If source code is discussed, class names, methods, functions, variable names and returned values mentioned + within a paragraph will be presented as above, in Mono-spaced Bold. For example: + +
+ + File-related classes include filesystem for file systems, file + for files, and dir for directories. Each class has its own associated + set of permissions. + +
+ + Proportional Bold + + + This denotes words or phrases encountered on a system, including application names; dialogue box text; + labelled buttons; check-box and radio button labels; menu titles and sub-menu titles. For example: + +
+ + Choose System > Preferences > Mouse from the main menu bar to + launch Mouse Preferences. In the Buttons tab, click the + Left-handed mouse + check box and click Close to switch the primary mouse button from the + left to the right (making the mouse suitable for use in the left hand). + + + To insert a special character into a gedit file, choose Applications + > Accessories > Character Map + from the main menu bar. Next, choose + Search > Find… + from the Character Map menu bar, type the name of the character in the + Search + field and click Next. The character you sought will be highlighted in the + Character Table. Double-click this highlighted character to place it in the Text to + copy + field and then click the Copy button. Now switch back to your document + and choose Edit > Paste from the gedit menu bar. + +
+ + The above text includes application names; system-wide menu names and items; application-specific menu + names; and buttons and text found within a GUI interface, all presented in Proportional Bold and all + distinguishable by context. + + + Note the > shorthand used to indicate traversal through a menu and its sub-menus. This + is to avoid the difficult-to-follow 'Select Mouse from the + Preferences + sub-menu in the System menu of the main menu bar' approach. + + + + Mono-spaced Bold Italic + + or + + Proportional Bold Italic + + + + Whether Mono-spaced Bold or Proportional Bold, the addition of Italics indicates replaceable or variable + text. Italics denotes text you do not input literally or displayed text that changes depending on + circumstance. For example: + +
+ + To connect to a remote machine using ssh, type + ssh username@ + domain.name + + at a shell prompt. If the remote machine is example.com and your username on that + machine is john, type ssh john@example.com. + + + The + mount -o remount + file-system + + command remounts the named file system. For example, to remount the /home file + system, the command is mount -o remount /home. + + + To see the version of a currently installed package, use the + rpm -q + package + + command. It will return a result as follows: + + package-version-release + + . + +
+ + Note the words in bold italics above — username, domain.name, file-system, package, version and + release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed + by the system. + + + Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and + important term. For example: + +
+ + When the Apache HTTP Server accepts requests, it dispatches child processes or threads to handle them. + This group of child processes or threads is known as a server-pool. Under Apache + HTTP Server 2.0, the responsibility for creating and maintaining these server-pools has been abstracted + to a group of modules called Multi-Processing Modules ( + MPMs). Unlike other modules, only one module from the MPM group can be loaded by the Apache + HTTP Server. + +
+
+ +
+ Pull-quote Conventions + + Two, commonly multi-line, data types are set off visually from the surrounding text. + + + Output sent to a terminal is set in Mono-spaced Roman and presented thus: + + + + books Desktop documentation drafts mss photos stuff svn + books_tests Desktop1 downloads images notes scripts svgs + + + Source-code listings are also set in Mono-spaced Roman but are presented + and highlighted as follows: + + + + package org.jboss.book.jca.ex1; + + import javax.naming.InitialContext; + + public class ExClient + { + public static void main(String args[]) + throws Exception + { + InitialContext iniCtx = new InitialContext(); + Object ref = iniCtx.lookup("EchoBean"); + EchoHome home = (EchoHome) ref; + Echo echo = home.create(); + + System.out.println("Created Echo"); + + System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); + } + + } + +
+ +
+ Notes and Warnings + + Finally, we use three visual styles to draw attention to information that might otherwise be overlooked. + + + Note + + A note is a tip or shortcut or alternative approach to the task at hand. Ignoring a note should have no + negative consequences, but you might miss out on a trick that makes your life easier. + + + + Important + + Important boxes detail things that are easily missed: configuration changes that only apply to the + current session, or services that need restarting before an update will apply. Ignoring Important boxes + won't cause data loss but may cause irritation and frustration. + + + + Warning + + A Warning should not be ignored. Ignoring warnings will most likely cause data loss. + + +
+ +
+ + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml new file mode 100644 index 000000000..452573e79 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/common/Section-Feedback.xml @@ -0,0 +1,31 @@ + + + %BOOK_ENTITIES; + ]> + + +
+ + Provide feedback to the authors! + + + feedback + + + If you find a typographical error in this manual, or if you have thought of a way to make this manual + better, we would love to hear from you! Please submit a report in the the Issue Tracker, against the product + &THIS.PLATFORM; JAIN SLEE &THIS.RA; Resource Adaptor, or contact the authors. + + When submitting a bug report, be sure to mention the manual's identifier: &BOOK_ID; + If you have a suggestion for improving the documentation, try to be as specific as possible when + describing it. If you have found an error, please include the section number and some of the surrounding + text so we can find it easily. + + +
+
+ + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml new file mode 100644 index 000000000..3c0e03022 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Chapter-Resource_Adaptor_Type.xml @@ -0,0 +1,28 @@ + + + +%BOOK_ENTITIES; +]> + + + + + Resource Adaptor Type + + &THIS.RA; Resource Adaptor Type is defined by Mobicents team as part of effort to standardize RA Types. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml new file mode 100644 index 000000000..6d07a9588 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activities.xml @@ -0,0 +1,102 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Activities + + &THIS.RA; Type &THIS.VERSION; defines the following Activities: + + + + net.java.slee.resource.diameter.slh.SLhClientSession + + This type of activity represents client side of SLh session. Routing-Info-Request (RIR) messages + can be created and sent in this Activity, receiving the respective Answer (or timeout) later on this + Activity. + + This activity type can be created with call to the proper + createSLhClientSessionActivity + method of net.java.slee.resource.diameter.slh.SLhProvider. It ends + once underlying SLh session ends. + + State machine for client SLh sessions can be found at 3GPP TS + 29.173. + + + + + net.java.slee.resource.diameter.slh.SLhServerSession + + This type of activity represents server side of SLh session. Routing-Info-Request (RIR) are + received in this Activity and respective Answers are sent from it. + + This activity type is implicitly created by the Resource Adaptor upon reception of the + Routing-Info-Request message. + + State machine for client SLh sessions can be found at 3GPP 29.173. + + + + + + + All activities define methods required to properly function and expose necessary information to JAIN + SLEE + services. + SLh Server Activity is defined as follows: + + + + public public LCSRoutingInfoAnswer createSLhLCSRoutingInfoAnswer(); + + public void sendLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria) throws IOException; + + + + + public LCSRoutingInfoAnswer createSLhLCSRoutingInfoAnswer(); + + This method creates a SLh-specific Routing-Info-Answer message pre-populated with the AVPs + appropriate for this session. + + + + + public void sendLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria) throws IOException; + + This method sends a Routing-Info-Answer message to the peer. + + + + + SLh Client Activity is defined as follows: + + + public void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) + throws IOException; + + + + + + public void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) throws IOException; + + This method sends a Routing-Info-Request. + + + + + + It is safe to type cast all the mentioned Diameter Activities to it's super interface + net.java.slee.resource.diameter.base.DiameterActivity + defined in Diameter Base Activities section. + + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml new file mode 100644 index 000000000..583218a50 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Activity_Context_Interface_Factory.xml @@ -0,0 +1,33 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Activity Context Interface Factory + + The &THIS.PLATFORM; &THIS.RA; Activity Context Interface Factory is defined as follows: + + + package net.java.slee.resource.diameter.slh; + + import javax.slee.ActivityContextInterface; + import javax.slee.UnrecognizedActivityException; + + public interface SLhActivityContextInterfaceFactory { + + public ActivityContextInterface + getActivityContextInterface(SLhClientSessionActivity cSession + throws UnrecognizedActivityException; + + public ActivityContextInterface + getActivityContextInterface(SLhServerSessionActivity sSession) + throws UnrecognizedActivityException; + + } + + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml new file mode 100644 index 000000000..88b4abbfe --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Events.xml @@ -0,0 +1,74 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Events + + &THIS.RA; Resource Adaptor Type declares the SLh Application specific events, ie, + LCSRoutingInfo-Request/Answer. + + The following tables shows which events are fired on each activity. + + + Events received on SLh Server Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slh.events.LCSRoutingInfoRequest + java.net + 0.8 + net.java.slee.resource. diameter.slh.events.LCSRoutingInfoRequest + + + +
+ + Events received on SLh Client Activity + + + + + + + + Name + Vendor + Version + Class + + + + + net.java.slee.resource. diameter.slh.events.LCSRoutingInfoAnswer + java.net + 0.8 + net.java.slee.resource. diameter.slh.events.LCSRoutingInfoAnswer + + + +
+ + + Spaces where introduced in Name and Event Class column values,to + correctly render the table. + Please remove them when using copy/paste. + + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml new file mode 100644 index 000000000..d69de611a --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Resource_Adaptor_Interface.xml @@ -0,0 +1,150 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Resource Adaptor Interface + + The &THIS.PLATFORM; &THIS.RA; Resource Adaptor SBB Interface provides SBBs with access to the Diameter objects + required for creating and sending messages. It is defined as follows: + + + + package net.java.slee.resource.diameter.slh; + + import java.io.IOException; + + import net.java.slee.resource.diameter.base.CreateActivityException; + import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException; + import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer; + import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; + + public interface SLhProvider { + + public SLhMessageFactory getSLhMessageFactory(); + + public SLhAvpFactory getSLhAvpFactory(); + + public SLhClientSessionActivity createSLhClientSessionActivity() + throws CreateActivityException; + + public SLhClientSessionActivity createSLhClientSessionActivity( + DiameterIdentity destinationHost, DiameterIdentity destinationRealm) + throws CreateActivityException; + + public LCSRoutingInfoAnswer sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) + throws IOException; + + public byte[] marshalSLhLCSRoutingInfoRequest(LCSRoutingInfoRequest rir); + + public byte[] marshalSLhLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria); + + public LCSRoutingInfoRequest unmarshalSLhLCSRoutingInfoRequest(byte[] b) + throws IOException, AvpNotAllowedException; + + public LCSRoutingInfoAnswer unmarshalSLhLCSRoutingInfoAnswer(byte[] b) + throws IOException, AvpNotAllowedException; + + public DiameterIdentity[] getConnectedPeers(); + + public int getPeerCount(); + + } + + + + + + public SLhMessageFactory getSLhMessageFactory(); + + This method returns a message factory to be used to create concrete implementations of SLh + messages. + + + + + public SLhAvpFactory getSLhAvpFactory(); + + This method returns an avp factory to be used to create concrete implementations of SLh + AVPs. + + + + + public SLhClientSessionActivity createSLhClientSessionActivity() throws CreateActivityException; + + + This method creates a new activity to send and receive Diameter messages. + + + + public SLhClientSessionActivity createSLhClientSessionActivity(DiameterIdentity destinationHost, + DiameterIdentity destinationRealm) throws CreateActivityException; + + + This method creates a new activity to send and receive Diameter messages. + + + + public LCSRoutingInfoAnswer sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) throws + IOException; + + + This method sends a Routing-Info-Request message to the appropriate peers, and block until the + response is received then return it. + + + + + public byte[] marshalSLhLCSRoutingInfoRequest(LCSRoutingInfoRequest rir); + + This method marshals a Routing-Info-Request into a byte array that can be serialized (e.g., + stored in a CMP field). + + + + + public byte[] marshalSLhLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria); + + This method marshals a Routing-Info-Answer into a byte array that can be serialized (e.g., + stored in a CMP field). + + + + + public LCSRoutingInfoRequest unmarshalSLhLCSRoutingInfoRequest(byte[] b) throws IOException, + AvpNotAllowedException; + + + This method unmarshals a Routing-Info-Request from a byte array. + + + + public LCSRoutingInfoAnswer unmarshalSLhLCSRoutingInfoAnswer(byte[] b) throws IOException, + AvpNotAllowedException; + + + This method unmarshals a Routing-Info-Answer from a byte array. + + + + public DiameterIdentity[] getConnectedPeers(); + + This method returns the identities of peers this Diameter resource adaptor is connected to. + + + + + public int getPeerCount(); + + This method returns the number of peers this Diameter resource adaptor is connected to. + + + + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml new file mode 100644 index 000000000..38fd70a62 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Restrictions.xml @@ -0,0 +1,14 @@ + + + +%BOOK_ENTITIES; +]> + +
+ + Restrictions + + Current Resource Adaptor Type has no defined restrictions. + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml new file mode 100644 index 000000000..89d788c3e --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra-type/Section-Sbb_Code_Examples.xml @@ -0,0 +1,10 @@ + + + %BOOK_ENTITIES; ]> + +
+ + Sbb Code Examples + + TODO +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml new file mode 100644 index 000000000..dec7fdcd8 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Chapter-Resource_Adaptor.xml @@ -0,0 +1,31 @@ + + + + %BOOK_ENTITIES; + ]> + + + + + Resource Adaptor Implementation + + This RA uses the &THIS.PLATFORM; Diameter Stack, an improvement over jDiameter Stack. The stack is the result of the work done + by &THIS.PLATFORM; Diameter and jDiameter development teams, and source code is provided in all releases. + + + + + + + + + + diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml new file mode 100644 index 000000000..eb7142e31 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Configuration.xml @@ -0,0 +1,51 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Configuration + + The Resource Adaptor supports configuration only at Resource Adaptor Entity creation time, the following + table enumerates the configuration properties: + + + + Resource Adaptor's Configuration Properties + + + + + + + + Property Name + Description + Property Type + Default Value + + + + + authApplicationIds + List of supported Authorization Application Ids in form of {vendor}:{application-id}, + separated by comma ',' + + java.lang.String + 10415:4 + + + +
+ + + JAIN SLEE 1.1 Specification requires values set for properties without a default value, which means + the configuration for those properties are mandatory, otherwise the Resource Adaptor Entity creation + will fail! + + + +
\ No newline at end of file diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml new file mode 100644 index 000000000..72156a3a5 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Default_Resource_Adaptor_Entities.xml @@ -0,0 +1,42 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Default Resource Adaptor Entities + + There is a single Resource Adaptor Entity created when deploying the Resource Adaptor, named + DiameterSLh. The DiameterSLh entity uses the default Resource Adaptor + configuration, specified in. + + + The DiameterSLh entity is also bound to Resource Adaptor Link Name + DiameterSLh, to use it in an Sbb add the following XML to its descriptor: + + + + + Diameter SLh + java.net + 0.8.1 + + + + slee/resources/JDiameterSLhResourceAdaptor/java.net/0.8.1/acif + + + + + slee/resources/diameter-slh-ra-interface + + DiameterSLh + + + ]]> + +
diff --git a/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml new file mode 100644 index 000000000..07c6ba885 --- /dev/null +++ b/resources/diameter-slh/docs/sources/src/main/resources/en-US/ra/Section-Logging_Traces_and_Alarms.xml @@ -0,0 +1,26 @@ + + + + %BOOK_ENTITIES; + ]> + +
+ + Traces and Alarms + +
+ Tracers + Each Resource Adaptor Entity uses a single JAIN SLEE 1.1 Tracer, named + DiameterSLhResourceAdaptor. The related Log4j Logger category, which can be used to change the + Tracer level from Log4j configuration, is + javax.slee.RAEntityNotification[entity=DiameterSLh]. + +
+ +
+ Alarms + No alarms are set by this Resource Adaptor. +
+ +
diff --git a/resources/diameter-slh/du/pom.xml b/resources/diameter-slh/du/pom.xml new file mode 100644 index 000000000..67fd93de7 --- /dev/null +++ b/resources/diameter-slh/du/pom.xml @@ -0,0 +1,89 @@ + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-ra-DU + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh-common-library + ${project.version} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-events + ${pom.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-ratype + ${pom.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-ra + ${pom.version} + + + + + diameter-${pom.artifactId}-${pom.version} + + + org.mobicents.tools + maven-du-plugin + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + diff --git a/resources/diameter-slh/du/src/main/resources/META-INF/deploy-config.xml b/resources/diameter-slh/du/src/main/resources/META-INF/deploy-config.xml new file mode 100644 index 000000000..687fd2149 --- /dev/null +++ b/resources/diameter-slh/du/src/main/resources/META-INF/deploy-config.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/resources/diameter-slh/events/pom.xml b/resources/diameter-slh/events/pom.xml new file mode 100644 index 000000000..8e8cc4df8 --- /dev/null +++ b/resources/diameter-slh/events/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-events + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-base-common-events + ${project.version} + + + + diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java new file mode 100644 index 000000000..bebaca635 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java @@ -0,0 +1,285 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.FailedAvp; + +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; + +/** + * Interface defining LCSRoutingInfoAnswer message. It has following structure: + * + * < LCS-Routing-Info-Answer> ::= < Diameter Header: 8388622, PXY, 16777291 > + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * [ Result-Code ] + * [ Experimental-Result ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * *[ Supported-Features ] + * [ User-Name ] + * [ MSISDN ] + * [ LMSI ] + * [ Serving-Node ] + * *[ Additional-Serving-Node ] + * [ GMLC-Address ] + * [ PPR-Address ] + * [ RIA-Flags ] + * *[ AVP ] + * *[ Failed-AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * + * + * @author Fernando Mendioroz + */ +public interface LCSRoutingInfoAnswer extends DiameterMessage { + + static final int COMMAND_CODE = 8388622; + + /** + * Returns true if the Result-Code AVP is present in the message. + */ + boolean hasResultCode(); + + /** + * Returns the value of the Result-Code AVP, of type Unsigned32. Use + * {@link #hasResultCode()} to check the existence of this AVP. + * + * @return the value of the Result-Code AVP + * @throws IllegalStateException if the Result-Code AVP has not been set on this message + */ + long getResultCode(); + + /** + * Sets the value of the Result-Code AVP, of type Unsigned32. + * + * @throws IllegalStateException if setResultCode has already been called + */ + void setResultCode(long resultCode); + + /** + * Returns the set of Failed-AVP AVPs. + * + * @return + */ + FailedAvp[] getFailedAvps(); + + /** + * Sets a single Failed-AVP AVP in the message, of type Grouped. + * + * @param failedAvp + * @throws IllegalStateException + */ + void setFailedAvp(FailedAvp failedAvp) throws IllegalStateException; + + /** + * Sets the set of Failed-AVP AVPs, with all the values in the given array. + * + * @param failedAvps + * @throws IllegalStateException + */ + void setFailedAvps(FailedAvp[] failedAvps) throws IllegalStateException; + + /** + * Returns true if the User-Name AVP is present in the message. + * + * @return + */ + boolean hasUserName(); + + /** + * Returns the value of the User-Name AVP, of type UTF8String. + * + * @return + */ + String getUserName(); + + /** + * Sets the value of the User-Name AVP, of type UTF8String. + * + * @param userName + * @throws IllegalStateException + */ + void setUserName(String userName) throws IllegalStateException; + + /** + * Returns true if the MSISDN AVP is present in the message. + * + * @return + */ + boolean hasMSISDN(); + + /** + * Returns the value of the MSISDN AVP, of type OctetString. + * + * @return + */ + byte[] getMSISDN(); + + /** + * Sets the value of the MSISDN AVP, of type OctetString. + * + * @param msisdn + * @throws IllegalStateException + */ + void setMSISDN(byte[] msisdn) throws IllegalStateException; + + /** + * Returns true if the LMSI AVP is present in the message. + * + * @return + */ + boolean hasLMSI(); + + /** + * Returns the value of the LMSI AVP, of type OctetString. + * + * @return + */ + byte[] getLMSI(); + + /** + * Sets the value of the LMSI AVP, of type OctetString. + * + * @param lmsi + * @throws IllegalStateException + */ + void setLMSI(byte[] lmsi) throws IllegalStateException; + + /** + * Returns true if the Serving-Node AVP is present in the message. + * + * @return + */ + boolean hasServingNode(); + + /** + * Returns the value of the Serving-Node AVP, of type Grouped. + * + * @return + */ + ServingNodeAvp getServingNode(); + + /** + * Sets the value of the Serving-Node AVP, of type Grouped. + * + * @param servingNode + * @throws IllegalStateException + */ + void setServingNode(ServingNodeAvp servingNode) throws IllegalStateException; + + /** + * Returns true if the Additional-Serving-Node AVP is present in the message. + * + * @return + */ + boolean hasAdditionalServingNode(); + + /** + * Returns the value of the Additional-Serving-Node AVP, of type Grouped. + * + * @return + */ + AdditionalServingNodeAvp getAdditionalServingNode(); + + /** + * Sets the value of the Additional-Serving-Node AVP, of type Grouped. + * + * @param additionalServingNode + * @throws IllegalStateException + */ + void setAdditionalServingNode(AdditionalServingNodeAvp additionalServingNode) throws IllegalStateException; + + /** + * Returns true if the GMLC-Address AVP is present in the message. + * + * @return + */ + boolean hasGMLCAddress(); + + /** + * Returns the value of the GMLC-Address AVP, of type Address. + * + * @return + */ + Address getGMLCAddress(); + + /** + * Sets the value of the GMLC-Address AVP, of type Address. + * + * @param gmlcNumber + * @throws IllegalStateException + */ + void setGMLCAddress(Address gmlcNumber) throws IllegalStateException; + + /** + * Returns true if the PPR-Address AVP is present in the message. + * + * @return + */ + boolean hasPPRAddress(); + + /** + * Returns the value of the PPR-Address AVP, of type Address. + * + * @return + */ + Address getPPRAddress(); + + /** + * Sets the value of the PPR-Address AVP, of type Address. + * + * @param pprAddress + * @throws IllegalStateException + */ + void setPPRAddress(Address pprAddress) throws IllegalStateException; + + /** + * Returns true if the RIA-Flags AVP is present in the message. + * + * @return + */ + boolean hasRIAFlags(); + + /** + * Returns the value of the RIA-Flags AVP, of type Unsigned32. + * + * @return + */ + long getRIAFlags(); + + /** + * Sets the value of the RIA-Flags AVP, of type Address. + * + * @param riaFlags + * @throws IllegalStateException + */ + void setRIAFlags(long riaFlags) throws IllegalStateException; + +} + diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoRequest.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoRequest.java new file mode 100644 index 000000000..0179b95d0 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoRequest.java @@ -0,0 +1,164 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events; + +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; + +/** + * Interface for LCSRoutingInfoRequest type of message. It has following structure: + * + * < LCS-Routing-Info-Request> ::= < Diameter Header: 8388622, REQ, PXY, 16777291 > + * + * < Session-Id > + * [ Vendor-Specific-Application-Id ] + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * [ Destination-Host ] + * { Destination-Realm } + * [ User-Name ] + * [ MSISDN ] + * [ GMLC-Number ] + * *[ Supported-Features ] + * *[ Proxy-Info ] + * *[ Route-Record ] + * *[ AVP ] + * + * @author Fernando Mendioroz + */ +public interface LCSRoutingInfoRequest extends DiameterMessage { + + static final int COMMAND_CODE = 8388622; + + /** + * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. + * + * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise + */ + public boolean hasVendorSpecificApplicationId(); + + /** + * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message + */ + public VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); + + /** + * Sets the value of the Vendor-Specific-Application-Id AVP, of type Grouped. + * + * @param vendorSpecificApplicationId the new value for the Vendor-Specific-Application-Id AVP + */ + public void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vendorSpecificApplicationId); + + /** + * Returns true if the Auth-Session-State AVP is present in the message. + * + * @return true if the Auth-Session-State AVP is present in the message, false otherwise + */ + public boolean hasAuthSessionState(); + + /** + * Returns the value of the Auth-Session-State AVP, of type Enumerated. + * + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + public AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + public void setAuthSessionState(AuthSessionStateType authSessionState); + + /** + * Returns true if the User-Name AVP is present in the message. + * + * @return + */ + boolean hasUserName(); + + /** + * Returns the value of the User-Name AVP, of type UTF8String. + * + * @return + */ + String getUserName(); + + /** + * Sets the value of the User-Name AVP, of type UTF8String. + * + * @param userName + * @throws IllegalStateException + */ + void setUserName(String userName) throws IllegalStateException; + + /** + * Returns true if the MSISDN AVP is present in the message. + * + * @return + */ + boolean hasMSISDN(); + + /** + * Returns the value of the MSISDN AVP, of type OctetString. + * + * @return + */ + byte[] getMSISDN(); + + /** + * Sets the value of the MSISDN AVP, of type OctetString. + * + * @param msisdn + * @throws IllegalStateException + */ + void setMSISDN(byte[] msisdn) throws IllegalStateException; + + /** + * Returns true if the GMLC-Number AVP is present in the message. + * + * @return + */ + boolean hasGMLCNumber(); + + /** + * Returns the value of the GMLC-Number AVP, of type OctetString. + * + * @return + */ + byte[] getGMLCNumber(); + + /** + * Sets the value of the GMLC-Number AVP, of type OctetString. + * + * @param gmlcNumber + * @throws IllegalStateException + */ + void setGMLCNumber(byte[] gmlcNumber) throws IllegalStateException; + +} + + diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvp.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvp.java new file mode 100644 index 000000000..b93685969 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvp.java @@ -0,0 +1,189 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Defines an interface representing the Additional-Serving-Node grouped AVP type. + * From the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.173 V14.0.0) specification: + *

+ *

+ * 6.4.8	Additional-Serving-Node
+ *
+ * The Additional-Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the
+ * targeted user.
+ *
+ * AVP format
+ *
+ * 				Additional-Serving-Node ::=	
+ * 													        [ SGSN-Number ]
+ * 												          [ MME-Name ]
+ * 													        [ SGSN-Name ]
+ * 													        [ SGSN-Realm ]
+ * 													        [ MME-Realm ]
+ * 													        [ MSC-Number ]
+ * 													        [ 3GPP-AAA-Server-Name ]
+ * 													        [ LCS-Capabilities-Sets ]
+ * 													        [ GMLC-Address ]
+ * 													       *[ AVP ]
+ *
+ * The GMLC-Address AVP included in the Serving-Node grouped AVP shall contain, if present,
+ * the IPv4 or IPv6 address of the GMLC associated with the serving node
+ * (i.e., either the home GMLC or the visited GMLC, depending on the location of the serving node).
+ * 
+ * + * @author Fernando Mendioroz + */ + +public interface AdditionalServingNodeAvp extends GroupedAvp { + + /* + From 3GPP TS 29.272 (v12.9.0) + 7.3.102 SGSN-Number + + The SGSN-Number AVP is of type OctetString and it shall contain the ISDN number of the SGSN. For further details on the definition of this AVP, + see 3GPP TS 23.003[3]. This AVP contains an SGSN-Number in international number format as described in ITU-T Rec E.164 [41] and shall be encoded + as a TBCD-string. See 3GPP TS 29.002 [24] for encoding of TBCD-strings. + This AVP shall not include leading indicators for the nature of address and the numbering plan; + it shall contain only the TBCD-encoded digits of the address. + */ + boolean hasSGSNNumber(); + + byte[] getSGSNNumber(); + + void setSGSNNumber(byte[] additionalSgsnNumber); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.13 SGSN-Name + + The SGSN-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasSGSNName(); + + DiameterIdentity getSGSNName(); + + void setSGSNName(DiameterIdentity additionalSgsnName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.14 SGSN-Realm + + The SGSN-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasSGSNRealm(); + + DiameterIdentity getSGSNRealm(); + + void setSGSNRealm(DiameterIdentity additionalSgsnRealm); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.4 MME-Name + + The MME-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasMMEName(); + + DiameterIdentity getMMEName(); + + void setMMEName(DiameterIdentity additionalMmeName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.12 MME-Realm + + The MME-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasMMERealm(); + + DiameterIdentity getMMERealm(); + + void setMMERealm(DiameterIdentity additionalMmeRealm); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.5 MSC-Number + + The MSC-Number AVP is of type OctetString and it shall contain the ISDN number of the serving MSC or MSC server in international number + format as described in ITU-T Rec E.164 [15] and shall be encoded as a TBCD-string. + See 3GPP TS 29.002 [3] for encoding of TBCD-strings. + */ + boolean hasMSCNumber(); + + byte[] getMSCNumber(); + + void setMSCNumber(byte[] additionalMscNumber); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.6 LCS-Capabilities-Sets + + The LCS-Capabilities-Sets AVP is of type Unsigned32 and it shall contain a bit mask. The meaning of the bits shall be as defined + in 3GPP 29.002 [3]. + */ + boolean hasLcsCapabilitiesSets(); + + long getLcsCapabilitiesSets(); + + void setLcsCapabilitiesSets(long lcsCapabilitiesSets); + + /* + From 3GPP TS 29.273 (v14.0.0) + + 8.2.3.24 3GPP-AAA-Server-Name + + The 3GPP-AAA-Server-Name AVP is of type DiameterIdentity, and defines the Diameter address of the 3GPP AAA Server node. + */ + boolean has3GPPAAAServerName(); + + DiameterIdentity get3GPPAAAServerName(); + + void set3GPPAAAServerName(DiameterIdentity additional3gppAAAServerName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.7 GMLC-Address + + The GMLC-Address AVP is of type Address and shall contain the IPv4 or IPv6 address of H-GMLC or the V-GMLC associated with the serving node. + */ + boolean hasGMLCAddress(); + + Address getGMLCAddress(); + + void setGMLCAddress(Address additionalGmlcAddress); + +} diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/LCSRoutingInfoAVPCodes.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/LCSRoutingInfoAVPCodes.java new file mode 100644 index 000000000..310861394 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/LCSRoutingInfoAVPCodes.java @@ -0,0 +1,232 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events.avp; + +/* + * + * @author Fernando Mendioroz + */ + +public class LCSRoutingInfoAVPCodes { + + private LCSRoutingInfoAVPCodes() { + + } + + public static final long SLh_VENDOR_ID = 10415L; + public static final long SLh_AUTH_APP_ID = 16777291L; + + /** + *
+   * Name......: LMSI
+   * Code......: 2400
+   * Section...: 6.4.2
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LMSI = 2400; + + /** + *
+   * Name......: Serving-Node
+   * Code......: 2401
+   * Section...: 6.4.3
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int SERVING_NODE = 2401; + + /** + *
+   * Name......: MME-Name
+   * Code......: 2403
+   * Section...: 6.4.4
+   * Type......: DiameterIdentity
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int MME_NAME = 2402; + + /** + *
+   * Name......: MSC-Number
+   * Code......: 2403
+   * Section...: 6.4.5
+   * Type......: OctetString
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int MSC_NUMBER = 2403; + + /** + *
+   * Name......: LCS-Capabilities-Sets
+   * Code......: 2404
+   * Section...: 6.4.6
+   * Type......: Unsigned32
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int LCS_CAPABILITIES_SETS = 2404; + + /** + *
+   * Name......: GMLC-Address
+   * Code......: 2405
+   * Section...: 6.4.7
+   * Type......: Address
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int GMLC_ADDRESS = 2405; + + /** + *
+   * Name......: Additional-Serving-Node
+   * Code......: 2406
+   * Section...: 6.4.8
+   * Type......: Grouped
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int ADDITIONAL_SERVING_NODE = 2406; + + /** + *
+   * Name......: PPR-Address
+   * Code......: 2407
+   * Section...: 6.4.9
+   * Type......: Address
+   * Must......: M,V
+   * May.......: -
+   * Should....: -
+   * MustNot...: -
+   * May Encr..: No
+   * 
+ */ + public static final int PPR_ADDRESS = 2407; + + /** + *
+   * Name......: MME-Realm
+   * Code......: 2408
+   * Section...: 6.4.12
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int MME_REALM = 2408; + + /** + *
+   * Name......: SGSN-Name
+   * Code......: 2409
+   * Section...: 6.4.13
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int SGSN_NAME = 2409; + + /** + *
+   * Name......: SGSN-Realm
+   * Code......: 2410
+   * Section...: 6.4.14
+   * Type......: DiameterIdentity
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int SGSN_REALM = 2410; + + /** + *
+   * Name......: RIA-Flags
+   * Code......: 2411
+   * Section...: 6.4.15
+   * Type......: Unsigned32
+   * Must......: V
+   * May.......: -
+   * Should....: -
+   * MustNot...: M
+   * May Encr..: No
+   * 
+ */ + public static final int RIA_FLAGS = 2411; + + // SLh re-used Diameter AVPs + public static final int USER_NAME = 1; // IMSI + // 3GPP TS 29.329 + public static final int MSISDN = 701; + // 3GPP TS 29.272 + public static final int SGSN_NUMBER = 1489; + // 3GPP TS 29.229 + public static final int SUPPORTED_FEATURES = 628; + public static final int FEATURE_LIST_ID = 629; + public static final int FEATURE_LIST = 630; + public static final int GMLC_NUMBER = 1474; + public static final int TGPP_AAA_SERVER_NAME = 318; + +} + diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/ServingNodeAvp.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/ServingNodeAvp.java new file mode 100644 index 000000000..1d10bba95 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/ServingNodeAvp.java @@ -0,0 +1,190 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Defines an interface representing the Serving-Node grouped AVP type. + * From the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.173 V14.0.0) specification: + *

+ *

+ * 6.4.3 Serving-Node
+ *
+ * The Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the
+ * targeted user.
+ *
+ * AVP format
+ *
+ * 				Serving-Node ::=	
+ * 													[ SGSN-Number ]
+ * 													[ SGSN-Name ]
+ * 													[ SGSN-Realm ]
+ * 													[ MME-Name ]
+ * 													[ MME-Realm ]
+ * 													[ MSC-Number ]
+ * 													[ 3GPP-AAA-Server-Name ]
+ * 													[ LCS-Capabilities-Sets ]
+ * 													[ GMLC-Address ]
+ * 												 *[ AVP ]
+ *
+ * The GMLC-Address AVP included in the Serving-Node grouped AVP shall contain, if present,
+ * the IPv4 or IPv6 address of the GMLC associated with the serving node
+ * (i.e., either the home GMLC or the visited GMLC, depending on the location of the serving node).
+ * 
+ * + * @author Fernando Mendioroz + */ + +public interface ServingNodeAvp extends GroupedAvp { + + /* + From 3GPP TS 29.272 (v12.9.0) + + 7.3.102 SGSN-Number + + The SGSN-Number AVP is of type OctetString and it shall contain the ISDN number of the SGSN. For further details on the definition of this AVP, + see 3GPP TS 23.003[3]. This AVP contains an SGSN-Number in international number format as described in ITU-T Rec E.164 [41] and shall be encoded + as a TBCD-string. See 3GPP TS 29.002 [24] for encoding of TBCD-strings. + This AVP shall not include leading indicators for the nature of address and the numbering plan; + it shall contain only the TBCD-encoded digits of the address. + */ + boolean hasSGSNNumber(); + + byte[] getSGSNNumber(); + + void setSGSNNumber(byte[] sgsnNumber); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.13 SGSN-Name + + The SGSN-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasSGSNName(); + + DiameterIdentity getSGSNName(); + + void setSGSNName(DiameterIdentity sgsnName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.14 SGSN-Realm + + The SGSN-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving SGSN. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasSGSNRealm(); + + DiameterIdentity getSGSNRealm(); + + void setSGSNRealm(DiameterIdentity sgsnRealm); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.4 MME-Name + + The MME-Name AVP is of type DiameterIdentity and it shall contain the Diameter identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasMMEName(); + + DiameterIdentity getMMEName(); + + void setMMEName(DiameterIdentity mmeName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.12 MME-Realm + + The MME-Realm AVP is of type DiameterIdentity and it shall contain the Diameter Realm Identity of the serving MME. + For further details on the encoding of this AVP, see IETF RFC 6733 [17]. + */ + boolean hasMMERealm(); + + DiameterIdentity getMMERealm(); + + void setMMERealm(DiameterIdentity mmeRealm); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.5 MSC-Number + + The MSC-Number AVP is of type OctetString and it shall contain the ISDN number of the serving MSC or MSC server in international number + format as described in ITU-T Rec E.164 [15] and shall be encoded as a TBCD-string. + See 3GPP TS 29.002 [3] for encoding of TBCD-strings. + */ + boolean hasMSCNumber(); + + byte[] getMSCNumber(); + + void setMSCNumber(byte[] mscNumber); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.6 LCS-Capabilities-Sets + + The LCS-Capabilities-Sets AVP is of type Unsigned32 and it shall contain a bit mask. + The meaning of the bits shall be as defined in 3GPP 29.002 [3]. + */ + boolean hasLcsCapabilitiesSets(); + + long getLcsCapabilitiesSets(); + + void setLcsCapabilitiesSets(long lcsCapabilitiesSets); + + /* + From 3GPP TS 29.273 (v14.0.0) + + 8.2.3.24 3GPP-AAA-Server-Name + + The 3GPP-AAA-Server-Name AVP is of type DiameterIdentity, and defines the Diameter address of the 3GPP AAA Server node. + */ + boolean has3GPPAAAServerName(); + + DiameterIdentity get3GPPAAAServerName(); + + void set3GPPAAAServerName(DiameterIdentity tgppAAAServerName); + + /* + From 3GPP TS 29.173 (v14.0.0) + + 6.4.7 GMLC-Address + + The GMLC-Address AVP is of type Address and shall contain the IPv4 or IPv6 address of H-GMLC or the V-GMLC associated with the serving node. + */ + boolean hasGMLCAddress(); + + Address getGMLCAddress(); + + void setGMLCAddress(Address gmlcAddress); + +} diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvp.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvp.java new file mode 100644 index 000000000..7ab7027ef --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvp.java @@ -0,0 +1,119 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.base.events.avp.GroupedAvp; + +/** + * Defines an interface representing the Supported-Features grouped AVP type. + * From the Diameter Cx and Dx Reference Point Protocol Details (3GPP TS 29.229 V14.0.0) specification, + * reused by SLh (3GPP TS 29.173): + *

+ *

+ * 6.3.29        Supported-Features AVP
+ *
+ * The Supported-Features AVP is of type Grouped. If this AVP is present it may inform the
+ * destination host about the features that the origin host supports for the application.
+ * The Feature-List AVP contains a list of supported features of the origin host.
+ * The Vendor-ID AVP and the Feature-List AVP shall together identify which feature list is
+ * carried in the Supported-Features AVP for the Application-ID present in the command header.
+ *
+ * Where a Supported-Features AVP is used to identify features that have been defined by
+ * 3GPP, the Vendor-ID AVP shall contain the vendor ID of 3GPP. Vendors may define
+ * proprietary features, but it is strongly recommended that the possibility is used only as
+ * the last resort. Where the Supported-Features AVP is used to identify features that have
+ * been defined by a vendor other than 3GPP, it shall contain the vendor ID of the specific
+ * vendor in question.
+ *
+ * If there are multiple feature lists defined by the same vendor and the same application,
+ * the Feature-List-ID AVP shall differentiate those lists from one another.
+ * The destination host shall use the value of the Feature-List-ID AVP to identify the feature list.
+ *
+ * AVP format
+ * Supported-Features ::=  < AVP Header: 628 10415 >
+ *                         { Vendor-Id }
+ *                         { Feature-List-ID }
+ *                         { Feature-List }
+ *                        *[AVP]
+ * 
+ * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + * @author Bartosz Baranowski + */ +public interface SupportedFeaturesAvp extends GroupedAvp { + + /** + * Returns true if the Vendor-Id AVP is present in the message. + */ + boolean hasVendorId(); + + /** + * Returns the value of the Vendor-Id AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getVendorId(); + + /** + * Sets the value of the Vendor-Id AVP, of type Unsigned32. + * + * @throws IllegalStateException if setVendorId has already been called + */ + void setVendorId(long vendorId); + + /** + * Returns true if the Feature-List-ID AVP is present in the message. + */ + boolean hasFeatureListId(); + + /** + * Returns the value of the Feature-List-ID AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getFeatureListId(); + + /** + * Sets the value of the Feature-List-ID AVP, of type Unsigned32. + * + * @throws IllegalStateException if setFeatureListId has already been called + */ + void setFeatureListId(long featureListId); + + /** + * Returns true if the Feature-List AVP is present in the message. + */ + boolean hasFeatureList(); + + /** + * Returns the value of the Feature-List AVP, of type Unsigned32. + * A return value of null implies that the AVP has not been set. + */ + long getFeatureList(); + + /** + * Sets the value of the Feature-List AVP, of type Unsigned32. + * + * @throws IllegalStateException if setFeatureList has already been called + */ + void setFeatureList(long featureList); + +} diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java new file mode 100644 index 000000000..1e7a5ac4a --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java @@ -0,0 +1,278 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.events; + +import org.jdiameter.api.Message; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer; + +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; + +import org.mobicents.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.ServingNodeAvpImpl;; + +/** + * Implementation for {@link LCSRoutingInfoAnswer} + * + * @author Fernando Mendioroz + */ +public class LCSRoutingInfoAnswerImpl extends DiameterMessageImpl implements LCSRoutingInfoAnswer { + + /** + * @param message + */ + public LCSRoutingInfoAnswerImpl(Message message) { + super(message); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasUserName() + */ + @Override + public boolean hasUserName() { + return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getUserName() + */ + @Override + public String getUserName() { + return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setUserName(java.lang.String) + */ + @Override + public void setUserName(String imsi) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, imsi); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasMSISDN() + */ + @Override + public boolean hasMSISDN() { + return hasAvp(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getMSISDN() + */ + @Override + public byte[] getMSISDN() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setMSISDN(byte[]) + */ + @Override + public void setMSISDN(byte[] msisdn) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, msisdn); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasLMSI() + */ + @Override + public boolean hasLMSI() { + return hasAvp(LCSRoutingInfoAVPCodes.LMSI, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getLMSI() + */ + @Override + public byte[] getLMSI() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.LMSI, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setLMSI(byte[]) + */ + @Override + public void setLMSI(byte[] lmsi) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.LMSI, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, lmsi); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasServingNode() + */ + @Override + public boolean hasServingNode() { + return hasAvp(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getServingNode() + */ + @Override + public ServingNodeAvp getServingNode() { + return (ServingNodeAvp) getAvpAsCustom(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, ServingNodeAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setServingNode(net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp) + */ + @Override + public void setServingNode(ServingNodeAvp servingNode) { + addAvp(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, servingNode.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasAdditionalServingNode() + */ + @Override + public boolean hasAdditionalServingNode() { + return hasAvp(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getAdditionalServingNode() + */ + @Override + public AdditionalServingNodeAvp getAdditionalServingNode() { + return (AdditionalServingNodeAvp) getAvpAsCustom(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, AdditionalServingNodeAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setAdditionalServingNode(net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp) + */ + @Override + public void setAdditionalServingNode(AdditionalServingNodeAvp additionalServingNode) { + addAvp(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalServingNode.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasGMLCAddress() + */ + @Override + public boolean hasGMLCAddress() { + return hasAvp(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getGMLCAddress() + */ + @Override + public Address getGMLCAddress() { + return getAvpAsAddress(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setGMLCAddress(net.java.slee.resource.diameter.base.events.avp.Address) + */ + @Override + public void setGMLCAddress(Address gmlcAddress) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, gmlcAddress); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasPPRAddress() + */ + @Override + public boolean hasPPRAddress() { + return hasAvp(LCSRoutingInfoAVPCodes.PPR_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getPPRAddress() + */ + @Override + public Address getPPRAddress() { + return getAvpAsAddress(LCSRoutingInfoAVPCodes.PPR_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setPPRAddress(net.java.slee.resource.diameter.base.events.avp.Address) + */ + @Override + public void setPPRAddress(Address pprAddress) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.PPR_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, pprAddress); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasRIAFlags() + */ + @Override + public boolean hasRIAFlags() { + return hasAvp(LCSRoutingInfoAVPCodes.RIA_FLAGS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getRIAFlags() + */ + @Override + public long getRIAFlags() { + return getAvpAsInteger32(LCSRoutingInfoAVPCodes.RIA_FLAGS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setRIAFlags(java.lang.Long) + */ + @Override + public void setRIAFlags(long riaFlags) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.RIA_FLAGS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, riaFlags); + } + + @Override + public String getLongName() { + return "Routing-Info-Answer"; + } + + @Override + public String getShortName() { + return "RIA"; + } + +} + + diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java new file mode 100644 index 000000000..a4651e273 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java @@ -0,0 +1,159 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.events; + +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; +import org.jdiameter.api.Message; + +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; + +/** + * Implementation for {@link LCSRoutingInfoRequest} + * + * @author Fernando Mendioroz + */ +public class LCSRoutingInfoRequestImpl extends DiameterMessageImpl implements LCSRoutingInfoRequest { + + /** + * @param message + */ + public LCSRoutingInfoRequestImpl(Message message) { + super(message); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSInfoRequest#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSInfoRequest#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSInfoRequest#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#hasUserName() + */ + @Override + public boolean hasUserName() { + return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#getUserName() + */ + @Override + public String getUserName() { + return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#setUserName(java.lang.String) + */ + @Override + public void setUserName(String imsi) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, imsi); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#hasMSISDN() + */ + @Override + public boolean hasMSISDN() { + return hasAvp(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#getMSISDN() + */ + @Override + public byte[] getMSISDN() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#setMSISDN(byte[]) + */ + @Override + public void setMSISDN(byte[] msisdn) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.MSISDN, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, msisdn); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#hasGMLCNumber() + */ + @Override + public boolean hasGMLCNumber() { + return hasAvp(LCSRoutingInfoAVPCodes.GMLC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#getGMLCNumber() + */ + @Override + public byte[] getGMLCNumber() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.GMLC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest#setGMLCNumber(byte[]) + */ + @Override + public void setGMLCNumber(byte[] gmlcNumber) throws IllegalStateException { + addAvp(LCSRoutingInfoAVPCodes.GMLC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, gmlcNumber); + } + + @Override + public String getLongName() { + return "Routing-Info-Request"; + } + + @Override + public String getShortName() { + return "RIR"; + } + +} + diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvpImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvpImpl.java new file mode 100644 index 000000000..0a6b9eb95 --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/AdditionalServingNodeAvpImpl.java @@ -0,0 +1,160 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * Implementation for {@link net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp} + * + * @author Fernando Mendioroz + */ +public class AdditionalServingNodeAvpImpl extends GroupedAvpImpl implements AdditionalServingNodeAvp { + + public AdditionalServingNodeAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public AdditionalServingNodeAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasSGSNNumber() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public byte[] getSGSNNumber() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNNumber(byte[] additionalSgsnNumber) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalSgsnNumber); + } + + public boolean hasSGSNName() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getSGSNName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNName(DiameterIdentity additionalSgsnName) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalSgsnName); + } + + public boolean hasSGSNRealm() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getSGSNRealm() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNRealm(DiameterIdentity additionalSgsnRealm) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalSgsnRealm); + } + + public boolean hasMMEName() { + return hasAvp(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getMMEName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMMEName(DiameterIdentity additionalMmeName) { + addAvp(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalMmeName); + } + + public boolean hasMMERealm() { + return hasAvp(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getMMERealm() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMMERealm(DiameterIdentity additionalMmeRealm) { + addAvp(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalMmeRealm); + } + + public boolean hasMSCNumber() { + return hasAvp(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public byte[] getMSCNumber() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMSCNumber(byte[] additionalMscNumber) { + addAvp(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalMscNumber); + } + + public boolean hasLcsCapabilitiesSets() { + return hasAvp(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public long getLcsCapabilitiesSets() { + return getAvpAsUnsigned32(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setLcsCapabilitiesSets(long additionalLcsCapabilitiesSets) { + addAvp(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalLcsCapabilitiesSets); + } + + public boolean has3GPPAAAServerName() { + return hasAvp(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity get3GPPAAAServerName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void set3GPPAAAServerName(DiameterIdentity additional3gppAAAServerName) { + addAvp(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additional3gppAAAServerName); + } + + public boolean hasGMLCAddress() { + return hasAvp(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public Address getGMLCAddress() { + return getAvpAsAddress(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setGMLCAddress(Address additionalGmlcAddress) { + addAvp(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, additionalGmlcAddress); + } + +} diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/ServingNodeAvpImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/ServingNodeAvpImpl.java new file mode 100644 index 000000000..fbd71bbbd --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/ServingNodeAvpImpl.java @@ -0,0 +1,162 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +/** + * Implementation for {@link net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp} + * + * @author Fernando Mendioroz + */ +public class ServingNodeAvpImpl extends GroupedAvpImpl implements ServingNodeAvp { + + public ServingNodeAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public ServingNodeAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + public boolean hasSGSNNumber() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public byte[] getSGSNNumber() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNNumber(byte[] sgsnNumber) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, sgsnNumber); + } + + public boolean hasSGSNName() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getSGSNName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNName(DiameterIdentity sgsnName) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, sgsnName); + } + + public boolean hasSGSNRealm() { + return hasAvp(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getSGSNRealm() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setSGSNRealm(DiameterIdentity sgsnRealm) { + addAvp(LCSRoutingInfoAVPCodes.SGSN_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, sgsnRealm); + } + + public boolean hasMMEName() { + return hasAvp(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getMMEName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMMEName(DiameterIdentity mmeName) { + addAvp(LCSRoutingInfoAVPCodes.MME_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, mmeName); + } + + public boolean hasMMERealm() { + return hasAvp(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity getMMERealm() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMMERealm(DiameterIdentity mmeRealm) { + addAvp(LCSRoutingInfoAVPCodes.MME_REALM, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, mmeRealm); + } + + public boolean hasMSCNumber() { + return hasAvp(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public byte[] getMSCNumber() { + return getAvpAsOctetString(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setMSCNumber(byte[] mscNumber) { + addAvp(LCSRoutingInfoAVPCodes.MSC_NUMBER, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, mscNumber); + } + + public boolean hasLcsCapabilitiesSets() { + return hasAvp(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public long getLcsCapabilitiesSets() { + return getAvpAsUnsigned32(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setLcsCapabilitiesSets(long lcsCapabilitiesSets) { + addAvp(LCSRoutingInfoAVPCodes.LCS_CAPABILITIES_SETS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, lcsCapabilitiesSets); + } + + public boolean has3GPPAAAServerName() { + return hasAvp(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public DiameterIdentity get3GPPAAAServerName() { + return getAvpAsDiameterIdentity(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void set3GPPAAAServerName(DiameterIdentity tgppAAAServerName) { + addAvp(LCSRoutingInfoAVPCodes.TGPP_AAA_SERVER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, tgppAAAServerName); + } + + public boolean hasGMLCAddress() { + return hasAvp(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public Address getGMLCAddress() { + return getAvpAsAddress(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + public void setGMLCAddress(Address gmlcAddress) { + addAvp(LCSRoutingInfoAVPCodes.GMLC_ADDRESS, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, gmlcAddress); + } + +} + diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvpImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvpImpl.java new file mode 100644 index 000000000..82ff4e69e --- /dev/null +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/avp/SupportedFeaturesAvpImpl.java @@ -0,0 +1,118 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.events.avp; + +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp; + +import org.jdiameter.api.Avp; +import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl; + +/** + * Implementation of AVP: {@link SupportedFeaturesAvp} interface. + * + * @author Bartosz Baranowski + * @author Alexandre Mendonca + * @author Fernando Mendioroz + */ +public class SupportedFeaturesAvpImpl extends GroupedAvpImpl implements SupportedFeaturesAvp { + + public SupportedFeaturesAvpImpl() { + super(); + } + + /** + * @param code + * @param vendorId + * @param mnd + * @param prt + * @param value + */ + public SupportedFeaturesAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) { + super(code, vendorId, mnd, prt, value); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#getFeatureList() + */ + public long getFeatureList() { + return getAvpAsUnsigned32(LCSRoutingInfoAVPCodes.FEATURE_LIST, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#hasFeatureList() + */ + public boolean hasFeatureList() { + return hasAvp(LCSRoutingInfoAVPCodes.FEATURE_LIST, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#setFeatureList(long) + */ + public void setFeatureList(long featureList) { + addAvp(LCSRoutingInfoAVPCodes.FEATURE_LIST, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, featureList); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#getFeatureListId() + */ + public long getFeatureListId() { + return getAvpAsUnsigned32(LCSRoutingInfoAVPCodes.FEATURE_LIST_ID, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#hasFeatureListId() + */ + public boolean hasFeatureListId() { + return hasAvp(LCSRoutingInfoAVPCodes.FEATURE_LIST_ID, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#setFeatureListId(long) + */ + public void setFeatureListId(long featureListId) { + addAvp(LCSRoutingInfoAVPCodes.FEATURE_LIST_ID, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, featureListId); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#hasVendorId() + */ + public boolean hasVendorId() { + return hasAvp(Avp.VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp#setVendorId(long) + */ + public void setVendorId(long vendorId) { + addAvp(Avp.VENDOR_ID, vendorId); + } + +} diff --git a/resources/diameter-slh/events/src/main/resources/META-INF/event-jar.xml b/resources/diameter-slh/events/src/main/resources/META-INF/event-jar.xml new file mode 100644 index 000000000..4ccbfe6b5 --- /dev/null +++ b/resources/diameter-slh/events/src/main/resources/META-INF/event-jar.xml @@ -0,0 +1,27 @@ + + + + + + + + diameter.base.common + java.net + 1.0 + + + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest + java.net + 0.8 + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest + + + + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer + java.net + 0.8 + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer + + + diff --git a/resources/diameter-slh/pom.xml b/resources/diameter-slh/pom.xml new file mode 100644 index 000000000..6407888cd --- /dev/null +++ b/resources/diameter-slh/pom.xml @@ -0,0 +1,72 @@ + + + + 4.0.0 + + pom + + + org.mobicents.servers.jainslee.diameter + restcomm-slee-diameter + 7.0.0-SNAPSHOT + ../.. + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + + + ratype + events + ra + testsuite + du + + + + + restcomm + Diameter SLh + diameter-slh + DIAMETER_SLh + + + + + release + + docs + release + + + + maven-release + + docs + release + + + + + + + + maven-eclipse-plugin + org.mobicents.tools + false + + + + + xml-apis:xml-apis + jtidy:jtidy + + true + slee-ra-diameter-slh + + + + + + \ No newline at end of file diff --git a/resources/diameter-slh/ra/pom.xml b/resources/diameter-slh/ra/pom.xml new file mode 100644 index 000000000..e583ea1ee --- /dev/null +++ b/resources/diameter-slh/ra/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-ra + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-ratype + ${pom.version} + + + ${pom.groupId} + restcomm-slee-ra-diameter-slh-common-ra + ${project.version} + + + org.mobicents.servers.jainslee.core + fault-tolerant-ra-api + ${pom.version} + + + org.mobicents.resources + restcomm-slee-ra-diameter-base-common-ra + ${project.version} + + + + \ No newline at end of file diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java new file mode 100644 index 000000000..f2917b0ef --- /dev/null +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java @@ -0,0 +1,946 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh; + +import static org.jdiameter.client.impl.helpers.Parameters.MessageTimeOut; + +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import java.util.List; + +import javax.management.ObjectName; +import javax.naming.OperationNotSupportedException; +import javax.slee.Address; +import javax.slee.facilities.EventLookupFacility; +import javax.slee.facilities.Tracer; +import javax.slee.resource.ActivityFlags; +import javax.slee.resource.ActivityHandle; +import javax.slee.resource.ConfigProperties; +import javax.slee.resource.EventFlags; +import javax.slee.resource.FailureReason; +import javax.slee.resource.FireableEventType; +import javax.slee.resource.InvalidConfigurationException; +import javax.slee.resource.Marshaler; +import javax.slee.resource.ReceivableService; +import javax.slee.resource.ResourceAdaptor; +import javax.slee.resource.ResourceAdaptorContext; +import javax.slee.resource.SleeEndpoint; + +import net.java.slee.resource.diameter.Validator; +import net.java.slee.resource.diameter.base.CreateActivityException; +import net.java.slee.resource.diameter.base.DiameterActivity; +import net.java.slee.resource.diameter.base.DiameterAvpFactory; +import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; +import net.java.slee.resource.diameter.slh.SLhAVPFactory; +import net.java.slee.resource.diameter.slh.SLhClientSessionActivity; +import net.java.slee.resource.diameter.slh.SLhMessageFactory; +import net.java.slee.resource.diameter.slh.SLhProvider; +import net.java.slee.resource.diameter.slh.SLhServerSessionActivity; + +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; + +import org.jboss.mx.util.MBeanServerLocator; +import org.jdiameter.api.Answer; +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.AvpDataException; +import org.jdiameter.api.EventListener; +import org.jdiameter.api.IllegalDiameterStateException; +import org.jdiameter.api.InternalException; +import org.jdiameter.api.Message; +import org.jdiameter.api.Peer; +import org.jdiameter.api.PeerTable; +import org.jdiameter.api.Request; +import org.jdiameter.api.Session; +import org.jdiameter.api.SessionFactory; +import org.jdiameter.api.Stack; +import org.jdiameter.api.app.AppSession; +import org.jdiameter.api.app.StateChangeListener; +import org.jdiameter.api.slh.ClientSLhSession; +import org.jdiameter.api.slh.ServerSLhSession; + +import org.jdiameter.client.api.ISessionFactory; +import org.mobicents.diameter.stack.DiameterListener; +import org.mobicents.diameter.stack.DiameterStackMultiplexerMBean; +import org.mobicents.slee.resource.diameter.DiameterActivityManagement; +import org.mobicents.slee.resource.diameter.LocalDiameterActivityManagement; +import org.mobicents.slee.resource.diameter.ValidatorImpl; +import org.mobicents.slee.resource.diameter.base.DiameterActivityHandle; +import org.mobicents.slee.resource.diameter.base.DiameterActivityImpl; +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; +import org.mobicents.slee.resource.diameter.base.DiameterBaseMarshaler; +import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.base.EventIDFilter; +import org.mobicents.slee.resource.diameter.base.events.ErrorAnswerImpl; +import org.mobicents.slee.resource.diameter.base.events.ExtensionDiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.handlers.AuthorizationSessionFactory; +import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface; + +import org.mobicents.slee.resource.diameter.slh.events.LCSRoutingInfoRequestImpl; +import org.mobicents.slee.resource.diameter.slh.events.LCSRoutingInfoAnswerImpl; + +import org.mobicents.slee.resource.diameter.slh.handlers.SLhSessionFactory; + +/** + * Diameter SLh Resource Adaptor + * + * @author Fernando Mendioroz + */ +public class DiameterSLhResourceAdaptor implements ResourceAdaptor, DiameterListener, DiameterRAInterface/*, FaultTolerantResourceAdaptor*/ { + + private static final long serialVersionUID = 1L; + + // Config Properties Names --------------------------------------------- + private static final String AUTH_APPLICATION_IDS = "authApplicationIds"; + + // Config Properties Values -------------------------------------------- + private List authApplicationIds; + + /** + * caches the eventIDs, avoiding lookup in container + */ + public final EventIDCache eventIdCache = new EventIDCache(); + + /** + * tells the RA if an event with a specified ID should be filtered or not + */ + private final EventIDFilter eventIDFilter = new EventIDFilter(); + + /** + * The ResourceAdaptorContext interface is implemented by the SLEE. It provides the Resource + * Adaptor with the required capabilities in the SLEE to execute its work. The ResourceAdaptorCon- + * text object holds references to a number of objects that are of interest to many Resource Adaptors. A + * resource adaptor object is provided with a ResourceAdaptorContext object when the setResourceAdaptorContext method of + * the ResourceAdaptor interface is invoked on the resource adaptor object. + */ + private ResourceAdaptorContext raContext; + + /** + * FT/HA version of RA context. + */ + // private FaultTolerantResourceAdaptorContext ftRAContext; + + /** + * The SLEE endpoint defines the contract between the SLEE and the resource + * adaptor that enables the resource adaptor to deliver events + * asynchronously to SLEE endpoints residing in the SLEE. This contract + * serves as a generic contract that allows a wide range of resources to be + * plugged into a SLEE environment via the resource adaptor architecture. + * For further information see JSLEE v1.1 Specification Page 307 The + * sleeEndpoint will be initialized in entityCreated() method. + */ + private transient SleeEndpoint sleeEndpoint = null; + + /** + * A tracer is represented in the SLEE by the Tracer interface. Notification sources access the Tracer Facil- + * ity through a Tracer object that implements the Tracer interface. A Tracer object can be obtained by + * SBBs via the SbbContext interface, by resource adaptor entities via the ResourceAdaptorContext + * interface, and by profiles via the ProfileContext interface. + */ + private Tracer tracer; + + private DiameterBaseMarshaler marshaler/*= new DiameterBaseMarshaler()*/; + + // Diameter Specific Properties ---------------------------------------- + private Stack stack; + private long messageTimeout = 5000; + private long activityRemoveDelay = 30000; + + private ObjectName diameterMultiplexerObjectName = null; + private DiameterStackMultiplexerMBean diameterMux = null; + + // Base Factories + private DiameterAvpFactory baseAvpFactory = null; + private SessionFactory sessionFactory = null; + + // SLh Specific Factories + private SLhAVPFactory slhAvpFactory; + private SLhMessageFactory slhMessageFactory; + private SLhSessionFactory slhSessionFactory = null; + + /** + * The EventLookupFacility is used to look up the event id of incoming events + */ + private transient EventLookupFacility eventLookup = null; + + /** + * The list of activities stored in this resource adaptor. If this resource + * adaptor were a distributed and highly available solution, this storage + * were one of the candidates for distribution. + */ + private transient DiameterActivityManagement activities = null; + + /** + * A link to the DiameterProvider which then will be exposed to Sbbs + */ + private transient SLhProviderImpl raProvider = null; + + protected transient AuthorizationSessionFactory authSessionFactory = null; + protected transient SessionFactory proxySessionFactory = null; + + /** + * For all events we are interested in knowing when the event failed to be processed + */ + private static final int EVENT_FLAGS = getEventFlags(); + + private static int getEventFlags() { + int eventFlags = EventFlags.REQUEST_EVENT_UNREFERENCED_CALLBACK; + eventFlags = EventFlags.setRequestProcessingFailedCallback(eventFlags); + eventFlags = EventFlags.setRequestProcessingSuccessfulCallback(eventFlags); + return eventFlags; + } + + private static final int DEFAULT_ACTIVITY_FLAGS = ActivityFlags.setRequestSleeActivityGCCallback(ActivityFlags.REQUEST_ENDED_CALLBACK); + + public DiameterSLhResourceAdaptor() { + // TODO: Initialize any default values. + } + + // Lifecycle methods --------------------------------------------------- + public void setResourceAdaptorContext(ResourceAdaptorContext context) { + this.raContext = context; + this.tracer = context.getTracer("DiameterSLhResourceAdaptor"); + this.sleeEndpoint = context.getSleeEndpoint(); + this.eventLookup = context.getEventLookupFacility(); + this.raProvider = new SLhProviderImpl(this); + } + + public void unsetResourceAdaptorContext() { + this.raContext = null; + this.tracer = null; + this.sleeEndpoint = null; + this.eventLookup = null; + } + + public void raActive() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: raActive."); + } + + try { + if (tracer.isInfoEnabled()) { + tracer.info("Activating Diameter SLh RA Entity"); + } + + this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); + + Object object; + + if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { + // trying to get via MBeanServer + object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); + if (tracer.isInfoEnabled()) { + tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + } + } else { + // trying to get via locateJBoss + object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); + if (tracer.isInfoEnabled()) { + tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + } + } + + if (object != null && object instanceof DiameterStackMultiplexerMBean) { + this.diameterMux = (DiameterStackMultiplexerMBean) object; + } + + // Initialize the protocol stack + initStack(); + + // Initialize activities mgmt + initActivitiesMgmt(); + + // Initialize factories + this.baseAvpFactory = new DiameterAvpFactoryImpl(); + + this.slhAvpFactory = new SLhAVPFactoryImpl(baseAvpFactory); + this.slhMessageFactory = new SLhMessageFactoryImpl(stack); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + ((SLhMessageFactoryImpl) this.slhMessageFactory).setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + // Setup session factories + this.sessionFactory = this.stack.getSessionFactory(); + this.slhSessionFactory = new SLhSessionFactory(this, messageTimeout, sessionFactory); + + ((ISessionFactory) sessionFactory).registerAppFacory(ServerSLhSession.class, slhSessionFactory); + ((ISessionFactory) sessionFactory).registerAppFacory(ClientSLhSession.class, slhSessionFactory); + } catch (Exception e) { + tracer.severe("Error Activating Diameter SLh RA Entity", e); + } + } + + public void raStopping() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: raStopping."); + } + + try { + diameterMux.unregisterListener(this); + } catch (Exception e) { + tracer.severe("Failed to unregister SLh RA from Diameter Mux.", e); + } + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: raStopping completed."); + } + } + + public void raInactive() { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: raInactive."); + } + + activities = null; + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: raInactive completed."); + } + } + + public void raConfigure(ConfigProperties properties) { + parseApplicationIds((String) properties.getProperty(AUTH_APPLICATION_IDS).getValue()); + } + + private void parseApplicationIds(String appIdsStr) { + if (appIdsStr != null) { + appIdsStr = appIdsStr.replaceAll(" ", ""); + + String[] appIdsStrings = appIdsStr.split(","); + + List appIds = new ArrayList(); + + for (String appId : appIdsStrings) { + String[] vendorAndAppId = appId.split(":"); + appIds.add(ApplicationId.createByAuthAppId(Long.valueOf(vendorAndAppId[0]), Long.valueOf(vendorAndAppId[1]))); + } + + authApplicationIds = appIds; + } + } + + public void raUnconfigure() { + // Clean up! + this.activities = null; + this.raContext = null; + this.eventLookup = null; + this.raProvider = null; + this.sleeEndpoint = null; + this.stack = null; + } + + // Configuration management methods ------------------------------------ + public void raVerifyConfiguration(ConfigProperties properties) throws InvalidConfigurationException { + // NOP + } + + public void raConfigurationUpdate(ConfigProperties properties) { + // this ra does not support config update while entity is active + } + + // Interface access methods -------------------------------------------- + + public Object getResourceAdaptorInterface(String className) { + // this ra implements a single ra type + return raProvider; + } + + /* + * (non-Javadoc) + * @see javax.slee.resource.ResourceAdaptor#getMarshaler() + */ + public Marshaler getMarshaler() { + return this.marshaler; + } + + // Event filtering methods --------------------------------------------- + public void serviceActive(ReceivableService serviceInfo) { + eventIDFilter.serviceActive(serviceInfo); + } + + public void serviceStopping(ReceivableService serviceInfo) { + eventIDFilter.serviceStopping(serviceInfo); + } + + public void serviceInactive(ReceivableService serviceInfo) { + eventIDFilter.serviceInactive(serviceInfo); + } + + // Mandatory callback methods ------------------------------------------ + public void queryLiveness(ActivityHandle handle) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: queryLiveness :: handle[" + handle + "]."); + } + if (!(handle instanceof DiameterActivityHandle)) { + return; + } + + DiameterActivityImpl activity = (DiameterActivityImpl) activities.get((DiameterActivityHandle) handle); + + if (activity != null && !activity.isValid()) { + try { + sleeEndpoint.endActivity(handle); + } catch (Exception e) { + tracer.severe("Failure ending non-live activity.", e); + } + } + } + + public Object getActivity(ActivityHandle activityHandle) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: getActivity :: handle[" + activityHandle + "]."); + } + if (!(activityHandle instanceof DiameterActivityHandle)) { + return null; + } + return this.activities.get((DiameterActivityHandle) activityHandle); + } + + public ActivityHandle getActivityHandle(Object activity) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: getActivityHandle :: activity[" + activity + "]."); + } + + if (!(activity instanceof DiameterActivity)) { + return null; + } + + DiameterActivityImpl inActivity = (DiameterActivityImpl) activity; + + return inActivity.getActivityHandle(); + } + + public void administrativeRemove(ActivityHandle activityHandle) { + // TODO what to do here? + } + + // Optional callback methods ------------------------------------------- + public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + } + } + + public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + } + } + + public void eventUnreferenced(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: eventUnreferenced :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], service[" + service + "], flags[" + flags + "]."); + } + } + + public void activityEnded(ActivityHandle activityHandle) { + tracer.info("Diameter SLh RA :: activityEnded :: handle[" + activityHandle + "."); + if (this.activities != null) { + synchronized (this.activities) { + this.activities.remove((DiameterActivityHandle) activityHandle); + } + } + } + + public void startActivityRemoveTimer(DiameterActivityHandle diameterActivityHandle) { + try { + this.activities.startActivityRemoveTimer(diameterActivityHandle); + } catch (Exception e) { + tracer.warning("Failed to start activity remove timer.", e); + } + } + + public void stopActivityRemoveTimer(DiameterActivityHandle diameterActivityHandle) { + try { + this.activities.stopActivityRemoveTimer(diameterActivityHandle); + } catch (Exception e) { + tracer.warning("Failed to stop activity remove timer.", e); + } + } + + public void activityUnreferenced(ActivityHandle activityHandle) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: activityUnreferenced :: handle[" + activityHandle + "]."); + } + if (!(activityHandle instanceof DiameterActivityHandle)) { + return; + } + this.activityEnded(activityHandle); + } + + // Event and Activities management ------------------------------------- + public boolean fireEvent(Object event, ActivityHandle handle, FireableEventType eventID, Address address, boolean useFiltering, boolean transacted) { + if (useFiltering && eventIDFilter.filterEvent(eventID)) { + if (tracer.isFineEnabled()) { + tracer.fine("Event " + eventID + " filtered"); + } + } else if (eventID == null) { + tracer.severe("Event ID for " + eventID + " is unknown, unable to fire."); + } else { + if (tracer.isFineEnabled()) { + tracer.fine("Firing event " + event + " on handle " + handle); + } + + try { + /* TODO: Support transacted fire of events when in cluster + if (transacted){ + this.raContext.getSleeEndpoint().fireEventTransacted(handle, eventID, event, address, null, EVENT_FLAGS); + } + else */ { + this.raContext.getSleeEndpoint().fireEvent(handle, eventID, event, address, null, EVENT_FLAGS); + } + return true; + } catch (Exception e) { + tracer.severe("Error firing event.", e); + } + } + + return false; + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.base.handlers.BaseSessionCreationListener#fireEvent(java.lang.String, org.jdiameter.api.Message) + */ + public void fireEvent(String sessionId, Message message) { + DiameterMessage event = createEvent(message); + + FireableEventType eventId = eventIdCache.getEventId(eventLookup, message); + + this.fireEvent(event, getActivityHandle(sessionId), eventId, null, true, message.isRequest()); + } + + public void endActivity(DiameterActivityHandle handle) { + sleeEndpoint.endActivity(handle); + } + + public void update(DiameterActivityHandle handle, DiameterActivity activity) { + activities.update(handle, activity); + } + + /** + * Create Event object from a JDiameter message (request or answer) + * + * @return a DiameterMessage object wrapping the request/answer + * @throws OperationNotSupportedException + */ + private DiameterMessage createEvent(Message message) { + if (message == null) { + throw new NullPointerException("Message argument cannot be null while creating event."); + } + + int commandCode = message.getCommandCode(); + + if (message.isError()) { + return new ErrorAnswerImpl(message); + } + + boolean isRequest = message.isRequest(); + + switch (commandCode) { + case LCSRoutingInfoRequest.COMMAND_CODE: + return isRequest ? new LCSRoutingInfoRequestImpl(message) : new LCSRoutingInfoAnswerImpl(message); + default: + return new ExtensionDiameterMessageImpl(message); + } + } + + // Session Management -------------------------------------------------- + + /** + * Method for performing tasks when activity is created, such as informing SLEE about it and storing into internal map. + * + * @param ac the activity that has been created + */ + private void addActivity(DiameterActivity ac, boolean suspended) { + try { + // Inform SLEE that Activity Started + DiameterActivityImpl activity = (DiameterActivityImpl) ac; + + if (suspended) { + sleeEndpoint.startActivitySuspended(activity.getActivityHandle(), activity, DEFAULT_ACTIVITY_FLAGS); + } else { + sleeEndpoint.startActivity(activity.getActivityHandle(), activity, DEFAULT_ACTIVITY_FLAGS); + } + + // Set the listener + activity.setSessionListener(this); + + // Put it into our activities map + activities.put(activity.getActivityHandle(), activity); + + if (tracer.isInfoEnabled()) { + tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + } + } catch (Exception e) { + tracer.severe("Error creating activity", e); + + throw new RuntimeException("Error creating activity", e); + } + } + + // Private Methods ----------------------------------------------------- + + /** + * Initializes the RA Diameter Stack. + * + * @throws Exception + */ + private synchronized void initStack() throws Exception { + // Register in the Mux as an app listener. + this.diameterMux.registerListener(this, authApplicationIds.toArray(new ApplicationId[authApplicationIds.size()])); + + // Get the stack (should not mess with) + this.stack = this.diameterMux.getStack(); + this.messageTimeout = stack.getMetaData().getConfiguration().getLongValue(MessageTimeOut.ordinal(), (Long) MessageTimeOut.defValue()); + + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: Successfully initialized stack."); + } + } + + private void initActivitiesMgmt() { + this.activities = new LocalDiameterActivityManagement(this.raContext, activityRemoveDelay); + } + + /** + * Create the Diameter Activity Handle for an given session id + * + * @param sessionId the session identifier to create the activity handle from + * @return a DiameterActivityHandle for the provided sessionId + */ + protected DiameterActivityHandle getActivityHandle(String sessionId) { + return new DiameterActivityHandle(sessionId); + } + + // NetworkReqListener Implementation ----------------------------------- + + /* + * (non-Javadoc) + * @see org.jdiameter.api.NetworkReqListener#processRequest(org.jdiameter.api.Request) + */ + public Answer processRequest(Request request) { + try { + if (request == null) { + tracer.severe("Request is null"); + } + + if (raProvider == null) { + tracer.severe("raProvider is null"); + } + + raProvider.createActivity(request); + } catch (Throwable e) { + tracer.severe(e.getMessage(), e); + } + + // returning null so we can answer later + return null; + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.EventListener#receivedSuccessMessage(org.jdiameter.api.Request, org.jdiameter.api.Answer) + */ + public void receivedSuccessMessage(Request request, Answer answer) { + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: receivedSuccessMessage :: " + "Request[" + request + "], Answer[" + answer + "]."); + } + + try { + if (tracer.isInfoEnabled()) { + tracer.info("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); + } + } catch (AvpDataException ignore) { + // ignore, this was just for informational purposes... + } + } + + /* + * (non-Javadoc) + * @see org.jdiameter.api.EventListener#timeoutExpired(org.jdiameter.api.Request) + */ + public void timeoutExpired(Request request) { + if (tracer.isInfoEnabled()) { + tracer.info("Diameter SLh RA :: timeoutExpired :: Request[" + request + "]."); + } + + try { + // Message delivery timed out - we have to remove activity + ((DiameterActivity) getActivity(getActivityHandle(request.getSessionId()))).endActivity(); + } catch (Exception e) { + tracer.severe("Failure processing timeout message.", e); + } + } + + // SLh Session Creation Listener -------------------------------------- + + public void serverSLhSessionCreated(ServerSLhSession serverSLhSession) { + SLhMessageFactoryImpl sessionMsgFactory = new SLhMessageFactoryImpl(serverSLhSession.getSessions().get(0), stack, new DiameterIdentity[]{}); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + sessionMsgFactory.setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + SLhServerSessionActivityImpl serverActivity = new SLhServerSessionActivityImpl(sessionMsgFactory, slhAvpFactory, serverSLhSession, this, null, null, stack); + //session.addStateChangeNotification(serverActivity); + //addActivity(serverActivity); + serverActivity.setSessionListener(this); + } + + public void clientSLhSessionCreated(ClientSLhSession clientSLhSession) { + SLhMessageFactoryImpl sessionMsgFactory = new SLhMessageFactoryImpl(clientSLhSession.getSessions().get(0), stack, new DiameterIdentity[]{}); + + // Set the first configured Application-Id as default for message factory + ApplicationId firstAppId = authApplicationIds.get(0); + sessionMsgFactory.setApplicationId(firstAppId.getVendorId(), firstAppId.getAuthAppId()); + + SLhClientSessionActivityImpl clientActivity = new SLhClientSessionActivityImpl(sessionMsgFactory, slhAvpFactory, clientSLhSession, this, null, null, stack); + // session.addStateChangeNotification(serverActivity); + // addActivity(serverActivity); + clientActivity.setSessionListener(this); + } + + public void sessionCreated(Session session) { + DiameterMessageFactoryImpl sessionMsgFactory = new DiameterMessageFactoryImpl(session, stack, null, null); + DiameterActivityImpl activity = new DiameterActivityImpl(sessionMsgFactory, baseAvpFactory, session, this, null, null); + + // TODO: Do we need to manage session? + //session.addStateChangeNotification(activity); + activity.setSessionListener(this); + addActivity(activity, false /*true*/); + } + + /* + * (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.slh.handlers.SLhSessionCreationListener#getSupportedApplications() + */ + public ApplicationId[] getSupportedApplications() { + return (ApplicationId[]) authApplicationIds.toArray(); + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.slh.handlers.SLhSessionCreationListener#stateChanged(org.jdiameter.api.app.AppSession, java.lang.Enum, java.lang.Enum) + */ + public void stateChanged(AppSession source, Enum oldState, Enum newState) { + DiameterActivityHandle dah = getActivityHandle(source.getSessionId()); + Object activity = getActivity(dah); + if (activity != null) { + if (source instanceof ServerSLhSession) { + try { + //damn, no common, do something unexpected + StateChangeListener scl = (StateChangeListener) activity; + scl.stateChanged(source, oldState, newState); + } catch (Exception e) { + tracer.warning("Failed to deliver state, for: " + dah + " on stateChanged( " + source + ", " + oldState + ", " + newState + " )", e); + } + } + } else { + tracer.warning("No activity for: " + dah + " on stateChanged( " + source + ", " + oldState + ", " + newState + " )"); + } + } + + // Provider Implementation -------------------------------------------- + + private class SLhProviderImpl implements SLhProvider { + + protected DiameterSLhResourceAdaptor ra; + protected Validator validator = new ValidatorImpl(); + + /** + * Constructor. + * + * @param slhResourceAdaptor The resource adaptor for this Provider. + */ + + public SLhProviderImpl(DiameterSLhResourceAdaptor slhResourceAdaptor) { + this.ra = slhResourceAdaptor; + } + + private DiameterActivity createActivity(Message message) throws CreateActivityException { + DiameterActivity activity = activities.get(getActivityHandle(message.getSessionId())); + if (activity == null) { + if (message.isRequest()) { + switch (message.getCommandCode()) { + case LCSRoutingInfoRequest.COMMAND_CODE: + return createSLhServerSessionActivity((Request) message); + } + } else { + throw new IllegalStateException("Got answer, there should already be activity."); + } + } + + return activity; + } + + private DiameterActivity createSLhServerSessionActivity(Request request) throws CreateActivityException { + ServerSLhSession session; + + try { + String sessionId = request == null ? null : request.getSessionId(); + //tracer.fine("Session ID is " + sessionId); + ApplicationId appId = request.getApplicationIdAvps().isEmpty() ? null : request.getApplicationIdAvps().iterator().next(); + //tracer.fine("App ID is " + appId); + session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(sessionId, appId, ServerSLhSession.class, request); + + if (session == null) { + throw new CreateActivityException("Got NULL Session while creating SLh Server Activity"); + } + } catch (InternalException e) { + throw new CreateActivityException("Internal exception while creating SLh Server Activity", e); + } catch (IllegalDiameterStateException e) { + throw new CreateActivityException("Illegal Diameter State exception while creating SLh Server Activity", e); + } + + SLhServerSessionActivityImpl activity = new SLhServerSessionActivityImpl(ra.slhMessageFactory, ra.slhAvpFactory, session, (EventListener) session, (DiameterIdentity) null, (DiameterIdentity) null, stack); + addActivity(activity, false); + + if (request != null) { + switch (request.getCommandCode()) { + case LCSRoutingInfoRequest.COMMAND_CODE: + activity.fetchSessionData(new LCSRoutingInfoRequestImpl(request)); + break; + } + + ((org.jdiameter.server.impl.app.slh.SLhServerSessionImpl) session).processRequest(request); + } + + return activity; + } + + private DiameterActivity createSLhClientSessionActivity(Request request) throws CreateActivityException { + ClientSLhSession session; + + try { + String sessionId = request == null ? null : request.getSessionId(); + //tracer.fine("Session ID is " + sessionId); + ApplicationId appId = request.getApplicationIdAvps().isEmpty() ? null : request.getApplicationIdAvps().iterator().next(); + //tracer.fine("App ID is " + appId); + session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(sessionId, appId, ClientSLhSession.class, request); + + if (session == null) { + throw new CreateActivityException("Got NULL Session while creating SLh Client Activity"); + } + } catch (InternalException e) { + throw new CreateActivityException("Internal exception while creating SLh Client Activity", e); + } catch (IllegalDiameterStateException e) { + throw new CreateActivityException("Illegal Diameter State exception while creating SLh Client Activity", e); + } + + SLhClientSessionActivityImpl activity = new SLhClientSessionActivityImpl(ra.slhMessageFactory, ra.slhAvpFactory, session, (EventListener) session, (DiameterIdentity) null, (DiameterIdentity) null, stack); + addActivity(activity, false); + + if (request != null) { + switch (request.getCommandCode()) { + case LCSRoutingInfoRequest.COMMAND_CODE: + activity.fetchSessionData(new LCSRoutingInfoRequestImpl(request)); + break; + } + + ((org.jdiameter.client.impl.app.slh.SLhClientSessionImpl) session).processRequest(request); + } + + return activity; + } + + public SLhServerSessionActivity createSLhServerSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException { + try { + ServerSLhSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, ApplicationId.createByAuthAppId(10415L, 16777291L), ServerSLhSession.class); + SLhServerSessionActivityImpl activity = new SLhServerSessionActivityImpl(ra.slhMessageFactory, ra.slhAvpFactory, session, (EventListener) session, destinationHost, destinationRealm, stack); + addActivity(activity, false); + return activity; + } catch (Exception e) { + throw new CreateActivityException("Internal exception while creating SLh Server Activity", e); + } + } + + public SLhClientSessionActivity createSLhClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException { + try { + ClientSLhSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, ApplicationId.createByAuthAppId(10415L, 16777291L), ClientSLhSession.class); + SLhClientSessionActivityImpl activity = new SLhClientSessionActivityImpl(ra.slhMessageFactory, ra.slhAvpFactory, session, (EventListener) session, destinationHost, destinationRealm, stack); + addActivity(activity, false); + return activity; + } catch (Exception e) { + throw new CreateActivityException("Internal exception while creating SLh Client Activity", e); + } + } + + public SLhMessageFactory getSLhMessageFactory() { + return ra.slhMessageFactory; + } + + public SLhAVPFactory getSLhAvpFactory() { + return ra.slhAvpFactory; + } + + public DiameterIdentity[] getConnectedPeers() { + return ra.getConnectedPeers(); + } + + public int getPeerCount() { + return ra.getConnectedPeers().length; + } + + public SLhServerSessionActivity createSLhServerSessionActivity() throws CreateActivityException { + return createSLhServerSessionActivity(null, null); + } + + public SLhClientSessionActivity createSLhClientSessionActivity() throws CreateActivityException { + return createSLhClientSessionActivity(null, null); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.SLhProvider#getValidator() + */ + public Validator getValidator() { + return this.validator; + } + } + + public DiameterIdentity[] getConnectedPeers() { + + if (this.stack != null) { + try { + // Get the list of peers from the stack + List peers = stack.unwrap(PeerTable.class).getPeerTable(); + + DiameterIdentity[] result = new DiameterIdentity[peers.size()]; + + int i = 0; + + // Get each peer from the list and make a DiameterIdentity + for (Peer peer : peers) { + DiameterIdentity identity = new DiameterIdentity(peer.getUri().toString()); + + result[i++] = identity; + } + + return result; + } catch (Exception e) { + tracer.severe("Failure getting peer list.", e); + } + } + + return new DiameterIdentity[0]; + } +} diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/EventIDCache.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/EventIDCache.java new file mode 100644 index 000000000..8412f3eb5 --- /dev/null +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/EventIDCache.java @@ -0,0 +1,114 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.slee.EventTypeID; +import javax.slee.facilities.EventLookupFacility; +import javax.slee.resource.FireableEventType; + +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; + +import org.jdiameter.api.Message; + +/** + * Caches event IDs for the Diameter SLh RAs. + * + * @author Alexandre Mendonca + * @author Bartosz Baranowski + * @author Fernando Mendioroz + */ +public class EventIDCache { + + private static final String BASE_PACKAGE_PREFIX = "net.java.slee.resource.diameter.base.events."; + private static final String SLh_PACKAGE_PREFIX = "net.java.slee.resource.diameter.slh.events."; + public static Map eventNames = new ConcurrentHashMap(); + + static { + Map eventsTemp = new HashMap(); + + eventsTemp.put(LCSRoutingInfoRequest.COMMAND_CODE, SLh_PACKAGE_PREFIX + "LCSRoutingInfo"); + eventNames = Collections.unmodifiableMap(eventsTemp); + } + + public static final String ERROR_ANSWER = BASE_PACKAGE_PREFIX + "ErrorAnswer"; + public static final String EXTENSION_DIAMETER_MESSAGE = BASE_PACKAGE_PREFIX + "ExtensionDiameterMessage"; + private static final String VENDOR = "java.net"; + private static final String VERSION = "0.8"; + private ConcurrentHashMap eventIds = new ConcurrentHashMap(); + + public EventIDCache() { + } + + /** + * @param eventLookupFacility + * @param message + * @return + */ + public FireableEventType getEventId(EventLookupFacility eventLookupFacility, Message message) { + + FireableEventType eventID; + + // Error is always the same. + if (message.isError()) { + eventID = getEventId(eventLookupFacility, ERROR_ANSWER); + } else { + final int commandCode = message.getCommandCode(); + final boolean isRequest = message.isRequest(); + + String eventName = eventNames.get(commandCode); + + if (eventName != null) { + eventID = getEventId(eventLookupFacility, eventName + (isRequest ? "Request" : "Answer")); + } else { + eventID = getEventId(eventLookupFacility, EXTENSION_DIAMETER_MESSAGE); + } + } + + return eventID; + } + + /** + * @param eventLookupFacility + * @param eventName + * @return + */ + private FireableEventType getEventId(EventLookupFacility eventLookupFacility, String eventName) { + + FireableEventType eventType = eventIds.get(eventName); + if (eventType == null) { + try { + eventType = eventLookupFacility.getFireableEventType(new EventTypeID(eventName, VENDOR, VERSION)); + } catch (Throwable e) { + e.printStackTrace(); + } + if (eventType != null) { + eventIds.put(eventName, eventType); + } + } + return eventType; + } +} diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhAVPFactoryImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhAVPFactoryImpl.java new file mode 100644 index 000000000..b926308cf --- /dev/null +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhAVPFactoryImpl.java @@ -0,0 +1,145 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh; + +import net.java.slee.resource.diameter.base.DiameterAvpFactory; +import net.java.slee.resource.diameter.base.events.avp.AvpUtilities; +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; + +import net.java.slee.resource.diameter.slh.SLhAVPFactory; +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp; +import org.mobicents.slee.resource.diameter.slh.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl; + +/** + * Implementation of {@link SLhAVPFactory}. + * + * @author Fernando Mendioroz + */ +public class SLhAVPFactoryImpl extends DiameterAvpFactoryImpl implements SLhAVPFactory { + + protected DiameterAvpFactory baseAvpFactory; + + public SLhAVPFactoryImpl(final DiameterAvpFactory baseAvpFactory) { + this.baseAvpFactory = baseAvpFactory; + } + + public DiameterAvpFactory getBaseFactory() { + return this.baseAvpFactory; + } + + public ServingNodeAvp createServingNode() { + /* + * From the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.173 V14.0.0) specification: + * + *
+     * 6.4.3 Serving-Node
+     *
+     * The Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the targeted user.
+     *
+     * AVP format
+     *				Serving-Node ::=	
+     *											    [ SGSN-Number ]
+     *													[ SGSN-Name ]
+     *													[ SGSN-Realm ]
+     *													[ MME-Name ]
+     *													[ MME-Realm ]
+     *													[ MSC-Number ]
+     *													[ 3GPP-AAA-Server-Name ]
+     *													[ LCS-Capabilities-Sets ]
+     *													[ GMLC-Address ]
+     *												 *[ AVP ]
+     *
+     */
+    return (ServingNodeAvp) AvpUtilities.createAvp(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, null, ServingNodeAvpImpl.class);
+  }
+
+  public AdditionalServingNodeAvp createAdditionalServingNode() {
+    /*
+     * From the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.173 V14.0.0) specification:
+     *
+     * 6.4.8	Additional-Serving-Node
+     *
+     * The Additional-Serving-Node AVP is of type Grouped. This AVP shall contain the information about the network node serving the targeted user.
+     *
+     * AVP format
+     *
+     *				Additional-Serving-Node ::=	
+     *													[ SGSN-Number ]
+     *													[ SGSN-Name ]
+     *													[ SGSN-Realm ]
+     *													[ MME-Name ]
+     *													[ MME-Realm ]
+     *													[ MSC-Number ]
+     *													[ 3GPP-AAA-Server-Name ]
+     *													[ LCS-Capabilities-Sets ]
+     *													[ GMLC-Address ]
+     *													*[AVP]
+     *
+     */
+    return (AdditionalServingNodeAvp) AvpUtilities.createAvp(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, null, AdditionalServingNodeAvpImpl.class);
+  }
+
+  @Override
+  public SupportedFeaturesAvp createSupportedFeatures() {
+    return (SupportedFeaturesAvp) AvpUtilities.createAvp(LCSRoutingInfoAVPCodes.SUPPORTED_FEATURES, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, null, SupportedFeaturesAvpImpl.class);
+  }
+
+  public SupportedFeaturesAvp createSupportedFeatures(long vendorId, long featureListId, long featureList) {
+    // Create the empty AVP
+    SupportedFeaturesAvp supportedFeaturesAvp = createSupportedFeatures();
+
+    /*
+     * From the Diameter-based SLh interface for Control Plane LCS (3GPP TS 29.229 V14.0.0) specification:
+     *
+     * 6.3.29	Supported-Features AVP
+     *
+     * The Supported-Features AVP is of type Grouped. If this AVP is present it may inform the destination host about the features that the origin host supports for the application.
+     * The Feature-List AVP contains a list of supported features of the origin host. The Vendor-Id AVP and the Feature-List-ID AVP shall together identify which feature list
+     * is carried in the Supported-Features AVP for the Application-ID present in the command header.
+     * Where a Supported-Features AVP is used to identify features that have been defined by 3GPP, the Vendor-Id AVP shall contain the vendor ID of 3GPP.
+     * Vendors may define proprietary features, but it is strongly recommended that the possibility is used only as the last resort.
+     * Where the Supported-Features AVP is used to identify features that have been defined by a vendor other than 3GPP, it shall contain the vendor ID of the specific vendor in question.
+     * If there are multiple feature lists defined by the same vendor and the same application, the Feature-List-ID AVP shall differentiate those lists from one another.
+     * The destination host shall use the value of the Feature-List-ID AVP to identify the feature list.
+     * AVP format
+     *            Supported-Features ::= 	< AVP header: 628 10415 >
+     *                                    { Vendor-Id }
+     *                                    { Feature-List-ID }
+     *                                    { Feature-List }
+     *                                    *[AVP]
+     *
+     */
+    // Set the provided AVP values
+    supportedFeaturesAvp.setVendorId(vendorId);
+    supportedFeaturesAvp.setFeatureListId(featureListId);
+    supportedFeaturesAvp.setFeatureList(featureList);
+
+    return supportedFeaturesAvp;
+
+  }
+
+}
diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java
new file mode 100644
index 000000000..b58fd83bf
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java
@@ -0,0 +1,170 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package org.mobicents.slee.resource.diameter.slh;
+
+import java.io.IOException;
+
+import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
+import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
+import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
+import net.java.slee.resource.diameter.slh.SLhAVPFactory;
+import net.java.slee.resource.diameter.slh.SLhClientSessionActivity;
+import net.java.slee.resource.diameter.slh.SLhMessageFactory;
+import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest;
+
+import org.jdiameter.api.*;
+import org.jdiameter.api.app.AppSession;
+import org.jdiameter.api.slh.ClientSLhSession;
+import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl;
+import org.jdiameter.common.impl.app.slh.LCSRoutingInfoRequestImpl;
+
+/**
+ * Implementation of {@link SLhClientSessionActivity}.
+ *
+ * @author  Alexandre Mendonca  Fernando Mendioroz 
+ */
+public class SLhClientSessionActivityImpl extends SLhSessionActivityImpl implements SLhClientSessionActivity {
+
+  private static final long serialVersionUID = 6391181777305378777L;
+
+  protected transient ClientSLhSession clientSLhSession;
+
+  /**
+   * @param slhMessageFactory
+   * @param slhAvpFactory
+   * @param session
+   * @param destinationHost
+   * @param destinationRealm
+   * @param stack
+   */
+  public SLhClientSessionActivityImpl(SLhMessageFactory slhMessageFactory, SLhAVPFactory slhAvpFactory, ClientSLhSession session, EventListener raEventListener, DiameterIdentity destinationHost,
+                                      DiameterIdentity destinationRealm, Stack stack) {
+    super(slhMessageFactory, slhAvpFactory, null, (EventListener) session, destinationRealm, destinationRealm);
+    // FIXME: remove stack?
+
+    setSession(session);
+    super.setCurrentWorkingSession(session.getSessions().get(0));
+  }
+
+  public void setSession(ClientSLhSession clientSLhSession) {
+    this.clientSLhSession = clientSLhSession;
+    this.clientSLhSession.addStateChangeNotification(this);
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Enum, java.lang.Enum)
+   */
+  public void stateChanged(Enum oldState, Enum newState) {
+    if (!terminated) {
+      if (newState == org.jdiameter.common.api.app.slh.SLhSessionState.TERMINATED || newState == org.jdiameter.common.api.app.slh.SLhSessionState.TIMEDOUT) {
+        terminated = true;
+        endActivity();
+      }
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Object, java.lang.Enum, java.lang.Enum)
+   */
+  public void stateChanged(AppSession appSession, Enum oldState, Enum newState) {
+    this.stateChanged(oldState, newState);
+
+  }
+
+  @Override
+  public void endActivity() {
+    this.clientSLhSession.release();
+    super.endActivity();
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see net.java.slee.resource.diameter.slh.SLhClientSessionActivity#screateEventLCSRoutingInfoRequest()
+   */
+  public LCSRoutingInfoRequest createLCSRoutingInfoRequest() {
+
+    try {
+      // Create the request
+      LCSRoutingInfoRequest rir = (LCSRoutingInfoRequest) this.slhMessageFactory.createSLhMessage(lastRequest.getHeader(), new DiameterAvp[]{}, LCSRoutingInfoRequest.COMMAND_CODE, slhMessageFactory.getApplicationId());
+
+      // Fill session related AVPs, if present
+      fillSessionAVPs(rir);
+
+      return rir;
+    } catch (InternalException e) {
+      logger.error("Failed to create LCS Routing-Info-Request." + e);
+    }
+
+    return null;
+  }
+
+
+  /*
+   * (non-Javadoc)
+   * @see net.java.slee.resource.diameter.slh.SLhClientSessionActivity#sendEventLCSRoutingInfoRequest(net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest)
+   */
+  public void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) throws IOException {
+
+    DiameterMessageImpl msg = (DiameterMessageImpl) rir;
+    try {
+      clientSLhSession.sendLCSRoutingInfoRequest(new LCSRoutingInfoRequestImpl((Request) msg.getGenericData()));
+    } catch (org.jdiameter.api.validation.AvpNotAllowedException e) {
+      throw new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId());
+    } catch (Exception e) {
+      if (logger.isDebugEnabled()) {
+        logger.debug("Failed to send message.", e);
+      }
+      throw new IOException("Failed to send message, due to: " + e);
+    }
+  }
+
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = super.hashCode();
+    result = prime * result + (isTerminateAfterProcessing() ? 1231 : 1237);
+    return result;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (!super.equals(obj)) {
+      return false;
+    }
+    if (getClass() != obj.getClass()) {
+      return false;
+    }
+    SLhClientSessionActivityImpl other = (SLhClientSessionActivityImpl) obj;
+    if (terminateAfterProcessing != other.isTerminateAfterProcessing()) {
+      return false;
+    }
+
+    return true;
+  }
+
+}
diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhMessageFactoryImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhMessageFactoryImpl.java
new file mode 100644
index 000000000..9106ceb13
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhMessageFactoryImpl.java
@@ -0,0 +1,147 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package org.mobicents.slee.resource.diameter.slh;
+
+import net.java.slee.resource.diameter.base.events.DiameterHeader;
+import net.java.slee.resource.diameter.base.events.DiameterMessage;
+import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
+import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
+import net.java.slee.resource.diameter.slh.SLhMessageFactory;
+import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest;
+
+import org.apache.log4j.Logger;
+import org.jdiameter.api.ApplicationId;
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.Message;
+import org.jdiameter.api.Session;
+import org.jdiameter.api.Stack;
+import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl;
+import org.mobicents.slee.resource.diameter.base.events.ExtensionDiameterMessageImpl;
+import org.mobicents.slee.resource.diameter.slh.events.LCSRoutingInfoAnswerImpl;
+import org.mobicents.slee.resource.diameter.slh.events.LCSRoutingInfoRequestImpl;
+
+/**
+ * Diameter SLh Reference Point Message Factory. Implementation of {@link SLhMessageFactory}.
+ *
+ * @author  Fernando Mendioroz 
+ * @author  Alexandre Mendonca 
+ */
+public class SLhMessageFactoryImpl extends DiameterMessageFactoryImpl implements SLhMessageFactory {
+
+  protected Logger logger = Logger.getLogger(SLhMessageFactoryImpl.class);
+
+  private DiameterAvp[] EMPTY_AVP_ARRAY = new DiameterAvp[]{};
+
+  // S6a: Vendor-Specific-Application-Id is set as optional and may be discarded in future releases; No Auth-Application-Id either;
+  private ApplicationId slhAppId = ApplicationId.createByAuthAppId(_SLh_TGPP_VENDOR_ID, _SLh_AUTH_APP_ID);
+
+  /**
+   * @param session
+   * @param stack
+   * @param avps
+   */
+  public SLhMessageFactoryImpl(Session session, Stack stack, DiameterIdentity... avps) {
+    super(session, stack, avps);
+  }
+
+  /**
+   * @param stack
+   */
+  public SLhMessageFactoryImpl(Stack stack) {
+    super(stack);
+  }
+
+  public void setApplicationId(long vendorId, long applicationId) {
+    this.slhAppId = ApplicationId.createByAuthAppId(vendorId, applicationId);
+  }
+
+  public ApplicationId getApplicationId() {
+    return this.slhAppId;
+  }
+
+  /**
+   * Creates a SLh Message with specified command-code and avps filled. If a header is present an answer will be created, if not
+   * it will generate a request.
+   *
+   * @param diameterHeader
+   * @param avps
+   * @param _commandCode
+   * @param appId
+   * @return
+   * @throws InternalException
+   */
+  DiameterMessage createSLhMessage(DiameterHeader diameterHeader, DiameterAvp[] avps, int _commandCode, ApplicationId appId) throws InternalException {
+
+    boolean creatingRequest = diameterHeader == null;
+    Message msg = null;
+
+    if (!creatingRequest) {
+      Message raw = createMessage(diameterHeader, avps, 0, appId);
+      raw.setProxiable(diameterHeader.isProxiable());
+      raw.setRequest(false);
+      raw.setReTransmitted(false); // just in case. answers never have T flag set
+      // FIXME ? raw.getAvps().removeAvp(Avp.AUTH_APPLICATION_ID);
+      msg = raw;
+    } else {
+      Message raw = createMessage(diameterHeader, avps, _commandCode, appId);
+      raw.setProxiable(true);
+      raw.setRequest(true);
+      msg = raw;
+    }
+
+    int commandCode = creatingRequest ? _commandCode : diameterHeader.getCommandCode();
+    DiameterMessage diamMessage;
+
+    switch (commandCode) {
+      case LCSRoutingInfoRequest.COMMAND_CODE:
+        diamMessage = creatingRequest ? new LCSRoutingInfoRequestImpl(msg) : new LCSRoutingInfoAnswerImpl(msg);
+        break;
+      default:
+        diamMessage = new ExtensionDiameterMessageImpl(msg);
+    }
+
+    // Finally, add Origin-Host and Origin-Realm, if not present.
+    // FIXME: needed? addOriginHostAndRealm(diamMessage);
+
+    if (!diamMessage.hasSessionId() && session != null) {
+      diamMessage.setSessionId(session.getSessionId());
+    }
+
+    return diamMessage;
+  }
+
+  public LCSRoutingInfoRequest createLCSRoutingInfoRequest() {
+    try {
+      return (LCSRoutingInfoRequest) createSLhMessage(null, EMPTY_AVP_ARRAY, LCSRoutingInfoRequest.COMMAND_CODE, slhAppId);
+    } catch (InternalException e) {
+      logger.error("Failed to create LCS Routing-Info-Request", e);
+    }
+    return null;
+  }
+
+  public LCSRoutingInfoRequest createLCSRoutingInfoRequest(String sessionId) throws IllegalArgumentException {
+    LCSRoutingInfoRequest rir = createLCSRoutingInfoRequest();
+    rir.setSessionId(sessionId);
+    return rir;
+  }
+
+}
diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java
new file mode 100644
index 000000000..6d6aa8ca5
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java
@@ -0,0 +1,143 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package org.mobicents.slee.resource.diameter.slh;
+
+import java.io.IOException;
+
+import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
+import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
+import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
+
+import net.java.slee.resource.diameter.slh.SLhAVPFactory;
+import net.java.slee.resource.diameter.slh.SLhMessageFactory;
+import net.java.slee.resource.diameter.slh.SLhServerSessionActivity;
+import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer;
+import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest;
+
+import org.jdiameter.api.Answer;
+import org.jdiameter.api.EventListener;
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.Request;
+import org.jdiameter.api.Stack;
+import org.jdiameter.api.app.AppSession;
+
+import org.jdiameter.api.slh.ServerSLhSession;
+import org.jdiameter.common.impl.app.slh.LCSRoutingInfoAnswerImpl;
+import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl;
+
+/**
+ * Implementation of {@link SLhServerSessionActivity}.
+ *
+ * @author  Fernando Mendioroz 
+ * @author  Alexandre Mendonca 
+ */
+
+public class SLhServerSessionActivityImpl extends SLhSessionActivityImpl implements SLhServerSessionActivity {
+
+  private static final long serialVersionUID = 7518916596996009148L;
+
+  protected transient ServerSLhSession serverSLhSession;
+
+  public SLhServerSessionActivityImpl(SLhMessageFactory slhMessageFactory, SLhAVPFactory slhAvpFactory, ServerSLhSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) {
+    super(slhMessageFactory, slhAvpFactory, session.getSessions().get(0), raEventListener, destinationHost, destinationRealm);
+    // FIXME: remove stack?
+
+    setSession(session);
+    super.setCurrentWorkingSession(session.getSessions().get(0));
+  }
+
+
+  public void setSession(ServerSLhSession session) {
+    this.serverSLhSession = session;
+    this.serverSLhSession.addStateChangeNotification(this);
+  }
+
+  public void stateChanged(Enum oldState, Enum newState) {
+    if (!terminated) {
+      if (newState == org.jdiameter.common.api.app.slh.SLhSessionState.TERMINATED || newState == org.jdiameter.common.api.app.slh.SLhSessionState.TIMEDOUT) {
+        terminated = true;
+        endActivity();
+      }
+    }
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Object, java.lang.Enum, java.lang.Enum)
+   */
+  public void stateChanged(AppSession appSession, Enum oldState, Enum newState) {
+    this.stateChanged(oldState, newState);
+
+  }
+
+  @Override
+  public void endActivity() {
+    if (this.serverSLhSession != null) {
+      this.serverSLhSession.release();
+    }
+
+    try {
+      // endpoint.endActivity(this.getActivityHandle());
+      super.baseListener.endActivity(this.getActivityHandle());
+    } catch (Exception e) {
+      logger.error("Failed to end activity [" + this + "].", e);
+    }
+  }
+
+  public LCSRoutingInfoAnswer createLCSRoutingInfoAnswer() {
+    // Make sure we have the correct type of Request
+    if (!(lastRequest instanceof LCSRoutingInfoRequest)) {
+      logger.warn("Invalid type of answer for this activity.");
+      return null;
+    }
+
+    try {
+      // Create the answer
+      LCSRoutingInfoAnswer ria = (LCSRoutingInfoAnswer) this.slhMessageFactory.createSLhMessage(lastRequest.getHeader(), new DiameterAvp[]{}, LCSRoutingInfoAnswer.COMMAND_CODE, slhMessageFactory.getApplicationId());
+
+      // Fill session related AVPs, if present
+      fillSessionAVPs(ria);
+
+      return ria;
+    } catch (InternalException e) {
+      logger.error("Failed to create LCS Routing-Info-Answer.", e);
+    }
+
+    return null;
+  }
+
+  public void sendLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria) throws IOException {
+    DiameterMessageImpl msg = (DiameterMessageImpl) ria;
+    LCSRoutingInfoAnswerImpl answer = new LCSRoutingInfoAnswerImpl((Answer) msg.getGenericData());
+    try {
+      serverSLhSession.sendLCSRoutingInfoAnswer(answer);
+    } catch (org.jdiameter.api.validation.AvpNotAllowedException anae) {
+      throw new AvpNotAllowedException(anae.getMessage(), anae.getAvpCode(), anae.getVendorId());
+    } catch (Exception e) {
+      if (logger.isDebugEnabled()) {
+        logger.debug("Failed to send message.", e);
+      }
+      throw new IOException(e.getMessage());
+    }
+  }
+
+}
diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java
new file mode 100644
index 000000000..adc905277
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java
@@ -0,0 +1,149 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package org.mobicents.slee.resource.diameter.slh;
+
+import java.util.ArrayList;
+
+import net.java.slee.resource.diameter.base.events.DiameterMessage;
+import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
+import net.java.slee.resource.diameter.slh.SLhAVPFactory;
+import net.java.slee.resource.diameter.slh.SLhMessageFactory;
+import net.java.slee.resource.diameter.slh.SLhSessionActivity;;
+
+import org.jdiameter.api.Answer;
+import org.jdiameter.api.EventListener;
+import org.jdiameter.api.Request;
+import org.jdiameter.api.Session;
+import org.jdiameter.api.app.AppSession;
+import org.jdiameter.api.app.StateChangeListener;
+import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
+import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
+import org.mobicents.slee.resource.diameter.base.DiameterActivityImpl;
+
+/**
+ * @author  Fernando Mendioroz 
+ * @author  Bartosz Baranowski 
+ * @author  Alexandre Mendonca 
+ */
+public abstract class SLhSessionActivityImpl extends DiameterActivityImpl implements SLhSessionActivity, StateChangeListener {
+
+  private static final long serialVersionUID = 4374137032596394588L;
+
+  protected boolean terminated = false;
+
+  protected transient SLhMessageFactoryImpl slhMessageFactory;
+  protected transient SLhAVPFactory slhAvpFactory;
+
+  protected transient DiameterMessage lastRequest = null;
+  protected transient ArrayList sessionAvps = new ArrayList();
+
+  public SLhSessionActivityImpl(SLhMessageFactory messageFactory, SLhAVPFactory avpFactory, Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm) {
+    super(null, null, session, raEventListener, destinationHost, destinationRealm);
+
+    this.slhMessageFactory = (SLhMessageFactoryImpl) messageFactory;
+    this.slhAvpFactory = avpFactory;
+  }
+
+  public SLhAVPFactory getSLhAvpFactory() {
+    return this.slhAvpFactory;
+  }
+
+  public SLhMessageFactory getSLhMessageFactory() {
+    return this.slhMessageFactory;
+  }
+
+  public void setSLhMessageFactory(SLhMessageFactoryImpl slhMessageFactory) {
+    this.slhMessageFactory = slhMessageFactory;
+  }
+
+  public void setSLhAvpFactory(SLhAVPFactory slhAvpFactory) {
+    this.slhAvpFactory = slhAvpFactory;
+  }
+
+  public String getSessionId() {
+    return session.getSessionId();
+  }
+
+  public void fetchSessionData(DiameterMessage slhRequest) {
+    this.lastRequest = slhRequest;
+  }
+
+  /**
+   * Fills message with session AVPs if present and/or needed.
+   *
+   * @param message
+   */
+  protected void fillSessionAVPs(DiameterMessage message) {
+    // If there's Destination-Host/Realm, add the AVPs
+    if (message.getHeader().isRequest()) {
+      if (destinationHost != null) {
+        message.setDestinationHost(destinationHost);
+      }
+
+      if (destinationRealm != null) {
+        message.setDestinationRealm(destinationRealm);
+      }
+    }
+
+    // Fill extension avps if present
+    if (sessionAvps.size() > 0) {
+      try {
+        message.setExtensionAvps(sessionAvps.toArray(new DiameterAvp[sessionAvps.size()]));
+      } catch (AvpNotAllowedException e) {
+        logger.error("Failed to add Session AVPs to request.", e);
+      }
+    }
+
+    // Guarantee session-id is present
+    if (!message.hasSessionId() && sessionId != null) {
+      message.setSessionId(sessionId);
+    }
+  }
+
+  @Override
+  public int hashCode() {
+    final int prime = 31;
+    int result = super.hashCode();
+    result = prime * result + (terminated ? 1231 : 1237);
+    return result;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (!super.equals(obj)) {
+      return false;
+    }
+    if (getClass() != obj.getClass()) {
+      return false;
+    }
+    SLhSessionActivityImpl other = (SLhSessionActivityImpl) obj;
+    if (terminated != other.terminated) {
+      return false;
+    }
+    return true;
+  }
+
+}
+
diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java
new file mode 100644
index 000000000..eecf2d787
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java
@@ -0,0 +1,135 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package org.mobicents.slee.resource.diameter.slh.handlers;
+
+import org.apache.log4j.Logger;
+import org.jdiameter.api.ApplicationId;
+import org.jdiameter.api.IllegalDiameterStateException;
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.OverloadException;
+import org.jdiameter.api.RouteException;
+import org.jdiameter.api.SessionFactory;
+import org.jdiameter.api.app.AppAnswerEvent;
+import org.jdiameter.api.app.AppRequestEvent;
+import org.jdiameter.api.app.AppSession;
+
+import org.jdiameter.api.slh.ClientSLhSession;
+import org.jdiameter.api.slh.ServerSLhSession;
+import org.jdiameter.api.slh.events.LCSRoutingInfoRequest;
+import org.jdiameter.api.slh.events.LCSRoutingInfoAnswer;
+import org.jdiameter.client.impl.app.slh.SLhClientSessionImpl;
+import org.jdiameter.common.impl.app.slh.SLhSessionFactoryImpl;
+
+import org.jdiameter.server.impl.app.slh.SLhServerSessionImpl;
+import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface;
+
+/**
+ * @author  Fernando Mendioroz 
+ */
+public class SLhSessionFactory extends SLhSessionFactoryImpl {
+
+  public DiameterRAInterface slhResourceAdaptor;
+  private static final Logger logger = Logger.getLogger(SLhSessionFactory.class);
+
+  /**
+   * @param sessionFactory
+   */
+  public SLhSessionFactory(DiameterRAInterface slhResourceAdaptor, long messageTimeout, SessionFactory sessionFactory) {
+    super(sessionFactory);
+    this.slhResourceAdaptor = slhResourceAdaptor;
+  }
+
+  /* (non-Javadoc)
+   * @see org.jdiameter.common.api.app.IAppSessionFactory#getNewSession(java.lang.String, java.lang.Class, org.jdiameter.api.ApplicationId, java.lang.Object[])
+   */
+  @Override
+  public AppSession getNewSession(String sessionId, Class appSessionClass, ApplicationId applicationId, Object[] args) {
+    AppSession appSession;
+
+    if (appSessionClass == ServerSLhSession.class) {
+      SLhServerSessionImpl serverSession;
+      serverSession = (SLhServerSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args);
+      appSession = serverSession;
+    } else if (appSessionClass == ClientSLhSession.class) {
+      SLhClientSessionImpl clientSession;
+      clientSession = (SLhClientSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args);
+      appSession = clientSession;
+    } else {
+      throw new IllegalArgumentException("Wrong session class: [" + appSessionClass + "]. Supported[" + ServerSLhSession.class + "," + ClientSLhSession.class + "]");
+    }
+
+    return appSession;
+  }
+
+  /*
+   * (non-Javadoc)
+   *
+   * @see
+   * org.jdiameter.common.impl.app.sh.SLhSessionFactoryImpl#stateChanged(org.jdiameter.api.app.AppSession, java.lang.Enum, java.lang.Enum)
+   */
+  @Override
+  public void stateChanged(AppSession source, Enum oldState, Enum newState) {
+    //slhaResourceAdaptor.stateChanged(source, oldState, newState);
+    logger.info("Diameter SLh Session Factory :: stateChanged :: source[" + source + "] :: oldState[" + oldState + "], newState[" + newState + "]");
+  }
+
+  /* (non-Javadoc)
+   * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Enum, java.lang.Enum)
+   */
+  @Override
+  public void stateChanged(Enum oldState, Enum newState) {
+    logger.info("Diameter SLh Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]");
+  }
+
+  /* (non-Javadoc)
+   * @see org.jdiameter.common.api.app.slh.IslhMessageFactory#getApplicationId()
+   */
+  @Override
+  public long getApplicationId() {
+    // FIXME: Not needed?
+    return 16777291;
+  }
+
+  @Override
+  public void doLCSRoutingInfoRequestEvent(ServerSLhSession serverSLhSession, LCSRoutingInfoRequest request)
+      throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
+    slhResourceAdaptor.fireEvent(serverSLhSession.getSessionId(), request.getMessage());
+  }
+
+  @Override
+  public void doLCSRoutingInfoAnswerEvent(ClientSLhSession clientSLhSession, LCSRoutingInfoRequest request, LCSRoutingInfoAnswer answer)
+      throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
+    slhResourceAdaptor.fireEvent(clientSLhSession.getSessionId(), answer.getMessage());
+  }
+
+  /* (non-Javadoc)
+   * @see org.jdiameter.api.slh.ServerSlhSessionListener#doOtherEvent(org.jdiameter.api.app.AppSession, org.jdiameter.api.app.AppRequestEvent, org.jdiameter.api.app.AppAnswerEvent)
+   */
+  @Override
+  public void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
+    logger.info("Diameter SLh Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]");
+
+    slhResourceAdaptor.fireEvent(appSession.getSessionId(), answer != null ? answer.getMessage() : request.getMessage());
+  }
+
+}
+
diff --git a/resources/diameter-slh/ra/src/main/resources/META-INF/resource-adaptor-jar.xml b/resources/diameter-slh/ra/src/main/resources/META-INF/resource-adaptor-jar.xml
new file mode 100644
index 000000000..8c40122e3
--- /dev/null
+++ b/resources/diameter-slh/ra/src/main/resources/META-INF/resource-adaptor-jar.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+    
+
+        Diameter SLh Resource Adaptor
+
+        DiameterSLhResourceAdaptor
+        net.java
+        0.8.1
+
+        
+            Diameter SLh
+            java.net
+            0.8.1
+        
+
+        
+            diameter.base.common
+            java.net
+            1.0
+        
+
+        
+            
+                org.mobicents.slee.resource.diameter.slh.DiameterSLhResourceAdaptor
+                
+            
+        
+
+        
+            List of supported Authorization Application Ids in form of {vendor}:{application-id}, separated
+                by comma (',')
+            
+            authApplicationIds
+            java.lang.String
+            10415:16777291, 0:16777291
+        
+
+    
+
diff --git a/resources/diameter-slh/ratype/pom.xml b/resources/diameter-slh/ratype/pom.xml
new file mode 100644
index 000000000..59204085b
--- /dev/null
+++ b/resources/diameter-slh/ratype/pom.xml
@@ -0,0 +1,29 @@
+
+
+    4.0.0
+
+    
+        org.mobicents.resources
+        restcomm-slee-ra-diameter-slh
+        7.0.0-SNAPSHOT
+    
+
+    restcomm-slee-ra-diameter-slh-ratype
+
+    Restcomm :: Diameter Resources :: ${pom.artifactId}
+
+    
+        
+            ${pom.groupId}
+            restcomm-slee-ra-diameter-slh-events
+            ${pom.version}
+        
+        
+            ${pom.groupId}
+            restcomm-slee-ra-diameter-base-common-ratype
+            ${project.version}
+        
+    
+
+
diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhAVPFactory.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhAVPFactory.java
new file mode 100644
index 000000000..f8e26c7e7
--- /dev/null
+++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhAVPFactory.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package net.java.slee.resource.diameter.slh;
+
+import net.java.slee.resource.diameter.base.DiameterAvpFactory;
+import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp;
+import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp;
+import net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp;
+
+/**
+ * Used by applications to create Diameter SLh AVPs.
+ * SLh answer messages can be created using the SLhServerSessionActivity.createLCSRoutingInfoAnswer() method.
+ *
+ * @author  Fernando Mendioroz 
+ */
+public interface SLhAVPFactory extends DiameterAvpFactory {
+
+  ServingNodeAvp createServingNode();
+
+  AdditionalServingNodeAvp createAdditionalServingNode();
+
+  SupportedFeaturesAvp createSupportedFeatures();
+
+}
+
diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhActivityContextInterfaceFactory.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhActivityContextInterfaceFactory.java
new file mode 100644
index 000000000..be7e55e4b
--- /dev/null
+++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhActivityContextInterfaceFactory.java
@@ -0,0 +1,55 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package net.java.slee.resource.diameter.slh;
+
+import javax.slee.ActivityContextInterface;
+import javax.slee.UnrecognizedActivityException;
+
+/**
+ * Declares the methods to obtain an ActivityContextInterface for SLh activities.
+ *
+ * @author  Fernando Mendioroz 
+ * @author  Alexandre Mendonca 
+ * @author  Bartosz Baranowski 
+ */
+public interface SLhActivityContextInterfaceFactory {
+
+  /**
+   * Method for obtaining ActivityContextInterface for an SLh client activity.
+   *
+   * @param slhClientSessionActivity the SLh client activity
+   * @return the ActivityContextInterface
+   * @throws UnrecognizedActivityException
+   */
+  public ActivityContextInterface getActivityContextInterface(SLhClientSessionActivity slhClientSessionActivity) throws UnrecognizedActivityException;
+
+  /**
+   * Method for obtaining ActivityContextInterface for an SLh server activity.
+   *
+   * @param slhServerSessionActivity the SLh server activity
+   * @return the ActivityContextInterface
+   * @throws UnrecognizedActivityException
+   */
+  public ActivityContextInterface getActivityContextInterface(SLhServerSessionActivity slhServerSessionActivity) throws UnrecognizedActivityException;
+
+}
+
diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhClientSessionActivity.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhClientSessionActivity.java
new file mode 100644
index 000000000..4ca41e987
--- /dev/null
+++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhClientSessionActivity.java
@@ -0,0 +1,53 @@
+/*
+ *
+ * TeleStax, Open Source Cloud Communications
+ * Copyright 2011-2018, Telestax Inc and individual contributors
+ * by the @authors tag.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see 
+ *
+ */
+
+package net.java.slee.resource.diameter.slh;
+
+import java.io.IOException;
+
+import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest;
+
+/**
+ * An SLhClientSessionActivity represents a session for SLh interface clients (GMLCs)
+ * 

+ * All requests for the session must be sent via the same SLhClientSessionActivity. + *

+ * All responses related to the session will be received as events fired on the same SLhClientSessionActivity. + * + * @author Fernando Mendioroz + */ +public interface SLhClientSessionActivity extends SLhSessionActivity { + + /** + * Create LCS Routing-Info-Request. + */ + LCSRoutingInfoRequest createLCSRoutingInfoRequest(); + + /** + * Send an LCS Routing-Info-Request. + * + * @param rir (the LCS Routing-Info-Request to send) + * @throws IOException (if an error occurred sending the request to the peer) + */ + void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) throws IOException; + +} + diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhMessageFactory.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhMessageFactory.java new file mode 100644 index 000000000..7942fcc9a --- /dev/null +++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhMessageFactory.java @@ -0,0 +1,64 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh; + +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; + +/** + * Used by applications to create Diameter SLh request messages. + * SLh answer messages can be created using the SLhServerSessionActivity.createLCSRoutingInfoAnswer() method. + * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + * @author Bartosz Baranowski + */ +public interface SLhMessageFactory { + + /** + * The SLh interface protocol is defined as a vendor specific Diameter application, where + * the vendor is 3GPP. The vendor identifier assigned by IANA to 3GPP + * (http://www.iana.org/assignments/enterprise-numbers) is 10415. + */ + public static final long _SLh_TGPP_VENDOR_ID = 10415L; + + /** + * The Diameter application identifier assigned to the SLh interface application is 16777291 + * (allocated by IANA). + */ + public static final long _SLh_AUTH_APP_ID = 16777291L; + + /** + * Creates an LCS Routing-Info-Request message. + * + * @return + */ + LCSRoutingInfoRequest createLCSRoutingInfoRequest(); + + /** + * Creates an LCS Routing-Info-Request message with the Session-Id AVP populated with the sessionId parameter. + * + * @param sessionId + * @return + */ + LCSRoutingInfoRequest createLCSRoutingInfoRequest(String sessionId) throws IllegalArgumentException; + +} diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhProvider.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhProvider.java new file mode 100644 index 000000000..d7cc2c577 --- /dev/null +++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhProvider.java @@ -0,0 +1,117 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh; + +import net.java.slee.resource.diameter.Validator; +import net.java.slee.resource.diameter.base.CreateActivityException; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; + +/** + * The SBB interface for the Diameter SLh Resource Adaptor. + *

+ * This API can be used in either an asynchronous or synchronous manner. + *

+ * To send messages asynchronously, create a SLhClientSessionActivity using one of the createSLhClientSessionActivity() methods. + *

+ * To send messages synchronously, use the following methods: + *

    eventLCSRoutingInfoRequest(LCSRoutingInfoRequest)
+ *

+ * The Routing-Info-Request messages must be created using the SLhMessageFactory returned from getSLhMessageFactory(). + * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + * @author Bartosz Baranowski + */ +public interface SLhProvider { + + /** + * Return a message factory to be used to create concrete implementations of LCS Routing-Info messages. + * + * @return + */ + SLhMessageFactory getSLhMessageFactory(); + + /** + * Return a avp factory to be used to create concrete implementations of SLh AVPs. + * + * @return + */ + SLhAVPFactory getSLhAvpFactory(); + + /** + * Create a new activity to send and receive Diameter messages. + * + * @return a DiameterActivity + * @throws CreateActivityException if the RA could not create the activity for any reason + */ + public SLhClientSessionActivity createSLhClientSessionActivity() throws CreateActivityException; + + /** + * Create a new activity to send and receive Diameter messages. + * + * @param destinationHost a destination host to automatically put in all messages + * @param destinationRealm a destination realm to automatically put in all messages + * @return a DiameterActivity + * @throws CreateActivityException if the RA could not create the activity for any reason + */ + public SLhClientSessionActivity createSLhClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException; + + /** + * Create a new server session to send and receive Diameter messages. + * All messages sent on an activity created by this method must contain valid + * routing AVPs (one or both of Destination-Realm and Destination-Host as + * defined by IETF RFC 6733). + * + * @return a instance of a SLhServerSession to send SLh messages + */ + SLhServerSessionActivity createSLhServerSessionActivity() throws CreateActivityException; + + /** + * Create a new server session to send and receive Diameter messages. + * Messages sent on an activity created by this method will automatically + * have the Destination-Host and Destination-Realm AVPs set to the provided + * values. + * + * @param destinationHost a destination host to automatically put in all messages, may be null if not needed + * @param destinationRealm a destination realm to automatically put in all messages + * @return a instance of a SLhServerSession to send SLh messages + * @throws CreateActivityException + */ + SLhServerSessionActivity createSLhServerSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException; + + /** + * Return the number of peers this Diameter resource adaptor is connected to. + * + * @return connected peer count + */ + int getPeerCount(); + + /** + * Returns array containing identities of connected peers. + * + * @return + */ + DiameterIdentity[] getConnectedPeers(); + + Validator getValidator(); + +} diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhServerSessionActivity.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhServerSessionActivity.java new file mode 100644 index 000000000..103697ede --- /dev/null +++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhServerSessionActivity.java @@ -0,0 +1,56 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh; + +import java.io.IOException; + +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer; + +/** + * An SLhServerSessionActivity represents a session between GMLC and HSS. + *

+ * A single SLhServerSessionActivity will be created for the Diameter session. + * All requests received for the session will be fired as events on the same SLhServerSessionActivity. + *

+ * + * @author Fernando Mendioroz + */ +public interface SLhServerSessionActivity extends SLhSessionActivity { + + /** + * Create a SLh-specific Routing-Info-Answer message pre-populated with the + * appropriate AVPs for this session. + * + * @return a new LCSRoutingInfoAnswer + */ + LCSRoutingInfoAnswer createLCSRoutingInfoAnswer(); + + /** + * Sends a Routing-Info-Answer message to the peer. + * + * @param ria the LCSRoutingInfoAnswer to send + * @throws IOException if an error occurred sending the request to the peer + */ + void sendLCSRoutingInfoAnswer(LCSRoutingInfoAnswer ria) throws IOException; + + +} diff --git a/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhSessionActivity.java b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhSessionActivity.java new file mode 100644 index 000000000..d52b5f0ea --- /dev/null +++ b/resources/diameter-slh/ratype/src/main/java/net/java/slee/resource/diameter/slh/SLhSessionActivity.java @@ -0,0 +1,58 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package net.java.slee.resource.diameter.slh; + +import net.java.slee.resource.diameter.base.DiameterActivity; + +/** + * SLhSessionActivity.java + * + * @author Fernando Mendioroz + * @author Alexandre Mendonca + * @author Bartosz Baranowski + */ +public interface SLhSessionActivity extends DiameterActivity { + + /** + * Provides session state information. + * + * @return instance of {@link SLhSessionState} + */ + //public SLhSessionState getState(); + + /** + * Return a message factory to be used to create concrete implementations of + * Routing-Info messages. + * + * @return + */ + public SLhMessageFactory getSLhMessageFactory(); + + /** + * Returns the session ID of the SLh session, which uniquely + * identifies the session. + * + * @return the session ID + */ + public String getSessionId(); +} + diff --git a/resources/diameter-slh/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml b/resources/diameter-slh/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml new file mode 100644 index 000000000..afd360fbc --- /dev/null +++ b/resources/diameter-slh/ratype/src/main/resources/META-INF/resource-adaptor-type-jar.xml @@ -0,0 +1,69 @@ + + + + + + + + + Diameter SLh Resource Adaptor Type + + Diameter SLh + java.net + 0.8.1 + + + + net.java.slee.resource.diameter.slh.SLhClientSessionActivity + + + + net.java.slee.resource.diameter.slh.SLhServerSessionActivity + + + + org.jainslee.resources.diameter.base.DiameterActivity + + + + + net.java.slee.resource.diameter.slh.SLhActivityContextInterfaceFactory + + + + + net.java.slee.resource.diameter.slh.SLhProvider + + + + + + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest + java.net + 0.8 + + + + net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer + java.net + 0.8 + + + + + net.java.slee.resource.diameter.base.events.ErrorAnswer + java.net + 0.8 + + + + + net.java.slee.resource.diameter.base.events.ExtensionDiameterMessage + java.net + 0.8 + + + + + diff --git a/resources/diameter-slh/release/README.TXT b/resources/diameter-slh/release/README.TXT new file mode 100644 index 000000000..097a3559c --- /dev/null +++ b/resources/diameter-slh/release/README.TXT @@ -0,0 +1,63 @@ +================================================= + Restcomm Diameter : SLh Resource Adaptor +================================================= + v1.0.0.GA + + Welcome to the Restcomm Diameter SLh Resource Adaptor v1.0.0.GA release! + +-------------- + Introduction +-------------- + + This is the SLh RA release of Restcomm Diameter solution. + + This RA provides the SLh interface application implementation of Diameter + for JAIN SLEE and depends on the Restcomm Diameter Mux to be deployed before using it. + + +------------------ + Release Contents +------------------ + + diameter-slh-ra-DU-1.0.0.GA.jar (the JAIN SLEE Deployable Unit to be installed in Restcomm) + + slh-ratype-1.0.0.GA-sources.jar (source files for this Resource Adaptor Type) + + slh-ratype-1.0.0.GA-javadoc.jar (javadoc documentation for this Resource Adaptor Type) + + slh-ra-1.0.0.GA-sources.jar (source files for this Resource Adaptor) + + slh-ra-1.0.0.GA-javadoc.jar (javadoc documentation for this Resource Adaptor) + + du-management.xml (the auxiliar build file for managing deployment/undeployment) + + build.xml (the ant build file for deploying/undeploying the RA) + +---------------- + How to Use it? +---------------- + + In order to deploy/undeploy and correctly activate/deactivate the Resource Adaptor, you can: + + 1) Simply copy the DU jar to the deploy folder of the JBoss running Restcomm or delete it from the deploy folder to + uninstall it; + + 2) Use the provided build.xml file and call the desired targets: + - deploy/deploy-jmx for hard deploying or deploying via JMX interoace; + - undeploy/undeploy-jmx for hard undeploying or undeploying via JMX interoace; + +------------------ + More Information +------------------ + + For more detailed information, please visit the following sites: + + * Restcomm Diameter SLh (RA & Examples) Page (http://groups.google.com/ group/restcomm-public/web/restcomm-diameter-slh) + + * Restcomm Diameter Page (http://groups.google.com/group/restcomm-public/web/restcomm-diameter) + + * jDiameter Homepage (http://jdiameter.dev.java.net) + + * Restcomm Google Group, for posting questions (http://groups.google.com/group/restcomm-public) + + * Restcomm Homepage (http://www.restcomm.com) diff --git a/resources/diameter-slh/release/build-jboss5.xml b/resources/diameter-slh/release/build-jboss5.xml new file mode 100644 index 000000000..40b071a5e --- /dev/null +++ b/resources/diameter-slh/release/build-jboss5.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slh/release/build-wildfly.xml b/resources/diameter-slh/release/build-wildfly.xml new file mode 100644 index 000000000..ef1c2a3c5 --- /dev/null +++ b/resources/diameter-slh/release/build-wildfly.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slh/release/pom.xml b/resources/diameter-slh/release/pom.xml new file mode 100644 index 000000000..2cf88750b --- /dev/null +++ b/resources/diameter-slh/release/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + pom + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-ra-release + + Restcomm :: Diameter Resources :: ${pom.artifactId} + + + + release + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/diameter-slh/testsuite/pom.xml b/resources/diameter-slh/testsuite/pom.xml new file mode 100644 index 000000000..093234b53 --- /dev/null +++ b/resources/diameter-slh/testsuite/pom.xml @@ -0,0 +1,55 @@ + + 4.0.0 + + + org.mobicents.resources + restcomm-slee-ra-diameter-slh + 7.0.0-SNAPSHOT + + + restcomm-slee-ra-diameter-slh-testsuite + + Restcomm :: Diameter Resources :: ${project.artifactId} + + + + ${project.groupId} + restcomm-slee-ra-diameter-slh-ra + ${project.version} + + + ${project.groupId} + restcomm-slee-ra-diameter-base-testsuite + ${project.version} + test-jar + test + + + + + diameter-${project.artifactId}-${project.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.3 + + + none:none + pertest + + **/*$* + + + + + + + + src/test/resources + + + + + diff --git a/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhAvpAssistant.java b/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhAvpAssistant.java new file mode 100644 index 000000000..b69fb7974 --- /dev/null +++ b/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhAvpAssistant.java @@ -0,0 +1,74 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.tests.factories; + +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; +import org.mobicents.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.ServingNodeAvpImpl; + +/** + * Aux Class for assisting in testing AVP setters/getters + * + * @author Fernando Mendioroz + * @author Alexandre Mendonça + * @author Bartosz Baranowski + */ +public class SLhAvpAssistant extends org.mobicents.slee.resource.diameter.base.tests.factories.AvpAssistant { + + public static SLhAvpAssistant INSTANCE; + + static { + try { + INSTANCE = new SLhAvpAssistant(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected SLhAvpAssistant() throws Exception { + super(); + + // SLh AVP Factory + typeValues.put(ServingNodeAvp.class, new ServingNodeAvpImpl(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(ServingNodeAvp[].class, new ServingNodeAvpImpl[]{ + new ServingNodeAvpImpl(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes), + new ServingNodeAvpImpl(LCSRoutingInfoAVPCodes.SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(AdditionalServingNodeAvp.class, new AdditionalServingNodeAvpImpl(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(AdditionalServingNodeAvp[].class, new AdditionalServingNodeAvpImpl[]{ + new AdditionalServingNodeAvpImpl(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes), + new AdditionalServingNodeAvpImpl(LCSRoutingInfoAVPCodes.ADDITIONAL_SERVING_NODE, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes)}); + + typeValues.put(net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp.class, new org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl( + LCSRoutingInfoAVPCodes.SUPPORTED_FEATURES, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, dummyAvpBytes)); + typeValues.put(net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp[].class, new org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl[]{ + new org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl(LCSRoutingInfoAVPCodes.SUPPORTED_FEATURES, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, + dummyAvpBytes), + new org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl(LCSRoutingInfoAVPCodes.SUPPORTED_FEATURES, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, 0, 1, + dummyAvpBytes)}); + + } + +} + diff --git a/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhFactoriesTest.java b/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhFactoriesTest.java new file mode 100644 index 000000000..1fda7de4d --- /dev/null +++ b/resources/diameter-slh/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slh/tests/factories/SLhFactoriesTest.java @@ -0,0 +1,357 @@ +/* + * + * TeleStax, Open Source Cloud Communications + * Copyright 2011-2018, Telestax Inc and individual contributors + * by the @authors tag. + * + * This program is free software: you can redistribute it and/or modify + * under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + */ + +package org.mobicents.slee.resource.diameter.slh.tests.factories; + +import static org.junit.Assert.*; + +import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.AddressType; +import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; +import net.java.slee.resource.diameter.slh.SLhAVPFactory; +import net.java.slee.resource.diameter.slh.SLhMessageFactory; + +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer; +import net.java.slee.resource.diameter.slh.events.LCSRoutingInfoRequest; +import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.LCSRoutingInfoAVPCodes; +import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvp; +import org.jdiameter.api.ApplicationId; +import org.jdiameter.api.Stack; +import org.jdiameter.api.slh.ClientSLhSession; +import org.jdiameter.api.slh.ServerSLhSession; +import org.jdiameter.common.impl.app.slh.SLhSessionFactoryImpl; +import org.junit.Test; +import org.mobicents.diameter.dictionary.AvpDictionary; +import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl; +import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.base.tests.factories.BaseFactoriesTest; +import org.mobicents.slee.resource.diameter.base.tests.factories.BaseFactoriesTest.MyConfiguration; +import org.mobicents.slee.resource.diameter.slh.SLhAVPFactoryImpl; +import org.mobicents.slee.resource.diameter.slh.SLhClientSessionActivityImpl; +import org.mobicents.slee.resource.diameter.slh.SLhMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.slh.SLhServerSessionActivityImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.ServingNodeAvpImpl; +import org.mobicents.slee.resource.diameter.slh.events.avp.SupportedFeaturesAvpImpl; + +/** + * Test class for JAIN SLEE Diameter SLh RA Message and AVP Factories + * + * @author Fernando Mendioroz + * @author Alexandre Mendonça + * @author Bartosz Baranowski + */ +public class SLhFactoriesTest { + + private static SLhMessageFactory slhMessageFactory; + private static SLhAVPFactory slhAvpFactory; + private static SLhServerSessionActivityImpl sLhServerSessionActivity; + private static SLhClientSessionActivityImpl sLhClientSessionActivity; + + private static Stack stack; + + static { + stack = new org.jdiameter.client.impl.StackImpl(); + try { + stack.init(new MyConfiguration()); + } catch (Exception e) { + throw new RuntimeException("Failed to initialize the stack."); + } + + slhAvpFactory = new SLhAVPFactoryImpl(new DiameterAvpFactoryImpl()); + + try { + slhMessageFactory = new SLhMessageFactoryImpl(stack); + + SLhSessionFactoryImpl sf = new SLhSessionFactoryImpl(stack.getSessionFactory()); + ApplicationId slhAppId = ApplicationId.createByAuthAppId(LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, LCSRoutingInfoAVPCodes.SLh_AUTH_APP_ID); + org.jdiameter.server.impl.app.slh.SLhServerSessionImpl stackServerSession = (org.jdiameter.server.impl.app.slh.SLhServerSessionImpl) sf.getNewSession("123", + ServerSLhSession.class, slhAppId, new Object[0]); + org.jdiameter.client.impl.app.slh.SLhClientSessionImpl stackClientSession = (org.jdiameter.client.impl.app.slh.SLhClientSessionImpl) sf.getNewSession("321", + ClientSLhSession.class, slhAppId, new Object[0]); + sLhServerSessionActivity = new SLhServerSessionActivityImpl(slhMessageFactory, slhAvpFactory, stackServerSession, stackServerSession, null, null, stack); + sLhClientSessionActivity = new SLhClientSessionActivityImpl(slhMessageFactory, slhAvpFactory, stackClientSession, stackClientSession, null, null, stack); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + AvpDictionary.INSTANCE.parseDictionary(SLhFactoriesTest.class.getClassLoader().getResourceAsStream("dictionary.xml")); + } catch (Exception e) { + throw new RuntimeException("Failed to parse dictionary file."); + } + } + + @Test + public void isRequestRIR() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + assertTrue("Request Flag in LCS Routing-Info-Request is not set.", rir.getHeader().isRequest()); + } + + @Test + public void isProxiableRIR() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + assertTrue("The 'P' bit is not set by default in LCS Routing-Info-Request it should.", rir.getHeader().isProxiable()); + } + + @Test + public void testGettersAndSettersRIR() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + + int nFailures = SLhAvpAssistant.INSTANCE.testMethods(rir, LCSRoutingInfoRequest.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void testGroupedChildAVPsRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + + // Serving-Node Grouped AVP + ServingNodeAvp servingNodeAvp = slhAvpFactory.createServingNode(); + //SGSN Number + String sgsnNumberStr = "59899004501"; + byte[] sgsnNumber = sgsnNumberStr.getBytes(); + servingNodeAvp.setSGSNNumber(sgsnNumber); + //SGSN Name + DiameterIdentity sgsnName = new DiameterIdentity("SGSN01"); + servingNodeAvp.setSGSNName(sgsnName); + //SGSN Realm + DiameterIdentity sgsnRealm = new DiameterIdentity("sgsn.restcomm.com"); + servingNodeAvp.setSGSNRealm(sgsnRealm); + //MME Realm + DiameterIdentity mmeRealm = new DiameterIdentity("mme.restcomm.com"); + servingNodeAvp.setMMERealm(mmeRealm); + //MME Name + DiameterIdentity mmeName = new DiameterIdentity("MME710"); + servingNodeAvp.setMMEName(mmeName); + //MSC Number + String mscNumberStr = "59899001207"; + byte[] mscNumber = mscNumberStr.getBytes(); + servingNodeAvp.setMSCNumber(mscNumber); + // 3GPP AAA Server Name + DiameterIdentity tgppAAAServerName = new DiameterIdentity("aaa.restcomm.com"); + servingNodeAvp.set3GPPAAAServerName(tgppAAAServerName); + // GMLC Address + AddressType gmlcAddressType = AddressType.ADDRESS_IP; + String gmlcAddressStr = "10.0.0.7"; + byte[] gAddressBytes = gmlcAddressStr.getBytes(); + Address gmlcAddress = new Address(gmlcAddressType, gAddressBytes); + servingNodeAvp.setGMLCAddress(gmlcAddress); + + // Additional-Serving-Node Grouped AVP + AdditionalServingNodeAvp additionalServingNodeAvp = slhAvpFactory.createAdditionalServingNode(); + // Additional SGSN Number + String addSgsnNumberStr = "59899004502"; + byte[] addSgsnNumber = addSgsnNumberStr.getBytes(); + additionalServingNodeAvp.setSGSNNumber(addSgsnNumber); + // Additional SGSN Name + DiameterIdentity addSgsnName = new DiameterIdentity("SGSN02"); + additionalServingNodeAvp.setSGSNName(addSgsnName); + // Additional SGSN Realm + DiameterIdentity addSgsnRealm = new DiameterIdentity("sgsn.restcomm.com"); + additionalServingNodeAvp.setSGSNRealm(addSgsnRealm); + // Additional MME Realm + DiameterIdentity addMmeRealm = new DiameterIdentity("mme.restcomm.com"); + additionalServingNodeAvp.setMMERealm(addMmeRealm); + // Additional MME Name + DiameterIdentity addMmeName = new DiameterIdentity("MME710"); + additionalServingNodeAvp.setMMEName(addMmeName); + // Additional MSC Number + String addMscNumberStr = "59899001207"; + byte[] addMscNumber = addMscNumberStr.getBytes(); + additionalServingNodeAvp.setMSCNumber(addMscNumber); + // Additional 3GPP AAA Server Name + DiameterIdentity add3gppAAAServerName = new DiameterIdentity("aaa.restcomm.com"); + additionalServingNodeAvp.set3GPPAAAServerName(add3gppAAAServerName); + // Additional GMLC Address + AddressType addGmlcAddressType = AddressType.ADDRESS_IP; + String addGmlcAddressStr = "10.0.0.10"; + byte[] addGmlcAddressBytes = addGmlcAddressStr.getBytes(); + Address addGmlcAddress = new Address(addGmlcAddressType, addGmlcAddressBytes); + additionalServingNodeAvp.setGMLCAddress(addGmlcAddress); + + ria.setServingNode(servingNodeAvp); + ria.setAdditionalServingNode(additionalServingNodeAvp); + } + + @Test + public void isAnswerRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + + assertFalse("Request Flag in Routing-Information-Answer is set.", ria.getHeader().isRequest()); + } + + @Test + public void testGettersAndSettersRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + + int nFailures = SLhAvpAssistant.INSTANCE.testMethods(ria, LCSRoutingInfoAnswer.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void hasDestinationHostRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", ria.getDestinationHost()); + } + + @Test + public void hasDestinationRealmRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + + assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC6733/6.2]", ria.getDestinationRealm()); + } + + @Test + public void isProxiableCopiedRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + assertEquals("The 'P' bit is not copied from request in Routing-Information-Answer, it should. [RFC6733/6.2]", rir.getHeader().isProxiable(), ria.getHeader().isProxiable()); + + // Reverse 'P' bit ... + ((DiameterMessageImpl) rir).getGenericData().setProxiable(!rir.getHeader().isProxiable()); + assertTrue("The 'P' bit was not modified in Routing-Information-Request, it should.", rir.getHeader().isProxiable() != ria.getHeader().isProxiable()); + sLhServerSessionActivity.fetchSessionData(rir); + + ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + assertEquals("The 'P' bit is not copied from request in Routing-Information-Answer, it should. [RFC6733/6.2]", rir.getHeader().isProxiable(), ria.getHeader() + .isProxiable()); + } + + @Test + public void hasTFlagSetRIA() throws Exception { + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + ((DiameterMessageImpl) rir).getGenericData().setReTransmitted(true); + + assertTrue("The 'T' flag should be set in Routing-Information-Request", rir.getHeader().isPotentiallyRetransmitted()); + + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer ria = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + assertFalse("The 'T' flag should not be set in Routing-Information-Answer", ria.getHeader().isPotentiallyRetransmitted()); + } + + @Test + public void testMessageFactoryApplicationIdChangeRIR() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLhMessageFactoryImpl) slhMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLh is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + LCSRoutingInfoRequest originalRIR = slhMessageFactory.createLCSRoutingInfoRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalRIR); + + // now we switch.. + originalRIR = null; + isVendor = !isVendor; + ((SLhMessageFactoryImpl) slhMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + LCSRoutingInfoRequest changedAIR = slhMessageFactory.createLCSRoutingInfoRequest(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedAIR); + + // revert back to default + ((SLhMessageFactoryImpl) slhMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + @Test + public void testServerSessionApplicationIdChangeRIR() throws Exception { + long vendor = 10415L; + ApplicationId originalAppId = ((SLhMessageFactoryImpl) slhMessageFactory).getApplicationId(); + + boolean isAuth = originalAppId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + boolean isAcct = originalAppId.getAcctAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE; + + boolean isVendor = originalAppId.getVendorId() != 0L; + + assertTrue("Invalid Application-Id (" + originalAppId + "). Should only, and at least, contain either Auth or Acct value.", (isAuth && !isAcct) || (!isAuth && isAcct)); + + System.out.println("Default VENDOR-ID for SLh is " + originalAppId.getVendorId()); + // let's create a message and see how it comes... + LCSRoutingInfoRequest rir = slhMessageFactory.createLCSRoutingInfoRequest(); + sLhServerSessionActivity.fetchSessionData(rir); + LCSRoutingInfoAnswer originalRIA = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, originalRIA); + + // now we switch.. + originalRIA = null; + isVendor = !isVendor; + ((SLhMessageFactoryImpl) slhMessageFactory).setApplicationId(isVendor ? vendor : 0L, isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + + // create a new message and see how it comes... + LCSRoutingInfoAnswer changedRIA = sLhServerSessionActivity.createLCSRoutingInfoAnswer(); + BaseFactoriesTest.checkCorrectApplicationIdAVPs(isVendor, isAuth, isAcct, changedRIA); + + // revert back to default + ((SLhMessageFactoryImpl) slhMessageFactory).setApplicationId(originalAppId.getVendorId(), isAuth ? originalAppId.getAuthAppId() : originalAppId.getAcctAppId()); + } + + @Test + public void testGettersAndSettersServingNode() throws Exception { + ServingNodeAvp servingNodeAvp = slhAvpFactory.createServingNode(); + + int nFailures = SLhAvpAssistant.INSTANCE.testMethods(servingNodeAvp, ServingNodeAvpImpl.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + @Test + public void testGettersAndSettersAdditionalServingNode() throws Exception { + AdditionalServingNodeAvp additionalServingNodeAvp = slhAvpFactory.createAdditionalServingNode(); + + int nFailures = SLhAvpAssistant.INSTANCE.testMethods(additionalServingNodeAvp, AdditionalServingNodeAvpImpl.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + + + @Test + public void testGettersAndSettersSupportedFeatures() throws Exception { + SupportedFeaturesAvp supportedFeaturesAvp = slhAvpFactory.createSupportedFeatures(); + + int nFailures = SLhAvpAssistant.INSTANCE.testMethods(supportedFeaturesAvp, SupportedFeaturesAvpImpl.class); + + assertEquals("Some methods have failed. See logs for more details.", 0, nFailures); + } + +} From deec9be511293a294ea17f3b9396fd1c22c87c19 Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Thu, 5 Jul 2018 18:48:43 -0500 Subject: [PATCH 02/11] Added SLh and SLg modules to parent pom, replaced deprecated pom for project references. Issues #15 and #16, PR #36 --- pom.xml | 2 ++ .../docs/jdocbook-restcomm/pom.xml | 4 ++-- resources/diameter-slg/du/pom.xml | 18 +++++++++--------- resources/diameter-slg/events/pom.xml | 2 +- resources/diameter-slg/ra/pom.xml | 6 +++--- resources/diameter-slg/ratype/pom.xml | 4 ++-- resources/diameter-slg/release/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 4 ++-- resources/diameter-slh/docs/pom.xml | 2 +- resources/diameter-slh/du/pom.xml | 16 ++++++++-------- resources/diameter-slh/events/pom.xml | 4 ++-- resources/diameter-slh/ra/pom.xml | 8 ++++---- resources/diameter-slh/ratype/pom.xml | 6 +++--- resources/diameter-slh/release/pom.xml | 2 +- 14 files changed, 41 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index ea7fd0e17..096b1063e 100755 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,8 @@ resources/diameter-rx resources/diameter-s6a resources/diameter-s13 + resources/diameter-slh + resources/diameter-slg enablers/hss-client diff --git a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml index c96a8f90d..f736f6db9 100644 --- a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml @@ -59,9 +59,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-slg/du/pom.xml b/resources/diameter-slg/du/pom.xml index 21c9d7986..535077b3d 100644 --- a/resources/diameter-slg/du/pom.xml +++ b/resources/diameter-slg/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 2.8.0-SNAPSHOT + 7.0.0-SNAPSHOT restcomm-slee-ra-diameter-slg-ra-DU @@ -14,30 +14,30 @@ - org.mobicents.resources + ${project.groupId} restcomm-slee-ra-diameter-slg-common-library ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-ra - ${pom.version} + ${project.version} - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-slg/events/pom.xml b/resources/diameter-slg/events/pom.xml index 1d04987e0..6f0c5d0b5 100644 --- a/resources/diameter-slg/events/pom.xml +++ b/resources/diameter-slg/events/pom.xml @@ -26,7 +26,7 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-slg/ra/pom.xml b/resources/diameter-slg/ra/pom.xml index daf5cf65e..99e7ac93c 100644 --- a/resources/diameter-slg/ra/pom.xml +++ b/resources/diameter-slg/ra/pom.xml @@ -22,16 +22,16 @@ restcomm-slee-ra-diameter-slg-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-slg/ratype/pom.xml b/resources/diameter-slg/ratype/pom.xml index e5e880cd7..9b5d3f9ee 100644 --- a/resources/diameter-slg/ratype/pom.xml +++ b/resources/diameter-slg/ratype/pom.xml @@ -14,12 +14,12 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-events ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} diff --git a/resources/diameter-slg/release/pom.xml b/resources/diameter-slg/release/pom.xml index 4eea7c727..08466c9ae 100644 --- a/resources/diameter-slg/release/pom.xml +++ b/resources/diameter-slg/release/pom.xml @@ -10,7 +10,7 @@ restcomm-slee-ra-diameter-slg-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml index 6d4dea119..b39237e4d 100644 --- a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml @@ -59,9 +59,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-slh/docs/pom.xml b/resources/diameter-slh/docs/pom.xml index dca50c234..512ce7895 100644 --- a/resources/diameter-slh/docs/pom.xml +++ b/resources/diameter-slh/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 2.8.0-SNAPSHOT + 7.0.0-SNAPSHOT restcomm-slee-ra-diameter-slh-docs diff --git a/resources/diameter-slh/du/pom.xml b/resources/diameter-slh/du/pom.xml index 67fd93de7..972a8a1b6 100644 --- a/resources/diameter-slh/du/pom.xml +++ b/resources/diameter-slh/du/pom.xml @@ -15,30 +15,30 @@ - org.mobicents.resources + ${project.groupId} restcomm-slee-ra-diameter-slh-common-library ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-ra - ${pom.version} + ${project.version} - diameter-${pom.artifactId}-${pom.version} + diameter-${pom.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-slh/events/pom.xml b/resources/diameter-slh/events/pom.xml index 8e8cc4df8..8971332a0 100644 --- a/resources/diameter-slh/events/pom.xml +++ b/resources/diameter-slh/events/pom.xml @@ -24,11 +24,11 @@ restcomm-slee-ra-diameter-slh-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-slh/ra/pom.xml b/resources/diameter-slh/ra/pom.xml index e583ea1ee..839ec9985 100644 --- a/resources/diameter-slh/ra/pom.xml +++ b/resources/diameter-slh/ra/pom.xml @@ -28,19 +28,19 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-common-ra ${project.version} org.mobicents.servers.jainslee.core fault-tolerant-ra-api - ${pom.version} + ${project.version} org.mobicents.resources diff --git a/resources/diameter-slh/ratype/pom.xml b/resources/diameter-slh/ratype/pom.xml index 59204085b..bfee74f88 100644 --- a/resources/diameter-slh/ratype/pom.xml +++ b/resources/diameter-slh/ratype/pom.xml @@ -15,12 +15,12 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} diff --git a/resources/diameter-slh/release/pom.xml b/resources/diameter-slh/release/pom.xml index 2cf88750b..96e729029 100644 --- a/resources/diameter-slh/release/pom.xml +++ b/resources/diameter-slh/release/pom.xml @@ -13,7 +13,7 @@ restcomm-slee-ra-diameter-slh-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} From b05bb38ad0e23d1664c798ce37f6116d7e21da1a Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Thu, 5 Jul 2018 19:40:30 -0500 Subject: [PATCH 03/11] Eliminated wrong dependencies in DU and ra poms for mvn project building successfully (all SLh and SLg tests were already passing), ready to merge. Issues #15 and #16, PR #36 --- resources/diameter-slg/du/pom.xml | 6 ------ resources/diameter-slh/du/pom.xml | 6 ------ resources/diameter-slh/ra/pom.xml | 10 ---------- 3 files changed, 22 deletions(-) diff --git a/resources/diameter-slg/du/pom.xml b/resources/diameter-slg/du/pom.xml index 535077b3d..49912b7a7 100644 --- a/resources/diameter-slg/du/pom.xml +++ b/resources/diameter-slg/du/pom.xml @@ -12,12 +12,6 @@ Restcomm :: Diameter Resources :: ${pom.artifactId} - - - ${project.groupId} - restcomm-slee-ra-diameter-slg-common-library - ${project.version} - ${project.groupId} diff --git a/resources/diameter-slh/du/pom.xml b/resources/diameter-slh/du/pom.xml index 972a8a1b6..60f0ec24c 100644 --- a/resources/diameter-slh/du/pom.xml +++ b/resources/diameter-slh/du/pom.xml @@ -13,12 +13,6 @@ Restcomm :: Diameter Resources :: ${pom.artifactId} - - - ${project.groupId} - restcomm-slee-ra-diameter-slh-common-library - ${project.version} - ${project.groupId} diff --git a/resources/diameter-slh/ra/pom.xml b/resources/diameter-slh/ra/pom.xml index 839ec9985..43391c5f3 100644 --- a/resources/diameter-slh/ra/pom.xml +++ b/resources/diameter-slh/ra/pom.xml @@ -32,16 +32,6 @@ restcomm-slee-ra-diameter-slh-ratype ${project.version} - - ${project.groupId} - restcomm-slee-ra-diameter-slh-common-ra - ${project.version} - - - org.mobicents.servers.jainslee.core - fault-tolerant-ra-api - ${project.version} - org.mobicents.resources restcomm-slee-ra-diameter-base-common-ra From 761752ef828f74c0357227721a114cbc2e5511ac Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Sun, 29 Jul 2018 17:48:15 -0500 Subject: [PATCH 04/11] Added missing AVPs LCS-Reference-Number, Area-Event-Info, GMLC-Address, Periodic-LDR-Information, Reporting-PLMN-List, Motion-Event-Info to PLR according to 3GPP TS 29.172 v15.0.0, all tests passing. Issues #15 and #16, PR #36 --- .../slg/events/ProvideLocationRequest.java | 144 +++++++++++++++ .../events/ProvideLocationRequestImpl.java | 168 ++++++++++++++++++ .../slg/tests/factories/SLgFactoriesTest.java | 155 +++++++++++++--- 3 files changed, 447 insertions(+), 20 deletions(-) diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java index 76af4c98c..9bb182500 100644 --- a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationRequest.java @@ -22,8 +22,13 @@ package net.java.slee.resource.diameter.slg.events; import net.java.slee.resource.diameter.base.events.DiameterMessage; +import net.java.slee.resource.diameter.base.events.avp.Address; import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; import net.java.slee.resource.diameter.slg.events.avp.SLgLocationType; import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; import net.java.slee.resource.diameter.slg.events.avp.LCSClientType; @@ -68,6 +73,13 @@ * *[ AVP ] * *[ Proxy-Info ] * *[ Route-Record ] + * Note: plus all extra AVPs defined in Table 6.2.2-1: Provide Subscriber Location Request, i.e. + * [ LCS-Reference-Number ] + * [ Area-Event-Info ] + * [ GMLC-Address ] + * [ Periodic-LDR-Information ] + * [ Reporting-PLMN-List ] + * [ Motion-Event-Info ] * * @author Fernando Mendioroz * */ @@ -513,6 +525,138 @@ public interface ProvideLocationRequest extends DiameterMessage { */ void setPLRFlags(long plrFlags) throws IllegalStateException; + /** + * Returns true if the LCS-Reference-Number AVP is present in the message. + * + * @return + */ + boolean hasLCSReferenceNumber(); + + /** + * Returns the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @return + */ + byte[] getLCSReferenceNumber(); + + /** + * Sets the value of the LCS-Reference-Number AVP, of type OctetString. + * + * @param lcsReferenceNumber + * @throws IllegalStateException + */ + void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException; + + /** + * Returns true if the Area-Event-Info AVP is present in the message. + * + * @return + */ + boolean hasAreaEventInfo(); + + /** + * Returns the value of the Area-Event-Info AVP, of type Grouped. + * + * @return + */ + AreaEventInfoAvp getAreaEventInfo(); + + /** + * Sets the value of the Area-Event-Info AVP, of type Grouped. + * + * @param areaEventInfo + * @throws IllegalStateException + */ + void setAreaEventInfo(AreaEventInfoAvp areaEventInfo) throws IllegalStateException; + + /** + * Returns true if the GMLC-Address AVP is present in the message. + * + * @return + */ + boolean hasGMLCAddress(); + + /** + * Returns the value of the GMLC-Address, of type Address. + * + * @return + */ + Address getGMLCAddress(); + + /** + * Sets the value of the GMLC-Address AVP, of type Address. + * + * @param gmlcAddress + * @throws IllegalStateException + */ + void setGMLCAddress(Address gmlcAddress) throws IllegalStateException; + + /** + * Returns true if the Periodic-LDR-Information AVP is present in the message. + * + * @return + */ + boolean hasPeriodicLDRInformation(); + + /** + * Returns the value of the Periodic-LDR-Information AVP, of type Grouped. + * + * @return + */ + PeriodicLDRInfoAvp getPeriodicLDRInformation(); + + /** + * Sets the value of the Periodic-LDR-Information AVP, of type Grouped. + * + * @param periodicLDRInfo + * @throws IllegalStateException + */ + void setPeriodicLDRInformation(PeriodicLDRInfoAvp periodicLDRInfo) throws IllegalStateException; + + /** + * Returns true if the Reporting-PLMN-List AVP is present in the message. + * + * @return + */ + boolean hasReportingPLMNList(); + + /** + * Returns the value of the Reporting-PLMN-List AVP, of type Grouped. + * + * @return + */ + ReportingPLMNListAvp getReportingPLMNList(); + + /** + * Sets the value of the Reporting-PLMN-List AVP, of type Grouped. + * + * @param reportingPLMNList + * @throws IllegalStateException + */ + void setReportingPLMNList(ReportingPLMNListAvp reportingPLMNList) throws IllegalStateException; + + /** + * Returns true if the Motion-Event-Info AVP is present in the message. + * + * @return + */ + boolean hasMotionEventInfo(); + + /** + * Returns the value of the Motion-Event-Info AVP, of type Grouped. + * + * @return + */ + MotionEventInfoAvp getMotionEventInfo(); + + /** + * Sets the value of the Motion-Event-Info AVP, of type Grouped. + * + * @param motionEventInfo + * @throws IllegalStateException + */ + void setMotionEventInfo(MotionEventInfoAvp motionEventInfo) throws IllegalStateException; + /** * Returns the value of the Supported-Features AVP, of type Grouped. * diff --git a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java index 7dc45a36a..c5d55cff8 100644 --- a/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java +++ b/resources/diameter-slg/events/src/main/java/org/mobicents/slee/resource/diameter/slg/events/ProvideLocationRequestImpl.java @@ -21,10 +21,15 @@ package org.mobicents.slee.resource.diameter.slg.events; +import net.java.slee.resource.diameter.base.events.avp.Address; import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; import net.java.slee.resource.diameter.slg.events.avp.SLgLocationType; import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; import net.java.slee.resource.diameter.slg.events.avp.LCSClientType; @@ -38,11 +43,15 @@ import org.jdiameter.api.Message; import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.AreaEventInfoAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.LCSQoSAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.MotionEventInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvpImpl; +import org.mobicents.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvpImpl; import org.mobicents.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvpImpl; /** @@ -566,6 +575,165 @@ public void setPLRFlags(long plrFlags) throws IllegalStateException { addAvp(ELPAVPCodes.PLR_FLAGS, ELPAVPCodes.SLg_VENDOR_ID, plrFlags); } + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasLCSReferenceNumber() + */ + @Override + public boolean hasLCSReferenceNumber() { + return hasAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getLCSReferenceNumber() + */ + @Override + public byte[] getLCSReferenceNumber() { + return getAvpAsOctetString(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setLCSReferenceNumber(byte[]) + */ + @Override + public void setLCSReferenceNumber(byte[] lcsReferenceNumber) throws IllegalStateException { + addAvp(ELPAVPCodes.LCS_REFERENCE_NUMBER, ELPAVPCodes.SLg_VENDOR_ID, lcsReferenceNumber); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasAreaEventInfo() + */ + @Override + public boolean hasAreaEventInfo() { + return hasAvp(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getAreaEventInfo() + */ + @Override + public AreaEventInfoAvp getAreaEventInfo() { + return (AreaEventInfoAvp) getAvpAsCustom(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, AreaEventInfoAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setAreaEventInfo(net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp) + */ + @Override + public void setAreaEventInfo(AreaEventInfoAvp areaEventInfo) throws IllegalStateException { + addAvp(ELPAVPCodes.AREA_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, areaEventInfo.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasGMLCAddress() + */ + @Override + public boolean hasGMLCAddress() { + return hasAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getGMLCAddress() + */ + @Override + public Address getGMLCAddress() { + return getAvpAsAddress(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setGMLCAddress(net.java.slee.resource.diameter.base.events.avp.Address) + */ + @Override + public void setGMLCAddress(Address gmlcAddress) { + addAvp(ELPAVPCodes.GMLC_ADDRESS, ELPAVPCodes.SLg_VENDOR_ID, gmlcAddress); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasPeriodicLDRInformation() + */ + @Override + public boolean hasPeriodicLDRInformation() { + return hasAvp(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getPeriodicLDRInformation() + */ + @Override + public PeriodicLDRInfoAvp getPeriodicLDRInformation() { + return (PeriodicLDRInfoAvp) getAvpAsCustom(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, PeriodicLDRInfoAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setPeriodicLDRInformation(net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp) + */ + @Override + public void setPeriodicLDRInformation(PeriodicLDRInfoAvp periodicLDRInfoAvp) throws IllegalStateException { + addAvp(ELPAVPCodes.PERIODIC_LDR_INFORMATION, ELPAVPCodes.SLg_VENDOR_ID, periodicLDRInfoAvp.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasReportingPLMNList() + */ + @Override + public boolean hasReportingPLMNList() { + return hasAvp(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getReportingPLMNList() + */ + @Override + public ReportingPLMNListAvp getReportingPLMNList() { + return (ReportingPLMNListAvp) getAvpAsCustom(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, ReportingPLMNListAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setReportingPLMNList(net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp) + */ + @Override + public void setReportingPLMNList(ReportingPLMNListAvp reportingPLMNList) throws IllegalStateException { + addAvp(ELPAVPCodes.REPORTING_PLMN_LIST, ELPAVPCodes.SLg_VENDOR_ID, reportingPLMNList.byteArrayValue()); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#hasMotionEventInfo() + */ + @Override + public boolean hasMotionEventInfo() { + return hasAvp(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getMotionEventInfo() + */ + @Override + public MotionEventInfoAvp getMotionEventInfo() { + return (MotionEventInfoAvp) getAvpAsCustom(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, MotionEventInfoAvpImpl.class); + } + + /* + * (non-Javadoc) + * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#setMotionEventInfo(net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp) + */ + @Override + public void setMotionEventInfo(MotionEventInfoAvp motionEventInfoAvp) throws IllegalStateException { + addAvp(ELPAVPCodes.MOTION_EVENT_INFO, ELPAVPCodes.SLg_VENDOR_ID, motionEventInfoAvp.byteArrayValue()); + } + /* (non-Javadoc) * @see net.java.slee.resource.diameter.slg.events.ProvideLocationRequest#getSupportedFeatureses() */ diff --git a/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java index fd6a06000..a2521fddc 100644 --- a/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java +++ b/resources/diameter-slg/testsuite/src/test/java/org/mobicents/slee/resource/diameter/slg/tests/factories/SLgFactoriesTest.java @@ -33,9 +33,38 @@ import net.java.slee.resource.diameter.slg.events.ProvideLocationAnswer; import net.java.slee.resource.diameter.slg.events.LocationReportRequest; import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; -import net.java.slee.resource.diameter.slg.events.avp.*; - +import net.java.slee.resource.diameter.slg.events.avp.AdditionalAreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaDefinitionAvp; +import net.java.slee.resource.diameter.slg.events.avp.AreaEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.DeferredMTLRDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.DelayedLocationReportingDataAvp; +import net.java.slee.resource.diameter.slg.events.avp.ELPAVPCodes; +import net.java.slee.resource.diameter.slg.events.avp.ESMLCCellInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.GERANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSEPSClientNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSFormatIndicator; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheck; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckNonSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSPrivacyCheckSessionAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSAvp; +import net.java.slee.resource.diameter.slg.events.avp.LCSQoSClass; +import net.java.slee.resource.diameter.slg.events.avp.LCSRequestorNameAvp; +import net.java.slee.resource.diameter.slg.events.avp.MotionEventInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.OccurrenceInfo; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLDRInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.PeriodicLocationSupportIndicator; +import net.java.slee.resource.diameter.slg.events.avp.PLMNIDListAvp; +import net.java.slee.resource.diameter.slg.events.avp.PrioritizedListIndicator; +import net.java.slee.resource.diameter.slg.events.avp.PseudonymIndicator; +import net.java.slee.resource.diameter.slg.events.avp.ReportingPLMNListAvp; +import net.java.slee.resource.diameter.slg.events.avp.ResponseTime; import net.java.slee.resource.diameter.slg.events.avp.ServingNodeAvp; +import net.java.slee.resource.diameter.slg.events.avp.SLgLocationType; +import net.java.slee.resource.diameter.slg.events.avp.SupportedFeaturesAvp; +import net.java.slee.resource.diameter.slg.events.avp.UTRANPositioningInfoAvp; +import net.java.slee.resource.diameter.slg.events.avp.VelocityRequested; +import net.java.slee.resource.diameter.slg.events.avp.VerticalRequested; import org.jdiameter.api.ApplicationId; import org.jdiameter.api.Stack; import org.jdiameter.api.slg.ClientSLgSession; @@ -128,8 +157,16 @@ public void testGroupedChildAVPsPLR() throws Exception { LCSQoSAvp lcsQoSAvp = slgAvpFactory.createLCSQoS(); LCSPrivacyCheckNonSessionAvp lcsPrivacyCheckNonSessionAvp =slgAvpFactory.createLCSPrivacyCheckNonSession(); LCSPrivacyCheckSessionAvp lcsPrivacyCheckSessionAvp = slgAvpFactory.createLCSPrivacyCheckSession(); + AreaEventInfoAvp areaEventInfoAvp = slgAvpFactory.createAreaEventInfo(); + AreaDefinitionAvp areaDefinitionAvp = slgAvpFactory.createAreaDefinition(); + AreaAvp areaAvp = slgAvpFactory.createArea(); + AdditionalAreaAvp additionalAreaAvp = slgAvpFactory.createAdditionalArea(); + PeriodicLDRInfoAvp periodicLDRInfoAvp = slgAvpFactory.createPeriodicLDRInformation(); + ReportingPLMNListAvp reportingPLMNListAvp = slgAvpFactory.createReportingPLMNList(); + PLMNIDListAvp plmnIdListAvp = slgAvpFactory.createPLMNIDList(); + MotionEventInfoAvp motionEventInfoAvp = slgAvpFactory.createMotionEventInfo(); - // ** LCS-EPS-Client-Name ** // + /** LCS-EPS-Client-Name **/ // LCS-Name-String String lcsNameString = "Restcomm Geolocation API"; lcsEpsClientNameAvp.setLCSNameString(lcsNameString); @@ -141,7 +178,7 @@ public void testGroupedChildAVPsPLR() throws Exception { // Add LCS-EPS-Client-Name Grouped AVP to Provide-Location-Request plr.setLCSEPSClientName(lcsEpsClientNameAvp); - // ** LCS-Requestor-Name ** // + /** LCS-Requestor-Name **/ // LCS-Requestor-Id-String String lcsRequestorIdString = "restcomm_geolocation_23"; lcsRequestorNameAvp.setLCSRequestorIDString(lcsRequestorIdString); @@ -152,7 +189,7 @@ public void testGroupedChildAVPsPLR() throws Exception { // Add LCS-Requestor-Name Grouped AVP to Provide-Location-Request plr.setLCSRequestorName(lcsRequestorNameAvp); - // ** LCS-QoS ** // + /** LCS-QoS **/ // LCS-QoS-Class LCSQoSClass lcsQoSClass = null; int lcsQoSClassValue = LCSQoSClass._BEST_EFFORT; @@ -177,7 +214,7 @@ public void testGroupedChildAVPsPLR() throws Exception { // Add LCS-QoS Grouped AVP to Provide-Location-Request plr.setLCSQoS(lcsQoSAvp); - // LCS-Privacy-Check-Non-Session ** // + /** LCS-Privacy-Check-Non-Session **/ // LCS-Privacy-Check LCSPrivacyCheck lcsPrivacyCheck = null; int lcsPrivacyCheckNonSValue = LCSPrivacyCheck._ALLOWED_WITH_NOTIFICATION; @@ -186,7 +223,7 @@ public void testGroupedChildAVPsPLR() throws Exception { // Add LCS-Privacy-Check-Non-Session Grouped AVP to Provide-Location-Request plr.setLCSPrivacyCheckNonSession(lcsPrivacyCheckNonSessionAvp); - // ** LCS-Privacy-Check-Session ** // + /** LCS-Privacy-Check-Session **/ // LCS-Privacy-Check int lcsPrivacyCheckValue = LCSPrivacyCheck._RESTRICTED_IF_NO_RESPONSE; lcsPrivacyCheck = lcsPrivacyCheck.fromInt(lcsPrivacyCheckValue); @@ -194,6 +231,84 @@ public void testGroupedChildAVPsPLR() throws Exception { // Add LCS-Privacy-Check-Session Grouped AVP to Provide-Location-Request plr.setLCSPrivacyCheckSession(lcsPrivacyCheckSessionAvp); + /** Area-Event-Info **/ + // Area + long areaType = 2L; + String areaIdStr = "Area51"; + byte[] areaIdentification = areaIdStr.getBytes(); + areaAvp.setAreaType(areaType); + areaAvp.setAreaIdentification(areaIdentification); + // AdditionalArea + long addAreaType = 3L; + String addAreaIdStr = "Area52"; + byte[] addAreaIdentification = addAreaIdStr.getBytes(); + additionalAreaAvp.setAreaType(addAreaType); + additionalAreaAvp.setAreaIdentification(addAreaIdentification); + // Area-Definition + areaDefinitionAvp.setArea(areaAvp); + areaDefinitionAvp.setAdditionalArea(additionalAreaAvp); + // Area-Event-Info + int occInfo = OccurrenceInfo._ONE_TIME_EVENT; + OccurrenceInfo occurrenceInfo = OccurrenceInfo.fromInt(occInfo); + long intervalTime = 180L; + long samplingInterval = 30L; + long maximumInterval = 1800L; + long reportingDuration = 36000L; + long reportingLocationRequirements = 5L; + areaEventInfoAvp.setAreaDefinition(areaDefinitionAvp); + areaEventInfoAvp.setOccurrenceInfo(occurrenceInfo); + areaEventInfoAvp.setIntervalTime(intervalTime); + areaEventInfoAvp.setMaximumInterval(maximumInterval); + areaEventInfoAvp.setSamplingInterval(samplingInterval); + areaEventInfoAvp.setReportDuration(reportingDuration); + areaEventInfoAvp.setReportingLocationRequirements(reportingLocationRequirements); + // Add Area-Event-Info Grouped AVP to Provide-Location-Request + plr.setAreaEventInfo(areaEventInfoAvp); + + /** Periodic-LDR-Info **/ + // Reporting-Amount + long reportingAmount = 1L; + periodicLDRInfoAvp.setReportingAmount(reportingAmount); + // Reporting-Interval + long reportingInterval = 8639999L; + periodicLDRInfoAvp.setReportingInterval(reportingInterval); + // Add Periodic-LDR-Info Grouped AVP to Provide-Location-Request + plr.setPeriodicLDRInformation(periodicLDRInfoAvp); + + /** Reporting-PLMN-List **/ + // PLMN-ID-List + String visitedPLMNIdListString = "222"; + byte[] visitedPLMNIdList = visitedPLMNIdListString.getBytes(); + plmnIdListAvp.setVisitedPLMNId(visitedPLMNIdList); + // Periodic-Location-Support-Indicator + PeriodicLocationSupportIndicator periodicLocationSupportIndicator = PeriodicLocationSupportIndicator.SUPPORTED; + plmnIdListAvp.setPeriodicLocationSupportIndicator(periodicLocationSupportIndicator); + reportingPLMNListAvp.setPLMNIDList(plmnIdListAvp); + // Prioritized-List-Indicator + PrioritizedListIndicator prioritizedListIndicator = PrioritizedListIndicator.PRIORITIZED; + reportingPLMNListAvp.setPrioritizedListIndicator(prioritizedListIndicator); + // Add Reporting-PLMN-List Grouped AVP to Provide-Location-Request + plr.setReportingPLMNList(reportingPLMNListAvp); + + /** Motion-Event-Info **/ + // Linear-Distance + long linearDistance = 300L; + OccurrenceInfo occurrenceInfoME = OccurrenceInfo.MULTIPLE_TIME_EVENT; + long intervalTimeME = 800L; + long maximumIntervalME = 1900L; + long samplingIntervalME = 60L; + long reportingDurationME = 36000L; + long reportingLocationRequirementsME = 25L; + motionEventInfoAvp.setLinearDistance(linearDistance); + motionEventInfoAvp.setOccurrenceInfo(occurrenceInfoME); + motionEventInfoAvp.setIntervalTime(intervalTimeME); + motionEventInfoAvp.setMaximumInterval(maximumIntervalME); + motionEventInfoAvp.setSamplingInterval(samplingIntervalME); + motionEventInfoAvp.setReportDuration(reportingDurationME); + motionEventInfoAvp.setReportingLocationRequirements(reportingLocationRequirementsME); + // Add Motion-Event-Info Grouped AVP to Provide-Location-Request + plr.setMotionEventInfo(motionEventInfoAvp); + } @Test @@ -269,7 +384,7 @@ public void testGroupedChildAVPsPLA() throws Exception { ESMLCCellInfoAvp esmlcCellInfoAvp = slgAvpFactory.createESMLCCellInfo(); ServingNodeAvp servingNodeAvp = slgAvpFactory.createServingNode(); - // ** GERAN-Positioning-Info *** // + /** GERAN-Positioning-Info **/ // GERAN-Positioning-Data String geranPosData = "42545339343342534333"; byte[] geranPositioningData = geranPosData.getBytes(); @@ -281,7 +396,7 @@ public void testGroupedChildAVPsPLA() throws Exception { // Add GERAN-Positioning-Info AVP to Provide-Location-Answer pla.setGERANPositioningInfo(geranPositioningInfoAvp); - // ** UTRAN-Positioning-Info *** // + /** UTRAN-Positioning-Info **/ // UTRAN-Positioning-Data String utranPosData = "42545339343342534333"; byte[] utranPositioningData = utranPosData.getBytes(); @@ -297,7 +412,7 @@ public void testGroupedChildAVPsPLA() throws Exception { // Add UTRAN-Positioning-Info AVP to Provide-Location-Answer pla.setUTRANPositioningInfo(utranPositioningInfoAvp); - // *** ESMLC-Cell-Info *** // + /** ESMLC-Cell-Info **/ // ECGI String ecgiStr = "654E4239343337"; byte[] ecgi = ecgiStr.getBytes(); @@ -308,7 +423,7 @@ public void testGroupedChildAVPsPLA() throws Exception { // Add ESMLC-Cell-Info Grouped AVP to Provide-Location-Answer pla.setESMLCCellInfo(esmlcCellInfoAvp); - // *** Serving-Node *** // + /** Serving-Node **/ // SGSN-Number String sgsnNumberStr = "59899004501"; byte[] sgsnNumber = sgsnNumberStr.getBytes(); @@ -452,7 +567,7 @@ public void testGroupedChildAVPsLRR() throws Exception { PeriodicLDRInfoAvp periodicLDRInfoAvp = slgAvpFactory.createPeriodicLDRInformation(); ESMLCCellInfoAvp esmlcCellInfoAvp = slgAvpFactory.createESMLCCellInfo(); - // ** LCS-EPS-Client-Name ** // + /** LCS-EPS-Client-Name **/ // LCS-Name-String String lcsNameString = "Restcomm Geolocation API"; lcsEpsClientNameAvp.setLCSNameString(lcsNameString); @@ -464,7 +579,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add LCS-EPS-Client-Name Grouped AVP to Location-Report-Request lrr.setLCSEPSClientName(lcsEpsClientNameAvp); - // ** GERAN-Positioning-Info *** // + /** GERAN-Positioning-Info **/ // GERAN-Positioning-Data String geranPosData = "42545339343342534333"; byte[] geranPositioningData = geranPosData.getBytes(); @@ -476,7 +591,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add GERAN-Positioning-Info AVP to Location-Report-Request lrr.setGERANPositioningInfo(geranPositioningInfoAvp); - // ** UTRAN-Positioning-Info *** // + /** UTRAN-Positioning-Info **/ // UTRAN-Positioning-Data String utranPosData = "42545339343342534333"; byte[] utranPositioningData = utranPosData.getBytes(); @@ -492,7 +607,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add UTRAN-Positioning-Info AVP to Location-Report-Request lrr.setUTRANPositioningInfo(utranPositioningInfoAvp); - // ** Periodic-LDR-Info ** // + /** Periodic-LDR-Info **/ // Reporting-Amount long reportingAmount = 1L; periodicLDRInfoAvp.setReportingAmount(reportingAmount); @@ -502,7 +617,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add Periodic-LDR-Info Grouped AVP to Location-Report-Request lrr.setPeriodicLDRInformation(periodicLDRInfoAvp); - // *** ESMLC-Cell-Info *** // + /** ESMLC-Cell-Info **/ // ECGI String ecgiStr = "654E4239343337"; byte[] ecgi = ecgiStr.getBytes(); @@ -513,7 +628,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add ESMLC-Cell-Info Grouped AVP to Location-Report-Request lrr.setESMLCCellInfo(esmlcCellInfoAvp); - // *** Serving-Node *** // + /** Serving-Node **/ // SGSN-Number String sgsnNumberStr = "59899004501"; byte[] sgsnNumber = sgsnNumberStr.getBytes(); @@ -549,7 +664,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add Serving-Node Grouped AVP to Location-Report-Request lrr.setServingNode(servingNodeAvp); - // ** Deferred-MT-LR-Data ** // + /** Deferred-MT-LR-Data **/ // Deferred-Location-Type long deferredLocationType = 5L; deferredMTLRDataAvp.setDeferredLocationType(deferredLocationType); @@ -561,7 +676,7 @@ public void testGroupedChildAVPsLRR() throws Exception { // Add Deferred-MT-LR-Data Grouped AVP to Location-Report-Request lrr.setDeferredMTLRData(deferredMTLRDataAvp); - // ** Delayed-Location-Reporting-Data ** // + /** Delayed-Location-Reporting-Data **/ // Termination-Cause long terminationCauseDLRD = 9L; delayedLocationReportingDataAvp.setTerminationCause(terminationCauseDLRD); @@ -632,7 +747,7 @@ public void testGroupedChildAVPsLRA() throws Exception { ReportingPLMNListAvp reportingPLMNListAvp = slgAvpFactory.createReportingPLMNList(); PLMNIDListAvp plmnIdListAvp = slgAvpFactory.createPLMNIDList(); - // *** Reporting-PLMN-List *** // + /** Reporting-PLMN-List **/ // PLMN-ID-List String visitedPLMNIdListString = "222"; byte[] visitedPLMNIdList = visitedPLMNIdListString.getBytes(); From 87de4252195d2a372ae459a923f2114d5dfef111 Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Sun, 29 Jul 2018 18:16:33 -0500 Subject: [PATCH 05/11] Updated Area-Event-Info AVP definition in dictionary.xml, according to 3GPP TS 29.172 v15.0.0. Issues #15 and #16, PR #36 --- .../diameter-base/testsuite/src/test/resources/dictionary.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml index 399e281c0..9613ca616 100644 --- a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml +++ b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml @@ -7259,6 +7259,10 @@ + + + + From 680d42fbc91c6f3e2062ad997e2ca50f7ba6ac5e Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Mon, 30 Jul 2018 18:16:58 -0500 Subject: [PATCH 06/11] Set Location-Estimate AVP type to proper OctetString in dictionary. Issues #15 and #16, PR #36 --- .../diameter-base/testsuite/src/test/resources/dictionary.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml index 9613ca616..2ecfaffd6 100644 --- a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml +++ b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml @@ -2969,7 +2969,7 @@ - + From e7c58976d69b5fee51423d7fe474c40d709f8244 Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Fri, 31 Aug 2018 18:05:33 -0500 Subject: [PATCH 07/11] Fixed creation of RIR and PLR to actual requests in SLhClientSessionActivityImpl and SLgClientSessionActivityImpl. Issues #15 and #16, PR #36 --- .../SLgClientSessionActivityImpl.java | 25 ++++++++----------- .../slh/SLhClientSessionActivityImpl.java | 18 ++++++------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java index 09ef00b59..426c6565d 100644 --- a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java @@ -104,25 +104,20 @@ public void endActivity() { } public ProvideLocationRequest createProvideLocationRequest() { - // Make sure we have the correct type of Request - if (!(lastRequest instanceof ProvideLocationRequest)) { - logger.warn("Invalid type of answer for this activity."); - return null; - } - try { - // Create the request - ProvideLocationRequest lrr = (ProvideLocationRequest) this.slgMessageFactory.createSLgMessage(lastRequest.getHeader(), new DiameterAvp[]{}, ProvideLocationRequest.COMMAND_CODE, slgMessageFactory.getApplicationId()); + ProvideLocationRequest plr = super.getSLgMessageFactory().createProvideLocationRequest(super.getSessionId()); - // Fill session related AVPs, if present - fillSessionAVPs(lrr); + // If there's a Destination-Host, add the AVP + if (destinationHost != null) { + plr.setDestinationHost(destinationHost); + } - return lrr; - } catch (InternalException e) { - logger.error("Failed to create Location-Report-Answer.", e); - } + if (destinationRealm != null) { + plr.setDestinationRealm(destinationRealm); + } + + return plr; - return null; } public ProvideLocationRequest createProvideLocationRequest(String sessionId) throws IllegalArgumentException { diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java index b58fd83bf..357b5d9fb 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java @@ -105,19 +105,19 @@ public void endActivity() { */ public LCSRoutingInfoRequest createLCSRoutingInfoRequest() { - try { - // Create the request - LCSRoutingInfoRequest rir = (LCSRoutingInfoRequest) this.slhMessageFactory.createSLhMessage(lastRequest.getHeader(), new DiameterAvp[]{}, LCSRoutingInfoRequest.COMMAND_CODE, slhMessageFactory.getApplicationId()); + LCSRoutingInfoRequest rir = super.getSLhMessageFactory().createLCSRoutingInfoRequest(super.getSessionId()); - // Fill session related AVPs, if present - fillSessionAVPs(rir); + // If there's a Destination-Host, add the AVP + if (destinationHost != null) { + rir.setDestinationHost(destinationHost); + } + + if (destinationRealm != null) { + rir.setDestinationRealm(destinationRealm); + } return rir; - } catch (InternalException e) { - logger.error("Failed to create LCS Routing-Info-Request." + e); - } - return null; } From a1835b1a8cb2e93b93a66ed34bc12d8a177bc278 Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Thu, 11 Oct 2018 10:22:31 +0300 Subject: [PATCH 08/11] Fixed duplicated destination realm parameter in SLhClientSessionActivityImpl constructor (replaced duplicated destination realm for destination host). Issues #15 and #16, PR #36. --- .../resource/diameter/slh/SLhClientSessionActivityImpl.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java index 357b5d9fb..eeb787e1b 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java @@ -59,7 +59,7 @@ public class SLhClientSessionActivityImpl extends SLhSessionActivityImpl impleme */ public SLhClientSessionActivityImpl(SLhMessageFactory slhMessageFactory, SLhAVPFactory slhAvpFactory, ClientSLhSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { - super(slhMessageFactory, slhAvpFactory, null, (EventListener) session, destinationRealm, destinationRealm); + super(slhMessageFactory, slhAvpFactory, null, (EventListener) session, destinationHost, destinationRealm); // FIXME: remove stack? setSession(session); @@ -133,9 +133,6 @@ public void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest rir) throws IOExcept } catch (org.jdiameter.api.validation.AvpNotAllowedException e) { throw new AvpNotAllowedException("Message validation failed.", e, e.getAvpCode(), e.getVendorId()); } catch (Exception e) { - if (logger.isDebugEnabled()) { - logger.debug("Failed to send message.", e); - } throw new IOException("Failed to send message, due to: " + e); } } From 839fa8fed91fd514c2bb9e1908f7c59451ed985f Mon Sep 17 00:00:00 2001 From: Fernando Mendioroz Date: Fri, 5 Feb 2021 20:57:00 -0300 Subject: [PATCH 09/11] Added several enhancements/fixes for SLh and SLg resource adaptors and refactored Sh interface for updating to 3GPP TS 29.328/329 versions 15.7.0 and 15.2.0 respectively (Sept. 2019) for Sh User-Data-Request/Answer AVPs for CS/PS/EPS and Sh5GS location information, in order to fit with Extended-GMLC. Testsuite tests fixed for Sh RA. Included all commits done since 2018 in repo https://github.com/FerUy/jainslee.diameter --- .../hss-client/docs/jdocbook-restcomm/pom.xml | 6 +- enablers/hss-client/docs/pom.xml | 2 +- .../docs/sources-restcomm/.gitignore | 1 - .../hss-client/docs/sources-restcomm/pom.xml | 6 +- enablers/hss-client/docs/sources/pom.xml | 2 +- enablers/hss-client/du/pom.xml | 6 +- enablers/hss-client/example/du/pom.xml | 2 +- enablers/hss-client/example/pom.xml | 2 +- enablers/hss-client/example/sbb/pom.xml | 2 +- enablers/hss-client/pom.xml | 2 +- enablers/hss-client/release/pom.xml | 2 +- enablers/hss-client/sbb/pom.xml | 2 +- .../enabler/hssclient/HSSClientChildSbb.java | 8 +- .../slee/enabler/hssclient/MessageData.java | 4 +- resources/diameter-base/common/events/pom.xml | 19 +- .../diameter-base/common/library/pom.xml | 16 +- resources/diameter-base/common/pom.xml | 4 +- resources/diameter-base/common/ra/pom.xml | 8 +- resources/diameter-base/common/ratype/pom.xml | 8 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-base/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-base/docs/sources/pom.xml | 2 +- resources/diameter-base/du/pom.xml | 16 +- resources/diameter-base/events/pom.xml | 8 +- resources/diameter-base/pom.xml | 2 +- resources/diameter-base/ra/pom.xml | 12 +- resources/diameter-base/ratype/pom.xml | 12 +- resources/diameter-base/release/pom.xml | 4 +- resources/diameter-base/testsuite/pom.xml | 2 +- .../base/tests/factories/AvpAssistant.java | 1 - .../src/test/resources/dictionary.xml | 78 ++- resources/diameter-cca/common/events/pom.xml | 6 +- resources/diameter-cca/common/library/pom.xml | 17 +- resources/diameter-cca/common/pom.xml | 4 +- resources/diameter-cca/common/ra/pom.xml | 8 +- resources/diameter-cca/common/ratype/pom.xml | 8 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-cca/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-cca/docs/sources/pom.xml | 2 +- resources/diameter-cca/du/pom.xml | 24 +- resources/diameter-cca/events/pom.xml | 8 +- resources/diameter-cca/pom.xml | 2 +- resources/diameter-cca/ra/pom.xml | 12 +- resources/diameter-cca/ratype/pom.xml | 12 +- resources/diameter-cca/release/pom.xml | 4 +- resources/diameter-cca/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-cx-dx/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-cx-dx/docs/sources/pom.xml | 2 +- resources/diameter-cx-dx/du/pom.xml | 20 +- resources/diameter-cx-dx/events/pom.xml | 4 +- resources/diameter-cx-dx/pom.xml | 4 +- resources/diameter-cx-dx/ra/pom.xml | 6 +- resources/diameter-cx-dx/ratype/pom.xml | 6 +- resources/diameter-cx-dx/release/pom.xml | 4 +- resources/diameter-cx-dx/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-gq/docs/pom.xml | 2 +- .../diameter-gq/docs/sources-restcomm/pom.xml | 6 +- resources/diameter-gq/docs/sources/pom.xml | 2 +- resources/diameter-gq/du/pom.xml | 20 +- resources/diameter-gq/events/pom.xml | 4 +- resources/diameter-gq/pom.xml | 2 +- resources/diameter-gq/ra/pom.xml | 6 +- resources/diameter-gq/ratype/pom.xml | 6 +- resources/diameter-gq/release/pom.xml | 4 +- resources/diameter-gq/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-gx/docs/pom.xml | 2 +- .../diameter-gx/docs/sources-restcomm/pom.xml | 6 +- resources/diameter-gx/docs/sources/pom.xml | 2 +- resources/diameter-gx/du/pom.xml | 20 +- resources/diameter-gx/events/pom.xml | 6 +- resources/diameter-gx/pom.xml | 2 +- resources/diameter-gx/ra/pom.xml | 10 +- resources/diameter-gx/ratype/pom.xml | 10 +- resources/diameter-gx/release/pom.xml | 4 +- resources/diameter-gx/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-rf/docs/pom.xml | 2 +- .../diameter-rf/docs/sources-restcomm/pom.xml | 6 +- resources/diameter-rf/docs/sources/pom.xml | 2 +- resources/diameter-rf/du/pom.xml | 20 +- resources/diameter-rf/events/pom.xml | 6 +- resources/diameter-rf/pom.xml | 2 +- resources/diameter-rf/ra/pom.xml | 8 +- resources/diameter-rf/ratype/pom.xml | 8 +- resources/diameter-rf/release/pom.xml | 4 +- resources/diameter-rf/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-ro/docs/pom.xml | 2 +- .../diameter-ro/docs/sources-restcomm/pom.xml | 6 +- resources/diameter-ro/docs/sources/pom.xml | 2 +- resources/diameter-ro/du/pom.xml | 20 +- resources/diameter-ro/events/pom.xml | 6 +- resources/diameter-ro/pom.xml | 2 +- resources/diameter-ro/ra/pom.xml | 10 +- resources/diameter-ro/ratype/pom.xml | 10 +- resources/diameter-ro/release/pom.xml | 4 +- resources/diameter-ro/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-rx/docs/pom.xml | 2 +- .../diameter-rx/docs/sources-restcomm/pom.xml | 6 +- resources/diameter-rx/docs/sources/pom.xml | 2 +- resources/diameter-rx/du/pom.xml | 20 +- resources/diameter-rx/events/pom.xml | 6 +- resources/diameter-rx/pom.xml | 2 +- resources/diameter-rx/ra/pom.xml | 10 +- resources/diameter-rx/ratype/pom.xml | 10 +- resources/diameter-rx/release/pom.xml | 4 +- resources/diameter-rx/testsuite/pom.xml | 2 +- resources/diameter-s13/du/pom.xml | 8 +- resources/diameter-s13/events/pom.xml | 4 +- resources/diameter-s13/pom.xml | 2 +- resources/diameter-s13/ra/pom.xml | 6 +- resources/diameter-s13/ratype/pom.xml | 4 +- resources/diameter-s13/release/pom.xml | 6 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-s6a/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-s6a/docs/sources/pom.xml | 2 +- resources/diameter-s6a/du/pom.xml | 20 +- resources/diameter-s6a/events/pom.xml | 6 +- resources/diameter-s6a/pom.xml | 4 +- resources/diameter-s6a/ra/pom.xml | 8 +- resources/diameter-s6a/ratype/pom.xml | 8 +- resources/diameter-s6a/release/pom.xml | 4 +- resources/diameter-s6a/testsuite/pom.xml | 2 +- .../diameter-sh-client/common/events/pom.xml | 6 +- .../sh/events/ProfileUpdateAnswer.java | 22 +- .../sh/events/ProfileUpdateRequest.java | 22 +- .../sh/events/PushNotificationRequest.java | 22 +- .../events/SubscribeNotificationsAnswer.java | 22 +- .../events/SubscribeNotificationsRequest.java | 22 +- .../diameter/sh/events/UserDataAnswer.java | 22 +- .../diameter/sh/events/UserDataRequest.java | 73 +- .../sh/events/avp/DiameterShAvpCodes.java | 21 +- .../sh/events/avp/UserIdentityAvp.java | 8 +- .../avp/userdata/CSLocationInformation.java | 14 +- .../CSLocationInformationExtension.java | 96 +++ .../CSLocationInformationExtension2.java | 116 ++++ .../CSLocationInformationExtension3.java | 96 +++ .../avp/userdata/EPSLocationInformation.java | 261 +++++++ .../EPSLocationInformationExtension.java | 107 +++ .../EPSLocationInformationExtension2.java | 88 +++ .../sh/events/avp/userdata/LocalTimeZone.java | 84 +++ .../avp/userdata/PSLocationInformation.java | 9 +- .../PSLocationInformationExtension.java | 63 ++ .../PSLocationInformationExtension2.java | 127 ++++ .../userdata/Sh5GSLocationInformation.java | 300 ++++++++ .../events/avp/userdata/ShDataExtension2.java | 17 +- .../events/avp/userdata/ShDataExtension3.java | 96 +++ .../events/avp/userdata/ShDataExtension4.java | 116 ++++ .../events/avp/userdata/ShDataExtension5.java | 137 ++++ .../events/avp/userdata/ShDataExtension6.java | 95 +++ .../events/avp/userdata/ShDataExtension7.java | 116 ++++ .../events/avp/userdata/TADSInformation.java | 116 ++++ .../userdata/TADSInformationExtension.java | 71 ++ .../userdata/TADSInformationExtension2.java | 67 ++ .../avp/userdata/TWANLocationInformation.java | 218 ++++++ .../avp/userdata/UserCSGInformation.java | 86 +++ .../userdata/UserCSGInformationExtension.java | 107 +++ .../sh/events/ProfileUpdateAnswerImpl.java | 18 +- .../sh/events/ProfileUpdateRequestImpl.java | 58 +- .../events/PushNotificationRequestImpl.java | 18 +- .../SubscribeNotificationsAnswerImpl.java | 18 +- .../SubscribeNotificationsRequestImpl.java | 18 +- .../sh/events/UserDataAnswerImpl.java | 38 +- .../sh/events/UserDataRequestImpl.java | 21 + .../sh/events/avp/UserIdentityAvpImpl.java | 32 +- .../avp/userdata/TCSLocationInformation.java | 17 +- .../TCSLocationInformationExtension.java | 89 +++ .../TCSLocationInformationExtension2.java | 107 +++ .../TCSLocationInformationExtension3.java | 89 +++ .../avp/userdata/TEPSLocationInformation.java | 235 +++++++ .../TEPSLocationInformationExtension.java | 112 +++ .../TEPSLocationInformationExtension2.java | 93 +++ .../events/avp/userdata/TLocalTimeZone.java | 89 +++ .../avp/userdata/TPSLocationInformation.java | 11 +- .../TPSLocationInformationExtension.java | 91 +++ .../TPSLocationInformationExtension2.java | 127 ++++ .../userdata/TSh5GSLocationInformation.java | 265 +++++++ .../avp/userdata/TShDataExtension2.java | 22 +- .../avp/userdata/TShDataExtension3.java | 88 +++ .../avp/userdata/TShDataExtension4.java | 106 +++ .../avp/userdata/TShDataExtension5.java | 123 ++++ .../avp/userdata/TShDataExtension6.java | 87 +++ .../avp/userdata/TShDataExtension7.java | 106 +++ .../events/avp/userdata/TTADSInformation.java | 105 +++ .../userdata/TTADSInformationExtension.java | 88 +++ .../userdata/TTADSInformationExtension2.java | 87 +++ .../userdata/TTWANLocationInformation.java | 192 +++++ .../avp/userdata/TUserCSGInformation.java | 90 +++ .../TUserCSGInformationExtension.java | 109 +++ .../diameter-sh-client/common/library/pom.xml | 16 +- resources/diameter-sh-client/common/pom.xml | 4 +- .../diameter-sh-client/common/ra/pom.xml | 8 +- .../ra/src/main/resources/ShDataType.xsd | 655 +++++++++++++++++- .../diameter-sh-client/common/ratype/pom.xml | 8 +- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-sh-client/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- .../diameter-sh-client/docs/sources/pom.xml | 2 +- resources/diameter-sh-client/du/pom.xml | 24 +- resources/diameter-sh-client/events/pom.xml | 8 +- resources/diameter-sh-client/pom.xml | 2 +- resources/diameter-sh-client/ra/pom.xml | 12 +- .../DiameterShClientResourceAdaptor.java | 99 +-- resources/diameter-sh-client/ratype/pom.xml | 12 +- .../sh/client/ShClientMessageFactory.java | 22 +- resources/diameter-sh-client/release/pom.xml | 4 +- .../diameter-sh-client/testsuite/pom.xml | 2 +- .../tests/avp/UserDataAvpValidationTest.java | 199 +++++- .../docs/jdocbook-restcomm/pom.xml | 6 +- resources/diameter-sh-server/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 6 +- .../diameter-sh-server/docs/sources/pom.xml | 2 +- resources/diameter-sh-server/du/pom.xml | 26 +- resources/diameter-sh-server/events/pom.xml | 6 +- resources/diameter-sh-server/pom.xml | 2 +- resources/diameter-sh-server/ra/pom.xml | 10 +- .../DiameterShServerResourceAdaptor.java | 56 +- .../handlers/ShServerSessionFactory.java | 8 +- resources/diameter-sh-server/ratype/pom.xml | 10 +- resources/diameter-sh-server/release/pom.xml | 4 +- .../diameter-sh-server/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-slg/docs/pom.xml | 4 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-slg/docs/sources/pom.xml | 2 +- ...e-ra-diameter-slg-ra-DU-7.0.0-SNAPSHOT.jar | Bin 0 -> 101128 bytes ...e-ra-diameter-slg-ra-DU-7.2.0.SNAPSHOT.jar | Bin 0 -> 101412 bytes resources/diameter-slg/du/pom.xml | 126 +++- resources/diameter-slg/events/pom.xml | 4 +- .../slg/events/LocationReportAnswer.java | 12 - .../slg/events/ProvideLocationAnswer.java | 8 - resources/diameter-slg/pom.xml | 8 +- resources/diameter-slg/ra/pom.xml | 4 +- .../DiameterSLgResourceAdaptor.java | 76 +- .../SLgClientSessionActivityImpl.java | 26 +- .../handlers/SLgSessionFactory.java | 19 +- resources/diameter-slg/ratype/pom.xml | 4 +- .../slg/SLgClientSessionActivity.java | 2 + .../resource/diameter/slg/SLgProvider.java | 1 + resources/diameter-slg/release/pom.xml | 76 +- resources/diameter-slg/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-slh/docs/pom.xml | 4 +- .../docs/sources-restcomm/pom.xml | 6 +- resources/diameter-slh/docs/sources/pom.xml | 2 +- ...e-ra-diameter-slh-ra-DU-7.0.0-SNAPSHOT.jar | Bin 0 -> 49640 bytes ...e-ra-diameter-slh-ra-DU-7.2.0.SNAPSHOT.jar | Bin 0 -> 49975 bytes resources/diameter-slh/du/pom.xml | 127 +++- resources/diameter-slh/events/pom.xml | 2 +- .../slh/events/LCSRoutingInfoAnswer.java | 36 + .../slh/events/LCSRoutingInfoAnswerImpl.java | 46 ++ resources/diameter-slh/pom.xml | 10 +- resources/diameter-slh/ra/pom.xml | 6 +- .../slh/DiameterSLhResourceAdaptor.java | 51 +- .../slh/handlers/SLhSessionFactory.java | 10 +- resources/diameter-slh/ratype/pom.xml | 4 +- resources/diameter-slh/release/pom.xml | 82 ++- resources/diameter-slh/testsuite/pom.xml | 2 +- testsuite/test-framework/du/pom.xml | 8 +- testsuite/test-framework/pom.xml | 2 +- testsuite/test-framework/sbb/pom.xml | 2 +- 269 files changed, 7517 insertions(+), 962 deletions(-) delete mode 100644 enablers/hss-client/docs/sources-restcomm/.gitignore create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension3.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/LocalTimeZone.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/Sh5GSLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension3.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension4.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension5.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension6.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension7.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TWANLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension3.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TLocalTimeZone.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TSh5GSLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension3.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension4.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension5.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension6.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension7.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension2.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTWANLocationInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformation.java create mode 100644 resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformationExtension.java create mode 100644 resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.0.0-SNAPSHOT.jar create mode 100644 resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.2.0.SNAPSHOT.jar create mode 100644 resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.0.0-SNAPSHOT.jar create mode 100644 resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.2.0.SNAPSHOT.jar diff --git a/enablers/hss-client/docs/jdocbook-restcomm/pom.xml b/enablers/hss-client/docs/jdocbook-restcomm/pom.xml index 50143a25f..55e63e13a 100644 --- a/enablers/hss-client/docs/jdocbook-restcomm/pom.xml +++ b/enablers/hss-client/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} hss-client-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/enablers/hss-client/docs/pom.xml b/enablers/hss-client/docs/pom.xml index c09c81214..656c02034 100644 --- a/enablers/hss-client/docs/pom.xml +++ b/enablers/hss-client/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-docs diff --git a/enablers/hss-client/docs/sources-restcomm/.gitignore b/enablers/hss-client/docs/sources-restcomm/.gitignore deleted file mode 100644 index 4f00cd9a7..000000000 --- a/enablers/hss-client/docs/sources-restcomm/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/src/ diff --git a/enablers/hss-client/docs/sources-restcomm/pom.xml b/enablers/hss-client/docs/sources-restcomm/pom.xml index d91a2ac34..51aec05bf 100644 --- a/enablers/hss-client/docs/sources-restcomm/pom.xml +++ b/enablers/hss-client/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} hss-client-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/enablers/hss-client/docs/sources/pom.xml b/enablers/hss-client/docs/sources/pom.xml index bd5a6c7b2..d0e2cda8c 100644 --- a/enablers/hss-client/docs/sources/pom.xml +++ b/enablers/hss-client/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-docs-sources diff --git a/enablers/hss-client/du/pom.xml b/enablers/hss-client/du/pom.xml index 8cd923b93..99c992a92 100755 --- a/enablers/hss-client/du/pom.xml +++ b/enablers/hss-client/du/pom.xml @@ -4,16 +4,16 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-DU - ${pom.groupId} + ${project.groupId} hss-client-sbb - ${pom.version} + ${project.version} diff --git a/enablers/hss-client/example/du/pom.xml b/enablers/hss-client/example/du/pom.xml index 2b5cfca9a..713271283 100644 --- a/enablers/hss-client/example/du/pom.xml +++ b/enablers/hss-client/example/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-example - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-example-DU diff --git a/enablers/hss-client/example/pom.xml b/enablers/hss-client/example/pom.xml index 81b203bfe..9d9b1e624 100644 --- a/enablers/hss-client/example/pom.xml +++ b/enablers/hss-client/example/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-example diff --git a/enablers/hss-client/example/sbb/pom.xml b/enablers/hss-client/example/sbb/pom.xml index 281ae3f03..8cb05a5ce 100644 --- a/enablers/hss-client/example/sbb/pom.xml +++ b/enablers/hss-client/example/sbb/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-example - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-example-sbb diff --git a/enablers/hss-client/pom.xml b/enablers/hss-client/pom.xml index ccf08d84a..a4ac5120b 100755 --- a/enablers/hss-client/pom.xml +++ b/enablers/hss-client/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/enablers/hss-client/release/pom.xml b/enablers/hss-client/release/pom.xml index 235e6b09b..c4df8ebaf 100755 --- a/enablers/hss-client/release/pom.xml +++ b/enablers/hss-client/release/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-release diff --git a/enablers/hss-client/sbb/pom.xml b/enablers/hss-client/sbb/pom.xml index 0fc112845..69eb1922c 100755 --- a/enablers/hss-client/sbb/pom.xml +++ b/enablers/hss-client/sbb/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT hss-client-sbb diff --git a/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/HSSClientChildSbb.java b/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/HSSClientChildSbb.java index ce15da009..687e067c9 100644 --- a/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/HSSClientChildSbb.java +++ b/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/HSSClientChildSbb.java @@ -478,7 +478,7 @@ private UserIdentityAvp createUserIdentityAvp(String publicIdentity, byte[] msis userIdentityAvp.setPublicIdentity(publicIdentity); } else if (msisdn != null && msisdn.length > 0) { - userIdentityAvp.setMsisdn(new String(msisdn)); + userIdentityAvp.setMsisdn(msisdn); } return userIdentityAvp; @@ -501,19 +501,19 @@ else if(shMessage instanceof PushNotificationRequest) { } String publicIdentity = null; - String msisdn = null; + byte[] msisdn = null; if(uIdAvp != null) { publicIdentity = uIdAvp.getPublicIdentity(); msisdn = uIdAvp.getMsisdn(); if(publicIdentity == null && msisdn == null) { - tracer.warning("Unable to retrieve Public User/Service Identity OR MSISDN. At least one of them should be present."); + tracer.warning("Unable to retrieve Public User/Service Identity or MSISDN. At least one of them should be present."); } } else { tracer.warning("User-Identity AVP missing in Diameter Sh Message."); } - return new String[]{publicIdentity, msisdn}; + return new String[]{publicIdentity, String.valueOf(msisdn)}; } private ShClientActivity getShClientActivity() throws IOException { diff --git a/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/MessageData.java b/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/MessageData.java index c48bc8f1f..d8276b6f3 100644 --- a/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/MessageData.java +++ b/enablers/hss-client/sbb/src/main/java/org/mobicents/slee/enabler/hssclient/MessageData.java @@ -46,7 +46,7 @@ public class MessageData implements Serializable { private String sessionId = null; private String publicIdentity = null; - private String msisdn = null; + private byte[] msisdn = null; private DataReferenceType dataReference; private DataReferenceType[] dataReferences; @@ -138,7 +138,7 @@ public String getPublicIdentity() { * @return the msisdn */ public byte[] getMsisdn() { - return msisdn != null ? msisdn.getBytes() : null; + return msisdn != null ? msisdn : null; } /** diff --git a/resources/diameter-base/common/events/pom.xml b/resources/diameter-base/common/events/pom.xml index 54fe17399..0e241f160 100644 --- a/resources/diameter-base/common/events/pom.xml +++ b/resources/diameter-base/common/events/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-common-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -17,5 +17,20 @@ restcomm-diameter-mux-jar ${restcomm.diameter.mux.version} + + log4j + log4j + + + org.mobicents.diameter + jdiameter-api + ${restcomm.diameter.jdiameter.version} + + + + org.mobicents.diameter + jdiameter-impl + ${restcomm.diameter.jdiameter.version} + diff --git a/resources/diameter-base/common/library/pom.xml b/resources/diameter-base/common/library/pom.xml index b3b02553a..236570d1e 100644 --- a/resources/diameter-base/common/library/pom.xml +++ b/resources/diameter-base/common/library/pom.xml @@ -4,28 +4,28 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-common-library - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra - ${pom.version} + ${project.version} diff --git a/resources/diameter-base/common/pom.xml b/resources/diameter-base/common/pom.xml index 1483c1f8a..7ae4254fc 100644 --- a/resources/diameter-base/common/pom.xml +++ b/resources/diameter-base/common/pom.xml @@ -8,12 +8,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-common - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} events diff --git a/resources/diameter-base/common/ra/pom.xml b/resources/diameter-base/common/ra/pom.xml index f7f304826..ff2ef5679 100644 --- a/resources/diameter-base/common/ra/pom.xml +++ b/resources/diameter-base/common/ra/pom.xml @@ -4,18 +4,18 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-common-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype - ${pom.version} + ${project.version} org.mobicents.servers.jainslee.core diff --git a/resources/diameter-base/common/ratype/pom.xml b/resources/diameter-base/common/ratype/pom.xml index e596aca21..2193bb622 100644 --- a/resources/diameter-base/common/ratype/pom.xml +++ b/resources/diameter-base/common/ratype/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-common-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -17,9 +17,9 @@ jain-slee - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events - ${pom.version} + ${project.version} diff --git a/resources/diameter-base/docs/jdocbook-restcomm/pom.xml b/resources/diameter-base/docs/jdocbook-restcomm/pom.xml index 478fcd3cc..526b21896 100644 --- a/resources/diameter-base/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-base/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-base/docs/pom.xml b/resources/diameter-base/docs/pom.xml index 32952f4d2..f722bbe6e 100644 --- a/resources/diameter-base/docs/pom.xml +++ b/resources/diameter-base/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-docs diff --git a/resources/diameter-base/docs/sources-restcomm/pom.xml b/resources/diameter-base/docs/sources-restcomm/pom.xml index 764036c3a..b9973b321 100644 --- a/resources/diameter-base/docs/sources-restcomm/pom.xml +++ b/resources/diameter-base/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-base/docs/sources/pom.xml b/resources/diameter-base/docs/sources/pom.xml index 91da3a2df..a950c2d34 100644 --- a/resources/diameter-base/docs/sources/pom.xml +++ b/resources/diameter-base/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-docs-sources diff --git a/resources/diameter-base/du/pom.xml b/resources/diameter-base/du/pom.xml index 6cb1ed406..46d5387a7 100644 --- a/resources/diameter-base/du/pom.xml +++ b/resources/diameter-base/du/pom.xml @@ -4,33 +4,33 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} org.mobicents.resources restcomm-slee-ra-diameter-base-common-library - ${pom.version} + ${project.version} org.mobicents.resources restcomm-slee-ra-diameter-base-events - ${pom.version} + ${project.version} org.mobicents.resources restcomm-slee-ra-diameter-base-ratype - ${pom.version} + ${project.version} org.mobicents.resources restcomm-slee-ra-diameter-base-ra - ${pom.version} + ${project.version} @@ -38,7 +38,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -63,7 +63,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-base/events/pom.xml b/resources/diameter-base/events/pom.xml index 5d0175fc2..5a73bbd1a 100644 --- a/resources/diameter-base/events/pom.xml +++ b/resources/diameter-base/events/pom.xml @@ -4,18 +4,18 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events - ${pom.version} + ${project.version} diff --git a/resources/diameter-base/pom.xml b/resources/diameter-base/pom.xml index 2c340c105..0167e9ee8 100644 --- a/resources/diameter-base/pom.xml +++ b/resources/diameter-base/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-base/ra/pom.xml b/resources/diameter-base/ra/pom.xml index 0c50758d1..94639a885 100644 --- a/resources/diameter-base/ra/pom.xml +++ b/resources/diameter-base/ra/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra - ${pom.version} + ${project.version} diff --git a/resources/diameter-base/ratype/pom.xml b/resources/diameter-base/ratype/pom.xml index ae9966186..7ab638bda 100644 --- a/resources/diameter-base/ratype/pom.xml +++ b/resources/diameter-base/ratype/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype - ${pom.version} + ${project.version} diff --git a/resources/diameter-base/release/pom.xml b/resources/diameter-base/release/pom.xml index b2c3c9df8..f7a54e324 100644 --- a/resources/diameter-base/release/pom.xml +++ b/resources/diameter-base/release/pom.xml @@ -6,12 +6,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-base/testsuite/pom.xml b/resources/diameter-base/testsuite/pom.xml index 6f068bf0c..0e3eafb01 100644 --- a/resources/diameter-base/testsuite/pom.xml +++ b/resources/diameter-base/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-base-testsuite diff --git a/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java b/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java index 0d32b570e..8c3ffb9ba 100644 --- a/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java +++ b/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java @@ -540,7 +540,6 @@ else if (rType.isArray()) { public void testHassers(Object object, boolean expected) throws Exception { for (Method m : object.getClass().getMethods()) { if (!methodsToIgnore.contains(m.getName()) && m.getName().startsWith("has")) { - // System.out.println("==> " + m.getName() + " <=="); Object obtained = m.invoke(object); diff --git a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml index 2ecfaffd6..96687a484 100644 --- a/resources/diameter-base/testsuite/src/test/resources/dictionary.xml +++ b/resources/diameter-base/testsuite/src/test/resources/dictionary.xml @@ -4005,7 +4005,7 @@ - + @@ -4146,7 +4146,7 @@ - + @@ -4213,7 +4213,7 @@ - + @@ -4422,6 +4422,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4443,6 +4493,8 @@ + + @@ -4451,7 +4503,14 @@ + + + + + + + @@ -4471,9 +4530,10 @@ - + + @@ -4491,7 +4551,7 @@ - + @@ -4513,7 +4573,7 @@ - + @@ -4533,7 +4593,7 @@ - + @@ -4562,7 +4622,7 @@ - + @@ -4584,7 +4644,7 @@ - + diff --git a/resources/diameter-cca/common/events/pom.xml b/resources/diameter-cca/common/events/pom.xml index b206dd38e..942c2f094 100644 --- a/resources/diameter-cca/common/events/pom.xml +++ b/resources/diameter-cca/common/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-common-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-cca/common/library/pom.xml b/resources/diameter-cca/common/library/pom.xml index 1b02f407c..f9b33bd18 100644 --- a/resources/diameter-cca/common/library/pom.xml +++ b/resources/diameter-cca/common/library/pom.xml @@ -4,28 +4,28 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-common-library - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ra - ${pom.version} + ${project.version} @@ -35,6 +35,7 @@ org.mobicents.tools maven-library-plugin + 1.0.0.FINAL diff --git a/resources/diameter-cca/common/pom.xml b/resources/diameter-cca/common/pom.xml index 367881b75..d9a3688b0 100644 --- a/resources/diameter-cca/common/pom.xml +++ b/resources/diameter-cca/common/pom.xml @@ -8,12 +8,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-common - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} events diff --git a/resources/diameter-cca/common/ra/pom.xml b/resources/diameter-cca/common/ra/pom.xml index e5139b5f3..928389b2b 100644 --- a/resources/diameter-cca/common/ra/pom.xml +++ b/resources/diameter-cca/common/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-common-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-cca/common/ratype/pom.xml b/resources/diameter-cca/common/ratype/pom.xml index 1b07feec9..0b0b15fcb 100644 --- a/resources/diameter-cca/common/ratype/pom.xml +++ b/resources/diameter-cca/common/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-common-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} diff --git a/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml b/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml index 07e353609..4b06546fa 100644 --- a/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-cca/docs/pom.xml b/resources/diameter-cca/docs/pom.xml index b1b8d548a..b96dbf7dc 100644 --- a/resources/diameter-cca/docs/pom.xml +++ b/resources/diameter-cca/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-docs diff --git a/resources/diameter-cca/docs/sources-restcomm/pom.xml b/resources/diameter-cca/docs/sources-restcomm/pom.xml index 5e46bb965..a62d30cc9 100644 --- a/resources/diameter-cca/docs/sources-restcomm/pom.xml +++ b/resources/diameter-cca/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-docs-sources-restcomm @@ -42,9 +42,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-cca/docs/sources/pom.xml b/resources/diameter-cca/docs/sources/pom.xml index fafd3f73c..7191a6a81 100644 --- a/resources/diameter-cca/docs/sources/pom.xml +++ b/resources/diameter-cca/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-docs-sources diff --git a/resources/diameter-cca/du/pom.xml b/resources/diameter-cca/du/pom.xml index 45db5f426..0f8b2ced1 100644 --- a/resources/diameter-cca/du/pom.xml +++ b/resources/diameter-cca/du/pom.xml @@ -4,33 +4,33 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-library - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-ra - ${pom.version} + ${project.version} @@ -41,7 +41,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -66,7 +66,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-cca/events/pom.xml b/resources/diameter-cca/events/pom.xml index 8a7ed77af..19504b500 100644 --- a/resources/diameter-cca/events/pom.xml +++ b/resources/diameter-cca/events/pom.xml @@ -4,18 +4,18 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events - ${pom.version} + ${project.version} diff --git a/resources/diameter-cca/pom.xml b/resources/diameter-cca/pom.xml index 6cc397ef3..41f34701b 100644 --- a/resources/diameter-cca/pom.xml +++ b/resources/diameter-cca/pom.xml @@ -5,7 +5,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-cca/ra/pom.xml b/resources/diameter-cca/ra/pom.xml index 995fd2ea5..c7c20672b 100644 --- a/resources/diameter-cca/ra/pom.xml +++ b/resources/diameter-cca/ra/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ra - ${pom.version} + ${project.version} diff --git a/resources/diameter-cca/ratype/pom.xml b/resources/diameter-cca/ratype/pom.xml index e092a4f84..eccd73665 100644 --- a/resources/diameter-cca/ratype/pom.xml +++ b/resources/diameter-cca/ratype/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype - ${pom.version} + ${project.version} diff --git a/resources/diameter-cca/release/pom.xml b/resources/diameter-cca/release/pom.xml index bfddf2855..2eacb39ee 100644 --- a/resources/diameter-cca/release/pom.xml +++ b/resources/diameter-cca/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-cca/testsuite/pom.xml b/resources/diameter-cca/testsuite/pom.xml index 8e614dbf7..96128a527 100644 --- a/resources/diameter-cca/testsuite/pom.xml +++ b/resources/diameter-cca/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cca-testsuite diff --git a/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml index 0971eea67..1eab9021b 100644 --- a/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-cx-dx/docs/pom.xml b/resources/diameter-cx-dx/docs/pom.xml index 6cfa7d455..e53eea87c 100644 --- a/resources/diameter-cx-dx/docs/pom.xml +++ b/resources/diameter-cx-dx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs diff --git a/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml b/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml index 9cadf798e..9ba7330fb 100644 --- a/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-cx-dx/docs/sources/pom.xml b/resources/diameter-cx-dx/docs/sources/pom.xml index 4fe157a50..d5e5308c6 100644 --- a/resources/diameter-cx-dx/docs/sources/pom.xml +++ b/resources/diameter-cx-dx/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-sources diff --git a/resources/diameter-cx-dx/du/pom.xml b/resources/diameter-cx-dx/du/pom.xml index dfa7c4de8..6c9e8f489 100644 --- a/resources/diameter-cx-dx/du/pom.xml +++ b/resources/diameter-cx-dx/du/pom.xml @@ -5,28 +5,28 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-ra - ${pom.version} + ${project.version} @@ -34,7 +34,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -59,7 +59,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-cx-dx/events/pom.xml b/resources/diameter-cx-dx/events/pom.xml index 485e95a53..68274d693 100644 --- a/resources/diameter-cx-dx/events/pom.xml +++ b/resources/diameter-cx-dx/events/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-cx-dx/pom.xml b/resources/diameter-cx-dx/pom.xml index acccccf33..0a8b0979e 100644 --- a/resources/diameter-cx-dx/pom.xml +++ b/resources/diameter-cx-dx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. @@ -19,7 +19,7 @@ ratype events ra - testsuite + du diff --git a/resources/diameter-cx-dx/ra/pom.xml b/resources/diameter-cx-dx/ra/pom.xml index d8d651c14..d0dcc2d9e 100644 --- a/resources/diameter-cx-dx/ra/pom.xml +++ b/resources/diameter-cx-dx/ra/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-ratype ${project.version} diff --git a/resources/diameter-cx-dx/ratype/pom.xml b/resources/diameter-cx-dx/ratype/pom.xml index f2421cd8c..a59b87f65 100644 --- a/resources/diameter-cx-dx/ratype/pom.xml +++ b/resources/diameter-cx-dx/ratype/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cx-dx-events ${project.version} diff --git a/resources/diameter-cx-dx/release/pom.xml b/resources/diameter-cx-dx/release/pom.xml index a3cc58977..95ca7b09f 100644 --- a/resources/diameter-cx-dx/release/pom.xml +++ b/resources/diameter-cx-dx/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-cx-dx/testsuite/pom.xml b/resources/diameter-cx-dx/testsuite/pom.xml index 704f93dd2..9c2fdf09e 100644 --- a/resources/diameter-cx-dx/testsuite/pom.xml +++ b/resources/diameter-cx-dx/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-cx-dx-testsuite diff --git a/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml b/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml index d95e3beb3..d1ecea9f1 100644 --- a/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-docs-jdocbook-restcomm @@ -57,9 +57,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-gq/docs/pom.xml b/resources/diameter-gq/docs/pom.xml index 5861c2e9e..42968313e 100644 --- a/resources/diameter-gq/docs/pom.xml +++ b/resources/diameter-gq/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-docs diff --git a/resources/diameter-gq/docs/sources-restcomm/pom.xml b/resources/diameter-gq/docs/sources-restcomm/pom.xml index 0340fac94..c08307de6 100644 --- a/resources/diameter-gq/docs/sources-restcomm/pom.xml +++ b/resources/diameter-gq/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-docs-sources-restcomm @@ -39,9 +39,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-gq/docs/sources/pom.xml b/resources/diameter-gq/docs/sources/pom.xml index 55b54d3fb..bb5cb5191 100644 --- a/resources/diameter-gq/docs/sources/pom.xml +++ b/resources/diameter-gq/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-docs-sources diff --git a/resources/diameter-gq/du/pom.xml b/resources/diameter-gq/du/pom.xml index ae4e8e760..48d2bfc36 100755 --- a/resources/diameter-gq/du/pom.xml +++ b/resources/diameter-gq/du/pom.xml @@ -6,29 +6,29 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-ra - ${pom.version} + ${project.version} @@ -36,7 +36,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -61,7 +61,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-gq/events/pom.xml b/resources/diameter-gq/events/pom.xml index 8c67b2102..541a9574a 100755 --- a/resources/diameter-gq/events/pom.xml +++ b/resources/diameter-gq/events/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-gq/pom.xml b/resources/diameter-gq/pom.xml index 5af8d83fc..6214ded26 100755 --- a/resources/diameter-gq/pom.xml +++ b/resources/diameter-gq/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-gq/ra/pom.xml b/resources/diameter-gq/ra/pom.xml index b2d39b856..fb6521856 100755 --- a/resources/diameter-gq/ra/pom.xml +++ b/resources/diameter-gq/ra/pom.xml @@ -5,16 +5,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-ratype ${project.version} diff --git a/resources/diameter-gq/ratype/pom.xml b/resources/diameter-gq/ratype/pom.xml index a0ddd505b..7ae2ce2df 100755 --- a/resources/diameter-gq/ratype/pom.xml +++ b/resources/diameter-gq/ratype/pom.xml @@ -5,16 +5,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gq-events ${project.version} diff --git a/resources/diameter-gq/release/pom.xml b/resources/diameter-gq/release/pom.xml index 84e3ea2de..fd7b38e84 100755 --- a/resources/diameter-gq/release/pom.xml +++ b/resources/diameter-gq/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-gq/testsuite/pom.xml b/resources/diameter-gq/testsuite/pom.xml index 4f58d4d14..b475d0eff 100644 --- a/resources/diameter-gq/testsuite/pom.xml +++ b/resources/diameter-gq/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gq-testsuite diff --git a/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml index 3b07a0abf..3e7c55af7 100644 --- a/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-gx/docs/pom.xml b/resources/diameter-gx/docs/pom.xml index 18c24d701..877e130c2 100644 --- a/resources/diameter-gx/docs/pom.xml +++ b/resources/diameter-gx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-docs diff --git a/resources/diameter-gx/docs/sources-restcomm/pom.xml b/resources/diameter-gx/docs/sources-restcomm/pom.xml index e739501b2..a8878bb8a 100644 --- a/resources/diameter-gx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-gx/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-docs-sources-restcomm @@ -39,9 +39,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-gx/docs/sources/pom.xml b/resources/diameter-gx/docs/sources/pom.xml index c8647fe30..d277019d9 100644 --- a/resources/diameter-gx/docs/sources/pom.xml +++ b/resources/diameter-gx/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-docs-sources diff --git a/resources/diameter-gx/du/pom.xml b/resources/diameter-gx/du/pom.xml index 736877547..d410a0107 100644 --- a/resources/diameter-gx/du/pom.xml +++ b/resources/diameter-gx/du/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-ra - ${pom.version} + ${project.version} @@ -49,7 +49,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -74,7 +74,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-gx/events/pom.xml b/resources/diameter-gx/events/pom.xml index 62e925f22..bbdffee7d 100644 --- a/resources/diameter-gx/events/pom.xml +++ b/resources/diameter-gx/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events ${project.version} diff --git a/resources/diameter-gx/pom.xml b/resources/diameter-gx/pom.xml index b6c7eec05..2ac8d89cf 100644 --- a/resources/diameter-gx/pom.xml +++ b/resources/diameter-gx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-gx/ra/pom.xml b/resources/diameter-gx/ra/pom.xml index 13dffaa56..2befe09b7 100644 --- a/resources/diameter-gx/ra/pom.xml +++ b/resources/diameter-gx/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ra ${project.version} diff --git a/resources/diameter-gx/ratype/pom.xml b/resources/diameter-gx/ratype/pom.xml index ba554956c..9428368bb 100644 --- a/resources/diameter-gx/ratype/pom.xml +++ b/resources/diameter-gx/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-gx-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype ${project.version} diff --git a/resources/diameter-gx/release/pom.xml b/resources/diameter-gx/release/pom.xml index 9ae13a065..80ed38957 100644 --- a/resources/diameter-gx/release/pom.xml +++ b/resources/diameter-gx/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-gx/testsuite/pom.xml b/resources/diameter-gx/testsuite/pom.xml index 1aca656b6..df3e93d7f 100644 --- a/resources/diameter-gx/testsuite/pom.xml +++ b/resources/diameter-gx/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-gx-testsuite diff --git a/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml b/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml index 516d72f7d..d4d794af1 100644 --- a/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-rf/docs/pom.xml b/resources/diameter-rf/docs/pom.xml index 22a4e0eba..7df9ac447 100644 --- a/resources/diameter-rf/docs/pom.xml +++ b/resources/diameter-rf/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-docs diff --git a/resources/diameter-rf/docs/sources-restcomm/pom.xml b/resources/diameter-rf/docs/sources-restcomm/pom.xml index 1841d0278..5ed270b82 100644 --- a/resources/diameter-rf/docs/sources-restcomm/pom.xml +++ b/resources/diameter-rf/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-rf/docs/sources/pom.xml b/resources/diameter-rf/docs/sources/pom.xml index 5f47ce67b..08ada487f 100644 --- a/resources/diameter-rf/docs/sources/pom.xml +++ b/resources/diameter-rf/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-docs-sources diff --git a/resources/diameter-rf/du/pom.xml b/resources/diameter-rf/du/pom.xml index c45accf9c..8c87234e3 100644 --- a/resources/diameter-rf/du/pom.xml +++ b/resources/diameter-rf/du/pom.xml @@ -4,28 +4,28 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-ra - ${pom.version} + ${project.version} @@ -33,7 +33,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -58,7 +58,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-rf/events/pom.xml b/resources/diameter-rf/events/pom.xml index 79e580938..238808b75 100644 --- a/resources/diameter-rf/events/pom.xml +++ b/resources/diameter-rf/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-rf/pom.xml b/resources/diameter-rf/pom.xml index 6dbd1ca40..b967e3ed2 100644 --- a/resources/diameter-rf/pom.xml +++ b/resources/diameter-rf/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-rf/ra/pom.xml b/resources/diameter-rf/ra/pom.xml index 89c2544df..31597a544 100644 --- a/resources/diameter-rf/ra/pom.xml +++ b/resources/diameter-rf/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-rf/ratype/pom.xml b/resources/diameter-rf/ratype/pom.xml index b458913ac..80237d02f 100644 --- a/resources/diameter-rf/ratype/pom.xml +++ b/resources/diameter-rf/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rf-events ${project.version} diff --git a/resources/diameter-rf/release/pom.xml b/resources/diameter-rf/release/pom.xml index d61b6e1a9..8fc73f3e8 100644 --- a/resources/diameter-rf/release/pom.xml +++ b/resources/diameter-rf/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-rf/testsuite/pom.xml b/resources/diameter-rf/testsuite/pom.xml index 386a1811a..688ecf647 100644 --- a/resources/diameter-rf/testsuite/pom.xml +++ b/resources/diameter-rf/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rf-testsuite diff --git a/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml b/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml index 9ea3d8fd4..18d7437ee 100644 --- a/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-ro/docs/pom.xml b/resources/diameter-ro/docs/pom.xml index 57629339d..dc40692e6 100644 --- a/resources/diameter-ro/docs/pom.xml +++ b/resources/diameter-ro/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-docs diff --git a/resources/diameter-ro/docs/sources-restcomm/pom.xml b/resources/diameter-ro/docs/sources-restcomm/pom.xml index d0b96469d..9b43723bf 100644 --- a/resources/diameter-ro/docs/sources-restcomm/pom.xml +++ b/resources/diameter-ro/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-ro/docs/sources/pom.xml b/resources/diameter-ro/docs/sources/pom.xml index 876a8fa52..5855def78 100644 --- a/resources/diameter-ro/docs/sources/pom.xml +++ b/resources/diameter-ro/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-docs-sources diff --git a/resources/diameter-ro/du/pom.xml b/resources/diameter-ro/du/pom.xml index 0c0a9f600..68e05b15e 100644 --- a/resources/diameter-ro/du/pom.xml +++ b/resources/diameter-ro/du/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -20,19 +20,19 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-ra - ${pom.version} + ${project.version} @@ -40,7 +40,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -65,7 +65,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-ro/events/pom.xml b/resources/diameter-ro/events/pom.xml index c588024d9..4321c69d2 100644 --- a/resources/diameter-ro/events/pom.xml +++ b/resources/diameter-ro/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events ${project.version} diff --git a/resources/diameter-ro/pom.xml b/resources/diameter-ro/pom.xml index 3819f0b81..85e8f14bd 100644 --- a/resources/diameter-ro/pom.xml +++ b/resources/diameter-ro/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-ro/ra/pom.xml b/resources/diameter-ro/ra/pom.xml index 19bddf7fc..6a78e28cf 100644 --- a/resources/diameter-ro/ra/pom.xml +++ b/resources/diameter-ro/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ra ${project.version} diff --git a/resources/diameter-ro/ratype/pom.xml b/resources/diameter-ro/ratype/pom.xml index 7a3b35ff5..3893f3e79 100644 --- a/resources/diameter-ro/ratype/pom.xml +++ b/resources/diameter-ro/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-ro-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype ${project.version} diff --git a/resources/diameter-ro/release/pom.xml b/resources/diameter-ro/release/pom.xml index c2a56fd47..7483fff72 100644 --- a/resources/diameter-ro/release/pom.xml +++ b/resources/diameter-ro/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-ro/testsuite/pom.xml b/resources/diameter-ro/testsuite/pom.xml index 5d2022e8a..5b2443bfe 100644 --- a/resources/diameter-ro/testsuite/pom.xml +++ b/resources/diameter-ro/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-ro-testsuite diff --git a/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml index b48f629a8..92c750a97 100644 --- a/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-docs-jdocbook-restcomm @@ -57,9 +57,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-rx/docs/pom.xml b/resources/diameter-rx/docs/pom.xml index 1fd15c679..577504578 100644 --- a/resources/diameter-rx/docs/pom.xml +++ b/resources/diameter-rx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-docs diff --git a/resources/diameter-rx/docs/sources-restcomm/pom.xml b/resources/diameter-rx/docs/sources-restcomm/pom.xml index 17acdab92..91dd57f5c 100644 --- a/resources/diameter-rx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-rx/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-docs-sources-restcomm @@ -39,9 +39,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-rx/docs/sources/pom.xml b/resources/diameter-rx/docs/sources/pom.xml index 82b24adc6..9ce062b62 100644 --- a/resources/diameter-rx/docs/sources/pom.xml +++ b/resources/diameter-rx/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-docs-sources diff --git a/resources/diameter-rx/du/pom.xml b/resources/diameter-rx/du/pom.xml index 249a445e7..baedb8cf9 100644 --- a/resources/diameter-rx/du/pom.xml +++ b/resources/diameter-rx/du/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-ra - ${pom.version} + ${project.version} @@ -48,7 +48,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -73,7 +73,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-rx/events/pom.xml b/resources/diameter-rx/events/pom.xml index 0df8750b6..0df7e6bd9 100644 --- a/resources/diameter-rx/events/pom.xml +++ b/resources/diameter-rx/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-events ${project.version} diff --git a/resources/diameter-rx/pom.xml b/resources/diameter-rx/pom.xml index 89688da25..9e236d437 100644 --- a/resources/diameter-rx/pom.xml +++ b/resources/diameter-rx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-rx/ra/pom.xml b/resources/diameter-rx/ra/pom.xml index 0a37f5240..116558cb2 100644 --- a/resources/diameter-rx/ra/pom.xml +++ b/resources/diameter-rx/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ra ${project.version} diff --git a/resources/diameter-rx/ratype/pom.xml b/resources/diameter-rx/ratype/pom.xml index 2984941f7..79c3c3858 100644 --- a/resources/diameter-rx/ratype/pom.xml +++ b/resources/diameter-rx/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-rx-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-cca-common-ratype ${project.version} diff --git a/resources/diameter-rx/release/pom.xml b/resources/diameter-rx/release/pom.xml index f77aa6471..58a830ba0 100644 --- a/resources/diameter-rx/release/pom.xml +++ b/resources/diameter-rx/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-rx/testsuite/pom.xml b/resources/diameter-rx/testsuite/pom.xml index 1824957cd..d6c849d59 100644 --- a/resources/diameter-rx/testsuite/pom.xml +++ b/resources/diameter-rx/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-rx-testsuite diff --git a/resources/diameter-s13/du/pom.xml b/resources/diameter-s13/du/pom.xml index d6badf3b1..f6794d0a9 100644 --- a/resources/diameter-s13/du/pom.xml +++ b/resources/diameter-s13/du/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s13-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -34,7 +34,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -59,7 +59,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-s13/events/pom.xml b/resources/diameter-s13/events/pom.xml index 5c1a07035..ca77caa19 100644 --- a/resources/diameter-s13/events/pom.xml +++ b/resources/diameter-s13/events/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s13-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-s13/pom.xml b/resources/diameter-s13/pom.xml index a442896f7..f8e54edfa 100644 --- a/resources/diameter-s13/pom.xml +++ b/resources/diameter-s13/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-s13/ra/pom.xml b/resources/diameter-s13/ra/pom.xml index 7de93d2fc..9c69296c9 100644 --- a/resources/diameter-s13/ra/pom.xml +++ b/resources/diameter-s13/ra/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s13-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -19,7 +19,7 @@ ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-s13/ratype/pom.xml b/resources/diameter-s13/ratype/pom.xml index 47f0ab08d..2d63a000f 100644 --- a/resources/diameter-s13/ratype/pom.xml +++ b/resources/diameter-s13/ratype/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s13-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-s13/release/pom.xml b/resources/diameter-s13/release/pom.xml index 96a0bf6fe..efa12240f 100644 --- a/resources/diameter-s13/release/pom.xml +++ b/resources/diameter-s13/release/pom.xml @@ -5,13 +5,13 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s13-ra-release - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml b/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml index 80279c20b..b623feccb 100644 --- a/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-jdocbook-restcomm @@ -57,9 +57,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-s6a/docs/pom.xml b/resources/diameter-s6a/docs/pom.xml index 5a74e2981..61fe5a8f8 100644 --- a/resources/diameter-s6a/docs/pom.xml +++ b/resources/diameter-s6a/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-docs diff --git a/resources/diameter-s6a/docs/sources-restcomm/pom.xml b/resources/diameter-s6a/docs/sources-restcomm/pom.xml index 43fb50dd5..1b15042b4 100644 --- a/resources/diameter-s6a/docs/sources-restcomm/pom.xml +++ b/resources/diameter-s6a/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-sources-restcomm @@ -39,9 +39,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-s6a/docs/sources/pom.xml b/resources/diameter-s6a/docs/sources/pom.xml index d5fdc6a03..51c576b88 100644 --- a/resources/diameter-s6a/docs/sources/pom.xml +++ b/resources/diameter-s6a/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-sources diff --git a/resources/diameter-s6a/du/pom.xml b/resources/diameter-s6a/du/pom.xml index a8931cdbf..ce4574223 100644 --- a/resources/diameter-s6a/du/pom.xml +++ b/resources/diameter-s6a/du/pom.xml @@ -4,29 +4,29 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-ra - ${pom.version} + ${project.version} @@ -34,7 +34,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -59,7 +59,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-s6a/events/pom.xml b/resources/diameter-s6a/events/pom.xml index 0beebebea..da4de5081 100644 --- a/resources/diameter-s6a/events/pom.xml +++ b/resources/diameter-s6a/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-s6a/pom.xml b/resources/diameter-s6a/pom.xml index 512f43bb3..66ddd9331 100644 --- a/resources/diameter-s6a/pom.xml +++ b/resources/diameter-s6a/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. @@ -19,7 +19,7 @@ ratype events ra - testsuite + du diff --git a/resources/diameter-s6a/ra/pom.xml b/resources/diameter-s6a/ra/pom.xml index 5c1f8a1bc..f675a163e 100644 --- a/resources/diameter-s6a/ra/pom.xml +++ b/resources/diameter-s6a/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-s6a/ratype/pom.xml b/resources/diameter-s6a/ratype/pom.xml index 4bff09a0e..a32e64fce 100644 --- a/resources/diameter-s6a/ratype/pom.xml +++ b/resources/diameter-s6a/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-s6a-events ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} diff --git a/resources/diameter-s6a/release/pom.xml b/resources/diameter-s6a/release/pom.xml index 912ee8746..ca1fdff20 100644 --- a/resources/diameter-s6a/release/pom.xml +++ b/resources/diameter-s6a/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-s6a/testsuite/pom.xml b/resources/diameter-s6a/testsuite/pom.xml index 6423dd03d..ec38ebe7c 100644 --- a/resources/diameter-s6a/testsuite/pom.xml +++ b/resources/diameter-s6a/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-s6a-testsuite diff --git a/resources/diameter-sh-client/common/events/pom.xml b/resources/diameter-sh-client/common/events/pom.xml index 84f6a240a..9501e4436 100644 --- a/resources/diameter-sh-client/common/events/pom.xml +++ b/resources/diameter-sh-client/common/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-common-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-events ${project.version} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateAnswer.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateAnswer.java index 03438878a..c057e95e1 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateAnswer.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateAnswer.java @@ -49,7 +49,7 @@ * { Auth-Session-State } * { Origin-Host } * { Origin-Realm } - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * *[ Supported-Features ] * *[ AVP ] @@ -140,27 +140,27 @@ public interface ProfileUpdateAnswer extends DiameterShMessage { void setFailedAvps(FailedAvp[] failedAvps); /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPublicIdentity); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateRequest.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateRequest.java index bae7bc95e..62ea6deb4 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateRequest.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/ProfileUpdateRequest.java @@ -53,7 +53,7 @@ * { Destination-Realm } * *[ Supported-Features ] * { User-Identity } - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * { Data-Reference } * { User-Data } @@ -149,27 +149,27 @@ public interface ProfileUpdateRequest extends DiameterShMessage { void setUserDataObject(ShData userData) throws IOException; /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPublicIdentity); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/PushNotificationRequest.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/PushNotificationRequest.java index 8146b3033..755d1e612 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/PushNotificationRequest.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/PushNotificationRequest.java @@ -52,7 +52,7 @@ * { Destination-Realm } * *[ Supported-Features ] * { User-Identity } - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * { User-Data } * *[ AVP ] @@ -126,27 +126,27 @@ public interface PushNotificationRequest extends DiameterShMessage { void setUserDataObject(ShData userData) throws IOException; /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPublicIdentity); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsAnswer.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsAnswer.java index 874451de3..0272794a7 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsAnswer.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsAnswer.java @@ -54,7 +54,7 @@ * [ Experimental-Result ] * { Origin-Host } * { Origin-Realm } - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * *[ Supported-Features ] * [ User-Data ] @@ -207,27 +207,27 @@ public interface SubscribeNotificationsAnswer extends DiameterShMessage { void setUserDataObject(ShData userData) throws IOException; /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPublicIdentity); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsRequest.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsRequest.java index eab1ea094..41bd7df5d 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsRequest.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/SubscribeNotificationsRequest.java @@ -58,7 +58,7 @@ * { Destination-Realm } * *[ Supported-Features ] * { User-Identity } - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * *[ Service-Indication ] * [ Send-Data-Indication ] @@ -250,27 +250,27 @@ public interface SubscribeNotificationsRequest extends DiameterShMessage { void setSendDataIndication(SendDataIndicationType sendDataIndication); /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPublicIdentity); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataAnswer.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataAnswer.java index 697b7c1d1..d959256b6 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataAnswer.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataAnswer.java @@ -52,7 +52,7 @@ * { Origin-Host } * { Origin-Realm } * *[ Supported-Features ] - * [ Wildcarded-PSI ] + * [ Wildcarded-Public-Identity ] * [ Wildcarded-IMPU ] * [ User-Data ] * *[ AVP ] @@ -184,27 +184,27 @@ public interface UserDataAnswer extends DiameterShMessage { void setFailedAvps(FailedAvp[] failedAvps); /** - * Returns true if the Wildcarded-PSI AVP is present in the message. + * Returns true if the Wildcarded-Public-Identity AVP is present in the message. */ - boolean hasWildcardedPSI(); + boolean hasWildcardedPublicIdentity(); /** - * Returns the value of the Wildcarded-PSI AVP, of type UTF8String. Use - * {@link #hasWildcardedPSI()} to check the existence of this AVP. + * Returns the value of the Wildcarded-Public-Identity AVP, of type UTF8String. Use + * {@link #hasWildcardedPublicIdentity()} to check the existence of this AVP. * - * @return the value of the Wildcarded-PSI AVP + * @return the value of the Wildcarded-Public-Identity AVP * @throws IllegalStateException - * if the Wildcarded-PSI AVP has not been set on this message + * if the Wildcarded-Public-Identity AVP has not been set on this message */ - String getWildcardedPSI(); + String getWildcardedPublicIdentity(); /** - * Sets the value of the Wildcarded-PSI AVP, of type UTF8String. + * Sets the value of the Wildcarded-Public-Identity AVP, of type UTF8String. * * @throws IllegalStateException - * if setWildcardedPSI has already been called + * if setWildcardedPublicIdentity has already been called */ - void setWildcardedPSI(String wildcardedPSI); + void setWildcardedPublicIdentity(String wildcardedPSI); /** * Returns true if the Wildcarded-IMPU AVP is present in the message. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataRequest.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataRequest.java index 987683124..48184140a 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataRequest.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/UserDataRequest.java @@ -45,26 +45,37 @@ * Message Format * < User-Data-Request > ::= < Diameter Header: 306, REQ, PXY, 16777217 > * < Session-Id > - * { Vendor-Specific-Application-Id } - * { Auth-Session-State } - * { Origin-Host } - * { Origin-Realm } - * [ Destination-Host ] - * { Destination-Realm } - * *[ Supported-Features ] - * { User-Identity } - * [ Server-Name ] - * *[ Service-Indication ] - * *{ Data-Reference } - * *[ Identity-Set ] - * [ Requested-Domain ] - * [ Current-Location ] - * *[ DSAI-Tag ] - * [ Session-Priority ] - * [ Requested-Nodes ] - * *[ AVP ] - * *[ Proxy-Info ] - * *[ Route-Record ] + * < Session-Id > + * [ DRMP ] + * { Vendor-Specific-Application-Id } + * { Auth-Session-State } + * { Origin-Host } + * { Origin-Realm } + * [ Destination-Host ] + * { Destination-Realm } + * *[ Supported-Features ] + * { User-Identity } + * [ Wildcarded-Public-Identity ] + * [ Wildcarded-IMPU ] + * [ Server-Name ] + * *[ Service-Indication ] + * *{ Data-Reference } + * *[ Identity-Set ] + * [ Requested-Domain ] + * [ Current-Location ] + * *[ DSAI-Tag ] + * [ Session-Priority ] + * [ User-Name ] + * [ Requested-Nodes ] + * [ Serving-Node-Indication ] + * [ Pre-paging-Supported ] + * [ Local-Time-Zone-Indication ] + * [ UDR-Flags ] + * [ Call-Reference-Info ] + * [ OC-Supported-Features ] + * *[ AVP ] + * *[ Proxy-Info ] + * *[ Route-Record ] *
* * @author Alexandre Mendonca @@ -311,4 +322,26 @@ public interface UserDataRequest extends DiameterShMessage { * if setRequestedNodes has already been called */ void setRequestedNodes(long requestedNodes); + + /** + * Returns true if the UDR-Flags AVP is present in the message. + */ + boolean hasUDRFlags(); + + /** + * Returns the value of the UDR-Flags AVP, of type Unsigned32. + * + * @return the value of the UDR-Flags AVP or null if it has not been set + * on this message + */ + long getUDRFlags(); + + /** + * Sets the value of the UDR-Flags AVP, of type Unsigned32. + * + * @throws IllegalStateException + * if setUDRFlags has already been called + */ + void setUDRFlags(long udrFlags); + } diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DiameterShAvpCodes.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DiameterShAvpCodes.java index c292b98a8..5c22a80ba 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DiameterShAvpCodes.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DiameterShAvpCodes.java @@ -228,12 +228,12 @@ private DiameterShAvpCodes() {} * AVP Code defined by Diameter specification for Wildcarded-PSI AVP. Data type * is UTF8String. */ - public static final int WILDCARDED_PSI = 634; + public static final int WILDCARDED_PUBLIC_IDENTITY = 634; /** - * AVP Data Type defined by Diameter specification for Wildcarded-PSI AVP. + * AVP Data Type defined by Diameter specification for WILDCARDED_PUBLIC_IDENTITY AVP. */ - public static final DiameterAvpType WILDCARDED_PSI_AVP_TYPE = DiameterAvpType.fromString("UTF8String"); + public static final DiameterAvpType WILDCARDED_PUBLIC_IDENTITY_AVP_TYPE = DiameterAvpType.fromString("UTF8String"); /** * AVP Code defined by Diameter specification for WILDCARDED_IMPU AVP. Data type @@ -270,7 +270,7 @@ private DiameterShAvpCodes() {} /** * AVP Code defined by Diameter specification for REQUESTED_NODES AVP. Data type - * is UTF8String. + * is Unsigned32. */ public static final int REQUESTED_NODES = 713; @@ -288,5 +288,16 @@ private DiameterShAvpCodes() {} /** * AVP Data Type defined by Diameter specification for SESSION_PRIORITY AVP. */ - public static final DiameterAvpType ONE_TIME_NOTIFICATION_AVP_TYPE = DiameterAvpType.fromString("Enumerated"); + public static final DiameterAvpType ONE_TIME_NOTIFICATION_AVP_TYPE = DiameterAvpType.fromString("Enumerated"); + + /** + * AVP Code defined by Diameter specification for UDR_FLAGS AVP. Data type + * is Unsigned32. + */ + public static final int UDR_FLAGS = 719; + + /** + * AVP Data Type defined by Diameter specification for UDR_FLAGS AVP. + */ + public static final DiameterAvpType UDR_FLAGS_AVP_TYPE = DiameterAvpType.fromString("Unsigned32"); } diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/UserIdentityAvp.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/UserIdentityAvp.java index 7b064e498..0e2e9c905 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/UserIdentityAvp.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/UserIdentityAvp.java @@ -69,15 +69,15 @@ public interface UserIdentityAvp extends GroupedAvp { public boolean hasMsisdn(); /** - * Returns the value of the MSISDN AVP, of type OctetString. + * Returns the value of the MSISDN AVP of type OctetString. * A return value of null implies that the AVP has not been set. */ - public String getMsisdn(); + public byte[] getMsisdn(); /** - * Sets the value of the MSISDN AVP, of type OctetString. + * Sets the value of the MSISDN AVP of type OctetString. * @throws IllegalStateException if setMsisdn has already been called */ - public void setMsisdn(String msisdn); + public void setMsisdn(byte[] msisdn); } diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformation.java index a160acc7c..bf340aafa 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformation.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformation.java @@ -24,7 +24,7 @@ import java.util.List; -import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TISDNAddress; import org.w3c.dom.Element; @@ -50,7 +50,7 @@ * <element name="MSCNumber" type="{}tISDNAddress" minOccurs="0"/> * <element name="CurrentLocationRetrieved" type="{}tBool" minOccurs="0"/> * <element name="AgeOfLocationInformation" type="{}tAgeOfLocationInformation" minOccurs="0"/> - * <element name="Extension" type="{}tExtension" minOccurs="0"/> + * <element name="Extension" type="{}tCSLocationInformation-Extension" minOccurs="0"/> * <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/> * </sequence> * </restriction> @@ -58,7 +58,7 @@ * </complexType> * * - * @author Alexandre Mendonca + * @author Fernando Mendioroz */ public interface CSLocationInformation { @@ -267,20 +267,20 @@ public interface CSLocationInformation { * * @return * possible object is - * {@link TExtension } + * {@link TCSLocationInformationExtension } * */ - public abstract Extension getExtension(); + public abstract CSLocationInformationExtension getExtension(); /** * Sets the value of the extension property. * * @param value * allowed object is - * {@link TExtension } + * {@link TCSLocationInformationExtension } * */ - public abstract void setExtension(Extension value); + public abstract void setExtension(CSLocationInformationExtension value); /** * Gets the value of the any property. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension.java new file mode 100644 index 000000000..dcfebe751 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension.java @@ -0,0 +1,96 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension2; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tCSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformation-Extension">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="UserCSGInformation" type="{}tUserCSGInformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension2" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface CSLocationInformationExtension { + + /** + * Gets the value of the userCSGInformation property. + * + * @return + * possible object is + * {@link TUserCSGInformation } + * + */ + public abstract UserCSGInformation getUserCSGInformation(); + + /** + * Sets the value of the userCSGInformation property. + * + * @param userCSGInformation + * allowed object is + * {@link TUserCSGInformation } + * + */ + public abstract void setUserCSGInformation(UserCSGInformation userCSGInformation); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TCSLocationInformationExtension2 } + * + */ + public abstract CSLocationInformationExtension2 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TCSLocationInformationExtension2 } + * + */ + public abstract void setExtension(CSLocationInformationExtension2 value); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension2.java new file mode 100644 index 000000000..5e581af79 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension2.java @@ -0,0 +1,116 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension3; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tCSLocationInformationExtension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformationExtension2">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="E-UTRANCellGlobalId" type="{}tE-UTRANCellGlobalId" minOccurs="0"/>
+ *          <element name="TrackingAreaId" type="{}tTrackingAreaId" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension3" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface CSLocationInformationExtension2 { + + /** + * Gets the value of the eUTRANCellGlobalId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getEUTRANCellGlobalId(); + + /** + * Sets the value of the eUTRANCellGlobalId property. + * + * @param eUTRANCellGlobalId + * allowed object is + * {@link String } + * + */ + public abstract void setEUTRANCellGlobalId(String eUTRANCellGlobalId); + + /** + * Gets the value of the trackingAreaId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTrackingAreaId(); + + /** + * Sets the value of the trackingAreaId property. + * + * @param trackingAreaId + * allowed object is + * {@link String } + * + */ + public abstract void setTrackingAreaId(String trackingAreaId); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TCSLocationInformationExtension3 } + * + */ + public abstract CSLocationInformationExtension3 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TCSLocationInformationExtension3 } + * + */ + public abstract void setExtension(CSLocationInformationExtension3 value); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension3.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension3.java new file mode 100644 index 000000000..d35b45688 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/CSLocationInformationExtension3.java @@ -0,0 +1,96 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tCSLocationInformationExtension3 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformationExtension3">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="LocalTimeZone" type="{}tLocalTimeZone" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension3" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface CSLocationInformationExtension3 { + + /** + * Gets the value of the localTimeZone property. + * + * @return + * possible object is + * {@link LocalTimeZone } + * + */ + public abstract LocalTimeZone getLocalTimeZone(); + + /** + * Sets the value of the localTimeZone property. + * + * @param localTimeZone + * allowed object is + * {@link LocalTimeZone } + * + */ + public abstract void setLocalTimeZone(LocalTimeZone localTimeZone); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param extension + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension extension); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformation.java new file mode 100644 index 000000000..ad3d62227 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformation.java @@ -0,0 +1,261 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TEPSLocationInformationExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformation; +import org.w3c.dom.Element; +import java.util.List; + +/** + *

Interface for tEPSLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface EPSLocationInformation { + + /** + * Gets the value of the eUTRANCellGlobalId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getEUTRANCellGlobalId(); + + /** + * Sets the value of the eUTRANCellGlobalId property. + * + * @param eUTRANCellGlobalId + * allowed object is + * {@link String } + * + */ + public abstract void setEUTRANCellGlobalId(String eUTRANCellGlobalId); + + /** + * Gets the value of the trackingAreaId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTrackingAreaId(); + + /** + * Sets the value of the trackingAreaId property. + * + * @param trackingAreaId + * allowed object is + * {@link String } + * + */ + public abstract void setTrackingAreaId(String trackingAreaId); + + /** + * Gets the value of the geographicalInformation property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getGeographicalInformation(); + + /** + * Sets the value of the geographicalInformation property. + * + * @param geographicalInformation + * allowed object is + * {@link String } + * + */ + public abstract void setGeographicalInformation(String geographicalInformation); + + /** + * Gets the value of the geodeticInformation property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getGeodeticInformation(); + + /** + * Sets the value of the geodeticInformation property. + * + * @param geodeticInformation + * allowed object is + * {@link String } + * + */ + public abstract void setGeodeticInformation(String geodeticInformation); + + /** + * Gets the value of the mmeName property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getMMEName(); + + /** + * Sets the value of the mmeName property. + * + * @param mmeName + * allowed object is + * {@link String } + * + */ + public abstract void setMMEName(String mmeName); + + /** + * Gets the value of the currentLocationRetrieved property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public abstract Boolean isCurrentLocationRetrieved(); + + /** + * Sets the value of the currentLocationRetrieved property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public abstract void setCurrentLocationRetrieved(Boolean value); + + /** + * Gets the value of the ageOfLocationInformation property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getAgeOfLocationInformation(); + + /** + * Sets the value of the ageOfLocationInformation property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public abstract void setAgeOfLocationInformation(Integer value); + + /** + * Gets the value of the userCSGInformation property. + * + * @return + * possible object is + * {@link TUserCSGInformation } + * + */ + public abstract UserCSGInformation getUserCSGInformation(); + + /** + * Sets the value of the userCSGInformation property. + * + * @param userCSGInformation + * allowed object is + * {@link TUserCSGInformation } + * + */ + public abstract void setUserCSGInformation(UserCSGInformation userCSGInformation); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TEPSLocationInformationExtension } + * + */ + public abstract EPSLocationInformationExtension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TEPSLocationInformationExtension } + * + */ + public abstract void setExtension(EPSLocationInformationExtension value); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension.java new file mode 100644 index 000000000..1b7cd8350 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension.java @@ -0,0 +1,107 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.w3c.dom.Element; +import java.util.List; + +/** + *

Interface for tEPSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface EPSLocationInformationExtension { + + /** + * Gets the value of the visitedPLMNID property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getVisitedPLMNID(); + + /** + * Sets the value of the localTimeZone property. + * + * @param visitedPLMNID + * allowed object is + * {@link Integer } + * + */ + public abstract void setVisitedPLMNID(Integer visitedPLMNID); + + /** + * Gets the value of the localTimeZone property. + * + * @return + * possible object is + * {@link LocalTimeZone } + * + */ + public abstract LocalTimeZone getLocalTimeZone(); + + /** + * Sets the value of the localTimeZone property. + * + * @param localTimeZone + * allowed object is + * {@link LocalTimeZone } + * + */ + public abstract void setLocalTimeZone(LocalTimeZone localTimeZone); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TEPSLocationInformationExtension2 } + * + */ + public abstract EPSLocationInformationExtension2 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param epsLocationInformationExtension2 + * allowed object is + * {@link org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TEPSLocationInformationExtension2 } + * + */ + public abstract void setExtension(EPSLocationInformationExtension2 epsLocationInformationExtension2); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension2.java new file mode 100644 index 000000000..dc1cf3249 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/EPSLocationInformationExtension2.java @@ -0,0 +1,88 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tEPSLocationInformation-Extension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface EPSLocationInformationExtension2 { + + /** + * Gets the value of the ratType property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getRATtype(); + + /** + * Sets the value of the ratType property. + * + * @param ratType + * allowed object is + * {@link Integer } + * + */ + public abstract void setRATtype(Integer ratType); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension value); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/LocalTimeZone.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/LocalTimeZone.java new file mode 100644 index 000000000..4b68f98d3 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/LocalTimeZone.java @@ -0,0 +1,84 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +/** + * + *

Interface for tLocalTimeZone complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 		    
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface LocalTimeZone { + + /** + * Gets the value of the timeZone property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTimeZone(); + + /** + * Sets the value of the timeZone property. + * + * @param timeZone + * allowed object is + * {@link String } + * + */ + public abstract void setTimeZone(String timeZone); + + /** + * Gets the value of the daylightSavingTime property. + * + * @return + * possible object is + * {@link Byte } + * + */ + public abstract Byte getDaylightSavingTime(); + + /** + * Sets the value of the daylightSavingTime property. + * + * @param daylightSavingTime + * allowed object is + * {@link Byte } + * + */ + public abstract void setDaylightSavingTime(Byte daylightSavingTime); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformation.java index 665f854f7..d6adfe256 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformation.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformation.java @@ -26,6 +26,7 @@ import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TISDNAddress; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPSLocationInformationExtension; import org.w3c.dom.Element; /** @@ -246,20 +247,20 @@ public interface PSLocationInformation { * * @return * possible object is - * {@link TExtension } + * {@link TPSLocationInformationExtension } * */ - public abstract Extension getExtension(); + public abstract PSLocationInformationExtension getExtension(); /** * Sets the value of the extension property. * * @param value * allowed object is - * {@link TExtension } + * {@link TPSLocationInformationExtension } * */ - public abstract void setExtension(Extension value); + public abstract void setExtension(PSLocationInformationExtension value); /** * Gets the value of the any property. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension.java new file mode 100644 index 000000000..5e3496fe4 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension.java @@ -0,0 +1,63 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPSLocationInformationExtension2; + +/** + * + *

Interface for tPSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + * + * + * + * + * + * + * + * @author Fernando Mendioroz + */ +public interface PSLocationInformationExtension { + + /** + * Gets the value of the userCSGInformation property. + * + * @return + * possible object is + * {@link TUserCSGInformation } + * + */ + public abstract UserCSGInformation getUserCSGInformation(); + + /** + * Sets the value of the userCSGInformation property. + * + * @param userCSGInformation + * allowed object is + * {@link TUserCSGInformation } + * + */ + public abstract void setUserCSGInformation(UserCSGInformation userCSGInformation); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TPSLocationInformationExtension2 } + * + */ + public abstract PSLocationInformationExtension2 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TPSLocationInformationExtension2 } + * + */ + public abstract void setExtension(PSLocationInformationExtension2 value); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension2.java new file mode 100644 index 000000000..74aabc404 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/PSLocationInformationExtension2.java @@ -0,0 +1,127 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; + +/** + *

Interface for tPSLocationInformation-Extension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 			    
+ * 			    
+ * 		    
+ *  
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface PSLocationInformationExtension2 { + + /** + * Gets the value of the visitedPLMNID property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getVisitedPLMNID(); + + /** + * Sets the value of the localTimeZone property. + * + * @param visitedPLMNID + * allowed object is + * {@link Integer } + * + */ + public abstract void setVisitedPLMNID(Integer visitedPLMNID); + + /** + * Gets the value of the localTimeZone property. + * + * @return + * possible object is + * {@link LocalTimeZone } + * + */ + public abstract LocalTimeZone getLocalTimeZone(); + + /** + * Sets the value of the localTimeZone property. + * + * @param localTimeZone + * allowed object is + * {@link LocalTimeZone } + * + */ + public abstract void setLocalTimeZone(LocalTimeZone localTimeZone); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param extension + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension extension); + + /** + * Gets the value of the ratType property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getRATtype(); + + /** + * Sets the value of the ratType property. + * + * @param ratType + * allowed object is + * {@link Integer } + * + */ + public abstract void setRATtype(Integer ratType); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/Sh5GSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/Sh5GSLocationInformation.java new file mode 100644 index 000000000..219a5279e --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/Sh5GSLocationInformation.java @@ -0,0 +1,300 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-5GSLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 	    
+ * 		    
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 		
+ *   
+ * 	
+ * + * @author Fernando Mendioroz + */ +public interface Sh5GSLocationInformation { + + /** + * Gets the value of the NRCellGlobalId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getNRCellGlobalId(); + + /** + * Sets the value of the NRCellGlobalId property. + * + * @param eUTRANCellGlobalId + * allowed object is + * {@link String } + * + */ + public abstract void setNRCellGlobalId(String eUTRANCellGlobalId); + + /** + * Gets the value of the eUTRANCellGlobalId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getEUTRANCellGlobalId(); + + /** + * Sets the value of the eUTRANCellGlobalId property. + * + * @param eUTRANCellGlobalId + * allowed object is + * {@link String } + * + */ + public abstract void setEUTRANCellGlobalId(String eUTRANCellGlobalId); + + /** + * Gets the value of the trackingAreaId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTrackingAreaId(); + + /** + * Sets the value of the trackingAreaId property. + * + * @param trackingAreaId + * allowed object is + * {@link String } + * + */ + public abstract void setTrackingAreaId(String trackingAreaId); + + /** + * Gets the value of the geographicalInformation property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getGeographicalInformation(); + + /** + * Sets the value of the geographicalInformation property. + * + * @param geographicalInformation + * allowed object is + * {@link String } + * + */ + public abstract void setGeographicalInformation(String geographicalInformation); + + /** + * Gets the value of the amfAddress property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getAMFAddress(); + + /** + * Sets the value of the amfAddress property. + * + * @param amfAddress + * allowed object is + * {@link String } + * + */ + public abstract void setAMFAddress(String amfAddress); + + /** + * Gets the value of the smsfAddress property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getSMSFAddress(); + + /** + * Sets the value of the smsfAddress property. + * + * @param smsfAddress + * allowed object is + * {@link String } + * + */ + public abstract void setSMSFAddress(String smsfAddress); + + /** + * Gets the value of the currentLocationRetrieved property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public abstract Boolean isCurrentLocationRetrieved(); + + /** + * Sets the value of the currentLocationRetrieved property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public abstract void setCurrentLocationRetrieved(Boolean value); + + /** + * Gets the value of the ageOfLocationInformation property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getAgeOfLocationInformation(); + + /** + * Sets the value of the ageOfLocationInformation property. + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public abstract void setAgeOfLocationInformation(Integer value); + + /** + * Gets the value of the visitedPLMNID property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getVisitedPLMNID(); + + /** + * Sets the value of the localTimeZone property. + * + * @param visitedPLMNID + * allowed object is + * {@link Integer } + * + */ + public abstract void setVisitedPLMNID(Integer visitedPLMNID); + + /** + * Gets the value of the localTimeZone property. + * + * @return + * possible object is + * {@link LocalTimeZone } + * + */ + public abstract LocalTimeZone getLocalTimeZone(); + + /** + * Sets the value of the localTimeZone property. + * + * @param localTimeZone + * allowed object is + * {@link LocalTimeZone } + * + */ + public abstract void setLocalTimeZone(LocalTimeZone localTimeZone); + + /** + * Gets the value of the ratType property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getRATtype(); + + /** + * Sets the value of the ratType property. + * + * @param ratType + * allowed object is + * {@link Integer } + * + */ + public abstract void setRATtype(Integer ratType); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension value); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension2.java index a15545009..3d1a63687 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension2.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension2.java @@ -24,8 +24,8 @@ import java.util.List; -import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPublicIdentity; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension3; import org.w3c.dom.Element; /** @@ -39,7 +39,7 @@ * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <element name="DeletedIdentities" type="{}tPublicIdentity" minOccurs="0"/> - * <element name="Extension" type="{}tExtension" minOccurs="0"/> + * <element name="Extension" type="{}tSh-Data-Extension3" minOccurs="0"/> * <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/> * </sequence> * </restriction> @@ -48,6 +48,7 @@ * * * @author Alexandre Mendonca + * @author Fernando Mendioroz */ public interface ShDataExtension2 { @@ -76,20 +77,20 @@ public interface ShDataExtension2 { * * @return * possible object is - * {@link TExtension } + * {@link TShDataExtension3 } * */ - public abstract Extension getExtension(); + public abstract ShDataExtension3 getExtension(); /** - * Sets the value of the extension property. + * Sets the value of the shDataExtension3 property. * - * @param value + * @param shDataExtension3 * allowed object is - * {@link TExtension } + * {@link TShDataExtension3 } * */ - public abstract void setExtension(Extension value); + public abstract void setExtension(ShDataExtension3 shDataExtension3); /** * Gets the value of the any property. diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension3.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension3.java new file mode 100644 index 000000000..93cc47c1c --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension3.java @@ -0,0 +1,96 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension4; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-Data-Extension3 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension3">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="TADSinformation" type="{}tTADSinformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension4" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface ShDataExtension3 { + + /** + * Gets the value of the tadsInformation property. + * + * @return + * possible object is + * {@link TADSInformation } + * + */ + public abstract TADSInformation getTADSInformation(); + + /** + * Sets the value of the tadsInformation property. + * + * @param tadsInformation + * allowed object is + * {@link TADSInformation } + * + */ + public abstract void setTADSInformation(TADSInformation tadsInformation); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TShDataExtension4 } + * + */ + public abstract ShDataExtension4 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param shDataExtension4 + * allowed object is + * {@link TShDataExtension4 } + * + */ + public abstract void setExtension(ShDataExtension4 shDataExtension4); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension4.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension4.java new file mode 100644 index 000000000..562503561 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension4.java @@ -0,0 +1,116 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TEPSLocationInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension5; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-Data-Extension4 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension4">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="EPSUserState" type="{}tPSUserState" minOccurs="0"/>
+ *         <element name="EPSLocationInformation" type="{}tEPSLocationInformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension5" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+public interface ShDataExtension4 {
+
+    /**
+     * Gets the value of the epsUserState property.
+     *
+     * @return
+     *     possible object is
+     *     {@link Short }
+     *
+     */
+    public abstract Short getEPSUserState();
+
+    /**
+     * Sets the value of the epsUserState property.
+     *
+     * @param epsUserState
+     *     allowed object is
+     *     {@link Short }
+     *
+     */
+    public abstract void setEPSUserState(Short epsUserState);
+
+    /**
+     * Gets the value of the epsUserState property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TEPSLocationInformation }
+     *
+     */
+    public abstract EPSLocationInformation getEPSLocationInformation();
+
+    /**
+     * Sets the value of the epsLocationInformation property.
+     *
+     * @param epsLocationInformation
+     *     allowed object is
+     *     {@link TEPSLocationInformation }
+     *
+     */
+    public abstract void setEPSLocationInformation(EPSLocationInformation epsLocationInformation);
+
+    /**
+     * Gets the value of the extension property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TShDataExtension5 }
+     *
+     */
+    public abstract ShDataExtension5 getExtension();
+
+    /**
+     * Sets the value of the extension property.
+     *
+     * @param shDataExtension5
+     *     allowed object is
+     *     {@link TShDataExtension5 }
+     *
+     */
+    public abstract void setExtension(ShDataExtension5 shDataExtension5);
+
+    /**
+     * Gets the value of the any property.
+     *
+     * 

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension5.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension5.java new file mode 100644 index 000000000..5f49a7048 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension5.java @@ -0,0 +1,137 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension6; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTWANLocationInformation; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-Data-Extension5 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension5">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMSI" type="{}tIMSI" minOccurs="0"/>
+ *         <element name="TWANLocationInformation" type="{}tTWANLocationInformation" minOccurs="0"/>
+ *         <element name="IMSPrivateUserIdentity" type="{}tIMSPrivateUserIdentity" maxOccurs="unbounded" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension6" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+public interface ShDataExtension5 {
+
+    /**
+     * Gets the value of the imsi property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public abstract String getIMSI();
+
+    /**
+     * Sets the value of the epsUserState property.
+     *
+     * @param imsi
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public abstract void setIMSI(String imsi);
+
+    /**
+     * Gets the value of the twanLocationInformation property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TTWANLocationInformation }
+     *
+     */
+    public abstract TWANLocationInformation getTWANLocationInformation();
+
+    /**
+     * Sets the value of the twanLocationInformation property.
+     *
+     * @param twanLocationInformation
+     *     allowed object is
+     *     {@link TTWANLocationInformation }
+     *
+     */
+    public abstract void setTWANLocationInformation(TWANLocationInformation twanLocationInformation);
+
+    /**
+     * Gets the value of the imsi property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public abstract String getIMSPrivateUserIdentity();
+
+    /**
+     * Sets the value of the epsUserState property.
+     *
+     * @param imsPrivateUserIdentity
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public abstract void setIMSPrivateUserIdentity(String imsPrivateUserIdentity);
+
+    /**
+     * Gets the value of the extension property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TShDataExtension6 }
+     *
+     */
+    public abstract ShDataExtension6 getExtension();
+
+    /**
+     * Sets the value of the extension property.
+     *
+     * @param shDataExtension6
+     *     allowed object is
+     *     {@link TShDataExtension6 }
+     *
+     */
+    public abstract void setExtension(ShDataExtension6 shDataExtension6);
+
+    /**
+     * Gets the value of the any property.
+     *
+     * 

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension6.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension6.java new file mode 100644 index 000000000..e80fae863 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension6.java @@ -0,0 +1,95 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension7; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-Data-Extension6 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension6">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMEISV" type="{}tString" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension7" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+public interface ShDataExtension6 {
+
+    /**
+     * Gets the value of the imeisv property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public abstract String getIMEISV();
+
+    /**
+     * Sets the value of the imeisv property.
+     *
+     * @param imeisv
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public abstract void setIMEISV(String imeisv);
+
+    /**
+     * Gets the value of the extension property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TShDataExtension7 }
+     *
+     */
+    public abstract ShDataExtension7 getExtension();
+
+    /**
+     * Sets the value of the extension property.
+     *
+     * @param shDataExtension7
+     *     allowed object is
+     *     {@link TShDataExtension7 }
+     *
+     */
+    public abstract void setExtension(ShDataExtension7 shDataExtension7);
+
+    /**
+     * Gets the value of the any property.
+     *
+     * 

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension7.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension7.java new file mode 100644 index 000000000..811878519 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/ShDataExtension7.java @@ -0,0 +1,116 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TSh5GSLocationInformation; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tSh-Data-Extension7 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension7">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Sh-5GSLocationInformation" type="{}tSh-5GSLocationInformation" minOccurs="0"/>
+ *         <element name="Sh-5GSUserState" type="{}tPSUserState" minOccurs="0"/>
+ *         <element name="Extension" type="{}tExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+public interface ShDataExtension7 {
+
+    /**
+     * Gets the value of the twanLocationInformation property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TSh5GSLocationInformation }
+     *
+     */
+    public abstract Sh5GSLocationInformation getSh5GSLocationInformation();
+
+    /**
+     * Sets the value of the twanLocationInformation property.
+     *
+     * @param sh5GSLocationInformation
+     *     allowed object is
+     *     {@link TSh5GSLocationInformation }
+     *
+     */
+    public abstract void setSh5GSLocationInformation(Sh5GSLocationInformation sh5GSLocationInformation);
+
+    /**
+     * Gets the value of the sh5GSSUserState property.
+     *
+     * @return
+     *     possible object is
+     *     {@link Short }
+     *
+     */
+    public abstract Short getSh5GSSUserState();
+
+    /**
+     * Sets the value of the psUserState property.
+     *
+     * @param sh5GSSUserState
+     *     allowed object is
+     *     {@link Short }
+     *
+     */
+    public abstract void setSh5GSSUserState(Short sh5GSSUserState);
+
+    /**
+     * Gets the value of the extension property.
+     *
+     * @return
+     *     possible object is
+     *     {@link TExtension }
+     *
+     */
+    public abstract Extension getExtension();
+
+    /**
+     * Sets the value of the extension property.
+     *
+     * @param extension
+     *     allowed object is
+     *     {@link TExtension }
+     *
+     */
+    public abstract void setExtension(Extension extension);
+
+    /**
+     * Gets the value of the any property.
+     *
+     * 

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformation.java new file mode 100644 index 000000000..8469d35cf --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformation.java @@ -0,0 +1,116 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTADSInformationExtension; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tTADSinformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformation">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMSVoiceOverPSSessionSupport" type="{}tIMSVoiceOverPSSessionSupport"/>
+ *         <element name="RATtype" type="{}tRATtype" minOccurs="0"/>
+ *         <element name="Extension" type="{}tTADSinformationExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface TADSInformation { + + /** + * Gets the value of the imsVoiceOverPSSessionSupport property. + * + * @return + * possible object is + * {@link Short } + * + */ + public abstract Short getIMSVoiceOverPSSessionSupport(); + + /** + * Sets the value of the imsVoiceOverPSSessionSupport property. + * + * @param imsVoiceOverPSSessionSupport + * allowed object is + * {@link Short } + * + */ + public abstract void setIMSVoiceOverPSSessionSupport(Short imsVoiceOverPSSessionSupport); + + /** + * Gets the value of the ratType property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getRATType(); + + /** + * Sets the value of the ratType property. + * + * @param ratType + * allowed object is + * {@link Integer } + * + */ + public abstract void setRATType(Integer ratType); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TTADSInformationExtension } + * + */ + public abstract TADSInformationExtension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TTADSInformationExtension } + * + */ + public abstract void setExtension(TADSInformationExtension value); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension.java new file mode 100644 index 000000000..c9cd1a6d6 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension.java @@ -0,0 +1,71 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTADSInformationExtension2; + +import java.util.Calendar; + +/** + *

Interface for tTADSinformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformationExtension">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="LastUEActivityTime" type="{}tDateTime" minOccurs="0"/>
+ *         <element name="Extension" type="{}tTADSinformationExtension2" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface TADSInformationExtension { + + /** + * Gets the value of the lastUEActivityTime property. + * + * @return + * possible object is + * {@link Calendar } + * + */ + public abstract Calendar getLastUEActivityTime(); + + /** + * Sets the value of the lastUEActivityTime property. + * + * @param lastUEActivityTime + * allowed object is + * {@link Calendar } + * + */ + public abstract void setLastUEActivityTime(Calendar lastUEActivityTime); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TTADSInformationExtension2 } + * + */ + public abstract TADSInformationExtension2 getExtension(); + + /** + * Sets the value of the extension property. + * + * @param tadsInformationExtension2 + * allowed object is + * {@link TTADSInformationExtension2 } + * + */ + public abstract void setExtension(TADSInformationExtension2 tadsInformationExtension2); + + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension2.java new file mode 100644 index 000000000..5e8ec8c02 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TADSInformationExtension2.java @@ -0,0 +1,67 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; + +/** + *

Interface for tTADSinformationExtension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformationExtension2">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="AccessType" type="{}tAccessType" minOccurs="0"/>
+ *         <element name="Extension" type="{}tExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface TADSInformationExtension2 { + + /** + * Gets the value of the lastAccessType property. + * + * @return + * possible object is + * {@link Short } + * + */ + public abstract Short getAccessType(); + + /** + * Sets the value of the accessType property. + * + * @param accessType + * allowed object is + * {@link Short } + * + */ + public abstract void setAccessType(Short accessType); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param extension + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension extension); +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TWANLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TWANLocationInformation.java new file mode 100644 index 000000000..aed217eab --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/TWANLocationInformation.java @@ -0,0 +1,218 @@ +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; +import org.w3c.dom.Element; + +import java.util.List; + +/** + *

Interface for tTWANLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  <xs:complexType name="tTWANLocationInformation">
+ * 		<xs:sequence>
+ * 			<xs:element name="TWAN-SSID" type="tTWAN-SSID" minOccurs="0"/>
+ * 			<xs:element name="TWAN-BSSID" type="tTWAN-BSSID" minOccurs="0"/>
+ * 			<xs:element name="TWAN-PLMNID" type="tVisitedPLMNID" minOccurs="0"/>
+ * 			<xs:element name="CivicAddress" type="tCivicAddress" minOccurs="0" maxOccurs="unbounded"/>
+ * 			<xs:element name="TWANOperatorName" type="tTWANOperatorName" minOccurs="0"/>
+ * 			<xs:element name="LocalTimeZone" type="tLocalTimeZone" minOccurs="0"/>
+ * 			<xs:element name="LogicalAccessID" type="tLogicalAccessID" minOccurs="0"/>
+ * 			<xs:element name="Extension" type="tExtension" minOccurs="0"/>
+ * 			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ * 		</xs:sequence>
+ * 	</xs:complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface TWANLocationInformation { + + /** + * Gets the value of the twanSsid property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTwanSsid(); + + /** + * Sets the value of the twanSsid property. + * + * @param twanSsid + * allowed object is + * {@link String } + * + */ + public abstract void setTwanSsid(String twanSsid); + + /** + * Gets the value of the twanBssid property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTwanBssid(); + + /** + * Sets the value of the twanBssid property. + * + * @param twanBssid + * allowed object is + * {@link String } + * + */ + public abstract void setTwanBssid(String twanBssid); + + /** + * Gets the value of the twanPlmnInd property. + * + * @return + * possible object is + * {@link Integer } + * + */ + public abstract Integer getTwanPlmnId(); + + /** + * Sets the value of the twanPlmnInd property. + * + * @param twanPlmnInd + * allowed object is + * {@link Integer } + * + */ + public abstract void setTwanPlmnId(Integer twanPlmnInd); + + /** + * Gets the value of the civicAddress property. + * + * @return + * possible object is + * {@link Byte } + * + */ + public abstract byte[] getCivicAddress(); + + /** + * Sets the value of the civicAddress property. + * + * @param civicAddress + * allowed object is + * {@link Byte } + * + */ + public abstract void setCivicAddress(byte[] civicAddress); + + /** + * Gets the value of the twanOperatorName property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getTwanOperatorName(); + + /** + * Sets the value of the twanOperatorName property. + * + * @param twanOperatorName + * allowed object is + * {@link String } + * + */ + public abstract void setTwanOperatorName(String twanOperatorName); + + /** + * Gets the value of the localTimeZone property. + * + * @return + * possible object is + * {@link LocalTimeZone } + * + */ + public abstract LocalTimeZone getLocalTimeZone(); + + /** + * Sets the value of the localTimeZone property. + * + * @param localTimeZone + * allowed object is + * {@link LocalTimeZone } + * + */ + public abstract void setLocalTimeZone(LocalTimeZone localTimeZone); + + /** + * Gets the value of the logicalAccessID property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getLogicalAccessID(); + + /** + * Sets the value of the logicalAccessID property. + * + * @param logicalAccessID + * allowed object is + * {@link String } + * + */ + public abstract void setLogicalAccessID(String logicalAccessID); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param extension + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension extension); + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link Element } + * + * + */ + public abstract List getAny(); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformation.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformation.java new file mode 100644 index 000000000..cfe87f3bc --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformation.java @@ -0,0 +1,86 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformationExtension; + +/** + * + *

Interface for tUserCSGInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface UserCSGInformation { + + /** + * Gets the value of the cSGId property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getCSGId(); + + /** + * Sets the value of the cSGId property. + * + * @param timeZone + * allowed object is + * {@link String } + * + */ + public abstract void setCSGId(String timeZone); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TUserCSGInformationExtension } + * + */ + public abstract UserCSGInformationExtension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param userCSGInformationExtension + * allowed object is + * {@link TUserCSGInformationExtension } + * + */ + public abstract void setExtension(UserCSGInformationExtension userCSGInformationExtension); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformationExtension.java new file mode 100644 index 000000000..4a44c3f35 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/userdata/UserCSGInformationExtension.java @@ -0,0 +1,107 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package net.java.slee.resource.diameter.sh.events.avp.userdata; + +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; + +/** + * + *

Interface for tUserCSGInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 			    
+ * 		    
+ *  
+ * 
+ * + * @author Fernando Mendioroz + */ +public interface UserCSGInformationExtension { + + /** + * Gets the value of the accessMode property. + * + * @return + * possible object is + * {@link String } + * + */ + public abstract String getAccessMode(); + + /** + * Sets the value of the accessMode property. + * + * @param accessMode + * allowed object is + * {@link String } + * + */ + public abstract void setAccessMode(String accessMode); + + /** + * Gets the value of the cMI property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public abstract Boolean getCMI(); + + /** + * Sets the value of the cMI property. + * + * @param cmi + * allowed object is + * {@link Boolean } + * + */ + public abstract void setCMI(Boolean cmi); + + /** + * Gets the value of the extension property. + * + * @return + * possible object is + * {@link TExtension } + * + */ + public abstract Extension getExtension(); + + /** + * Sets the value of the extension property. + * + * @param value + * allowed object is + * {@link TExtension } + * + */ + public abstract void setExtension(Extension value); + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateAnswerImpl.java index 973b5cb32..f8b63ade4 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateAnswerImpl.java @@ -65,26 +65,26 @@ public void setExperimentalResult(ExperimentalResultAvp experimentalResult) { /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.server.events.ProfileUpdateAnswer#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java index 082c32dba..47c3d62a4 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java @@ -38,6 +38,7 @@ import net.java.slee.resource.diameter.sh.events.avp.DiameterShAvpCodes; import net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp; import net.java.slee.resource.diameter.sh.events.avp.userdata.ShData; +import net.java.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation; import net.java.slee.resource.diameter.sh.events.avp.userdata.UserDataObjectFactory; import org.jdiameter.api.Message; @@ -46,6 +47,9 @@ import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ObjectFactory; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TApplicationServer; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension2; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformationExtension3; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TChargingInformation; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TDSAI; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension; @@ -53,7 +57,10 @@ import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TIFCs; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TISDNAddress; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TInitialFilterCriteria; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPSLocationInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPSLocationInformationExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPSLocationInformationExtension2; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPublicIdentity; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPublicIdentityExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TPublicIdentityExtension2; @@ -61,15 +68,27 @@ import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TSePoTriExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TServiceData; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TSessionDescription; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TSh5GSLocationInformation; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShData; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension2; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension3; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension4; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension5; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension6; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShDataExtension7; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShIMSData; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShIMSDataExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShIMSDataExtension2; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShIMSDataExtension3; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTADSInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTADSInformationExtension; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTADSInformationExtension2; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTWANLocationInformation; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTransparentData; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TTrigger; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformation; +import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TUserCSGInformationExtension; import org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserDataObjectFactoryImpl; /** @@ -229,16 +248,30 @@ public void setUserDataObject(ShData userData, Class... classes) throws IOExc ctxClasses.add(TSePoTriExtension.class); ctxClasses.add(TShIMSDataExtension.class); ctxClasses.add(TCSLocationInformation.class); + ctxClasses.add(TCSLocationInformationExtension.class); + ctxClasses.add(TCSLocationInformationExtension2.class); + ctxClasses.add(TCSLocationInformationExtension3.class); + ctxClasses.add(TLocalTimeZone.class); ctxClasses.add(TInitialFilterCriteria.class); ctxClasses.add(TServiceData.class); ctxClasses.add(TShIMSDataExtension2.class); ctxClasses.add(TChargingInformation.class); ctxClasses.add(TPSLocationInformation.class); + ctxClasses.add(TPSLocationInformationExtension.class); + ctxClasses.add(TPSLocationInformationExtension2.class); ctxClasses.add(TSessionDescription.class); ctxClasses.add(TShIMSDataExtension3.class); ctxClasses.add(TDSAI.class); ctxClasses.add(TPublicIdentity.class); ctxClasses.add(TShData.class); + ctxClasses.add(TShDataExtension.class); + ctxClasses.add(TShDataExtension2.class); + ctxClasses.add(TShDataExtension3.class); + ctxClasses.add(TShDataExtension4.class); + ctxClasses.add(TShDataExtension5.class); + ctxClasses.add(TShDataExtension6.class); + ctxClasses.add(TShDataExtension7.class); + ctxClasses.add(TSh5GSLocationInformation.class); ctxClasses.add(TTransparentData.class); ctxClasses.add(TExtension.class); ctxClasses.add(TPublicIdentityExtension.class); @@ -246,7 +279,12 @@ public void setUserDataObject(ShData userData, Class... classes) throws IOExc ctxClasses.add(TTrigger.class); ctxClasses.add(THeader.class); ctxClasses.add(TPublicIdentityExtension2.class); - ctxClasses.add(TShDataExtension2.class); + ctxClasses.add(TTADSInformation.class); + ctxClasses.add(TTADSInformationExtension.class); + ctxClasses.add(TTADSInformationExtension2.class); + ctxClasses.add(TUserCSGInformation.class); + ctxClasses.add(TUserCSGInformationExtension.class); + ctxClasses.add(TTWANLocationInformation.class); //ctxClasses.add(UserDataObjectFactoryImpl.class); for(Class clazz : classes) { @@ -266,26 +304,26 @@ public void setUserDataObject(ShData userData, Class... classes) throws IOExc /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationRequestImpl.java index 0dfbd5393..e6f9eb6db 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationRequestImpl.java @@ -165,26 +165,26 @@ public void setUserDataObject(ShData userData) throws IOException { /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.events.PushNotificationRequest#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java index a6671beaf..873c8966b 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java @@ -193,26 +193,26 @@ public void setUserDataObject(ShData userData) throws IOException { /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsRequestImpl.java index 005774ce6..6e0e8ae31 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsRequestImpl.java @@ -224,26 +224,26 @@ public void setExpiryTime(Date expiryTime) { /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.server.events.SubscribeNotificationsRequest#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataAnswerImpl.java index 53125621c..c87a0791e 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataAnswerImpl.java @@ -26,10 +26,10 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; -import javax.xml.bind.JAXBContext; +/*import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; +import javax.xml.bind.Unmarshaller;*/ import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; @@ -56,10 +56,10 @@ public class UserDataAnswerImpl extends DiameterShMessageImpl implements UserDat private static final long serialVersionUID = -6240588207973076841L; - private static JAXBContext jaxbContext = initJAXBContext(); + //private static JAXBContext jaxbContext = initJAXBContext(); private static UserDataObjectFactory udof = new UserDataObjectFactoryImpl(new ObjectFactory()); - private static JAXBContext initJAXBContext() { + /*private static JAXBContext initJAXBContext() { try { return JAXBContext.newInstance(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TShData.class); } @@ -67,7 +67,7 @@ private static JAXBContext initJAXBContext() { // we can't throw exception return null; } - } + }*/ /** * @@ -104,11 +104,11 @@ public byte[] getUserData() { public ShData getUserDataObject() throws IOException { ShData shDataObject = null; try { - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + //Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); byte[] data = getAvpAsRaw(DiameterShAvpCodes.USER_DATA, DiameterShAvpCodes.SH_VENDOR_ID); - JAXBElement jaxbElem = udof.createShData((TShData) unmarshaller.unmarshal(new ByteArrayInputStream(data))); - shDataObject = (ShData) jaxbElem.getValue(); + //JAXBElement jaxbElem = udof.createShData((TShData) unmarshaller.unmarshal(new ByteArrayInputStream(data))); + //shDataObject = (ShData) jaxbElem.getValue(); } catch (Exception e) { throw new IOException("Failed to unmarshal User-Data AVP into JAXB Object", e); @@ -130,10 +130,10 @@ public void setUserData(byte[] userData) { */ public void setUserDataObject(ShData userData) throws IOException { try { - Marshaller marshaller = jaxbContext.createMarshaller(); + //Marshaller marshaller = jaxbContext.createMarshaller(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); - marshaller.marshal(userData, baos); + //marshaller.marshal(userData, baos); addAvp(DiameterShAvpCodes.USER_DATA, DiameterShAvpCodes.SH_VENDOR_ID, baos.toByteArray()); } catch (Exception e) { @@ -167,26 +167,26 @@ public void setExperimentalResult(ExperimentalResultAvp experimentalResult) { /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#hasWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#hasWildcardedPublicIdentity() */ - public boolean hasWildcardedPSI() { - return hasAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasWildcardedPublicIdentity() { + return hasAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#getWildcardedPSI() + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#getWildcardedPublicIdentity() */ - public String getWildcardedPSI() { - return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID); + public String getWildcardedPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#setWildcardedPSI(String) + * @see net.java.slee.resource.diameter.sh.events.SubscribeNotificationsAnswer#setWildcardedPublicIdentity(String) */ - public void setWildcardedPSI(String wildcardedPSI) { - addAvp(DiameterShAvpCodes.WILDCARDED_PSI, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPSI); + public void setWildcardedPublicIdentity(String wildcardedPublicIdentity) { + addAvp(DiameterShAvpCodes.WILDCARDED_PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID, wildcardedPublicIdentity); } /* diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataRequestImpl.java index 8c522435a..05dc7ebd7 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/UserDataRequestImpl.java @@ -128,6 +128,13 @@ public long getRequestedNodes() { return getAvpAsUnsigned32(DiameterShAvpCodes.REQUESTED_NODES, DiameterShAvpCodes.SH_VENDOR_ID); } + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.sh.server.events.UserDataRequest#getUDRFlags() + */ + public long getUDRFlags() { + return getAvpAsUnsigned32(DiameterShAvpCodes.UDR_FLAGS, DiameterShAvpCodes.SH_VENDOR_ID); + } + /* (non-Javadoc) * @see net.java.slee.resource.diameter.sh.server.events.UserDataRequest#hasCurrentLocation() */ @@ -170,6 +177,13 @@ public boolean hasRequestedNodes() { return hasAvp(DiameterShAvpCodes.REQUESTED_NODES, DiameterShAvpCodes.SH_VENDOR_ID); } + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.sh.server.events.UserDataRequest#hasUDRFlags() + */ + public boolean hasUDRFlags() { + return hasAvp(DiameterShAvpCodes.UDR_FLAGS, DiameterShAvpCodes.SH_VENDOR_ID); + } + /* (non-Javadoc) * @see net.java.slee.resource.diameter.sh.server.events.UserDataRequest#setCurrentLocation(net.java.slee.resource.diameter.sh.events.avp.CurrentLocationType) */ @@ -277,4 +291,11 @@ public void setSessionPriority(SessionPriorityType sesionPriority) { public void setRequestedNodes(long requestedNodes) { addAvp(DiameterShAvpCodes.REQUESTED_NODES, DiameterShAvpCodes.SH_VENDOR_ID, requestedNodes); } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.sh.server.events.UserDataRequest#setRequestedNodes(long) + */ + public void setUDRFlags(long udrFlags) { + addAvp(DiameterShAvpCodes.UDR_FLAGS, DiameterShAvpCodes.SH_VENDOR_ID, udrFlags); + } } diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/UserIdentityAvpImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/UserIdentityAvpImpl.java index 2b74dbb27..e287c2f98 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/UserIdentityAvpImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/UserIdentityAvpImpl.java @@ -54,26 +54,26 @@ public UserIdentityAvpImpl(int code, long vendorId, int mnd, int prt, byte[] val /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#getMsisdn() + * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#hasMsisdn() */ - public String getMsisdn() { - return getAvpAsUTF8String(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID); + public boolean hasMsisdn() { + return hasAvp(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID); } - /* + /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#getPublicIdentity() + * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#getMsisdn() */ - public String getPublicIdentity() { - return getAvpAsUTF8String(DiameterShAvpCodes.PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); + public byte[] getMsisdn() { + return getAvpAsOctetString(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID); } - /* + /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#hasMsisdn() + * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#setMsisdn(byte[]) */ - public boolean hasMsisdn() { - return hasAvp(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID); + public void setMsisdn(byte[] msisdn) { + addAvp(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID, msisdn); } /* (non-Javadoc) @@ -83,15 +83,15 @@ public boolean hasPublicIdentity() { return hasAvp(DiameterShAvpCodes.PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } - /* + /* * (non-Javadoc) - * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#setMsisdn(java.lang.String) + * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#getPublicIdentity() */ - public void setMsisdn(String msisdn) { - addAvp(DiameterShAvpCodes.MSISDN, DiameterShAvpCodes.SH_VENDOR_ID, msisdn); + public String getPublicIdentity() { + return getAvpAsUTF8String(DiameterShAvpCodes.PUBLIC_IDENTITY, DiameterShAvpCodes.SH_VENDOR_ID); } - /* + /* * (non-Javadoc) * @see net.java.slee.resource.diameter.sh.events.avp.UserIdentityAvp#setPublicIdentity(java.lang.String) */ diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformation.java index 05fc72c4a..a6e5d3fc7 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformation.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformation.java @@ -32,6 +32,7 @@ import javax.xml.bind.annotation.XmlType; import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformation; +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension; import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; import net.java.slee.resource.diameter.sh.events.avp.userdata.ISDNAddress; @@ -58,7 +59,7 @@ * <element name="MSCNumber" type="{}tISDNAddress" minOccurs="0"/> * <element name="CurrentLocationRetrieved" type="{}tBool" minOccurs="0"/> * <element name="AgeOfLocationInformation" type="{}tAgeOfLocationInformation" minOccurs="0"/> - * <element name="Extension" type="{}tExtension" minOccurs="0"/> + * <element name="Extension" type="{}tCSLocationInformation-Extension" minOccurs="0"/> * <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/> * </sequence> * </restriction> @@ -66,7 +67,7 @@ * </complexType> * * - * @author Alexandre Mendonca + * @author Fernando Mendioroz */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tCSLocationInformation", propOrder = { @@ -106,7 +107,7 @@ public class TCSLocationInformation implements CSLocationInformation { @XmlElement(name = "AgeOfLocationInformation") protected Integer ageOfLocationInformation; @XmlElement(name = "Extension") - protected TExtension extension; + protected TCSLocationInformationExtension extension; @XmlAnyElement(lax = true) protected List any; @@ -251,17 +252,17 @@ public void setAgeOfLocationInformation(Integer value) { } /* (non-Javadoc) - * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformation#getExtension() + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformation#getCSLocationInformatioExtension() */ - public Extension getExtension() { + public CSLocationInformationExtension getExtension() { return extension; } /* (non-Javadoc) - * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TExtension) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TCSLocationInformatioExtension) */ - public void setExtension(Extension value) { - this.extension = (TExtension) value; + public void setExtension(CSLocationInformationExtension csLocationInformationExtension) { + this.extension = (TCSLocationInformationExtension) csLocationInformationExtension; } /* (non-Javadoc) diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension.java new file mode 100644 index 000000000..46a3abf4f --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension.java @@ -0,0 +1,89 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2; +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tCSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformation-Extension">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="UserCSGInformation" type="{}tUserCSGInformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension2" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tCSLocationInformation-Extension", propOrder = { + "userCSGInformation", + "extension", + "any" +}) +public class TCSLocationInformationExtension implements CSLocationInformationExtension { + + @XmlElement(name = "UserCSGInformation") + protected TUserCSGInformation userCSGInformation; + @XmlElement(name = "Extension") + protected TCSLocationInformationExtension2 extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension#getUserCSGInformation() + */ + public UserCSGInformation getUserCSGInformation() { + return (UserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension#setUserCSGInformation(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation) + */ + public void setUserCSGInformation(UserCSGInformation userCSGInformation) { + this.userCSGInformation = (TUserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension#getExtension() + */ + public CSLocationInformationExtension2 getExtension() { + return (CSLocationInformationExtension2) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2) + */ + public void setExtension(CSLocationInformationExtension2 csLocationInformationExtension) { + this.extension = (TCSLocationInformationExtension2) csLocationInformationExtension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension2.java new file mode 100644 index 000000000..4795075b2 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension2.java @@ -0,0 +1,107 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2; +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tCSLocationInformationExtension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformationExtension2">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="E-UTRANCellGlobalId" type="{}tE-UTRANCellGlobalId" minOccurs="0"/>
+ *          <element name="TrackingAreaId" type="{}tTrackingAreaId" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension3" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tCSLocationInformationExtension2", propOrder = { + "eUTRANCellGlobalId", + "trackingAreaId", + "extension", + "any" +}) +public class TCSLocationInformationExtension2 implements CSLocationInformationExtension2 { + + @XmlElement(name = "E-UTRANCellGlobalId") + protected String eUTRANCellGlobalId; + @XmlElement(name = "TrackingAreaId") + protected String trackingAreaId; + @XmlElement(name = "Extension") + protected TCSLocationInformationExtension3 extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#getEUTRANCellGlobalId() + */ + public String getEUTRANCellGlobalId() { + return eUTRANCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#setEUTRANCellGlobalId(java.lang.String) + */ + public void setEUTRANCellGlobalId(String value) { + this.eUTRANCellGlobalId = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#getTrackingAreaId() + */ + public String getTrackingAreaId() { + return trackingAreaId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#setTrackingAreaId(java.lang.String) + */ + public void setTrackingAreaId(String value) { + this.trackingAreaId = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#getExtension() + */ + public CSLocationInformationExtension3 getExtension() { + return (CSLocationInformationExtension3) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3) + */ + public void setExtension(CSLocationInformationExtension3 epsLocationInformationExtension) { + this.extension = (TCSLocationInformationExtension3) epsLocationInformationExtension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension2#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension3.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension3.java new file mode 100644 index 000000000..b09f3be39 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TCSLocationInformationExtension3.java @@ -0,0 +1,89 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3; +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tCSLocationInformationExtension3 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tCSLocationInformationExtension3">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="LocalTimeZone" type="{}tLocalTimeZone" minOccurs="0"/>
+ *         <element name="Extension" type="{}tCSLocationInformationExtension3" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tCSLocationInformationExtension3", propOrder = { + "localTimeZone", + "extension", + "any" +}) +public class TCSLocationInformationExtension3 implements CSLocationInformationExtension3 { + + @XmlElement(name = "LocalTimeZone") + protected TLocalTimeZone localTimeZone; + @XmlElement(name = "Extension") + protected TExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3#getLocalTimeZone() + */ + public LocalTimeZone getLocalTimeZone() { + return (LocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3#setLocalTimeZone(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone) + */ + public void setLocalTimeZone(LocalTimeZone localTimeZone) { + this.localTimeZone = (TLocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.CSLocationInformationExtension3#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformation.java new file mode 100644 index 000000000..a7e8b83e5 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformation.java @@ -0,0 +1,235 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation; +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation; + +/** + *

Java class for tEPSLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *	
+ * 		
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEPSLocationInformation", propOrder = { + "eUTRANCellGlobalId", + "trackingAreaId", + "geographicalInformation", + "geodeticInformation", + "mmeName", + "currentLocationRetrieved", + "ageOfLocationInformation", + "userCSGInformation", + "extension", + "any" +}) +public class TEPSLocationInformation implements EPSLocationInformation { + + @XmlElement(name = "E-UTRANCellGlobalId") + protected String eUTRANCellGlobalId; + @XmlElement(name = "TrackingAreaId") + protected String trackingAreaId; + @XmlElement(name = "GeographicalInformation") + protected String geographicalInformation; + @XmlElement(name = "GeodeticInformation") + protected String geodeticInformation; + @XmlElement(name = "MMEName") + protected String mmeName; + @XmlElement(name = "CurrentLocationRetrieved") + protected Boolean currentLocationRetrieved; + @XmlElement(name = "AgeOfLocationInformation") + protected Integer ageOfLocationInformation; + @XmlElement(name = "UserCSGInformation") + protected TUserCSGInformation userCSGInformation; + @XmlElement(name = "Extension") + protected TEPSLocationInformationExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getEUTRANCellGlobalId() + */ + public String getEUTRANCellGlobalId() { + return eUTRANCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setEUTRANCellGlobalId(java.lang.String) + */ + public void setEUTRANCellGlobalId(String value) { + this.eUTRANCellGlobalId = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getTrackingAreaId() + */ + public String getTrackingAreaId() { + return trackingAreaId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setTrackingAreaId(java.lang.String) + */ + public void setTrackingAreaId(String value) { + this.trackingAreaId = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getGeographicalInformation() + */ + public String getGeographicalInformation() { + return geographicalInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setGeographicalInformation(java.lang.String) + */ + public void setGeographicalInformation(String value) { + this.geographicalInformation = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getGeodeticInformation() + */ + public String getGeodeticInformation() { + return geodeticInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setGeodeticInformation(java.lang.String) + */ + public void setGeodeticInformation(String value) { + this.geodeticInformation = value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getMMEName() + */ + public String getMMEName() { + return mmeName; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setMMEName(java.lang.String) + */ + public void setMMEName(String mmeName) { + this.mmeName = mmeName; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#isCurrentLocationRetrieved() + */ + public Boolean isCurrentLocationRetrieved() { + return currentLocationRetrieved; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setCurrentLocationRetrieved(java.lang.Boolean) + */ + public void setCurrentLocationRetrieved(Boolean currentLocationRetrieved) { + this.currentLocationRetrieved = currentLocationRetrieved; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getAgeOfLocationInformation() + */ + public Integer getAgeOfLocationInformation() { + return ageOfLocationInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setAgeOfLocationInformation(java.lang.Integer) + */ + public void setAgeOfLocationInformation(Integer ageOfLocationInformation) { + this.ageOfLocationInformation = ageOfLocationInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getUserCSGInformation() + */ + public UserCSGInformation getUserCSGInformation() { + return (UserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setUserCSGInformation(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation) + */ + public void setUserCSGInformation(UserCSGInformation userCSGInformation) { + this.userCSGInformation = (TUserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getExtension() + */ + public EPSLocationInformationExtension getExtension() { + return (EPSLocationInformationExtension) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension) + */ + public void setExtension(EPSLocationInformationExtension epsLocationInformationExtension) { + this.extension = (TEPSLocationInformationExtension) epsLocationInformationExtension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension.java new file mode 100644 index 000000000..939211e1f --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension.java @@ -0,0 +1,112 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2; +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tEPSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEPSLocationInformationExtension", propOrder = { + "visitedPLMNID", + "localTimeZone", + "extension" +}) +public class TEPSLocationInformationExtension implements EPSLocationInformationExtension { + + @XmlElement(name = "VisitedPLMNID") + protected Integer visitedPLMNID; + @XmlElement(name = "LocalTimeZone") + protected TLocalTimeZone localTimeZone; + @XmlElement(name = "Extension") + protected TEPSLocationInformationExtension2 extension; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#getVisitedPLMNID() + */ + public Integer getVisitedPLMNID() { + return visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#setVisitedPLMNID(java.lang.Integer) + */ + public void setVisitedPLMNID(Integer visitedPLMNID) { + this.visitedPLMNID = visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#getLocalTimeZone() + */ + public LocalTimeZone getLocalTimeZone() { + return (LocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#setLocalTimeZone(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone) + */ + public void setLocalTimeZone(LocalTimeZone localTimeZone) { + this.localTimeZone = (TLocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#getExtension() + */ + public EPSLocationInformationExtension2 getExtension() { + return (EPSLocationInformationExtension2) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2) + */ + public void setExtension(EPSLocationInformationExtension2 epsLocationInformationExtension2) { + this.extension = (TEPSLocationInformationExtension2) epsLocationInformationExtension2; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension2.java new file mode 100644 index 000000000..4fca0e261 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TEPSLocationInformationExtension2.java @@ -0,0 +1,93 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2; +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tEPSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEPSLocationInformationExtension2", propOrder = { + "ratType", + "extension" +}) +public class TEPSLocationInformationExtension2 implements EPSLocationInformationExtension2 { + + @XmlElement(name = "RATtype") + protected Integer ratType; + @XmlElement(name = "Extension") + protected TExtension extension; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2#getRATtype() + */ + public Integer getRATtype() { + return ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformation#setRATtype(java.lang.Integer) + */ + public void setRATtype(Integer ratType) { + this.ratType = ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformationExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TLocalTimeZone.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TLocalTimeZone.java new file mode 100644 index 000000000..89b5a9338 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TLocalTimeZone.java @@ -0,0 +1,89 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +/** + *

Java class for tLocalTimeZone complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 		    
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLocalTimeZone", propOrder = { + "timeZone", + "daylightSavingTime" +}) +public class TLocalTimeZone implements LocalTimeZone { + + @XmlElement(name = "TimeZone") + protected String timeZone; + @XmlElement(name = "DaylightSavingTime") + protected Byte daylightSavingTime; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone#getTimeZone() + */ + public String getTimeZone() { + return timeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone#setTimeZone((java.lang.String) + */ + public void setTimeZone(String timeZone) { + this.timeZone = timeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone#getDaylightSavingTime() + */ + public Byte getDaylightSavingTime() { + return daylightSavingTime; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone#setDaylightSavingTime(java.lang.Byte) + */ + public void setDaylightSavingTime(Byte value) { + this.daylightSavingTime = value; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformation.java index 9cc1ccf93..98bd9e12a 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformation.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformation.java @@ -34,6 +34,7 @@ import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; import net.java.slee.resource.diameter.sh.events.avp.userdata.ISDNAddress; import net.java.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformation; +import net.java.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension; /** @@ -57,7 +58,7 @@ * <element name="SGSNNumber" type="{}tISDNAddress" minOccurs="0"/> * <element name="CurrentLocationRetrieved" type="{}tBool" minOccurs="0"/> * <element name="AgeOfLocationInformation" type="{}tAgeOfLocationInformation" minOccurs="0"/> - * <element name="Extension" type="{}tExtension" minOccurs="0"/> + * <element name="Extension" type="{}tPSLocationInformation-Extension" minOccurs="0"/> * <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/> * </sequence> * </restriction> @@ -102,7 +103,7 @@ public class TPSLocationInformation implements PSLocationInformation { @XmlElement(name = "AgeOfLocationInformation") protected Integer ageOfLocationInformation; @XmlElement(name = "Extension") - protected TExtension extension; + protected TPSLocationInformationExtension extension; @XmlAnyElement(lax = true) protected List any; @@ -235,15 +236,15 @@ public void setAgeOfLocationInformation(Integer value) { /* (non-Javadoc) * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformation#getExtension() */ - public Extension getExtension() { + public PSLocationInformationExtension getExtension() { return extension; } /* (non-Javadoc) * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) */ - public void setExtension(Extension value) { - this.extension = (TExtension) value; + public void setExtension(PSLocationInformationExtension value) { + this.extension = (TPSLocationInformationExtension) value; } /* (non-Javadoc) diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension.java new file mode 100644 index 000000000..1bcd4834e --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension.java @@ -0,0 +1,91 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2; +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +/** + * + *

Java class for tPSLocationInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + * + * + * + * + * + * + * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPSLocationInformationExtension", propOrder = { + "userCSGInformation", + "extension" +}) +public class TPSLocationInformationExtension implements PSLocationInformationExtension { + + @XmlElement(name = "UserCSGInformation") + protected TUserCSGInformation userCSGInformation; + @XmlElement(name = "Extension") + protected TPSLocationInformationExtension2 extension; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension#getUserCSGInformation() + */ + public UserCSGInformation getUserCSGInformation() { + return (UserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension#setUserCSGInformation(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation) + */ + public void setUserCSGInformation(UserCSGInformation userCSGInformation) { + this.userCSGInformation = (TUserCSGInformation) userCSGInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension#getExtension() + */ + public PSLocationInformationExtension2 getExtension() { + return (PSLocationInformationExtension2) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2) + */ + public void setExtension(PSLocationInformationExtension2 epsLocationInformationExtension) { + this.extension = (TPSLocationInformationExtension2) epsLocationInformationExtension; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension2.java new file mode 100644 index 000000000..743289c37 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TPSLocationInformationExtension2.java @@ -0,0 +1,127 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; +import net.java.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +/** + *

Java class for tPSLocationInformation-Extension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 			    
+ * 			    
+ * 		    
+ *  
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPSLocationInformationExtension2", propOrder = { + "visitedPLMNID", + "localTimeZone", + "extension", + "ratType" +}) +public class TPSLocationInformationExtension2 implements PSLocationInformationExtension2 { + + @XmlElement(name = "VisitedPLMNID") + protected Integer visitedPLMNID; + @XmlElement(name = "LocalTimeZone") + protected TLocalTimeZone localTimeZone; + @XmlElement(name = "Extension") + protected TExtension extension; + @XmlElement(name = "RATtype") + protected Integer ratType; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#getVisitedPLMNID() + */ + public Integer getVisitedPLMNID() { + return visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#setVisitedPLMNID(java.lang.Integer) + */ + public void setVisitedPLMNID(Integer visitedPLMNID) { + this.visitedPLMNID = visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#getLocalTimeZone() + */ + public LocalTimeZone getLocalTimeZone() { + return (LocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#setLocalTimeZone(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone) + */ + public void setLocalTimeZone(LocalTimeZone localTimeZone) { + this.localTimeZone = (TLocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#getRATtype() + */ + public Integer getRATtype() { + return ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PSLocationInformationExtension2#setRATtype(java.lang.Integer) + */ + public void setRATtype(Integer ratType) { + this.ratType = ratType; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TSh5GSLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TSh5GSLocationInformation.java new file mode 100644 index 000000000..948e1a4ee --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TSh5GSLocationInformation.java @@ -0,0 +1,265 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; +import net.java.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tSh-5GSLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 	    
+ * 		    
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 			
+ * 		
+ *   
+ * 	
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSh-5GSLocationInformation", propOrder = { + "nrCellGlobalId", + "eUTRANCellGlobalId", + "trackingAreaId", + "geographicalInformation", + "amfAddress", + "smsfAddress", + "currentLocationRetrieved", + "ageOfLocationInformation", + "visitedPLMNID", + "localTimeZone", + "ratType", + "extension", + "any" +}) + +public class TSh5GSLocationInformation implements Sh5GSLocationInformation { + + @XmlElement(name = "NRCellGlobalId") + protected String nrCellGlobalId; + @XmlElement(name = "E-UTRANCellGlobalId") + protected String eUTRANCellGlobalId; + @XmlElement(name = "TrackingAreaId") + protected String trackingAreaId; + @XmlElement(name = "GeographicalInformation") + protected String geographicalInformation; + @XmlElement(name = "AMFAddress") + protected String amfAddress; + @XmlElement(name = "SMSFAddress") + protected String smsfAddress; + @XmlElement(name = "CurrentLocationRetrieved") + protected Boolean currentLocationRetrieved; + @XmlElement(name = "AgeOfLocationInformation") + protected Integer ageOfLocationInformation; + @XmlElement(name = "VisitedPLMNID") + protected Integer visitedPLMNID; + @XmlElement(name = "LocalTimeZone") + protected TLocalTimeZone localTimeZone; + @XmlElement(name = "RATtype") + protected Integer ratType; + @XmlElement(name = "Extension") + protected TExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getNRCellGlobalId() + */ + public String getNRCellGlobalId() { + return nrCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setNRCellGlobalId(java.lang.String) + */ + public void setNRCellGlobalId(String nrCellGlobalId) { + this.nrCellGlobalId = nrCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getEUTRANCellGlobalId() + */ + public String getEUTRANCellGlobalId() { + return eUTRANCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setEUTRANCellGlobalId(java.lang.String) + */ + public void setEUTRANCellGlobalId(String eUTRANCellGlobalId) { + this.eUTRANCellGlobalId = eUTRANCellGlobalId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getTrackingAreaId() + */ + public String getTrackingAreaId() { + return trackingAreaId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setTrackingAreaId(java.lang.String) + */ + public void setTrackingAreaId(String trackingAreaId) { + this.trackingAreaId = trackingAreaId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getGeographicalInformation() + */ + public String getGeographicalInformation() { + return geographicalInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setGeographicalInformation(java.lang.String) + */ + public void setGeographicalInformation(String geographicalInformation) { + this.geographicalInformation = geographicalInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getAMFAddress() + */ + public String getAMFAddress() { + return amfAddress; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setAMFAddress(java.lang.String) + */ + public void setAMFAddress(String amfAddress) { + this.amfAddress = amfAddress; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getSMSFAddress() + */ + public String getSMSFAddress() { + return smsfAddress; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setSMSFAddress(java.lang.String) + */ + public void setSMSFAddress(String smfAddress) { + this.smsfAddress = smsfAddress; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#isCurrentLocationRetrieved() + */ + public Boolean isCurrentLocationRetrieved() { + return currentLocationRetrieved; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setCurrentLocationRetrieved(java.lang.Boolean) + */ + public void setCurrentLocationRetrieved(Boolean currentLocationRetrieved) { + this.currentLocationRetrieved = currentLocationRetrieved; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getAgeOfLocationInformation() + */ + public Integer getAgeOfLocationInformation() { + return ageOfLocationInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setAgeOfLocationInformation(java.lang.Integer) + */ + public void setAgeOfLocationInformation(Integer ageOfLocationInformation) { + this.ageOfLocationInformation = ageOfLocationInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getVisitedPLMNID() + */ + public Integer getVisitedPLMNID() { + return visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setVisitedPLMNID(java.lang.Integer) + */ + public void setVisitedPLMNID(Integer visitedPLMNID) { + this.visitedPLMNID = visitedPLMNID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getLocalTimeZone() + */ + public LocalTimeZone getLocalTimeZone() { + return (LocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setLocalTimeZone(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone) + */ + public void setLocalTimeZone(LocalTimeZone localTimeZone) { + this.localTimeZone = (TLocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getRATtype() + */ + public Integer getRATtype() { + return ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setRATtype(java.lang.Integer) + */ + public void setRATtype(Integer ratType) { + this.ratType = ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension2.java index 1b9f0e2db..06c649e19 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension2.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension2.java @@ -31,23 +31,22 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; -import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; import net.java.slee.resource.diameter.sh.events.avp.userdata.PublicIdentity; import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension2; - +import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3; /** *

Java class for tSh-Data-Extension2 complex type. * *

The following schema fragment specifies the expected content contained within this class. - * + * *

  * <complexType name="tSh-Data-Extension2">
  *   <complexContent>
  *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
  *       <sequence>
  *         <element name="DeletedIdentities" type="{}tPublicIdentity" minOccurs="0"/>
- *         <element name="Extension" type="{}tExtension" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension3" minOccurs="0"/>
  *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
  *       </sequence>
  *     </restriction>
@@ -56,6 +55,7 @@
  * 
* * @author Alexandre Mendonca + * @author Fernando Mendioroz */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tSh-Data-Extension2", propOrder = { @@ -68,7 +68,7 @@ public class TShDataExtension2 implements ShDataExtension2 { @XmlElement(name = "DeletedIdentities") protected TPublicIdentity deletedIdentities; @XmlElement(name = "Extension") - protected TExtension extension; + protected TShDataExtension3 extension; @XmlAnyElement(lax = true) protected List any; @@ -82,22 +82,22 @@ public PublicIdentity getDeletedIdentities() { /* (non-Javadoc) * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension2#setDeletedIdentities(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.PublicIdentity) */ - public void setDeletedIdentities(PublicIdentity value) { - this.deletedIdentities = (TPublicIdentity) value; + public void setDeletedIdentities(PublicIdentity publicIdentity) { + this.deletedIdentities = (TPublicIdentity) publicIdentity; } /* (non-Javadoc) * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension2#getExtension() */ - public Extension getExtension() { + public ShDataExtension3 getExtension() { return extension; } /* (non-Javadoc) - * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3) */ - public void setExtension(Extension value) { - this.extension = (TExtension) value; + public void setExtension(ShDataExtension3 shDataExtension3) { + this.extension = (TShDataExtension3) shDataExtension3; } /* (non-Javadoc) diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension3.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension3.java new file mode 100644 index 000000000..7a03cff9f --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension3.java @@ -0,0 +1,88 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3; +import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4; +import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformation; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tSh-Data-Extension3 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension3">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="TADSinformation" type="{}tTADSinformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension4" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSh-Data-Extension3", propOrder = { + "tadsInformation", + "extension", + "any" +}) +public class TShDataExtension3 implements ShDataExtension3 { + + @XmlElement(name = "TADSinformation") + protected TTADSInformation tadsInformation; + @XmlElement(name = "Extension") + protected TShDataExtension4 extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3#getTADSInformation() + */ + public TADSInformation getTADSInformation() { + return tadsInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3#setTADSInformation(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation) + */ + public void setTADSInformation(TADSInformation tadsInformation) { + this.tadsInformation = (TTADSInformation) tadsInformation; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3#getExtension() + */ + public ShDataExtension4 getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4) + */ + public void setExtension(ShDataExtension4 shDataExtension4) { + this.extension = (TShDataExtension4) shDataExtension4; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension3#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension4.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension4.java new file mode 100644 index 000000000..cef85bce1 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension4.java @@ -0,0 +1,106 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation; +import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4; +import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tSh-Data-Extension4 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension4">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="EPSUserState" type="{}tPSUserState" minOccurs="0"/>
+ *         <element name="EPSLocationInformation" type="{}tEPSLocationInformation" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension5" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "tSh-Data-Extension4", propOrder = {
+    "epsUserState",
+    "epsLocationInformation",
+    "extension",
+    "any"
+})
+public class TShDataExtension4 implements ShDataExtension4 {
+
+    @XmlElement(name = "EPSUserState")
+    protected Short epsUserState;
+    @XmlElement(name = "EPSLocationInformation")
+    protected TEPSLocationInformation epsLocationInformation;
+    @XmlElement(name = "Extension")
+    protected TShDataExtension5 extension;
+    @XmlAnyElement(lax = true)
+    protected List any;
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#getEPSUserState()
+     */
+    public Short getEPSUserState() {
+        return epsUserState;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#setEPSUserState(java.lang.Short)
+     */
+    public void setEPSUserState(Short epsUserState) {
+        this.epsUserState = epsUserState;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#getEPSLocationInformation()
+     */
+    public EPSLocationInformation getEPSLocationInformation() {
+        return epsLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#setEPSLocationInformation(net.java.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation)
+     */
+    public void setEPSLocationInformation(EPSLocationInformation epsLocationInformation) {
+        this.epsLocationInformation = (TEPSLocationInformation) epsLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#getExtension()
+     */
+    public ShDataExtension5 getExtension() {
+        return extension;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5)
+     */
+    public void setExtension(ShDataExtension5 shDataExtension5) {
+        this.extension = (TShDataExtension5) shDataExtension5;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension4#getAny()
+     */
+    public List getAny() {
+        if (any == null) {
+            any = new ArrayList();
+        }
+        return this.any;
+    }
+
+}
diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension5.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension5.java
new file mode 100644
index 000000000..a532cde57
--- /dev/null
+++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension5.java
@@ -0,0 +1,123 @@
+package org.mobicents.slee.resource.diameter.sh.events.avp.userdata;
+
+import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 

Java class for tSh-Data-Extension5 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension5">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMSI" type="{}tIMSI" minOccurs="0"/>
+ *         <element name="TWANLocationInformation" type="{}tTWANLocationInformation" minOccurs="0"/>
+ *         <element name="IMSPrivateUserIdentity" type="{}tIMSPrivateUserIdentity" maxOccurs="unbounded" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension6" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "tSh-Data-Extension5", propOrder = {
+    "imsi",
+    "twanLocationInformation",
+    "imsPrivateUserIdentity",
+    "extension",
+    "any"
+})
+public class TShDataExtension5 implements ShDataExtension5 {
+
+    @XmlElement(name = "IMSI")
+    protected String imsi;
+    @XmlElement(name = "TWANLocationInformation")
+    protected TTWANLocationInformation twanLocationInformation;
+    @XmlElement(name = "IMSPrivateUserIdentity")
+    protected String imsPrivateUserIdentity;
+    @XmlElement(name = "Extension")
+    protected TShDataExtension6 extension;
+    @XmlAnyElement(lax = true)
+    protected List any;
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getIMSI()
+     */
+    public String getIMSI() {
+        return imsi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#setEPSUserState(java.lang.String)
+     */
+    public void setIMSI(String imsi) {
+        this.imsi = imsi;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getTWANLocationInformation()
+     */
+    public TWANLocationInformation getTWANLocationInformation() {
+        return twanLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#setTWANLocationInformation(net.java.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation)
+     */
+    public void setTWANLocationInformation(TWANLocationInformation twanLocationInformation) {
+        this.twanLocationInformation = (TTWANLocationInformation) twanLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getIMSPrivateUserIdentity()
+     */
+    public String getIMSPrivateUserIdentity() {
+        return imsPrivateUserIdentity;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#setIMSPrivateUserIdentity(java.lang.String)
+     */
+    public void setIMSPrivateUserIdentity(String imsPrivateUserIdentity) {
+        this.imsPrivateUserIdentity = imsPrivateUserIdentity;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getExtension()
+     */
+    public ShDataExtension6 getExtension() {
+        return extension;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6)
+     */
+    public void setExtension(ShDataExtension6 shDataExtension6) {
+        this.extension = (TShDataExtension6) shDataExtension6;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getAny()
+     */
+    public List getAny() {
+        if (any == null) {
+            any = new ArrayList();
+        }
+        return this.any;
+    }
+}
diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension6.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension6.java
new file mode 100644
index 000000000..f592dc001
--- /dev/null
+++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension6.java
@@ -0,0 +1,87 @@
+package org.mobicents.slee.resource.diameter.sh.events.avp.userdata;
+
+import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 

Java class for tSh-Data-Extension6 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension6">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMEISV" type="{}tString" minOccurs="0"/>
+ *         <element name="Extension" type="{}tSh-Data-Extension7" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "tSh-Data-Extension6", propOrder = {
+    "imeisv",
+    "extension",
+    "any"
+})
+public class TShDataExtension6 implements ShDataExtension6 {
+
+    @XmlElement(name = "IMEISV")
+    protected String imeisv;
+    @XmlElement(name = "Extension")
+    protected TShDataExtension7 extension;
+    @XmlAnyElement(lax = true)
+    protected List any;
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6#getIMEISV()
+     */
+    public String getIMEISV() {
+        return imeisv;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6#setIMEISV(java.lang.String)
+     */
+    public void setIMEISV(String imeisv) {
+        this.imeisv = imeisv;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6#getExtension()
+     */
+    public ShDataExtension7 getExtension() {
+        return extension;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7)
+     */
+    public void setExtension(ShDataExtension7 shDataExtension7) {
+        this.extension = (TShDataExtension7) shDataExtension7;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension6#getAny()
+     */
+    public List getAny() {
+        if (any == null) {
+            any = new ArrayList();
+        }
+        return this.any;
+    }
+
+}
diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension7.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension7.java
new file mode 100644
index 000000000..7db661d49
--- /dev/null
+++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TShDataExtension7.java
@@ -0,0 +1,106 @@
+package org.mobicents.slee.resource.diameter.sh.events.avp.userdata;
+
+import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 

Java class for tSh-Data-Extension7 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tSh-Data-Extension7">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="Sh-5GSLocationInformation" type="{}tSh-5GSLocationInformation" minOccurs="0"/>
+ *         <element name="Sh-5GSUserState" type="{}tPSUserState" minOccurs="0"/>
+ *         <element name="Extension" type="{}tExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ *
+ * @author  Fernando Mendioroz 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "tSh-Data-Extension7", propOrder = {
+    "sh5GSLocationInformation",
+    "sh5GSUserState",
+    "extension",
+    "any"
+})
+public class TShDataExtension7 implements ShDataExtension7 {
+
+    @XmlElement(name = "Sh-5GSLocationInformation")
+    protected TSh5GSLocationInformation sh5GSLocationInformation;
+    @XmlElement(name = "Sh-5GSUserState")
+    protected Short sh5GSUserState;
+    @XmlElement(name = "Extension")
+    protected TExtension extension;
+    @XmlAnyElement(lax = true)
+    protected List any;
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#getSh5GSLocationInformation()
+     */
+    public Sh5GSLocationInformation getSh5GSLocationInformation() {
+        return sh5GSLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#setSh5GSLocationInformation(net.java.slee.resource.diameter.sh.events.avp.userdata.Sh5GSLocationInformation)
+     */
+    public void setSh5GSLocationInformation(Sh5GSLocationInformation sh5GSLocationInformation) {
+        this.sh5GSLocationInformation = (TSh5GSLocationInformation) sh5GSLocationInformation;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#getSh5GSSUserState()
+     */
+    public Short getSh5GSSUserState() {
+        return sh5GSUserState;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#setSh5GSSUserState(java.lang.Short)
+     */
+    public void setSh5GSSUserState(Short sh5GSSUserState) {
+        this.sh5GSUserState = sh5GSSUserState;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#getExtension()
+     */
+    public Extension getExtension() {
+        return extension;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension7#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension)
+     */
+    public void setExtension(Extension value) {
+        this.extension = (TExtension) value;
+    }
+
+    /* (non-Javadoc)
+     * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.ShDataExtension5#getAny()
+     */
+    public List getAny() {
+        if (any == null) {
+            any = new ArrayList();
+        }
+        return this.any;
+    }
+
+}
diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformation.java
new file mode 100644
index 000000000..db8549c39
--- /dev/null
+++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformation.java
@@ -0,0 +1,105 @@
+package org.mobicents.slee.resource.diameter.sh.events.avp.userdata;
+
+import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformation;
+import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 

Java class for tTADSinformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformation">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="IMSVoiceOverPSSessionSupport" type="{}tIMSVoiceOverPSSessionSupport"/>
+ *         <element name="RATtype" type="{}tRATtype" minOccurs="0"/>
+ *         <element name="Extension" type="{}tTADSinformationExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTADSinformation", propOrder = { + "imsVoiceOverPSSessionSupport", + "ratType", + "extension", + "any" +}) +public class TTADSInformation implements TADSInformation { + + @XmlElement(name = "IMSVoiceOverPSSessionSupport") + protected Short imsVoiceOverPSSessionSupport; + @XmlElement(name = "RATtype") + protected Integer ratType; + @XmlElement(name = "Extension") + protected TTADSInformationExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#getIMSVoiceOverPSSessionSupport() + */ + public Short getIMSVoiceOverPSSessionSupport() { + return imsVoiceOverPSSessionSupport; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#setIMSVoiceOverPSSessionSupport(java.lang.Short) + */ + public void setIMSVoiceOverPSSessionSupport(Short imsVoiceOverPSSessionSupport) { + this.imsVoiceOverPSSessionSupport = imsVoiceOverPSSessionSupport; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#getRATType() + */ + public Integer getRATType() { + return ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#setRATType(java.lang.Integer) + */ + public void setRATType(Integer ratType) { + this.ratType = ratType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#getExtension() + */ + public TADSInformationExtension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension) + */ + public void setExtension(TADSInformationExtension tadsInformationExtension) { + this.extension = (TTADSInformationExtension) tadsInformationExtension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformation#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension.java new file mode 100644 index 000000000..33329b8de --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension.java @@ -0,0 +1,88 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + *

Java class for tTADSinformationExtension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformationExtension">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="LastUEActivityTime" type="{}tDateTime" minOccurs="0"/>
+ *         <element name="Extension" type="{}tTADSinformationExtension2" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTADSinformationExtension", propOrder = { + "lastUEActivityTime", + "extension", + "any" +}) +public class TTADSInformationExtension implements TADSInformationExtension { + + @XmlElement(name = "LastUEActivityTime") + protected Calendar lastUEActivityTime; + @XmlElement(name = "Extension") + protected TTADSInformationExtension2 extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension#getLastUEActivityTime() + */ + public Calendar getLastUEActivityTime() { + return lastUEActivityTime; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension#setLastUEActivityTime(java.lang.Calendar) + */ + public void setLastUEActivityTime(Calendar lastUEActivityTime) { + this.lastUEActivityTime = lastUEActivityTime; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension#getExtension() + */ + public TADSInformationExtension2 getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2) + */ + public void setExtension(TADSInformationExtension2 tadsInformationExtension2) { + this.extension = (TTADSInformationExtension2) tadsInformationExtension2; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension2.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension2.java new file mode 100644 index 000000000..1c1e88677 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTADSInformationExtension2.java @@ -0,0 +1,87 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tTADSinformationExtension2 complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <complexType name="tTADSinformationExtension2">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="AccessType" type="{}tAccessType" minOccurs="0"/>
+ *         <element name="Extension" type="{}tExtension" minOccurs="0"/>
+ *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTADSinformationExtension2", propOrder = { + "accessType", + "extension", + "any" +}) +public class TTADSInformationExtension2 implements TADSInformationExtension2 { + + @XmlElement(name = "AccessType") + protected Short accessType; + @XmlElement(name = "Extension") + protected TExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2#getAccessType() + */ + public Short getAccessType() { + return accessType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2#setAccessType(java.lang.Short) + */ + public void setAccessType(Short accessType) { + this.accessType = accessType; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TADSInformationExtension2#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTWANLocationInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTWANLocationInformation.java new file mode 100644 index 000000000..44c2c8d9b --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TTWANLocationInformation.java @@ -0,0 +1,192 @@ +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.LocalTimeZone; +import net.java.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; + +/** + *

Java class for tTWANLocationInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  <xs:complexType name="tTWANLocationInformation">
+ * 		<xs:sequence>
+ * 			<xs:element name="TWAN-SSID" type="tTWAN-SSID" minOccurs="0"/>
+ * 			<xs:element name="TWAN-BSSID" type="tTWAN-BSSID" minOccurs="0"/>
+ * 			<xs:element name="TWAN-PLMNID" type="tVisitedPLMNID" minOccurs="0"/>
+ * 			<xs:element name="CivicAddress" type="tCivicAddress" minOccurs="0" maxOccurs="unbounded"/>
+ * 			<xs:element name="TWANOperatorName" type="tTWANOperatorName" minOccurs="0"/>
+ * 			<xs:element name="LocalTimeZone" type="tLocalTimeZone" minOccurs="0"/>
+ * 			<xs:element name="LogicalAccessID" type="tLogicalAccessID" minOccurs="0"/>
+ * 			<xs:element name="Extension" type="tExtension" minOccurs="0"/>
+ * 			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ * 		</xs:sequence>
+ * 	</xs:complexType>
+ * 
+ * + * @author Fernando Mendioroz + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTWANLocationInformation", propOrder = { + "twanSsid", + "twanBssid", + "twanPlmnId", + "civicAddress", + "twanOperatorName", + "localTimeZone", + "logicalAccessID", + "extension", + "any" +}) +public class TTWANLocationInformation implements TWANLocationInformation { + + @XmlElement(name = "TWAN-SSID") + protected String twanSsid; + @XmlElement(name = "TWAN-BSSID") + protected String twanBssid; + @XmlElement(name = "TWAN-PLMNID") + protected Integer twanPlmnId; + @XmlElement(name = "CivicAddress") + protected byte[] civicAddress; + @XmlElement(name = "TWANOperatorName") + protected String twanOperatorName; + @XmlElement(name = "LocalTimeZone") + protected TLocalTimeZone localTimeZone; + @XmlElement(name = "LogicalAccessID") + protected String logicalAccessID; + @XmlElement(name = "Extension") + protected TExtension extension; + @XmlAnyElement(lax = true) + protected List any; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getTwanSsid() + */ + public String getTwanSsid() { + return twanSsid; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setTwanSsid(java.lang.String) + */ + public void setTwanSsid(String twanSSID) { + this.twanSsid = twanSSID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getTwanBssid() + */ + public String getTwanBssid() { + return twanBssid; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setTwanBssid(java.lang.String) + */ + public void setTwanBssid(String twanBSSID) { + this.twanBssid = twanBSSID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getTwanPlmnId() + */ + public Integer getTwanPlmnId() { + return twanPlmnId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setTwanPlmnId(java.lang.Integer) + */ + public void setTwanPlmnId(Integer twanPlmnId) { + this.twanPlmnId = twanPlmnId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getCivicAddress() + */ + public byte[] getCivicAddress() { + return civicAddress; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setCivicAddress(java.lang.byte[]) + */ + public void setCivicAddress(byte[] twanPlmnId) { + this.civicAddress = twanPlmnId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getTwanOperatorName() + */ + public String getTwanOperatorName() { + return twanOperatorName; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setTwanOperatorName(java.lang.String) + */ + public void setTwanOperatorName(String twanOperatorName) { + this.twanOperatorName = twanOperatorName; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getLocalTimeZone() + */ + public LocalTimeZone getLocalTimeZone() { + return localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setLocalTimeZone(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TLocalTimeZone) + */ + public void setLocalTimeZone(LocalTimeZone localTimeZone) { + this.localTimeZone = (TLocalTimeZone) localTimeZone; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getLogicalAccessID() + */ + public String getLogicalAccessID() { + return logicalAccessID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setLogicalAccessID(java.lang.String) + */ + public void setLogicalAccessID(String logicalAccessID) { + this.logicalAccessID = logicalAccessID; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.TWANLocationInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension value) { + this.extension = (TExtension) value; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.EPSLocationInformation#getAny() + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformation.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformation.java new file mode 100644 index 000000000..c3aaef70f --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformation.java @@ -0,0 +1,90 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation; +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +/** + *

Java class for tUserCSGInformation complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		
+ * 			
+ * 			
+ * 		
+ * 	
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tUserCSGInformation", propOrder = { + "csgId", + "extension" +}) +public class TUserCSGInformation implements UserCSGInformation { + + @XmlElement(name = "CSGId") + protected String csgId; + @XmlElement(name = "Extension") + protected TUserCSGInformationExtension extension; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation#getCSGId() + */ + public String getCSGId() { + return csgId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation#setCSGId((java.lang.String) + */ + public void setCSGId(String csgId) { + this.csgId = csgId; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation#getExtension() + */ + public UserCSGInformationExtension getExtension() { + return (UserCSGInformationExtension) extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformation#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension) + */ + public void setExtension(UserCSGInformationExtension userCSGInformationExtension) { + this.extension = (TUserCSGInformationExtension) userCSGInformationExtension; + } + +} diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformationExtension.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformationExtension.java new file mode 100644 index 000000000..e8ca78c54 --- /dev/null +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/avp/userdata/TUserCSGInformationExtension.java @@ -0,0 +1,109 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat, Inc. and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.mobicents.slee.resource.diameter.sh.events.avp.userdata; + +import net.java.slee.resource.diameter.sh.events.avp.userdata.Extension; +import net.java.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +/** + * + *

Java class for tUserCSGInformation-Extension complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ *  
+ * 		    
+ * 			    
+ * 			    
+ * 			    
+ * 		    
+ *  
+ * 
+ * + * @author Fernando Mendioroz + */ + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tUserCSGInformationExtension", propOrder = { + "accessMode", + "cmi", + "extension" +}) +public class TUserCSGInformationExtension implements UserCSGInformationExtension { + + @XmlElement(name = "AccessMode") + protected String accessMode; + @XmlElement(name = "CMI") + protected Boolean cmi; + @XmlElement(name = "Extension") + protected TExtension extension; + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#getAccessMode() + */ + public String getAccessMode() { + return accessMode; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#setAccessMode((java.lang.String) + */ + public void setAccessMode(String accessMode) { + this.accessMode = accessMode; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#getCMI() + */ + public Boolean getCMI() { + return cmi; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#setCSGId((java.lang.Boolean) + */ + public void setCMI(Boolean cmi) { + this.cmi = cmi; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#getExtension() + */ + public Extension getExtension() { + return extension; + } + + /* (non-Javadoc) + * @see org.mobicents.slee.resource.diameter.sh.events.avp.userdata.UserCSGInformationExtension#setExtension(org.mobicents.slee.resource.diameter.sh.events.avp.userdata.Extension) + */ + public void setExtension(Extension extension) { + this.extension = (TExtension) extension; + } + +} diff --git a/resources/diameter-sh-client/common/library/pom.xml b/resources/diameter-sh-client/common/library/pom.xml index b71a08b10..310e17150 100644 --- a/resources/diameter-sh-client/common/library/pom.xml +++ b/resources/diameter-sh-client/common/library/pom.xml @@ -4,28 +4,28 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-common-library - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ra - ${pom.version} + ${project.version} diff --git a/resources/diameter-sh-client/common/pom.xml b/resources/diameter-sh-client/common/pom.xml index 33e8f1386..7be1f182a 100644 --- a/resources/diameter-sh-client/common/pom.xml +++ b/resources/diameter-sh-client/common/pom.xml @@ -8,12 +8,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-common - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} events diff --git a/resources/diameter-sh-client/common/ra/pom.xml b/resources/diameter-sh-client/common/ra/pom.xml index 19ba1349c..239065f54 100644 --- a/resources/diameter-sh-client/common/ra/pom.xml +++ b/resources/diameter-sh-client/common/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-common-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ratype ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ra ${project.version} diff --git a/resources/diameter-sh-client/common/ra/src/main/resources/ShDataType.xsd b/resources/diameter-sh-client/common/ra/src/main/resources/ShDataType.xsd index 3d1a27eb9..a031166a0 100644 --- a/resources/diameter-sh-client/common/ra/src/main/resources/ShDataType.xsd +++ b/resources/diameter-sh-client/common/ra/src/main/resources/ShDataType.xsd @@ -86,11 +86,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maximum priority level + + + + + + + + Priority level 1 + + + + + + + + Priority level 2 + + + + + + + + Priority level 3 + + + + + + + + Minimum priority level + + + + + + @@ -207,7 +274,7 @@ - + @@ -298,6 +365,22 @@ + + + + + + + + + + + + + + + + @@ -353,9 +436,61 @@ + + + + + + + + MME notified that the UE is reachable again + + + + + + + + + + + + + SGSN notified that the UE is reachable again + + + + + + + + + + + + + AMF3GPP notified that the UE is reachable again + + + + + + + + + + + + + AMFnon3GPP notified that the UE is reachable again + + + + + - + @@ -388,6 +523,14 @@ + + + + + Originating Session for call diversion + + + @@ -426,6 +569,174 @@ + + + + + + + + IMS voice is not supported + + + + + + + + IMS voice is supported + + + + + + + + Support of IMS voice is unknown + + + + + + + + + + + See subclause 5.3.31 in 3GPP TS 29.212 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSISDN is the MSISDN or the Basic MSISDN in case of multinumbering + + + + + + + + MSISDN is an Additional MSISDN, when feature Additional MSISDN is enabled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -443,13 +754,131 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -459,9 +888,27 @@ + + + + + + + + + + + + + + + + + + @@ -475,7 +922,6 @@ - @@ -483,6 +929,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -500,6 +1008,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -545,6 +1075,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -562,13 +1114,56 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -581,11 +1176,21 @@ + + + + + + + + + + @@ -593,7 +1198,7 @@ - + @@ -634,7 +1239,7 @@ - + @@ -654,5 +1259,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/diameter-sh-client/common/ratype/pom.xml b/resources/diameter-sh-client/common/ratype/pom.xml index 4cb98f662..e1507b823 100644 --- a/resources/diameter-sh-client/common/ratype/pom.xml +++ b/resources/diameter-sh-client/common/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-common-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-events ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-base-common-ratype ${project.version} diff --git a/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml b/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml index b1aa9bcad..7ecc75924 100644 --- a/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-sh-client/docs/pom.xml b/resources/diameter-sh-client/docs/pom.xml index 0bdd8603a..c1dd54ec5 100644 --- a/resources/diameter-sh-client/docs/pom.xml +++ b/resources/diameter-sh-client/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs diff --git a/resources/diameter-sh-client/docs/sources-restcomm/pom.xml b/resources/diameter-sh-client/docs/sources-restcomm/pom.xml index 7e570fc5b..032eeb115 100644 --- a/resources/diameter-sh-client/docs/sources-restcomm/pom.xml +++ b/resources/diameter-sh-client/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-sh-client/docs/sources/pom.xml b/resources/diameter-sh-client/docs/sources/pom.xml index 3c450d484..50ead8b7d 100644 --- a/resources/diameter-sh-client/docs/sources/pom.xml +++ b/resources/diameter-sh-client/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-sources diff --git a/resources/diameter-sh-client/du/pom.xml b/resources/diameter-sh-client/du/pom.xml index fa48924b1..5af41d754 100644 --- a/resources/diameter-sh-client/du/pom.xml +++ b/resources/diameter-sh-client/du/pom.xml @@ -4,35 +4,35 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-library - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-ra - ${pom.version} + ${project.version} @@ -40,7 +40,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -65,7 +65,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-sh-client/events/pom.xml b/resources/diameter-sh-client/events/pom.xml index 58716999f..a537188a2 100644 --- a/resources/diameter-sh-client/events/pom.xml +++ b/resources/diameter-sh-client/events/pom.xml @@ -4,18 +4,18 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-events - ${pom.version} + ${project.version} diff --git a/resources/diameter-sh-client/pom.xml b/resources/diameter-sh-client/pom.xml index d1050fc4a..3ef58d254 100644 --- a/resources/diameter-sh-client/pom.xml +++ b/resources/diameter-sh-client/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-sh-client/ra/pom.xml b/resources/diameter-sh-client/ra/pom.xml index df43ac77d..6abed062f 100644 --- a/resources/diameter-sh-client/ra/pom.xml +++ b/resources/diameter-sh-client/ra/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ra - ${pom.version} + ${project.version} diff --git a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/DiameterShClientResourceAdaptor.java b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/DiameterShClientResourceAdaptor.java index ce5dbf1da..42cfd8716 100644 --- a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/DiameterShClientResourceAdaptor.java +++ b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/DiameterShClientResourceAdaptor.java @@ -22,7 +22,7 @@ package org.mobicents.slee.resource.diameter.sh.client; -import static org.jdiameter.client.impl.helpers.Parameters.MessageTimeOut; +import static org.jdiameter.server.impl.helpers.Parameters.MessageTimeOut; import java.io.IOException; import java.lang.management.ManagementFactory; @@ -65,6 +65,7 @@ import net.java.slee.resource.diameter.sh.events.UserDataAnswer; import org.jboss.mx.util.MBeanServerLocator; +import org.jboss.system.Service; import org.jdiameter.api.Answer; import org.jdiameter.api.ApplicationId; import org.jdiameter.api.AvpDataException; @@ -261,8 +262,8 @@ public void raActive() { } try { - if(tracer.isInfoEnabled()) { - tracer.info("Activating Diameter ShClient RA Entity"); + if(tracer.isFineEnabled()) { + tracer.fine("Activating Diameter ShClient RA Entity"); } this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); @@ -272,14 +273,14 @@ public void raActive() { if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { // trying to get via MBeanServer object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } else { // trying to get via locateJBoss object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } @@ -315,7 +316,7 @@ public void raActive() { } public void raStopping() { - if(tracer.isFineEnabled()) { + if (tracer.isFineEnabled()) { tracer.fine("Diameter ShClient RA :: raStopping."); } @@ -329,8 +330,8 @@ public void raStopping() { // synchronized (this.activities) { // for (ActivityHandle activityHandle : activities.keySet()) { // try { - // if(tracer.isInfoEnabled()) { - // tracer.info("Ending activity [" + activityHandle + "]"); + // if(tracer.isFineEnabled()) { + // tracer.fine("Ending activity [" + activityHandle + "]"); // } // // activities.get(activityHandle).endActivity(); @@ -341,8 +342,8 @@ public void raStopping() { // } // } - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: entityDeactivating completed."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: entityDeactivating completed."); } } @@ -356,8 +357,8 @@ public void raInactive() { // } activities = null; - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: INACTIVE completed."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: INACTIVE completed."); } } @@ -434,8 +435,8 @@ public void serviceInactive(ReceivableService serviceInfo) { // Mandatory callback methods ------------------------------------------ public void queryLiveness(ActivityHandle handle) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: queryLiveness :: handle[" + handle + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: queryLiveness :: handle[" + handle + "]."); } DiameterActivityImpl activity = (DiameterActivityImpl) activities.get((DiameterActivityHandle)handle); @@ -479,8 +480,8 @@ public void administrativeRemove(ActivityHandle handle) { // Optional callback methods ------------------------------------------- public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); } if(!(handle instanceof DiameterActivityHandle)) { return; @@ -490,8 +491,8 @@ public void eventProcessingFailed(ActivityHandle handle, FireableEventType event } public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); } if(!(handle instanceof DiameterActivityHandle)) { return; @@ -523,7 +524,8 @@ private void processAfterEventDelivery(ActivityHandle handle, FireableEventType } public void activityEnded(ActivityHandle handle) { - tracer.info("Diameter ShClient RA :: activityEnded :: handle[" + handle + "."); + if(tracer.isFineEnabled()) + tracer.fine("Diameter ShClient RA :: activityEnded :: handle[" + handle + "."); if(this.activities != null) { synchronized (this.activities) { @@ -582,11 +584,12 @@ else if (eventID == null) { * @see org.mobicents.slee.resource.diameter.base.handlers.BaseSessionCreationListener#fireEvent(java.lang.String, org.jdiameter.api.Request, org.jdiameter.api.Answer) */ public void fireEvent(String sessionId, Message message) { + DiameterMessage event = (DiameterMessage) createEvent(message); FireableEventType eventId = eventIdCache.getEventId(eventLookup, message); - this.fireEvent(event, getActivityHandle(sessionId), eventId, null, true, message.isRequest()); + boolean result = this.fireEvent(event, getActivityHandle(sessionId), eventId, null, true, message.isRequest()); } /** @@ -657,17 +660,23 @@ private DiameterMessage createEvent(Message message) { boolean isRequest = message.isRequest(); switch (commandCode) { - case PushNotificationRequestImpl.commandCode: // PNR/PNA - return isRequest ? new PushNotificationRequestImpl(message) : new PushNotificationAnswerImpl(message); - case ProfileUpdateRequestImpl.commandCode: // PUR/PUA - return isRequest ? new ProfileUpdateRequestImpl(message) : new ProfileUpdateAnswerImpl(message); - case SubscribeNotificationsRequestImpl.commandCode: // SNR/SNA - return isRequest ? new SubscribeNotificationsRequestImpl(message) : new SubscribeNotificationsAnswerImpl(message); - case net.java.slee.resource.diameter.sh.events.UserDataRequest.commandCode: // UDR/UDA - return isRequest ? new UserDataRequestImpl(message) : new UserDataAnswerImpl(message); - - default: - return new ExtensionDiameterMessageImpl(message); + case PushNotificationRequestImpl.commandCode: // PNR/PNA + return isRequest ? new PushNotificationRequestImpl(message) : new PushNotificationAnswerImpl(message); + case ProfileUpdateRequestImpl.commandCode: // PUR/PUA + return isRequest ? new ProfileUpdateRequestImpl(message) : new ProfileUpdateAnswerImpl(message); + case SubscribeNotificationsRequestImpl.commandCode: // SNR/SNA + return isRequest ? new SubscribeNotificationsRequestImpl(message) : new SubscribeNotificationsAnswerImpl(message); + case net.java.slee.resource.diameter.sh.events.UserDataRequest.commandCode: // UDR/UDA + //return isRequest ? new UserDataRequestImpl(message) : new UserDataAnswerImpl(message); + if (isRequest) + return new UserDataRequestImpl(message); + else { + UserDataAnswer uda = new UserDataAnswerImpl(message); + return uda; + } + + default: + return new ExtensionDiameterMessageImpl(message); } } @@ -706,8 +715,8 @@ private void activityCreated(DiameterActivity ac, boolean suspended) { // Put it into our activites map activities.put(activity.getActivityHandle(), activity); - if(tracer.isInfoEnabled()) { - tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { @@ -739,8 +748,8 @@ private synchronized void initStack() throws Exception { this.stack = this.diameterMux.getStack(); this.messageTimeout = stack.getMetaData().getConfiguration().getLongValue(MessageTimeOut.ordinal(), (Long) MessageTimeOut.defValue()); - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: Successfully initialized stack."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: Successfully initialized stack."); } } private void initActivitiesMgmt() { @@ -771,8 +780,8 @@ public void receivedSuccessMessage(Request req, Answer ans) { } try { - if(tracer.isInfoEnabled()) { - tracer.info("Received Message Result-Code: " + ans.getResultCode().getUnsigned32()); + if(tracer.isFineEnabled()) { + tracer.fine("Received Message Result-Code: " + ans.getResultCode().getUnsigned32()); } } catch (AvpDataException ignore) { @@ -781,8 +790,8 @@ public void receivedSuccessMessage(Request req, Answer ans) { } public void timeoutExpired(Request req) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShClient RA :: timeoutExpired :: " + "Request[" + req + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShClient RA :: timeoutExpired :: " + "Request[" + req + "]."); } try { @@ -865,8 +874,8 @@ public void doUserDataAnswerEvent(ClientShSession appSession, UserDataRequest re } public void stateChanged(Enum oldState, Enum newState) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter Sh ClientSessionFactory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter Sh ClientSessionFactory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); } } @@ -875,8 +884,8 @@ public void stateChanged(Enum oldState, Enum newState) { */ @Override public void stateChanged(AppSession source, Enum oldState, Enum newState) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter Sh ClientSessionFactory :: stateChanged :: source["+ source +"] :: oldState[" + oldState + "], newState[" + newState + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter Sh ClientSessionFactory :: stateChanged :: source["+ source +"] :: oldState[" + oldState + "], newState[" + newState + "]"); } // DiameterActivityHandle dah = getActivityHandle(source.getSessionId()); // Object activity = getActivity(dah); diff --git a/resources/diameter-sh-client/ratype/pom.xml b/resources/diameter-sh-client/ratype/pom.xml index b98803e96..fc656ffd9 100644 --- a/resources/diameter-sh-client/ratype/pom.xml +++ b/resources/diameter-sh-client/ratype/pom.xml @@ -4,23 +4,23 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-client-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ratype - ${pom.version} + ${project.version} diff --git a/resources/diameter-sh-client/ratype/src/main/java/net/java/slee/resource/diameter/sh/client/ShClientMessageFactory.java b/resources/diameter-sh-client/ratype/src/main/java/net/java/slee/resource/diameter/sh/client/ShClientMessageFactory.java index 42f586386..2c9ca906a 100644 --- a/resources/diameter-sh-client/ratype/src/main/java/net/java/slee/resource/diameter/sh/client/ShClientMessageFactory.java +++ b/resources/diameter-sh-client/ratype/src/main/java/net/java/slee/resource/diameter/sh/client/ShClientMessageFactory.java @@ -42,58 +42,58 @@ public interface ShClientMessageFactory extends MessageFactory { /** * Create a UserDataRequest using the given parameters to populate the User-Identity and Data-Reference AVPs. - * @return a UserDataRequest object that can be sent using {@link ShClientActivity#sendUserDataRequest(net.java.slee.resource.diameter.sh.events.types.UserDataRequest)} + * @return a UserDataRequest object that can be sent using {@link ShClientActivity#sendUserDataRequest(net.java.slee.resource.diameter.sh.events.UserDataRequest)} */ UserDataRequest createUserDataRequest(UserIdentityAvp userIdentity, DataReferenceType reference); /** * Create an empty UserDataRequest that will need to have AVPs set on it before being sent. - * @return a UserDataRequest object that can be sent using {@link ShClientActivity#sendUserDataRequest(net.java.slee.resource.diameter.sh.events.types.UserDataRequest)} + * @return a UserDataRequest object that can be sent using {@link ShClientActivity#sendUserDataRequest(net.java.slee.resource.diameter.sh.events.UserDataRequest)} */ UserDataRequest createUserDataRequest(); /** * Create a ProfileUpdateRequest using the given parameters to populate the User-Identity, Data-Reference and User-Data AVPs. - * @return a ProfileUpdateRequest object that can be sent using {@link ShClientActivity#sendProfileUpdateRequest(net.java.slee.resource.diameter.sh.events.types.ProfileUpdateRequest)} + * @return a ProfileUpdateRequest object that can be sent using {@link ShClientActivity#sendProfileUpdateRequest(net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest)} */ ProfileUpdateRequest createProfileUpdateRequest(UserIdentityAvp userIdentity, DataReferenceType reference, byte[] userData); /** * Create an empty ProfileUpdateRequest that will need to have AVPs set on it before being sent. * - * @return a ProfileUpdateRequest object that can be sent using {@link ShClientActivity#sendProfileUpdateRequest(net.java.slee.resource.diameter.sh.events.types.ProfileUpdateRequest)} + * @return a ProfileUpdateRequest object that can be sent using {@link ShClientActivity#sendProfileUpdateRequest(net.java.slee.resource.diameter.sh.events.ProfileUpdateRequest)} */ ProfileUpdateRequest createProfileUpdateRequest(); /** * Create a SubscribeNotificationsRequest using the given parameters to populate the User-Identity, Data-Reference and Subs-Req-Type AVPs. * - * @return a SubscribeNotificationsRequest object that can be sent using {@link ShClientActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.types.SubscribeNotificationsRequest)} - * or {@link ShClientNotificationActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.types.SubscribeNotificationsRequest)} + * @return a SubscribeNotificationsRequest object that can be sent using {@link ShClientActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.SubscribeNotificationsRequest)} + * or {@link ShClientSubscriptionActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.SubscribeNotificationsRequest)} */ SubscribeNotificationsRequest createSubscribeNotificationsRequest(UserIdentityAvp userIdentity, DataReferenceType reference, SubsReqType subscriptionType); /** * Create an empty SubscribeNotificationsRequest that will need to have AVPs set on it before being sent. * - * @return a SubscribeNotificationsRequest object that can be sent using {@link ShClientActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.types.SubscribeNotificationsRequest)} - * or {@link ShClientNotificationActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.types.SubscribeNotificationsRequest)} + * @return a SubscribeNotificationsRequest object that can be sent using {@link ShClientActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.SubscribeNotificationsRequest)} + * or {@link ShClientSubscriptionActivity#sendSubscribeNotificationsRequest(net.java.slee.resource.diameter.sh.events.SubscribeNotificationsRequest)} */ SubscribeNotificationsRequest createSubscribeNotificationsRequest(); /** * Create a PushNotificationAnswer containing a Result-Code or Experimental-Result AVP populated with the given value. * If isExperimentalResultCode is true, the resultCode parameter will be set - * in a {@link org.mobicents.slee.resource.diameter.base.types.ExperimentalResultAvp} AVP, if it is false it + * in a {@link net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp} AVP, if it is false it * will be sent as a standard Result-Code AVP. * - * @return a PushNotificationAnswer object that can be sent using {@link ShClientNotificationActivity#sendPushNotificationAnswer(net.java.slee.resource.diameter.sh.events.types.PushNotificationAnswer)} + * @return a PushNotificationAnswer object that can be sent using {@link ShClientSubscriptionActivity#sendPushNotificationAnswer(net.java.slee.resource.diameter.sh.events.PushNotificationAnswer)} */ PushNotificationAnswer createPushNotificationAnswer(PushNotificationRequest request, long resultCode, boolean isExperimentalResultCode); /** * Create an empty PushNotificationAnswer that will need to have AVPs set on it before being sent. - * @return a PushNotificationAnswer object that can be sent using {@link ShClientNotificationActivity#sendPushNotificationAnswer(net.java.slee.resource.diameter.sh.events.types.PushNotificationAnswer)} + * @return a PushNotificationAnswer object that can be sent using {@link ShClientSubscriptionActivity#sendPushNotificationAnswer(net.java.slee.resource.diameter.sh.events.PushNotificationAnswer)} */ PushNotificationAnswer createPushNotificationAnswer(PushNotificationRequest request); } diff --git a/resources/diameter-sh-client/release/pom.xml b/resources/diameter-sh-client/release/pom.xml index 714a9a873..6b5cfe04a 100644 --- a/resources/diameter-sh-client/release/pom.xml +++ b/resources/diameter-sh-client/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-sh-client/testsuite/pom.xml b/resources/diameter-sh-client/testsuite/pom.xml index af9858b6f..9c584fc41 100644 --- a/resources/diameter-sh-client/testsuite/pom.xml +++ b/resources/diameter-sh-client/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-client-testsuite diff --git a/resources/diameter-sh-client/testsuite/src/test/java/org/mobicents/slee/resource/diameter/sh/client/tests/avp/UserDataAvpValidationTest.java b/resources/diameter-sh-client/testsuite/src/test/java/org/mobicents/slee/resource/diameter/sh/client/tests/avp/UserDataAvpValidationTest.java index 9f6ee1fd8..5abe30bc0 100644 --- a/resources/diameter-sh-client/testsuite/src/test/java/org/mobicents/slee/resource/diameter/sh/client/tests/avp/UserDataAvpValidationTest.java +++ b/resources/diameter-sh-client/testsuite/src/test/java/org/mobicents/slee/resource/diameter/sh/client/tests/avp/UserDataAvpValidationTest.java @@ -68,14 +68,197 @@ public void testUserDataAvpValidation() { assertFalse("Test result passed for data not following schema, it should have failed.", shAvpFactory.validateUserData(userData)); - userData=("" + - "" + - "" + - "sip:john.doe@hp.com" + - "" + - "" + - "1" + - ""+ + userData=("\n" + + "\n" + + "\t\n" + + "\t\tsip:john.doe@hp.com\n" + + "\t\t59899077937\n" + + "\t\t\n" + + "\t\t\t2\n" + + "\t\t\thttp://www.jainsleediameter.com\n" + + "\t\t\t\n" + + "\t\t\t\thttp://www.jain-slee.diameter.com\n" + + "\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\t59899077938\n" + + "\t\t\t\t\t\t1\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\tsip:john.doe2@hw.com\n" + + "\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t\n" + + "\t\n" + + "\t\tsip:scsf@02.com\n" + + "\t\t\n" + + "\t\t\t\n" + + "\t\t\t\t0\n" + + "\t\t\t\t\n" + + "\t\t\t\t\tfalse\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\tfalse\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t1\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\t\tsip:scsf243@02.com\n" + + "\t\t\t\t\t0\n" + + "\t\t\t\t\tservice\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\t0\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t\t1\n" + + "\t\t\n" + + "\t\t\taaa://ocs:8028\n" + + "\t\t\taaa://ocs:8031\n" + + "\t\t\taaa://ocf:9421\n" + + "\t\t\taaa://ocf:9425\n" + + "\t\t\t\n" + + "\t\t\t\t1\n" + + "\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\tdsai\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t10.0.0.2\n" + + "\t\t\t\t\t\t2001:db8:3c4d\n" + + "\t\t\t\t\t\t02BBCCFFFEDD1122\n" + + "\t\t\t\t\t\t1\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t5989901019\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t\n" + + "\t\n" + + "\t\thJdlMCRFmQk=\n" + + "\t\tNzIBAAFOSg==\n" + + "\t\tEBu2ELlt9wA=\n" + + "\t\tAxCiJcdOOq8ZAQ==\n" + + "\t\t\n" + + "\t\t\t
NTk4OTc4OTM1==
\n" + + "\t\t
\n" + + "\t\t\n" + + "\t\t\t
NTk4OTc4OTM0==
\n" + + "\t\t
\n" + + "\t\t0\n" + + "\t\t0\n" + + "\t\t\n" + + "\t\t\t\n" + + "\t\t\t\tODE5MQ==\n" + + "\t\t\t\n" + + "\t\t\t\n" + + "\t\t\t\tBfKRAk4nFQ==\n" + + "\t\t\t\tBfKRAwY=\n" + + "\t\t\t\t\n" + + "\t\t\t\t\t" + + "\t\t\t\t\t\t-3\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t
\n" + + "\t\n" + + "\t\tNzIBAAFOSg==\n" + + "\t\tR/gQOTUy\n" + + "\t\tEKEgAU402RI=\n" + + "\t\tAxCiJcdOOq8ZAP==\n" + + "\t\t\n" + + "\t\t\t
NTk4OTc4OTM2==
\n" + + "\t\t
\n" + + "\t\t1\n" + + "\t\t5\n" + + "\t\t\n" + + "\t\t\t\n" + + "\t\t\t\tODE5MQ==\n" + + "\t\t\t\n" + + "\t\t\t\n" + + "\t\t\t\tBfKRA=\n" + + "\t\t\t\t" + + "\t\t\t\t\t-3\n" + + "\t\t\t\t\t0\n" + + "\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\t\t1004\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t
\n" + + "\t\n" + + "\t\t\n" + + "\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\t\t4\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\tBfKRAk4nFQ==\n" + + "\t\t\t\t\t\tBfKRAwY=\n" + + "\t\t\t\t\t\tEKEgAU402RI=\n" + + "\t\t\t\t\t\tAxCiJcdOOq8ZAP==\n" + + "\t\t\t\t\t\tMMEC18.MMEGI8001.MME.EPC.MNC019.MCC502.3GPPNETWORK.ORG\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\tODE5MQ==\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t951800\n" + + "\t\t\t\t\t\t\t" + + "\t\t\t\t\t\t\t\t-3\n" + + "\t\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\t1004\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\t\t95180077395570\n" + + "\t\t\t\t\t\t\t\t\tBfKRAk4nFQ==\n" + + "\t\t\t\t\t\t\t\t\tBfKRAwY=\n" + + "\t\t\t\t\t\t\t\t\tEKEgAU402RI=\n" + + "\t\t\t\t\t\t\t\t\tamf1.cluster1.net2.amf.5gc.mnc012.mcc345.3gppnetwork.org\n" + + "\t\t\t\t\t\t\t\t\tset12. smfset.5gc.mnc012.mcc345.3gppnetwork.org\n" + + "\t\t\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\t\t951810\n" + + "\t\t\t\t\t\t\t\t\t" + + "\t\t\t\t\t\t\t\t\t\t-3\n" + + "\t\t\t\t\t\t\t\t\t\t0\n" + + "\t\t\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\t\t1006\n" + + "\t\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\t\n" + + "\t\t\t\t\t\t\n" + + "\t\t\t\t\t\n" + + "\t\t\t\t\n" + + "\t\t\t\n" + + "\t\t\n" + + "\t\n" + "
").getBytes(); assertTrue("Test result failed for valid data, it should have passed.", shAvpFactory.validateUserData(userData)); diff --git a/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml b/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml index 291d8f796..31ece27dd 100644 --- a/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-jdocbook-restcomm @@ -58,9 +58,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-docs-sources-restcomm - ${pom.version} + ${project.version} jar true ${project.build.directory}/docbook/resources diff --git a/resources/diameter-sh-server/docs/pom.xml b/resources/diameter-sh-server/docs/pom.xml index 791a88291..7f9501671 100644 --- a/resources/diameter-sh-server/docs/pom.xml +++ b/resources/diameter-sh-server/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs diff --git a/resources/diameter-sh-server/docs/sources-restcomm/pom.xml b/resources/diameter-sh-server/docs/sources-restcomm/pom.xml index 4e2f2e12a..1ebc5b1e9 100644 --- a/resources/diameter-sh-server/docs/sources-restcomm/pom.xml +++ b/resources/diameter-sh-server/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-sources-restcomm @@ -40,9 +40,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-sh-server/docs/sources/pom.xml b/resources/diameter-sh-server/docs/sources/pom.xml index 7965e5a72..24af36a48 100644 --- a/resources/diameter-sh-server/docs/sources/pom.xml +++ b/resources/diameter-sh-server/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-sources diff --git a/resources/diameter-sh-server/du/pom.xml b/resources/diameter-sh-server/du/pom.xml index 01e52d010..fabcb1c7d 100644 --- a/resources/diameter-sh-server/du/pom.xml +++ b/resources/diameter-sh-server/du/pom.xml @@ -4,35 +4,35 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - - ${pom.groupId} + - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-ra - ${pom.version} + ${project.version} @@ -40,7 +40,7 @@ du-jboss5 - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -65,7 +65,7 @@ true - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/resources/diameter-sh-server/events/pom.xml b/resources/diameter-sh-server/events/pom.xml index 50f616dca..7037094c8 100644 --- a/resources/diameter-sh-server/events/pom.xml +++ b/resources/diameter-sh-server/events/pom.xml @@ -4,16 +4,16 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-events ${project.version} diff --git a/resources/diameter-sh-server/pom.xml b/resources/diameter-sh-server/pom.xml index 64c712302..e3557c44f 100644 --- a/resources/diameter-sh-server/pom.xml +++ b/resources/diameter-sh-server/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. diff --git a/resources/diameter-sh-server/ra/pom.xml b/resources/diameter-sh-server/ra/pom.xml index 2e4d8eaa7..5438b755a 100644 --- a/resources/diameter-sh-server/ra/pom.xml +++ b/resources/diameter-sh-server/ra/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-ratype - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ra ${project.version} diff --git a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/DiameterShServerResourceAdaptor.java b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/DiameterShServerResourceAdaptor.java index 3b0483cb6..c017d4ba4 100644 --- a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/DiameterShServerResourceAdaptor.java +++ b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/DiameterShServerResourceAdaptor.java @@ -247,8 +247,8 @@ public void raActive() { } try { - if(tracer.isInfoEnabled()) { - tracer.info("Activating Diameter ShServer RA Entity"); + if(tracer.isFineEnabled()) { + tracer.fine("Activating Diameter ShServer RA Entity"); } this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); @@ -258,14 +258,14 @@ public void raActive() { if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { // trying to get via MBeanServer object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } else { // trying to get via locateJBoss object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } @@ -316,8 +316,8 @@ public void raStopping() { //synchronized (this.activities) { // for (ActivityHandle activityHandle : activities.keySet()) { // try { - // if(tracer.isInfoEnabled()) { - // tracer.info("Ending activity [" + activityHandle + "]"); + // if(tracer.isFineEnabled()) { + // tracer.fine("Ending activity [" + activityHandle + "]"); // } // // activities.get(activityHandle).endActivity(); @@ -328,8 +328,8 @@ public void raStopping() { // } //} - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: entityDeactivating completed."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: entityDeactivating completed."); } } @@ -343,8 +343,8 @@ public void raInactive() { //} activities = null; - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: INACTIVE completed."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: INACTIVE completed."); } } @@ -421,7 +421,8 @@ public void serviceInactive(ReceivableService serviceInfo) { // Mandatory callback methods ------------------------------------------ public void queryLiveness(ActivityHandle handle) { - tracer.info("Diameter ShServer RA :: queryLiveness :: handle[" + handle + "]."); + if(tracer.isFineEnabled()) + tracer.fine("Diameter ShServer RA :: queryLiveness :: handle[" + handle + "]."); if(!(handle instanceof DiameterActivityHandle)) { return; } @@ -468,8 +469,8 @@ public void administrativeRemove(ActivityHandle handle) { // Optional callback methods ------------------------------------------- public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); } if(!(handle instanceof DiameterActivityHandle)) { return; @@ -479,8 +480,8 @@ public void eventProcessingFailed(ActivityHandle handle, FireableEventType event } public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); } if(!(handle instanceof DiameterActivityHandle)) { return; @@ -513,7 +514,8 @@ private void processAfterEventDelivery(ActivityHandle handle, FireableEventType } public void activityEnded(ActivityHandle handle) { - tracer.info("Diameter ShServer RA :: activityEnded :: handle[" + handle + "."); + if(tracer.isFineEnabled()) + tracer.fine("Diameter ShServer RA :: activityEnded :: handle[" + handle + "."); if(!(handle instanceof DiameterActivityHandle)) { return; } @@ -525,7 +527,7 @@ public void activityEnded(ActivityHandle handle) { } public void activityUnreferenced(ActivityHandle handle) { - if(tracer.isFineEnabled()) { + if (tracer.isFineEnabled()) { tracer.fine("Diameter ShServer RA :: activityUnreferenced :: handle[" + handle + "]."); } //this.activityEnded(handle); @@ -731,8 +733,8 @@ private void activityCreated(DiameterActivity ac, boolean suspended) { // Put it into our activities map activities.put(activity.getActivityHandle(), activity); - if(tracer.isInfoEnabled()) { - tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { @@ -767,8 +769,8 @@ private synchronized void initStack() throws Exception { this.raProvider = new ShServerProviderImpl(this); this.shAvpFactory = new DiameterShAvpFactoryImpl(this.baseAvpFactory); - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: Successfully initialized stack."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: Successfully initialized stack."); } } /** @@ -802,8 +804,8 @@ public void receivedSuccessMessage(Request req, Answer ans) { } try { - if(tracer.isInfoEnabled()) { - tracer.info("Received Message Result-Code: " + ans.getResultCode().getUnsigned32()); + if(tracer.isFineEnabled()) { + tracer.fine("Received Message Result-Code: " + ans.getResultCode().getUnsigned32()); } } catch (AvpDataException ignore) { @@ -812,8 +814,8 @@ public void receivedSuccessMessage(Request req, Answer ans) { } public void timeoutExpired(Request req) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServer RA :: timeoutExpired :: " + "Request[" + req + "]."); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServer RA :: timeoutExpired :: " + "Request[" + req + "]."); } try { diff --git a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/handlers/ShServerSessionFactory.java b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/handlers/ShServerSessionFactory.java index dabc57cb3..d0b9482ab 100644 --- a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/handlers/ShServerSessionFactory.java +++ b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/handlers/ShServerSessionFactory.java @@ -140,8 +140,8 @@ public void doUserDataRequestEvent(ServerShSession appSession, UserDataRequest r } public void stateChanged(Enum oldState, Enum newState) { - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServerSessionFactory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServerSessionFactory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); } } @@ -152,8 +152,8 @@ public void stateChanged(Enum oldState, Enum newState) { @Override public void stateChanged(AppSession source, Enum oldState, Enum newState) { // ra.stateChanged(source, oldState, newState); - if(tracer.isInfoEnabled()) { - tracer.info("Diameter ShServerSessionFactory :: stateChanged :: source[" + source + "] ::oldState[" + oldState + "], newState[" + newState + "]"); + if(tracer.isFineEnabled()) { + tracer.fine("Diameter ShServerSessionFactory :: stateChanged :: source[" + source + "] ::oldState[" + oldState + "], newState[" + newState + "]"); } } diff --git a/resources/diameter-sh-server/ratype/pom.xml b/resources/diameter-sh-server/ratype/pom.xml index ef989b4d3..beb7d75fa 100644 --- a/resources/diameter-sh-server/ratype/pom.xml +++ b/resources/diameter-sh-server/ratype/pom.xml @@ -4,21 +4,21 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-server-events - ${pom.version} + ${project.version} - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-sh-common-ratype ${project.version} diff --git a/resources/diameter-sh-server/release/pom.xml b/resources/diameter-sh-server/release/pom.xml index 9f5bb55eb..ac827c25f 100644 --- a/resources/diameter-sh-server/release/pom.xml +++ b/resources/diameter-sh-server/release/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra-release - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-sh-server/testsuite/pom.xml b/resources/diameter-sh-server/testsuite/pom.xml index fb010d693..47375e219 100644 --- a/resources/diameter-sh-server/testsuite/pom.xml +++ b/resources/diameter-sh-server/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-sh-server-testsuite diff --git a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml index f736f6db9..49e6fe923 100644 --- a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-docs-jdocbook-restcomm diff --git a/resources/diameter-slg/docs/pom.xml b/resources/diameter-slg/docs/pom.xml index eff2d5c73..15674e140 100644 --- a/resources/diameter-slg/docs/pom.xml +++ b/resources/diameter-slg/docs/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-docs @@ -19,4 +19,4 @@ jdocbook-restcomm
- \ No newline at end of file + diff --git a/resources/diameter-slg/docs/sources-restcomm/pom.xml b/resources/diameter-slg/docs/sources-restcomm/pom.xml index 3132ed12a..a4ef913d5 100644 --- a/resources/diameter-slg/docs/sources-restcomm/pom.xml +++ b/resources/diameter-slg/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-docs-sources-restcomm @@ -41,9 +41,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slg-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-slg/docs/sources/pom.xml b/resources/diameter-slg/docs/sources/pom.xml index fb8fe4d36..bcfe73d0e 100644 --- a/resources/diameter-slg/docs/sources/pom.xml +++ b/resources/diameter-slg/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-docs-sources diff --git a/resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.0.0-SNAPSHOT.jar b/resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..0f328f3c25b671e882d38fa00f62a69b81cb0328 GIT binary patch literal 101128 zcma&NQ>-vd(5<;`+qP}nwr#!Jwr$(CZQHhOW4<|a{^Vpb7t={~cXd|k=DAzdr63Iq z0tN7YFQ@Pyh5vQ=-y7tAr>v-oAg!dF7`?*(mO%hG{wJd(OFfJO1OWI00suhyKV`Cl za*|@A$|`iSVm?Z`PD>03-fz)=LB0S=Hi6LZw1hc?IV8@P$?9S)bg^JQ?sASvzg}{( zR$2tzw>vkrt}Ur@cLXB8xC|C|R%($%b7t$eFU0%y@2ma)Ag)d0&GivXKt|5wS+iam zcYw90#2sw-I86QFLgl)6vfwv|&uVb_Xk zA6GrCHD%FA0;8(mQg3(~vo;)uGFM($vm%Lw83=%bd9*io{YzvsDBjh?fmxr{A+PYA zrGp3%0`coZ6pl3g!GZe~9ZO0=AUsCn>*)lez81Er5J3*N#@5%8CJr1BaRoiD*PN zO7Wjpf32pyPpwf#uhG)a-pTG$CI#z-hX?_F%hSBMRk5q~%oq1Q(#-h+{trNa{{`^> z>VrA&)^#5WEJqGS^_aEFMd;kER|B*PFIyoEL+uG7P*_fKrIvUcNSQ^@zI-5HF z_h9~C?(E@UO3O~iK*vC$cLaWV>Q73@L@quv?^Lz|ipl3Vw=f0Q^b4|{*xZmVO5IW2F#W;dU&zAUN= z3l8zUxEA9LWQ+3P*bn6sS5i;@%cuaEeo=;m9R$NrVVOYl3i0te^9k`1zG%uxYT%UP zSLctFl*3n*qOy;OtW>UFsn_ffL3Fs(F@>F@&PVmwTPR~efoD-PC{>%>S!X)m?bK3I z3>PD=X`h}IMJTdD3$Um@z*44AK>7|xASeMyGYe^ABSun>?V_Tar&kH=7);o>CYKs4 zNF^w@h5X;cnDAB)M!CKs2${u3bjKA|<`GbIX@Gn+FkM|4Nyf~>_gTLMyqgM~VI zGW*n|J-$T``D$uaEd0hcl;7FM9?pm~Do+E!({$jdS>9Ik(e(l;CwA}U{~oaIfR#3q zf-iu->Q89efi*4B(nud#Fqt$&km6fLu-MxYVgR0VP%K)4HqZ{gnI7*dEG;58@S!)4@dl_0c#2q_$843h1aA2IXwnzc~3$bx=W$4 z9e_hnhj@nHoJOAy-O&D1(ch!Nh`j|5LVO8{a~NEK)|yvrNnKr20nl#e66E!uy&hm# ze*#g?SyLhzz!LF@&VD{8(IT0l4UPu-A;Sso)85W)Kr)IC+)WYqxTp#>S zlyq9zj3uO2S~o7Q@IIY*9L`)>Il9@Y;FiE!R~9<@_+2RB&x-h$p%m+;;No9(5_jU}iasYiN@U)3@8$jFxoL}FNNwwuQ7;}#L7k0?X! zW=F?q1gELMUGIRSzDX#%%n#{@8kN6q|FUb|k~Imly6~K(D(dO3Xi3GgQ5XDjzGo{} z>k9ZqLl9qkpIj!dl&}tQw$nxpp;4+d;IT?7ns7aRyBiLqpHkF1Xg0Q6w^P++li1H@ zNe!JK1E$PR-wk$6;dba_3pb@Is$M)2xt}<;8*YuadB2Z_ z=z`HTND{6w&kSD)yZAOwX2S8YRzh1zdVy@N_Q1%>o*T@6Ed3-ty_p*0kOe{#cYiFD z{&&;Js4F`d92M)0%W3)HAD$6s$AAaZ5&=)JQoY#x+&+F?URPGdrgE+Vt91DBI>0EO z>j`J0P|Rz%4r0p46Y4i`TC>U6u zfszZ>txRKAoEtzTXar!W12>Ih?oV%?~mn$kch5)URN&3bhM7=!E_s47@O z`{6}$q9c}_Lh3l92_sY>Oq{I+T*AD1;45&}*&kq3bFmnC*>>qRrGYUKa zV#?(vjosST(s6-93J$Dyc+^YS$@|K<66Q`<;f;mca|SL~(zVe(1Ot!F7l^$M{y4*& zR*kwbzqVwPm46U6*Ed|{Fc>puz4Rs;5_%k2 zu}S&*?z-Wm?K<_+WiUQOw~%Y9p<=Tf`jY3Sb{S zL00_k+o-Uk=|mV*p?0l^cBY}`4N{DaN}Mpzbo?)P_aDp4>)ZZBkBbQgQY^7VhGdQf zzGjOxj)Rjli1ZffB(DWVzVcoK{Q9$sb)^Oizn=Q>x-AXHr?!YNSOhU+Kbg_N2%;C| zO`b9c291JI=Bx+;MuNEj3wo9R&FZSkCR^0hk%(+WTvtQBBAv|2?F zF={qgD@HJ!mwcxBtx<(TcPMgpu%ERSNkq6h%PKb4~sFUVzeyiIsVzS1%z^ajGUE?JY^kKwfH>wtK45*;Vl6 zWj^lUL`s$A5)z5%(aGC;=pw_-gbeIn>YC)zJV2@^{8&KhTs`0dJXQPsgqZXEI5GB(gCquI8Fkcb)eiLU~~^7(i96wX!4+3~mW&ayqCm$Ta5SAG=}+TA)80*7l2$u-lB!eDr7E}E z7ue9+g88tKXFSh>%MvE^aFcsftJcmc8VboOF)V%J`S{htT+|EJN4qZHH|Go(o-GdYKN7jH>#J>gbA=gAj)IeU6?=iPhAEU4mdRCsLeKf*LzwYGjeRK2(5y>9>li{&blNuISe z>K>xK+(I(BN~2nLQkRLxld{EljI8Ww>S=n)s7|w}w@+oJSR?fEZ`ue&X~}JR_lmb< zS2U+Iv5(O*BBNw@dm$`tZ)(3Hz1T#R&<3sa2<%q&7LWPeAO3b&O>=N`3Gr$PhV{!) z*AH!6%ETg$nk5lIXK)j%1lbbAxo}pYG9tni#znNRhz4k4&44gsCP=0cjl?J%?teJ#nZVp_~E_LiJKjnHVJy4-YdN zIZ~rM3E=8a)v1m9tSB>8$uN$CWPY*qUY;+maShgK%h{5fSJ7A15_ShZJqU!njYk_4 z;=P5d^HEH>8(Cn#&}H=^fwP2f4%GOlc`0@zJTvxUjJ@wNGhWc!@N7oUq{ z0%}_Zr&c3&!3w$V77)AZ=SnV_um=NdwA5HSJ-%>G=38_Jhmnknj^O^5@AIiu>9Hs4 zpY9}BUCZR`0NLPf<-X7uQ0Oh9RQ@60n;jSK^D_;VppiYBfpa(I_8w~T_E>6~0(DJ$ zPcxR@)Z}@5IrZO6X$Xngfx~wLfoacUVhKB~Az2$m2u`OA7^}~DI)oNJ2}2BeA%}~~ zogd;Y2Xl37X$j@~b=a}k3E(DZ;I5`27?XWPglcp>pTSH6$S5cfU?H=yb%aj3Yy~HP ze2Ii;`vBTtA^9qz$&Y^v)A9c%6W(gEwYjRaRjH|WS1|e?M;C-Qh}~>6@z>7Ko%5B* z)uJcjlg;caUt365cz;{*>2D2izX?#?^O4aP0gj-Pji+2zV~vD|rNRS56Qe{e2b+Kh z75t9F-`hE|>Hkhrpn8m4ZSoM$%#Hze;Hkw%+px74<)~g(KK@)U!ir|Ra28E&hg(e$ zhFpo>3P!FLP3m2S;qHL6rJS*tii}Dky-KdgVZfthA=9NrP(*u_IogCra9vU#7Z&S7 zU;GxoFIS4N*F_S^NzR)KsF5b21x6wkbdPPVcMG)RkDn0Cn4RKq^Z$7INcd75CTvn2 z1uREfu0Awt z#e=L~?oJD;I##HeQa87uge$p!`B8)UidCwnK^#+a%gjaE@SJQpxGLX$HW%gwr4dFK z3|@tJ;m;g3xv?dTt?i>pIOF1-EMF7}DIoX(rK5V5jS({#fntBb9#(1edoU55!apRkevfxCBqCpqA zIz?E-UECfs*nB|w132QroD5@LdVQYuWg{09587S%8x(B}I+P4Vp}a%X8_sLgSt`^u0_LCt zHuTYxW4#W$oKsc`F@k)TYNxiQtn>`$(ly~}ZOt_Gwd~1LqlI2H$wo_^zrBU>9+WkI znLjN|`HOC`aPC$qFGS?gx$REU@Y_1TrJg_CjkbQsp*i_GnH2D-w74M z#mD(=w+Jj=yZ#5BeA{UKSPBWHXaIxH8M;j#Cv7Yh^cO{DgfJ%zIPBPgOShujUHQTa z6{zstE=6&cFshegh{#08tXRIzp_x#}sGG6Ie(*?a-zOzHmu-Q81j78aAz>?DW_?3; z7ouNLS~~($ZHR61Mhz09ln&tG%}@Vxx(g!87P#3b_h>R=j*iAk@m7OFj_T$Yl)v(_ zm?^9*`RU~dN`@?K{hn8DU0x7Fatv=J$QHn%$q|(Pw=8u#`zjQgP^*Iu+%}re5vX)K5cxQJj6d7+`4AY?mwtIX16di`|g#fjL+FyF@kbibk zsTl!E?INiR+6Xlc)bVL0r5I%i*KfC}xPQTUwhq~MtDp6%b7Xt29ZS{dFII=pxA=q> zAl{Z2;2Q{+6cbE!a#Z1rRd}i|)m}^~Uuj;hr>USy2RhUEa=ASTn)CC8b+@80ye6J`95z_hgls0<#VBBCT zYL2cXJ*9$E?iysn@#g!4*<5}X1!NNvbzv@;%DmjMwGo2CfL=S$W#U^)>xJ(?26jq3 z$$;dNtq!cbTBxAlt7-n7!jc5!!gWUJGbPU|3IN|hIx$r4=;lhtD0-s`PyNag!q9y& zElyu4j&n}*szz7iSjbho?%#$@qCS9p&6ff$8I!%5v5r9M4S1&~&ydCa$p+e>ibH}x zL(*79%$w_O#qkEV147JsD{N!@$$bxK2LQa8LR;KsN!0a-9UciCO^U$*<*Dr@v; zJCOyJjurU7M48vq>Y-v6)JDG@bI+3f@U*v{S*zPE@RuE8S+6)Wuf4rxh?RcIwoOo;j&u zB-#``xs=ad8NMZ#WGZ)3cf%I_6y}wkw70iy6c>)Fh0I9PdI|=S`h@yy_OB!j_SA-~ z8A|R!@KPuRhT)({7!ji7l>DW*>VYY`j@eF>;}`6Ll;29eDVoZt0cgoHsm3Wt%KOX} z{@L92g6asR?k>c)@mz;FNd1JV2h zN%O!t=U#pQ5Xaux)BB#>&opcC-A~g0P|sZO&UqxCfX7k3`buqPgL3rW{QN%-e!Hgr zJdU5Lp5Tv(y8rAF_~M*>N4^7^L;n19IOc@2^<8`go)LbrqvkxipNPNVd7`AzanJvj z!6E!Efy>G?Ncz(IeCwuN#Wc_JCj0WneC<_Uq800+uzU8sUx)hoGUt8Y-5&JCe!cX# z@%NvShU4((C0_qH)h#OXjlG8mg}px!eQG}Z^p*aA|Ho_nf6VeLkKtIoa{z!oT)_Xo zMyjc+shzXa|A&!U+yxwOy4A?4(|U8+XuH*Fi>=#g>(Ws<)oSa!(Q5mwf7bi8>o)iE z>$cZ*wuQ)TRENuHUOmp}bUd!paa`grm=Ey#&JpS}4*Wd?{&+=ATu388Oh_$7{^!OF z0T4#tgu!ntAxQw>590s;knG2jgczTKfU2lenu18Hbm5{?B7Xji^O@6yj2cYMxyA%O z&65B^EdME;Rwd64<#D5y%~<*+_Vlsk!9$nk$RL>YW?DI?icioY`;cwQL>-7@GM6H2&j9NEwK>B*jvYO+ZRt?Y%q$O zyFm^aG4X&+B~jKH$OQsIxysM3`2C)ZC_q6fed0H_k5Fk*0`Xgeh(jTR5P%e%#;_HC z9g8p#QP9De(u13gO`<+el~nmac90F51;yOXo;w(8)wlL`KAYSx4ov-~13HQOss<{qk30h5Ql-mI_?rJ+5DmBb+d zT@=<+4oXZc+baW=?J76fac=>u!W*JY0t}7eOtE)juyt!5B;)}jm%F5naUr9%dFpXu z_mj5?M)}4=yF~b=O+9)3&LQY-wyy)O(z;Z0?<(Q#&6%7!70PTRuujVi-0$apy{a)! zr2l!wqQJD@wZE{1AW@N_^^d0W8=%y?E#A%3B_+q?%N^e?p^GU!xI&3xuUlHr>NUX< z<4J8#f|q@@%cfWV%jfyR9Od53D9QeH{hZ)#N#SM+SvZ9`kmFl!+obRWn&MAieEA?R zmSTKuZFM-~wy(|qyDOw5plYCxA?Qn-ncNyV$lVhWU1M8b%>BPgOOqNZu7Z$12WZ)?1N|+|FP!d4fBgoZ@Hg%m z;HHY6>N|uM0|>zXywBqv=SGJ%TDJHm8YY|e+6L4nXIloxGNu|fJDX~ydV4h((P6{J zkd_HbyO;gm`s7m2;V4*HI0( z8l`=qy_kg%I&vG*27w{dSuNHZNMoWcACp8!l+74v)QgfVeze=pF9o%tQJlg#Cp1-J zfv2&BWW73b$2r+D>=2J(i+E*)UJa zGtELVZrUT!yzh?Vab0kq#~7n3Y97hZNgNJ$xNeT)Cy1(+aToCg{KC|CgD+Y%@04}q z9Gij0qRPl5fP{I~gVu@>GqKqDJkEIYRX5J3qkE}^V~V-ci9rkk!i%>1wNCa2ADSyd z`?nJU-Q_|sF8ywlkp?DhmZ#>YwDJu1YKtPjM#cOpKcTh`$t#NfPAYOWHQCu6jL~e0 zoBfMUs$+4WjWX5IPBx}iTCCb?hU+9TP$FiUC1_+Mc9Yd*;2xX9^Bq4F)Kkq8+muPw z30t=yee^_T;mxX(go4K;Y6>>mG14;)jjC|TM}bb0Wysouv9&AsjR(&n8E!2qw!$ytJov4 z4#|Y#1FHfnkQNiKO0b#J?m&HfeZ`{`lhjv^g}pucfc4tP&gz1|Jt}?`^r#2u8x&g< z_(J1cK8ja9XAer&kA#3CytKk~Mik zD{OZ&V*0DSDCG9gj~JK>4}4H;_wAjQWQa#7vS)V3PdCo<7&D(*40e0_bZ(Vk=mOAE z^a~B*b@>u7RNbUb5v!b3_6E%?W%>h+YtOh1WyZTeta1A+qoUXQM_AHes6Yhd%xv*y zwIB7FU5y^{?Z5@PSWJ2ucG=tv8)ED+_=2sHo2nnLjja;cK-C@k12%$d6V@EOqTrS; zt9RT#lB+RjmTpTiHr7iT=TuK}IX3=T6i_g&%A#W7uvAA3l_Nr)CuIxV>a z9ha;-V9{UWmLPP(BEr47!~l@8bc$&ac8D>k9KpEt-2v>l-fU1tLMDBdd0^gAO69c! zabvoE@!YX7GOqa%x)@%oQxkTBZpXz#!>tavke(w^jrJSCOMqgea7GN&s>i7;Atfp*4XT$rCj|7Yt0NL`HQ z>H2E*Zcg3-U<0ow@QU@(O^-s~$miD6WwP)gW&BytTC3kdkU*WeZhao*naX8LB1@nO zi%x)%3$||mj>em``T`wQr`DEww%uBxU0dZzf|UhF&L54=!XbnTQiiBupyViuaH6YO zti%^?r+jLeN)FXv9_wG`%e7KVeb~S@8QZi}KY`PF64smXidPIKE_I_>rNr|A4$_Q| z5|uDc^`wx>s9~tW>>Dx!+)46L1`{E3V{Ak~;2p$5T`+47#wBxuPf~n$AjX6Mf9Lm+ zR&y<08ua($EIbp9zCNyjg2G#C;uh^ylvnP=9;0b8W-^(jN_r&_G-iQFd=!)(#3O3R zlPEGY|TeMMC-8nVlyLI1hoU z+N@>0B^cITwuPP>X6u4^$YKg-+CDUQ&LR5oyN&;sYW%>n_1rxVuD$;5JE@(>J-F-& zCJFfi9d=eg03H8)3Q8!5t?&m_a?%?XNmkiLc^)y-i2{{+TdRmw>8K-$p6CxyFg^RVjS=&L~6Xzf!bKI$VcBZ(;uLnz)-~h1aaO+y3BY zLAq1JEnU?%OKXNyYkhFVXu#BcZ&-#<4<-uN z>0=rLUUIUoJYld_FE|Wx^9UI=o%@eN8NFXmh2h9myO2rUv*PkhcA*~4yd_xWmG@u^ z4|zkmYxt@D*aYo^Vi;WyVQs*wM5hIQJO%j9dT+a z8ua&ejNYZnIn0Udn{eYBC%?*Q=t8@fMW39<3ZTNxqU*!fGJI zrT{gW=YM>aczvJ~4}y{>%L7{_m_XVaObJi+H?A?75rQyh z#M=Qf2O-b=Hj5!=l?x_uFm3E$iD4qUX1uZDDjBk`?Zo8@wxds<%J`9a;-P^<)r%tP zjhzN2$|0GDDfXSMt8eXxRa-~dWLc{JV1^C4PRcte zzF-vYDSbUO_O3k~(`w0{pKFsK3AGU{aKE;21W+}Vxu5$)PKsS=^yIqbD15SAIcrfAZ!W)$S4CzRZT=%0Efs_9DZktN{tXswzsN= zbN!FG+%8Jv9JII)E&xmIS#icyP*qt(6t4Y9Nt@=S+^8O7(HOR^Vbp5Tr|OItO-bE0UC=f{m7uM(H;rDf`*)TvE3Te8A7z<=3c`lL`(1n5Zg0i z%@Y-Fmx}J?l7NaC-UWlxSFkDMa!h)w%U(rGoXtN{; zqt;S>eH1>LCvb}}f~kbZm$-P5M8y^zr&s)Zbby8rHA%RC@vY;Bt*3utr1^6G@#&BL6UWy?qD-w^$;uX<^`=yvXUXod0)+ktjZjx=aA^zpeN3cD!ip?X}SQYyl2BnBF4j5_?eSbSHyueyvd5ZkvPn$EscwdD8+@Z>bb zK%+rS@NG_C5U!WZCYSi6_s=bT;r$dx;sdrZtVghV@A$O0C#7=UV=?v{8VL?jU>tb= zNeF5%5=E|zi-Y2|Q@G|ZjkgQyKQMu?NhUo&dCQLBV3G-A4COF$Yu9I%nS{JvwawX3 zll>jo-qu6_2IM9q@Ef*zT~*NPea4A~JGxkDH*@U7vVKy5<=KQ4G3tUEo=|PoP#p=b_<|cz3>@4IQs58h zL1>n~@OX4&1=qTs>VI)~3~^D+X>{A6WBc^oUb);h+)Pt;)|Col)MhdAi(nEuUYFJ+ z#2>T@9Kr>?Ymy!((?M>=_>)=D0{e}xE`pkPGN;-N$vnz653LQ`5Ms+U8wIVb_N-gWm+52&Mxd5N!K?8s=;%TmD%TMR)#7^dm5z_(6i>}o9_TW| z2?wN>?nDE2ApZzwyq{!3GTA?JO#^GXaL_mbTC|w@C;Y=!ZIX|QvfDJx=tv5r3e%VH z*jA6yS+Kc52HCTJ`I7tEt}b_6&Lh5*Tjj;Jz;(wMzB8lbohP#mau$}Vj}F4xSk0vm z_anb(l}28Z5vN>uc8J4OQc%<;+qXYQwfx7-+8T|=In82o5fx#T& zxR>YOX!{ zOHq^4%^$ts`m4(cQPQQk4H~r8N_^%Pqq{4xT2rxPNxbIiLp)O*>n298AQe|=2uad) zT)J0Ny2~JeJ}ZU{&QKVPqT{%$8=5(e6-P#I`&{k!a|?h-MFDN@+pkw(R*{Q>bA>~1 zT-yWf-FLl)>AnIUyn`IC&wd>B+H=Qz{$y5G5rPZ$0099k1OWit|9oqMKM|+I8u<3V z4zAQxt6Gkj33wOk?zBi*WVsUtSFDtGw!m&zASB7qKT($L};3-J(_TgB6WaFLz7~g zSNCAZp71iHo+r9PR#=T7;FB2~V>xEN}HVZ+GXt+fpTZQUsxJ6HnR)R5w z;UU|6N`+ahI#r~f^|kwNwf(|S$zg^8Kcbg=3IG5c`a!B7dXN%YN7eb6^vV1}?@k6w zPWbvJ?_YqWW~jG_DR>8>zS@ei%F+x&PzXFv9V#Xs3Pm(O58>XJ1MHH#i9kpe*4qvZ zTjiafl#Qj(Jw z#}U>wmsn{#kP)j}<36p}q6UFoDY=`$X`^VJ)vUib`HB&8udIBOiAQKN!C6Hj-jVJo zYO@eZ=i|{tR*|fU-YQJU$@IN-2YC4`W6-esYlQ>-EStRszgIAtJ>~1Ex@t3q%s*aq z$YH_#PBgxuT-Ot6o;W(g&f`9`khyeiX|GnYT6VcM=Q_-84+Z;aQ!~G?E?odmE zIIY{X)~`w>(xKyo;JDD{!%;=&MLvA3P9AHeZLThX!HVv2RJ6frHw1%N=jNF;s#qr? zSSa}!@ZV#IV#tB`<@N%IH=^P2v~|}!vTfFN;bPQQgGMnZaKBcYaLlf!!Sg?GxET> z*ZL`e$1<={YQcXDMYg9hlH*^hK>^fjtK&Q(A&;Htww#J0D)RQ1)jcTnITu`2Srnxo zwhLWq!m(qz8Ja7XcYHN*J^qWkQF<<;!zYJfMCb1l=9TmF-gBk`(`3P%~%q-pvImpd= zG2LK}KrtIRa`8Z#FwNQWM{%0u&7hu>0?v#XXRXZ+PXFlN(ICdgf7e8QCk{Z5c){1` zYZHkBx&P%_tjIMa!tuAmU4_TK_%I#U>5+8^Z|YJwz+Q1fIzdhyHzLg|}WBIeI)B|`JPpewS>4}pHS;vTo{6CZ@)kvl|}?#X}u(?RDx)h zQ?+H54oM1mNSE4{0T-=dD!U15sUqD`DE1?vaX2osJ+GZC^S1AdJB(HrFrW(^)S?ju zb`e@F%DsDPI8Pu9n2XIoiRM|* zl~Vwa8LJKuUb{-L6#YNK@?r9MPd)Sb21&6ag-?PPv-(JdEU7#35H0tbcCWf(p zE}%TUv-~7-OQrL7=}vnnVXPy+;M(X6`_}0mTrj zz#@nuT|yX&i=(TmsX4`(?G2MDizq6LQ~Fw12G`It#N=0W(R5`5R6?MFhOeUl(;ZQn zr-ZYJ^dnlWW2gi05aZ~EAbX!)g`1QT*Td_u3gAZ9h1829eSda{AUFyDdjhM-)paJ~ zV?tvwl9OC5o~JJbuUip~ zq;Kns>^h9>`g!!s7RfEm(#m9(93i*@mvk26tkFzWTs20zrXcJ5pwYS938kVSE#`*$ ztj@9|?}~lxinHVQ^9CBp1?wl_y6?W{lYB?g^yV#ce^KeR`oG32lm;=~@JH{;u1I(h zo{sfcznK9ike$lyx%HWKdT)zBn?0_`Z81027PX+bZ*4HH%xyC_7w?TkR{eIvTG|%9 zpf^EQz*<4iylmHi;Q6ooFz)%Bh@iJZR>rIQ9gNTWzPiw@=Ng}&w|^Grnn}+-L^p&U z1b5IDiJ*6Wx8)kYmoVadtLayNYD9&X;Frkt0&G5aVlAe%Nh;u0kh|6KHs^ZZ0SLlN z!g`s$u_yvE#+|e(kUy6ty2EARckAOdOTxr*a#1BC~X*R-kszTR8PC&bi zSGt1NL*8bW$47K%&XZyvemsnuuIf4 zI{CQ#R{T#{S=;Afci?(PIH`?dwrgL!*4fqCUP8|1EL-d64RB7R_c;DceV*QW19Oi2 zitMre=Glq-*4Xoi6o`6!=k1)nB&3=`lo#7x{le8J;4tII7x|xM^{bTAk~BB>o?$V; zz8aNhR@nYtTSPu%B6_x2D9lbbq9c2y2MOY563=?$nyaGjTF3M#O&gn`HrvVK6!)hn zdYn!b$=?q#54&ESk!mA=kWP$iYB9EYP`8)IF_J5Y3@^@o8M1>d+{Jh%iiuq;4?xr| zG^$z(zHD+wkC#I2;c;(>SWM022pfEcxILagz;_lLNTU5r-s;&gkA2=wi)f7(=*z3; z3h0e6h8FT_qAy4zy=}CgmuG>Ty5d1vK>h!Vns;en4siE7G z&$rE=Dt!M1)-wiAhJ7gnZ`xL}Uv1V1>CLRs1%8I=)? z-Dia|jqa?qw$kPbzc9NYj(}F%e>L>$7^Ghe|CgseFSKR4RC5zY zXX77pi%2dr!hG;=&FhA5j=Ms0;&py1{twM~@Ty*{_hqOXuM_yLUo~TesF@5xrXUMn z(1vkmH9m%={wh)3tG?GJ{F9XQR?&)}RT^(wfrMDef^xx_woPen993f;X$_iaGJN3< zj!cYSR3Exp*PglQ3!}wZE8v+44bup2)&?~(O_}dTYDaFs$BHF`ypr{z-hq-(qXT>B zdQ`-ozDq&|Swlrq9tocC?E+HXahzdm+ura?H<&XYTi~qzN~1Wj$H8}QPlr*F^berw z-KA2=R-C)Q7#OxTiT<;hjld-= zAF|fu3&5HqjH?AvSMZxk__-4I@Gh0dyxT_d4Vf_&Njqa^}MI?tYuYOcF(lSb@6!9sm!^J5iwD6%wknAo)O9Amc;clhAi{7Eh90`GNCheusJI~YaE(!unFXij zx3$&E#%2ot;B6OB@4MYnL>qJ?bb$175O3QefYI&E+QGb2u#PMAbex)qt^daRJHnc_ zN?5zZ#U(Kl3a5c@0uKu6=B?ikZp!(v7N)1JUgir*`ooW(1~fWa2M0E~H>y)3OH1Rw zX+U~IYa2t8`;j<5axqlcGR}X&a|PPVJ?&6%`S+-=Ih~S$m3Uj$O3{Y(g`tXCnj^<~ zPlN7?fWbARIQiS`y<0sT8Ix?Lwc7Mh6g(n8o0`sJ9%i=C*q*)En9Miwef$G$4fE+@ zFfxQtS`=WG6yC+Ixe78F!?2P?YdF*+_Cku;3=tPjq0tS=G^?bKOpk|~l&7dGBTuF0 z>WW=te)ZSw8!}h*`Gz#euUqn5Ex?_ijXJx~z&Fpvhr9_a{?L7R28x-!N^&O*xs48MpYsey!EIb4oj_YQg(E&cyh3&>vI;5iQ(!hzPZ{T8?RV9vCMM6+fg}i{evqTqGog@SWTIT}lf4~GDlRk?Qo3p!q72iO z?I@F084CtsQzG1^C9%AlQo@_z3`#&Hbh7h%`=|!Pc;=@Ht^>Cd>mS6~!N~JlaHACB zGZh=rQD)+l;B2VV`IwVPWqcJ2d&>WOv>Y&4b&PbAk^F#1g6mH|W`i;fFVV@wBZl0_ zDP2w@P`&-Gwy0nZ7GDEii2a^0K~A=#kTKK7oSJf8f@3*FHfQZl+{6`oFtDUiFu6K! zp}OpL$HdI3Pk}<%Foj?Jfy_(Fd85-iw6=i=r+vq14j%xS@H*C%`r%tNqx50DQOr_S zr+59LPTq-QHc%qQG37>N4Jr@h1EA~zc1$Q-8Alaf6{mwqL-S=`DQI0gl6irnAtqN{ zFe}XiNj}m+dh?D8&F|*s!R0c^>N(@-_WdJPJm5V=vb2ptci)TPc|u~zxfmAIgI^Ma za*6XCTdTfdUVvo-S>=Gc7?X?FeYOA-bD>(E+As^llxR7qK%J7YCBSD4bM6M8OBCUM zw+{>{B0S+JaLe;6Mqh~u5#Ia6e4vpV=;QWtv%~pHiJhU7By^vLYJ3cT5+SXnVnHi} z)2qy?BEY#0bef~9AE0N|9=v;jr`B&ZjlR$>k|ZL@xC28I%P5N#^zbLMyZ z0zJTR00iFYPc%Hlq1Wmh(3sd68$Z2rRT~tA)Px@zR%AsnDBz$uUb99nvDvG22xu0= zEQSIl0Mcb=lB^==*d=rdQhVdMce(6RPmo)gC~_^p#S8QYU=qg`&sYlah@cQdUxyO`J(<&km}|cBD#|Z0j#C29t$_uQ*d`j*@OB6X1R%t62Xz4m__#D_06SsFLs{q$;_}|en zkKd-66W_iATkH(qoG~q&;hOhgSGs+5y~v=x%gZdMusP=Ed@&>_@K&x}^Qt1mX%^n? zmO|I6lpY-|3eVPP0E{BAlOWn!<{Ocm?ajp!CP9iRV=95`7)W3cSw(~?FrSbo*Ca&y zFB_F!O{%b1P31VtZVN5pd?d=S#Y)7I@oqV7ZJFve^Hf*CU;4`Po|?VQToI3~p3+uH z%GgL(Jk!=RxwDU>#D^C1YpTY2fQ{}ptGv)sS>n{9`z`Ji+YIX#b1%%gvn;UIg&*S0 z$sd1R%a5pW!Q^_KH(MS}xj31&|A?5vp$?|X^Y-#P5K%8)itir@h$9U9#gMOJ0-T4+ z=agZwJpkD6U|%44H%%WW_);7AFl*^*@tXIBo1Y*}IzvB?TMjKHgJy(m(8~}yM3B>` z>%TJj$SJ+3!&V(R0)>ZthbQop=mdIfWtw~eb(SEf}?DtHvA76=83Y{4$h79`iV2O6P7;_B@&b=}`15GY+F zvp;Mt$r#fhzdw{EvlmABQ4wjr-6xNJBr8buyaP~dx@aIqO5c=InQhY8MIjIavFUL3 zYCXh+d&h`WR8c6i4qgR8cOP6zL&rcl!O!p@n)uVJ^vj!iS$wkAQMkGO(gdE1D3ShO z05Cw$zq8Cz_>59zrUwJ2g*oXTR$ZW{T0pDDq1G`C6Q7dVN;{*nS|myWB!DH(;vXfG zhO{MTT*toT>%78OqR#+FzC!Ayh?SyASPPcQr3{rrNmxsk@4-Xgm8QANrhoTfQ)Ne0V%|N1^*?1tbKF*DcO=U7@ba6n($kDaRaze#? zx+@E!xjp@pA881;bg@|ZDUt;}+x{k}SCH%TlD=`W_@L+-3`9_lFriz-TM*yVZys>B z3a*weLYt;Fv|sMeF75GJd?5dFXY5}qM}{K>wb49wbLz5~h0XI8xG$yZI9@lD}IfrX|XJ#ObnpImfvW%f1Bh&hf*6{Vx)3}8C^2z$raJd#FMEOLWjZzP;S>xZ-eAf zdSlrtdvTp~v*h*DQ3|aQBL#bFXzKX{`7;_&ClMz%UssiY|Mu{~-$r^(94+j=#ILll zqJ*uf-G6}*95*Qm%zzRsx5`=YP>t5BX3hqt-G+@&BqC4QVxKytJ)C60NSw}{1&!Ym ziewi`3x;DKpLLCU3EsNJm!k(@OE2S)ZJ4ktsQ;Sx9$|SFz-rRe7!3*3zw#bko*<~# zxIgx!T(IK!Nol{rLM#0ZU1hMv>P&wta+t2kfn(z=0;DQ?)I#g{{l>PD{)#p7;Xzb{ zBn}hG@hPc`Fd@c^ixj%DX@GX9s8F2Lz0{EAcLWIOg;$X@Mb0Aj*b7SON)jt2Y!wV2*~>zUQVRJzTxc5_iMXl=)nJGaV+)~FEu?(* z7zfDV7MB%cR_FqsYqMt}9KJ#o15wlacD}N?BWqQ0ElwYE(`)AjQZdq;XREq<};* zjl{T1d&^-)OffY6<2omr#X70BOO{+~2MK=as4eQ&TsqUv9c>o)Bjm4q1olOF)hEes zuO1FR6&9!-92Kf(i*O#F7*#)V1uatxuB$Z3=GJUB&hD z4N!RXR#>qP9x`+(PBR;iWP?Cwj}CO1aZW5^Cxn#FRuwI)&YR%Zi{~Gyo%B3ri&~3D zg-+acCb`eeMQb%1Xv!M#xf})b_d60mhoY1!3Hd#xdnWJr~4D=59^*(HMg(@7M|AOl(!gFt@78cq6Z~kNrw8lc(^AsCOWzO0|L;>orBd#?HK zkmRxDp4)fYJ!W2bifqB$lHoGNKSgZiNu||!yc64T$2@7))X!Ri? zTY^YB#KzUPqOUB5d>tuLTg^(LEqe8Dj&WBbUAD|U?H}$5ub+qiNJeI-zuLYk3GY z?>}`Td^oKok-peh;42?0|CM}bZSdX1_|K!p7Pe-8&W-WCf3#{vt{PZo${IEKdPV9S zdWx#Pa$^#ds&-2zX>3}8Y~KX&c6IAD@H_d9i@idT{J`KuuxIPh325#63XbkA#sku=(`1K{}cRS+dQayo(g%+#HTw@64`CXwW!v* z2HyRtBo`5iJ0L)Rv>euIzT@kR8sHi*h|WvHX{)ETtzrKqq5BpB`vEuTkAHd>g+;yo zR`iRn^}zrDRQ?~b;NL+|a4w^YIiiMga_mTMQArd zp-?-AkeOL5VZlg{$zVQ={w{zAMKv`R-TF|7F=G?p%-xGT+&RA-k3X~pc_PG!CW_i2AKGW9o%FWA8$j$6M&VJo7rCJi7-cV#7NN)O zl?JJYv0>T4Sf_^iX}Y{yZS2GQ$@A#`>(_&#>mcRH*1xiVG} zHDz&%x*MuH8EM0T)W&TGskXJPrCpsacpOu*;_{RDzOI)omH&AFC@y1DqSvaCyZ z{k%>gqgiU5#3R_F(UQw{iV)w;#w?0pQJJrSWRx*z7zRma)*k{=W{&&z7XfD&s=+(XoJ`f?Y3pUj*{PHw!&1f7X^P_Z9l6Vsn04C+-42*> zB*-mcy&$hM$^7sh$j3r-Lca+#r_=B`wNq(@b`L#T-#v zhAUjEL}M0}Ik^*0?twV3C#4b7bNC<>J10iG^KIHdI)_ia63o26hL9`RiTw^~n6k>p zv|J>7fpZf{U(G{;)uJomGVXZb#5i0it2zFNzQ3`>wae|+njg0P{_FGob>eCawN%08 zUIk(sMRqRwY5=og&gMLq3Zq9Oi%4#%+J&uhnyr%VS4Nx6om1V;n3$N~5W=MS9QiF{ zTRQuZ)fPf zVj59H;ZskPhxuivJUXXyK=@vIF^*j_9G2%$=^n? zeH=weJuStr^Rh01IZ9JR%NpY)S!3dSBuUWC!Eg7qY=Op~^?6S=`2iHx^YsEkxj-He zMTdD;7aMr8-XUaU11+)ERcnw)s!G=TAd@)@OEx|s{~Wm7z$n=mU*!26=r0K^d1)D0 z31MjqC+B~7swE@aPmd6s^Onf}LKTc%Bf+X}2x(n{P@?E3DWdZ$IWsDt96_upv%hv5 z00)X8T3xw@T%7uxY!cg74r}^t_zc^R2`7{th5^EX_?NG$ZP|~&l`Y3KFcwu*Y?xHrH9gcMFN> z(92Y3QH5s{n4~fjCK@~lOx0n|qNB?kr2$^+o9i7P*dTA#@I1!G#0(3qQ0pM=WWKbRkiEK?`nAu(r@U?tc ztyLK-jbIM}=E>c&(opx^=glh^fM-o&;3SUqf&QBRs95nBk_IS#%QgdiFmUJKEKTJ+ z!&H@WL=lsJ?c0FjAtnAya!H@C$ML2UntoJ*{l*}QNQHKasBL?GmMD0k>W@>)o8O1C zGDf-3(^7@PJ3FQB5ZDFA8ZS=;4OHhi8do#bMR+8$Wo-($10i^(Qz&a zxY90l4~M#n*}>Vpsn1#V;r_hrmKJ4Qb_#q=`_ z_YYbxu+tm3zDdt-M7ERN8-hRjCTubUS1uxBk|J&<+Vuc}dmNt>ZMFUqix=VpSO6SJ z=Y$X{KBU19K~xemn3#7MC)1yur$}RU8M+NPs85;J;I(@RIEYN4)9A8(i8v@vskV^a zYL~sjTYmnh+R+lh{B!;55LA2}0-=BZ5Ga{Ax_${2SvzBse>ehbwsZUlA!ch0{)Mo? zA&%toV>5>hNb3qM_H#%IBzb*`bjJ&%c%W)i0(iqn)kC20JwgOSnYA?v2$b5(1-~=X zea+l1uK2oqfc;XhJD}vst{b4HQ7U{{_nSX-?O0EZD)d(z_!w{v6$?>^c{a?XO*(e7 zF5AhVPFuq<3CcTG%7BM2q8Mh(NLexng>i{wOm6^O5FAAUYA>+`qbXvLXGwpY0!wtj zV+4<;@~{@=pXA;B&R*HJVtf{3o(U_G&X%Ga#X@&$550r5)P9wc7nnaXnN`kNI*5p% z)apEIzMY#;rIVx_rJ=oqDKRN7#uqg}B78|hAZxKP2&lddo4XHn9^@E{$sO&gUL79J zK6=6Ui81XqW4t7ihPDfq+0gzY1s%i-*?M#P5o!4?becco!*?;;;lvdb z;72W$T>bDIlh43rDlg9(pdJU*GFDx`NY=%mC42n zYpcF$=x&0u%_NuR;H`i))=ht0>?^1()Ev)UC%tE2ck?|W_X#eg?Q2iS^_)K+9;&cw zh}f^g^9lTy8V@pde+aGrhC}#aLU2<;IvdVC{iQqzki^*i)#uAlk-ovLhs-Alj1o@} zBTf(ft(_*zn417XFhF2*a(AU?ov+$R7W zQh7*Y@`{mSyqcsiI1#pByJ_r-9)m0q9;CIqIURL-K4R$#67onCnO>J4J*%(JeDR-*8U^2ZP z*)a_wKuImA0(4aJ9`W6OT*TK;(Hm05ggO0#1gr~2j&M})GSd1Hv^b*TMnx(GcT3`i zgjYm6KXoF4SWlHtYQ8!lyxbYrY`rL+#^poUA;X#|{Zj$woTR+q>1LP)EgB|G=1hn5 z^>J{6h%*lmynE$~G6K7fW@CZQloSoD5*Dcq4vrn2bGc&Xg6OfIo(iL-CGB~B46zXJRjbF^rU ztdFm&wJ+Qy{sLkAhpaX+7Bw+&cKI^@KkcTO&acdY0=m7|#M}^^aLaTJb`d}#${M6B z96X<=2+rEv1yw3&xFU-e^9Stmc7*UU0)}CB_Z&wf5#7GL-2m%*qn z7b%ApqCm~%vuS-Evpd*N>gnx2%947NWOWy-XHA3?o-%UhOJBdqrEtV6D_s6iPLB6g zxyj26kv<65wsmbdK<0i|>rjY+%gnJ+z?xlOLPt2ho;!fXxPJ!U1=(H^o1ajE$>4zD zh4Mjr=YD2?7P(kQzgz7!{->FfJUKY^hp(%oFCTONwaokvUA(`!H8^&S*}sW@e42|G zIt2q`c{MML7Dfcd*)dVd9yMXamFUJ2h8qArxTTg6C1_yVv*K#gsp4$9`UxIDjXjn= z+8%31TK_)(d?L=ny<8#}pG{eno~tqjpUAYn+<-~ znCGbJqn#&g>5kR4rOcJID46!S)Pak`>U6x)GO5Q!LbgfmZ{_5xM!Lm=WDLxnwqk#; zYFTm04=w#&nP5t%@7*hkry#bU_*9 z>W1Rt8=OBt44)&g@2vLkWB=Km5Q(8zx?dFK2lj8j{riVIRZYH%aU%okzfVw^82{&l zfQ=op7=q8@Q8Pv;2(W~N;%*SzT8DNfD`)_uL>4eyI)=3oMNUO@XG^N?)a3?;nc~9vTWOBQ0jOsYO>^^b3#VE~4 zEkAk`p&Y159mJ|cC@v*yvjkzD64GQ0X~UC2RFzQbQurzSA3$J29OPQinz8#HDyr@# zw9WKmF+`KE5b<}+3HPM8W* z*@(kROCct_skeV=K*!O2@@+TP5qWuMUO8^m2mjL9ae1?qI<|?tg3xO*zC1QmWAFNT zw~;M7?^Ql{QTE(Q$F0|JMQ_Zff-GdM#%LCXPBVO)ikZ*Bw3S;lZ z^o(FMscfU$ZdP4Z9JnD&tzH@?jjeMtz*Gbzku+R|;sgWqDoO|I&BWUSwfk(uqFCrP zaYNk2b7>;1(HzE@hq2o-YiPK()onjM;Sd>oEW)$p^f3DO-&iUhXxeGCPfJha=PF%Q z8-2p%ulD>=;OBnbL{CUW4Mkk7qbN{%9yq;G#M8}cu$NWTHPUD@R~5+#*g43-7-7TR zxN!I@_N(MBELfdJX>@}!McnDivEP4sTt0Kh#FAUX%UFu~aN+xUKML8yW=ybeU?FA= zVYVR_+oK^nQLELhp@)Y@8yIaF6{_Uq~s}nu`|Fs`#T|%RarWInO12P z)v&fWLIT{vUZq!8iMkO}hUm^^9in{3BH6aKZ!7HmyEuJS6nu!iApr$x_XfQ?7tGZ7 zwjV4aZ$8sqjI61190$ip6znEdn{*uZyg!+7IULD&=xASleLO_MbIK=UK*yHA#!wn} z&vS88tdg%l;#$e7s9s3}qm*QFogXqv-!Ylg+b7MRBiLS`Y*Xedf@#72l1i2PW7@~j z#Ma2<51sL!b9h^S%m;khvUZ30|H@VLM;rJQS9GaFvtbAbsMR6$W70QuH%ysi`Tt0J z$6&#hW?Qs-*|u%lwr$(CZQHhOqnB;l=w;*f{x0I~eQvynvtP_#^|LBwW{#0LMiq^= z3u7kq!c+OT>^qz_B%^VO_ix;#GuPiW2?a5**MsfPS)S9bf4=VbnO@&7;9Zhs2r@%` zpo6yRA#CEF>Ag%W6v$Bn{Mb&5YD#thi^*9{HZOBRjjXzLEm5T3!; ztw+)+>kE6wm(8%jU(+JgtlsG9?@#&GPh8|va!&z1r(%s)>!1t?_*2-5I1;?)=}-DA zn@(9iXc9Z|Dc?+OlytWtRsiXO%5{7#*KamWL~%80ODL&JdD4#MXKxOLzICL7)}Awk z#hXxAcdcu{=i&6&+>V|A?WOv5dav<)5c1od`%Vvrsk?=m@mF5GHm-?AuQ5>@RC-Dk zDA4kC$iX!``m&TuB{FAgJ|j`pLgOpgw0k3P^ORO+8aV9`cKhGywUmAYHM=J8_h~c+ zD2~Efzq0y1$Xkxw8w@>R2V}nekT7`J8Zd7qz@&1h^@@LcSfe*&rp&l>Ua@aI2p8}S zv`ToX28Cl%ke(%-({3?IE_?m%<|x%-ugTy0TGySWh$(h+=!*^0Q!v> zi}cb+^b#ib3X^P->YX<&^JOaXmC9~B`bxm4ZL#0gV%)4ZfA~mRCuv4nQMf`YNO=P+ zUuPP2#J)i{MmHY^9@j+cw~pF_;VC^bzzT@~QSEfk_5o5}M7YUCCvKyW{VedVFb{vdjgK?hb#gm9lgxL>vW9LV)qS-FDFEbvAaea?maVsLT(gmaW2s&hlSU4UE0t4)`iGxC1)i{6)|60v)nm z^2qY3RjRBG(UFA7Hlo*0r@XHE{g266+oV*l@SkW!_!F)C|NUrHFm|-FwQ)37GPnNU zgEJ*f#|0I*ub3lF8LUa-xFTt=;?-jUu}pw)@OE^IUqsnN(xkHJ!#rrf>Q7=0Aa9G` z3p{A+B#cHOJndw$E6fuPd3YKTK}eA^}Vo(fU~>Hs$wi zAf6S{CJ4gUn2wh;M{hB^@dV&tl2l_@2_Is zy{(n`xKPkE&f0wR+WT9M9*h9?2!R?pA0KgDR4X5gu|1ZdtVMX5E^Vq;DlsK3HAPOd z&~LhRU5)jwH9=F(I2AH-9yqyc@uy0xn~m|fGc-%M;%s&^m-$yV<9t$uNB@+k6X1~V zbbdVhJPAZG6{{5(6rlZK4fD(iiBfUL9-B^w>Xq%p?Ud$|S%orJ3?qwp+Q(5e*qpT< zzVq@G^Oa3Ly?C-*H484cHR6X^6Fue}-ue#t3Ma{sD{5nYq2f|UcHoKt3#6mWBk|M| z>USF5EEBaoW}`NJ{g6>UX+G_yoYH6YiOi|hEt!fPdyYchVWJXVnStS&6r^K^l)pEb zL{+%H!L^n0bZ?w;keYj1X)&{AHox<))qAjlsym9#)%~p+rZ{G=(=y){H+Vx5#Wl8S zoL)agZV$-4xYEiPvu1)gsJ=g6H+%c79mxp0M(DHp)wk#9vj*L_^X0eG(P(xFs1JTW zf}iI?pXMr_7`6A7g;ZK&v918QT48Y4%4wFO9Awbq@+TSg5~|>ox)lTV6j9;HxQ9BR zpl=S-UGGs)pZvki%x&w^7Z2!3axs0r21&bbdY7hGj_QRWGi_h^KN4&8A9M+~c|{CP z(8jU}iy+Pfjefzza}Sjh9)9Iz(#uH&TcM`8#8ag>)3?(>*O;$f{E1P0G^U-tsj|Of zR5Hm|@G|uoC~^J8><1})Ji_^^NdLRMoj7o)mDo$r^bjXUaK4Xzo9^f{FIk7oD6`8h z=Q;~WLUMtT{G4Jv+I-tou3OqO<*6>INGyGWA=chQE!`qZP3x^HNA-BZQt{+2k|2<- z^7@MJKPFbO!2pFZe^$Fc{uL(XH!?E+i@fVw{f%rSN72I!&>;zaLNfIY4bi_K05WQ; zp|kauepV<1H%SP>jP(6vLn@#qL`<<#Px;XKJ%ZSWLm9Z)heic{A?XQQoKvMZ&{9T$ zX?-z_%wH_FRTEDXRJbx~c(h&aFze%CZ+uiDKS;MyCGLHxt}w!jHDJ=gdCQzz8=Vqw z_mcW%d;}!G;uazw^cshb@{c=!oVCgIp8neLA5tat-`}yQumZn~oUP-3wry@>`gf^> z{KQ{fPps#7K6hjqt+$_Jz>-+)#Q`c>5CjOI9u6DCZ4fRZ8{IWBd9! zmnSc)nti_AGy&U&)WZ_tKH*9MPH4xYZE+IDx}Dc8Et|$_l2rk&$b1aA3BNnH!}rhP zplilvqe})~>19aF-v(J$rOo2Davf-!D;;DAvk^Uec@LMlHi{@{QYs97kH)2D zRywiAQ;jWkJLE4>x>KZ26Db>YC00-v31;y1!i*)49d22PJJQ-c>OM)azai+XEAvB6 zLjnP5c&&eM@`tiU()6L>RoTP7Ge5O_^r!G{-fX%KH3uL3Llcy2T|2k`XZ2S%QRe@* z%<8{rtmb+x{+uw#&F_7p>+cXQK2y)~JVVar5Ej9_pMoJ)5sqv!+8bgKd9^9{u(P2Q z-5%oNkmw9zpwHsHf~WVEjlg!H7jUTfG=f_2A(GZ3;vDqBD{G<+hnLZCLbp-{SzEcM z6ovwwgS>tT@kC1RxQg~LBBBO@n>CZw0he)5h5-UI&u zz3wxy=MR?>KV`*AV54!auXV1tPjWn6i=V$g9$Eb?-I4@XGNw)9 zM`x-_mD_8idya3;;0LEu{c2##9ganxJVv|23v7ovW-J4P0-0~6HkE$!ziO{sa{qZN zmghU|7&z-N$UJd2ic}y9mbK-kP+K*_chTZ#DMYW!gdvj`)YA4*HqpQwtc_oU=E;-@ZsOgaI z)DO<#CAPamTm&e`CKklww(fLs)5TM-N?B%`beHY`MX^?;acyBO?lrLHctAqw2B|ct zXVDs&HhQVV1~c-x<#q@GfE0QqP$wNUwMKYY5v;u3NLY#iZ=^W5L^pAQn$O*9BD~#`cRw5W$V?lY9Nbo;e;$Q3T)7v{;|)_L-rWrO(apic6HK z*t5r#u@>@IoGn=j{YCz$6rIuzl}7D6aIG_FM%&#&Ie@? zRSboSen3DOr~-@^Al!dSx+b79PN*f*U(|5-ryE%iwsL_OkP_M@VRq%aHtvS)Z`#@) zF!d*f8zV8X+9BJ8v#fJROD{|b>vTB7%MV1-#wxe*d}+3@zl9ckrhZUn=K z=nBg+?8-@)Q^Lx3Gf(=;IGROY5m+GKgdxvRfUa)Dki^kmB}2)-+zAZzA&e_&gbW|| zVdF9MSho1SnJ6`QEEmX7J3UodbH}34o@~phlH%RZuT6b8L2Zx*&Bn@i^3mRy@e$p} zYe^L&t`4w2L2|&PBM%*wCnY4PW(@Vr)|Og)=Pu}+>HyRpcUL+hnl(BdeX%i{pX$sx z(ONFI1-}1*Y)DwP7f=3VPI=IOl{x>^ArV^#YyJOf2(olUR7Ue*Y26BG8U_P~V4zkK zUzk9F??;%6gQOv%b~0~1mD(g3X^XoyVcCdzL;S$>ar}Uj+d$_m-1(G;nqgmC=X3tZ za1=->s@T5BL*5f*Me;g(f`7UMQGO1+jfh>a`xIB zjrvuG)~U;G@a!^-2qg9wYV`WKcBN7kvr5Dx1gWO|BZy(NM7P-z#;}8XwZX=1zf-q- zD|KfV!C+d5kfC=q$!8l#p}r<8%t27dWM#M{vuw~YqUj2~CpP{h-@`|C9{FU-g;k^+ z5SC4*fvTJSjFU^JNwtycr``rQb?p&L_AIOo{554BQxS+A(@;D8o-iB}kt?yh3|U(a z<~GS<7IP=R;+-ZIPHlUR+S=MSLO-Et3zOyvk0hE$MlCwIvw#Z4BYLn2 z>Ha8jQCbUfP6Z`m4tvjgfmFg?J(YW?Wm|R%n3~aqA?oIG()sY65=gGTV#Nsh<}Xo%fs-s{wyct{ zM3GxwRJD?xUlVpf*3K806hs{Rr z-)HaYb>Sy+OFc?Zv`VK5__a%V24S^<4a@euW2B%`_Ch3Rx+@`;!EE*e$zEZ#is#l7 zc`Mji3uZDV-O?R`8AR#HS8@oqePe)##l__xzJ5kc0Y+I}6J~SQhfW^ih&j__ZU(&F(_>pX$sgV@ zz2zIN6c~i1QZ|+XvD`Z4t#$q31UBXnL`0ArITpG-LMGDI6ZB@dd;F7x<=~y|o^gL( znv4~HtH>d7UYeYhSX;aOjdA$C#!!J=)92({!2_AK`FL2wbpWL)a=`VR(Mn*t^X``pcDH=SAAa(r^1UbE8qet+iu zK~jg#k7a`TcEeYJT+X0SEs>l|LAtb}&jn>j9RMbU?aq!;q>);I#*d0~M&}fDkv2kHNy{oC#9BGBV6Mq>x}&{_-!pH|tKyhRd%`|a#aR?+ z?u!XJRigZ{x!I{jZv0STEFgV?q3@wm*~_UZO_S0%;Z?w#IMXwUd;OeuQr~1MAbql{ zes_URPND?DgkD`NHD!LnyhOvpFj800mppm0WInys7EBCkO{-svWh1fJz~gFl%$O0= zK{KvPc0p~DZGbsPqcdf$3PPVrsIg^%4AO9-r6rgWBdZ3@K$XpAq0Z$(ghz2~aXe*W z0NJNJk{xejBA{DL#`eXG>=uejHtBB$h%mwT!E& zm8j7loF`nUXRX4Hm}pfY9Elpx!-{U_+mMMdz{_H>QF34*MnCbcO0ny3$UV`i^14=` z{4BFTS>S!d^ny4@Lb|E3ZM`ZZEGTQhRybXyAv0_?!;r|MTjK$QF5na21<+_U5yVXz zgOi9}kk;>jd8Z{wisEbjG< z=;_Y+jp*6V_07oX{lM&Xs;fve;x^k^wBj~fwMcH4@!eSda0%VQ$%Dg#7gnd}Q-1Wz zSAeaN-+4PkT5$|MpLeWBe64$gP%7O>`nC(&v9g2tmhw%<4KPaAA+?A(R_>6ms%OuG zj_qs2PSIuoT9WuUl<_t2M>Q&#TtE^WvDBO<=;=BepOGQ%iNPFqR_yP+0i2F!``cu% zDCAlE)5T|X@x&z!{3>M?Jkb(Za0c0z3kbI+=x{wFW)yO5Fw&3n1BC>wjZ^3t2TQv{ z*_SUi3NbNhp6gNMhlso}-2~K+Ow_ETe(NWSw>Y1HLS7N{QmHY7A)01`dX>vSm8w$Y z&drF&76VlcQm_=UX@VAp4eHf(2=H~F`zYm|>mSJveC|M^-sgr9Oex$^%w@ikMKH6i zdpn}vk}t*RawdEk{Kg=~=n5uc8T!T{#pRTWzBQ+kN%kmUQob=dw6|KMG4k8t=+2ba zl?*(c*c= zPPDbvqsZr3#;uLN{LhT{zkR>Ee%L|BI*{#)z`oflMrvwoPVa6&nK+6ah@d!nWUuVU zptw4U>ElP+YJ)_wL$s&%D}X#Rs+pX^3gfkRk_X7WZO2Y~gFJ=h+m1a840AV+ zZMBHuzoEU_)-JQOtmLpYlTL@+FEl*4Qr#oI+H@knqE5GSD$A02rv7&1bPBEmgnzrr zqqz(@^b`p9o0QhPgp>_t*|A--^nU;>KUAD68<%6(5nOJ+3uF)3USTMGa;}Fub3YSz zPQ_Pu_>-imUZELKE9Ma^ue!0}t!}VWsfH_bNw2dw_<nDs+uT<6hZsp0Q-bzWZcfQnWfH@+_n0fxk%_UM%YO1+M>Wi#u$-CoP`rRBl#P%wz4ERt{ANz0 za*)+F){vbu_AcMyT-?Yy@Kd-8u8 z&1?+c_`2Vphg*v`ihe#WT*>YlLd{O$^b14HXJZyvru31bkxZOYdPhA-YQL2hEhL%q zR)JbuF?nbx{>SQkQnVx{Ijd2I6{w6b6JHjUz()5|H;#%x{ElP{{b3h{W|yUhXhIJu zBtg8!H4&r-)L3c%&{qzr&{_Xb_P}x2D7r`f-tWgjXdOqWn2Su@ItRbU1zNhn6Bsw4 z=qPsnGumtFp@}mxqo~zyxJ!U~HKyT1LNqVqc^_*v4Z{@SgQ6><7J(4-8wR3`Vo$jYjUowpz`A7#OBpIoG5XRsEjLuGlGI?BLH*BVEuwEYydc_86lGr<&f>9_3mNs)mVRvM_A&Ca>m065&Jk z3^_ZEp#H4ExYAo?LA^PII5IyV`zzojmjYl-hR(3LJIH!&UER z0e;u0%hGf2hX~+?t3vz5s?Qabhlq}>DZqnpso9Ss3fJ#SQKBSOnI=zPX&^J)6#zCPHSkFe0V1&; zlA^i5FjlR=5HFM3!0s(QLj>W$GAOr2`)T)Dr70t68Qyj5+888(xu(EDN|hTxX_~!) zn6A`PHs;;CDr;V;K~q{Rfe9Q!ukOQ`Y2OHpq-DKzW+Xl>#M%-u+$B>?fZv$E;1&XWC7W3M-qsk{)yI%#6vE6;L(Jh94%-PnJW z-R7>hF2iVpwRmu*v1S)mL6U-k{Lq7m2+Xg}BF_m5dYu*M7m)w_Je@QBJA)KA?9~BJ zGR2yG0s^4$O)Z{4z0$6o(|XOs#MgGi3MuM}Le-$4++uFGIRAi%jF^NhpV->k)S0$7hKA^R$Ai)UyJ`O>E4WmYs!rss0)#1Wim#@lm+);C6Ut zUfWGbsBU))kao;GI~m*8d^*NfMT7ge3c;T za9!(l@%N_D^QG~b;13k_-rW;l4P_V46)Hy;$nR8_4YQ0ZcjnA)7O0UbI{=2+isAb^ z^?IESK}ht+4s*xv<_15*vjiv+ZC+zjy*0sbY_t3KEa7&`2C{j~y z_LDJpSsJl3L{vF0?L{^!6Rncu;-kV#9Nqwi>v!m$+n)`p47-wdXaI-LW6n-^(U7Zs zs#<5xgK=?V!7XGHmwgZkI(NKi#d0a{z9~GG+k?0STSUX+ibd-41man#UeLZ5%m77r z!W21%=>o zGf_VhQM+gYw8>7LBZh-Qhl$KHm`?WUu_Buda9a&fHR~m-)odwU+L1fwBOaTlnK~y# zDuw2cmCGD2p;<2MzWo~A`df5bmRhfuPMAGMPQLQ?aY`?j-w6-DX&OdOckXcYccDK7 zpv9Q+7W0$>1)#;5i5BaW1_hLhD@WTyQVMqSsl4t}(CD)BweDlBB>x=qC2WEb)+OO7|blen(Qzj zt{9DO*h7C%MoH`g2bSGUG-joO!eJYp-}q9=a;4`2IJXWn#qxIi4Q&;#O*!aU+cD*U zz~)M+=rIn_oA|8N1_)HcskICus&{zQPNU%5sx~)&r}-tUZ6?TD-`Jt0nnXtn2X}gV zdcOk>0swgV0}D_L*R}rS;HI)C77!QKeh9+fFvk(zC-aBWDE(WVrj@Os zxs&^U(P?TbF37=s$t++tgQ@&%Cj--2_Xr2r{&A#G8AR?>w~C&VHj86PN5m}tKTUhX zkdvcPJ@18B&sjoc`$zoubtji5&l{gEGvYm7pD*BjWGDz?dmfk^_JU!V0-F(gE>MWz zLiXG-;`K7%_M%~(;6ilRBYIe-`)T3&Ed2P6^oIs*sDe593r8{ena0;`A=cdU*YtJ3 zAx~M>?Kw8?##>f5U>~9M57o){!3Hv#>e>qumXgEC&7rSHqObE3Izko^PJ+*{I`23U zv2*XBVeJ9K+|GhK^U5oSTFz~jtXUAMl_5Q2+}CmKC3n;|?ll#*OG^x_R}p*NZlk%( zZ5OxaM1m`{jf_GqK$sz?N&4v9+97rt6G`S{Ysw6+NKlcq%q%PIjRm!tM&ihq5X_>b zDDgOGgWHIM#$ntpm(o*rXm>$(yyGyQwC6!PI(HA_3&Pzvhmk97ydWUN*>j`2Ys543 zRTzWeP9=Da86C=s-jw*mr4%N7@d9D`1w<3=wqSkNf@8H{QA8qi8AEh$iD*M|2&QyH zbY4Gd(@AR2j;jAApZSf4AE9;f?WI4UJ+xijDP6V+dSYbq7VXf@RxQN0 zF%OD)3(ItB9V54OWpHyw_TYi9^2MRU8t>m%w0i?67mPU0B;f|^v+^{zLus5AsxR^{ zkO#yc5{i9waq&KtB7HKPFletlhl7fvO=K*CTo#$`xI{JLo8YRk*R<=bP5}khd=NGm zcDcro28e9qyZl);f5}Vj0;qR<(iIW6twK*cSdZdi`t=r&iCj4CSe`Kw$bXjV`Uv>- zx5{PM!rNTqH*|!ap3@kVzrd`&xx}sZ$7>VuCT7knOkx{wN}HR83(KG+J}m4O1a%Xs zQvgN?98a_%C>73AY!a+JgLSWwq9y-&MadH5iwJMT1hNI{M~A;`#2)~40_j;0Z)Q~# z%`A^OmKCN&FpB4>lWI|rY> zXd;jlNMQ&eL?fL@qq6?zl-dhD7UAMgVyp-MZ_}B-o1Opm{F};u0(P4(e_Xl=co@=+ z^--W}Cqhq*JW0IY92@7bpPfh&9C2PsM&Wj9=O~c35BI2zJ$zOYWPM!lIP>0kruF^m zl6~wqFR$;J zmE#>PG?z?y+GparWn8LZ9j_>IdppIp8Mw&#%Uw;w-}39h8Co=!nU|QvgAw_2G{U@i zT?(cS^#WSQs2}9Ls!*0W8yw8?Fk@(B2OEG2m3npLBUvirU&xSmn)atEtI+IPuU}IX z--}XNogx>~jE1vZXDhYaj$NwTCt;G!cpACr``6FBPes0W&K8<2fL-SVNBW|7^+3B% zABbyKmvy9@2(Q{+ChCpCE~Ojw4Rjas3(R)w)##uA zqu>naTZE-ETdVcG40{_(?~^MBrH_}_l*@&EafjJUO()&B~tOmICcW%QBW)-|Jq zt*PdA4}MHCr^F^`>HH)deAkRR^938tVr8d>beoo~%aCkoJTe?DoY8!O{hweIp?-d5 zWMFDQ5C+r~c);<38pz~}0000AJ*oJroHa>zB|9)w>|H>TW?N5U3Wl# zKvxX|M%&2+tZ>&MY{%_Nf4%C$w(U{Fc0vEXsr^pe-O`%Wx1c@n(VrJWC2 z;oeCQj_j#V!OOvV=JVeo57q?T9u*yVBwV%2`%rXc$azByY zwMPZ6bK5}pP#QC7+IYW)6|O9KNfwShg=Z_wgd@$&z{UV4MMU_h`CfRJm!OdFcqiA? zBPy@VUO-j5Hrlt9ajJ@j1X^fs{CK06o1jJeJUqJ(OETbKRhSiZ_d8@R8zZa&Dj?%j zuYeXqWuLrRCz@QsTR|RiaI8+j_Nn+6!Q*(?asg{PTKE&C79+Cs&FWbAMYx#STU6sEp3j zSOvp%2^WJBZABF>_B@AbIZOw@+T2MwS-kZf_S)TcY(69~;lb^R3X{R4)vuI6uyo@3 zE?NFS*HVP>YFymPSomXkieD^=&Y30GwWXhvbqqt$6+_1iHwJAiWfBg|5WB2V3q!3A zP;txZQZb_Eg5^d`IQ-zX7S>Aeb**zHnoe@jcVoh2NP4B*`89GI7G1w+MrybGGp4A` z6iB7o{imq4XkeEXzt{j#ZSnK@RAoI;b@mQ^C3E-$Yg5X5BLHg(UUla$t04&%yib(I zZmq|Eslf?nh=xRs8K(Z0^5l~{UtbIlR_5=b=FCYw-J73!bEBLyG-hTtMk)gb-j26W zw4Ns7L6OHv7l?{dZnUrP!8jOE>qi_DKM<`mVeugem%`u;@De!~DdFMq0lJm?1-s`S zk5jX4#1tP@A~KgJYBAvVyVi!OGGGn+^f=DN}L4Kn@r%7Z`EJB;CO(J5+VFyWbg`p1t54x#1|&;xmO8NfIL!`Jfq)g5tKWeoyG#?GbNXdHs4tXC)wB z)nZCq*yd#JcZ99@X>x|1g|x4di~?PSz!J%3$`e}CnZ;uUmwF33x&@!q5TdG$OMxJk*Fuvl(d0hq zIo$Ll+~v5=B9F@WvGJut`#sObS3@C%C^)!j#&Q{95#BrCr-g|=WVgh|`v3Hj`aTCY z_jVF;pIDm)9f54uvN# z$)&!j53a&-9W)ndN+ z^$>MLcRV$c%|)k{i|>Dsq8Q3S9GR&GV%fM`bh=kzWeqG(f%rTmp!LUp-cmsRcisj1W)Kq&3xHh?Y+A96%GnBBD`If z6VOi1j=m>*Cws3d%FljOg^2? zXgk?~W~Z3a2!!_XkG-}J@>qBMnPfwL-t$Rly|4CL7SEJ|=KBjBCX% zq8~*alL;nRHNvN48H><|ey}jIlx{%mt9CxErlxkQ!{RdBMcjL%@^P2$UFIK+QwzyI ze3pO$_uWH7y7Cia}#jHbKITOLYuG^XAA2NWh7ZQ@rq zdrWkj>X#Y*wq?*qMXyt+?)3Y?y|JHX#L6$(7!#`NV-8bu&i z{4|gn4jv4YY+$p|Y=BejxxnQ55~1Z|OHjg!`Q8+Nk%(*{^kys@CTPQoJt}_T20z1& z^=un&DBOIM_`}#xt_P4pXtH$FJk1XuuyLY~irMM>IzR#h=mPTPB@$&>A+Z@rCbX!p zLZRxq)OKi`1GAE3uXa8qiz5EfIl&odx{j7T1E$0Yqx-NcRPHw?6}#y`*$+>Y z^wn%4D#ygS+`t*c@FRq;GYtb%u)34qG@6Ap>V4&gYkIE0h_R}d4@mWiKN%;n;f+c2VVagljp%xqmGw0^ZA5f^iWM6+MG-s;LDWg(pSF!e0?z$m_wlt7!#B;v#1c+Q7K?>cF%?S0Jlc z4wwWzF3afQxF93xmMs zAFXb+2%1PwEyIHV3xgYz_LLA|h0DN2eOJe2*7R`P89(Svw1MSz@6=YgNHRfv^f4P< znTkLQj^?_VSx&ekMpxNFjjhH6KPO=}P44>BNyYYeeca_Bea9ZA96<3hCfJle8@ zxWoi$@QJSp@L@RwbE4v;Vd7jj@O-5OdV~aP2)MgK*X=M6_Cpq$Qmy0{{`NW4J}NdEJ~EvTV}SGguu$@b#}Jo-(q^EL4JRl#!9@j%ajRrwOD!_HN8 ziY=S&*#c3f-q0?q#iFX`5~=3~o`5e4a$JBDT{w=ubpc*L-W2q`xw?(nITi1jsauy* z4r6OGfRJAM6~FM#sajqsn7nnMKA|h1=rWT(JQB^Xe4buZ!t{Irew9x(`1VhPQ1NPw z4$ho+Pd zI%?UPZ%y^TACdjy-22Y4XkN2t{=n4fhj|9%MR)c7@rpoYe2HBqa8PM-+sJnh-FZuk zT6kYW%)xHrq(g|KjnCr|=JnvWe9nvek6!7|s2&3;*dIT<1%CXH{TE#E|M{%-|3wwG zz`g!Z#qVvK1o6g9%S5JbGYp6;5^Hf-iQi2dT3bx2jb}fF?Hf3^Y}Wo_iuhy!5DsN{ zI$@}xpaFQPAr7j=1!Z#i#mKV)^745BD#ZejKEJ0fOVdJX~2raOBiO@l__R_W)fqZ*wGKQ8l>7qKob25Hx^>Nt>}f zk+kv$M7iAv?%E>=U&FqXs$SU_a8be6B&aV&&?Kopf`U*9A;@#1#pzBs@9#9!75AM0Tu-kziQ9rx)0u*tDy6E5|fn2_<59t8)~9 zFC6U&3NlEECI*d*casBY8wCP3kGngb4@^_UaMkamwjRUD7{|$QH=nt*k`%q3^MDP@lJ7dY z{7&t_`7mXN$mT9@zI*C2PkeLrfl^C)z24tq4R2;^x?E}O!E(7qc$Ne>5Dy7gCKgYi zLSeokn*_dep`pHZWnl?XSe#0NL-=J3 zZBqShEMrWFsaQ7rYA9g^QSne7Q&vcFo>nOmmFn)nU~cq=PvX}RzQ~v+L+lU6NeF5s@{i>xZP`A@+D;Jg zhmx#QodS15K_p9Dbz#C3vlujFCKF{4lDB(&CBXf2D~etsJk~HkLOmqgBeq9LAupm; zVwP~?a4}ghuJla2;$D_o2_?YO^{8sSKBN#iMSRs*O-Y>_mxrg8kfXc`!;{BE9mGv&dBMNHQd{t?I9GZ-Fx)LCccMgx{rOZ;uMy5#YNO&Ws z5rdE!uMvTK$5v&aN!o_hrrGg(H=Bz~vpXPwusqo_rv3=4X~?E&52Dik>dAd4K2bz^ zEG)41M7@b$`RS19mZY?3i#h(Ma65vXaoy@=2m|wJ@(k&wm+ERB`DyR~^J~#{egKB%pSt=Db_h^A-DB)i8^(nbTwr3?`f@Ei~qWBx5NO_KqU9`A1+nQr0-LX|~473Q%qWj)na1>~zqEe=(LV+xgygzq?9 zx0a(OfC%GEf+dpC0%PM4y{^|BmY{YL2(L&L*6)9IU2md^Q9Y0Vcm*wMx#z8-rhcBd zjt9QELdw?(*XJRI#&VUvv>38p)sK??GK0QNS)lG!%IaTo7_d+q)RQi;v~TT=M{9R|matYM@!3%Hwtwjgwg(WD%=M%nZP{&F#D$M{!Q$ae|9yjHIoNqa-URx#celANlT55C2QMFf89utH)$Dahcc98sTUSk1~_`9;;pwAJCD z*-1b8lGw9!S6O^2ZPhr`!nVhjr6-q-=90s5&E>6btoQr$YIvN$v{%MY@;r1vLR%Hl zvhgbu1Y=TM^(E0f(D?h5RmzsF3h1a#tszl22Oa6gR%!Fa-G=s?8l;DK#58st0Ublm zV3n;;FJ&Y1j#-KKLNeaz`M2E1N2Uw@_W)67Xw!^Z+i6NE8C*CezmFBs)gg69tA2K< zp-Y+uo{T>h7+5t)Npw~0U}dXUYisreCuS|KOzZhW3b`6F__Va31s8{3z}H^ee)#aA zezw#+1?Ia(s)cS~u+7z>>v4q8g^e%P1Xs8FPuuCGFM zLUgX{cv@`&8w+4jhbhL%vn20;7})aI%>kKAS1RKz((GmF`6wy_6ne8@KYY3j(j$4f zUlzewK4A0me5L{Wu7^1>tA=xh1=fLHXQOz3l2}yVlnZ|dDF18{z%hTEX) zLRn62tbniENf)AoyL0hBTwFgDYx~vb(fy537wJ0O)k|p$bmuC#%?%Owt41o+4mp-@%!Z8RZX-TGF=gnMAGhTWjPMvTSepYzfeIOE zA__^FEYuA`ST&&ll4XEIXe;VDYZc|=+bZD_C*zV-tl^|jC4ef_E;-iEl2r+9Oou;# z8&*ue4R9R5fht1g^?vM8~zLjzX$|0tmPTT@9EVb{(gf+YR@u{|c@l zD9z01nGU=jaC&8p`QkE*18DdL{IZ=iIG=HB7F-{VjxI_L>Yla){VPU^Hsc{1ec-V7 zL_Dm&=vx5|0xV(=|MIl~co0&GCrTdbUMCN|N2H=ufoBn4ipMK5D69}RJwD$r53MJV zJ64?z3xUU|E^(5^(_9BPPC^?D6@D#Pu&qLvqM9Yn5FuSVWX}MblsWl&X;hj(k(@Hv zLB%9qf;VO@PO&Sf=!Hr=UO5qo7d%x%K&ofrhrFPG7D%oHO%QM!Qbe#E-{NHeIZ*SO z+`uLZW5D_mQS*tJ1$2>)s+@eeAX;GpH9kI%q;RnxUO_@N2&kqZe6s4fygTxk zCGJ#Zw9>gn!U|7@Dl51>^q6HXaP8EnWh8Lz%vl$Y?A^NTJx8q4IV4f-CsQpRxIOil zWiN0o*&RmHu5i;0^Era4(zc%j#m&V=Q-5r9vySuwffCOuxA-KD{ySqzp zcX!u7fXSJ8s^S84hxOUXBWpzxBG0h#@z#Rni{y>Yg9e48nYSpYc61lAQfZ&$c z+l=oy{GMn&mlp6-exgt7T+&kndEOfmv=0o=oI5;-J86vknx^EQTqmtpJ@Uavh}K!@ z!akRu@7EdOr#1l1Fu>-xEZck>K?T;|j3=#}tFDT1$XjFrOBOq=mea0Z8Tg<4He7{> z1w3O8-DA{FIbF2*q?l~0V~~Xg%qJ~$77=y+Jnhvz0tf3n+O-x{#;f?G;-IbKB&89) zL3pC>jFRXz=JA(u_*`@2WO?>Rhi7hno(w9EI|yeW8ncJQJQ&?@iVisMBwxXju4_V# zJNI)E5>66rv4E>%Lol;nAYaMuQG~5yvN2Q4AN~2It`XBra{Dv*iaxn^D&-mFs2~gy ziWyJvnOm%v15eG;+A)BI=YK?agwMNUD9R_^vlPAsX7fbKH(`T5hOWOL|65 z=qRj>EftBsgu--x659M>5UOtWAjDg%b>Mp-`7c`eTRoM2su9qkI&1qXI;sg$V>1S_ zm`9^{k8y;K*^*(}W0PVWAbJ*XvU;d_ZA+@e6FklU*7#HEj+Ip@J8%p6h)J^XOC=Tf zgAHKbmLBY(xdlV<=!Jb$J-5|B(ZvtyQAcEgWws+W_*sD8)_@KY;$TvDI=xxP>yBrc zs%Y0gZV4rAiJ(AbDqi&lMgZfAiUcu6^(O2=%@?A0Hy=~=CdZogJ%IcdrMwGL=??rg zDM|@`ABQHyDStk6HYNB2#WNX7iK9(`4-`%bG_w+t4#a8pc1*z8IQfz(`;sX6lIAvZ zZ=z@mF2vF=iK^;YJ;M+owDMt=A7@~3XSyQ~_V88T0=hvlem~5f87Hr?N3R{tO#G7N zDm)}aerL*6T+OP^7(gJl_nXjmImlEv#sId+a8~K09yWu?f{}QFZF8@8NXaIx3y?lO zJEGjYWF7Xi(GaaFhO)lW!xMEOe6TycVU0d;Pr4J1K2V=b?lo{>#Up=Ea=i~TbhN^C zu2}6%ejKOAe8hDqOn2x=6>gHCox!r!uJTETneMNw!j2EvY{5`G%43E;+wa%g^QHabl=v;fo4?%fYt063vB>#pZ)rpq@}9+?qmL z6t!D&$#(~;RG2Dig<>GheD9>=Ks1T;s330|6h9( zf2-TIwB69m(cg>Y*(eBf+DOxtu;g@^L4hLLfWnaZ1|xX&(lz#9(%|uf69wPlFJA*+ zyQ(Fl36n$HGW&Og4e#Z%@1KE=K2eHUduTpa6K=S1LNYR|7L<2PTW?)oufBbJdwCnJ zj{d9_^aRcg{i==+lY<5Xp>NI6vLalQjU#cDkKAkkj0h_}-KMBG*C0MBUZY*|4kY*c zwuUe@Lpk9&XgUWIT`DH#j@-t>SfFo5j(q`Rk=8{5+ zwD6Omlq}iX`nBVF%J`x{VLbN4RH-4cRaVg=5;1D32{}P5G?J+#YjP2jF~VLW4c2%< zloh$3aK)2Bq*&7CKMWvk#&YwGM!z|!PYaf&zlGM3Cd;7|I7Gs*IcmY#1nGY*(Hjpvuhx!DmUyF`G2yMd`d*GMXtR zN2}4Jm1Ubp?ke{?XBP?n6z42sm;Ks^2IVwt$ffJfD!z|vV4V>DIXdTfqthI9Wi_DGlER@*dN73NzDiNYaT3nDgqKDCHugES#dEiiIROwgZH?4%Mv@TX0&@}LkQw6#Jx$U7`VTs9G37fIVA(N$ALQE62+sM~zOT6WN3y zsz@c0uMstyKxv(U8y|ca2^YCq1RV#csaUu8MgnfljdVoUk~f>yFnK{d>ubis!4Dcn z2V^fw?>Bfz7M1Kc;}`xe8S^OLfjytOCeKo-sl?Td1r|H2^|N_t47%cG4a386s--}_ z&FJsc>Sw_l&R?S%Sj1IZd0|wSdSwP|DJk9HRO`{C-<+kxy_6~8aCC$;A4w@TLE!sb zZR=xPS+^iA&DCX%ZZ9APEGQt(B}wuTU=-VA`qMDbDr}{?Zxcomq%dGSt4m1q-mZuf zvH)VI5%|tJ7{WGbp7*&E5BwYPg=-)ys07qb$LZNWScYAXipivH`XMRA4I}mXDwJ`F>hoSTf~k# z=DGPo=veGOyH$X)R;7-yGC=P{gpQfDO>7p*J5A->t(lWI5?63smZmrfBGKbDboz63 z98yfRnfJJr+j>3}f)SSulGE-K0`?LJZ(#42Sxh;;5?eM-pY_2#&I(KVbs$c3L)qZ; zkDClD-i~`|`;=;MvD&n3ts+I9UM?*PZE+ikysiA(JC`J8Gguho0+AVAjtqf1?T&&| zjyLl8m)yUzF$3%vKBZm-=*bNc#C!%bF8cwPy~9w0oGW3%#LR6Cg6zW;F#gdJY*t^> zsA7D9YTRDXw-}rACuF!QLg9|`9_*`1f@{Y=(~r5Rs-c8BNtNhNo+cl2Aco|^q_(|H z;4lUc`JQNhpHLYx#koAa!LQhm>x>Hz8oZ#}Uf8}_6-!k`%xl%s(SfUl)NDasqn=DD zKNN{+OES?{Wxq2DV4R#QB$3nZZF?zbdyhNgC8cOYcrz!_5n>E%F@$6JlA8vbnjL5n zIsw#rr&uMQB`l61U_h%QNGPMXSE9X8Y;8Cy?5Gl(4_W^5e%J-cCR?<_7JRh zcBE3-URz8*kY|#*B}Fo1CBB$Ya1_pZ@{3{eca@xvL6B_(`sHAYtYbVLXz}t8H$t@5 z3s*MEl;#a%?sx8Yi*m_$1vN%BVRk!e&=9LNyMKYzZ#7C>E~T4o-*(tG_^-i3&nKHJ zYz?Q&hpX;g9$R(I(_Lj7%@(5iPkC+D8GhA@-XGapD{__gMIpgpLiq^YMl2he+nQ_Z zaHo!B%$$86IT!Z;PZKZ}R%~dj?zH$4&000(_aPA*bhRLS#&UZHvm$fvT2FtvYlX_A z%wV%q&~E8BsbYoI{J4*Qw8nh_P{+c59tElYU2FUwYgGS7iq*08Lbt>ajJNX;@fbDd zf<+GwoUfD4vF&Y2a?*7%6_p|lD3R}!^9VIJs>k!Rn3J$64_xvo-jwNVP%js8RB3Kd zk5q9iv^mI2%0oYUI1xHU%91R}x|=+=VEYQST+>s}cBjATx_OuNtLtvE-?duE59U)+ zZ+E#7jjtx~O1&5LxeM@m+-3+271#z!9`7jQ5ayrlsWXH7D?vhU!{YdBecn~vRz4k@ zo{GPBRRR_tzqnyMTVJDk6~XyK2qoq{BM#zx+SR@Htn71(Jj$-J_G7}3&qNVwfRVk5N zD?dlEO#DSMu3tw?9@|GLy4;4j@O0FTHV?|R>E4UJBq|)`t#m&HQyq40IxbvEq+4D- zL{eg}5_N>ENCfio~g#y7sKcn=715KyFB!&QW<=g2)hAFuRd z+rwPW*~Lw3W}%{ZY}u*?nTnlLhVZ!K$K{uBxfoKx#M)_fRz&|u6KZ=qyq=akRB)h) z(f%8DXW!z(Tv#T7`Q0;h_|Xy%_|7i)@UH5*O(NLy&p7XB;qgOITyy%f!{$SX6W0w(i(lwUqGBbD8R8hU;ndr=}cp-gV51%+(X^B9rfd6unmK^r_= ztD1VVtiERjsB|;7KgngScE&mFE`DazUvT~P-gksU^Slt+bY=_fG?I>`LRJ7ftbb*7Mtq9c@Fbfd| z^9&CY6Y^7qh8Zp5Y9#8%Sc&`PeV7cMp|6;*-}NLq=dKJXCVmfu^ng=bvWh8QUTS_B zRPc$yk57kugkP%3$eAE^CQ&OG9$Tgz+;f)Pq82-^!G06kUXSw<8ZL(a(7W$b<_5y5 z#F6D-MTsuMQ*9%)peF8m?S}~Uu`vCHHAvVgz%mF_MXjLrpgBE3LU=q9dA4Nw4XF?x z&t#ga+-8%lC$JaN-ABjz`-k2eUzP#rEx|dKmVs^&#}`9J^+|qCDD*V=H{B)&G&4k6 zl&xyB(_Fr~rW(}t7(apJ`C9hLSQ_2B*o_x&WeM|HPOALJ_itm@Oib(WUu$KWl4=WA z-0ezRV|KjJ=?L_8Wgqnsu|o5(YR_$~{OZ_@8C#1C#_(X*-9(C~+rW%p<|Q8(1w-$f z8XU+a$y+#)f36{~?t-eC4;@kb`qvi1gvBqeTLKo`WN?VocCFX3)@9gfbMT74XrT=p zwN%tbiTOZGd6l4G#=A*yp^Smcd#zWdXW%Jd+eEG>4O@wAX?)JQisHyi6od|G504eH zEnqU)rlj;>cZ>2lDW9hA*y+^eZ#*KMcja#)cVkFW${$bGer#u9j7PId7Y_y7_(eUx zY=apTma8Zs*t1Hsi*H3IZ2bw|7?vIqwhH`v`VDA}^W7j?u{;;>0oIbPn+0*=+(8#) z{;W%(;|PS)`aFJ9HG>c77=SmB?8CJV!$kswaKs2(ikSK^_kvbh(WBxp&++|+ILWZO z1V>)YGbGX{kEB!ii%YomI9>YAuL__h_x+UxPfC+;WCDLgM$0_FjTEL;N1m8LF@Rne ziuPi_$JxP9FYNxmz9NU4VYW z9Ds8Jz1T3oWD9{mplvtDxAP$tbB5k=E}QMR>F)btBF5Pw&tfR8gS$H^5{er}EZ>I%G$(c& ze;l}jjvfpbX%L#&%3*|`EiAXoU{g%Vs1obTM-anwxs4+K zKzAOXJ2Mz;FY_piTXQ{tLTKD6LG@=~4IR~_ImzZQ4HYr=L4o*oY?ZSTqd84+{aEIq zcVmqLPK-qY8O#=5u*==~ep3C|k6!yomty&Y!}_ttJQq5Ggm!`<$o{ALG4~t5nih~x z`=HJ1fU^eKvu4blhnnmAn7xP6C3upHXWbYLe>KTsY5R6iqzlAOyAE}8j{;*K?Gwo} zbAE;iZF7ve12ip`r;-EKIVM1;kClI%Z6CfUx(@G2+hZ@uqYjzKl_u7|Me?MCo7VbTr*yhK*k|wQ&v{tLWIM^EVR$Y^jV`-s^|o ztg^nnXMB4yA<>Uf1A~jF?V((VNKvCAh&vU0PP@K7yGDS2RKVXGI_pdNA&Xea*gdnb zo%ZyJo!;7sL05UkS6v(`&7-{_^!n|v z=nn4+#OmYP@n?VjH2tgY+`S~hxRyLKNPGF2*mwNay!0Aj@;U8dW|XOC%ys4$CtKs7 z-~)%pspmjR==(ps9xgWFQ_{dbefsiWwsrr1)$0Gp-K2lhtg5<-Xu|04P#(I}y0PtH zSZdQv)Dfg6!A4^X6bLySelf+?p7gS-8y22xhUR%)Uv`6pdOnDS2E8nFa2a$1!|h!T zCt7`ve82wu{rqsj_ubMf^$VCa4Xg9SiBk9c5yZ=l7Kln^V%T`77I|0|xLmf!yMrt0 zNULu&&B?FJ3^>HsJYOgm-|0RYgwqDP8iZ@Yt$Xfwn$P!E6c&{;T6b~?nN8z$s1(;^^}7SZ$q3yrm-k6D`GsP- z>HDm@lVs?==jeXVvhm>1!4&jlYH`fe+#J0;xWn2w3TbZ%lHG_evuI$7)!h2J78{@1 zwSV@L=njg@h?r&&rk_qTxQN}r*+sWC$ZqG0gN)JiPX=7CC<<_-Cqe|pj6DXTl zR>56q$6;lii7-N?C5~~MP+$}S8|t|9aYj0b#QTRsgc~dG!vxK;riu@<6ss^5GdMzh zi$dBApbr^%lJJR);XCc_J#<`Z=?ROyTy|t;UNPE8K`L+*z*V znA{;oUUik+x^33M1mt4<&ADCOC)~vB@QX#s#}Rb{+JImq{BVNpP4p%7>c&>@Miuf6 z69MvgEb`pFd^&RaeD?XOmGDGnPIdeToOu;(#*KwtdUwF5r%&NX|E@Xu-}#dLje;b5 zO+0b*;SW&}Fk@*cYT`#&BG{ZCDmS0u?7t^C077n&?Q2gdar#U=xXvl@Z}1JDMTCA3 zJ|I+fUEenn4PdI(rU2--GX$LfbhIp2XvUzD~jZuM6b&*!z??4OZfn%-aa(#SE7Epzt~tmg1j|{pW89v37O)M%D4*d zqk72kk$$i*_H(~+zRRN|ljIx?7L;xh#dk5Ay8kOt95F9V(d(vFOwL+|4)d&Oa*`Cw zFejF{o5Al9A~Wf_Zf{AS-_^sn&cTL0`*hNE7&pJ8gwk6@-u?u*4405Nhe=CS)|0Z= z3>~kHl9-oWM=9m3{;I-tI;85!8fVo$6N_yM++vjqOvkmy+@NpPl2$fxH(UH%JV}0P z9Hhz6-lW&uD3KfPV^z;{(NuE57RfPah2ZP}a|b0mIeb~##Dy0J3&OEG!;vAa9k zt}Xkci4n0}c_qMA9z7zE1Q0Py0bF6zP@-(k`dJ;JI;VWi!w&VJjnuFDRSlvz=R0YC z<=v$xB!v@XJ2l%xwrwc&vZ!)E)Eje`l2Sl!PcVjrIsg&-lD|6ryYb04X$@ri`2Xkm4a|QvZ-sbh(pg$pZ%%Z)2;KHLMr$+;nnm9-myL__f1rR$S3ypFZBk zDh9D_-Fgq-AkPph$f)H@x2!}-A%pl73a)-}lJc6sFPL-7Q@0&RABhr314-mP?82;B zr@n|5sY>LQeOPRmIiYDGZ)ZDd?s)-RpJ2xB={0iZ3pfU1@(clznf6G!DlefblZl7R zVz27y*}Ny#hqjGPIuk%RnN^k;-l}Nn00K@L-OOisvIY_825%&LVbCIl zU=x?WJ{MH{Wfjry|zeJcocc3XO2JtPYkUCUNj3!X2Mo%>a;y^g7>Ov)| z!E@mr#V-{-xcZ{M%pS-P+-lj|3CQ0466S5{V1r+%JK_`Tiyg8wdVC!Vv@g?vYQ zkG#)xBN!-14|DS+Oq@gog?}IpBuSg3&Tj!zt zubvPIp%?Wow$eb9TS9&9DR~}F8jcy~bI`8lg)ASj-3-sH!W4DoL)R1Por;N-n#&;OA1F_;+FyAW~jXM88wRcUh zU!bgPKYRh?0<}xyb(eN1gM93K)>11-;C)12S)Zn!WK1-8y}ALpVovZ(NesZxAoP=S zo+?M4rdn}II0rVA#44iecU~n_p3f1Ox)TW|W`u^D zle=-px#-~&C*q^n9zTL&O&-Y)bp*xQB4dInH9M ziYrV7uNlP%M8r4JjwXR}yE_#dmLAo;*KeWw1i~5z*B68{lkA^<2}RGf2ybOT;ljTV zf3+%PjK|N>2Wd#yQhP%^#wIWV;v%Qv)`5XIfY_o;K4WaM2DmT$pVV?^iNYwUiuPpq z*$D+jHTk5ddIBLTN$4}cW2PloD0h_gdRy+Jc4=48OXXuQ<5oH3ROtKNZ3RUPxgz|Gh~WmgcEKRXJ3!n7WpXMp*@+z?z?P7&3H*sQxK4~Z_kQ2Fo}xx#$mN0i() zu5df=#x+nR0A)+#MK&lI64rH&X5D_w1+P=f2UOWFtVDS(oma7$1EC4G*Lsu;W)YD9 zQ@-dg1ibj85zdP`R#fC{bSKBh#dpb3Q6FA6XO5qWl;&avLC@addp@`L(t!McB|o!QGBNfP=cdMffCDmh$z-&cLPZj%}AI>sEDxl2qWJ-(_5@ z!8Y`4KerX;BL0@!Ifn7{MX16}PO0wX5WT3O0n^FLW?p15?Vd4jKkRJ{WGcJQm#03K@;0iAbX3HsAev0dyHhK4QMlSOegcFGHwUaH}S6YmD8D<6Y zTc?hFD`RmjOs72J8t7Me-Q-&z*akZ#eNv$knu1&Jh3bT`C+KmbaJ-!nA3aK z+%7$7gp@ZiW)NPN^)S{rir99@bk0Wm+iPqrcc+A+@q~`?xHOmpPJ&jE{#6~Svhjo3 zB1!cyxr$Ld7r~ODLn}~f&jap$xx-*B2ah$<)2JcT%e=2+wEK@>Y94TomklMj*nKM= z*M8bMYGm-7DrdObuETuN&KJA)k=6CeS!}`LJnRL};%Y|V=d)xoP z9e$*7#Mp0TaAknMYdMlnittd%3J;N975#HUz>qi%EV~;oa zHK9aFvNfM^LXs$$0`w<%>lbJ!%HbhNRI*XF(&DfX;bd4R@j%QN)SsWF?tgB(!xHsi zZ^mqbbIUdbpLa@k7My4Hb61)d99$Tk+3u5RJSrmEHfZl6mlE;e74Oe4R2{$a&2$HO zlA)Yri-euY40!XVaGE6k-krAqA857Yb`I;hMwytwn2?<>!MEg-j2VPPWvn8pj$3>x z)>)M|*F#GIAhWqSm^e^>*>4cN|3JKu4y#`u#5r|h+jjpf8hNO}hVhYN3} zVYp`uZ;cwj7wn;+sm)1v)?=uxNbu5j|N1%a=#euajIL}gJ}hi)t!Qm6yrr{r`>`l7 zd~|;Hl6J4HOir#S$-^+brAST=li}jCG#hDwAGXx16b(aBl7{M#yZ&E6Q?;0HMFM6- z(ju|7MsP#wm(>at9X*E1(nwnc8iuN*Lpqc@8S5J>>uBj!E|ghJFl(-aSyUVAtv~-z znvkR<`>GI5OmL@=ge|2TXPflTNg3}jr}V%dq2T*RDCqplv+W0c49Oll@cN1 zJC@FEww~z3lybBelQUHNebA_t+*rF06s!(hF0xMdPs-Jl#=;@>E}p=Ff-jnUI$c2Z zjJ}T(Pc!RfaVsxrx2Qo(MEMxF#|A+TSC*(3o8hiM3M|xfYwBO}xG!zntjw3MA2F8F z(K^DwcPgvG|LO-{vO69s{|(D!aLMyX^29$^>-r;2qf#3W@CIrsw;o<2WfL_UVh0Ka zCJ<=S&ABAARH!CUe{E70KPkh z=48ZgGL3i_>N+_=1|{w2?+acEZawE-dznBX@xHZ7rXrb)Vh<=W7ho@bum)uI30HX` ztEE!y2@*1!wetl=a_}eAMj^navo^&f-oQlTM7>J@S3s!0D$lCEqcjzK?Z|wccR%GY za8S;2_dJI8Rz_3Jg(s0gxa;hYj=l3Z_epGTn<^Exu&yUI(P`6HzDv6F#yjDh^gl_! z6I>7@YQ>tu3ttW4b$AYqwRr95(}$97Sbc{FCge4mioov<+`DM+b9k`0VN>f5pua_- z8nuXhR8UWhf~6=?cs)ioW-t!@dDdxp{+nmA=Vd@T9N|6o$xxuF!jsJ z0dqA+DX;NI08ig=gbTu#&os7EmUXPh{c{rE&>cd;+?@$}l)|KBFXZ|b0W?NgQXa_kWuJy#A`F8Tn#aD* zRF7^&{zAd!0ZF^iVEWd``w`l^;XJj1C0NS{Lu5hDaf-|EiRSZbHgy7+2aub@~#o3gV{i7DPj}>GEQDIMVX0 zN%V}Lyo_sAnh_IQjUbHMf;xlIGIaVal&xI0K105Mz#kPy$v?_8-DD;X0#MYj*?cj* z+`9(=Yqe#OY}xDPK^)|LHuI5skH4B)lib0&)=N?sbj%He^|+elTph)WRN_jhivk7P z%)fS7&mCbF>bQ@dR{qixZZK9qg*aQ$Rc5|kg@aSrcCwK5&>i!UhBhDKLnQUlF@QzP z6nn4$8yynKU30?^|LJ!&#?mNzW&4; zn2_bj%B^s&|27~RagoEFaed~dU zLW6jYF^VEPy|H#boCd~uMh!lKt=7^tIvy=2M@o)~p-}9mN{tVFRvt!;M;^jf`BKV; ziT1PR;6?a!LoQ~VL;|ip`ysMBJWol;1D|np_6xGE%#V;l^}-bgTtqoB@w- zkgH${v!~nxEShh9UQ!DDpNf zd{aX=sP2@-!dvouX>KYY)fjREF>dP znNU{QwIeQ&8hna<26`2@G;(GIU@Ah*kxXe&Gh*Dvw7gGEw@IxR#IdfC7wMp?wgjZB z>@s){KmWssr4{9F4dM@;1kj&8sr*Yk|2wbhzxUK_|LUm=sIEF#Hz#nBl0Gx4YeNbj z6m~F_ehIt}8bDgRR7z@SpA>v4XCGoR`n`>GEs1jlm{d9C>>c1tZFN1GNOe8je0z8u zR{X@~l`MwD&cd&H%@6f!++Uvb2M)^w%0%_RwN7tfpg5!~;D%z3wG#ta zb*>gm(&m7dL88jc&~>&Xv;He5xh&y?Y1zC}XP!W{B7L;P)1(d14!Krp#nEn-)OygG zrhB00+G6{vkZKDoU1}L7kkMq{jDhJ?UPAosv*E$-VCTGX2ivt;a%B5(N-FBf*&RPc zR4FZPUK)0QgX*?ili49WPN1S!Pkma(M<`m6tLYag9<_+=L%VJphbgxdzX`MDn%91D z5}n|&Ha&A5)xzz*o_5|jM#Fw@a1c-P#H9A}e99|c3<`)wCuq^5K-!PDPu+DM<`bB{ zFWsD0zt2+ykOAN^pV(tN4#yoaA2lOh^Jc3+<`pGgLCtU)>J`TNgHW6}Krv}WaHviP z8@J9c4zL59{ofdP`(GN5W!lDde>D-TRlDxR9S~)c${}&^VWbDDKTW$#f(C!A;MlO( z$jnGM)8>ec23rw(8>%hw0z0zh^{ouvbV1B5Ek%kI`=HZcn z%yRX_*w(1?InzW^M?;jMd7`y5&pf0TVy%)eW_`fu;c{2Ooye+{v)fm;Dh@B*JI z@gexPVOR4iz7r>y(m-S3QOw+nR25xlB{lpt#R~o~%iH{N-{*BfbYqC!omvGUD_^im z$+tD}^U3#$kB@E3-}fEN2vGtVJS91r3K#RYQup&K@k?#VPN`ioJALSMM8bK6mDWNH zrU(QL!Wk|nyB#Zp#$?$^6`R{I8V{7=5G@?=y+Rv<=`^vU#_-NJRl-EOyl0%pA-(Pj z;bom{&e$uf@jT9;_SQmJO<&S;Oys!9siI9E*=J@SV+SrBDBEULg43ZqH`lbiwp&T> zsI%afZ=q&$fC1cWsddB-)s;~Y9yNv%MKZ@^Sff_)%-+{1Lw8@YOYYs;KH!x<<6SqI zj%p#B8Jod7O%7f=FWwEeQ*U`;alEFpA~!FParHOW*v(W)Agdyl&7=#L2^!4P`J?)5 zKr-E4U8O*aemCZ9JEZ5{AvAvxACYHKnkp$1LDhB_6xRo%dMpvEN-r2uGHW{`dYU|C-I>*%CdZ^ZF@QxKpLM| zb@8zdomn>XOK!SwcrvED;k@lx|BLbL7E=4Q-{eajW4<@R9TQ+~U(|lYZYdj>kcRTP zH6neFLfv>5n4k48IwF2JEH$5hiMKQ&qB-tE76_ULi@!F8>qiesk7o`%o0sV+fiC%y zFN7=|r3m;1{GA`b=GGW!0n1$cR!GB(jstE(sBX9W~5PXq280|q@MB3{jJL`eK%pzYg@@1bGV#mB!un@9{9 z2k;pIu0P2u72-{iC1s+0GENj>STjiH+fZ#2x~h!&Cxh=2!$_loUvNh~5QE+y5$Eg) z6!vz^L*Y>1=|W>QLiy|o1p6k;LqVd5udBT5)P5gGi0=Fvh?eR<*Z<+a$nO|Bt!uSn^KS^%*1AGl>l_5k#SPW8VS|vf8HV3`8i8_g01k8m*^S|=kWmEW7 zfwE(d*ADnI`3ve0TmNc85jpmn+2I6_rT>xb!ATMy`0>l9cDVepK!!vrdt9Gh{3KIORw z_*F+bKTJB6$5{adptZqWV*^U%Sm_#4(Uji^Yc#lS>qX>en9^?u!=^9|_d4TTbcC@vepb3R%T>%1KaFMs=}FMF zbaOLL3~x1c?h~`bqgjwaYF?r!!9|MDjBXo9cwjKjOslb_81?`|_qDDeoo^W<-%Xvr zzYIjbDB@LRLV!nWKwL~34c0&O4KXU$i9$r%)0@gU1!HBSGmuKps-Ny^`a?xNYO~a5#|eaRh`h|gxt&-LaFQk zKayOe{ssvv=u6>V04jOukpgxv^#xeW{b%>!W2AxE_&I3`oD`U>+-kf66eHolMHKX( zf>KhZ*vZ$}RmLJd!%mrQpae>3IH?mThgp4~Zpy7FQ*3k#jyw|5Z~PD!&~~WDb`HBa zZ(Vd#eRdI04+!ITE>dwXw%)5xR4eZP)-dchFs~V`$TGbVNdI6bpEtD6v*{q5@xo6s z%sf}$VAv_UcAUE8$KQgE@@qYW`d+Mn`HYOS^np}!L2}}u#5TgA>#{`FeyNaDo(#=> za+DA0tKZF#a$80e{P2YWn|EGQz)o_n^CF*oCIH(oGOYRwhmX z3mgRI4GNCTHSr};TsYLXUsSUy8xr625^Yz<2+ev~uA-_~&{2BCr?x+3eZ3UO;?i&M!&T@`QYu&vKZa`^Sr{nZ@q}K zkRhswh_M|#I8^TNH`-9U=BhfOoX5mob?^~q#&l?({SnD zrzGFui=ahH{!$Bd>qmZezBLnrHs7GNUg?9S^RW%*FFJWe4hW?7z(!q+Dx+2 zv_hhs%JHSjhX(%(9t-3idWX0|PGRf;+vvGW zSRtaM4Q{2c$Kp>NX1$C@|a z-EP>ts2AKBmmYLh=OfjYTJ@Ha5==D8&ekQD7|pvLW*$lk&uY~)MXSy-8%kUL3h3wx zrKH?BeBBPH@1`X+>k4fZ_W6JPLj_v8@VdDDQGx2P|Gx72?|d--zQ>`fI``#IQi`w# zrx4eHWb*2s3B(n@0SimgVc`HX07Co8q&E&($0@{lNC^GaO6=t47JRk#y_>u_=S=Er zh=RG0^LRSX+T!`RxRmbxc)7*s0c4TK4yoUys5>zr{u=F)H9=p(SVz8)hji`7?(4v& zr*5HG9VAyey0nT4k;|F@0yPVJE${0{u}d>}Nz8zwKBX zd2yxJtz?3RwD>A9>#3}I8}8O=88PnEuocin9ay>?`nKzwV(gHPgZ`uO_e)w!Y5<7z zk_G+asL!4kkCX*tyk)AUCZ4TGL{fSX92+p+-cV0VxZ4H7sG!wSy@827`F?H@ZcP0f zt;!CnBfa_j>kr;$PUzwK9~pB(o9d5D8=-#C~#lY*vLyw{o3a z3#eY-s_{A<|3NyE%#qmJvzQ~lE#J;f#;{sDg@l1%Yi-t{fXR{(<@MBw>=Nqv9DTzfzT8C3nVii+2Hvohji2WNm|wuGM^w zhy4e1q&hAj6h=x{s?J0CRoSA88e8Ms4HRlXp#k4 zQQULcv1V4rUS|sHs2>pIb{!YfE8*-eDRJFHZi*p7U+E^E)Vv6>e5ldGB3DID@#ZVx zA_OoDf-#+CV*BIEHKm*O9Mm4Bec82HksMk!Vx-%I zCR^C}zlH_XE)ss9hoOfpw;qnTH#Y`!)>!k&nCri~KAo?)HhEqx5oHU4r%19yv8C+w zcSOD_hjrh#bEA6ogogThk?*l&W9?!O#B*cTlACG|fg;smYt834{or2aRKKE<@)Y-x zXE3C3ew`^vOlh}GpdTv{FSgVA3behwV#c{al2h!v%iGgvOjBhYpLi6QtjC_yJLExV zo@fAB&!Zs})KK2HZmUzm+HGn~E}+iO zo(8nQ@lc1aDySXBh`xwIm>+yC2+xB%8aTd-yr3Vqeob8WtUXc?|LQAgN1M_yOQ}$jgyRniBnSRtrZm1GivEe! z%=UGy<5U1r@kUM(ZSjn?E9n`HG9lWb_k zIrPF~1hXTT%>;+91i|)W_H~B2*XFDm*Jlpo)h;Y{I2)LGW#G3Uw>3+3i9xyujoaHF zN~;QJq)ASRX(u>J@dXxqU)V5+e$e`D6l>@4@cIExz#;v(B~3Fdwkb(lLQp^npMudP ztPdefNrVwt-@wC9ZbsF}F*=d?Bn+u$=uswM^VA2pxyg5Dy!DXxVf6-DzECj>w}yo= zDx+h}nCs zBMIU43Vy}{c%EwjC% z{U@EKhMGiwSpyRPp;P}~(kW(cXY6fm_Mcyy|4GPV#%{*{nCxjg{x#YASfg}KZ;_sh zcZq4W~|!wrhlkG zwAjW2*jg$5?RU#`_i~NupRD(Ii)H5a`)W=U82I(rFJY=40_Ae!>Tq3$G4r}lU_h&Q zO+2&3`dCwJ|Is(9zVekQUh*ltE~QpMDt&PXeRl}_$MzG_p|VI*=4a9P0#`!#YU!Km zQsQ`st=d=)R!B*RL%PlV_6ntRA&g*9>^)x&k7>4CszRTm*k1cHc%{|M`okx4R#KXUsyZs6l^TRJ+z}Z6pS;@LOv>pKE;WY0Z}> zQ-4G8S!X0jVDU$(J@#!oDOM}f>dbi7T1kXUL|xM``3EYl0Ove~Oqh!1IHsIx^0dTa zbH*37U@ifS(~`mX(|uY`T8mzHT0ol3IW$uVUnvqi--6qfNr#@sJ-FB(2B^DG3%}?; z>|fp8A_zIz0I^^dwa6TolldfPRtPVIWt7q*g`HY?5wx~=&xZ} z3e)CbddfMF0|m}7akC`&8rPrkdzH-vzMD2+DbG5`<;m~{#P5$&C(rH7ER9I`P!7$# z2}vNYh@8uxZKtT{+eZk_fZhQ=fnjGPB90^tOOAZlTx-}q5zbMx^^;nZ?FMP8Bzpr? z_x8En^-!+&2!|Lpa+Ru;xCKrDtjSxw$7y(1S!(;xq!uMkDqPs4z+GJ_-=O!d zp!($@96M)9CzgG!f!NQ*qCW>L0nBcr|D(3^j;DJ41NgD`cI*<7?7jDPvR5K|AA9et z?7dgWF_VxzDzZW(A7uplO@EP5S!&y zuZoMoG1{uC*#sfZNtD%2K$yVpw!2;#D2qbt!Qli$<6FI%{LTyR zBD?$LDAV@6CMPJ3mJ7>2}Q0%cp+8_2cu!QGZ1x!8`%dxp|2cLV7#Ay|VPkGLfL zoL1wg;;OLva2eBx{PfC+8k}>88S}%5-zVtv51mubykYiOkX8NU16G;5hV;>(Bfd+iU!D{gg~gNTXpcZ(-Ji8(1DCOCK-pd>yUFBG`pdMkL> z?4y20Za;x=WR1gJUKgMiE`fZY(X*NCOG&9VEs?GI3l7TFZOT-hbB zq-3Ot_(MMXS+hy5s@=<7-E@0ZYcgUzZmG(1#Qw555b}cf22djIl2Q~%m#bQ}r{11v zgz5VDHJvS1uzs1G1#p7F8flDy^Rm-Bw^-5;um^h92v;Z7yYlu}JjjYyoySx8$wrcZ zX;Ex<`SZIw!kvU~;?_NqIaeOp9Lt3QP(q+uMl07Nvw9^XZavn-Xb(~l7SwbIBoDaCJhxP?z_TR+HIbNi9{ z^<~l#z3~UQc!xv5a=TJA?28v`?`%TK&-T>4PMYQMVITED5`2{i{@dg@|t1DL4Dr7`LK~uB$J~w8UDOI`nsndC+`eF<~O` z;35f^>n^o>(Y{X}()32xy1nzKI$n-7lmzxLDnB{4dq-wlk3JjKdb}M;W&Fd_rLo80 z3EBCl*E&Oj6iKglb-j9m-Bxv^ALA14*UkiHu@4n-d+!yUdOeA5;$Xv5ZKz&jN&;2= z_UAiRYNivyCHnI*3yxM%+M~UZ{)Oh6NtwkBt1@>LomB*;8)XanWmh|@4k0WM8FCR` zHRf2Y`nC(<*n%G2adLN8(jEu$;g#wVc}DADoWS3S}!Ng2`n}t58Kr21VR+<7f zZ-Oo(cCv%cw}YbwFvrDFIqMY?e9VLJq6Xe0;KSuyS<94iW)f!SCnLj(l~sB%h^BMl zaW23NcOx1hjx~BZ!oQO(rleIM1Z^NV$R#@eeq7ls@<)#Gc2iuhWE-F70b347BX~g> zVGqGbF=3_2weL}MUMm|3h~0~v1%$v$>00Hkapt?9%dFw)Q;BrOs6*%zar`_q3ujRl zeuxvs!`|;nc+0ez)-s$kc38E2>7hltYcKlkIro!;M*5u2lo}!cV21?&$o~4EQMFe; z{W1;)h)6kf2nd{6li2Bc>^dsP;g^_?Mk7ZU5d+oB+{G@3G-XRli4NZW*n^aQn5l%}N1zjZMu}Z8f&c-i6B7ZQRo#EaNJb z=pmNU-IZ0eUcK?RG!tcRa*t`^+E^wFD3bH(s^ba|XI|n^e?cLODsaI$y}@=NdCq3i z)b5>>wWY8p!*Jql)uNmA8ShcL=3_Km7BlO{Z~G+@hM}a`el|=my9!$Nni$?%>sE@7 zdrhxII0BMAQ!tL;)dDi@)W7udrPF&go%|yF zjXcGc(t1`uD)xpZqQPu>ggx~h(VPyR7a}biPYYHBDcY>nV84#b zR@fgTd2CDcO$vzS`}`ufnTvX&V?s#~m+YqN!~>O3NC)~FwaYoK69i;HQavlgr8#@( z%bE6>#ySWJA0(MdK1AhSqqv*l!XKTb{4|4wk@I>0gI&SOMI`m^dz7=!E-1+{CI=a$ zj@Iq);3Mr)D&J0vQRUGF8%-vPcL;bj(b%UavCL`|d{}ux`%rQBi0@AQ3(;WqcS`^j z@9=D*J6d;e`h-I_8L^Ppk!y_J1&|`fwVRPiXC$s)DpPq5rzI?wd_)l0(3y?2iPeBOa!_Bj&S3RED;9xy(eT_dKm%`HNwnE$rw(<1LoSyc+b$PL#>v zI!kN=ehyxq&x?rgMW_d_M)_#;Cw4qV2R3~}G`R615f|5H&Qn9Ojo-T8X?AfSx{>J- z$r;HXn|Kl1U3l8jF4K4qskMk?39|$JhQFrxEvquiVCn$!Jr$pr*nIq>ICXbd6EQhH8Xj1NZd?8g_naJYYEKibAi&K)Y^x z0u8$XHv#7*B;ovKuBk>J* zX=A!+GiYACqh`OkFEP`2t!e}2Dq-x5c7GMr*7G6%y5GKvnG@LF6l|g(rFP1d+80U$ zs<^_$qbx~Km4&Mchs3O@olkuQPhG|FRy6L=m%|)y?XL%;1_kU*{u?bg>jrZKQO@Po z>OFr^mgnrSXIXdjT0NQqXFexy>bk-#l>4B zL)sfxUbR52t{tQmcg#t#FYbkHXtN#n-EnVgjpaGg7ZVw(6o zc*gJQ%__Yq@y&96IomY0X{F0;o7aM{8b7AydEK03rLeI_c#L}` z!bjE8-bK0Bt36DsqX`GvsjB%q*<25jGNBvq$9^uuEYb}X{!zv0! z=afmG9@*z(UMGexAro1X8QU4Znt1D6(tzlI&~>a*K`bRQN1aMhM)8=0qrMH>o@sL< ze#`+i-GuU&Se z9Mv*OL|8n(jBllz&6!1H>JS+g$=)liCKz3~!&F)JQO>I9#ZWCZm7T1bpz!Tc9#wBw z>>5F;n#_k)>liS%#9oAn`Xc}UY-qo}hbv`fZsz1JlLNSJw#*+T?EfL7_i`Q`P>fr1oTz97#ZsHkt!OA z=?WOsRynT4CG=FR(*%na%M1$`GL$eYFpb`3390XiyW>%7*rgrASSwJPv0n0UnC4mj z{7X;g)cqJC*{4!_qi7^N%+Kvfn9CQ2g2|C(`UzXtrQf)IZe+6wt&_U!qsEK*Li7B? zF`la(jMMwAllOE)%QoXu8*Qsz+Ocp%0ei6q#~Dk4-Z4;_b7baT8~dPmD~3GDp@$Y+ zy%LJq&0_D?WougA%l07yh4Qi4Fl4sj ztVYm^f6T3rm`}++jcIO~3b457PsH^JVYZ5xMVYQJaZzoJodeY+6tK#W1I*8NMx-fl z<|}{P=?F)hyvx@_ttSC8NKDcgpw%tBCZk&>r8PxINt&MiEcSpixE)T--kZ26X-VH; zCtZJMYUTk1ck}^VSZD>VRxz6_?(!V(6>pZn`Ym#$bA~qe5#_hgQh-CGu6^5A;@VuP zSwtnNQbvu0YC0=CfhNW0o~U1s4o-_MaO2AyRnIlYhPYkKb>mDSi!CzmSa8LtyBLOK zg$BMAcHz<>O4nzkgH*W8ERoFc^D*Kp9ziDfF$#Q?)8l*RW--|@O9&4uV~v_R*_3Yx z7m@Upq)%X(BV%1?~ZK#d@01<>H8y_q(4t(18M{Caj6R!JepP3@mX@a zr0Ihta^Np^-4rQU(P^y)DGvBDSPT(6e7W8+K`I(O`&#i{4HhQ{Jm&+t2aBI~{Aw+p z*WJF|3`mn;i4jrQG`jM{g>Z&-TO>wbXs!*D@_e^P@8WB|#toVn{@$KzaTS+mi-TST zg455FW))Z5K#PykGsW+lSBSKI$>6#0p7bL}=^g$DhDp0vopVzy#_fV^dT7s`Yt;uB z+$NdWdYrlIdeauzM#}h+3W17wtwIa^P9PK4X``VM9hR#7z(=L*BUM?;tnEPS=NC?WVEttrmk1dDN9t_C0Wl6Z+K}-Y(93lHT~&n z*<#vN(A-|cj(ji16s1D+Ja%*=BpItD|6@r$-BLDToLtSm^UIs_f#fq~AukA;#_z3Y zU@F%|n78Cy(AhPsEiF%wi}cJ8JNTekXSmm3$0vGA070l3F_{Gtoy||MvZ05U#O(=; z$y5R1?9rotVt*W(AJm|J{!zvlXl-qsc$&c@gcb?R#MoshE%B*&Q00Eay+H1JJ^er% zL-p1LQW2WQWxw2ctW@sVVTuP=%{q|HK5nJgK85f|O0z^=eq?)ys(IH=NA3aZZe>;T zR448fruRkmylaHhpiN7sSACR~fs0yW_HXWLmauiMlemVyXrACSYja)f9EBUwz3ek( zPd!9?XAJYR;{bDPG6}GpX|#8T98yh6;L$rPz&$FWf>0ncF8%e~Msbko1;shhkgfPA z?93u|B~Ax&yz!O`+7W9(h#{5>{-%ICVugM=?ml}u)CpnwQRnjVfL!AKAULlG5_fE| z@kakh_{m6l5~9gRB#@f0`z(n-;4o0P;2PSs|y59PoJuEed z=M9|a*7O=fBu^09DZ*#G58xzLL?k{lHeOG>4xZWK<#TsrePe^zT?`kRu>28`mZrm% zf&LM_bWMD2#Jq+QBn->=VQ214sbu%Y7u$_gHy(!G#OqO>h zm&Wb%wiUJk+s?WNqG3Pp!j@`(;y;VhwRw?aSvL1oTpECJMM|gQ0luKMW-tRbMNR}l zs7glwf)D)VHwh{fdw}sh2}0pKJ!zd?BAN<4Zovu8gWHF;v0g`?7Gp)>46!o_F>SF06z#;aJ5Od%FhC8@5rFLw!Bp$Os+b1t+5tu`?hVuFkaVXlDch*QhGL(m!6I#^6uR0)Xw?(&4F*t4G&n>D&2n3D!mN1@D@}mKEx3xDI&n(jNA_Cl1~JK#08h-lkd&Wb{h%raK8}%=}Q^ z4ry8h0BhEfTRNg$$>3Oi+zV*Uttlcj2EVct+AB;dpK{rv`ArE$51+5{3wxTnuR zyZ5!gToO%agu_pT%6YdE!0FlD9`T-g&go)cCpddX{Z+K{6%;)-k*zU0Lo*k$Yisi6 zokIfVf!IO?Jr!FdbuV$AY~pOjjc?{n4T>qM0T4|7v`mQ<{aLJUl%C1+S3nXb=z6pW9DafFalYyunOy-jth~z=e zt6W6I5O-uCF`Zg9KO9TmYguwnh}zNp(q8=I9$Gp_o9DTCF*EZLvN3DP!k?$TSyrFe z8f&@?2icK09npAkdEPG&On$Fl{N!o&y`yw7s&T9Jd9?IFOYMs-q$t?DjM$tDi#~{- z)3HPpB4P~O!OUkdQhoRf3%h}j!*Ky)8C{WW*3dGc_**?5a))` zAuvieS%9GQk*zP#V6*yO3sOYMRDOe#sTyfoc+y)OXWKaZDu)f4)TEqxbdrX1E!*f1 z85&sPb-6RFLlqe0onBg&S?9M~(`YdVE(0#&T&!o=*L9}R3SVdhUE)@DO13N;%Wq$% z(V`EO@9a`T90`2BjohtS&_I$tbc;qSd4U5IUME*(g_s&0uY@>~``k5nj$u&ub^?f5 z^+sDN-wWOtP`KG$dpWd-WfmD!;_%m0wiECP zM^Z^XY9ea&m5-2Vv))|zl%c>7+bspk_r(VJNM5mdT*z7xyzjNaKPRtngbjvYIqz%P zydp+!m4^jsPm+3YC6}FSMUbN$erMt`8n;Zc%C#!wp#z>S(lh zAdhp&GDiv$N`^@7u`ZS3_Bg?f*u743a+0~UK!xUf6q%RhK>A0Eg(D8o*u*ZM1ic&( zeX@lIY>YTgEZ&uR?!BVS)e=`%+t>BWTx2Vehj(~yoPU6-_GVOvJ^YEXJ3@Kred#5d z>952*@7RyPhAL6$yWv6vH8Y*a*GAo@)=b4b{P@i4DN#k62fgB%W zve28>wIH1Ub;-tkHphKidM3?Seu!PHmSZm8}u9tyq8j$8_KSG1OeL{ADg#{%t_3^O|!G5_BHLw{kx{Qtnge|5u$0S79+>+OsU&~DfXHR!dv#L?In{QhSa)Eoom(>LXIUfkV z#p;l68si~H+U9=l{U|*DhoXKg*%;Ne+YiyR!c@4c zV-4@^mIorW5HJm-oU>nkXTp~|R<^;p7KbN*Bne@^JJ|g0sWJy9kWN7a5hqHLnLDOg zWxG>YB|wk&<*d!ah$AKAX;^9t`M zkG5r>6ie=D!W%-@&qc*>{8k(wwL7#HO*ZiXd^;5vI^n#sKWv1L*8&LiQLT>RpyG)yz=Nam54pLs7F%VGdkW+HJYhItve3E39?$* zeAwNq=5k%;tlMdy4_PkKFbRKPrTe5&)qLDjzVyk)-1zkf=vO-6>oxq}-BTQ#>>bRU zT)<||z{no-n{0$gyB{O`mxDCu)mo&rZirFl6u6Mi79%RC+2!^(+c#z!74kj4>C)O2 z%G&%Em<@ccuxPe0A7lScMpLn7K340wye30!U@lfuX+gpjmyv@><9x!JOR#w z%C$3dVf|T(lUeQfGli9ro6%2`VV_9${@Y}K%=3SimiR~;w3;0LfiS~pf3Z#Fyc>S43`V%4z{;9~n>sV|j z#1@`K>_6yTTqmS&{etw9UF@rp!|*edk%G1kGA;lh^9?OOKnD421LL%p4Zdy=z%rjF zJdZtq=6{G7mbr?4Cg!OR4WG_TORYwifii`FUp)8+MrU0dP1jZEYJ!T zIRX7dbY|u7m!HGwEQ-7Qjs#Ga0aW43onSpD`4twd|NQAx?{*Itg(}{5vg#B~SuNkxH(h5VUP2PC%(S zf2F3sss{~E2eZ?8z5+H^@Sz11hgPk|37!(~FI4SM?+l!t1MX{8n=;T68~z#p{5S^# ze7|1Je`ev&2rhp!po95)Qb&%(DcolfTsd1-ItLV4kcUvKIk^AJSN zu0CMGU7wD$!nHgcha&Gmk&-8nsA6YEo;+kY9mp8Ajv5OE9wNYw9%+d)1HX@-c{-FR zT08Rq`ZWdxgHAyCrOsZ;Q==U)zR$B|))5C$L%4zto;TB%vmTuIWQ-)E^mk zR`y=z%%rPd_5@6fZ2q*cW~Qez9mMZWepw*0Aj5W@vMXn1Dt|F{PG)u{W?vfebYOk2 zLbEg!hz|vdp8)DAof)WR=Imf^=WM0{w*7$$j17j*i-CT<0l?Pjm+Q-CZ9Uiv7pF5_ z_2>RHC#$=2xa4B2I1+$=v-!&{=l&I~UZoL&DZSp46N{&@bNZ&sc4<*K0^v`H0D z5L-;n-lS0D?F8+`UeGxNv~K^Vuv#OG`1{bWNH|z4>TYrNWerTY^V5;mLU72MP-Ntsn}tq`vU5N|E0F zmrUA;m|mwd8|_mZl%Rb{<2&P); zwzE>4!toNFE(|-|_6_yVhlk%9a(fZpXRDQRy027k$7(USPn*#KGx0->8V|I+h?f#FV zn!#oPHUQLd7Ib?5i*Qh|eAwVL$9$3g{~%NiEFL!c#y84t@IQ{l0h<-r5CX?p$sPIa z0R_I>l83o$eGK0o{m-sm!)5~Z^6GIW7$$$)Ro3suAk5XXW9anE@4txlow0?v*KPtGcOpNzkb36 z936#ho#Gw$@3IG5A2mo@3{ZME8+bi>a0091q z001}u003%Xa&s?oWpi|6Z*6TYb8Ka0EplNkWNBe-Wprh7Epu#VEplNkH!d(PFfCI~ zK~PgjPgE{yVREdvV{oruvn?7sS+Q1Z+qP}n$uD-YV%xTD+qP}nSkd|Kd*2Ux-+TAI z=dC(j)gR_lqq}Bx)icK!tso5w1_SgT;TZO%0Q8>%`k#~)RS~3>loO*@_!kTc$l)K@ zsPhHBF(?p_3_K7J>VJmG3d%`}i7Knm$%4uNO6rJ9BY|`(_L*yoTB#i(gNl=jElnQ03Tn@jA6zQEj z@BKROE9}(j{N~1jM~H^D?PbeDYm}J)SU{)0@dtR92Q9<|gpOgFSlS3JA$sA+fy;|% z@_i7ry~L}a{bl6{b2}pu`_M{8|WMd8B!Ghb_-L*s{MXiHmI!p(KH9FT@B;4Lm$Wckf-`Db= zLh)PW628pxKP4kKr#s*_J%e4t>6k1%e|$KtT^@fph}%!xA~z82;Wi(kOQL5B_=pR+ zU(MWq^W?zZ-HM^M5!h(r2JJ`ddR%DulRHHeTaqB9{hID!N8>lAw;pqCIY#sr4D=P{ z2YlSK0RI?-s%D?4MA!p*_=fovrX5j5l#Zugl<|wh9H}EDz+zA`m}1wEY^K3)kxp)% z&engF3Pf)10(>kfYb+c@uG#qlGzCRkJ5CDC+ea3<*4h*f{*|R($P85 z2yHn?#ROdjNKUY%|JNYvRDXlW#;QhWT6SYoFvK~=M^8!JqmV|ZZ15&D5(!f1sq(TQ zBx(zsco<)0k;_`1iy~sP8c=CRir0)3B_|*vb9Thw6%g zL4!}4b1<0vuk!2f2-faj9M8(d%K1&B%a%_#Hm8SFzk)C3b(fJa)kj~dQ#jzz`zV<& z$RzL$>}pMCCQt3bSK?y;F%?+ zscyFGrnHf8;`Xg_G-b)IzfLMWznWrR2CN3>H5(0ovrVX;AKzzhT3vJ0XW&3&spVF3 zH)1-TE^i{TW6R1H@A;-q97`(l`qap++T3px7hAJ;);|7V-~7^$n3}OETG83CWM0zU z=+!?7Ui=C3fAyU`=llUu_;3GRuz%9d(VYIjMSX8QX#77_lK%fxnpheFOr1>~|A!Wo|GO=mZ2qSKG5tGjEDUW;Y)l=U z{?j}8AN{O~q5;VeKtMhJOq=`P=_l&?4?7k+P@UkN-FI*WBXMtC;i=IMr*Q*-p39uCDKEPpR+cX{|5l9f?nEKNN9@ zDSR+PM|~G8$grM7RgeNqqK0ZvIUdGxtF&Q~;(0K*wy^3Ttl?FEgC_@J8=UccCd8C!gDM9MVnT|bGTgvP)@;s~0;O~|QHca(A%G6mrc%KP$49D2YtkIft@*|yUwA&en(rfv8oHInbRfP) z*9nG+5x}*eK{wgtX!dQT`Zph(TxRk~4#rtL6ax%|vXep;PgdH@I@$Dms*<-t#HdhMlH%cWzco9iaCYi$9bGCfq~tXoJj8p;i)pVw-jP8FhB1xd>k z6nTDf1j~BvSwtUan;-d>to?<^(FIxx9U-+X=?}?A4l=P!$V_Tqc4+bUAxE)IMC5Jx zzH@c%4h5dSn!U4cB8I68TrHbijiK+G4g9e(=8q#1om zRh=*K9>orjF30U=HXE9QJa^u~L|$L~4{S6S83QH5lIG$$M-0kTRm|!g7k6Jmjva4J z)o|v@fvokt>0t7`r~7@=;hNlnBfYe^I7}qhPT#C^*2pDSPG2InPtBohSMfdo_jV5h z#EV^BXs>6wN}07$M+L?=+zmPxJuFaGc=ax)Zz<-p>p*gn6<}R)@6r;!J<2rzY`sRd zYDBFN>WzN}cRF);Z%p;tOQhoRiQQ{h2mr;w?Hw+PdA$dY^l24~c7!4+r`dnxFWq_W zLpI0tnx>HgXNcWzc62%LH4Wv;7+)_E-aE(TuwQjtcI`^}I^?eFRSXXK<>DQ*3+S8J zdJxsj+lbFb%?1TP>OsM|@hE^n@HrhI)t6kp2Kyp9+})gv$64jhn3!i2+wnKFyU6My zpQwekT9~Ll7e^VpG}?EME|lgtq+f~Qq|%q5G%}OMQc45wT1I=Z8Uxr zZG}-fcw@un-Y*;U#4lVcxlH(7;;p@VZQyrXz7TPWPw^O|sPJC9lGb3nSyVMh^0Hek zI6;>>PU5|sU2Ud%RnUGg>(R>vS(sVlFqmn3g|F!j_@|#!Suf}iQF?>j0>0J&GoyWbsM-t9bcS>~c+h|>J z^((TDS$*+6`m^_;)Nkb6PRjfv5cdqXYt&pnz1={P_dTxQ@(w;man5KSX%lf<0t${{ zw^0P~rb{SO{t=G{*L$tsd)!lQv-tCy_;09x;h$Xg(Oq+)5Wwt+(Yd`*yw1jV{P(zS z&Trd86i6NzJ&9fubVhqRTJ)%H)F3C0wnmzEWN4U8fD%X6@U``+5rJlNHLFi}_UIY)|cQ1d|9UiE|>rIC45u_2$ z;|Ut;V$6unSyW~b_!o5$^{Xg2NU+yc9`ToPSe-dSgZ#l&F!5CgS;#-vsk~xCgul*W z#9x;7`Q`o9`(N2EnlKD_6cPvs1Oo_2^xt7SWf^m2Qzs`&J6l0xXG>R0XAen$z0Lp4 zd)w+CPAIEr-!(Lr0FP*VOk_xuO-o_ZbwOIfA_HSYA24zz1sNRVg{0;tiOZ^HBR5k5 zhXlR^GFc(KKM)TWk#mp$VX{7sY}W^6?nHgA#q@9X?2=twS|N0%l;CCrRbJRn{j}eIvv7{E59j5aOwUoEoBivu{?fOz}=~ z^Xz8v5KcYr`MvY$=7D)*B7=EC9b6v6Z>ac+G(d9 zPKlS?Rz1$9InufnPu=dOBkP`<=Z&R9OOB{+0OHj6au*>tWleos5hqr*!(-Z=ifhSD zBq1u7`4f~7OTAi0H+UKL7 zl-CI0Q5^rjRVOBqs$Fy&+;oT&n zE-Oz_G@tB$isUAzC$QgFH|YFNHOs|QF}}5CI|?jSCar06PZ^zVuxF4feJU>qL{Z*9 zpFxPpL&l2C-KXMMU6h~MnpHtm>p}Tdkc4w1e6|XWs1K-mqH3Y4YMCY_?(xfUTyD`Y zwX{dd)*^!f@GCi@B*FO=@6l%{Icg68U4=$qg;YDkUQ{C_&pkyx5#(SHD-5#bZ&*HZ zN24n&3FU9#K9meEx#K`+7Rww z#D!1VI!gE4pL)Zq_dyY;3oze#2f{k&YmFm}B`YX;Ot>0fYN@|Kx>?DC5V@^s+|iP2 zPHuYEdX)e_y_j*D%I&T+=i@Mo)kH&|4nuS;`l|~K9SF;FEtQniH|C0)&40H=j5vx@ z#A??OH`c1fsUUaelU-&>K|6iw9euChxki+uA`Z0lMA5>;VpY%8RNaU7jh&zEpp=} zdRc(ArAf0)h*OAdHNb>owrJyA0m3b;$DukYNX)M;-@%d-28~M$Sp_^Ng0(=rtze)Y zKYF4lZhQ6?fjwy;4@EFjeUh&(o9Lay?Rl>TK~H%$p$WU!qg&yiCxk8ezm-RyxG+C{ zx{TlUw@|J@Tm!2FMlR}zVd2zeiP8#m`D^${K2O+5)Mc^He>vQqxo!oF;9k&A@ zY62|^y4kckqFuQxi$nE47)8LmB(8_)q^{|;hJlXv6+0;jd8~fjL-IsSr*@Dw{~CN! zQMzh}@<8>XJG=+7T;6Su^$hGOJv`zK3vH9)KlGMLSGY0;<9`ApIjS4Qc_Bbc4)T@& zk(5zc*HLeO_piwOwU^iH5w@_9XWMa;(wjWiUADO>XTjtuz7r5-7hjzacAc>~8s1)!fqZ7GA#?$17j; ze}bOX=f5f0Xbg;jFy>kAk!vom-vZM{4$GwrO>@bjQ;lB^x zZf2y5udE**jC1T}^YCU5H?3#bFIG+^`vSoHa5^o=@QLVM<#7kY=uf3p338mGbm#fY|nGlhsr)+Y{df8|(+ z%2>*NM5z4}RjWWXF?XC!cK@qVcvkHd7=;4@N+kmVlKwZ9g0PL{KdAp!FDz?%c&jX< zeb1P9j2|HhK^erE0`*@7RtX6am=Fd+D+JIeEs39)GI6A1nUe`N1ypOLYFT46Z>+S` z=r+NJNfJ|(p=ob!{AvE^Ss%VxS@C(Do-{FRSk%A7Z+F`5KFxXVJk9ZX{OrZ|Meai` zpB)f>lR)Q-h_!rcL&?0WLy2}5dFG2B-yug6EWN;;8A9Tz$S90BVqA7EU%!z-_Lchc zVzTdmvuLj~&!4|9N&a9@1WLYqt6bs11v+c8w}|Dg_9xr%fYV!S{BM<2&g{VHok#Nv ztfo7#zDhTJ`A#a@V{O@vI;*$r;A%Dp#_rsmEIG^_ZSi0$tGD=Iq+HTLXT^JtRnM&m zmQS9^Cj%(IQZN6?9SXT4+BD3k%KcAzNUr%FhSfvr#fQ4)8>>&@ek-<~R6lFl(a`Ok z*Yc+z<-IsOz4@Lz_IK4jy_`*-e)3bV&f%PR2`iWSo(qQ25`C+r&vzP1} zQ)yTZzYTl2vG3X|Ar(_#7pOl4eXEp;%JT>)P zhC^nnm@|y?$NV4W=_)sRNb60KE=cn$uL&dr`LUS;%}h+zy`sy`*_JcPHqW3st*@YC zQ-#0RD4Ouo2hXM0hNDg0|NV~*H@GO$bn^G{lN z)3B|d#le5mqyX}}zs;nt?tGfN(cLsvou+mLt9bzXK!x1FETDs=8k{p6DF4jj0*ai2 z7FYZXT&oGAB$0T;&mQI^8q=ZXA!9y`-(qO2kPkH)dPSZmY)kBG&6YJXDT*|~{=TfSPOAdNnz6BC8S1Z0t%0CmV6mCs?#+gQm-hRfT{8tS>K$9TOVI6} z#|*^u*UJ@&^r#rIO<*Hix~&+;RSiriiXu)hh#avXeHuTLykH8}(+e4;pp^ds(UOIh z?~6K1reX81NlhduGgfgKt$I@Ai#spb=G_CYC6K6wVtW;hmcooIcvfj>$Ta_oSs;4& zALOeu{QeS+A^fN0Tr5%MYp{#^3gaUd!logc64IHV--X!Uv}stym!XbE+h+@7cNLnD zIY=y+Gslv3bB17_de;7#rDG)uRaA&j*X-SY_De1Riulb~+rVqSjW4z;+>`64yH9tB zFKP%2wVX>UV%?uQW`=55nOjnkjjA=}o(apuyuTqW@C`Xo!-pHufmzwy$&3p=k;5

5^QwI8vB8D%88>U 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 HzGnac&i2_B literal 0 HcmV?d00001 diff --git a/resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.2.0.SNAPSHOT.jar b/resources/diameter-slg/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slg-ra-DU-7.2.0.SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..f78151c3fca3f6f1a2f6651d1c8a6c23b5dde4bb GIT binary patch literal 101412 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 z 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 Q~72IJfn7wv_NTx#Bk=Ctv>UK9B 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 E0R1+ml>h($ literal 0 HcmV?d00001 diff --git a/resources/diameter-slg/du/pom.xml b/resources/diameter-slg/du/pom.xml index 49912b7a7..f50b6521d 100644 --- a/resources/diameter-slg/du/pom.xml +++ b/resources/diameter-slg/du/pom.xml @@ -4,12 +4,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -77,5 +77,127 @@ + + + du-jboss5 + + diameter-${project.artifactId}-${project.version} + + + org.mobicents.tools + maven-du-plugin + ${maven.du.plugin.jboss5.version} + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + + + + du-wildfly + + true + + + diameter-${project.artifactId}-${project.version} + + + org.mobicents.tools + maven-du-plugin + ${maven.du.plugin.wildfly.version} + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + + + + + deploy-module-jboss5 + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + + deploy-module-wildfly + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + diff --git a/resources/diameter-slg/events/pom.xml b/resources/diameter-slg/events/pom.xml index 6f0c5d0b5..98d8df456 100644 --- a/resources/diameter-slg/events/pom.xml +++ b/resources/diameter-slg/events/pom.xml @@ -17,12 +17,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-events - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java index 396674d44..83d9e49f0 100644 --- a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/LocationReportAnswer.java @@ -60,15 +60,11 @@ public interface LocationReportAnswer extends DiameterMessage { static final int COMMAND_CODE = 8388621; /** - * Returns true if the Vendor-Specific-Application-Id AVP is present in the message. - * * @return true if the Vendor-Specific-Application-Id AVP is present in the message, false otherwise */ boolean hasVendorSpecificApplicationId(); /** - * Returns the value of the Vendor-Specific-Application-Id AVP, of type Grouped. - * * @return the value of the Vendor-Specific-Application-Id AVP or null if it has not been set on this message */ VendorSpecificApplicationIdAvp getVendorSpecificApplicationId(); @@ -102,15 +98,11 @@ public interface LocationReportAnswer extends DiameterMessage { void setResultCode(long resultCode); /** - * Returns true if the Experimental-Result AVP is present in the message. - * * @return true if the Experimental-Result AVP is present in the message, false otherwise. */ public boolean hasExperimentalResult(); /** - * Returns the value of the Experimental-Result AVP, of type Grouped. - * * @return the value of the Experimental-Result AVP, of type Grouped. */ public ExperimentalResultAvp getExperimentalResult(); @@ -123,15 +115,11 @@ public interface LocationReportAnswer extends DiameterMessage { public void setExperimentalResult(ExperimentalResultAvp experimentalResult); /** - * Returns true if the Experimental-Result AVP is present in the message. - * * @return true if the Experimental-Result AVP is present in the message, false otherwise */ public boolean hasAuthSessionState(); /** - * Returns the value of the Auth-Session-State AVP, of type Enumerated. - * * @return the value of the Auth-Session-State AVP, of type Enumerated */ public AuthSessionStateType getAuthSessionState(); diff --git a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java index 246431489..59f42fc81 100644 --- a/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java +++ b/resources/diameter-slg/events/src/main/java/net/java/slee/resource/diameter/slg/events/ProvideLocationAnswer.java @@ -117,15 +117,11 @@ public interface ProvideLocationAnswer extends DiameterMessage { void setResultCode(long resultCode); /** - * Returns true if the Experimental-Result AVP is present in the message. - * * @return true if the Experimental-Result AVP is present in the message, false otherwise */ public boolean hasExperimentalResult(); /** - * Returns the value of the Experimental-Result AVP, of type Grouped. - * * @return the value of the Experimental-Result AVP, of type Grouped. */ public ExperimentalResultAvp getExperimentalResult(); @@ -138,15 +134,11 @@ public interface ProvideLocationAnswer extends DiameterMessage { public void setExperimentalResult(ExperimentalResultAvp experimentalResult); /** - * Returns true if the Experimental-Result AVP is present in the message. - * * @return true if the Experimental-Result AVP is present in the message, false otherwise */ public boolean hasAuthSessionState(); /** - * Returns the value of the Auth-Session-State AVP, of type Enumerated. - * * @return the value of the Auth-Session-State AVP, of type Enumerated */ public AuthSessionStateType getAuthSessionState(); diff --git a/resources/diameter-slg/pom.xml b/resources/diameter-slg/pom.xml index 89537df8b..57e5bcdd4 100644 --- a/resources/diameter-slg/pom.xml +++ b/resources/diameter-slg/pom.xml @@ -9,7 +9,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. @@ -34,9 +34,9 @@ - release + release-wildfly - docs + release @@ -69,4 +69,4 @@ - \ No newline at end of file + diff --git a/resources/diameter-slg/ra/pom.xml b/resources/diameter-slg/ra/pom.xml index 99e7ac93c..bedf5562d 100644 --- a/resources/diameter-slg/ra/pom.xml +++ b/resources/diameter-slg/ra/pom.xml @@ -17,7 +17,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-ra @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java index e14a0a06e..41d2404e3 100644 --- a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/DiameterSLgResourceAdaptor.java @@ -95,6 +95,11 @@ import org.mobicents.slee.resource.diameter.base.handlers.AuthorizationSessionFactory; import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface; +import org.mobicents.slee.resource.diameter.slg.EventIDCache; +import org.mobicents.slee.resource.diameter.slg.SLgAVPFactoryImpl; +import org.mobicents.slee.resource.diameter.slg.SLgClientSessionActivityImpl; +import org.mobicents.slee.resource.diameter.slg.SLgMessageFactoryImpl; +import org.mobicents.slee.resource.diameter.slg.SLgServerSessionActivityImpl; import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationRequestImpl; import org.mobicents.slee.resource.diameter.slg.events.ProvideLocationAnswerImpl; import org.mobicents.slee.resource.diameter.slg.events.LocationReportRequestImpl; @@ -239,8 +244,8 @@ public void raActive() { } try { - if (tracer.isInfoEnabled()) { - tracer.info("Activating Diameter SLg RA Entity"); + if (tracer.isFineEnabled()) { + tracer.fine("Activating Diameter SLg RA Entity"); } this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); @@ -250,14 +255,14 @@ public void raActive() { if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { // trying to get via MBeanServer object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } else { // trying to get via locateJBoss object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } @@ -303,8 +308,8 @@ public void raStopping() { tracer.severe("Failed to unregister SLg RA from Diameter Mux.", e); } - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: raStopping completed."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: raStopping completed."); } } @@ -315,8 +320,8 @@ public void raInactive() { activities = null; - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: raInactive completed."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: raInactive completed."); } } @@ -390,8 +395,8 @@ public void serviceInactive(ReceivableService serviceInfo) { // Mandatory callback methods ------------------------------------------ public void queryLiveness(ActivityHandle handle) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: queryLiveness :: handle[" + handle + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: queryLiveness :: handle[" + handle + "]."); } if (!(handle instanceof DiameterActivityHandle)) { return; @@ -438,14 +443,14 @@ public void administrativeRemove(ActivityHandle activityHandle) { // Optional callback methods ------------------------------------------- public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); } } public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); } } @@ -456,7 +461,8 @@ public void eventUnreferenced(ActivityHandle handle, FireableEventType eventType } public void activityEnded(ActivityHandle activityHandle) { - tracer.info("Diameter SLg RA :: activityEnded :: handle[" + activityHandle + "."); + if (tracer.isFineEnabled()) + tracer.fine("Diameter SLg RA :: activityEnded :: handle[" + activityHandle + "."); if (this.activities != null) { synchronized (this.activities) { this.activities.remove((DiameterActivityHandle) activityHandle); @@ -593,8 +599,8 @@ private void addActivity(DiameterActivity ac, boolean suspended) { // Put it into our activities map activities.put(activity.getActivityHandle(), activity); - if (tracer.isInfoEnabled()) { - tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + if (tracer.isFineEnabled()) { + tracer.fine("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { tracer.severe("Error creating activity", e); @@ -618,8 +624,8 @@ private synchronized void initStack() throws Exception { this.stack = this.diameterMux.getStack(); this.messageTimeout = stack.getMetaData().getConfiguration().getLongValue(MessageTimeOut.ordinal(), (Long) MessageTimeOut.defValue()); - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: Successfully initialized stack."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: Successfully initialized stack."); } } @@ -670,8 +676,8 @@ public void receivedSuccessMessage(Request request, Answer answer) { } try { - if (tracer.isInfoEnabled()) { - tracer.info("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); + if (tracer.isFineEnabled()) { + tracer.fine("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); } } catch (AvpDataException ignore) { // ignore, this was just for informational purposes... @@ -683,8 +689,8 @@ public void receivedSuccessMessage(Request request, Answer answer) { * @see org.jdiameter.api.EventListener#timeoutExpired(org.jdiameter.api.Request) */ public void timeoutExpired(Request request) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLg RA :: timeoutExpired :: Request[" + request + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLg RA :: timeoutExpired :: Request[" + request + "]."); } try { @@ -710,7 +716,7 @@ public void ServerSLgSessionCreated(ServerSLgSession serverSLgSession) { serverActivity.setSessionListener(this); } - public void ClientSLgessionCreated(ClientSLgSession clientSLgSession) { + public void ClientSLgSessionCreated(ClientSLgSession clientSLgSession) { SLgMessageFactoryImpl sessionMsgFactory = new SLgMessageFactoryImpl(clientSLgSession.getSessions().get(0), stack, new DiameterIdentity[]{}); // Set the first configured Application-Id as default for message factory @@ -886,8 +892,10 @@ public SLgServerSessionActivity createSLgServerSessionActivity(DiameterIdentity public SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException { try { - ClientSLgSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, ApplicationId.createByAuthAppId(10415L, 16777255L), ClientSLgSession.class); - SLgClientSessionActivityImpl activity = new SLgClientSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, session, (EventListener) session, destinationHost, destinationRealm, stack); + ClientSLgSession session = ((ISessionFactory) stack.getSessionFactory()).getNewAppSession(null, + ApplicationId.createByAuthAppId(10415L, 16777255L), ClientSLgSession.class); + SLgClientSessionActivityImpl activity = new SLgClientSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, + session, (EventListener) session, destinationHost, destinationRealm, stack); addActivity(activity, false); return activity; } catch (Exception e) { @@ -895,6 +903,18 @@ public SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity } } + public SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm, String sessionId) throws CreateActivityException { + try { + ClientSLgSession session = stack.getSession(sessionId, ClientSLgSession.class); + SLgClientSessionActivityImpl activity = new SLgClientSessionActivityImpl(ra.slgMessageFactory, ra.slgAvpFactory, + session, (EventListener) session, destinationHost, destinationRealm, stack); + activity.setSessionListener(this.ra); + return activity; + } catch (Exception e) { + throw new CreateActivityException("Internal exception while creating SLg Client Activity", e); + } + } + public SLgMessageFactory getSLgMessageFactory() { return ra.slgMessageFactory; } diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java index 426c6565d..8bc06981a 100644 --- a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgClientSessionActivityImpl.java @@ -23,6 +23,7 @@ import java.io.IOException; +import net.java.slee.resource.diameter.base.events.DiameterHeader; import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException; import net.java.slee.resource.diameter.base.events.avp.DiameterAvp; import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity; @@ -53,7 +54,7 @@ * * @author Fernando Mendioroz */ -public class SLgClientSessionActivityImpl extends SLgSessionActivityImpl implements SLgClientSessionActivity { +public class SLgClientSessionActivityImpl extends org.mobicents.slee.resource.diameter.slg.SLgSessionActivityImpl implements SLgClientSessionActivity { private static final long serialVersionUID = 7518916596996009148L; protected transient ClientSLgSession clientSLgSession; @@ -61,7 +62,6 @@ public class SLgClientSessionActivityImpl extends SLgSessionActivityImpl impleme public SLgClientSessionActivityImpl(SLgMessageFactory slgMessageFactory, SLgAVPFactory slgAvpFactory, ClientSLgSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { super(slgMessageFactory, slgAvpFactory, session.getSessions().get(0), raEventListener, destinationHost, destinationRealm); // FIXME: remove stack? - setSession(session); super.setCurrentWorkingSession(session.getSessions().get(0)); } @@ -99,7 +99,8 @@ public void endActivity() { // endpoint.endActivity(this.getActivityHandle()); super.baseListener.endActivity(this.getActivityHandle()); } catch (Exception e) { - logger.error("Failed to end activity [" + this + "].", e); + logger.error("Failed to end activity [" + this + + "], baseListener [" + super.baseListener + "], activityHandle [" + this.getActivityHandle() + "].", e); } } @@ -144,7 +145,7 @@ public void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOExce public LocationReportAnswer createLocationReportAnswer() { - //Make sure we have the correct type of Request + // Make sure we have the correct type of Request if (!(lastRequest instanceof LocationReportRequest)) { logger.warn("Invalid type of answer for this activity."); return null; @@ -165,6 +166,23 @@ public LocationReportAnswer createLocationReportAnswer() { return null; } + public LocationReportAnswer createLocationReportAnswer(DiameterHeader header) { + try { + //Create the answer + LocationReportAnswer lra = (LocationReportAnswer) this.slgMessageFactory.createSLgMessage(header, + new DiameterAvp[]{}, LocationReportAnswer.COMMAND_CODE, slgMessageFactory.getApplicationId()); + + // Fill session related AVPs, if present + fillSessionAVPs(lra); + + return lra; + } catch (InternalException e) { + logger.error("Failed to create Provide-Location-Answer.", e); + } + + return null; + } + public void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException { DiameterMessageImpl msg = (DiameterMessageImpl) lra; LocationReportAnswerImpl request = new LocationReportAnswerImpl((Answer) msg.getGenericData()); diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java index 367b6b9a1..c4e4fe4bf 100644 --- a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/handlers/SLgSessionFactory.java @@ -97,7 +97,8 @@ public void stateChanged(AppSession source, Enum oldState, Enum newState) { */ @Override public void stateChanged(Enum oldState, Enum newState) { - logger.info("Diameter SLg Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); } /* (non-Javadoc) @@ -115,25 +116,29 @@ private void doFireEvent(AppSession appSession, Message message) { @Override public void doProvideLocationRequestEvent(ServerSLgSession serverSLgSession, ProvideLocationRequest provideLocationRequest) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLg Session Factory :: doProvideLocationRequest :: appSession[" + serverSLgSession + "], Request[" + provideLocationRequest + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: doProvideLocationRequest :: appSession[" + serverSLgSession + "], Request[" + provideLocationRequest + "]"); doFireEvent(serverSLgSession, provideLocationRequest.getMessage()); } @Override public void doProvideLocationAnswerEvent(ClientSLgSession clientSLgSession, ProvideLocationRequest provideLocationRequest, ProvideLocationAnswer provideLocationAnswer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLg Session Factory :: doProvideLocationAnswer :: appSession[" + clientSLgSession + "], Request[" + provideLocationRequest + "], Answer[" + provideLocationAnswer + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: doProvideLocationAnswer :: appSession[" + clientSLgSession + "], Request[" + provideLocationRequest + "], Answer[" + provideLocationAnswer + "]"); doFireEvent(clientSLgSession, provideLocationAnswer.getMessage()); } @Override public void doLocationReportRequestEvent(ClientSLgSession clientSLgSession, LocationReportRequest locationReportRequest) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLg Session Factory :: doLocationReportRequest :: appSession[" + clientSLgSession + "], Request[" + locationReportRequest + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: doLocationReportRequest :: appSession[" + clientSLgSession + "], Request[" + locationReportRequest + "]"); doFireEvent(clientSLgSession, locationReportRequest.getMessage()); } @Override public void doLocationReportAnswerEvent(ServerSLgSession serverSLgSession, LocationReportRequest locationReportRequest, LocationReportAnswer locationReportAnswer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLg Session Factory :: doLocationReportAnswer :: appSession[" + serverSLgSession + "], Request[" + locationReportRequest + "], Answer[" + locationReportAnswer + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: doLocationReportAnswer :: appSession[" + serverSLgSession + "], Request[" + locationReportRequest + "], Answer[" + locationReportAnswer + "]"); doFireEvent(serverSLgSession, locationReportAnswer.getMessage()); } @@ -142,8 +147,8 @@ public void doLocationReportAnswerEvent(ServerSLgSession serverSLgSession, Locat */ @Override public void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLg Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]"); - + if (logger.isDebugEnabled()) + logger.debug("Diameter SLg Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]"); doFireEvent(appSession, answer != null ? answer.getMessage() : request.getMessage()); } diff --git a/resources/diameter-slg/ratype/pom.xml b/resources/diameter-slg/ratype/pom.xml index 9b5d3f9ee..08e11ce05 100644 --- a/resources/diameter-slg/ratype/pom.xml +++ b/resources/diameter-slg/ratype/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java index 74d2123a6..c796d8b10 100644 --- a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgClientSessionActivity.java @@ -23,6 +23,7 @@ import java.io.IOException; +import net.java.slee.resource.diameter.base.events.DiameterHeader; import net.java.slee.resource.diameter.slg.events.ProvideLocationRequest; import net.java.slee.resource.diameter.slg.events.LocationReportAnswer; @@ -36,6 +37,7 @@ public interface SLgClientSessionActivity extends SLgSessionActivity { void sendProvideLocationRequest(ProvideLocationRequest plr) throws IOException; LocationReportAnswer createLocationReportAnswer(); + LocationReportAnswer createLocationReportAnswer(DiameterHeader header); void sendLocationReportAnswer(LocationReportAnswer lra) throws IOException; diff --git a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java index 870046561..d03ab5aa3 100644 --- a/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java +++ b/resources/diameter-slg/ratype/src/main/java/net/java/slee/resource/diameter/slg/SLgProvider.java @@ -79,6 +79,7 @@ public interface SLgProvider { * @throws CreateActivityException */ SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm) throws CreateActivityException; + SLgClientSessionActivity createSLgClientSessionActivity(DiameterIdentity destinationHost, DiameterIdentity destinationRealm, String sessionId) throws CreateActivityException; /** * Return a message factory to be used to create SLg messages. diff --git a/resources/diameter-slg/release/pom.xml b/resources/diameter-slg/release/pom.xml index 08466c9ae..a365a07da 100644 --- a/resources/diameter-slg/release/pom.xml +++ b/resources/diameter-slg/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-ra-release @@ -49,7 +49,79 @@ + + release-jboss5 + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + release-wildfly + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/resources/diameter-slg/testsuite/pom.xml b/resources/diameter-slg/testsuite/pom.xml index 8f4bd8ca0..ebda2b383 100644 --- a/resources/diameter-slg/testsuite/pom.xml +++ b/resources/diameter-slg/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slg-testsuite diff --git a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml index b39237e4d..b8470d2f2 100644 --- a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-docs-jdocbook-restcomm diff --git a/resources/diameter-slh/docs/pom.xml b/resources/diameter-slh/docs/pom.xml index 512ce7895..406834980 100644 --- a/resources/diameter-slh/docs/pom.xml +++ b/resources/diameter-slh/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-docs @@ -18,4 +18,4 @@ jdocbook-restcomm - \ No newline at end of file + diff --git a/resources/diameter-slh/docs/sources-restcomm/pom.xml b/resources/diameter-slh/docs/sources-restcomm/pom.xml index a6a76c072..2e05c2640 100644 --- a/resources/diameter-slh/docs/sources-restcomm/pom.xml +++ b/resources/diameter-slh/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 2.8.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-docs-sources-restcomm @@ -41,9 +41,9 @@ - ${pom.groupId} + ${project.groupId} restcomm-slee-ra-diameter-slh-docs-sources - ${pom.version} + ${project.version} jar true ${basedir}/src/main/resources diff --git a/resources/diameter-slh/docs/sources/pom.xml b/resources/diameter-slh/docs/sources/pom.xml index a55b75d95..3b7af91c6 100644 --- a/resources/diameter-slh/docs/sources/pom.xml +++ b/resources/diameter-slh/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-docs-sources diff --git a/resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.0.0-SNAPSHOT.jar b/resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..6c16562fd3d39899a1993984e2f32f9975bed1c2 GIT binary patch literal 49640 zcma&MQ;aZ75G^>iZQHhO+qP}nwr$(CZQC>7nD^g{s!v75Z_XYW%mlahJq?MEtqgVLfFbDw0|6nYHbP4f*004hL001ceH%wMg zPEt%%S%pqk%vWjJZkqw22YP}320W!jW!$zZTNgY6cpH|ed_4$p9SxBWBq=Jl|DMTh zrKHk((a_D^jH5WU!77@tDgPqasVyi8-IMJ_wmNU&FVLP9?-QUtnCI(GQ6$CYRcEjT zSvI->N#4S6O}jD??lZT^lkGY+j$T{)Sxw_IF2jWViE&c*=}4WE5;+TQ6G!-16Tk2NZQa2~B}*}_7Z1gcF@(HL~@zQYl| zs!;F%FZkLwxbTS_5RHZCUyvjzjMxnGLr5!R);|1MS|kC2KDM!Xtk~C2-o4Fyq+dyV zGXqk$Tr(rR2X-u;+_m|?0}FH6Z}XoAXFm!@kL&Y#bvRyM(#@dN>q}eTA7kc-dO2Qr z?|e%WQtc=Nb-AiqAxTr2K3__*48}3b=d&L+m_r>~j~;$cB?s zk{?0x-M7AXaQ$(Hy*3{HUiQFo86+<%+NcCx?blKpVUztg zl;B1fv$D)awskqmudEWK2_z{Kedx_dlURjU8`Jdt=l*u_o#&3f{h!`{KIfV4dCqg@ zXE|^GS$rKBf(X=mU)|ou8t8Y6#6x^q6QPKJtoCWmoxafs0E(WCER%?HG5`RF9|%Cf zkERTCQEgd~jR8ePDUx{s>LNWzUB|}BKbKM+q1Y+WrHCfs%=G)f;H6d^S;YOO2W4Lr z8ty&Vj+GJ*t$KP|$)t%lJRLN`oHBG@pL|L)@V+B**b1AQMle68w}YUpjKWr6>x;l( zgxlimKz)|G(|5}{#Kk;@6WIseCpBK-h(U!$6bN#~PAqog;Xe)YA2cUcDNVndshi>{ z3C_PYg}lNPPDKx9HF~6xNFX-R%jIpeByTzK66c(vp1iG_*D3Un3dp+2gTs8=%V-1uRH4qD%AyAnvTYwN}ppkpOr*eEl(r(3NZzV{>%8cL)-a+}?>>2c8 zTYa_^{PfX=6Fxc{e?0S&J^11-m9mXwHdV{32dRIUB-yRu(Ha5SI7iDyVL4!RA)Gnc z*8a)t-;=Jbi;dFX|0-RCZ^H(c656~&gw+tGj=9xOd|(X(^f$?Z)ZH3#cJki zF;Ht<`EnjO`MgZtYv-F?lli3c>+#AHCvr#Cl>uR;qH`b9(R#J25%Ag5qwCeSnZH&9 z2Sq%)!1E{(egy{_%;D1rKBR%*T!VkbVvfuiW0+xHu{A&YCyNX*N~pKa+@)&3sW-WV zbPY5xKH0Z$!WYIkxW7}>_Gt&^CV2J#e$OEQ0VajD7#3UtFs`cvY#St6$_rwdQGzAo ztW^C;MX*bZ)$==#hb8ncqY3`uSF#4ltP2Hwv$HZr#&$6-UV^063Z@WC#i9WR$*5?X z;Xq0rcR-$%rrJxF5QnTw=q=1RJugWpdhJTAr)S$w!{E>P00&dt7QoK011yIV40;HgND%4ZNTb-<4*8N2elB>e(mRqn1S}%hF`){{yJzWC z?|Q7qm`%0;?6njx``NIr_T|j#-BsU*Z;s3WN)&tPe%B6cD9o)T8y>v%BX6eiuI zkb4573o4kEUK{P3WHD8LW=R^0c+)^ERhiR$IB^PV+F%gNhFIYk-X0#3X9pZ7Z)p61JpH_Pnn#a zevn-gdbnJmF=H}=AT?!dHrHq2;}#|H~wu4?#pVwL=lfmupI>ZPpg5?E#&EyJg<6J_wqW2p44E5#|!mniIT_jj&W3oqV za=VYoaXbOmwBUMSEec zu%ddzj!`bYneM1scD)jTZl;hG0Edn`vk|hc)JU8EV~XBdo4$M`)ro5y`)`UagfeG- z!##%sSkScZ7^x9+9nVR$-YIXo%wP-X#HRvY+e@08CpSU{`oxHX-H;gh+l9k zc04v*rW&F!um!jAbFSE*TuWo@lnoKChnr%30y*o6}pwsW6?}S z*ddZ3zLxgP(((CtnZ{8Egxu12_8As$(=3FfFOO4cPPK>)*T@#r8cF{CyQlxjxP@pT zTZsNTO!g*#Q{R)D*^9~DHa%@Fx#*ppGnyle_+1C_=Q9HsEUbD8IQ70ZN0(=GRpzIy zs{ex=VdH>U)?4ND<6B9VW@>aDyjSn!>>moce`UFD_&3CaG^;iek0o%Pr%9Gu?VF4~ z-OJVLWtZ4zuU%qA`%@S+F9!h+b z1<4a48D0~$NAST>84np^5EY_cNj@cCqCaVlc3xis$pQzDdG!p&(7zNPABOjrmbS;* z?mLW{$I3m~qF%h-(}oVK2>ufN|Ncfg{O}U|Ig|jcp+yhj@&MP7L68H57J~5T=j~&E z>`aqn8h#eEo`jydy#U=*9XA6r<2nW>i|zPvNMa=r z0(2MYCZEVwOBl@EjF2Sx8okOH94J`sCo4G_WQK4ggB8{3sy2!uL|$4(9dSPbV z3nBcvxt2Gz*t1}RQFe?lfzb&)lJM8z&w$i>WnQ9#@SQogkkB>mebF3&#Q zKne1urg>pJvKE6|gepooK&V{~&yB%~bj!~g2kFTdT3etpkbYZ)z%>bz}|s)nj9^y`0CTK4nhV{0y# z+`@I+lxQ$aVogJjQr4jX3{cRf=j5Wu!rAL_MWn6t>}>66F6OWP)R0+3duBIhIYQL= zn&hM`CQ)@OZx+qzpw;jnC3=DU)PtOCdrUdqGqrBQGX!XJEJl&SPC{l7`JmF|2PxEI z`l)OS5<7KpP8ZEid4h0=tkx6Vnn*Z2#R|VZbh-t03?uenSa(mY-Gb+H0lP(+_R~>J56{ z$(9fF#e@iT`^YUq`_jgwK^;azBo87yGWQrol?(nB3-XSAiaFMtrthbbNm-4KHLLPfVi|=H0YgK3UfR1e1mNw@qMOaKJS0fs6?RujZ|xo% z=FRDk30YehDCf^8eM4h3aYz!$&_kb=6A{~pPdkNMW8^F=IviGWTQ~aV1;BrwB{~np z#I>nRRwg(aGS!Ig1v4tF(3mY=EFX?xh%9C>=GbnF8*RKMWIP%}b)|7Wu&W)76$up- z3)+kfufLe*DI1t(agZr}0|vMUEi+Q&EtROHKQ$E+!)f4y zzO1*A+{S6|0iT=@Ie6s6mbCbMyp>Ib`YZ_in(iD~lCO~($msm3w(=RK_OC{6Gg=-( zr4CwOmeBRPQzjN+*wvqp}2yg;|)tK{!ar3K&fuc9Hk$LVGt1LyVl z*1p93QDqW-TkVgImC|2oHa8b>O20(}oZ9(bkqrDV812%aILkZc3V-i{P`ga`@3+cw z>&5<~KjvEhTHV=_MZK2b{eg#`kA)}JQ4kp{f*r%qH<|6+PqqF(};oK9eI0K)x_%mr)i*i7(Jv~ zK>`KZQ&nyS)3mEz$&QF;*NOf0zBa=H3bb_lZX{2;V4=`pTa71N8==Yp5!yMYBh8i< z?o6l3C%FeZGsbdO->crtV#l#-mzY_!OqYxG-1~sU9`9w(QpPojh; zJeUbJ0KFAoc7tAD4n%?%aAZKyoOF$JGK|*JFqL%+3Ogk?QkP9uF6wl6QykZJR(>Z~ zupQTacm|0Fn!K|)QtOBP#xjq7`|0V4YPS{r<-RoTM4M$R<$&mX`Z9op?dCCDFTgkg zb&)r$!W{%VL6o_;TY{AzID6nA6PHKN7qeEy#fL+38{9FdHp7`KQwz!u6S+A|&+zQ? zXfP54J15V-9b-J!s4EZH3hJ=1?8G0t$e}G#Y2z>{|B+$QYAayR_8SH&@H}?fS$G4= ze3={G0xhW69*VyGMuvAFav8T6RdqErL!?yqn-)IRUIalrJ&52rZXCz{Oh1~Uecn8S zT?!Pp#|yj~p2R$NtsEEmc80{7ipD~J(I0?&etN8lwuEbN6& zr+RX?A9{p{yx2jdHJQzU;OR-_LiZ9~gV!V938XoAFJtDTM{KbMGGd~Qd5i*1Bus>% z>Kn8ri6en0_rc(Te=UNK_?YS%x{#uyGR-5`ex8OEh3yqk9pxoWdle6%7gs~Y!ZwU+ z1|#G)mH<64A&N-Yi6XHVycV0?^-f_y4`FSHPweWKkg%`t54TTpK9(@er=1K8O+^Qm zuaVU9KBwuU3xVNp@ol4;#tIFRx~7m+9=h(Yh?+V_|M5wpyM@hh#s`h%J&gr<^p(pF z=8kT3bOR$1p*Dy6{wAhO)ndR^XULt(SV27xDx>=LFTR15A?OKj5*r^;c-;XFH9Z?DFy zui&=GljHup+45w1DUA!ogW zZzu0d2j?62WVd~n!_RN&L;o21Nxtp5h1g#|^}(;Up|QDzp^4G;&9i;W#2qmd1;itUK46IFTtt?LN z?|AuB|91u2-K)+(K!C=d=hn_&WPZgpKa?b*AuzEsG8eHmFnPHRD>eI#>B{XY${GY7 zI0>+WwZXK@F`Y5@IBjui~g09tWC{vLgK10s%HWdam;U+i&Au z2@i)5b=dfX>hQaFwggrdr9H+EOW5PO9mW6tz<&7DIS}dVgw5ts- zZ5cd*&m^LfQgobb5mAnyc3N|~Csy+k26bMR#H^A97&T|=>s2~7ylscH<*9O1hW7gs zTrRW}_S$+qpXkKSMUo<8Nt3yB=2m`b9!0-qH#_=bIS1$CHk>= z2#b^o#vZlm{G%nO4XgA{%fF6Jj|oH)Hj(LDO^fAe)x{{J)mjy%Iv^D149AplL)p)k z44x@5X3leMVih{K>{jG&!V3rM! zRPH=cbZwuj)h6m1E91S^3$5Np)lAGtS2fD9>$gKAbH%j8Ov-C3c+GA>?o^Cw7)Q#Z z$uQH6%9kk;b!dLgxW$NZ-mMRvpMEAz3aIL|gUK8JgJvcXWc*?HO(%U z%iEQ!PdF(Amr-i-Z$(3$e`TP)NEJJ<;oR~rgE{y$f!;)sq4>ujuN^Sg#diLH*euO_R%2~VHBZMF+{Hb3jD z#rtC=)AiHNGmAqu3wc^P9uQ9ht;`PBM9uWk*8)RNlpIn1@^IJfPVv8$Rez0yz>TYw zXG;cINSuxR-s57O5+*w9eDgnRo9-%33$6s5lUBy70~5U-E%Gtmf8onri&Z+Uyzj`s zz-Pu|f3pPd(f%^9Z{`)~13|F_d|Q)>jvZfM`4`i4c(*W#sp}XjU&r^oQ29w@?n?t{ zRjNBHHhWp)F9t2_EBq_bJp1iuY-OHM?l)mWP+U!oI zw{ys;%UY#QhX84a*VW}Ek_k(D1~rVxE{OW$azsfO+donz4`xH`;}35^KB=a`vdeW7 z^J!a*x^s6o#xX@h*YARX@Afg0Rf?e4Tj?PF!~`py?(i3cM$ z(i{)xKeyB5bsG7_=-K*;O>>S5O}+W)tsCZs+dlAt8wh-cn(4apG`oGW1fE{EV|d-3 z+!xH}YjB);aD09balfNPH;uUP#7zJJJ4~Nxzd^TwP~t;eplS!*kOlaI^V{z+cKd(K z|G9^&U9^q3oxeTbSA@gx-@r7$ufH?2d>MZ`?;sG1yo;Q~KM+;STlLaK!}~WL`Gop* z_^j+Fc)d10Gv&uFb=)=gAV>uBi0m$0@aC+EUiM~ohF3VY?nm`*0`vAMOtd*UIO2Zxtll~ibV%m*vkcV}Sy_mGtro2KQln(^6U?MDu z-9X+p7Ceu}36jXyC^(D~;g)|osh{b&cItolbItl;1jJwbDBl?d1xosrFUxF->1>KD zu8u5jicC%p&8;m+Y!0msZ4NJq?S1)U-Ax0;+v1q+;P(N50l*|lEP?84g>eVd9Wmp@;=TJWm z2c$@Q)SF#KJJh?YU?@m1M%8;NNLq|Y==SL+sG$A;PQ$}7I56%G#V{HUN#V|xq0zYe zX~muiq6(6nWzXs-6f(Y?Vz2Axf`Z2c>T;TGXeO6#M=ju=_^_41@K_%W%au)fS=s2- z^L}0uKVzncA9!DUUt=Fs?M}G_Mt}BkyCp8JglCqs)w`qxfHj^nO&z%yWxPm&~+4878_haM9she6TRGuj>Nyu9PX=BAcRMbcY}H zXLki2U&+Cb)Vt9-nNP9P5`OmtyVckaZtJYK7)jw=Z!#!&uUQo%!sQMWGjq4`_3g|F~TfMSlP2h>GU-|iCEYoz1Ay( zWOLNeT3JWS>auH?JQjvE(a1Q%uE3By)A1mr=<8DvVwh-?RJ4ztyDnMh`(%n`3*Pbh zNv72CvzZ!vi7OML4guqBzR1(?f5qV7cSd)1Jrp`F#9$9DFUv9B@ncraYdGE%7sQ+| zHtL4TkCv%w(?WSyy%JS<1YTC|w}vm=tGFWZ(E#iL6dv-EfK}d(BDaKWt75$;3}3vo zS9cNEQSF}(*SYXj-x+{k(wjRvhkzZ&(GTS#4mZ3^6#h-<{7m5aK4P2L<@AQRy{@N5 zy`tX495BuwWJn3RyiZ`&rc^NHS{cBfLGEn`UZdER^p+KPEK{weQ@m{QA9~cO_7;^> zHAGr|F%bqnB za3-p4@y4Cp8}X8ebDTO--^!{Z^m&WO+$?JchQ~7KDMyzJsD41N>3RZLHFz;IW=x938pQ#~Es3B@F=V@{jN zdw3eXU|+r>;-i}T$XhxZH9eX(mTND|cwQzY(w&8~^C(ZF^}X`Y1xJxi(bZO$HvEvq zwWMzn4V$pFGWggenJYn4(uB2F!+~2|K}QM5x#%_@GCf!K>qQ_VWP_31U4)A1t*Cv70$M7sabD~Ne6j$ zm==etcejLVf>`d~<@i+4Ha&GmS;Afzu!QxXaXC`Pw*0P2G5vslgYC6=@CQp z8^m@8(HfQPFe5o+U*$2Y%e8SKp&jdN_YKw}Lb$e(aTG@xj%{}3BCe@^$1q=8R${Sp za0gpWMj}c^#=#2Oi4r7R4`^5z2~wE23Gz)m#TDc6B2t z=z;0{8}w zC>een-Y|nZwPC#(A8_V@twNXuYJBhzN-$20kOYH}RQvo|M2VKM9Jr;HdXrA43@h9~ z(~W{X;D#93x=79i7x4@Ivhpac-L0#(fV><#w$Tm0GX&B^iy*OwEWFi*A6}u9Og%A@ z;IBHd2p)oJhQG7t$oXUeCnYu&pbS*)hRU_5G^(ss{8990c zFeWi=ty{@gwQ? zuO51gz-$}c`YVa{&2g~iI222#QPj{OswyU@$uBy4JC=r>X7tyatgwy7&h<;1fi(Bw zxD5i;^;ERF6QTOKQT5DS``iq>sn~d6LrHtfPkJWI<=$i8jL9Wk4!#yeY%QFVl+-`s zlh7KeH5M4n*#yIK)z%1+*fSkPX z`uV-7T7un$X0yD=k)mKRt74Y}ApS=+$nu(cz`u$9T1 zNiUPxwT|FqZZ=7we{8yB<{juVn%16uh2z&3&p}viYsM1TN|{gYTh`2SaENP4J2AUC zrn;^ldr)?mWB@X!GeNniaVkNgvy({~hFh!Vh=+k~et$#A zTtAg*RlU&uj%6k!sC|@QOy*g;W*?8IBUZ0njXJb?7vAlBGC>;LmQHA<@qj{&Sv_WC zxk$_Xj*C;x`m7*Nj93KP2R`*h5{` zO>;s`y`=nQe|KAk-gsw-ROYOm0u3?FfY@+Rh8UZuo&6T&pWD~N za$B?>_=*W*?p2r_cyglao9l8{Q=w@?+p&OiOM=cM)amQ9TIPX)m?^JW?c3ms7#w_i z#t7qX*c-?&OIy_~Fo;W{A6(vRvt%DvPS`DoG;4GDbz&=quXv-`qqcL9gT6wkB;1`< z2;H$B)}zjjRhqje$h%=X;)7q{>`JbU&dhGo*pXv`Ll}4U({!h|17S|j4XK&6y;Z@p zj+mI#gS^yDl4y50*kk+_-6byU%k}0+K%TCuX_$uVx>SgTMAvea5Zr;MGHMP}Fw`s@ zXmGM)L=Ck9j+$_%>!ey{wg_PBzdUr*r^+5!eso`00~7@Mmg>3Aaq)qLwc%oo_%E%# zGkugtQo)Zie8r412lALHegLSby3feL`U#BCh$;RVSyHi29pw{jBd{m;RK>P${5zD9 zwCW}z#lH04lqLTo`EOCt_WA33(m5!xUeDUj+Q~LgUad;gEY}vjo1WDEb%a9q3At10 z-Jg-#T95k|N{$>abX34)fEQi2gW}k$yF6QxW!?JeFz9zJ$w2TsH$r%!hpqxgb=kVk z&P&ZJ$Ci)F(THUQzkZ+^l8Q77Qt>|guuGlO)r^de12xpG8mda$ng4ctb=||@H{}<^ zs#%fPR;>rChusm?_0D9RI`OD*{p$_6#d7ls;n>}66$nSp(q`4Q_atHA;w>-E%$}sF z_W6sM1e-9d+RQnrL%K9s&`VyZQ5EAHM#7CXII=eO~$9) znr+rntK}Oh^O9_tZ_6OS^ z-;VbW&c-*Q@f{-(T7M7`iU=jVh0&7MQQiMg>4WfN_|V(e{+-LbfGr{Lt1@%^uRqq!kV68-w_sq{YshkO2VTP;f>D-I6GX5Bv73hK zOZ?k}rMD-avqK#weho;h*HCQ|i=?@RHT+F|LnpZgG^U6Lp{xY-3j$apq{i-!%C%pd zjAR&3#nn?(R-TX(G?k6orkIaiR6Bx>X3aHWqF?d_?EN5pQdLBA2n;f8Cd&#kB~Hxxw$?#H`V8K)m$}*crYE+ZEkq{h z5{jPR*S@BH(br%H?{5*ffNFwn@}@EqsWp77xT=rxJ-HWCvcb1;hXDZ_G=WJFPrhh^ zk&fF%H!WG9=wU)zsIyF=QNGF9d7SZ}=AMSvHLD_MDm@3e7UM^k5-M*k2FZw>MJG8(I&d7R$Waig4dX;}Q1-_s9Z zyo<=Xhsr$IyKHg{Tj^<>BOtZ*T}buBiL>yc9S$BH+e1L&U% zU~jDEFpW)86L-?gbsyBxpUyLK_3ibSd|+$f9F~c-_W54S4A%*pl-a%?fZziUx~p%= zXJpFfNfr2s$C2B<&F+N=C>{8-%mIhfzZ098nN9+d5d>4FBZ1yb~e$7TIxl|m7 zMw;1^tJhbq&KVh*e~%x3;oq{uD6%o?mk*k9p>D`m;GcT=PlAO=II+;Kax?nvI-n1X zWm9cHDK&zqSY8~|BA~D6=|XrTXK<2SROw02s!t(2W%}LSPQYDVb2O$sn=4kS)_MhJ z_}#?Kt`;P;rU(99_{hO*GUX~Zk+exJ+hy2{}yG%XAI3s2VuGoVe-yyv*tC;&_sCJ>~R|8J^tSgJX zUmK&?U^Nlf*vu|H530gjp&CX%rtd>Vs7fCPmv9Q4hiQxZJxw#|UJ_9oqO-H1BIg0# z7>%>EO{|4}2E$iCFA?byq2g6pODySc66+H?zY4gvxHsW&354OBKsdu?4p`bn7^0i&#W;9Fp;!x&+c|0Xe|<2n zHM(Jl!0MGd>j5O0#}s?Rv`ZHK0n{J@b*5i9%8h^Uk2S+%DWnFZLYX?F<|q?ZR= z_{1Hhmxo;V1dd8LTyr?)gwwZ_XfI1RQiO3Qrs0H0{u&PY7wZlnQBUXNYf(R<^CcWD zq7>&EtuJQ;JXXY~+?QvMv-dlA+)={o)pybC-W@B#YtD0^`4GpfxKiC7w!|LH5--~Z3-xT*a1(%+9Bvf0@q({<}6vut0qXI*fI6)QL+#M1As z{eEYpUF|FtDZ+;M4A~VzHm$FK(Oc zN1-ycFr3i$m-Na7d*8FAe~l(6&L*iTi5@JJjs0RG%Um+nQCcAJ!0}~8s#E?t1C#pI0WqSzPYR{#(-yjYacny!(F_=TuTm*mlpp~A zG?Hl8oK&y;c?7;*R$T_Gx{GVAP)p#H;DjxN;^PH|TiEe!MtiR=Y7fnTEO#1-%*1#n z<;ks(W68|6Lem9GHe;w_s*BGUf^UVJATC}RgiDd6GBj^F%>&a8sS&GY@6#RaswZkE zz4#1Y6NVWBMW+$MF{XKeb6}u6`KT)4=ZAPDSvjoz;AB|7ifPeFUgOz+%u5haJu?>P znvYLeIEqr1e`hIMA)29;g2XgvVCC-6ZY=a1IRXm$Fm6HuyQg&Ux<^MM+a2Tq9Jgf@ zJfYi-ni9atnAWzbO`wTK+l;IhGgYiVeE}iGJ*p*IH!Q};B%qSAY!FNcIWm+c<4iuX zBMaQ(&r`P?WoE%8iw8+f6hbjUu0{$?wE78*1nMG?8tXSph?hLvRD{d=eVMQLtnIJr#$PnNt-`s)J6Ms=!^8C*fdD zlSZaq$?c=0+1+-#sVua5KJDOZkkoh|CPa{AWxP_@AORmiFOdchF!)Tei|H2yE0OH> zX(q|%=!JM&PV5D0Ey*)@QMykk%ph^lIwvtYAK5*OlEmtjNV6!apS zbIdyKpu(x~?Iuf#qqBpo*~*74^(ZFJy=GwB8Z51AQfN3RIsJ>Nl;~jk-FYDP!_XE} zufj-E#=DyPUGj=C`I0P%hAu|3^v(}(PHly6a6whFw zOWF900rZO2rcf96I9*V8!1TfdBN~|?DHFS7NSs(SG$+ih$|^D#WYPbK{lsG8uoyqy z#6olfZ>@{J2+>e3&)G#v)a~`u0LB zS1|4+yfyG<@dBQhoD@|&E)@rKF3~l}Gp(`J0_xlbbF1gyLkvTtlg(;w>5+(0AANkq|* z)KCxl_(2TAlM0X7+V5(ollH*G;(`OX`Mu~}R}gOSh>dyU-yyG5squO9Qw>LAq=!7j zGlS7`=!G0X;&sW=5D#ntOK^{CjMBeSQ@Hwgp=Qa5$4cA;+sUSv66n*li|6FwmO6&@ z^(by+Ju?jo=yFUV*N~09184bC^N^U)V-wy}Nk253gpiNPoS40^q`5H#pKak+Ln{}V z%w~-2$NkINrO{4U&zwgEcvZJCLbQcDGl1&JQCjXd)8fV zbN_$ej}>@ICy?k|D$0w`AlQ9DiC)L*U+-ueR27 zAwfyh6QYWelb84HEEt|_m3_O0zPBK4={a>+K;G|7u>#zyfJ;Qp;2v!e3Ly&eV3Ueq zm&s2flp@xsLLI>ZoE1q>r+|k2Pl;xQ#P`5g1{Z{t`2=mEMh>T__g^LL3$YN2by5L! z5)Ae85Dxr`4~o4r+ABX?D#r8sfK1JigncsP4q0wc9K#CW8=iDLxN6?A)rbhZLbjw@ zk%rDCR6-ChS404a32lUe*L4FAoNW=!bOcY9xqM6_xSaF`S#erKSXCmvqH+-uiW6J_ za2_O-n6j}vBw5cCIwg||njwC@?aT#H2nwQ56-3|~$N)8x0NO~dXCMG*Bv@=BSZpR) zFcK`Z5G+~=64(h6tpSIY2@<$deL&5XUCj@_KyHcysIT-b@a6-l-}no{jyTFB_a6j` zw59ylB&wEz8&04)Zh7BU+4g4LIPz*PE1|BFk`8^v22!NhcgCdHjKk#x``e8`cp4aD&<{!yX?cXmKWKt z0=4Hd*a#N2mkH4h^fFmQx*pB)It5|zm)}?A98EQ;e3~s=i)bd5g@&_#E z?Z6=`{)vE*On%Og`^z|M(9bmIu}%J|#*&!Z8O9*G#oxtR%K;PDtUJQP%@$oLw;J#T;@r99I|;7-f#T}$zk1LSpMbyWYH#77hWtO_%j30y z0VIEahA)3+&iE4UwyG=KbLvd-qtB~ko2utG*wHCS^g>$(XquFjAt+2*x%@IsCdbal zOqQ3T3yH>{AgKsK*F+QwumLDd7AjD!5I4XaR6tb$5y1g$1)=#h@hI?S@gqm&_$mH6jLgLhnk6`YAU z&ve2GdOc4LqPj5CwH3(9m~Bk_jJt;H#g}s!@b<46GWOeu}544%U%4BY*ZQkT( zCo<4HW42Dq4KDU)67^$lQ=No3pOhsAe48|GebQoG8s=XKU{SxUdpzD zrG5kYSmy0qw+vx918^8D;W6}% zS3d|1ExJa$@rE@ovII>lBi@PLLrJ$sHUcq(SqwtF+Fx*fWJ=E7$z#|mel~Ik1g=1CH$&CGI&x zd}WH!JDBxbC%!qHe{D3pKHT}ucc1qL^@?X025)tM80)?St%n5tHm%;iUK>8zb@#_z z8(H3cpW54J0UG}C`42iCYAo|7UC8eAv|vePXui)hF`UQHD(?ZMEYEdt-~p!Tx`A!Z z@(??KM7-^tO!}TPmxC$?pQwkl=eqcWd&^rLdG|3Kedv|~WQ^P2zKe z*!MD!c^Et6Et_n|Sk_Y-x%YLTb_l=i{9cf^_p=b)mwM-$@gVIcE>mh5I$rk|Vd z9{s+9?E50Hb$FNO;1=(`M*MS-c;_+9kLmHJINXof;OD--^S~$P!C&5+;(KyhJcHvT z@JHfKip1)VdN>Is3nipzdhxh*&xw7Z#loQ|WvKZ=rDQIdOOU}cYxSk!{EUJ!gWC2A zp4eO^alC#N5l+}>phM99y*>>JgdNPtLB6@M@G}*Nb|6C&5mq=kaQx7SKpU}n2aG_F z;xRUs+^$-Wt&XgVsE6?LMu*LEe6T!K)qI9%0S*uSxEAmOLFgpLU=%IsZe+GCu zd=UT2sm^3)Wh;LI_w^#mXl{fD9b?tmT5}m&Ee1UJCJ<~Pn|^cfc^0O*Gzgavq|R0F z&4TQH)qZ<@_5l(rM;mbtL`!&ZH&7$1)?9pRnWcFrPrHQ`v@nD^HlcQw_YA&6>6zW& zI-cmZq9aV|OuXR2!@y?hK!1qCDV0>W7Inmm`8C^>5D5mw3KVAoZz(wwePdf|L$*2# z+bt=~!M_q*7eo36y%=>$iSwy;+NnWI0eCA|pRI(nxD-W8;bcvJSq!PbZ5^upC6Lc$ zvkYDfR!gsH$*{KP=VKI-1QV$f11q9Rc~-3~Rl>eDfSxzdlFOr-TXY%w0DTYH5ZGXH z`PJ&I)fQ-c#M8K1a!lFTmtY3TZ2Xgu3M^x0}OQCpu z9r4W<{VKvbUYw&a1e>BZq`Whs*Arp8xnBfk9u!DYRSI!zNJS!66nqr26H{gd?EH8# zZ6E4E3jzIYMq+YSO($|^VNbu-k)bJ6i8P%GCK!uH#0E9$ZCOJN??FTxF35t)zrZ*X zVEu8f|ERQAGOo?otxIFz(ahDXRWV(XO;{v@t&$g9U!%k>%es*08=flnmvb%^6x`sr zg(EFGFa(90=_8pK^7DJ=Rvz4!M?@l$|aRq)bK2rI9VJkwF2UC z8Ft`QSKIEhSSQ;`CCqvWhUHYpwyy;fwaBe7=8hDAk)f@_SjgI$xX|*tD3-c550Zqk zIP@R+YR0u$=}d+~UP=T4PUOwciz$|i$Qd7upIlS0uWc)sisBPliNDW58rU$qOVOqr zQ2#J|(&UFo|D8-%BCzIXSu%aYitB{b3%*PkT(*V4n&xF5jDj z<_f6aW?hPnQztsR3Dc-~cRoHvQR57m6;5M}!!%A-tMRwra5&;d<2kNp<%~+P7{W{t zX@`9&^54H9+u0JBAc&}i8(V2igz}VkLHD6Q=+2iwnpN~KVSDJf2eGm=n;Ywv2u#)^ z3$!_UL$D}^3K|e(sxku;Nx4j`P@oy($`=CD+HBZC;UG_8XPw__w zQyA|xjoYNs`RJGWF|~mR^$Z&isN=+d7Q+ghK+YVSA0UxnJS&Abq*#wxhq5upsRbVM zQAP8Hv2uP3WR$JBMNsqgeuFSNJQ~uz$2U>ToCqRB*@T@TcJ9Eq2~V-ifN8Z(ZwzKx z)E-xwItv4j7Am_3_uf)t^H3~z^HsG888vcFrNO2!@Td{G}mx_u*E~u4;O*A)VxqxT~-$1@+r`Vup zhXVD`re|BbVyU$eb`xFmJ_lL1yX89AnNgHbw8dfF!^)qY5-EPbtx9(+(}%5TG@or9 zU6siQ-I56l$QxH2PNIfoOSkP=VaiVYD@4gGMuiDg#y9Xbb;xp$bx&xpq)X-2oQO{t zFLRR!kG=jF->ZH}?X(TZM@cS0YnN384Q#@Mnz?i4fcTv=`wUj7g>6^ATK!w*P+J<~ zWPp2BfU5ki5*&0!$xaZs+)(nId-O<_Pn5J2J$AW6qHr z%T~$$%F+wzw=xJVeS5$Z(WvqChmnnP6AFzi5;IX+9)=8``gDsm zHxu*-J4N}5Ibw3h6Z8+7z|mca@%MxFcUg@5!7p5C`cLX(8^S#{T-0ZaahJi?Yt3mK8GCqzFpiakAaIFgLQdbZxbG4XjR?=Bi7k?oX( zMiejDok*YVH8jgdJUTO}%!sBhV6CPmEO_$4!3wUQ+!b7SLsYn4Yg}^NF)rENu$DN+ z6xcFMnNM0Nn(?WC`}-9H7?b=MVg~s{VV8CZIx_G@dCl@kQpa*S`GXTj5k$x2t?E z8g%LjgD$MDR>J;M-9j}&X;w)U8g|@7_4?4{6)#aIfF|1a_>CAHr*LkcfM<3w$%dy6 z3tKXnD%hx~x~gB4bzpS6J=%7~bd^Wv8C5ICSRNrUrwyaROww~E(N)EK8lKtOR^bB2 ziO2N-eRlHXrw*Ca%cJxT?O7-QJ+^bZpzV?a)L$1F{m_`sw)JS-CLsqxI+M{5e2j^< z$t%5^giOaZh)AeoqD3lDQ9FXb>sZKlw=}$hxeSzEE(u@{wd1G^%r~xzTvj= zuDFkr+n{$L8$*j@5l1EwC@+I6)7kaHcW=&Ct3-bu%c6|gFpmk?p^4aL^^H_o!*Co^ z>H?cb%vRB%Zddk}>H=#SErb^l;)tj>|LUM2%dvL5(rBmqgv@D@xmO4#1oU44>fa_@ zI}zv?j+s2MXmL~)#ErNIc4{7(8(fTdYPAo_Fr{wDU-=yGO}O!AGZKt0ZA)We_b0%F zIx{8wO;kgY{{2cBhmYdKC*b3GsfUzYzQ61U?eyDrOh?Tp?0X|VTrlG{B}eb9GOU;G z9XONCwh9ji-@?)#v3$E~h;ejB$)^JtL#6es#YFuGRu=lhlX@8u!bOn3uLb>rOyAsE zkodnUdamCZtOpjIF^`gL5$FcBMX8mdI!Z8u@AV*-f4|g{rDa6?eV&IKiFj?9t|*Py z$ojt5Cv^}m!{zblMCykKoo~8G5xj&#Dz{Ea!fSCvPB^`E1dpVeeNmQLm3&^qo5_b+ zKCmrRyfuO5Rkl}xtDm^TQgW;>RW zxt%+a^ z?z_M~=Vy*zPGkC7U3sdyQSDD-%k9<1sarlMcYLydKN5MMhL4L%WM5YThyNKgm)4Gx z-o~;gDxRz~DUV6rKgN-!bjh_HUU1!f*IN8KQ6tcJGdp61c*msfHh#lzbsRzJM9Y5& zLb=9Va|r}VsTY{(tHCeReNi4a1+dp4?v#xqCKbW7sZ<_PKQtDJjEAkD93_#TsGD3H z#xQl|O&-SWS2?542`f%T`@s!_b(k|jRZybPb3Vz~(<`uHsM#leX3^QDte!ofy?e;U zEFD*)Xdc;Ee;I9=T{zZu=_IIW#uPTxJHT+<4fl`9x?Fpxi z2oc&^8GTX}V98g+HECnbR6{a~4)+P5Ahj#Xfjvq80LA?0H{1cv55rEe80RTBexFBg zL-B`kMR9A1d9ElFG@b9l*Z6M-vPu&#A?sOm(&Ni8qm-NQeT700N55Q&BreX5kdSSO z8Oc!*5KeHnaZqa{-V|@8%1N1RyzR!86R<=Kz?Asx8&B}`H>wzH!2KioQ^@ICJ1}uB za)h&(8^YiGp3xVz+Ujn2w04{X7hcD)QzHw~slN-aQArtx4NdoyqX^rhUPy|Ehy!H- zJHIW4V2(!2y!6GQ-fYlW2K_=Xg;PTN&#nY@;PDNlj1 zWa^y{F|$6lDy4~)u&~-jSrfGEzL!Jrp^2T6&?{An!a&3o*e zY7g?y3$V2Bfq{TJUKu93Q_*QjpGUSras~buqG7qU(q?7yww#4kF3kGo>8e>DzaaEL z?>$}_^~4Osk@dFZPTUvP#Apj3a1P_Va>{FVu#{P%S+9%Ht!S~fI}sc`-W%mWO^TlQ zMlLAkuVR>_Zq%%}LT6;_`$a5=AFg6`}AETj}b=F|5MvrK-aCMOTuPmW@ct)X2;CT zF*C-@F*DnVIc8>NW{UBcnHeX&-rsZkru)9X-%O7VN=sjrmX5Sl+R~{yu=goy1ChfP z`}9?>>8D8jEVV6s=qmSkC2W6G6B?V7b)sOP-WW@ICIQI{ShoaWG*~oZ{0h@!V z?T1^}B9?r!EPqlfGK=yH!2vhHJQqC52na8`N&J*wgR)q4h)rBW z)G&fe9T4b%B39CZaH7Jl4#f$Hj)90AsMZnt0E_%tvQrX<1naS?7m__t0`rn@d;;0U zIeR-Et@?wIck^##S>=@~(^Zu!jv1{A#TS>Zp`O_hb@Q$q7$qlobgD}vbm~heS!I>K zB&puP4#-`0NVAk4<_?OhUL@tr9gM(zapls7l+c_r<Yf%U0Ae^Wz zBm3qkoQW;z*J;rv=uvt17Qs_?SP-dkZ1y444us=@FW$jZ;UCbO=@rim0lbaZq)K<~ZZ+e`VG z^fl)}S&`Bxjwg0E#J;;N?u!`r*og2%9D59ZyGIAPqal97k@Gj`k@Lv@^xE+JinW8f zf6(F%QHl-?ZEXWlRmdE*YiS;on|TBwnyxaU7!Ca1_2?P&b29*QgKV-LJb&u}fktvw zby2%}U?DI573hM-2c_si2)I{&c+Ynui+~Dk`ouB*>JbUeev0z{H!;5(BYp2F)UYI>cjy z-fQ1Hbnb82vyk=Q^W!vb>B^U3JA1$PRR<pnIUE|Y%!@W&1Un#B@gIThrUl9lC*nRBF@(;M-{iYWzb| zTWfWdx??TwWlLv6^H=K!-W6>4)*^<|g4}Q*HF3&#MD=rGR1M(f1?XbIwxLoey>LL^ zD>7lc!^{EfnK0jh$F?@BAvVH*e1L2(iPt2YK4?hrM1Z>n@I1n@HU&qJJ7QZdkz1OH zxlo1xR8A5mBQ;T^;OYMGT*x|(Ea$`;ZuAO$xYMzm3A}BIy4bXHB+4~FbOSuPvL0X1 z_1V3eu_k+6Jt#_dqIanlP55c?H_WK;Ii|-W@}lu?fP)2s*>UWKc_EsBKR3r`)=7yw zCRW_^YnWj#blhIh$?H7D50XkQp1c_YjJ&j#f@WJbmU-ef+|Yb z%oY}Kp-AcWx$Y?5^5M#EuQV%SO%xMu2r40tV{Z(F#u9C|Z=`M>uKy|Cf%Nn9r#xNV z=e9a|(;hM9Cq$=59tLuje=(*P{q0Egv39eKGQ^7=7Egl=}2 zHYb5M2z|YFP-I`iQXxOtbE$K!%|flxM|am<;XNm9%|$|JMmnvG3tN)ceP$S4%~@Io zmuDCE>|wC1DQcG+W-8PNrQZ}qRQXxOrl~V%5bCaFfF}Bzg|t8S zC>}2UwRom7+wNDRLZNWmTg)1CD$?qdPX8J9$TN!YL@m$5Q5-=lKb$lU$TS;VIS&2q zHA*1ns7yndiPw-GvDqFME{_D;8?pfW{avSLAU|U$c>)PX;*81<@9rQ>9tUjW9TqTN z$KqZy4GD*{qb&wvhulNRwezSg1}R8)?0~j*LI>|lkvSglBNhuMqp+{(0JtP(R<8Yl zQWMEx3t~rJD`NQZBB=Dk00ab=?1lkJBM9;4?54z80qDMwg>&V~CI!!mb#k{f9@IwV zdz+`_79nm%-;A{-wNHV$#FDP?T1R)E#EG}%+Mye_=^Yq+5gGv#)u8rj^XMoWt8xZo z_gIZba6952%wO_h%mL(&(Ax;B0Ip%0nHXVUDYJ;w&yUi)dAgygnWr5iE`en%S0;+) zzNS0xXrZS~>vf|omu|iH2;VOlzF*jB20m~V)Q=AOqU-l8>nODLi@wobsZjX3qxj05 zS*2gLF@gGGQolwf#kFp2li5ieKC%GZ2m$v%fO{gqJriA@B)YHfjyH#IF|s0e9wVto zZexqJkymn|R(eMdDt3DSNoJ)+A_x|duYB(P^qnqb4ZMOeV@>!Qm}_KF?A)rx>$~#&k{v#&u>p67HJ%Ep-0cm`c%1D7MW`mP~x+>wJ`#&c**c# z`vkIBo^U?k1i9qRipIe%%jelpxkk@q@!bW4f)z8o5G$V*-IwSB&?mS;_5sQJfa1zW zsS(y#WUnzxS8d75lVR`0l>!{-?xu+Oi?}!6)YAuV(>BIW=TBb}E)eks_mk{rhjxSL zxChnkS_a@xG3>n!z#lty>*2N;nDM8;LW~e~^IyFxu1}UQ9=csa4GyT-=I>8JH(#L1 zDHxR??p1~da(g^{R_z~CcizZ zl~g54-ff?$TnZLN{;(oq{@ ztle;ACYh*UZsVkmMv8Eb^AL|NnZTB&*uZ8Y@eJWxKB?x|K;}pE?}2Ae#H*n+<9xHJ z<8!kt(##m`##y2lKKBPc{dv4<)xKDS%)pE35~Z~HWX9*o9YhL1xoL;PG%mQ`?L>Ar z$RDXlhq|k|^P5ao>_#l$mB04wKI10|{?pXq-@bOrix+5UK!A+@IP zBn&)g={_v(VqU+j0FBGG(?4TU*4=s>rb{HBkG&Z4 zkXd#r`sj)}k6JWPMO4P-afOc#?Qv$u|5W)_a7g5HQT`>axR;H)>jIM&-2_*ILbdm) zs_(XvZ0-dO4ppNM>k2!KrjnFn6N-G>OSu-;u;nr9OmbhD&Oi~H-lV;E&;wi`dMd5P z5y})E*Ac>u{WKkMr;Y-+iwVABf_NUKIJ?~vypm8;%ZiWPxz2pTaq^iM@jQUAhT$!Z z|5-8NK3Q!jv>r^`2=aA4y(fZK2-Ce6#SyU_%^+Cak?<7BAh5c56TrA?bNmzTSoH!o z=@91YB>BwA_`*^nsDeCv4QY+?GA6kap`Ul%0VlfG8;6e1VY+~S68x5TVhy7)# z1xOm)Q^*c- zz`I(iUH1Ht5Up)9|MYUxL8#r{V!F->`woY`z-c%+`$u`&39eqFO{=BRo%O&7!z(Tb+=bdeflZr>UH6x{@zP?)BOm15lH?;DoOk`V7f9y_uSLjD zHCd)Nl0K_R(>!&f)rshrRAP?_4|a&JLGWRf7sT^u=`G!54Nl;99}(U6v!EZ!leyj> z=HO3?TKB}tTd$`C9=YOg!kj*uDJpzNFcDAOcP}v=n(dp*3eQzF+5JVM@p3^FP(`(x z8^9UuxD>hz&pRe$DmQwo4jTE~rcB?>ThdHl9q4T7eVBz#&+k$XL1=SWtto zX`@>tJ3<-t*s?+VL{?~4HX=>+)LMD+Qmtem6y#Q*F5hhPdMZV64^xVc5{l?;=e`(B z9ZkKDQon6j(v3+B20AEY5_)+#A9Q+mwRQ3`z8|a{0I_Wm!fc!flWrXJz^v&-J(&10 zpZ9dYoG0$Se3cR)8iCw92Ni!LB8VFcO8AJ=B}lL*Oc@W`y(Vt)X~rV#k=%=rjJ%=} zpl}b{I}ZjB{-Pc

1vCeu!U$Asu@cY? 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 I*I&Q>KUrzUqW}N^ literal 0 HcmV?d00001 diff --git a/resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.2.0.SNAPSHOT.jar b/resources/diameter-slh/du/${env.JBOSS_HOME}/server/default/deploy/diameter-restcomm-slee-ra-diameter-slh-ra-DU-7.2.0.SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..1ec9e92575580963f71e2c2125228dcc1a5b8c35 GIT binary patch literal 49975 zcma&NbBr%O^ey@s+qP}nwr$%yW6zwiZQHhO+nzJF-}l{jf62|u`{OlD+uf`*O;+0O zuI#NS0|E*S_`eH7JhamP8vO4D>c3u2OjU?ZN?x2n@qfc00rdaD%#ErMqk#Z`Utjav6%ZZ07>p5UEA^Heh{0#jBY&sI6wsTM>NQ1IYCiIHW{yC`rI5PbN zet*@2aF(l@@14Dwjkf4UQom*reF5=RoK01{Gs>Ou-6_X->O1g`DWmWIB%JH@LPa9e z=}u*I5ZfWN9fr}?bXB)54!+5^&86cmIoevq??F@VWFgbQouV>U(#DJ>mNrmIu3efdPaH`c_Bp=Nd;B<|JH8NgyLMbTO$x>#*V%&fZS+HP-;!Y z)^Rt%v0-9LH8N)%&4eVO`pl%8*bNdLmp4sIq@@zuz>y)7c`v>7^@^g<%YF6T^{)NZ zb(wRUeV@s8$#cnj6gdZ2odfNqs*RjtULu8M^`~#cV-|QXey* z0dFQ4fc}@JbbMU{8IhfJQE3H|0Zj&LNo-}8M!x(vl@{C>?8!HheN}g;=M#Z2-T4Mp z23~U=zW3F&7lskZhA7{3+0?PVYW?{d!vxCMFKH8uppeiE0^mAm1pOd=z8~%kRb}2> zaSUBi9VFbjHz;ki#8L8++3h_27`p}hzJZ_`@4N6{a(gQDb4 zoR1@|mW9ayuY($r3>RcfJY!?nvUr?&zR}GE{_p_{YU(xpjBq6ywu1vOY~7&|@CA6H zPnn~&pkhfUM0MM~W0f4tEpaTuM3MAJnib3lB;fJV6L7BBhd>54*!jvsW>pu*CT}t= zM=LxNZ1NKqt%;KZ*P1#kf3}9B} zxQP@K2e23P_!kKTDqJj^qeiU9S{*6b%YPYjb>ViDYJ1DrPgKzlQabArLAi7^uja=^ zEyPi@(rfMqD0LRcdbvWVa{q85VeAy0Hl`v49`D3W^{6K;DxH4Qj&Sp?cX3T0DjjjQ z+vm2p-FvA6^j7;EoXJRry8Q6yFI8kqH^oz2*0aH5SaaL zaA}kQ9I-bNU!Q_PZMc-!lffb=2=)v>A1c7X52D}V(f1Zi9vZA49F4gC31s;@_xPY) zdsO#!b*8t`gN1)B2OXNhJo2w^E}O~9=8Y#`)qB6WtO0_4;powBIs1|!;FGZt6mOCn z9fjLFOD3Jo1kz2Rn4Hb1wxEtq%liF+!Qwb_2TL(`@%e0eugC17y0-KwavG3J<xFOjT_T>Yjp=hg52Vkcc+-g)ey!Qn!S1?G z{*F0$vmZ26@8*;3V^v^nCbfw^i$#q`V}FRPSf>Ng5|~QxKRdoMo4fzm=?P}_Ow{YA z(uh`-dp`~|ZX%oQ?TUQ93lp1N z>=ztPWQQVm_llJL&PbtXxu?jrFUM{XhtXE4vxwhuTQ$uJx4cO_el9UNh1_>&g*ew0 z`(t(~^H3vM!x%Q=r(?1ElOYa=W^6@v$Pol66^r;ddZh^lU>{UH_?|`-pnff%h6bJj zEYHgMs@aC}Qx~t~E^DM{t0Agmn@{k5?zZuJIt`wjj&hC3@j~*Uhz!=eL$6%(rDcbD zxB4TUuT8^V;3PTS0$bQW{@S#D0ZZB-($iHYH=MG_Eu@wX} z@iJiEhQ<2uA5%B^oI@d|NycXfk?G4d4(zxoC%>fL zV?6#YsI7Ig5gU(H*oM(wBU1UW^vGjWJr&vi!E?K?y@26%>t`4&^Aybb2=gd*Z#UTBW57(aBemy##mJ0iRZuhBVdHRDX zPx*-QK6;r0=?A{H6P8+sh97*w&7`qEVU28PeRu%j;oyXSlkL~}aanHM5MqGvc>q

6v& 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 Tg8fAW`~8ai)_rN6f7SjE8*qiF literal 0 HcmV?d00001 diff --git a/resources/diameter-slh/du/pom.xml b/resources/diameter-slh/du/pom.xml index 60f0ec24c..3a106d4f9 100644 --- a/resources/diameter-slh/du/pom.xml +++ b/resources/diameter-slh/du/pom.xml @@ -5,12 +5,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-ra-DU - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -32,7 +32,7 @@ - diameter-${pom.artifactId}-${project.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools @@ -79,5 +79,126 @@ + + + du-jboss5 + + diameter-${project.artifactId}-${project.version} + + + org.mobicents.tools + maven-du-plugin + ${maven.du.plugin.jboss5.version} + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + + + + du-wildfly + + true + + + diameter-${project.artifactId}-${project.version} + + + org.mobicents.tools + maven-du-plugin + ${maven.du.plugin.wildfly.version} + + + + copy-dependencies + generate-descriptor + generate-ant-management-script + + + + + + + + + deploy-module-jboss5 + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + + deploy-module-wildfly + + + + maven-antrun-plugin + + + deploy-DU + install + + run + + + + + + + + + undeploy-DU + clean + + run + + + + + + + + + + + + + diff --git a/resources/diameter-slh/events/pom.xml b/resources/diameter-slh/events/pom.xml index 8971332a0..07361d031 100644 --- a/resources/diameter-slh/events/pom.xml +++ b/resources/diameter-slh/events/pom.xml @@ -19,7 +19,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-events diff --git a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java index bebaca635..98d0e4d38 100644 --- a/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java +++ b/resources/diameter-slh/events/src/main/java/net/java/slee/resource/diameter/slh/events/LCSRoutingInfoAnswer.java @@ -23,6 +23,8 @@ import net.java.slee.resource.diameter.base.events.DiameterMessage; import net.java.slee.resource.diameter.base.events.avp.Address; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; import net.java.slee.resource.diameter.base.events.avp.FailedAvp; import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; @@ -82,6 +84,40 @@ public interface LCSRoutingInfoAnswer extends DiameterMessage { */ void setResultCode(long resultCode); + /** + * @return true if the Experimental-Result AVP is present in the message, false otherwise + */ + public boolean hasExperimentalResult(); + + /** + * @return the value of the Experimental-Result AVP, of type Grouped. + */ + public ExperimentalResultAvp getExperimentalResult(); + + /** + * Sets the value of the Experimental-Result AVP, of type Grouped. + * + * @param experimentalResult + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult); + + /** + * @return true if the Experimental-Result AVP is present in the message, false otherwise + */ + public boolean hasAuthSessionState(); + + /** + * @return the value of the Auth-Session-State AVP, of type Enumerated + */ + public AuthSessionStateType getAuthSessionState(); + + /** + * Sets the value of the Auth-Session-State AVP, of type Enumerated. + * + * @param authSessionState + */ + public void setAuthSessionState(AuthSessionStateType authSessionState); + /** * Returns the set of Failed-AVP AVPs. * diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java index 1e7a5ac4a..4e6d8797f 100644 --- a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java @@ -21,6 +21,9 @@ package org.mobicents.slee.resource.diameter.slh.events; +import net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType; +import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes; +import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp; import org.jdiameter.api.Message; import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl; import net.java.slee.resource.diameter.base.events.avp.Address; @@ -30,6 +33,7 @@ import net.java.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvp; import net.java.slee.resource.diameter.slh.events.avp.ServingNodeAvp; +import org.mobicents.slee.resource.diameter.base.events.avp.ExperimentalResultAvpImpl; import org.mobicents.slee.resource.diameter.slh.events.avp.AdditionalServingNodeAvpImpl; import org.mobicents.slee.resource.diameter.slh.events.avp.ServingNodeAvpImpl;; @@ -47,6 +51,48 @@ public LCSRoutingInfoAnswerImpl(Message message) { super(message); } + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasExperimentalResult() + */ + public boolean hasExperimentalResult() { + return hasAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getExperimentalResult() + */ + public ExperimentalResultAvp getExperimentalResult() { + return (ExperimentalResultAvp) getAvpAsCustom(DiameterAvpCodes.EXPERIMENTAL_RESULT, ExperimentalResultAvpImpl.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setExperimentalResult(net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp) + */ + public void setExperimentalResult(ExperimentalResultAvp experimentalResult) { + addAvp(DiameterAvpCodes.EXPERIMENTAL_RESULT, experimentalResult.byteArrayValue()); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasAuthSessionState() + */ + public boolean hasAuthSessionState() { + return hasAvp(DiameterAvpCodes.AUTH_SESSION_STATE); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#getAuthSessionState() + */ + public AuthSessionStateType getAuthSessionState() { + return (AuthSessionStateType) getAvpAsEnumerated(DiameterAvpCodes.AUTH_SESSION_STATE, AuthSessionStateType.class); + } + + /* (non-Javadoc) + * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#setAuthSessionState(net.java.slee.resource.diameter.base.events.avp.AuthSessionStateType) + */ + public void setAuthSessionState(AuthSessionStateType authSessionState) { + addAvp(DiameterAvpCodes.AUTH_SESSION_STATE, authSessionState.getValue()); + } + /* * (non-Javadoc) * @see net.java.slee.resource.diameter.slh.events.LCSRoutingInfoAnswer#hasUserName() diff --git a/resources/diameter-slh/pom.xml b/resources/diameter-slh/pom.xml index 6407888cd..9cf7d48f8 100644 --- a/resources/diameter-slh/pom.xml +++ b/resources/diameter-slh/pom.xml @@ -9,7 +9,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT ../.. @@ -34,16 +34,16 @@ - release + maven-release docs release - maven-release + release-wildfly - docs + release @@ -69,4 +69,4 @@ - \ No newline at end of file + diff --git a/resources/diameter-slh/ra/pom.xml b/resources/diameter-slh/ra/pom.xml index 43391c5f3..94ab95186 100644 --- a/resources/diameter-slh/ra/pom.xml +++ b/resources/diameter-slh/ra/pom.xml @@ -19,12 +19,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-ra - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java index f2917b0ef..184a656c6 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/DiameterSLhResourceAdaptor.java @@ -237,8 +237,8 @@ public void raActive() { } try { - if (tracer.isInfoEnabled()) { - tracer.info("Activating Diameter SLh RA Entity"); + if (tracer.isFineEnabled()) { + tracer.fine("Activating Diameter SLh RA Entity"); } this.diameterMultiplexerObjectName = new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer"); @@ -248,14 +248,14 @@ public void raActive() { if (ManagementFactory.getPlatformMBeanServer().isRegistered(this.diameterMultiplexerObjectName)) { // trying to get via MBeanServer object = ManagementFactory.getPlatformMBeanServer().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via Platform MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } else { // trying to get via locateJBoss object = MBeanServerLocator.locateJBoss().invoke(this.diameterMultiplexerObjectName, "getMultiplexerMBean", new Object[]{}, new String[]{}); - if (tracer.isInfoEnabled()) { - tracer.info("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); + if (tracer.isFineEnabled()) { + tracer.fine("Trying to get via JBoss MBeanServer: " + this.diameterMultiplexerObjectName + ", object: " + object); } } @@ -301,8 +301,8 @@ public void raStopping() { tracer.severe("Failed to unregister SLh RA from Diameter Mux.", e); } - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: raStopping completed."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: raStopping completed."); } } @@ -313,8 +313,8 @@ public void raInactive() { activities = null; - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: raInactive completed."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: raInactive completed."); } } @@ -388,8 +388,8 @@ public void serviceInactive(ReceivableService serviceInfo) { // Mandatory callback methods ------------------------------------------ public void queryLiveness(ActivityHandle handle) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: queryLiveness :: handle[" + handle + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: queryLiveness :: handle[" + handle + "]."); } if (!(handle instanceof DiameterActivityHandle)) { return; @@ -436,14 +436,14 @@ public void administrativeRemove(ActivityHandle activityHandle) { // Optional callback methods ------------------------------------------- public void eventProcessingFailed(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags, FailureReason reason) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: eventProcessingFailed :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "], reason[" + reason + "]."); } } public void eventProcessingSuccessful(ActivityHandle handle, FireableEventType eventType, Object event, Address address, ReceivableService service, int flags) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: eventProcessingSuccessful :: handle[" + handle + "], eventType[" + eventType + "], event[" + event + "], address[" + address + "], flags[" + flags + "]."); } } @@ -454,7 +454,8 @@ public void eventUnreferenced(ActivityHandle handle, FireableEventType eventType } public void activityEnded(ActivityHandle activityHandle) { - tracer.info("Diameter SLh RA :: activityEnded :: handle[" + activityHandle + "."); + if (tracer.isFineEnabled()) + tracer.fine("Diameter SLh RA :: activityEnded :: handle[" + activityHandle + "."); if (this.activities != null) { synchronized (this.activities) { this.activities.remove((DiameterActivityHandle) activityHandle); @@ -589,8 +590,8 @@ private void addActivity(DiameterActivity ac, boolean suspended) { // Put it into our activities map activities.put(activity.getActivityHandle(), activity); - if (tracer.isInfoEnabled()) { - tracer.info("Activity started [" + activity.getActivityHandle() + "]"); + if (tracer.isFineEnabled()) { + tracer.fine("Activity started [" + activity.getActivityHandle() + "]"); } } catch (Exception e) { tracer.severe("Error creating activity", e); @@ -614,8 +615,8 @@ private synchronized void initStack() throws Exception { this.stack = this.diameterMux.getStack(); this.messageTimeout = stack.getMetaData().getConfiguration().getLongValue(MessageTimeOut.ordinal(), (Long) MessageTimeOut.defValue()); - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: Successfully initialized stack."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: Successfully initialized stack."); } } @@ -668,8 +669,8 @@ public void receivedSuccessMessage(Request request, Answer answer) { } try { - if (tracer.isInfoEnabled()) { - tracer.info("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); + if (tracer.isFineEnabled()) { + tracer.fine("Received Message Result-Code: " + answer.getResultCode().getUnsigned32()); } } catch (AvpDataException ignore) { // ignore, this was just for informational purposes... @@ -681,8 +682,8 @@ public void receivedSuccessMessage(Request request, Answer answer) { * @see org.jdiameter.api.EventListener#timeoutExpired(org.jdiameter.api.Request) */ public void timeoutExpired(Request request) { - if (tracer.isInfoEnabled()) { - tracer.info("Diameter SLh RA :: timeoutExpired :: Request[" + request + "]."); + if (tracer.isFineEnabled()) { + tracer.fine("Diameter SLh RA :: timeoutExpired :: Request[" + request + "]."); } try { diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java index eecf2d787..455cd4455 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/handlers/SLhSessionFactory.java @@ -89,7 +89,8 @@ public AppSession getNewSession(String sessionId, Class ap @Override public void stateChanged(AppSession source, Enum oldState, Enum newState) { //slhaResourceAdaptor.stateChanged(source, oldState, newState); - logger.info("Diameter SLh Session Factory :: stateChanged :: source[" + source + "] :: oldState[" + oldState + "], newState[" + newState + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLh Session Factory :: stateChanged :: source[" + source + "] :: oldState[" + oldState + "], newState[" + newState + "]"); } /* (non-Javadoc) @@ -97,7 +98,8 @@ public void stateChanged(AppSession source, Enum oldState, Enum newState) { */ @Override public void stateChanged(Enum oldState, Enum newState) { - logger.info("Diameter SLh Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); + if (logger.isDebugEnabled()) + logger.debug("Diameter SLh Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]"); } /* (non-Javadoc) @@ -126,8 +128,8 @@ public void doLCSRoutingInfoAnswerEvent(ClientSLhSession clientSLhSession, LCSRo */ @Override public void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException { - logger.info("Diameter SLh Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]"); - + if (logger.isDebugEnabled()) + logger.debug("Diameter SLh Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]"); slhResourceAdaptor.fireEvent(appSession.getSessionId(), answer != null ? answer.getMessage() : request.getMessage()); } diff --git a/resources/diameter-slh/ratype/pom.xml b/resources/diameter-slh/ratype/pom.xml index bfee74f88..986d88385 100644 --- a/resources/diameter-slh/ratype/pom.xml +++ b/resources/diameter-slh/ratype/pom.xml @@ -6,12 +6,12 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-ratype - Restcomm :: Diameter Resources :: ${pom.artifactId} + Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-slh/release/pom.xml b/resources/diameter-slh/release/pom.xml index 96e729029..aa3dd689e 100644 --- a/resources/diameter-slh/release/pom.xml +++ b/resources/diameter-slh/release/pom.xml @@ -2,13 +2,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - pom org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-ra-release @@ -55,6 +54,83 @@ + + release-jboss5 + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + release-wildfly + + + + maven-antrun-plugin + false + + + install + + run + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/resources/diameter-slh/testsuite/pom.xml b/resources/diameter-slh/testsuite/pom.xml index 093234b53..bc8cdaaf7 100644 --- a/resources/diameter-slh/testsuite/pom.xml +++ b/resources/diameter-slh/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.0.0-SNAPSHOT + 7.2.0.SNAPSHOT restcomm-slee-ra-diameter-slh-testsuite diff --git a/testsuite/test-framework/du/pom.xml b/testsuite/test-framework/du/pom.xml index bba9c2ce4..1a10dc406 100644 --- a/testsuite/test-framework/du/pom.xml +++ b/testsuite/test-framework/du/pom.xml @@ -10,18 +10,18 @@ test-framework-slee-DU - Restcomm :: Diameter Testsuite :: ${pom.artifactId} + Restcomm :: Diameter Testsuite :: ${project.artifactId} - ${pom.groupId} + ${project.groupId} test-framework-slee-sbb - ${pom.version} + ${project.version} - diameter-${pom.artifactId}-${pom.version} + diameter-${project.artifactId}-${project.version} org.mobicents.tools diff --git a/testsuite/test-framework/pom.xml b/testsuite/test-framework/pom.xml index 5e3e27018..cdfe06dc1 100644 --- a/testsuite/test-framework/pom.xml +++ b/testsuite/test-framework/pom.xml @@ -14,7 +14,7 @@ test-framework-parent 1.0.0-SNAPSHOT - Restcomm :: Diameter Testsuite :: ${pom.artifactId} + Restcomm :: Diameter Testsuite :: ${project.artifactId} 3.0.0-SNAPSHOT diff --git a/testsuite/test-framework/sbb/pom.xml b/testsuite/test-framework/sbb/pom.xml index 909caa5d1..800598a62 100644 --- a/testsuite/test-framework/sbb/pom.xml +++ b/testsuite/test-framework/sbb/pom.xml @@ -10,7 +10,7 @@ test-framework-slee-sbb - Restcomm :: Diameter Testsuite :: ${pom.artifactId} + Restcomm :: Diameter Testsuite :: ${project.artifactId} From 6952cc1f6aeb0a445ccf48f91625a2edc62e41f9 Mon Sep 17 00:00:00 2001 From: FerUy Date: Tue, 8 Jun 2021 23:28:29 -0300 Subject: [PATCH 10/11] Fixed User-Name AVP vendor id (removed) in getter/setter/has in LCSRoutingInfoAnswerImpl and LCSRoutingInfoRequestImpl. Set all serializable ids to 1L and some other minor enhancements in some @param names. Updated readme with SLh and SLg references --- README.md | 2 ++ .../diameter/base/events/avp/DiameterIdentity.java | 2 +- .../resource/diameter/cxdx/events/avp/SessionPriority.java | 2 +- .../slee/resource/diameter/gx/events/avp/BearerUsage.java | 2 +- .../resource/diameter/gx/DiameterGxResourceAdaptor.java | 2 +- .../resource/diameter/gx/GxClientSessionActivityImpl.java | 2 +- .../resource/diameter/gx/GxServerSessionActivityImpl.java | 2 +- .../resource/diameter/ro/RoClientSessionActivityImpl.java | 2 +- .../slee/resource/diameter/ro/RoSessionActivityImpl.java | 6 +++--- .../resource/diameter/rx/RxClientSessionActivityImpl.java | 7 +++---- .../resource/diameter/rx/RxServerSessionActivityImpl.java | 2 +- .../slee/resource/diameter/rx/RxSessionActivityImpl.java | 6 +++--- .../slee/resource/diameter/s13/S13ClientSessionImpl.java | 2 +- .../slee/resource/diameter/s13/S13ServerSessionImpl.java | 2 +- .../slee/resource/diameter/s13/S13SessionImpl.java | 2 +- .../resource/diameter/sh/events/avp/DataReferenceType.java | 2 +- .../slee/resource/diameter/sh/events/avp/SubsReqType.java | 2 +- .../diameter/sh/events/ProfileUpdateRequestImpl.java | 2 +- .../diameter/sh/events/PushNotificationAnswerImpl.java | 2 +- .../sh/events/SubscribeNotificationsAnswerImpl.java | 2 +- .../resource/diameter/sh/server/ShServerActivityImpl.java | 2 +- .../diameter/slh/events/LCSRoutingInfoAnswerImpl.java | 6 +++--- .../diameter/slh/events/LCSRoutingInfoRequestImpl.java | 6 +++--- .../diameter/slh/SLhServerSessionActivityImpl.java | 2 +- .../slee/resource/diameter/slh/SLhSessionActivityImpl.java | 2 +- 25 files changed, 36 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 180d5f4b7..a7ea0d1b9 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ The following Diameter applications are natively supported - Diameter Rx (3GPP TS 29.214) - Diameter S6a/S6d (3GPP TS 29.272) - Diameter S13 (3GPP TS 29.272) +- Diameter SLh (3GPP TS 29.173) +- Diameter SLg (EPC Location Protocol, 3GPP TS 29.172) ## Questions ? diff --git a/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java b/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java index 06016abbf..e16b5d817 100644 --- a/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java +++ b/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java @@ -47,7 +47,7 @@ */ public class DiameterIdentity implements Serializable { - private static final long serialVersionUID = -7248928425138452437L; + private static final long serialVersionUID = 1L; private String identity; diff --git a/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java b/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java index fdc8274b4..0d4c28f1e 100644 --- a/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java +++ b/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java @@ -53,7 +53,7 @@ */ public class SessionPriority implements Serializable, Enumerated { - private static final long serialVersionUID = 6175897437829561030L; + private static final long serialVersionUID = 1L; /** * Value indicating Priority 0 diff --git a/resources/diameter-gx/events/src/main/java/net/java/slee/resource/diameter/gx/events/avp/BearerUsage.java b/resources/diameter-gx/events/src/main/java/net/java/slee/resource/diameter/gx/events/avp/BearerUsage.java index a905daf43..07d8b55a8 100644 --- a/resources/diameter-gx/events/src/main/java/net/java/slee/resource/diameter/gx/events/avp/BearerUsage.java +++ b/resources/diameter-gx/events/src/main/java/net/java/slee/resource/diameter/gx/events/avp/BearerUsage.java @@ -37,7 +37,7 @@ public class BearerUsage implements Enumerated, Serializable { public static final int IMS_SIGNALLING = 1; public static final BearerUsage _GENERAL = new BearerUsage(GENERAL); public static final BearerUsage _IMS_SIGNALLING = new BearerUsage(GENERAL); - private static final long serialVersionUID = 1727547260959850765L; + private static final long serialVersionUID = 1L; private int value; diff --git a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java index 594de09c8..193de208e 100644 --- a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java +++ b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java @@ -115,7 +115,7 @@ */ public class DiameterGxResourceAdaptor implements ResourceAdaptor, DiameterListener, DiameterRAInterface { - private static final long serialVersionUID = -1142455412819771222L; + private static final long serialVersionUID = 1L; // Config Properties Names --------------------------------------------- private static final String AUTH_APPLICATION_IDS = "authApplicationIds"; diff --git a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxClientSessionActivityImpl.java b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxClientSessionActivityImpl.java index a4b79b84f..45d3307ca 100644 --- a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxClientSessionActivityImpl.java +++ b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxClientSessionActivityImpl.java @@ -56,7 +56,7 @@ */ public class GxClientSessionActivityImpl extends GxSessionActivityImpl implements GxClientSessionActivity, StateChangeListener { - private static final long serialVersionUID = 6391181777305378777L; + private static final long serialVersionUID = 1L; protected transient GxMessageFactory roMessageFactory = null; protected transient ClientGxSession session; diff --git a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxServerSessionActivityImpl.java b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxServerSessionActivityImpl.java index f8cb39a94..db63010d9 100644 --- a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxServerSessionActivityImpl.java +++ b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/GxServerSessionActivityImpl.java @@ -55,7 +55,7 @@ */ public class GxServerSessionActivityImpl extends GxSessionActivityImpl implements GxServerSessionActivity, StateChangeListener { - private static final long serialVersionUID = 5230054776594429948L; + private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(GxServerSessionActivityImpl.class); protected transient ServerGxSession session = null; protected transient GxCreditControlRequest lastRequest = null; diff --git a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java index 4f2abccad..191389953 100644 --- a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java +++ b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java @@ -54,7 +54,7 @@ */ public class RoClientSessionActivityImpl extends RoSessionActivityImpl implements RoClientSessionActivity, StateChangeListener { - private static final long serialVersionUID = 6391181777305378777L; + private static final long serialVersionUID = 1L; protected transient ClientRoSession session; diff --git a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java index 1af31f343..a1ede650f 100644 --- a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java +++ b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java @@ -45,13 +45,13 @@ */ public abstract class RoSessionActivityImpl extends DiameterActivityImpl implements RoSessionActivity { - private static final long serialVersionUID = 5037967180962414949L; + private static final long serialVersionUID = 1L; protected transient RoMessageFactory roMessageFactory; /** - * @param messageFactory - * @param avpFactory + * @param roMessageFactory + * @param roAvpFactory * @param session * @param raEventListener * @param destinationHost diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java index 86c4dcf71..55652693e 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java @@ -58,18 +58,17 @@ */ public class RxClientSessionActivityImpl extends RxSessionActivityImpl implements RxClientSessionActivity, StateChangeListener { - private static final long serialVersionUID = 6391181777305378777L; + private static final long serialVersionUID = 1L; protected transient ClientRxSession session; /** * - * @param messageFactory - * @param avpFactory + * @param rxMessageFactory + * @param rxAvpFactory * @param session * @param destinationHost * @param destinationRealm - * @param endpoint * @param stack */ public RxClientSessionActivityImpl(final RxMessageFactory rxMessageFactory, final RxAvpFactory rxAvpFactory, final ClientRxSession session, diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java index dd6f757b3..9015beebb 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java @@ -61,7 +61,7 @@ */ public class RxServerSessionActivityImpl extends RxSessionActivityImpl implements RxServerSessionActivity, StateChangeListener { - private static final long serialVersionUID = 5230054776594429948L; + private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(RxServerSessionActivityImpl.class); diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java index ac4d10ad3..175dc0bbb 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java @@ -53,13 +53,13 @@ */ public abstract class RxSessionActivityImpl extends DiameterActivityImpl implements RxSessionActivity { - private static final long serialVersionUID = 5037967180962414549L; + private static final long serialVersionUID = 1L; protected transient RxMessageFactory rxMessageFactory; /** - * @param messageFactory - * @param avpFactory + * @param rxMessageFactory + * @param rxAvpFactory * @param session * @param raEventListener * @param destinationHost diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java index 91faa0a40..e4f0efc6f 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java @@ -55,7 +55,7 @@ */ public class S13ClientSessionImpl extends S13SessionImpl implements S13ClientSessionActivity { - private static final long serialVersionUID = 7518916596996009148L; + private static final long serialVersionUID = 1L; protected transient ClientS13Session appSession; public S13ClientSessionImpl(S13MessageFactory s13MessageFactory, S13AVPFactory s13AvpFactory, ClientS13Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java index 9b47071f6..a58ec813b 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java @@ -55,7 +55,7 @@ */ public class S13ServerSessionImpl extends S13SessionImpl implements S13ServerSessionActivity { - private static final long serialVersionUID = 7518916596996009148L; + private static final long serialVersionUID = 1L; protected transient ServerS13Session appSession; public S13ServerSessionImpl(S13MessageFactory s13MessageFactory, S13AVPFactory s13AvpFactory, ServerS13Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java index c74b1e503..abe747f19 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java @@ -50,7 +50,7 @@ */ public abstract class S13SessionImpl extends DiameterActivityImpl implements S13SessionActivity, StateChangeListener{ - private static final long serialVersionUID = 4374137032596394588L; + private static final long serialVersionUID = 1L; protected boolean terminated = false; diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DataReferenceType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DataReferenceType.java index d705764bd..efe9e644d 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DataReferenceType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/DataReferenceType.java @@ -55,7 +55,7 @@ public class DataReferenceType implements Serializable, Enumerated { - private static final long serialVersionUID = -8270968643651090042L; + private static final long serialVersionUID = 1L; /** * Int value equal to one passed in UDR/SNR - it indicates that data is repository data - see TS29.328 for description diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SubsReqType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SubsReqType.java index 7b22f48ae..ec2425429 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SubsReqType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SubsReqType.java @@ -43,7 +43,7 @@ */ public class SubsReqType implements Serializable, Enumerated { - private static final long serialVersionUID = -7748012167965997571L; + private static final long serialVersionUID = 1L; /** * Int value equal in diameter message - it indicates subscription request - subscirbe to updates - see TS29.328 for description diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java index 47c3d62a4..870b2da39 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java @@ -100,7 +100,7 @@ */ public class ProfileUpdateRequestImpl extends DiameterShMessageImpl implements ProfileUpdateRequest { - private static final long serialVersionUID = -5829214729454907100L; + private static final long serialVersionUID = 1L; private static JAXBContext jaxbContext = initJAXBContext(); private static UserDataObjectFactory udof = new UserDataObjectFactoryImpl(new ObjectFactory()); diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java index 691705812..81c20d592 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java @@ -40,7 +40,7 @@ */ public class PushNotificationAnswerImpl extends DiameterShMessageImpl implements PushNotificationAnswer { - private static final long serialVersionUID = 5893646835644420572L; + private static final long serialVersionUID = 1L; /** * diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java index 873c8966b..40a44ff31 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java @@ -56,7 +56,7 @@ */ public class SubscribeNotificationsAnswerImpl extends DiameterShMessageImpl implements SubscribeNotificationsAnswer { - private static final long serialVersionUID = -66848235143082970L; + private static final long serialVersionUID = 1L; private static JAXBContext jaxbContext = initJAXBContext(); private static UserDataObjectFactory udof = new UserDataObjectFactoryImpl(new ObjectFactory()); diff --git a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java index 25855c1c6..284cf6316 100644 --- a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java +++ b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java @@ -69,7 +69,7 @@ */ public class ShServerActivityImpl extends DiameterActivityImpl implements ShServerActivity, StateChangeListener { - private static final long serialVersionUID = -5297270149541413224L; + private static final long serialVersionUID = 1L; protected transient ServerShSession serverSession = null; diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java index 4e6d8797f..a2e2efe9b 100644 --- a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java @@ -99,7 +99,7 @@ public void setAuthSessionState(AuthSessionStateType authSessionState) { */ @Override public boolean hasUserName() { - return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME); } /* @@ -108,7 +108,7 @@ public boolean hasUserName() { */ @Override public String getUserName() { - return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME); } /* @@ -117,7 +117,7 @@ public String getUserName() { */ @Override public void setUserName(String imsi) throws IllegalStateException { - addAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, imsi); + addAvp(LCSRoutingInfoAVPCodes.USER_NAME, imsi); } /* diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java index a4651e273..5cf067918 100644 --- a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoRequestImpl.java @@ -70,7 +70,7 @@ public void setAuthSessionState(AuthSessionStateType authSessionState) { */ @Override public boolean hasUserName() { - return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + return hasAvp(LCSRoutingInfoAVPCodes.USER_NAME); } /* @@ -79,7 +79,7 @@ public boolean hasUserName() { */ @Override public String getUserName() { - return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID); + return getAvpAsUTF8String(LCSRoutingInfoAVPCodes.USER_NAME); } /* @@ -88,7 +88,7 @@ public String getUserName() { */ @Override public void setUserName(String imsi) throws IllegalStateException { - addAvp(LCSRoutingInfoAVPCodes.USER_NAME, LCSRoutingInfoAVPCodes.SLh_VENDOR_ID, imsi); + addAvp(LCSRoutingInfoAVPCodes.USER_NAME, imsi); } /* diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java index 6d6aa8ca5..98b1331b7 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhServerSessionActivityImpl.java @@ -53,7 +53,7 @@ public class SLhServerSessionActivityImpl extends SLhSessionActivityImpl implements SLhServerSessionActivity { - private static final long serialVersionUID = 7518916596996009148L; + private static final long serialVersionUID = 1L; protected transient ServerSLhSession serverSLhSession; diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java index adc905277..b36d42d74 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java @@ -46,7 +46,7 @@ */ public abstract class SLhSessionActivityImpl extends DiameterActivityImpl implements SLhSessionActivity, StateChangeListener { - private static final long serialVersionUID = 4374137032596394588L; + private static final long serialVersionUID = 1L; protected boolean terminated = false; From 8e9a232d1d6b0028a55cbeb4d3fcce6468c630c2 Mon Sep 17 00:00:00 2001 From: FerUy Date: Sat, 6 Nov 2021 16:53:15 -0300 Subject: [PATCH 11/11] Set User-Name AVP vendor id to 0 in SLh RIA impl class setter; Upgrade to JDK 11; Set all serial version UID to 1; Fixed some minor errors in comments; Updated version to 7.2.1-SNAPSHOT; Added a Jenkinsfile --- .gitignore | 137 +++++++++++++++--- Jenkinsfile | 93 ++++++++++++ README.md | 11 +- .../hss-client/docs/jdocbook-restcomm/pom.xml | 2 +- enablers/hss-client/docs/pom.xml | 2 +- .../hss-client/docs/sources-restcomm/pom.xml | 2 +- enablers/hss-client/docs/sources/pom.xml | 2 +- enablers/hss-client/du/pom.xml | 2 +- enablers/hss-client/example/du/pom.xml | 2 +- enablers/hss-client/example/pom.xml | 2 +- enablers/hss-client/example/sbb/pom.xml | 2 +- enablers/hss-client/pom.xml | 2 +- enablers/hss-client/release/pom.xml | 2 +- enablers/hss-client/sbb/pom.xml | 2 +- pom.xml | 69 +++++++-- resources/diameter-base/common/events/pom.xml | 18 ++- .../base/events/avp/DiameterIdentity.java | 2 +- .../diameter-base/common/library/pom.xml | 2 +- resources/diameter-base/common/pom.xml | 2 +- resources/diameter-base/common/ra/pom.xml | 2 +- resources/diameter-base/common/ratype/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-base/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-base/docs/sources/pom.xml | 2 +- resources/diameter-base/du/pom.xml | 2 +- resources/diameter-base/events/pom.xml | 2 +- resources/diameter-base/pom.xml | 2 +- resources/diameter-base/ra/pom.xml | 2 +- resources/diameter-base/ratype/pom.xml | 2 +- resources/diameter-base/release/pom.xml | 2 +- resources/diameter-base/testsuite/pom.xml | 2 +- .../base/tests/factories/AvpAssistant.java | 1 + resources/diameter-cca/common/events/pom.xml | 2 +- resources/diameter-cca/common/library/pom.xml | 2 +- resources/diameter-cca/common/pom.xml | 2 +- resources/diameter-cca/common/ra/pom.xml | 2 +- resources/diameter-cca/common/ratype/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-cca/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-cca/docs/sources/pom.xml | 2 +- resources/diameter-cca/du/pom.xml | 2 +- resources/diameter-cca/events/pom.xml | 2 +- resources/diameter-cca/pom.xml | 2 +- resources/diameter-cca/ra/pom.xml | 2 +- resources/diameter-cca/ratype/pom.xml | 2 +- resources/diameter-cca/release/pom.xml | 2 +- resources/diameter-cca/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-cx-dx/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-cx-dx/docs/sources/pom.xml | 2 +- resources/diameter-cx-dx/du/pom.xml | 2 +- resources/diameter-cx-dx/events/pom.xml | 2 +- .../cxdx/events/avp/SessionPriority.java | 2 +- resources/diameter-cx-dx/pom.xml | 2 +- resources/diameter-cx-dx/ra/pom.xml | 2 +- resources/diameter-cx-dx/ratype/pom.xml | 2 +- resources/diameter-cx-dx/release/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-gq/docs/pom.xml | 2 +- .../diameter-gq/docs/sources-restcomm/pom.xml | 2 +- resources/diameter-gq/docs/sources/pom.xml | 2 +- resources/diameter-gq/du/pom.xml | 2 +- resources/diameter-gq/events/pom.xml | 2 +- resources/diameter-gq/pom.xml | 2 +- resources/diameter-gq/ra/pom.xml | 2 +- resources/diameter-gq/ratype/pom.xml | 2 +- resources/diameter-gq/release/pom.xml | 2 +- resources/diameter-gq/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-gx/docs/pom.xml | 2 +- .../diameter-gx/docs/sources-restcomm/pom.xml | 2 +- resources/diameter-gx/docs/sources/pom.xml | 2 +- resources/diameter-gx/du/pom.xml | 2 +- resources/diameter-gx/events/pom.xml | 2 +- resources/diameter-gx/pom.xml | 2 +- resources/diameter-gx/ra/pom.xml | 2 +- .../gx/DiameterGxResourceAdaptor.java | 2 +- resources/diameter-gx/ratype/pom.xml | 2 +- resources/diameter-gx/release/pom.xml | 2 +- resources/diameter-gx/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-rf/docs/pom.xml | 2 +- .../diameter-rf/docs/sources-restcomm/pom.xml | 2 +- resources/diameter-rf/docs/sources/pom.xml | 2 +- resources/diameter-rf/du/pom.xml | 2 +- resources/diameter-rf/events/pom.xml | 2 +- resources/diameter-rf/pom.xml | 2 +- resources/diameter-rf/ra/pom.xml | 2 +- resources/diameter-rf/ratype/pom.xml | 2 +- resources/diameter-rf/release/pom.xml | 2 +- resources/diameter-rf/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-ro/docs/pom.xml | 2 +- .../diameter-ro/docs/sources-restcomm/pom.xml | 2 +- resources/diameter-ro/docs/sources/pom.xml | 2 +- resources/diameter-ro/du/pom.xml | 2 +- resources/diameter-ro/events/pom.xml | 2 +- resources/diameter-ro/pom.xml | 2 +- resources/diameter-ro/ra/pom.xml | 2 +- .../ro/RoClientSessionActivityImpl.java | 2 +- .../diameter/ro/RoSessionActivityImpl.java | 6 +- resources/diameter-ro/ratype/pom.xml | 2 +- resources/diameter-ro/release/pom.xml | 2 +- resources/diameter-ro/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-rx/docs/pom.xml | 2 +- .../diameter-rx/docs/sources-restcomm/pom.xml | 2 +- resources/diameter-rx/docs/sources/pom.xml | 2 +- resources/diameter-rx/du/pom.xml | 2 +- resources/diameter-rx/events/pom.xml | 2 +- resources/diameter-rx/pom.xml | 2 +- resources/diameter-rx/ra/pom.xml | 2 +- .../rx/RxClientSessionActivityImpl.java | 7 +- .../rx/RxServerSessionActivityImpl.java | 2 +- .../diameter/rx/RxSessionActivityImpl.java | 4 +- resources/diameter-rx/ratype/pom.xml | 2 +- resources/diameter-rx/release/pom.xml | 2 +- resources/diameter-rx/testsuite/pom.xml | 2 +- resources/diameter-s13/du/pom.xml | 2 +- resources/diameter-s13/events/pom.xml | 2 +- resources/diameter-s13/pom.xml | 2 +- resources/diameter-s13/ra/pom.xml | 2 +- .../diameter/s13/S13ClientSessionImpl.java | 2 +- .../diameter/s13/S13ServerSessionImpl.java | 2 +- .../resource/diameter/s13/S13SessionImpl.java | 2 +- resources/diameter-s13/ratype/pom.xml | 2 +- resources/diameter-s13/release/pom.xml | 4 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-s6a/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-s6a/docs/sources/pom.xml | 2 +- resources/diameter-s6a/du/pom.xml | 2 +- resources/diameter-s6a/events/pom.xml | 2 +- resources/diameter-s6a/pom.xml | 2 +- resources/diameter-s6a/ra/pom.xml | 2 +- .../diameter/s6a/S6aServerSessionImpl.java | 2 +- resources/diameter-s6a/ratype/pom.xml | 2 +- resources/diameter-s6a/release/pom.xml | 2 +- .../diameter-sh-client/common/events/pom.xml | 2 +- .../sh/events/avp/CurrentLocationType.java | 2 +- .../sh/events/avp/IdentitySetType.java | 2 +- .../events/avp/OneTimeNotificationType.java | 2 +- .../sh/events/avp/SendDataIndicationType.java | 2 +- .../sh/events/avp/SessionPriorityType.java | 2 +- .../sh/events/ProfileUpdateRequestImpl.java | 2 +- .../sh/events/PushNotificationAnswerImpl.java | 2 +- .../SubscribeNotificationsAnswerImpl.java | 2 +- .../diameter-sh-client/common/library/pom.xml | 2 +- resources/diameter-sh-client/common/pom.xml | 2 +- .../diameter-sh-client/common/ra/pom.xml | 2 +- .../diameter-sh-client/common/ratype/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-sh-client/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- .../diameter-sh-client/docs/sources/pom.xml | 2 +- resources/diameter-sh-client/du/pom.xml | 2 +- resources/diameter-sh-client/events/pom.xml | 2 +- resources/diameter-sh-client/pom.xml | 2 +- resources/diameter-sh-client/ra/pom.xml | 2 +- .../sh/client/ShClientActivityImpl.java | 2 +- .../ShClientSubscriptionActivityImpl.java | 2 +- resources/diameter-sh-client/ratype/pom.xml | 2 +- resources/diameter-sh-client/release/pom.xml | 2 +- .../diameter-sh-client/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-sh-server/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- .../diameter-sh-server/docs/sources/pom.xml | 2 +- resources/diameter-sh-server/du/pom.xml | 2 +- resources/diameter-sh-server/events/pom.xml | 2 +- resources/diameter-sh-server/pom.xml | 2 +- resources/diameter-sh-server/ra/pom.xml | 2 +- .../sh/server/ShServerActivityImpl.java | 2 +- resources/diameter-sh-server/ratype/pom.xml | 2 +- resources/diameter-sh-server/release/pom.xml | 2 +- .../diameter-sh-server/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-slg/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-slg/docs/sources/pom.xml | 2 +- resources/diameter-slg/du/pom.xml | 2 +- resources/diameter-slg/events/pom.xml | 14 +- resources/diameter-slg/pom.xml | 2 +- resources/diameter-slg/ra/pom.xml | 15 +- .../SLgSessionActivityImpl.java | 2 +- resources/diameter-slg/ratype/pom.xml | 2 +- resources/diameter-slg/release/pom.xml | 2 +- resources/diameter-slg/testsuite/pom.xml | 2 +- .../docs/jdocbook-restcomm/pom.xml | 2 +- resources/diameter-slh/docs/pom.xml | 2 +- .../docs/sources-restcomm/pom.xml | 2 +- resources/diameter-slh/docs/sources/pom.xml | 2 +- resources/diameter-slh/du/pom.xml | 2 +- resources/diameter-slh/events/pom.xml | 15 +- .../slh/events/LCSRoutingInfoAnswerImpl.java | 2 +- resources/diameter-slh/pom.xml | 2 +- resources/diameter-slh/ra/pom.xml | 15 +- .../slh/SLhClientSessionActivityImpl.java | 2 +- .../diameter/slh/SLhSessionActivityImpl.java | 2 +- resources/diameter-slh/ratype/pom.xml | 2 +- resources/diameter-slh/release/pom.xml | 2 +- resources/diameter-slh/testsuite/pom.xml | 2 +- 205 files changed, 493 insertions(+), 298 deletions(-) create mode 100644 Jenkinsfile diff --git a/.gitignore b/.gitignore index cdfed9175..56c6f9361 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,125 @@ -# Java compiled # -################# +############################## +## Java +############################## +.mtj.tmp/ *.class +*.jar +*.war +*.ear +*.nar +hs_err_pid* -# Eclipse # -########### -.classpath -.project -.settings +############################## +## Maven +############################## +~ +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +pom.xml.bak +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +# ignore mvn-rpmbuild repo +/.m2 + +############################## +## Gradle +############################## +bin/ +build/ +.gradle +.gradletasknamecache +gradle-app.setting +!gradle-wrapper.jar -# IntelliJ IDEA # -################# +############################## +## IntelliJ IDEA +############################## +out/ .idea/ +.idea_modules/ *.iml +*.ipr *.iws +.idea -# Maven # -######### -target +############################## +## Eclipse +############################## +.settings/ +bin/ +tmp/ +.metadata +.classpath +.project +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.factorypath -# OS generated files # -###################### +############################## +## NetBeans +############################## +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml +catalog.xml + +############################## +## Visual Studio Code +############################## +.vscode/ + +############################## +## OS X +############################## .DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -Icon? -ehthumbs.db -Thumbs.db + +############################## +## Generated directories +############################## +logs/ +LICENSE4J-Runtime-Library/ + +# ignore .svn metadata files +.svn + + +maven-ant-tasks.jar +test-output +transaction.log + +# vim files +*.swp +/.gitk-tmp.* +atlassian-ide-plugin.xml + +# temp files +*~ + +# hprof dumps +/*.hprof +# ignore 'randomly' strewn around logs +server.log + +# H2 databases produced by tests +*.h2.db + +# JBoss transaction generated files +PutObjectStoreDirHere + +/bin +/HtppSimulatorParameters.xml + diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..507affadb --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,93 @@ +pipeline { + agent any + + tools { + jdk 'JDK 11' + maven 'Maven_3.6.3' + } + + options { + buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '10')) + } + + + parameters { + string(name: 'JSLEE_DIAMETER_MAJOR_VERSION_NUMBER', defaultValue: '7.2.1', description: 'The major version for RestComm JAIN SLEE Diameter') + string(name: 'RESTCOMM_JDIAMETER_VERSION', defaultValue: '1.7.4-198', description: 'The version of RestComm jDiameter to use for build') + } + + stages{ + stage('Set Version') { + steps { + sh "mvn versions:set -DnewVersion=${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + } + } + + stage("Build") { + steps { + echo "Building application..." + script { + currentBuild.displayName = "#${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + currentBuild.description = "RestComm JAIN SLEE Diameter" + } + sh "mvn -Drestcomm.diameter.jdiameter.version=${params.RESTCOMM_JDIAMETER_VERSION} -Drestcomm.diameter.mux.version=${params.RESTCOMM_JDIAMETER_VERSION} clean install -DskipTests" + echo "Maven build completed." + } + } + + stage("Release") { + steps { + echo "Building a release version of #${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + sh "mvn clean install -Drestcomm.diameter.jdiameter.version=${params.RESTCOMM_JDIAMETER_VERSION} -Drestcomm.diameter.mux.version=${params.RESTCOMM_JDIAMETER_VERSION} -DskipTests -Prelease-wildfly -Drelease.dir=../../../deploy-${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + echo "Building a release version completed." + } + } + + stage('Save Artifacts') { + //when { anyOf { branch 'release'; branch 'master' }} + steps { + echo "Archiving RestComm JAIN SLEE Diameter version ${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + archiveArtifacts artifacts: "deploy-${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}/", followSymlinks: false, onlyIfSuccessful: true + } + } + + stage('Push Artifacts'){ + when{ anyOf { branch 'release'; branch 'master' }} + steps{ + script{ + FOLDERNAME = "${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}" + } + dir("deploy-${params.JSLEE_DIAMETER_MAJOR_VERSION_NUMBER}-${BUILD_NUMBER}"){ + sh 'find resources/* -maxdepth 1 -type d -exec zip -r -qq {}.zip {} \\;' + sh "mkdir ${FOLDERNAME}" + sh "find resources/* -iname \"*.zip\" -exec mv {} ${FOLDERNAME}/ \\;" + + sshagent(['ssh_grafana']) { + sh "scp -r ${FOLDERNAME} root@127.0.0.1:/var/www/html/FerUy/jain_slee_diameter" + } + sh "rm -rf ${FOLDERNAME}" + } + } + } + + stage('jFrog'){ + when { anyOf { branch 'release'; branch 'master'}} + steps{ + sh 'mvn deploy -DskipTests' + } + } + } + + post { + success { + echo "Successfully build" + } + failure { + echo "Building RestComm JAIN SLEE Diameter failed." + } + always { + sh 'rm -rf deploy' + echo 'The deploy folder is removed successfully' + } + } +} diff --git a/README.md b/README.md index a7ea0d1b9..f2472da13 100644 --- a/README.md +++ b/README.md @@ -21,19 +21,10 @@ The following Diameter applications are natively supported - Diameter S6a/S6d (3GPP TS 29.272) - Diameter S13 (3GPP TS 29.272) - Diameter SLh (3GPP TS 29.173) -- Diameter SLg (EPC Location Protocol, 3GPP TS 29.172) +- Diameter SLg (3GPP TS 29.172) ## Questions ? Please ask your question on [StackOverflow](http://stackoverflow.com/questions/tagged/restcomm) or the [Google Groups mailing list](http://groups.google.com/group/restcomm). - -## License - -RestComm is lead by [TeleStax](http://www.telestax.com/), Inc. and developed collaboratively by a community of individual -and enterprise contributors. - -RestComm is licensed under dual license policy. The default license is the Free Open Source GNU Affero GPL v3.0. -Alternatively a commercial license can be obtained from Telestax -([contact form](https://www.restcomm.com/contact/)) diff --git a/enablers/hss-client/docs/jdocbook-restcomm/pom.xml b/enablers/hss-client/docs/jdocbook-restcomm/pom.xml index 55e63e13a..fb010c1fd 100644 --- a/enablers/hss-client/docs/jdocbook-restcomm/pom.xml +++ b/enablers/hss-client/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-docs-jdocbook-restcomm diff --git a/enablers/hss-client/docs/pom.xml b/enablers/hss-client/docs/pom.xml index 656c02034..a09645689 100644 --- a/enablers/hss-client/docs/pom.xml +++ b/enablers/hss-client/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-docs diff --git a/enablers/hss-client/docs/sources-restcomm/pom.xml b/enablers/hss-client/docs/sources-restcomm/pom.xml index 51aec05bf..ec785ddde 100644 --- a/enablers/hss-client/docs/sources-restcomm/pom.xml +++ b/enablers/hss-client/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-docs-sources-restcomm diff --git a/enablers/hss-client/docs/sources/pom.xml b/enablers/hss-client/docs/sources/pom.xml index d0e2cda8c..882571039 100644 --- a/enablers/hss-client/docs/sources/pom.xml +++ b/enablers/hss-client/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-docs-sources diff --git a/enablers/hss-client/du/pom.xml b/enablers/hss-client/du/pom.xml index 99c992a92..d9daf6617 100755 --- a/enablers/hss-client/du/pom.xml +++ b/enablers/hss-client/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-DU diff --git a/enablers/hss-client/example/du/pom.xml b/enablers/hss-client/example/du/pom.xml index 713271283..f2e94fa13 100644 --- a/enablers/hss-client/example/du/pom.xml +++ b/enablers/hss-client/example/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-example - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-example-DU diff --git a/enablers/hss-client/example/pom.xml b/enablers/hss-client/example/pom.xml index 9d9b1e624..94f039239 100644 --- a/enablers/hss-client/example/pom.xml +++ b/enablers/hss-client/example/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-example diff --git a/enablers/hss-client/example/sbb/pom.xml b/enablers/hss-client/example/sbb/pom.xml index 8cb05a5ce..9a72c6776 100644 --- a/enablers/hss-client/example/sbb/pom.xml +++ b/enablers/hss-client/example/sbb/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client-example - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-example-sbb diff --git a/enablers/hss-client/pom.xml b/enablers/hss-client/pom.xml index a4ac5120b..88757be26 100755 --- a/enablers/hss-client/pom.xml +++ b/enablers/hss-client/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/enablers/hss-client/release/pom.xml b/enablers/hss-client/release/pom.xml index c4df8ebaf..5fa7aa15b 100755 --- a/enablers/hss-client/release/pom.xml +++ b/enablers/hss-client/release/pom.xml @@ -6,7 +6,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-release diff --git a/enablers/hss-client/sbb/pom.xml b/enablers/hss-client/sbb/pom.xml index 69eb1922c..450b2903b 100755 --- a/enablers/hss-client/sbb/pom.xml +++ b/enablers/hss-client/sbb/pom.xml @@ -4,7 +4,7 @@ org.mobicents.servers.jainslee.enablers hss-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT hss-client-sbb diff --git a/pom.xml b/pom.xml index 096b1063e..008d6bafc 100755 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.0.0-SNAPSHOT + 7.2.1-SNAPSHOT pom @@ -18,8 +18,13 @@ 4.0.2 2.9.147 - 1.7.1-123 - 1.7.1-123 + + 1.7.4-198 + 1.7.4-198 + 3.8.1 + 11 + 1.2.14 @@ -27,10 +32,28 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 + ${compiler.plugin.version} - 1.7 - 1.7 + ${compile.source} + ${compile.source} + ${compile.debug} + + --add-exportsjava.base/sun.net.util=ALL-UNNAMED + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + + deploy-to-sonatype + none + + + @@ -68,11 +91,17 @@ ${restcomm.jain.slee.version} - org.slf4j - slf4j-api - 1.7.21 - provided + org.slf4j + slf4j-api + 1.7.21 + provided + + + log4j + log4j + ${log4j.version} + @@ -92,6 +121,26 @@ + + release-wildfly + + resources/diameter-base + resources/diameter-sh-client + resources/diameter-sh-server + resources/diameter-cca + resources/diameter-gx + resources/diameter-cx-dx + resources/diameter-rf + resources/diameter-ro + resources/diameter-gq + resources/diameter-rx + resources/diameter-s6a + resources/diameter-s13 + resources/diameter-slh + resources/diameter-slg + enablers/hss-client + + diff --git a/resources/diameter-base/common/events/pom.xml b/resources/diameter-base/common/events/pom.xml index 0e241f160..b98cec3c5 100644 --- a/resources/diameter-base/common/events/pom.xml +++ b/resources/diameter-base/common/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-common-events @@ -32,5 +32,21 @@ jdiameter-impl ${restcomm.diameter.jdiameter.version} + + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.3 + + + javax.activation + activation + 1.1 + + + org.glassfish.jaxb + jaxb-runtime + 2.3.3 + diff --git a/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java b/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java index e16b5d817..06016abbf 100644 --- a/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java +++ b/resources/diameter-base/common/events/src/main/java/net/java/slee/resource/diameter/base/events/avp/DiameterIdentity.java @@ -47,7 +47,7 @@ */ public class DiameterIdentity implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -7248928425138452437L; private String identity; diff --git a/resources/diameter-base/common/library/pom.xml b/resources/diameter-base/common/library/pom.xml index 236570d1e..d18a540a9 100644 --- a/resources/diameter-base/common/library/pom.xml +++ b/resources/diameter-base/common/library/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-common-library diff --git a/resources/diameter-base/common/pom.xml b/resources/diameter-base/common/pom.xml index 7ae4254fc..e7ce9939f 100644 --- a/resources/diameter-base/common/pom.xml +++ b/resources/diameter-base/common/pom.xml @@ -8,7 +8,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-common diff --git a/resources/diameter-base/common/ra/pom.xml b/resources/diameter-base/common/ra/pom.xml index ff2ef5679..75f5f3e7f 100644 --- a/resources/diameter-base/common/ra/pom.xml +++ b/resources/diameter-base/common/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-common-ra diff --git a/resources/diameter-base/common/ratype/pom.xml b/resources/diameter-base/common/ratype/pom.xml index 2193bb622..c500165dd 100644 --- a/resources/diameter-base/common/ratype/pom.xml +++ b/resources/diameter-base/common/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-common-ratype diff --git a/resources/diameter-base/docs/jdocbook-restcomm/pom.xml b/resources/diameter-base/docs/jdocbook-restcomm/pom.xml index 526b21896..a49c6f4a8 100644 --- a/resources/diameter-base/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-base/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-docs-jdocbook-restcomm diff --git a/resources/diameter-base/docs/pom.xml b/resources/diameter-base/docs/pom.xml index f722bbe6e..643d9c4b2 100644 --- a/resources/diameter-base/docs/pom.xml +++ b/resources/diameter-base/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-docs diff --git a/resources/diameter-base/docs/sources-restcomm/pom.xml b/resources/diameter-base/docs/sources-restcomm/pom.xml index b9973b321..19713b64f 100644 --- a/resources/diameter-base/docs/sources-restcomm/pom.xml +++ b/resources/diameter-base/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-docs-sources-restcomm diff --git a/resources/diameter-base/docs/sources/pom.xml b/resources/diameter-base/docs/sources/pom.xml index a950c2d34..02b89d066 100644 --- a/resources/diameter-base/docs/sources/pom.xml +++ b/resources/diameter-base/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-docs-sources diff --git a/resources/diameter-base/du/pom.xml b/resources/diameter-base/du/pom.xml index 46d5387a7..3e97b8dce 100644 --- a/resources/diameter-base/du/pom.xml +++ b/resources/diameter-base/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-ra-DU diff --git a/resources/diameter-base/events/pom.xml b/resources/diameter-base/events/pom.xml index 5a73bbd1a..9e6590026 100644 --- a/resources/diameter-base/events/pom.xml +++ b/resources/diameter-base/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-events diff --git a/resources/diameter-base/pom.xml b/resources/diameter-base/pom.xml index 0167e9ee8..f6ac0f549 100644 --- a/resources/diameter-base/pom.xml +++ b/resources/diameter-base/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-base/ra/pom.xml b/resources/diameter-base/ra/pom.xml index 94639a885..0e1bb0d32 100644 --- a/resources/diameter-base/ra/pom.xml +++ b/resources/diameter-base/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-ra diff --git a/resources/diameter-base/ratype/pom.xml b/resources/diameter-base/ratype/pom.xml index 7ab638bda..72a8c5688 100644 --- a/resources/diameter-base/ratype/pom.xml +++ b/resources/diameter-base/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-ratype diff --git a/resources/diameter-base/release/pom.xml b/resources/diameter-base/release/pom.xml index f7a54e324..30358b92c 100644 --- a/resources/diameter-base/release/pom.xml +++ b/resources/diameter-base/release/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-ra-release diff --git a/resources/diameter-base/testsuite/pom.xml b/resources/diameter-base/testsuite/pom.xml index 0e3eafb01..81d1af3db 100644 --- a/resources/diameter-base/testsuite/pom.xml +++ b/resources/diameter-base/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-base - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-base-testsuite diff --git a/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java b/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java index 8c3ffb9ba..1d837886a 100644 --- a/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java +++ b/resources/diameter-base/testsuite/src/test/java/org/mobicents/slee/resource/diameter/base/tests/factories/AvpAssistant.java @@ -331,6 +331,7 @@ else if (methodName.startsWith("get")) { // System.out.println("Current message: \r\n" + snr); Object obtained = m.invoke(message); + if (obtained == null) continue; // System.out.println("Got value " + obtained.toString()); boolean passed = false; try { diff --git a/resources/diameter-cca/common/events/pom.xml b/resources/diameter-cca/common/events/pom.xml index 942c2f094..d32d9280b 100644 --- a/resources/diameter-cca/common/events/pom.xml +++ b/resources/diameter-cca/common/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-common-events diff --git a/resources/diameter-cca/common/library/pom.xml b/resources/diameter-cca/common/library/pom.xml index f9b33bd18..5998c19a3 100644 --- a/resources/diameter-cca/common/library/pom.xml +++ b/resources/diameter-cca/common/library/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-common-library diff --git a/resources/diameter-cca/common/pom.xml b/resources/diameter-cca/common/pom.xml index d9a3688b0..eb2d75835 100644 --- a/resources/diameter-cca/common/pom.xml +++ b/resources/diameter-cca/common/pom.xml @@ -8,7 +8,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-common diff --git a/resources/diameter-cca/common/ra/pom.xml b/resources/diameter-cca/common/ra/pom.xml index 928389b2b..0658c3638 100644 --- a/resources/diameter-cca/common/ra/pom.xml +++ b/resources/diameter-cca/common/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-common-ra diff --git a/resources/diameter-cca/common/ratype/pom.xml b/resources/diameter-cca/common/ratype/pom.xml index 0b0b15fcb..eaa045bae 100644 --- a/resources/diameter-cca/common/ratype/pom.xml +++ b/resources/diameter-cca/common/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-common-ratype diff --git a/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml b/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml index 4b06546fa..83d48c5da 100644 --- a/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-cca/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-docs-jdocbook-restcomm diff --git a/resources/diameter-cca/docs/pom.xml b/resources/diameter-cca/docs/pom.xml index b96dbf7dc..ae8f774b5 100644 --- a/resources/diameter-cca/docs/pom.xml +++ b/resources/diameter-cca/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-docs diff --git a/resources/diameter-cca/docs/sources-restcomm/pom.xml b/resources/diameter-cca/docs/sources-restcomm/pom.xml index a62d30cc9..d859e6308 100644 --- a/resources/diameter-cca/docs/sources-restcomm/pom.xml +++ b/resources/diameter-cca/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-docs-sources-restcomm diff --git a/resources/diameter-cca/docs/sources/pom.xml b/resources/diameter-cca/docs/sources/pom.xml index 7191a6a81..3c310b935 100644 --- a/resources/diameter-cca/docs/sources/pom.xml +++ b/resources/diameter-cca/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-docs-sources diff --git a/resources/diameter-cca/du/pom.xml b/resources/diameter-cca/du/pom.xml index 0f8b2ced1..fbb565f6f 100644 --- a/resources/diameter-cca/du/pom.xml +++ b/resources/diameter-cca/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-ra-DU diff --git a/resources/diameter-cca/events/pom.xml b/resources/diameter-cca/events/pom.xml index 19504b500..934e33394 100644 --- a/resources/diameter-cca/events/pom.xml +++ b/resources/diameter-cca/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-events diff --git a/resources/diameter-cca/pom.xml b/resources/diameter-cca/pom.xml index 41f34701b..f381ea260 100644 --- a/resources/diameter-cca/pom.xml +++ b/resources/diameter-cca/pom.xml @@ -5,7 +5,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-cca/ra/pom.xml b/resources/diameter-cca/ra/pom.xml index c7c20672b..2b70a20f1 100644 --- a/resources/diameter-cca/ra/pom.xml +++ b/resources/diameter-cca/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-ra diff --git a/resources/diameter-cca/ratype/pom.xml b/resources/diameter-cca/ratype/pom.xml index eccd73665..74cd2f650 100644 --- a/resources/diameter-cca/ratype/pom.xml +++ b/resources/diameter-cca/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-ratype diff --git a/resources/diameter-cca/release/pom.xml b/resources/diameter-cca/release/pom.xml index 2eacb39ee..19f1330d5 100644 --- a/resources/diameter-cca/release/pom.xml +++ b/resources/diameter-cca/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-ra-release diff --git a/resources/diameter-cca/testsuite/pom.xml b/resources/diameter-cca/testsuite/pom.xml index 96128a527..3b8e32c16 100644 --- a/resources/diameter-cca/testsuite/pom.xml +++ b/resources/diameter-cca/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cca - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cca-testsuite diff --git a/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml index 1eab9021b..247512812 100644 --- a/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-cx-dx/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-jdocbook-restcomm diff --git a/resources/diameter-cx-dx/docs/pom.xml b/resources/diameter-cx-dx/docs/pom.xml index e53eea87c..dd095f05a 100644 --- a/resources/diameter-cx-dx/docs/pom.xml +++ b/resources/diameter-cx-dx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs diff --git a/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml b/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml index 9ba7330fb..20dbb94e2 100644 --- a/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-cx-dx/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-sources-restcomm diff --git a/resources/diameter-cx-dx/docs/sources/pom.xml b/resources/diameter-cx-dx/docs/sources/pom.xml index d5e5308c6..743c936c0 100644 --- a/resources/diameter-cx-dx/docs/sources/pom.xml +++ b/resources/diameter-cx-dx/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-docs-sources diff --git a/resources/diameter-cx-dx/du/pom.xml b/resources/diameter-cx-dx/du/pom.xml index 6c9e8f489..e85dd59e3 100644 --- a/resources/diameter-cx-dx/du/pom.xml +++ b/resources/diameter-cx-dx/du/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra-DU diff --git a/resources/diameter-cx-dx/events/pom.xml b/resources/diameter-cx-dx/events/pom.xml index 68274d693..5e7119f0e 100644 --- a/resources/diameter-cx-dx/events/pom.xml +++ b/resources/diameter-cx-dx/events/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-events diff --git a/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java b/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java index 0d4c28f1e..fdc8274b4 100644 --- a/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java +++ b/resources/diameter-cx-dx/events/src/main/java/net/java/slee/resource/diameter/cxdx/events/avp/SessionPriority.java @@ -53,7 +53,7 @@ */ public class SessionPriority implements Serializable, Enumerated { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 6175897437829561030L; /** * Value indicating Priority 0 diff --git a/resources/diameter-cx-dx/pom.xml b/resources/diameter-cx-dx/pom.xml index 0a8b0979e..6fa94bb6f 100644 --- a/resources/diameter-cx-dx/pom.xml +++ b/resources/diameter-cx-dx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-cx-dx/ra/pom.xml b/resources/diameter-cx-dx/ra/pom.xml index d0dcc2d9e..2fada6b04 100644 --- a/resources/diameter-cx-dx/ra/pom.xml +++ b/resources/diameter-cx-dx/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra diff --git a/resources/diameter-cx-dx/ratype/pom.xml b/resources/diameter-cx-dx/ratype/pom.xml index a59b87f65..8388a99c2 100644 --- a/resources/diameter-cx-dx/ratype/pom.xml +++ b/resources/diameter-cx-dx/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ratype diff --git a/resources/diameter-cx-dx/release/pom.xml b/resources/diameter-cx-dx/release/pom.xml index 95ca7b09f..76a76ba81 100644 --- a/resources/diameter-cx-dx/release/pom.xml +++ b/resources/diameter-cx-dx/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-cx-dx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-cx-dx-ra-release diff --git a/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml b/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml index d1ecea9f1..fc3df58bd 100644 --- a/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-gq/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-docs-jdocbook-restcomm diff --git a/resources/diameter-gq/docs/pom.xml b/resources/diameter-gq/docs/pom.xml index 42968313e..37fda642a 100644 --- a/resources/diameter-gq/docs/pom.xml +++ b/resources/diameter-gq/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-docs diff --git a/resources/diameter-gq/docs/sources-restcomm/pom.xml b/resources/diameter-gq/docs/sources-restcomm/pom.xml index c08307de6..074bddaec 100644 --- a/resources/diameter-gq/docs/sources-restcomm/pom.xml +++ b/resources/diameter-gq/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-docs-sources-restcomm diff --git a/resources/diameter-gq/docs/sources/pom.xml b/resources/diameter-gq/docs/sources/pom.xml index bb5cb5191..474677938 100644 --- a/resources/diameter-gq/docs/sources/pom.xml +++ b/resources/diameter-gq/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-docs-sources diff --git a/resources/diameter-gq/du/pom.xml b/resources/diameter-gq/du/pom.xml index 48d2bfc36..cf831024d 100755 --- a/resources/diameter-gq/du/pom.xml +++ b/resources/diameter-gq/du/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-ra-DU diff --git a/resources/diameter-gq/events/pom.xml b/resources/diameter-gq/events/pom.xml index 541a9574a..b0b81438c 100755 --- a/resources/diameter-gq/events/pom.xml +++ b/resources/diameter-gq/events/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-events diff --git a/resources/diameter-gq/pom.xml b/resources/diameter-gq/pom.xml index 6214ded26..e1e3534ed 100755 --- a/resources/diameter-gq/pom.xml +++ b/resources/diameter-gq/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-gq/ra/pom.xml b/resources/diameter-gq/ra/pom.xml index fb6521856..8ae4d1b0a 100755 --- a/resources/diameter-gq/ra/pom.xml +++ b/resources/diameter-gq/ra/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-ra diff --git a/resources/diameter-gq/ratype/pom.xml b/resources/diameter-gq/ratype/pom.xml index 7ae2ce2df..4fb7e474f 100755 --- a/resources/diameter-gq/ratype/pom.xml +++ b/resources/diameter-gq/ratype/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-ratype diff --git a/resources/diameter-gq/release/pom.xml b/resources/diameter-gq/release/pom.xml index fd7b38e84..fa4780d45 100755 --- a/resources/diameter-gq/release/pom.xml +++ b/resources/diameter-gq/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-ra-release diff --git a/resources/diameter-gq/testsuite/pom.xml b/resources/diameter-gq/testsuite/pom.xml index b475d0eff..cbe0391f5 100644 --- a/resources/diameter-gq/testsuite/pom.xml +++ b/resources/diameter-gq/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gq - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gq-testsuite diff --git a/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml index 3e7c55af7..25ce82e34 100644 --- a/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-gx/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-docs-jdocbook-restcomm diff --git a/resources/diameter-gx/docs/pom.xml b/resources/diameter-gx/docs/pom.xml index 877e130c2..11b684800 100644 --- a/resources/diameter-gx/docs/pom.xml +++ b/resources/diameter-gx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-docs diff --git a/resources/diameter-gx/docs/sources-restcomm/pom.xml b/resources/diameter-gx/docs/sources-restcomm/pom.xml index a8878bb8a..f8700bc0e 100644 --- a/resources/diameter-gx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-gx/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-docs-sources-restcomm diff --git a/resources/diameter-gx/docs/sources/pom.xml b/resources/diameter-gx/docs/sources/pom.xml index d277019d9..a38ea0571 100644 --- a/resources/diameter-gx/docs/sources/pom.xml +++ b/resources/diameter-gx/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-docs-sources diff --git a/resources/diameter-gx/du/pom.xml b/resources/diameter-gx/du/pom.xml index d410a0107..021e759f5 100644 --- a/resources/diameter-gx/du/pom.xml +++ b/resources/diameter-gx/du/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-ra-DU diff --git a/resources/diameter-gx/events/pom.xml b/resources/diameter-gx/events/pom.xml index bbdffee7d..7d423fff7 100644 --- a/resources/diameter-gx/events/pom.xml +++ b/resources/diameter-gx/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-events diff --git a/resources/diameter-gx/pom.xml b/resources/diameter-gx/pom.xml index 2ac8d89cf..3e43dbae8 100644 --- a/resources/diameter-gx/pom.xml +++ b/resources/diameter-gx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-gx/ra/pom.xml b/resources/diameter-gx/ra/pom.xml index 2befe09b7..5a5fc1eb8 100644 --- a/resources/diameter-gx/ra/pom.xml +++ b/resources/diameter-gx/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-ra diff --git a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java index 193de208e..594de09c8 100644 --- a/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java +++ b/resources/diameter-gx/ra/src/main/java/org/mobicents/slee/resource/diameter/gx/DiameterGxResourceAdaptor.java @@ -115,7 +115,7 @@ */ public class DiameterGxResourceAdaptor implements ResourceAdaptor, DiameterListener, DiameterRAInterface { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -1142455412819771222L; // Config Properties Names --------------------------------------------- private static final String AUTH_APPLICATION_IDS = "authApplicationIds"; diff --git a/resources/diameter-gx/ratype/pom.xml b/resources/diameter-gx/ratype/pom.xml index 9428368bb..947fa6d79 100644 --- a/resources/diameter-gx/ratype/pom.xml +++ b/resources/diameter-gx/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-ratype diff --git a/resources/diameter-gx/release/pom.xml b/resources/diameter-gx/release/pom.xml index 80ed38957..aa33b21c1 100644 --- a/resources/diameter-gx/release/pom.xml +++ b/resources/diameter-gx/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-ra-release diff --git a/resources/diameter-gx/testsuite/pom.xml b/resources/diameter-gx/testsuite/pom.xml index df3e93d7f..665ea1aa0 100644 --- a/resources/diameter-gx/testsuite/pom.xml +++ b/resources/diameter-gx/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-gx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-gx-testsuite diff --git a/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml b/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml index d4d794af1..483c3df78 100644 --- a/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-rf/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-docs-jdocbook-restcomm diff --git a/resources/diameter-rf/docs/pom.xml b/resources/diameter-rf/docs/pom.xml index 7df9ac447..f908fb2c6 100644 --- a/resources/diameter-rf/docs/pom.xml +++ b/resources/diameter-rf/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-docs diff --git a/resources/diameter-rf/docs/sources-restcomm/pom.xml b/resources/diameter-rf/docs/sources-restcomm/pom.xml index 5ed270b82..82320486d 100644 --- a/resources/diameter-rf/docs/sources-restcomm/pom.xml +++ b/resources/diameter-rf/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-docs-sources-restcomm diff --git a/resources/diameter-rf/docs/sources/pom.xml b/resources/diameter-rf/docs/sources/pom.xml index 08ada487f..282e90e90 100644 --- a/resources/diameter-rf/docs/sources/pom.xml +++ b/resources/diameter-rf/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-docs-sources diff --git a/resources/diameter-rf/du/pom.xml b/resources/diameter-rf/du/pom.xml index 8c87234e3..86f5a779d 100644 --- a/resources/diameter-rf/du/pom.xml +++ b/resources/diameter-rf/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-ra-DU diff --git a/resources/diameter-rf/events/pom.xml b/resources/diameter-rf/events/pom.xml index 238808b75..f25dc1ac6 100644 --- a/resources/diameter-rf/events/pom.xml +++ b/resources/diameter-rf/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-events diff --git a/resources/diameter-rf/pom.xml b/resources/diameter-rf/pom.xml index b967e3ed2..73193ba8f 100644 --- a/resources/diameter-rf/pom.xml +++ b/resources/diameter-rf/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-rf/ra/pom.xml b/resources/diameter-rf/ra/pom.xml index 31597a544..37a22a163 100644 --- a/resources/diameter-rf/ra/pom.xml +++ b/resources/diameter-rf/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-ra diff --git a/resources/diameter-rf/ratype/pom.xml b/resources/diameter-rf/ratype/pom.xml index 80237d02f..16d8dd327 100644 --- a/resources/diameter-rf/ratype/pom.xml +++ b/resources/diameter-rf/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-ratype diff --git a/resources/diameter-rf/release/pom.xml b/resources/diameter-rf/release/pom.xml index 8fc73f3e8..eaee88c76 100644 --- a/resources/diameter-rf/release/pom.xml +++ b/resources/diameter-rf/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-ra-release diff --git a/resources/diameter-rf/testsuite/pom.xml b/resources/diameter-rf/testsuite/pom.xml index 688ecf647..7648ac7af 100644 --- a/resources/diameter-rf/testsuite/pom.xml +++ b/resources/diameter-rf/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rf - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rf-testsuite diff --git a/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml b/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml index 18d7437ee..0274525da 100644 --- a/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-ro/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-docs-jdocbook-restcomm diff --git a/resources/diameter-ro/docs/pom.xml b/resources/diameter-ro/docs/pom.xml index dc40692e6..3752d8d5a 100644 --- a/resources/diameter-ro/docs/pom.xml +++ b/resources/diameter-ro/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-docs diff --git a/resources/diameter-ro/docs/sources-restcomm/pom.xml b/resources/diameter-ro/docs/sources-restcomm/pom.xml index 9b43723bf..83bdffbc3 100644 --- a/resources/diameter-ro/docs/sources-restcomm/pom.xml +++ b/resources/diameter-ro/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-docs-sources-restcomm diff --git a/resources/diameter-ro/docs/sources/pom.xml b/resources/diameter-ro/docs/sources/pom.xml index 5855def78..6cb581cfe 100644 --- a/resources/diameter-ro/docs/sources/pom.xml +++ b/resources/diameter-ro/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-docs-sources diff --git a/resources/diameter-ro/du/pom.xml b/resources/diameter-ro/du/pom.xml index 68e05b15e..b97b24cf9 100644 --- a/resources/diameter-ro/du/pom.xml +++ b/resources/diameter-ro/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-ra-DU diff --git a/resources/diameter-ro/events/pom.xml b/resources/diameter-ro/events/pom.xml index 4321c69d2..3d591b2aa 100644 --- a/resources/diameter-ro/events/pom.xml +++ b/resources/diameter-ro/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-events diff --git a/resources/diameter-ro/pom.xml b/resources/diameter-ro/pom.xml index 85e8f14bd..3db77b190 100644 --- a/resources/diameter-ro/pom.xml +++ b/resources/diameter-ro/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-ro/ra/pom.xml b/resources/diameter-ro/ra/pom.xml index 6a78e28cf..c369f5be3 100644 --- a/resources/diameter-ro/ra/pom.xml +++ b/resources/diameter-ro/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-ra diff --git a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java index 191389953..4f2abccad 100644 --- a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java +++ b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoClientSessionActivityImpl.java @@ -54,7 +54,7 @@ */ public class RoClientSessionActivityImpl extends RoSessionActivityImpl implements RoClientSessionActivity, StateChangeListener { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 6391181777305378777L; protected transient ClientRoSession session; diff --git a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java index a1ede650f..1af31f343 100644 --- a/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java +++ b/resources/diameter-ro/ra/src/main/java/org/mobicents/slee/resource/diameter/ro/RoSessionActivityImpl.java @@ -45,13 +45,13 @@ */ public abstract class RoSessionActivityImpl extends DiameterActivityImpl implements RoSessionActivity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 5037967180962414949L; protected transient RoMessageFactory roMessageFactory; /** - * @param roMessageFactory - * @param roAvpFactory + * @param messageFactory + * @param avpFactory * @param session * @param raEventListener * @param destinationHost diff --git a/resources/diameter-ro/ratype/pom.xml b/resources/diameter-ro/ratype/pom.xml index 3893f3e79..81e6d9346 100644 --- a/resources/diameter-ro/ratype/pom.xml +++ b/resources/diameter-ro/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-ratype diff --git a/resources/diameter-ro/release/pom.xml b/resources/diameter-ro/release/pom.xml index 7483fff72..2fc6cc899 100644 --- a/resources/diameter-ro/release/pom.xml +++ b/resources/diameter-ro/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-ra-release diff --git a/resources/diameter-ro/testsuite/pom.xml b/resources/diameter-ro/testsuite/pom.xml index 5b2443bfe..3d67aac11 100644 --- a/resources/diameter-ro/testsuite/pom.xml +++ b/resources/diameter-ro/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-ro - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-ro-testsuite diff --git a/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml b/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml index 92c750a97..3f14ea258 100644 --- a/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-rx/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-docs-jdocbook-restcomm diff --git a/resources/diameter-rx/docs/pom.xml b/resources/diameter-rx/docs/pom.xml index 577504578..95ad78856 100644 --- a/resources/diameter-rx/docs/pom.xml +++ b/resources/diameter-rx/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-docs diff --git a/resources/diameter-rx/docs/sources-restcomm/pom.xml b/resources/diameter-rx/docs/sources-restcomm/pom.xml index 91dd57f5c..acf423232 100644 --- a/resources/diameter-rx/docs/sources-restcomm/pom.xml +++ b/resources/diameter-rx/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-docs-sources-restcomm diff --git a/resources/diameter-rx/docs/sources/pom.xml b/resources/diameter-rx/docs/sources/pom.xml index 9ce062b62..9af6556c9 100644 --- a/resources/diameter-rx/docs/sources/pom.xml +++ b/resources/diameter-rx/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-docs-sources diff --git a/resources/diameter-rx/du/pom.xml b/resources/diameter-rx/du/pom.xml index baedb8cf9..fa479dbe6 100644 --- a/resources/diameter-rx/du/pom.xml +++ b/resources/diameter-rx/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-ra-DU diff --git a/resources/diameter-rx/events/pom.xml b/resources/diameter-rx/events/pom.xml index 0df7e6bd9..e59238c0f 100644 --- a/resources/diameter-rx/events/pom.xml +++ b/resources/diameter-rx/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-events diff --git a/resources/diameter-rx/pom.xml b/resources/diameter-rx/pom.xml index 9e236d437..c475db35a 100644 --- a/resources/diameter-rx/pom.xml +++ b/resources/diameter-rx/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-rx/ra/pom.xml b/resources/diameter-rx/ra/pom.xml index 116558cb2..d31bf9941 100644 --- a/resources/diameter-rx/ra/pom.xml +++ b/resources/diameter-rx/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-ra diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java index 55652693e..86c4dcf71 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxClientSessionActivityImpl.java @@ -58,17 +58,18 @@ */ public class RxClientSessionActivityImpl extends RxSessionActivityImpl implements RxClientSessionActivity, StateChangeListener { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 6391181777305378777L; protected transient ClientRxSession session; /** * - * @param rxMessageFactory - * @param rxAvpFactory + * @param messageFactory + * @param avpFactory * @param session * @param destinationHost * @param destinationRealm + * @param endpoint * @param stack */ public RxClientSessionActivityImpl(final RxMessageFactory rxMessageFactory, final RxAvpFactory rxAvpFactory, final ClientRxSession session, diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java index 9015beebb..dd6f757b3 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxServerSessionActivityImpl.java @@ -61,7 +61,7 @@ */ public class RxServerSessionActivityImpl extends RxSessionActivityImpl implements RxServerSessionActivity, StateChangeListener { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 5230054776594429948L; private static Logger logger = Logger.getLogger(RxServerSessionActivityImpl.class); diff --git a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java index 175dc0bbb..311953f29 100644 --- a/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java +++ b/resources/diameter-rx/ra/src/main/java/org/mobicents/slee/resource/diameter/rx/RxSessionActivityImpl.java @@ -58,8 +58,8 @@ public abstract class RxSessionActivityImpl extends DiameterActivityImpl impleme protected transient RxMessageFactory rxMessageFactory; /** - * @param rxMessageFactory - * @param rxAvpFactory + * @param messageFactory + * @param avpFactory * @param session * @param raEventListener * @param destinationHost diff --git a/resources/diameter-rx/ratype/pom.xml b/resources/diameter-rx/ratype/pom.xml index 79c3c3858..2d19a7d1d 100644 --- a/resources/diameter-rx/ratype/pom.xml +++ b/resources/diameter-rx/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-ratype diff --git a/resources/diameter-rx/release/pom.xml b/resources/diameter-rx/release/pom.xml index 58a830ba0..cd765ed4b 100644 --- a/resources/diameter-rx/release/pom.xml +++ b/resources/diameter-rx/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-ra-release diff --git a/resources/diameter-rx/testsuite/pom.xml b/resources/diameter-rx/testsuite/pom.xml index d6c849d59..03f55ffa0 100644 --- a/resources/diameter-rx/testsuite/pom.xml +++ b/resources/diameter-rx/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-rx - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-rx-testsuite diff --git a/resources/diameter-s13/du/pom.xml b/resources/diameter-s13/du/pom.xml index f6794d0a9..d6bf77a44 100644 --- a/resources/diameter-s13/du/pom.xml +++ b/resources/diameter-s13/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s13-ra-DU diff --git a/resources/diameter-s13/events/pom.xml b/resources/diameter-s13/events/pom.xml index ca77caa19..b4074c921 100644 --- a/resources/diameter-s13/events/pom.xml +++ b/resources/diameter-s13/events/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s13-events diff --git a/resources/diameter-s13/pom.xml b/resources/diameter-s13/pom.xml index f8e54edfa..d9e556888 100644 --- a/resources/diameter-s13/pom.xml +++ b/resources/diameter-s13/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-s13/ra/pom.xml b/resources/diameter-s13/ra/pom.xml index 9c69296c9..4b826325d 100644 --- a/resources/diameter-s13/ra/pom.xml +++ b/resources/diameter-s13/ra/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s13-ra diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java index e4f0efc6f..91faa0a40 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ClientSessionImpl.java @@ -55,7 +55,7 @@ */ public class S13ClientSessionImpl extends S13SessionImpl implements S13ClientSessionActivity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 7518916596996009148L; protected transient ClientS13Session appSession; public S13ClientSessionImpl(S13MessageFactory s13MessageFactory, S13AVPFactory s13AvpFactory, ClientS13Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java index a58ec813b..9b47071f6 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13ServerSessionImpl.java @@ -55,7 +55,7 @@ */ public class S13ServerSessionImpl extends S13SessionImpl implements S13ServerSessionActivity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 7518916596996009148L; protected transient ServerS13Session appSession; public S13ServerSessionImpl(S13MessageFactory s13MessageFactory, S13AVPFactory s13AvpFactory, ServerS13Session session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { diff --git a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java index abe747f19..c74b1e503 100644 --- a/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java +++ b/resources/diameter-s13/ra/src/main/java/org/mobicents/slee/resource/diameter/s13/S13SessionImpl.java @@ -50,7 +50,7 @@ */ public abstract class S13SessionImpl extends DiameterActivityImpl implements S13SessionActivity, StateChangeListener{ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 4374137032596394588L; protected boolean terminated = false; diff --git a/resources/diameter-s13/ratype/pom.xml b/resources/diameter-s13/ratype/pom.xml index 2d63a000f..1832fd5c0 100644 --- a/resources/diameter-s13/ratype/pom.xml +++ b/resources/diameter-s13/ratype/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s13-ratype diff --git a/resources/diameter-s13/release/pom.xml b/resources/diameter-s13/release/pom.xml index efa12240f..e06e479f7 100644 --- a/resources/diameter-s13/release/pom.xml +++ b/resources/diameter-s13/release/pom.xml @@ -5,11 +5,11 @@ org.mobicents.resources restcomm-slee-ra-diameter-s13 - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s13-ra-release - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT Restcomm :: Diameter Resources :: ${project.artifactId} diff --git a/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml b/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml index b623feccb..779f67d95 100644 --- a/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-s6a/docs/jdocbook-restcomm/pom.xml @@ -3,7 +3,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-jdocbook-restcomm diff --git a/resources/diameter-s6a/docs/pom.xml b/resources/diameter-s6a/docs/pom.xml index 61fe5a8f8..f1b468843 100644 --- a/resources/diameter-s6a/docs/pom.xml +++ b/resources/diameter-s6a/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-docs diff --git a/resources/diameter-s6a/docs/sources-restcomm/pom.xml b/resources/diameter-s6a/docs/sources-restcomm/pom.xml index 1b15042b4..153a98b31 100644 --- a/resources/diameter-s6a/docs/sources-restcomm/pom.xml +++ b/resources/diameter-s6a/docs/sources-restcomm/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-sources-restcomm diff --git a/resources/diameter-s6a/docs/sources/pom.xml b/resources/diameter-s6a/docs/sources/pom.xml index 51c576b88..a4a285107 100644 --- a/resources/diameter-s6a/docs/sources/pom.xml +++ b/resources/diameter-s6a/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-docs-sources diff --git a/resources/diameter-s6a/du/pom.xml b/resources/diameter-s6a/du/pom.xml index ce4574223..c83b7a666 100644 --- a/resources/diameter-s6a/du/pom.xml +++ b/resources/diameter-s6a/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-ra-DU diff --git a/resources/diameter-s6a/events/pom.xml b/resources/diameter-s6a/events/pom.xml index da4de5081..8363360e6 100644 --- a/resources/diameter-s6a/events/pom.xml +++ b/resources/diameter-s6a/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-events diff --git a/resources/diameter-s6a/pom.xml b/resources/diameter-s6a/pom.xml index 66ddd9331..c81e301a5 100644 --- a/resources/diameter-s6a/pom.xml +++ b/resources/diameter-s6a/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-s6a/ra/pom.xml b/resources/diameter-s6a/ra/pom.xml index f675a163e..693e14111 100644 --- a/resources/diameter-s6a/ra/pom.xml +++ b/resources/diameter-s6a/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-ra diff --git a/resources/diameter-s6a/ra/src/main/java/org/mobicents/slee/resource/diameter/s6a/S6aServerSessionImpl.java b/resources/diameter-s6a/ra/src/main/java/org/mobicents/slee/resource/diameter/s6a/S6aServerSessionImpl.java index 3cd21cfe3..eff3ec817 100644 --- a/resources/diameter-s6a/ra/src/main/java/org/mobicents/slee/resource/diameter/s6a/S6aServerSessionImpl.java +++ b/resources/diameter-s6a/ra/src/main/java/org/mobicents/slee/resource/diameter/s6a/S6aServerSessionImpl.java @@ -71,7 +71,7 @@ */ public class S6aServerSessionImpl extends S6aSessionImpl implements S6aServerSessionActivity { - private static final long serialVersionUID = 7518916596996009148L; + private static final long serialVersionUID = 1L; protected transient ServerS6aSession appSession; public S6aServerSessionImpl(S6aMessageFactory s6aMessageFactory, S6aAVPFactory s6aAvpFactory, ServerS6aSession session, EventListener raEventListener, DiameterIdentity destinationHost, DiameterIdentity destinationRealm, Stack stack) { diff --git a/resources/diameter-s6a/ratype/pom.xml b/resources/diameter-s6a/ratype/pom.xml index a32e64fce..884297f9d 100644 --- a/resources/diameter-s6a/ratype/pom.xml +++ b/resources/diameter-s6a/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-ratype diff --git a/resources/diameter-s6a/release/pom.xml b/resources/diameter-s6a/release/pom.xml index ca1fdff20..7859fba45 100644 --- a/resources/diameter-s6a/release/pom.xml +++ b/resources/diameter-s6a/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-s6a - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-s6a-ra-release diff --git a/resources/diameter-sh-client/common/events/pom.xml b/resources/diameter-sh-client/common/events/pom.xml index 9501e4436..14de4c91d 100644 --- a/resources/diameter-sh-client/common/events/pom.xml +++ b/resources/diameter-sh-client/common/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-common-events diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/CurrentLocationType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/CurrentLocationType.java index 770c31c91..0e0cf3eb4 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/CurrentLocationType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/CurrentLocationType.java @@ -47,7 +47,7 @@ public class CurrentLocationType implements Serializable, Enumerated { /** * */ - private static final long serialVersionUID = 1583473527497727782L; + private static final long serialVersionUID = 1L; public static final int _DO_NOT_NEED_INITIATE_ACTIVE_LOCATION_RETRIEVAL = 0; public static final int _INITIATE_ACTIVE_LOCATION_RETRIEVAL = 1; diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/IdentitySetType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/IdentitySetType.java index ad7e863d2..7e8d541b3 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/IdentitySetType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/IdentitySetType.java @@ -44,7 +44,7 @@ */ public class IdentitySetType implements Serializable, Enumerated { - private static final long serialVersionUID = -1735412334098260950L; + private static final long serialVersionUID = 1L; /** * Int value equal in diameter message - it indicates IMS identities - All - see TS29.328 for description diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/OneTimeNotificationType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/OneTimeNotificationType.java index 7afc1e9e3..6325dd52c 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/OneTimeNotificationType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/OneTimeNotificationType.java @@ -43,7 +43,7 @@ */ public class OneTimeNotificationType implements Serializable, Enumerated { - private static final long serialVersionUID = 8726237939719241849L; + private static final long serialVersionUID = 1L; public static final int _ONE_TIME_NOTIFICATION_REQUESTED = 0; diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SendDataIndicationType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SendDataIndicationType.java index 8211f4f09..03b16ceb2 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SendDataIndicationType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SendDataIndicationType.java @@ -47,7 +47,7 @@ public class SendDataIndicationType implements Serializable, Enumerated { /** * */ - private static final long serialVersionUID = 220559116111005191L; + private static final long serialVersionUID = 1L; /** * Value indicating that user data has not been requested by sender */ diff --git a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SessionPriorityType.java b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SessionPriorityType.java index 08cd06255..ae358bd04 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SessionPriorityType.java +++ b/resources/diameter-sh-client/common/events/src/main/java/net/java/slee/resource/diameter/sh/events/avp/SessionPriorityType.java @@ -53,7 +53,7 @@ */ public class SessionPriorityType implements Serializable, Enumerated { - private static final long serialVersionUID = 6175897437829561030L; + private static final long serialVersionUID = 1L; /** * Value indicating Priority 0 diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java index 870b2da39..47c3d62a4 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/ProfileUpdateRequestImpl.java @@ -100,7 +100,7 @@ */ public class ProfileUpdateRequestImpl extends DiameterShMessageImpl implements ProfileUpdateRequest { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -5829214729454907100L; private static JAXBContext jaxbContext = initJAXBContext(); private static UserDataObjectFactory udof = new UserDataObjectFactoryImpl(new ObjectFactory()); diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java index 81c20d592..691705812 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/PushNotificationAnswerImpl.java @@ -40,7 +40,7 @@ */ public class PushNotificationAnswerImpl extends DiameterShMessageImpl implements PushNotificationAnswer { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 5893646835644420572L; /** * diff --git a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java index 40a44ff31..873c8966b 100644 --- a/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java +++ b/resources/diameter-sh-client/common/events/src/main/java/org/mobicents/slee/resource/diameter/sh/events/SubscribeNotificationsAnswerImpl.java @@ -56,7 +56,7 @@ */ public class SubscribeNotificationsAnswerImpl extends DiameterShMessageImpl implements SubscribeNotificationsAnswer { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -66848235143082970L; private static JAXBContext jaxbContext = initJAXBContext(); private static UserDataObjectFactory udof = new UserDataObjectFactoryImpl(new ObjectFactory()); diff --git a/resources/diameter-sh-client/common/library/pom.xml b/resources/diameter-sh-client/common/library/pom.xml index 310e17150..9446dcc3b 100644 --- a/resources/diameter-sh-client/common/library/pom.xml +++ b/resources/diameter-sh-client/common/library/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-common-library diff --git a/resources/diameter-sh-client/common/pom.xml b/resources/diameter-sh-client/common/pom.xml index 7be1f182a..41cb72807 100644 --- a/resources/diameter-sh-client/common/pom.xml +++ b/resources/diameter-sh-client/common/pom.xml @@ -8,7 +8,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-common diff --git a/resources/diameter-sh-client/common/ra/pom.xml b/resources/diameter-sh-client/common/ra/pom.xml index 239065f54..05c4be064 100644 --- a/resources/diameter-sh-client/common/ra/pom.xml +++ b/resources/diameter-sh-client/common/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-common-ra diff --git a/resources/diameter-sh-client/common/ratype/pom.xml b/resources/diameter-sh-client/common/ratype/pom.xml index e1507b823..748ae12c1 100644 --- a/resources/diameter-sh-client/common/ratype/pom.xml +++ b/resources/diameter-sh-client/common/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-common - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-common-ratype diff --git a/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml b/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml index 7ecc75924..a7c16505d 100644 --- a/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-sh-client/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-jdocbook-restcomm diff --git a/resources/diameter-sh-client/docs/pom.xml b/resources/diameter-sh-client/docs/pom.xml index c1dd54ec5..3cf40ea91 100644 --- a/resources/diameter-sh-client/docs/pom.xml +++ b/resources/diameter-sh-client/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs diff --git a/resources/diameter-sh-client/docs/sources-restcomm/pom.xml b/resources/diameter-sh-client/docs/sources-restcomm/pom.xml index 032eeb115..4cf7c2275 100644 --- a/resources/diameter-sh-client/docs/sources-restcomm/pom.xml +++ b/resources/diameter-sh-client/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-sources-restcomm diff --git a/resources/diameter-sh-client/docs/sources/pom.xml b/resources/diameter-sh-client/docs/sources/pom.xml index 50ead8b7d..56c17641f 100644 --- a/resources/diameter-sh-client/docs/sources/pom.xml +++ b/resources/diameter-sh-client/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-docs-sources diff --git a/resources/diameter-sh-client/du/pom.xml b/resources/diameter-sh-client/du/pom.xml index 5af41d754..556e2a4f9 100644 --- a/resources/diameter-sh-client/du/pom.xml +++ b/resources/diameter-sh-client/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra-DU diff --git a/resources/diameter-sh-client/events/pom.xml b/resources/diameter-sh-client/events/pom.xml index a537188a2..3c2bc2bf7 100644 --- a/resources/diameter-sh-client/events/pom.xml +++ b/resources/diameter-sh-client/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-events diff --git a/resources/diameter-sh-client/pom.xml b/resources/diameter-sh-client/pom.xml index 3ef58d254..97218429c 100644 --- a/resources/diameter-sh-client/pom.xml +++ b/resources/diameter-sh-client/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-sh-client/ra/pom.xml b/resources/diameter-sh-client/ra/pom.xml index 6abed062f..daec798f2 100644 --- a/resources/diameter-sh-client/ra/pom.xml +++ b/resources/diameter-sh-client/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra diff --git a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientActivityImpl.java b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientActivityImpl.java index 2f29a9051..796853027 100644 --- a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientActivityImpl.java +++ b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientActivityImpl.java @@ -56,7 +56,7 @@ */ public class ShClientActivityImpl extends DiameterActivityImpl implements ShClientActivity , StateChangeListener { - private static final long serialVersionUID = -1182214629020823688L; + private static final long serialVersionUID = 1L; protected transient ClientShSession clientSession = null; protected transient DiameterShAvpFactory shAvpFactory = null; diff --git a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientSubscriptionActivityImpl.java b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientSubscriptionActivityImpl.java index 3dadce10d..d9b364015 100644 --- a/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientSubscriptionActivityImpl.java +++ b/resources/diameter-sh-client/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/client/ShClientSubscriptionActivityImpl.java @@ -66,7 +66,7 @@ */ public class ShClientSubscriptionActivityImpl extends DiameterActivityImpl implements ShClientSubscriptionActivity, StateChangeListener { - private static final long serialVersionUID = -6702340517032186782L; + private static final long serialVersionUID = 1L; protected transient ClientShSession clientSession = null; protected transient DiameterShAvpFactory shAvpFactory = null; diff --git a/resources/diameter-sh-client/ratype/pom.xml b/resources/diameter-sh-client/ratype/pom.xml index fc656ffd9..9f6c944cd 100644 --- a/resources/diameter-sh-client/ratype/pom.xml +++ b/resources/diameter-sh-client/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-ratype diff --git a/resources/diameter-sh-client/release/pom.xml b/resources/diameter-sh-client/release/pom.xml index 6b5cfe04a..f953910ce 100644 --- a/resources/diameter-sh-client/release/pom.xml +++ b/resources/diameter-sh-client/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-ra-release diff --git a/resources/diameter-sh-client/testsuite/pom.xml b/resources/diameter-sh-client/testsuite/pom.xml index 9c584fc41..7dbb29eba 100644 --- a/resources/diameter-sh-client/testsuite/pom.xml +++ b/resources/diameter-sh-client/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-client - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-client-testsuite diff --git a/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml b/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml index 31ece27dd..efabcc784 100644 --- a/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-sh-server/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-jdocbook-restcomm diff --git a/resources/diameter-sh-server/docs/pom.xml b/resources/diameter-sh-server/docs/pom.xml index 7f9501671..a2277d134 100644 --- a/resources/diameter-sh-server/docs/pom.xml +++ b/resources/diameter-sh-server/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs diff --git a/resources/diameter-sh-server/docs/sources-restcomm/pom.xml b/resources/diameter-sh-server/docs/sources-restcomm/pom.xml index 1ebc5b1e9..74bbe6da0 100644 --- a/resources/diameter-sh-server/docs/sources-restcomm/pom.xml +++ b/resources/diameter-sh-server/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-sources-restcomm diff --git a/resources/diameter-sh-server/docs/sources/pom.xml b/resources/diameter-sh-server/docs/sources/pom.xml index 24af36a48..b5a362329 100644 --- a/resources/diameter-sh-server/docs/sources/pom.xml +++ b/resources/diameter-sh-server/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-docs-sources diff --git a/resources/diameter-sh-server/du/pom.xml b/resources/diameter-sh-server/du/pom.xml index fabcb1c7d..feeb113b1 100644 --- a/resources/diameter-sh-server/du/pom.xml +++ b/resources/diameter-sh-server/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra-DU diff --git a/resources/diameter-sh-server/events/pom.xml b/resources/diameter-sh-server/events/pom.xml index 7037094c8..714ddb718 100644 --- a/resources/diameter-sh-server/events/pom.xml +++ b/resources/diameter-sh-server/events/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-events diff --git a/resources/diameter-sh-server/pom.xml b/resources/diameter-sh-server/pom.xml index e3557c44f..2d24a1c44 100644 --- a/resources/diameter-sh-server/pom.xml +++ b/resources/diameter-sh-server/pom.xml @@ -8,7 +8,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-sh-server/ra/pom.xml b/resources/diameter-sh-server/ra/pom.xml index 5438b755a..9f6b2a6c6 100644 --- a/resources/diameter-sh-server/ra/pom.xml +++ b/resources/diameter-sh-server/ra/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra diff --git a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java index 284cf6316..25855c1c6 100644 --- a/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java +++ b/resources/diameter-sh-server/ra/src/main/java/org/mobicents/slee/resource/diameter/sh/server/ShServerActivityImpl.java @@ -69,7 +69,7 @@ */ public class ShServerActivityImpl extends DiameterActivityImpl implements ShServerActivity, StateChangeListener { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -5297270149541413224L; protected transient ServerShSession serverSession = null; diff --git a/resources/diameter-sh-server/ratype/pom.xml b/resources/diameter-sh-server/ratype/pom.xml index beb7d75fa..8c990f8d6 100644 --- a/resources/diameter-sh-server/ratype/pom.xml +++ b/resources/diameter-sh-server/ratype/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-ratype diff --git a/resources/diameter-sh-server/release/pom.xml b/resources/diameter-sh-server/release/pom.xml index ac827c25f..a43c2d832 100644 --- a/resources/diameter-sh-server/release/pom.xml +++ b/resources/diameter-sh-server/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-ra-release diff --git a/resources/diameter-sh-server/testsuite/pom.xml b/resources/diameter-sh-server/testsuite/pom.xml index 47375e219..44ca542c3 100644 --- a/resources/diameter-sh-server/testsuite/pom.xml +++ b/resources/diameter-sh-server/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-sh-server - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-sh-server-testsuite diff --git a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml index 49e6fe923..9d95cc63c 100644 --- a/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slg/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-docs-jdocbook-restcomm diff --git a/resources/diameter-slg/docs/pom.xml b/resources/diameter-slg/docs/pom.xml index 15674e140..8e14e359f 100644 --- a/resources/diameter-slg/docs/pom.xml +++ b/resources/diameter-slg/docs/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-docs diff --git a/resources/diameter-slg/docs/sources-restcomm/pom.xml b/resources/diameter-slg/docs/sources-restcomm/pom.xml index a4ef913d5..aa5d28960 100644 --- a/resources/diameter-slg/docs/sources-restcomm/pom.xml +++ b/resources/diameter-slg/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-docs-sources-restcomm diff --git a/resources/diameter-slg/docs/sources/pom.xml b/resources/diameter-slg/docs/sources/pom.xml index bcfe73d0e..a877a7fc5 100644 --- a/resources/diameter-slg/docs/sources/pom.xml +++ b/resources/diameter-slg/docs/sources/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-docs-sources diff --git a/resources/diameter-slg/du/pom.xml b/resources/diameter-slg/du/pom.xml index f50b6521d..20b7c4456 100644 --- a/resources/diameter-slg/du/pom.xml +++ b/resources/diameter-slg/du/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-ra-DU diff --git a/resources/diameter-slg/events/pom.xml b/resources/diameter-slg/events/pom.xml index 98d8df456..79ca3f0d4 100644 --- a/resources/diameter-slg/events/pom.xml +++ b/resources/diameter-slg/events/pom.xml @@ -1,23 +1,11 @@ 4.0.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - - - - org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-events diff --git a/resources/diameter-slg/pom.xml b/resources/diameter-slg/pom.xml index 57e5bcdd4..4e6c2f096 100644 --- a/resources/diameter-slg/pom.xml +++ b/resources/diameter-slg/pom.xml @@ -9,7 +9,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-slg/ra/pom.xml b/resources/diameter-slg/ra/pom.xml index bedf5562d..fcff82360 100644 --- a/resources/diameter-slg/ra/pom.xml +++ b/resources/diameter-slg/ra/pom.xml @@ -1,23 +1,10 @@ 4.0.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - - - - - org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-ra diff --git a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java index 7c7bba61f..758338e3f 100644 --- a/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java +++ b/resources/diameter-slg/ra/src/main/java/org.mobicents.slee.resource.diameter.slg/SLgSessionActivityImpl.java @@ -46,7 +46,7 @@ */ public abstract class SLgSessionActivityImpl extends DiameterActivityImpl implements SLgSessionActivity, StateChangeListener { - private static final long serialVersionUID = 4374137032596394588L; + private static final long serialVersionUID = 1L; protected boolean terminated = false; diff --git a/resources/diameter-slg/ratype/pom.xml b/resources/diameter-slg/ratype/pom.xml index 08e11ce05..a150d62e4 100644 --- a/resources/diameter-slg/ratype/pom.xml +++ b/resources/diameter-slg/ratype/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-ratype diff --git a/resources/diameter-slg/release/pom.xml b/resources/diameter-slg/release/pom.xml index a365a07da..58ce5d67d 100644 --- a/resources/diameter-slg/release/pom.xml +++ b/resources/diameter-slg/release/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-ra-release diff --git a/resources/diameter-slg/testsuite/pom.xml b/resources/diameter-slg/testsuite/pom.xml index ebda2b383..969727735 100644 --- a/resources/diameter-slg/testsuite/pom.xml +++ b/resources/diameter-slg/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slg - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slg-testsuite diff --git a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml index b8470d2f2..415dd2cd9 100644 --- a/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml +++ b/resources/diameter-slh/docs/jdocbook-restcomm/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-docs-jdocbook-restcomm diff --git a/resources/diameter-slh/docs/pom.xml b/resources/diameter-slh/docs/pom.xml index 406834980..9c6beb0a6 100644 --- a/resources/diameter-slh/docs/pom.xml +++ b/resources/diameter-slh/docs/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-docs diff --git a/resources/diameter-slh/docs/sources-restcomm/pom.xml b/resources/diameter-slh/docs/sources-restcomm/pom.xml index 2e05c2640..918296b65 100644 --- a/resources/diameter-slh/docs/sources-restcomm/pom.xml +++ b/resources/diameter-slh/docs/sources-restcomm/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-docs-sources-restcomm diff --git a/resources/diameter-slh/docs/sources/pom.xml b/resources/diameter-slh/docs/sources/pom.xml index 3b7af91c6..d18a9e0da 100644 --- a/resources/diameter-slh/docs/sources/pom.xml +++ b/resources/diameter-slh/docs/sources/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh-docs - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-docs-sources diff --git a/resources/diameter-slh/du/pom.xml b/resources/diameter-slh/du/pom.xml index 3a106d4f9..d4b86bf1f 100644 --- a/resources/diameter-slh/du/pom.xml +++ b/resources/diameter-slh/du/pom.xml @@ -5,7 +5,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-ra-DU diff --git a/resources/diameter-slh/events/pom.xml b/resources/diameter-slh/events/pom.xml index 07361d031..36f9bd1ff 100644 --- a/resources/diameter-slh/events/pom.xml +++ b/resources/diameter-slh/events/pom.xml @@ -3,23 +3,10 @@ 4.0.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - - - - - org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-events diff --git a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java index a2e2efe9b..5cd76da1c 100644 --- a/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java +++ b/resources/diameter-slh/events/src/main/java/org/mobicents/slee/resource/diameter/slh/events/LCSRoutingInfoAnswerImpl.java @@ -117,7 +117,7 @@ public String getUserName() { */ @Override public void setUserName(String imsi) throws IllegalStateException { - addAvp(LCSRoutingInfoAVPCodes.USER_NAME, imsi); + addAvp(LCSRoutingInfoAVPCodes.USER_NAME, 0, imsi); } /* diff --git a/resources/diameter-slh/pom.xml b/resources/diameter-slh/pom.xml index 9cf7d48f8..a8422f76c 100644 --- a/resources/diameter-slh/pom.xml +++ b/resources/diameter-slh/pom.xml @@ -9,7 +9,7 @@ org.mobicents.servers.jainslee.diameter restcomm-slee-diameter - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT ../.. diff --git a/resources/diameter-slh/ra/pom.xml b/resources/diameter-slh/ra/pom.xml index 94ab95186..80bd5d6d5 100644 --- a/resources/diameter-slh/ra/pom.xml +++ b/resources/diameter-slh/ra/pom.xml @@ -3,23 +3,10 @@ 4.0.0 - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.6 - 1.6 - - - - - org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-ra diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java index eeb787e1b..ac4637351 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhClientSessionActivityImpl.java @@ -45,7 +45,7 @@ */ public class SLhClientSessionActivityImpl extends SLhSessionActivityImpl implements SLhClientSessionActivity { - private static final long serialVersionUID = 6391181777305378777L; + private static final long serialVersionUID = 1L; protected transient ClientSLhSession clientSLhSession; diff --git a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java index b36d42d74..adc905277 100644 --- a/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java +++ b/resources/diameter-slh/ra/src/main/java/org/mobicents/slee/resource/diameter/slh/SLhSessionActivityImpl.java @@ -46,7 +46,7 @@ */ public abstract class SLhSessionActivityImpl extends DiameterActivityImpl implements SLhSessionActivity, StateChangeListener { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 4374137032596394588L; protected boolean terminated = false; diff --git a/resources/diameter-slh/ratype/pom.xml b/resources/diameter-slh/ratype/pom.xml index 986d88385..b882a5cda 100644 --- a/resources/diameter-slh/ratype/pom.xml +++ b/resources/diameter-slh/ratype/pom.xml @@ -6,7 +6,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-ratype diff --git a/resources/diameter-slh/release/pom.xml b/resources/diameter-slh/release/pom.xml index aa3dd689e..9940690a9 100644 --- a/resources/diameter-slh/release/pom.xml +++ b/resources/diameter-slh/release/pom.xml @@ -7,7 +7,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-ra-release diff --git a/resources/diameter-slh/testsuite/pom.xml b/resources/diameter-slh/testsuite/pom.xml index bc8cdaaf7..9c12dd50e 100644 --- a/resources/diameter-slh/testsuite/pom.xml +++ b/resources/diameter-slh/testsuite/pom.xml @@ -4,7 +4,7 @@ org.mobicents.resources restcomm-slee-ra-diameter-slh - 7.2.0.SNAPSHOT + 7.2.1-SNAPSHOT restcomm-slee-ra-diameter-slh-testsuite